一、功能
用三段式状态机控制LED,按键,按下是0.5s闪烁一次,再次按按键A是1s闪烁。
二、状态机转移图
三、连线
led_state描述状态机,key_test检测按键信号,前者作为顶层调用后者。
四、描述状态机要注意的问题
此处利用三段式描述。参考如下:
https://blog.csdn.net/scottly1/article/details/48802921
https://www.cnblogs.com/flyuea/p/8421939.html
1、要注意第二段组合逻辑,要用阻塞赋值。描述状态转移时的if一定要写完全。不然就会出错。WARNING什么产生了latch。一定要避免。
2、第三段时序逻辑没有加那个if里面的rst_n复位,在modelsim里面看不出问题,但是烧到板子上就不对了。要注意不能掉了。
计数:
3、模块实例化的端口问题
要注意,调用子模块时,输出端口只能用wire类型的变量进行映射,用reg型就会报错。参考如下:
https://wenku.baidu.com/view/5fb13873ba1aa8114431d9e6.html
https://zhidao.baidu.com/question/1447007111844219620.html
比如我这个例子中,led_state里面接受key_tes输出端口flag_key的变量key_flag就只能是wire型,就不能对其直接赋值,这个矛盾也弄了好久。
五、弄了两整天终于调成功了,,,