无论是GUI方式输入约束还是手动脚本方式输入约束,最终都会生成约束脚本并且存放在后缀为.xdc(Xilinx Design Constraints)的文件中。如图1所示,设计者自定义的.xdc约束文件通常在Vivado的Sources à Constraints文件夹下被创建或管理。
图1 XDC文件管理窗口
如图2所示,选中Sources下的Constraints文件夹,右键单击,选中AddSources…。
图2 新建xdc文件菜单
如图3所示,弹出的AddSources页面中,先确认勾选了Add or create constraints,再点击Next。
图3 AddSources页面
接着如图4所示,弹出Add orCreate Constraints页面,配置完成后点击Finish。
在Specifyconstraint set后点击下拉框可以创建新的约束文件夹。
点击Add Files可以添加已有的xdc文件。
点击Create File可以创建新的约束文件。
图4 Add orCreate Constraints页面
一个工程中可以只包含一个或者多个.xdc约束文件。通常比较推荐的做法是,使用两个不同的.xdc文件分别用于存储物理约束脚本(如at7_pins.xdc)和时序约束脚本(如at7_timing.xdc),如图5所示。当然了,如果设计者把物理约束脚本和时序约束脚本都写到一个.xdc文件(如at7.xdc)中,本身也是没有问题的。
图5 创建多个约束脚本文件
至于Constraints下的不同文件夹(如constrs_1和constrs_2),方便我们对一个工程采取多种约束策略。如当前constrs_1文件是高亮粗体显示,并且有“(active)”的标示,表示这个文件夹包含了当前工程所使用的有效约束文件。若我们希望启用constrs_2文件夹下的约束文件,则如图6所示,选中constrs_2文件夹名,单击右键,弹出菜单中选择Make Active选项即可。
图6 启用constrs_2文件夹
此时,如图7所示,可以看到constrs_2文件夹及其下的2个.xdc文件已经被高亮加粗了,表示它们是当前工程所指定的可用约束文件。
图7 当前可用的constrs_2文件夹
至于“(active)”的标示,如图8所示,在使用新设定的constrs_2文件夹进行编译后才会显示出来。
图8 带有active图标的constrs_2文件夹
如图9所示,每个.xdc的文件属性(SourceFile Properties)中,可以设定其约束脚本的适用范围(Used In)。通常情况下,如果没有特殊要求,会使用默认的设置,即综合(Synthesis)与实现(Implementation)都勾选上。
图9 XDC文件的属性
若后续在GUI中编辑添加一些新的约束脚本,对于文件夹constrs_2这样包含了多个xdc文件的情况,则需要事先指定新的约束命令所保存的目标文件。如图10所示,在希望用于保存GUI中新添加约束命令的xdc文件上右键单击,选择弹出菜单中的Set as Target Constraint File。
图10 设置目标约束文件菜单
此时,如图11所示,at7_timing.xdc文件被标识为target了。
图11 标示target的约束文件
在Vivado中创建并指定了可用的xdc约束文件后,可以直接编写符合XDC文件语法要求的设计约束脚本到xdc文件中;也可以在Vivado的物理约束或时序约束可视化编辑界面中添加相关的约束命令,在保存这些设计约束时,Vivado会自动生成约束脚本写入到可用的xdc文件中。
设计约束通常根据约束分类或模块划分存储在一个或多个文件中。不论如何对设计约束进行管理,设计者都必须清楚设计约束的具体对象以及它们最终的加载顺序。例如,时钟的时序约束必须在其它约束之前完成,所以设计者必须确保时钟约束在其它约束之前最先被加载。
设计中添加的一些IP模块,通常也会包含一些.xdc约束文件,这些文件在创建IP时会自动添加到设计中,并且在设计编译过程中被使用,但通常不会出现在Sources à Constraints文件夹下。例如这里的一个Clocking IP,如图12所示,在配置好并添加到设计中后,Sources à IP Sources面板的IP文件夹展开后,可以看到clk_wiz_0 à Synthesis文件夹下的多个.xdc文件就是该IP的约束文件。
图12 IP的约束文件
没有回复内容