本文摘抄自:
个人网站:http://www.technomania.cn/
微信公众号:Quant_times、Reading_Times
时序约束辅助工具
除了xdc文件的方式进行时序约束,Vivado中还提供了两种图形界面的方式,帮我们进行时序约束:时序约束编辑器(Edit Timing Constrains)和时序约束向导(COnstrains Wizard)。两者都可以在综合或实现后的Design中打开。
1. 时序约束编辑器
打开之后就可以显示我们之前做的所有约束,当然,还可以再添加、删除或修改时序约束。
比如我们要添加一个主时钟,先选中左边的create clock,再点击+号添加约束。然后就会看到下面的界面,按下图中步骤操作。
其中,选择时钟按钮会弹出一个新的窗口,如下图所示,我们只需要根据时钟名字进行查找并选择即可。
2. 时序约束向导
时序约束向导可以自动识别出未约束的主时钟,我们把wave_gen工程中的xdc文件中对clk2的时钟约束注释掉,重新综合并实现后,打开时钟约束向导,可以看到clk2被监测出来未约束,点击编辑按钮,设置参数后即可完成约束。
时序约束向导会按照主时钟约束、衍生时钟约束、输入延迟约束、输出延迟约束、时序例外约束、异步时钟约束等的顺序引导设计者创建约束。
Vivado时序约束中Tcl命令中的对象及属性
我们前面讲到过get_pins和get_ports的区别,而且我们也用过get_cells、get_clocks和get_nets这几个指令,下面就通过一张图直观展现它们的区别。
get_clocks后面的对象是我们之前通过create_clocks或者create_generated_clocks创建的时钟,不在硬件上直接映射。
我们再来看看各个命令的属性。
- port
我们可以通过Tcl脚本查看port的所有属性,比如上面的wave_gen工程中,有一个port是clk_pin_p,采用如下脚本:
set inst [get_ports clk_pin_p]
report_property $inst
显示如下:
get_ports的使用方法如下:
2. cell
按照上面的同样的方式,获取cell的property,如下:
get_cells的使用方法如下:
3. pin
获取pin的property,如下:
get_pins的使用方法如下:
4. net
获取net的property,如下:
get_nets的使用方法如下:
这5个tcl指令的常用选项如下表:
这5个tcl命令对应的5个对象之间也有着密切的关系,下图所示的箭头方向表示已知箭头末端对象可获取箭头指向的对象。
以wave_gen中的clk_gen_i0模块位列说明上面的操作:
需要注意的是:
5. -hier不能和层次分隔符“/”同时使用,但“/”可出现在-filter中
6. 可根据属性过滤查找目标对象
7. -filter中的属性为:“==”(相等)、“!=”(不相等)、“=”(匹配)、“!”(不匹配)、若有多个表达式,其返回值为bool类型时,支持逻辑操作(&& ||)