FPGA时序约束学习笔记(二)Quartus II实练
目标:通过时序优化,使系统的最高运行频率提高。
实例:VGA显示模块
(1)理解时序与温度的关联
温度过高与过低均会影响寄存器间的时间余量,一般默认状态为Slow 1200mV 85C Model。
(2)查看最大时钟运行频率
外部输入时钟为50MHz,显示的最大运行频率为119.06MHz
软件自动识别时钟信号,按照10MHz频率进行布局布线,但是VGA显示输入的时钟为25MHz,远不满足使用需求,需要通过时钟约束来优化时钟频。
(3)创建时钟约束,打开时序分析,创建time netlist
(4)读取约束文件
(5)创建时钟约束
这里,clock name是我们自己为约束的该时钟信号取一个方便识别的别名,而非被约束的时钟的原本名称。
而targets才是被约束时钟的原本名称,设置好点run。
当出现
此时软件自动约束时钟与手动约束时钟冲突,可编辑软件自动约束时钟,colck name 与targets名称不可改。
当添加一个约束语句后,需要检查该约束语句是否被运行,是否与软件自动约束冲突。
(6)编写SDC文件
点击ok后SDC文件保存到程序路径中。
时序约束完成,可以关闭时序分析软件。
(7)导入SDC约束文件
选择之前保存SDC文件位置,添加到下方。
(8)重新编译,查看系统最高运行时钟频率,被提升到143.12MHz,提升了20+Mhz,优化幅度较大
Quartus 编译出来的结果,能够运行的最大频率与约束息息相关,约束要求不高, Quartus 也就随便编译优化下,能满足添加的约束要求即可。 不会让自己去做到最优。
(9)若想进一步优化,需要分析最坏路径,它决定了始终余量的值
可从优化组合逻辑,进行RTL级时序约束
可从缩短最小传输路径和在组合逻辑中插入一级寄存器来继续优化。
在 Compilation Report 中, 依次展开 TimeQuest Timing Analyzer -> Slow 1200mV 85C Mode–> Worst-Case Timing Paths,找到建立时间最小余量Tslack,将其减小,可提高最高运行频率。
针对建立时间最小余量,找到相应程序行,行进行RTL优化;
由上可以看出,cnt_v的值与cnt_h及V_PRIOD有关,对此段代码分析,首先cnt_h经过一个比较器,让后输出一个值给判断比较器,输出值传输到cnt_v的LUT单元,然后cnt_v的现态值经过判断比较器后输出一个值给cnt_v的次态。
这个试了一下,没想到优化的方法。但是在组合逻辑中插入一级寄存器,将组合逻辑变为两段,确实能大大增加最高运行频率。
上面是建立时间时间余量的优化,当然也有保持时间余量的优化,原理差不多。
(11)总结:时序分析→生成时序约束文件→对时间余量进行优化→达到最优值