XDC文件注释必须要另起一行
请谨记标题,这个标题可以帮你减少一个星期的调试时间;
起因
工程更新,需要增加相关功能引脚;
为了方便,就将已经弄好的FPGA引脚与Schematic中net的连接关系,复制在xdc文件中;
想着为了后面检擦方便,就直接将net注释在了每一行的引脚约束后面,就像下面这样:
set_property PACKAGE_PIN AD23 [get_ports VIDEO_CLK] # [get_ports LPC2_CLK0_M2C_P
就像这样,把所有的新加上信号进行了这样的约束;
问题来了
分析通过😄,实现通过😄
生成bit文件的时候提示错误:
vivado error :[DRC UCIO-1] Unconstrained Logical Port:vivado error :[DRC UCIO-1] Unconstrained Logical Port:
完整的错误是这个样子的:
[DRC UCIO-1] Unconstrained Logical Port: 27 out of 181 logical ports have no user assigned specific location constraint (LOC). This may cause I/O contention or incompatibility with the board power or connectivity affecting performance, signal integrity or in extreme cases cause damage to the device or the components to which it is connected. To correct this violation, specify all pin locations. This design will fail to generate a bitstream unless all logical ports have a user specified site LOC constraint defined. To allow bitstream creation with unspecified pin locations (not recommended), use this command: set_property SEVERITY {Warning} [get_drc_checks UCIO-1]. NOTE: When using the Vivado Runs infrastructure (e.g. launch_runs Tcl command), add this command to a .tcl file and add that file as a pre-hook for write_bitstream step for the implementation run. Problem ports: VIDEO_DA[23], VIDEO_DA[22], VIDEO_DA[21], VIDEO_DA[20], VIDEO_DA[19], VIDEO_DA[18], VIDEO_DA[17], VIDEO_DA[16], VIDEO_DA[15], VIDEO_DA[14], VIDEO_DA[13], VIDEO_DA[12], VIDEO_DA[11], VIDEO_DA[10], VIDEO_DA[9]… and (the first 15 of 27 listed).
为此,我还特地去网上查找了,并且找到了对应的解决方法;
本以为这样就解决了,没想到这才是开始。
而后生成的bit文件,这几个信号输出,完全测试不到!!!
当时没有在意,也没多想。
而后,诸多方式,发现FPGA内部生成的逻辑信号都可以产生,但是唯独这几个新增加的信号不行。
几经对比终于找到了原因:
XDC文件注释必须要另起一行
本着结论,追求一下原因,就在网上找到了类似的文章:
XDC约束条目是有先后顺序的
XDC里面每一行相当于一条指令,Vivado按照行序从前往后读取XDC指令,所以越后面的XDC指令,其优先级越高。比如当有2条XDC指令约束同一个东西时,后面指令会因为执行的比较晚,而覆盖前一条指令的效果,这点需要我们特别注意!
因为XDC中的指令有先后顺序,所以推荐的XDC文件组织方式一般是把timing约束放在前面,而把物理位置约束放在后面。如果更具体些,可以遵循下面的顺序:
## Timing Assertions Section
# Primary clocks
# Virtual clocks
# Generated clocks
# Clock Groups
# Input and output delay constraints
## Timing Exceptions Section
# False Paths
# Max Delay / Min Delay
# Multicycle Paths
# Case Analysis
# Disable Timing
## Physical Constraints Section
一个Vivado工程馆可以添加多个XDC文件
这样的好处是便于管理组织。因为XDC约束条目是有顺序要求的,所以XDC文件也是有先后顺序的,我们可以在GUI界面通过鼠标拖拽,来调整XDC文件的顺序。一般推荐把Timing约束,同物理位置属性约束,分别放到不同的文件当中,就如同下面所做的那样:
另外请注意,VIVADO不但可以支持多个XDC文件,还可以支持多组XDC文件集合,但是同时只能有1个集合起作用。如果我们一次create多个synthesis或者implementation,我们还可以为它们每一个分别制定使用哪个约束文件。这个特性在时序收敛阶段比较有用。
关于XDC文件的指令和注释
在XDC里面,每个完整的XDC约束指令不应当跨行,必须在一行之内表达完毕。同样,在一行之内也只允许存在一个约束指令,不可以把2个约束放在同一行。
关于注释(以“#”开头),唯一的一点限制是,在有效的XDC约束指令行末,不可以添加“#”开头的注释,否则Vivado工具会理解错误。这跟我们在其它语言中通常所理解的注释语法不太一样,可能需要建议XILINX改进。
正确:
结束
emm,最后一项真的是自己遇到了才能印象深刻。