一、概念
Launch_edge: 触发沿,触发时钟的上升沿延迟
Latch_edge:锁存沿,锁存时钟的上升沿延迟,和触发沿相隔一个周期
二者只是两个标记,之差等于一个时钟周期。
二、原理
核心目的:某一个寄存器的数据传输不能受影响。这个数据要早来晚走。
建立时间指的是数据不能来得太晚
保持时间指的是数据不能走的太早
数据建立要足够快,在时钟到来之前就准备好。
又要足够慢,在上一个数据还没建立好之前这个数据不能到。
假设我们又两个寄存器D1,D2,上升沿1,上升沿2
上升沿1之前 : D1 = D2 = 0
上升沿1 : D1 = 1 D2 = 0
上升沿2 : D1 = 0 D2 = 1
这是我们想要传送的结果——经过两个上升沿,把数据传给D2,最终D2应该是1.
(我们要干的主要事情是,改变第一个寄存器的值,并且把值传递给第二个寄存器。)
如果setup时间太长,第一个上升沿D2可以接受数据了,但数据还没到,结果D2只能是0。
如果hold时间太短,D2已经在上升沿采样到1了,结果被D1的0给取代了,结果D2也是0.
这两种情况都是数据传输失败。
虽然理解原理的时候,我们解释了两个寄存器之间的数据传输,但实际上setup和hold都是针对同一个寄存器而言的。
数据传送主要有4条路径
Input pin/port -> Sequential element
Sequential element -> Sequential element
Sequential element -> Output pin/port
Input pin/port -> Output pin/port
三、示例
Data Arriving Time
path1 : T_DAT = launch_edge + T_inputdelay + T_data
path2 : T_DAT = launch_edge + T_clk + T_co + T_data
path3 : T_DAT = launch_edge + T_clk + T_co + T_data + T_outputdelay
Clock Arriving Time
T_CAT = latch_edge(T_cycle) + T_clk
Data Require Time
setup required time :T_SRT = T_CAT - T_setup - T_clku
hold required time :T_HRT = T_CAT - T_hold - T_clku
Slack
setup T_sSlacks = T_SRT - T_DAT
hold T_hSlack = T_DAT - T_HRT
几点说明:
1.T_clk(T_clks + T_clkn)
2.T_cycle = latch edge - launch edge 。所以CAT指的是一个时钟周期 + 时钟的两个延时
3.只有T_data是可以改变的,通过改变组合逻辑来实现
4.时钟到达时间是对于所有传输路径都是固定的,因为时钟是统一的
5.在数据到达时间和时钟到达时间其中都有T_clk这个变量,如果不考虑skew(两个寄存器之间的时时钟偏差),这两个量应该是相同的,它不表示某一时刻的时钟数值,而是表示从一个共同的起点(launch/latch edge)开始计算的时钟延迟。