verilog状态机控制led闪烁

一、功能

用三段式状态机控制LED,按键,按下是0.5s闪烁一次,再次按按键A是1s闪烁。

二、状态机转移图

 verilog状态机控制led闪烁_第1张图片

三、连线

verilog状态机控制led闪烁_第2张图片

 

 led_state描述状态机,key_test检测按键信号,前者作为顶层调用后者。

 四、描述状态机要注意的问题

此处利用三段式描述。参考如下:

https://blog.csdn.net/scottly1/article/details/48802921

https://www.cnblogs.com/flyuea/p/8421939.html

verilog状态机控制led闪烁_第3张图片

 

verilog状态机控制led闪烁_第4张图片

 

 1、要注意第二段组合逻辑,要用阻塞赋值。描述状态转移时的if一定要写完全。不然就会出错。WARNING什么产生了latch。一定要避免。

verilog状态机控制led闪烁_第5张图片

 2、第三段时序逻辑没有加那个if里面的rst_n复位,在modelsim里面看不出问题,但是烧到板子上就不对了。要注意不能掉了。

verilog状态机控制led闪烁_第6张图片

计数:

verilog状态机控制led闪烁_第7张图片

 

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型,就不能对其直接赋值,这个矛盾也弄了好久。

 verilog状态机控制led闪烁_第8张图片

五、弄了两整天终于调成功了,,,

verilog状态机控制led闪烁_第9张图片

 

 

 

 

转载于:https://www.cnblogs.com/zlll/p/9610827.html

你可能感兴趣的:(verilog状态机控制led闪烁)