随手记录一下项目中学到的约束文件编写技巧。
时序约束
创建生成时钟
参考链接:
Vivado Design Suite Tcl Command Reference Guide (UG835)
Vivado Design Suite User Guide: Using Constraints (UG903)
通过Clocking Wizard IP创建的时钟(MMCM或PLL),系统会自动生成约束。由于项目布局布线后的结果中时序勉强收敛,因此我想不修改MMCM输出时钟频率的同时,手动修改约束,验证一下时序设计裕量。
create_generated_clock -name clk_low_freq -source [get_pins Classifier_hw_i/clk_wiz_1/clk_in1] -multiply_by 3 -divide_by 4 [get_pins Classifier_hw_i/clk_wiz_1/clk_out1]
源时钟是200MHz,这里想将输出时钟约束到150MHz,因此通过 -multiply_by 和 -divide_by 组合实现。
需要注意的是,对于使用get_pins、get_ports还是get_nets来获取信号,可以参考FPGA时序约束之Tcl命令的对象及属性
以及官方文档UG835。
在本示例中,约束的对象是clk_wiz IP模块的输出,因此选择get_pins。在引脚名称中,Classifier_hw_i是bd的名字。可以在TCL窗口输入get_ports来验证是否能够正确获取到对应的引脚。
其它实现示例可以看官方文档。
扇出约束
参考链接:
Vivado Design Suite Properties Reference Guide (UG912)
在优化布局布线后的时序时发现,一些寄存器的扇出数过大。因此尝试通过约束限制特定端口的最大扇出。
set_property MAX_FANOUT 32 [get_nets -hier {IPs_match*}]
其中,IPs_match* 表示所有前缀为IPs_match的信号组。
(随缘更新中……)