【重拾FPGA】分开时序和组合逻辑,让写代码思路更清晰

感谢锆石科技。

学了一下锆石科技的按键消抖,真的是突然豁然开朗,收益匪浅。锆石科技代码风格就是将时序逻辑和组合逻辑分开,用类似于状态机的方式赋值,这样真的,让我思路很清晰,逻辑条理也很好,不容易因为赋值问题出现bug。可能是我太菜了呜呜呜。

我就写一下这个计数20ms的按键消抖程序吧。

首先是变量定义,因为要分开时序和组合来写,因此要定义的变量有点多,且都是经过了一个D触发器的:

input clk;
input rst_n;
input key;
	
output led;  //输出led,信号与key_out连接,组合逻辑
	
reg [20:0] time_cnt;  //20ms计数器,时序逻辑
reg [20:0] time_cnt_next;  //计数器下一个状态值,组合逻辑
reg key_in_r;  //按键输入寄存,时序逻辑
reg key_out;  //消抖后的按键输出,时序
reg key_out_next;  //按键输出的下一个状态,组合
	 
wire key_press;  //检测按键按下,组合
	
parameter SET_TIME_20MS = 21'd1_000_000;  //20ms的计数值

通过RTL可以发现,时序逻辑要用的当前状态都是由next状态经过D触发器所得

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值