FPGA时序约束学习笔记(二)Quartus II实练

目标:通过时序优化,使系统的最高运行频率提高。

实例:VGA显示模块

(1)理解时序与温度的关联

FPGA时序约束学习笔记(二)Quartus II实练

FPGA时序约束学习笔记(二)Quartus II实练

温度过高与过低均会影响寄存器间的时间余量,一般默认状态为Slow 1200mV 85C Model。

(2)查看最大时钟运行频率
外部输入时钟为50MHz,显示的最大运行频率为119.06MHz

FPGA时序约束学习笔记(二)Quartus II实练

软件自动识别时钟信号,按照10MHz频率进行布局布线,但是VGA显示输入的时钟为25MHz,远不满足使用需求,需要通过时钟约束来优化时钟频。

FPGA时序约束学习笔记(二)Quartus II实练

(3)创建时钟约束,打开时序分析,创建time netlist

FPGA时序约束学习笔记(二)Quartus II实练

(4)读取约束文件

FPGA时序约束学习笔记(二)Quartus II实练

(5)创建时钟约束

FPGA时序约束学习笔记(二)Quartus II实练

FPGA时序约束学习笔记(二)Quartus II实练

这里,clock name是我们自己为约束的该时钟信号取一个方便识别的别名,而非被约束的时钟的原本名称。

而targets才是被约束时钟的原本名称,设置好点run。

当出现

FPGA时序约束学习笔记(二)Quartus II实练

此时软件自动约束时钟与手动约束时钟冲突,可编辑软件自动约束时钟,colck name 与targets名称不可改。

FPGA时序约束学习笔记(二)Quartus II实练

当添加一个约束语句后,需要检查该约束语句是否被运行,是否与软件自动约束冲突。

(6)编写SDC文件

FPGA时序约束学习笔记(二)Quartus II实练

点击ok后SDC文件保存到程序路径中。

时序约束完成,可以关闭时序分析软件。

(7)导入SDC约束文件

FPGA时序约束学习笔记(二)Quartus II实练

FPGA时序约束学习笔记(二)Quartus II实练

选择之前保存SDC文件位置,添加到下方。

(8)重新编译,查看系统最高运行时钟频率,被提升到143.12MHz,提升了20+Mhz,优化幅度较大

FPGA时序约束学习笔记(二)Quartus II实练

Quartus 编译出来的结果,能够运行的最大频率与约束息息相关,约束要求不高, Quartus 也就随便编译优化下,能满足添加的约束要求即可。 不会让自己去做到最优。


(9)若想进一步优化,需要分析最坏路径,它决定了始终余量的值

可从优化组合逻辑,进行RTL级时序约束

可从缩短最小传输路径和在组合逻辑中插入一级寄存器来继续优化。

在 Compilation Report 中, 依次展开 TimeQuest Timing Analyzer -> Slow 1200mV 85C Mode–> Worst-Case Timing Paths,找到建立时间最小余量Tslack,将其减小,可提高最高运行频率。

 

FPGA时序约束学习笔记(二)Quartus II实练

针对建立时间最小余量,找到相应程序行,行进行RTL优化;

FPGA时序约束学习笔记(二)Quartus II实练

FPGA时序约束学习笔记(二)Quartus II实练

由上可以看出,cnt_v的值与cnt_h及V_PRIOD有关,对此段代码分析,首先cnt_h经过一个比较器,让后输出一个值给判断比较器,输出值传输到cnt_v的LUT单元,然后cnt_v的现态值经过判断比较器后输出一个值给cnt_v的次态。

这个试了一下,没想到优化的方法。但是在组合逻辑中插入一级寄存器,将组合逻辑变为两段,确实能大大增加最高运行频率。

上面是建立时间时间余量的优化,当然也有保持时间余量的优化,原理差不多。

(11)总结:时序分析→生成时序约束文件→对时间余量进行优化→达到最优值