两个边沿,只是一种命名方式,不需要太在意其中的意义
中心思想是要以两个CLK为起点来进行计算。
数据到达时间,从launch edge开始,到第二个寄存器D有数据的时间
而时钟到达时间是capture edge到达的时间,仅和时钟延时有关
因此我们可已得到数据的要求时间(SETUP,HOLD),就是capture edge分别减去Tsu(SETUP);和加上Thd(HOLD)
时钟要求时间减去我的时钟到达时间就是时钟余量(SETUP)
注意此时的数据要求时间是一个周期时间+capture时钟延时-Tsu。有一个时钟周期在里面。
而对于时钟HOLD的时间余量而言,按照上面这么算的话数据到达时间貌似要算两个周期,不如从第二个时钟到达开始算起,这样数据到达时间和SETUP计算方法保持一致,只要用数据到达时间减去数据要求时间(capture时钟的延时+Th,注意这里没有时钟周期)即可。
插一句,如果LAUNCH时钟和CAPTURE时钟同时到达,则系统的最小时钟周期是:
Ts=Tco+Tdata+Tsu
这样我们就能算出系统最大时钟频率。
关键路径:
建立时间根据最大延时路径来算
保持时间根据最小延时路径来算
保持时间不满足有可能是因为延时太小了,可以增加buffer,可是会被综合掉的,不如直接交给vivado重新综合,一般都可以解决的。
复位时钟
复位一般是采用异步复位的,这样大概率是无法满足时序要求的。
我们可以通过recovery关键词在报表中查找,也可以通过时序报告中两条路径最后寄存器的名字来分辨。
数据到达时间算到寄存器的D端,数据要求时间算到寄存器的C端,然后加/减FDCE时间要求算到该寄存器,可以看上文SLACK图,这就是一般情况:
而异步复位算数据到达时间会算到CLR端,这种情况虽然不满足时序需求,但是不需要考虑。
OUTPUT DELAY
对于输出器件,软件将其当成capture寄存来处理。注意OUTPUT DELAY这个参数,本来可以作为线路延时来算,这样会影响工程师对线路延时的分析。vivado把它作为被减数转换成了数据时间要求,其实是一样的。