vivado 用XDC约束IP和子模块

发布时间:2023年12月20日

用XDC约束IP和子模块

当使用Package IP创建IP并从Vivado IP目录中使用它时,XDC约束可以也可以包装以供包含。Vivado Design Suite中的任何IP都是即插即用的,即IP不需要必须剪切和粘贴约束才能完成的样例项目您的顶层设计约束。相反,IP可以与XDC文件打包为IP开发,就好像它是一个独立的顶级设计。Vivado工具负责当使用IP在项目中实例化IP时,适当地读取约束目录类似地,您可以为设计的子模块开发约束,并使用相同的范围通过设置SCOPED_TO_REF/SCOPED_TO_CELLS XDC文件属性,将机制设置为IP核心在项目流中适当,或在“非项目”中使用read_xdc-ref/-cells命令模式

范围查询指南

为了使此流顺利工作,必须编写XDC约束,以便约束保持在IP或子模块实例的本地。Vivado工具可以设置的范围查询到层次结构的特定级别,如前面在“约束范围”中所见。什么时候为IP或子级模块开发约束时,必须了解的行为查询命令:

?Cell/net/pin对象查询仅限于作用域实例及其子级别:

○gget_cells/get_nets/get_pins<名称模式>

○对象的NAME属性显示对象相对于的完整分层路径顶级实例,而不仅仅是作用域实例。如果使用的-filter选项在NAME属性上的get_*命令,必须使用glob字符串匹配运算符并且提供以a*开始的图案。例如:get_nets-层次结构-筛选器{NAME=~*clk

?网表帮助器命令也有作用域:

○aall_ffs、all_latches、all_rams、all_registers、all_dsps、all_hsios return

仅包括在当前实例中的实例。

?IO助手命令根本不能在作用域XDC中使用:

○所有输入,所有输出

?时钟命令不受作用域限制,将返回您设计的所有计时时钟。

○gget_clocks,all_clocks

?通过使用get_clocks探测网表,可以查询顶级和本地时钟对象-的对象。

○使用get_clocks-of_objects检索进入当前实例的时钟[get_ports<interfacePinName>]。

○使用get_clocks检索当前实例内部自动生成的时钟

-of_objects[get_pins<instName/outPin>],其中instName是时钟生成器实例。

?使用-of_objects选项可以查询设计中的任何对象:

○示例:get_pins-leaf-of_objects[get_nets local_net]

?支持对连接到当前实例接口网络的顶级端口进行查询:

?不允许查询IP/子模块接口引脚:

○“get_pins clk”返回一个错误。

?路径跟踪命令也有作用域:

○aall_fanin/all_fanout遍历作用域设计并在其边界处停止。

?将get_cells/get_pins/get_nets与最特定的模式一起使用,而不是使用all_registers命令,带有-current选项,用于查询连接到特定时钟。返回的列表可能很大,而只需要受限这可能会对运行时产生负面影响。

范围界定的时间限制指南

为了避免对顶层设计产生负面影响,重要的是要确保为IP或子模块编写的约束不会传播到其边界之外,除非在某些情况下,时钟定义。例如,考虑在IP XDC中定义错误路径约束的情况进入IP的两个时钟。IP包括用于异步时钟的适当电路边界,但可能不适用于设计的其余部分。如果两个时钟是相关的,并且必须在设计的其余部分一起计时,以便拥有合适的硬件功能。此外,如第7章:XDC优先级所述,IP XDC文件中定义的定时异常可以具有比顶级约束更高的优先级,并且可以覆盖它们,即不想要的。为了避免这种情况,AMD建议您将约束应用于网表IP本地的对象。在两个全局时钟之间存在错误路径的情况下,错误路径必须从IP内的一组起点单元格应用到IP内的另一组终点单元格IP也是如此。这种技术被称为点对点异常,而不是全局异常例外情况。

IP/子模块的推荐约束规则XDC

块级约束必须符合以下规则:

1.如果预期在顶级设计。相反,可以使用get_clocks-of_objects命令在块内部查询它们。这命令返回遍历设计中特定对象的所有时钟。示例:

set blockClock[get_clocks-of_objects[get_ports clkIn]]

如果需要在块内定义时钟,则它必须位于驱动实例化的输入/输出缓冲区,或在创建/转换时钟(MMCM/PLL或由定时自动处理的特殊缓冲器除外工具)。示例:

?带输入缓冲器的输入时钟

?时钟分频器

?GT恢复时钟

2.仅当端口直接连接到顶级端口并且

I/O缓冲器在IP内部被实例化。

示例:

?带输入缓冲器的输入数据端口

?带有输出缓冲器的输出数据端口

3.不要在不绑定到IP的两个时钟之间定义定时异常。

4.不要按名称提及时钟,因为名称可能会因顶级时钟名称而异,或者如果该块被实例化多次。

5.如果块可以在同一块中实例化多次,则不要添加放置约束顶层设计。

文章来源:https://blog.csdn.net/cckkppll/article/details/135093644
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。