首页 理论教育 FPGA系统设计:时序逻辑电路设计的注意事项

FPGA系统设计:时序逻辑电路设计的注意事项

时间:2026-01-26 理论教育 东北妞 版权反馈
【摘要】:在设计时序逻辑电路的时候,有一些需要牢记的注意事项。时序逻辑电路意味着一定有信号的敏感列表,既包括像时钟、重置、置数等信号的边沿触发,也包括别的电平信号的触发。仿真的时候,设置clk的周期为4ns,图17.14是仿真的结果。例17.13:两个计数器级联。因为你把clk和carry的与操作,产生了一个门控时钟,这是不允许的。

在设计时序逻辑电路的时候,有一些需要牢记的注意事项。

(1)时序逻辑电路意味着一定有信号的敏感列表,既包括像时钟、重置、置数等信号的边沿触发,也包括别的电平信号的触发。尽量的保证,信号的敏感列表只涉及同步触发时钟和异步复位信号;

(2)不要在不同的always块里尝试对同一个信号赋值。因为这样做会很容易出现信号的冲突,而且这样做经常是无法综合通过的。尽量的保证,对一个信号的赋值只出现在一个always块里;

(3)如果要进行计数,而且计数器要计数到一个很大的数,可以采用多个计数很短的计数器串联的方式;

举一个例子,假设我们要对时钟clk计数一千次,产生一个触发信号cout来控制系统做下一个动作,正常思路的写法就是设计一个计数1000个时钟的计数器counter,如下:

例17.12:使用一个计数器计数1000。

图示

仿真的时候,设置clk的周期为4ns,图17.14是仿真的结果。在计数到1000的时候,产生了一个触发脉冲cout。(注:下图由于计数太长,所以clk视觉上压缩了,看不清clk细节。)

图示

图17.14 计数器计数1000仿真的结果

实际上,我们可以用几个计数器串联来实现计数一个很大的数。(https://www.xing528.com)

例17.13:两个计数器级联。

图示

上面这个例子,用了两个计数器counter1和counter2,counter1计数满8位以后,生成一个carry进位信号,由carry信号控制counter2计数器工作

比如说你要使用16位的计数器,因为位数太多了,这种计数器消耗的资源很大,而且在运行速度上受到很大影响。如果使用两个8位计数器级联,则消耗的资源减少了很多。甚至可以考虑尝试使用4个4位计数器的级联形成一个16位的计数器。

(4)如果需要在同步时序电路产生一定的延迟,若采用“#2 a=b;”这种方式是没法实现综合时延迟的,因为延迟语句没法综合。那么最常用的方法就是使用分频器或者使用同步计数器来产生延迟。如果是要产生某个特殊的定时要求的延时,就得使用高速时钟生成一个计数器来产生延迟。如果仅仅是大致上需要模糊一点的延迟,就多加一两级的D触发器;

(5)时钟的使用上要注意避免门控时钟的出现。什么意思呢?比如有个系统时钟clk。假如现在有个信号carry高电平来了,打算做某个动作,你不能使用下面这种方式:

图示

为什么不能使用上面这种方式?因为你把clk和carry的与操作,产生了一个门控时钟,这是不允许的。你应该这样做:

图示

图示

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈