前言
FPGA设计中,要想设计达到想要的效果,需要对时序约束加以重视,
一、时钟和数据传输路径
根据上图,有以下关键点:
- 数据总是从一个D 触发器(reg1)传到另一个D 触发器(reg2),我们称数据发出D 触发器为源寄存器,数据接收D 触发器为目的寄存器。
- 数据在传输过程中,可能参与多次组合逻辑变换
- 数据在传输过程中,需要经过可编程互联线传递
- 分析信号在两个寄存器之间的传递时,需要保证这两个寄存器的时钟信号是同源时钟。
二、建立时间,保持时间,输出延迟
对于实际的D 触发器来说,为了保证在时钟的上升沿能够正确的将D 端的数据寄存并输出到Q 端,需要满足以下几点:
- D 端的数据必须在时钟上升沿到来之前的一定时间内就已经保持稳定,该时间被称为D 触发器的建立时间(Tsu)
- D 端的数据必须在时钟上升沿到来之后的一定时间内继续保持稳定,该时间被称为D 触发器的保持时间(Th)
- 同时,对于D 触发器来说,D 端的数据也不可能会在时钟上升沿出现的那一刻就立即更新到Q 端,从钟的上升沿到D 端的数据稳定出现在Q 端,也有一个时间,该时间称为寄存器的时钟到输出延迟(Tco)
三、FPGA内数据传输典型时序
- 数据存在于reg1的D端口上,当时钟上升沿到达reg1时,进过Tco时间,D端数据才会到达reg1的Q端
- reg1的Q端数据经过内部可编程连线,和组合逻辑后,到达reg2,即目标寄存器,所需时间为Tdata。
数据到达时间(data arrived time):clk上升沿+Tclk1+Tco+Tdata
目的寄存器时钟到达时间(clock arrive time):下一次clk上升沿+Tclk2
正确接收数据,则需要Tsu+clk上升沿+Tclk1+Tco+Tdata>下一次clk上升沿+Tclk2,
其中:下一次clk上升沿-clk上升沿=时钟周期
即:Tclk1+Tco+Tdata>时钟周期+Tclk2
data required time = clock arrive time - Tsu
建立时间余量:data required time - data arrived time