好的,这是什么?
本页是另一篇帖子的示例部分,解释了 SDC 时序约束中 set_input_delay 和 set_output_delay 的含义。
TimeQuest (Quartus的时序 analyzer(timing analyzer))在四 corners 中执行时序分析(最高和最低温度,结合最高和最低电压)。对于每条路径(path), TimeQuest 选择具有最差 slack的 corner 的结果。在下面的示例中,显示了这四 corners 的最坏情况。因此,出现在 FPGA 逻辑单元中的时延(delays)的数字与一个时序报告(timing report)不同。
我的另一篇文章讨论了时序报告(timing reports)的创建,如下所示。
根据其他帖子,以下示例背后的时序约束(timing constraints)是:
create_clock -name theclk -period 20 [get_ports test_clk] set_output_delay -clock theclk -max 8 [get_ports test_out] set_output_delay -clock theclk -min -3 [get_ports test_out] set_input_delay -clock theclk -max 4 [get_ports test_in] set_input_delay -clock theclk -min 2 [get_ports test_in]
set_input_delay -max (setup)解析
Delay Model: Slow 1100mV 0C Model +------------------------------------------------------------------------------------------------------+ ; Summary of Paths ; +--------+-----------+-----------+--------------+-------------+--------------+------------+------------+ ; Slack ; From Node ; To Node ; Launch Clock ; Latch Clock ; Relationship ; Clock Skew ; Data Delay ; +--------+-----------+-----------+--------------+-------------+--------------+------------+------------+ ; 12.341 ; test_in ; test_samp ; theclk ; theclk ; 20.000 ; 3.940 ; 7.499 ; +--------+-----------+-----------+--------------+-------------+--------------+------------+------------+ Path #1: Setup slack is 12.341 =============================================================================== +--------------------------------+ ; Path Summary ; +--------------------+-----------+ ; Property ; Value ; +--------------------+-----------+ ; From Node ; test_in ; ; To Node ; test_samp ; ; Launch Clock ; theclk ; ; Latch Clock ; theclk ; ; Data Arrival Time ; 11.499 ; ; Data Required Time ; 23.840 ; ; Slack ; 12.341 ; +--------------------+-----------+ +---------------------------------------------------------------------------------------+ ; Statistics ; +---------------------------+--------+-------+-------------+------------+-------+-------+ ; Property ; Value ; Count ; Total Delay ; % of Total ; Min ; Max ; +---------------------------+--------+-------+-------------+------------+-------+-------+ ; Setup Relationship ; 20.000 ; ; ; ; ; ; ; Clock Skew ; 3.940 ; ; ; ; ; ; ; Data Delay ; 7.499 ; ; ; ; ; ; ; Number of Logic Levels ; ; 1 ; ; ; ; ; ; Physical Delays ; ; ; ; ; ; ; ; Arrival Path ; ; ; ; ; ; ; ; Clock ; ; ; ; ; ; ; ; Clock Network (Lumped) ; ; 1 ; 0.000 ; ; 0.000 ; 0.000 ; ; Data ; ; ; ; ; ; ; ; IC ; ; 2 ; 2.447 ; 33 ; 0.000 ; 2.447 ; ; Cell ; ; 2 ; 5.052 ; 67 ; 0.652 ; 4.400 ; ; Required Path ; ; ; ; ; ; ; ; Clock ; ; ; ; ; ; ; ; Clock Network (Lumped) ; ; 1 ; 3.940 ; 100 ; 3.940 ; 3.940 ; +---------------------------+--------+-------+-------------+------------+-------+-------+ Note: Negative delays are omitted from totals when calculating percentages +-----------------------------------------------------------------------------------+ ; Data Arrival Path ; +----------+---------+----+------+--------+-------------------+---------------------+ ; Total ; Incr ; RF ; Type ; Fanout ; Location ; Element ; +----------+---------+----+------+--------+-------------------+---------------------+ ; 0.000 ; 0.000 ; ; ; ; ; launch edge time ; ; 0.000 ; 0.000 ; ; ; ; ; clock path ; ; 0.000 ; 0.000 ; R ; ; ; ; clock network delay ; ; 4.000 ; 4.000 ; F ; iExt ; 1 ; PIN_AP17 ; test_in ; ; 11.499 ; 7.499 ; ; ; ; ; data path ; ; 4.000 ; 0.000 ; FF ; IC ; 1 ; IOIBUF_X48_Y0_N58 ; test_in~input|i ; ; 8.400 ; 4.400 ; FF ; CELL ; 1 ; IOIBUF_X48_Y0_N58 ; test_in~input|o ; ; 10.847 ; 2.447 ; FF ; IC ; 1 ; FF_X48_Y2_N40 ; test_samp|asdata ; ; 11.499 ; 0.652 ; FF ; CELL ; 1 ; FF_X48_Y2_N40 ; test_samp ; +----------+---------+----+------+--------+-------------------+---------------------+ +-------------------------------------------------------------------------------+ ; Data Required Path ; +----------+---------+----+------+--------+---------------+---------------------+ ; Total ; Incr ; RF ; Type ; Fanout ; Location ; Element ; +----------+---------+----+------+--------+---------------+---------------------+ ; 20.000 ; 20.000 ; ; ; ; ; latch edge time ; ; 23.940 ; 3.940 ; ; ; ; ; clock path ; ; 23.940 ; 3.940 ; R ; ; ; ; clock network delay ; ; 23.840 ; -0.100 ; ; ; ; ; clock uncertainty ; ; 23.840 ; 0.000 ; ; uTsu ; 1 ; FF_X48_Y2_N40 ; test_samp ; +----------+---------+----+------+--------+---------------+---------------------+
此分析从“数据 Arrival Path(Data Arrival Path)”开始,将输入端口(test_in) 设置为 max input delay 约束中指定的 4 ns ,并继续数据路径(data path)。连同 FPGA自己的数据路径时延(data path delay)(7.499 ns),数据路径时延的总和为 11.499 ns。
然后在“数据 Required Path(Data Required Path)”中计算时钟路径(clock path),从后面的时钟在 20 ns开始。时钟从输入引脚移动到触发器(flip-flop)(没有对时钟 network delay(clock network delay)进行补偿,因为不涉及锁相环(PLL))。此计算还考虑了估计的抖动(jitter)(凭借“时钟 uncertainty(clock uncertainty)”)。总而言之,时钟路径在 23.840 ns结束,也就是数据(data)到触发器之后的 12.341 ns 。这是约束(constraint)的 slack。
该分析表明, set_input_delay -max 约束上放置的数量是驱动输入引脚的外部设备的最大 clock-to-output (+ 板的 trace 时延)。之所以得出这个结论,是因为这个数字是作为数据路径的启动时间。
set_input_delay -min (hold)解析
Delay Model: Slow 1100mV 85C Model +-----------------------------------------------------------------------------------------------------+ ; Summary of Paths ; +-------+-----------+-----------+--------------+-------------+--------------+------------+------------+ ; Slack ; From Node ; To Node ; Launch Clock ; Latch Clock ; Relationship ; Clock Skew ; Data Delay ; +-------+-----------+-----------+--------------+-------------+--------------+------------+------------+ ; 0.770 ; test_in ; test_samp ; theclk ; theclk ; 0.000 ; 4.287 ; 3.057 ; +-------+-----------+-----------+--------------+-------------+--------------+------------+------------+ Path #1: Hold slack is 0.770 =============================================================================== +--------------------------------+ ; Path Summary ; +--------------------+-----------+ ; Property ; Value ; +--------------------+-----------+ ; From Node ; test_in ; ; To Node ; test_samp ; ; Launch Clock ; theclk ; ; Latch Clock ; theclk ; ; Data Arrival Time ; 5.057 ; ; Data Required Time ; 4.287 ; ; Slack ; 0.770 ; +--------------------+-----------+ +--------------------------------------------------------------------------------------+ ; Statistics ; +---------------------------+-------+-------+-------------+------------+-------+-------+ ; Property ; Value ; Count ; Total Delay ; % of Total ; Min ; Max ; +---------------------------+-------+-------+-------------+------------+-------+-------+ ; Hold Relationship ; 0.000 ; ; ; ; ; ; ; Clock Skew ; 4.287 ; ; ; ; ; ; ; Data Delay ; 3.057 ; ; ; ; ; ; ; Number of Logic Levels ; ; 1 ; ; ; ; ; ; Physical Delays ; ; ; ; ; ; ; ; Arrival Path ; ; ; ; ; ; ; ; Clock ; ; ; ; ; ; ; ; Clock Network (Lumped) ; ; 1 ; 0.000 ; ; 0.000 ; 0.000 ; ; Data ; ; ; ; ; ; ; ; IC ; ; 2 ; 2.028 ; 66 ; 0.000 ; 2.028 ; ; Cell ; ; 2 ; 1.029 ; 34 ; 0.290 ; 0.739 ; ; Required Path ; ; ; ; ; ; ; ; Clock ; ; ; ; ; ; ; ; Clock Network (Lumped) ; ; 1 ; 4.287 ; 100 ; 4.287 ; 4.287 ; +---------------------------+-------+-------+-------------+------------+-------+-------+ Note: Negative delays are omitted from totals when calculating percentages +----------------------------------------------------------------------------------+ ; Data Arrival Path ; +---------+---------+----+------+--------+-------------------+---------------------+ ; Total ; Incr ; RF ; Type ; Fanout ; Location ; Element ; +---------+---------+----+------+--------+-------------------+---------------------+ ; 0.000 ; 0.000 ; ; ; ; ; launch edge time ; ; 0.000 ; 0.000 ; ; ; ; ; clock path ; ; 0.000 ; 0.000 ; R ; ; ; ; clock network delay ; ; 2.000 ; 2.000 ; R ; iExt ; 1 ; PIN_AP17 ; test_in ; ; 5.057 ; 3.057 ; ; ; ; ; data path ; ; 2.000 ; 0.000 ; RR ; IC ; 1 ; IOIBUF_X48_Y0_N58 ; test_in~input|i ; ; 2.739 ; 0.739 ; RR ; CELL ; 1 ; IOIBUF_X48_Y0_N58 ; test_in~input|o ; ; 4.767 ; 2.028 ; RR ; IC ; 1 ; FF_X48_Y2_N40 ; test_samp|asdata ; ; 5.057 ; 0.290 ; RR ; CELL ; 1 ; FF_X48_Y2_N40 ; test_samp ; +---------+---------+----+------+--------+-------------------+---------------------+ +------------------------------------------------------------------------------+ ; Data Required Path ; +---------+---------+----+------+--------+---------------+---------------------+ ; Total ; Incr ; RF ; Type ; Fanout ; Location ; Element ; +---------+---------+----+------+--------+---------------+---------------------+ ; 0.000 ; 0.000 ; ; ; ; ; latch edge time ; ; 4.287 ; 4.287 ; ; ; ; ; clock path ; ; 4.287 ; 4.287 ; R ; ; ; ; clock network delay ; ; 4.287 ; 0.000 ; ; ; ; ; clock uncertainty ; ; 4.287 ; 0.000 ; ; uTh ; 1 ; FF_X48_Y2_N40 ; test_samp ; +---------+---------+----+------+--------+---------------+---------------------+
此分析从“数据 Arrival Path”开始,将输入端口(test_in) 设置为 2 ns,如 min input delay 约束中指定的那样,并继续数据路径。加上 FPGA自己的数据路径时延(3.057 ns),数据路径时延的总和为 5.057 ns。
然后在“数据 Required Path”中计算时钟路径,从 0 ns处的相同时钟边沿(clock edge)开始。毕竟这是对 hold 时序的计算,所以问题是触发器的输入上的数据是否在它成功采样之前没有改变。
时钟从输入引脚移动到触发器(对时钟 network delay没有补偿,因为不涉及锁相环)。此计算还考虑了估计的抖动(凭借“时钟 uncertainty”),但请注意其值为零。总而言之,时钟路径以 4.287 ns结束,比数据的变化要早 0.770 ns 。因此这个数字是 slack。
该分析表明, set_input_delay -min 约束的安装数量是驱动输入引脚的外部设备的最小 clock-to-output 。之所以得出这个结论,是因为这个数字是作为数据路径的启动时间。
set_output_delay -max (setup)解析
Delay Model: Slow 1100mV 85C Model +--------------------------------------------------------------------------------------------------------+ ; Summary of Paths ; +-------+---------------+----------+--------------+-------------+--------------+------------+------------+ ; Slack ; From Node ; To Node ; Launch Clock ; Latch Clock ; Relationship ; Clock Skew ; Data Delay ; +-------+---------------+----------+--------------+-------------+--------------+------------+------------+ ; 2.651 ; test_out~reg0 ; test_out ; theclk ; theclk ; 20.000 ; -5.320 ; 3.929 ; +-------+---------------+----------+--------------+-------------+--------------+------------+------------+ Path #1: Setup slack is 2.651 =============================================================================== +------------------------------------+ ; Path Summary ; +--------------------+---------------+ ; Property ; Value ; +--------------------+---------------+ ; From Node ; test_out~reg0 ; ; To Node ; test_out ; ; Launch Clock ; theclk ; ; Latch Clock ; theclk ; ; Data Arrival Time ; 9.249 ; ; Data Required Time ; 11.900 ; ; Slack ; 2.651 ; +--------------------+---------------+ +---------------------------------------------------------------------------------------+ ; Statistics ; +---------------------------+--------+-------+-------------+------------+-------+-------+ ; Property ; Value ; Count ; Total Delay ; % of Total ; Min ; Max ; +---------------------------+--------+-------+-------------+------------+-------+-------+ ; Setup Relationship ; 20.000 ; ; ; ; ; ; ; Clock Skew ; -5.320 ; ; ; ; ; ; ; Data Delay ; 3.929 ; ; ; ; ; ; ; Number of Logic Levels ; ; 0 ; ; ; ; ; ; Physical Delays ; ; ; ; ; ; ; ; Arrival Path ; ; ; ; ; ; ; ; Clock ; ; ; ; ; ; ; ; Clock Network (Lumped) ; ; 1 ; 5.320 ; 100 ; 5.320 ; 5.320 ; ; Data ; ; ; ; ; ; ; ; IC ; ; 1 ; 0.000 ; 0 ; 0.000 ; 0.000 ; ; Cell ; ; 3 ; 3.929 ; 100 ; 0.000 ; 2.150 ; ; uTco ; ; 1 ; 0.000 ; 0 ; 0.000 ; 0.000 ; ; Required Path ; ; ; ; ; ; ; ; Clock ; ; ; ; ; ; ; ; Clock Network (Lumped) ; ; 1 ; 0.000 ; ; 0.000 ; 0.000 ; +---------------------------+--------+-------+-------------+------------+-------+-------+ Note: Negative delays are omitted from totals when calculating percentages +---------------------------------------------------------------------------------------+ ; Data Arrival Path ; +---------+---------+----+------+--------+------------------------+---------------------+ ; Total ; Incr ; RF ; Type ; Fanout ; Location ; Element ; +---------+---------+----+------+--------+------------------------+---------------------+ ; 0.000 ; 0.000 ; ; ; ; ; launch edge time ; ; 5.320 ; 5.320 ; ; ; ; ; clock path ; ; 5.320 ; 5.320 ; R ; ; ; ; clock network delay ; ; 9.249 ; 3.929 ; ; ; ; ; data path ; ; 5.320 ; 0.000 ; ; uTco ; 1 ; DDIOOUTCELL_X48_Y0_N50 ; test_out~reg0 ; ; 7.099 ; 1.779 ; FF ; CELL ; 1 ; DDIOOUTCELL_X48_Y0_N50 ; test_out~reg0|q ; ; 7.099 ; 0.000 ; FF ; IC ; 1 ; IOOBUF_X48_Y0_N42 ; test_out~output|i ; ; 9.249 ; 2.150 ; FF ; CELL ; 1 ; IOOBUF_X48_Y0_N42 ; test_out~output|o ; ; 9.249 ; 0.000 ; FF ; CELL ; 0 ; PIN_AN17 ; test_out ; +---------+---------+----+------+--------+------------------------+---------------------+ +--------------------------------------------------------------------------+ ; Data Required Path ; +----------+---------+----+------+--------+----------+---------------------+ ; Total ; Incr ; RF ; Type ; Fanout ; Location ; Element ; +----------+---------+----+------+--------+----------+---------------------+ ; 20.000 ; 20.000 ; ; ; ; ; latch edge time ; ; 20.000 ; 0.000 ; ; ; ; ; clock path ; ; 20.000 ; 0.000 ; R ; ; ; ; clock network delay ; ; 19.900 ; -0.100 ; ; ; ; ; clock uncertainty ; ; 11.900 ; -8.000 ; F ; oExt ; 0 ; PIN_AN17 ; test_out ; +----------+---------+----+------+--------+----------+---------------------+
由于此分析的目的是测量输出时延(output delay),因此它从时钟边沿(在 0 ns处)开始在“数据 Arrival Path”中,并将时钟 network delay 添加到触发器。从那里它沿着数据路径前进,直到输出(output)到达稳定的逻辑状态。对此的计算产生了 9.249 ns。
这是在 20 ns减去输出时延之后的时钟的时间。减去估计的抖动(在上述情况下为0.1 ns )。数据被计算为在 9.249 ns下是稳定的。这与它必须稳定的时候 11.9 ns相比,所以 slack 就是 2.651 ns。
这说明了为什么与 set_output_delay -max 一起使用的编号应该是为外部设备的输入指定的 setup time 。通过计算输出处的总时延与有效数据与后续时钟的时间位置之间的差异来验证此时序约束。这种差异是要达到的目标。这正是 setup time的定义: 数据在下一个时钟之前必须稳定多长时间。
set_output_delay -min (hold)解析
Delay Model: Fast 1100mV 0C Model +--------------------------------------------------------------------------------------------------------+ ; Summary of Paths ; +-------+---------------+----------+--------------+-------------+--------------+------------+------------+ ; Slack ; From Node ; To Node ; Launch Clock ; Latch Clock ; Relationship ; Clock Skew ; Data Delay ; +-------+---------------+----------+--------------+-------------+--------------+------------+------------+ ; 1.275 ; test_out~reg0 ; test_out ; theclk ; theclk ; 0.000 ; -2.255 ; 2.020 ; +-------+---------------+----------+--------------+-------------+--------------+------------+------------+ Path #1: Hold slack is 1.275 =============================================================================== +------------------------------------+ ; Path Summary ; +--------------------+---------------+ ; Property ; Value ; +--------------------+---------------+ ; From Node ; test_out~reg0 ; ; To Node ; test_out ; ; Launch Clock ; theclk ; ; Latch Clock ; theclk ; ; Data Arrival Time ; 4.275 ; ; Data Required Time ; 3.000 ; ; Slack ; 1.275 ; +--------------------+---------------+ +---------------------------------------------------------------------------------------+ ; Statistics ; +---------------------------+--------+-------+-------------+------------+-------+-------+ ; Property ; Value ; Count ; Total Delay ; % of Total ; Min ; Max ; +---------------------------+--------+-------+-------------+------------+-------+-------+ ; Hold Relationship ; 0.000 ; ; ; ; ; ; ; Clock Skew ; -2.255 ; ; ; ; ; ; ; Data Delay ; 2.020 ; ; ; ; ; ; ; Number of Logic Levels ; ; 0 ; ; ; ; ; ; Physical Delays ; ; ; ; ; ; ; ; Arrival Path ; ; ; ; ; ; ; ; Clock ; ; ; ; ; ; ; ; Clock Network (Lumped) ; ; 1 ; 2.255 ; 100 ; 2.255 ; 2.255 ; ; Data ; ; ; ; ; ; ; ; IC ; ; 1 ; 0.000 ; 0 ; 0.000 ; 0.000 ; ; Cell ; ; 3 ; 2.020 ; 100 ; 0.000 ; 1.296 ; ; uTco ; ; 1 ; 0.000 ; 0 ; 0.000 ; 0.000 ; ; Required Path ; ; ; ; ; ; ; ; Clock ; ; ; ; ; ; ; ; Clock Network (Lumped) ; ; 1 ; 0.000 ; ; 0.000 ; 0.000 ; +---------------------------+--------+-------+-------------+------------+-------+-------+ Note: Negative delays are omitted from totals when calculating percentages +---------------------------------------------------------------------------------------+ ; Data Arrival Path ; +---------+---------+----+------+--------+------------------------+---------------------+ ; Total ; Incr ; RF ; Type ; Fanout ; Location ; Element ; +---------+---------+----+------+--------+------------------------+---------------------+ ; 0.000 ; 0.000 ; ; ; ; ; launch edge time ; ; 2.255 ; 2.255 ; ; ; ; ; clock path ; ; 2.255 ; 2.255 ; R ; ; ; ; clock network delay ; ; 4.275 ; 2.020 ; ; ; ; ; data path ; ; 2.255 ; 0.000 ; ; uTco ; 1 ; DDIOOUTCELL_X48_Y0_N50 ; test_out~reg0 ; ; 2.979 ; 0.724 ; RR ; CELL ; 1 ; DDIOOUTCELL_X48_Y0_N50 ; test_out~reg0|q ; ; 2.979 ; 0.000 ; RR ; IC ; 1 ; IOOBUF_X48_Y0_N42 ; test_out~output|i ; ; 4.275 ; 1.296 ; RR ; CELL ; 1 ; IOOBUF_X48_Y0_N42 ; test_out~output|o ; ; 4.275 ; 0.000 ; RR ; CELL ; 0 ; PIN_AN17 ; test_out ; +---------+---------+----+------+--------+------------------------+---------------------+ +-------------------------------------------------------------------------+ ; Data Required Path ; +---------+---------+----+------+--------+----------+---------------------+ ; Total ; Incr ; RF ; Type ; Fanout ; Location ; Element ; +---------+---------+----+------+--------+----------+---------------------+ ; 0.000 ; 0.000 ; ; ; ; ; latch edge time ; ; 0.000 ; 0.000 ; ; ; ; ; clock path ; ; 0.000 ; 0.000 ; R ; ; ; ; clock network delay ; ; 0.000 ; 0.000 ; ; ; ; ; clock uncertainty ; ; 3.000 ; 3.000 ; R ; oExt ; 0 ; PIN_AN17 ; test_out ; +---------+---------+----+------+--------+----------+---------------------+
此分析类似于 max output 时延,只是它是针对相同的时钟边沿(而不是下一个)计算的。
和以前一样,数据路径继续时钟路径直到输出稳定。对此的计算产生了 4.275 ns。
这是在 0 ns上与相同时钟的时间进行比较,减去输出时延。回想一下时序约束中的 min output 时延是负数 (-3 ns),这就是它在计算中显示为正数的原因。
结论: 数据稳定到 4.275 ns,需要稳定到 3 ns。没关系, 1.275 ns 就是 slack。
这说明了为什么与 set_output_delay -min 一起使用的数字是 hold time,它是为外部设备的输入指定的,符号相反。此时序约束通过要求总时延大于此给定数字来验证。换句话说,数据必须在时钟之后的很长时间内保持稳定。这是 hold time的定义。