是否有条件/解决方法有条件地在UCF文件中使用语句,或者UCF文件是否可以有条件地包含在其他UCF文件中?
我面临的问题是我有一个带有一组泛型的顶层模块,它通过生成语句有条件地实例化或从顶层模块中删除某些子模块。
但是,这些子模块中的大多数都具有在项目UCF文件中定义的时序约束。
在map或par期间的某处,构建过程被中止,表明UCF文件所引用的实例不存在(这是正确的,因为由于在顶层模块中选择了泛型而从未创建实例)。
什么是最好的方法来实现某种“条件约束”,这可以避免这个问题? (旁边显而易见的预处理程序/脚本在我的UCF文件中徘徊)
PS:我使用的是Xilinx ISE 14.4 / Vivado 2012.4命令行工具。
答案 0 :(得分:3)
这个问题已被多次询问:
http://forums.xilinx.com/t5/Design-Entry/include-and-ifdef-for-ucf-files/td-p/77822
http://forums.xilinx.com/t5/Design-Entry/Conditional-inclusion-of-ucf-files/td-p/195684
简短的回答是不,不幸的是不可能。
最好的办法是创建2个单独的UCF文件,并创建一个指向其中一个的脚本,或者每次打开/关闭通用开关时手动替换它。
答案 1 :(得分:3)
如果您使用的是Vivado,那么您应该知道Vivado综合下不再支持UCF文件。除非您必须使用XST,否则您不再局限于使用过时的UCF文件格式作为约束。 Vivado正在使用XDC约束,它是TCL的子集,这意味着您可以编写具有条件的代码,以您希望的任何方式处理约束。
您可以查看Xilinx的UG 903,了解如何在最新版本的工具中使用约束:
答案 2 :(得分:1)
另一个可能的解决方案是使用Xilinx综合属性。
这可以用来约束网络的时间,就像UCF一样。
不同之处在于,属性可以在VHDL中内联,在信号声明附近。 但它很笨重。
正确的解决方案可能取决于你有多少限制。
答案 3 :(得分:0)
我赞成了FarhadA的答案,但我想强调一点,即XDC文件是TCL脚本,因此它们可以包括条件和循环。比UCF文件好得多。
Vivado中约束处理的另一个优点是,如果遇到与设计不匹配的约束,它会发出严重警告并继续。