【重拾FPGA】读锆石科技硬件语法篇有感

最近一直在学习FPGA编程的思想,如何才能让自己摆脱C语言,做到眼中代码,心中电路,这是我最近一直在思考的问题。读了一下锆石科技的FPGA硬件语法篇后,我发现了很多自己平时写Verilog时没有注意到的地方,带有C语言影子的地方,在这里总结一下,希望自己在日后写Verilog时不要再犯了

摆脱C语言!!!

1.三段式状态机

【重拾FPGA】读锆石科技硬件语法篇有感_第1张图片

图来自锆石科技。

可见,对于状态机的状态编码,我们应该使用格雷码,还记得数电课老师说格雷码一次只改变一位,一直不知道有什么用,现在真的是恍然大悟!这样可以避免毛刺,避免因为两位变化不同步而进入错误状态!

然后对于三段式状态机

第一段:时序逻辑,使当前状态变为下一状态

第二段:组合逻辑,根据条件改变下一状态

第三段:组合逻辑,根据状态条件写输出

然后使用一个D触发器来寄存输出值,这一点下文会讲

 

2.使用D触发器来寄存值,使时序逻辑和组合逻辑分开

在Verilog中,时序电路用非阻塞赋值 <= ,组合逻辑使用阻塞赋值 = ,当电路较大时,容易分不清楚导致时序混乱,使用D触发器来将其分开,是一种不错的办法,如下图:

【重拾FPGA】读锆石科技硬件语法篇有感_第2张图片

led_reg_n是组合逻辑中改变的,我们在组合逻辑中对其进行改变值得操作,然后在时序逻辑中,将其通过D触发器赋值给led_reg,便实现了分离。

又如同这个计数器得写法:

【重拾FPGA】读锆石科技硬件语法篇有感_第3张图片

这样的有点引用锆石科技的话:

【重拾FPGA】读锆石科技硬件语法篇有感_第4张图片

所以,请记住改变值用组合逻辑!然后再通过D触发器时序逻辑传出去!

你可能感兴趣的:(重拾FPGA)