前言
学习建立-保持时间,参考网上资料以及课件,做了简单梳理以加深理解。
一、建立-保持时间
1、建立-保持时间是FPGA里寄存器固有的一种属性,以D触发器为例,建立-保持时间主要是针对D触发器输入端来说的;
2、建立时间,在时钟上升沿到来之前,寄存器输入端数据需要保持稳定的时间,否则进入寄存器时可能会出现逻辑电平错误;
3、保持时间,在时钟上升沿到来之后,寄存器输入端数据需要保持稳定的时间(我的理解是,数据从D端到Q端也需要时间,若在时钟上升沿后,输入端数据不稳定,则传递到Q端的数据也有概率出错);
4、逻辑设计中若是建立-保持时间不满足,则会出现时序问题,造成整体逻辑无法正常工作。
二、建立-保持时间分析
1.建立时间
(1)参考图2.1,以2级D触发器为例分析,clk是两者公用时钟,到达reg1时有时钟路径延迟为clk1,到达后级reg2时为clk2,存在更长延时;
(2)参考图2.2,以阴影表示的数据为例进行分析,该数据到达reg1的输入D端时,等待clk1时钟上升沿到来。
- 在clk1时钟上升沿到来后,Tco是clk-to-output,即数据从D端传输到Q端所需时间;
- Tdelay是数据从reg1的Q端经组合逻辑以及布线延迟最终到达reg2的输入D端所需要的时间;
- 站在reg2的角度看,对于阴影标识的数据,在clk第一个上升沿时,进入了reg1,由于以上多种时间延迟,阴影标识的数据可在clk第二个上升沿到来时进入reg2,因此建立时间可针对reg2的输入D端进行分析。
(3)由图2.2图示可得,Tpd2+Tclk=Tpd1+Tco+Tdelay+slack+Tsetup
- Tpd2为clk到reg2时钟输入端的延时;
- Tclk是时钟的周期;
- Tpd1为clk到reg1时钟输入端的延时;
- Tco为数据从reg1-D端到reg1-Q端的延时;
- Tdelay为数据由reg1的Q端经组合逻辑和布线路径的传输至reg2的D端延时;
- slack即为reg2建立时间的设计余量;
- Tsetup为reg2触发器的建立时间;
(4)由于建立时间必须要有余量,因此slack必须大于0,若Tdelay时间过长,则会出现建立时间不满足的问题。
图2.1 2级D触发器
图2.2 建立-保持时间分析
2.保持时间
(1)参考图2.2,以reg1输入D端开始分析,观察reg1-D第二段无阴影标识的波形;
(2)分析可得,与阴影标识的数据波形同理,clk的时钟延时Tpd1后,为clk1的上升沿,reg1-D采集数据,经Tco后数据到达reg-1Q端,经组合逻辑及布线延迟后到达reg2的D端;
(3)以reg2输入D端分析,在无阴影标识的数据到来前,D端的数据是阴影标识的数据,而阴影数据需要一定的保持时间;
(4)因此,Tpd2+Thold+slack=Tpd1+Tco+Tdelay
- Tpd2为clk到reg2时钟输入D端的延时;
- Thold为触发器的建立时间;
- slack即为保持时间的设计余量;
- Tpd1为clk到reg1时钟输入D端的延时;
- Tco为数据从reg1-D端到reg1-Q端的延时;
- Tdelay为数据由reg1的Q端经组合逻辑和布线路径的传输至reg2的D端延时;
(5)由于保持时间必须要有余量,因此slack必须大于0,因此若Tdelay过短,则无法满足触发器保持时间要求。
总结
建立-保持时间通常是在对逻辑设计进行时序分析时会暴露出来的时序问题,一般两寄存器之间组合逻辑复杂以及走线过长时,就会出现建立时间不满足的问题。一般出现建立-保持时间不满足的问题,需要对逻辑路径进行优化。