一、时序约束内容
时序约束的主要内容是时钟约束(clock)和IO输入输出(input/output delay)约束。还有其他约束例如(false path和multicycle path)。
二、input/output delay计算
2.1 input delay
max = Tdata(pcb)(max) - Tskew(min) + Tco(max)
min = Tdata(pcb)(min) - Tskew(max) + Tco(min)
2.2 output delay
max = Tdata(pcb) - Tskew + Tsu
min = Tdata(pcb) - Tskew - Th
三、时序分析类别
3.1 时钟
3.1.1 基础时钟
基础时钟由create clock来创建。基础时钟可以是晶振或者器件(例如摄像头的 pixel_clk)。
3.1.2 虚拟时钟
虚拟时钟也由create clock来创建。大部分博客资料认为一般用作IO的 input/output delay约束时的参考时钟,不用指定ports,但是我买的小x哥课程确实指定了ports,但是演示中确实存在参考时钟的port口,不做约束似乎不合理。
3.1.3 生成时钟
生成时钟一般用generated clock来创建,生成时钟包括pll/mmcm的生成时钟,也包括寄存器分频时钟。
3.1.4 其他
set_clock_groups - asynchronous 表示时钟组异步
set_clock_group - excusive 表示一个port上不同时存在两个时钟
set_input_jitter 表示时钟抖动
set_clock_uncertainty 表示时钟不确定性
3.2 in/output delay
VIVADO中将input/output delay分成系统同步(system synchronous)和源同步(source synchronous)两种模型,但QUARTES II中并没有这种区别。系统同步模型是外部器件和FPGA使用同一时钟,以上升沿为例,数据的launch edge和latch edge相差一个时钟周期。以目前博客资料和视频资料来看,这种模型最为广泛。源同步时钟据博客资料认为是由外部器件产生的时钟输入至FPGA,即数据和时钟同源。但是隐约感觉这两种模型在其描述中区别不大。
3.2.1 input delay
VIVADO给出的系统同步模型中的语法模板如下:
set_input_delay -clock $input_clock -max [expr $tco_max + $trce_dly_max] [get_ports $input_ports];
set_input_delay -clock $input_clock -min [expr $tco_min + $trce_dly_min] [get_ports $input_ports];
3.2.2 output delay
VIVADO给出的系统同步模型中的语法模板如下:
set_output_delay -clock $destination_clock -max [expr $trce_dly_max + $tsu] [get_ports $output_ports];
set_output_delay -clock $destination_clock -min [expr $trce_dly_min - $thd] [get_ports $output_ports];
3.3 其他
false path 失败路径,意思是这条路径不需要EDA软件进行时序分析。
multicycle path 多周期路径 没搞懂!!!!
四、教程
4.1 QUARTUS II
https://www.cnblogs.com/pejoicen/p/4194380.html
4.2 ISE
https://blog.csdn.net/yuan1164345228/article/details/38541677
4.3 VIVADO
https://blog.csdn.net/FPGADesigner/article/details/82808420
https://blog.csdn.net/wangyanchao151/article/details/90510578
五、总结
时序分析都是围绕节点到节点传输模型来计算。时序约束的具体实践方法因为目前使用比较广泛的有两家三种软件,所以比较麻烦。