没有任何寄存器逻辑,RTL设计是不完整的。RTL是寄存器传输级或逻辑,用于描述依赖于当前输入和过去输出的数字逻辑。
在异步计数器中,时钟信号不由公共时钟源驱动。如果LSB触发器的输出作为后续触发器的输入,则设计是异步的。异步设计的主要问题是由于级联,触发器的累积时钟到q延迟。由于存在小故障或尖峰问题,ASIC/FPGA设计中不建议使用异步计数器,甚至此类设计的时序分析也非常复杂。
所以接下来只介绍一种计数器
波纹计数器Ripple Counters
纹波计数器是一个异步计数器,如图5.33所示。如逻辑图所示,所有触发器均为正边缘触发,LSB寄存器从主时钟源接收时钟。LSB触发器的输出作为下一级的时钟输入。
图5.33三位纹波计数器逻辑图
四位纹波递增计数器的Verilog RTL如例5.18所示。综合逻辑如图5.34所示。
示例5.18四位纹波递增计数器的Verilog RTL
图5.34四位纹波递增计数器的综合逻辑
内存模块设计
在大多数ASIC/FPGA设计和基于SoC的设计中,存储器用于存储二进制数据。存储器可以是ROM、RAM、单端口或双端口类型。本节的目的是描述基本的单端口读写存储器。时序如图5.35所示。
如时序所示,读写操作由“rd_wr”控制,如果“cs”为高电平,则在时钟信号“clk”的正边缘对数据进行采样。地址输入由总线“address”描述。
单端口读写存储器的Verilog RTL如例5.19所示。
图5.35存储器的时序
示例5.19读写存储器的Verilog RTL
时序逻辑设计简单总结
下面是总结时序逻辑设计的要点。
- 锁存器对电平敏感,在设计中不推荐使用。
- 触发器是边缘触发的,建议在设计中使用。
- 触发器使用程序块“‘always”进行描述,并由“posedge clk”或“negedge clk”触发。
- 二进制计数器可以使用同步设计概念或异步设计概念进行设计
- 格雷码计数器可以通过使用二进制计数器和附加组合逻辑来设计。
- 设计中推荐使用同步计数器,因为STA分析很容易,而且不容易出现故障。
- 异步计数器容易出现小故障或尖峰,因此不建议在ASIC/FPGA设计中使用。
- 使用移位寄存器可以设计特殊计数器,如ring和Johnson。
- 可通过使用Verilog RTL执行读写操作来描述存储器。
原文:OpenFPGA
作者:碎碎思
相关文章推荐
更多FPGA技术干货请关注FPGA 的逻辑技术专栏。