2.5 延时电路设计思想
在日常的电路设计中,有时人们需要对信号进行延时处理来适应对外接口的时序关系,最经常也是最典型的情况是做处理机的接口,因为输入数据与处理机的接口时序是异步的,而一个规范的FPGA设计要求尽可能采用同步设计。那么遇到这种情况该如何处理呢?
首先在FPGA中要产生延时,信号必须经过一定的延时电路。在硬件描述语言中有关键词wait for xx ns,但该语法仅用于仿真,是不能被综合的,可综合的延时方法如下:
(1)使信号经过逻辑门得到延时(如非门)。
(2)使用器件提供的延时单元(如Altera公司的LCELL、Xilinx公司的触发器)。
注意:当使用多级非门时综合器往往会将其优化掉,因为综合器会认为一个信号经两级非门后不变。
需要说明的是,在FPGA/CPLD内部延时电路结构由一种标准的宏单元描述,图2-39是Xilinx公司Spartans II系列器件的一个标准宏单元。虽然不同厂家的芯片的宏单元结构不同,但总的来说都是由一些组合逻辑外加一个或两个触发器构成的。在实际应用中,当一个模块内的组合逻辑被使用了,那么与其对应的触发器也就不能用了。同样,如果触发器单元被使用了,那么组合逻辑单元也就不能用了。这就是有时(特别是使用CPLD)虽然设计使用的资源并不多但布局布线器却报告资源不够用的原因。
图2-39 用于延时的电路结构
当需要对某一信号做一段延时时,初学者往往在此信号后串接一些非门或其他门电路,此方法在分离电路中是可行的。但在FPGA中,开发软件在综合设计时会将这些门当做冗余逻辑去掉,达不到延时的效果。用Altera公司的MAX+plusII开发FPGA时,可以通过插入一些LCELL原语来产生一定的延时,但这样形成的延时在FPGA芯片中并不稳定,会随温度等外部环境的改变而改变,因此并不提倡这样做。在此,可以用高频时钟来驱动一个移位寄存器,待延时信号作为数据输入,按所需延时正确设置移位寄存器的级数,则移位寄存器的输出即为延时后的信号。此方法产生的延时信号与原信号相比有误差,误差大小由高频时钟的周期来决定。对于数据信号的延时,在输出端用数据时钟对延时后的信号重新采样,即可以消除误差。
对于需要对输入信号进行大的延时时建议采用时钟锁存来产生延时,当一个信号用时钟锁存一次时,将会占用一个触发器资源,信号会向后推移一个时钟周期。如图2-39所示的电路采用32MHz,时钟对输入信号进行3级锁存延时,每用时钟锁存一次ssp信号就会推移31ns,这样只需多使用3个触发器资源就可以达到目的了。仿真波形如图2-40所示。
图2-40 时序波形图