Setup Time与Hold Time
1、register-to-register模型
CLK是源寄存器(Source)和目的寄存器(Destination)的时钟源头,在SDC中一般用create_clock/create_generated_clock定义。
A点表示CLK的出口,B点表示源寄存器的CK端,C表示目的寄存器的CK端,D表示源寄存器的Q端,E表示目的寄存器的D端。在实际的电路实现(FPGA/ASIC)中,因为布局布线产生的线延时和组合逻辑产生的CELL延时,让电路实现起来不那么理想。
D0`指的是D0经过了组合逻辑之后的单bit数据。数字实现中,为了保证目的寄存器可以成功采样源寄存器发送的数据,用setup time和hold time来判断是否满足时序要求。
Setup time指的是在时钟触发寄存器采样(上升沿或下降沿,取决于寄存器)前数据必须稳定保持的最小时间,以保证数据能被时钟正确的采样。
Hold Time指的是在时钟触发寄存器采样(上升沿或下降沿,取决于寄存器)后数据必须稳定保持的最小时间,以保证数据能被时钟正确的采样。
Launch edge指的是源寄存器CK端发送数据的时刻,Capture edge指的是目的寄存器CK端接收数据的时刻,用于理想情况下(时钟和数据都没有延时)。
2、setup time
Setup Relationship是理想时钟下launch edge和capture edge之间setup关系。在图表 2‑1中源寄存器和目的寄存器用同一个源时钟且上升沿触发,setup relationship就是CLK的时钟周期。例如CLK为100MHz,setup relationship为10ns。
以时钟源CLK作为起点,数据的实际到达目的寄存器D端的时间(Data Arrival Time)为:
Data Arrival Time(Setup)= launch edge time + source clock path delay + data path delay =Tck1+Tco+Td
假定launch edge time是在0ns时刻,capture edge time就是在Tclk时刻,Tclk表示时钟周期,因为capture edge time-launch edge time=setup relationship=Tclk。
以时钟源CLK作为起点,数据实际被采样的时间(Data Require Time)为:
Data Require Time(Setup)= capture edge time + destination clock path delay – clock uncertainty-Destination Setup Time =Tck2+Tclk-Tuncertainty-Tsetup
为了满足目的寄存器的时序要求,数据的实际到达目的寄存器D端的时间(Data Arrival Time)必须比数据实际被采样的时间(Data Require Time)早Tsetup以上,Tsetup由寄存器库的特性决定。因此Setup的裕量(slack)为:
Setup Slack=Data Require Time(Setup)-Data Arrival Time(Setup)= Tck2+Tclk-Tuncertainty-Tck1-Tco-Td-Tsetup= Tskew +Tclk-Tuncertainty-Tco-Td-Tsetup
Tck2-Tck1称为时钟偏移(skew),用Tskew表示。Setup Slack必须大于0才能满足目的寄存器的setup time要求。
Tuncertainty包括时钟抖动(jitter)和人为设定的裕量(margain)。时钟抖动和时钟自身质量以及传输过程有关
如果Setup Time有了violation,可以采取的措施有:
1)优化DFF间的组合逻辑,使其路径减少(减少Td);
2)在组合逻辑中再加一个寄存器,将组合逻辑变成2条路径(减少Td);
3)将目的寄存器的时钟通过增加线长度和插入clk buffer往后延(增加Tskew);
4)降频(增加Tclk)。
3、hold time
Hold Relationship是理想时钟下launch edge和capture edge之间hold关系。在图表1-2中源寄存器和目的寄存器用同一个源时钟且上升沿触发,hold relationship就是为0。
以时钟源CLK作为起点,数据的实际到达目的寄存器D端的时间(Data Arrival Time)为:
Data Arrival Time(Hold)= launch edge time + source clock path delay + data path delay=Tck1+ Tco+Td
假定launch edge time是在0ns时刻,capture edge time就是在0ns时刻因为capture edge time-launch edge time=hold relationship=0。
与setup time的一样,区别是setup time中的Data Arrival Time指的是capture edge上一个cycle的,hold time中的Data Arrival Time指的是capture edge同一个cycle的,但是值相等。
以时钟源CLK作为起点,数据实际被采样的时间(Data Require Time)为(见图表1-2):
Data Require Time(Hold)= capture edge time + destination clock path delay+clock uncertainty+destination hold time = Tck2+Tuncertainty+Thold
和Tsetup一样,Thold由寄存器库的特性决定。为了满足目的寄存器的时序要求,新数据的实际到达目的寄存器D端的时间(Data Arrival Time)必须比旧数据实际被采样的时间(Data Require Time)晚Thold以上
Hold Slack=Data Arrival Time(Hold)-Data Require Time(Hold)=Tck1+ Tco+Td- Tck2-Tuncertainty-Thold=Td+Tco-Tskew-Tuncertainty-Thold
Hold Slack必须大于0才能满足目的寄存器的hold time要求。
Hold Time的违例(violation)的处理办法为:
1)增加源寄存器Q端到目的寄存器D端的延时;
2)减少时钟偏移(skew)。
但是这两种方法都是以牺牲setup slack作为代价。Hold Slack与Tclk(时钟周期)无关,无法通过降频/提频的方式收敛,因此signoff时不能降低hold的标准,宁可牺牲setup time导致正常工作频率低,否则电路无法工作(DFF采错数据)。
内有小猪卖: 博主整理的很好! 非常适合认真看。发现一个笔误,如下 “上述定义A1到A2之间的时序路径的约束最大延时8ns最小延时6ns。”这里的6ns 应该是5ns
INNIIG: 您好,请问前面介绍create_clock语句中的示例【get_ports2 clk】,请问这个2是写错了吗 还是有什么意义
出阿册巫山: 还是不行怎么办,那个文件里面本来就是true
lznjsid: 感激不尽
选颗糖: 超级感谢!!我本来是访问映射网络驱动器提示本地设备名已在使用中,此连接尚未还原的问题,然后发现ubuntu网络图标消失,没有网,ifconfig也看不到ip,使用博主方法让虚拟机连网后,映射网络驱动器又能正常使用了!!开心~~