KEEP_HIERARCHY的用法

KEEP_HIERARCHY是一种对综合和实现过程的约束。

 一般而言,一个HDL设计的顶层包含好几个底层子模块。XST在综合过程中为了得到更好的结果,一般打平设计的层次。但是也可以在综合的过程中通过添加KEEP_HIERARCHY约束来使综合的过程保持设计的层次。

添加KEEP_HIERARCHY约束后,综合和实现的结果表现的以下2方面:

在实现的过程中保持设计层次。

生成仿真需要的保持设计层次的网表。

 

例子:以上图为例,如果对整个模块或I2添加约束:

       1  在最后的生成网表中,I2模块的层次被保持下来。

       2  I2模块中的I4 I5模块的层次被打平。

       3  I1 I3 I6、 I7的层次也被打平。

 

KEEP_HIERARCHY支持XILINX所有的FPGA CPLD器件,对FPGA默认的约束是FALSE,对CPLD默认的约束是TURE

KEEP_HIERARCHY用法:

KEEP_HIERARCHY的约束值可以设置成FALSETURE

添加约束分2中情况:

在模块里面的verilog代码里面添加只需将约束添加

      在需要保持层次的模块或实例的前面即可。

      例如:(* KEEP_HIERARCHY  = “{TURE|FALSE}” *

UCFNCF里面添加

      INST “instance_name”  KEEP_HIERARCHY = { TURE|FALSE };

转载于:https://www.cnblogs.com/xuzhi-fpga/p/3507396.html

<think>嗯,用户现在问的是关于“综合相关属性”的内容。之前他们问过Vivado的OOC模式,现在可能是在继续深入学习FPGA设计流程,特别是综合阶段的设置和优化。我需要先回顾一下之前的对话,确保回答连贯。 首先,用户之前了解了OOC模式,所以综合属性可能是在Vivado中设置的一些参数,影响综合的结果,比如优化策略、资源使用、时序约束等。用户可能是想了解这些属性如何配置,以及它们对设计的影响。 接下来,我需要确定用户的具体需求。他们可能是在进行FPGA开发时遇到了综合效率或性能问题,想通过调整综合属性来优化设计。或者他们可能在准备项目时需要了解这些参数的作用,以便更好地规划设计流程。 要回答“综合相关属性”,应该分几个部分:基本概念、常用属性、应用场景、配置方法、注意事项等。需要确保结构清晰,逐步引导用户理解每个属性的作用和设置方法。同时,要结合Vivado的具体操作,比如在GUI中如何设置,或者通过Tcl脚本配置。 可能用户需要知道的关键属性包括优化策略(Optimization Strategy)、控制信号推断(Control Signal Inference)、资源使用(Resource Sharing)、层次结构保留(Keep Hierarchy)、跨时钟域处理(Cross Clock Domain)等。每个属性都需要详细说明其影响和适用场景。 还需要考虑用户的潜在问题,比如如何平衡时序和资源消耗,或者如何保留调试信号。这时候需要举例说明,比如使用KEEP_HIERARCHY来保留模块层次,方便调试。 另外,用户可能对如何应用这些属性到实际项目中感兴趣,所以需要给出配置步骤,例如在Vivado中设置综合属性的具体操作,或者通过XDC约束文件进行配置。 最后,注意事项部分需要提醒用户属性设置不当可能带来的问题,比如过度优化导致时序问题,或者资源分配不合理影响性能。同时,版本兼容性和团队协作中的约束管理也是重点。 确保回答使用中文,术语准确,结构清晰,帮助用户逐步理解,并能够应用到实际项目中。</think>在FPGA设计流程中,**综合相关属性**(Synthesis Attributes)是用于指导综合工具(如Vivado Synthesis)如何将RTL代码转换为逻辑网表的关键设置。它们直接影响设计的资源利用率、时序性能和功能正确性。以下从核心概念、常用属性、配置方法及实践建议逐步解析: --- ### 1. **综合属性的核心作用** - **优化控制**:调整逻辑映射、资源共享和时序收敛策略。 - **功能保留**:防止综合工具优化掉特定信号或模块(如调试信号)。 - **层次管理**:控制模块边界的保留或打平(Flattening)。 - **时序约束传递**:跨模块或跨时钟域的时序规则定义。 --- ### 2. **常用综合属性分类与说明** #### **2.1 优化类属性** | 属性名称 | 功能说明 | |-----------------------|--------------------------------------------------------------------------| | `MAX_FANOUT` | 限制信号的最大扇出,避免负载过大导致时序问题。 | | `SRL_STYLE` | 指定移位寄存器实现方式(如`register`、`srl`或`srl_reg`),影响资源类型。 | | `USE_DSP48` | 强制算术操作映射到DSP48单元(值为`yes/no`)。 | | `RESOURCE_SHARING` | 允许或禁止资源共享(如共享加法器),平衡面积和时序。 | #### **2.2 功能保留类属性** | 属性名称 | 功能说明 | |-----------------------|--------------------------------------------------------------------------| | `KEEP` | 防止信号被优化删除(如`(* keep = "true" *) wire debug_signal;`)。 | | `MARK_DEBUG` | 保留信号用于后续调试(与`KEEP`类似,但专用于Vivado调试工具)。 | | `DONT_TOUCH` | 禁止对指定模块或网络进行任何优化,保留其原始结构。 | #### **2.3 层次管理类属性** | 属性名称 | 功能说明 | |-----------------------|--------------------------------------------------------------------------| | `KEEP_HIERARCHY` | 保留模块层次结构,防止综合工具打平(如保留子模块边界)。 | | `HIERARCHICAL` | 与`KEEP_HIERARCHY`类似,但更严格(Vivado特有属性)。 | #### **2.4 时序与时钟类属性** | 属性名称 | 功能说明 | |-----------------------|--------------------------------------------------------------------------| | `CLOCK_BUFFER_TYPE` | 指定时钟网络的缓冲器类型(如`BUFG`、`BUFH`)。 | | `ASYNC_REG` | 标记异步寄存器,帮助工具识别跨时钟域同步链。 | | `IOB` | 强制信号映射到IOB寄存器(适用于高速接口时序约束)。 | --- ### 3. **配置方法** #### **3.1 代码内嵌属性(Verilog/VHDL)** 直接在RTL代码中通过注释语法声明属性: ```verilog // Verilog示例:限制信号fanout并保留层次 (* MAX_FANOUT = 32, KEEP_HIERARCHY = "yes" *) module my_module (...); (* KEEP = "true" *) wire debug_signal; endmodule ``` #### **3.2 XDC约束文件** 在XDC文件中通过`set_property`命令配置: ```tcl # 限制模块层次 set_property KEEP_HIERARCHY TRUE [get_cells my_module] # 设置DSP资源映射 set_property USE_DSP48 YES [get_cells mult_inst] ``` #### **3.3 Vivado GUI设置** 通过Vivado综合设置界面调整全局策略: 1. 打开 **Settings → Synthesis**。 2. 在 **Options** 标签页设置全局优化策略(如`AreaOptimized_High`)。 3. 在 **Advanced** 标签页配置特定属性(如`-flatten_hierarchy`)。 --- ### 4. **应用场景与建议** | 场景 | 推荐属性配置 | |-----------------------|------------------------------------------------------------------------------| | **时序关键路径** | `MAX_FANOUT`限制扇出,`USE_DSP48`加速计算。 | | **调试信号保留** | `MARK_DEBUG`或`KEEP`防止信号优化。 | | **IP核复用** | `DONT_TOUCH`保护IP核内部逻辑。 | | **跨时钟域处理** | `ASYNC_REG`标记同步寄存器链。 | | **资源敏感型设计** | `RESOURCE_SHARING`开启资源共享,`SRL_STYLE`优化移位寄存器。 | --- ### 5. **注意事项** - **优先级冲突**:代码内嵌属性优先级高于XDC文件,需避免重复定义。 - **工具兼容性**:部分属性为Vivado特有(如`MARK_DEBUG`),移植到其他工具时需调整。 - **性能平衡**:过度使用`DONT_TOUCH`或`KEEP`可能导致时序和面积恶化。 - **版本差异**:不同Vivado版本支持的属性可能变化,需参考官方文档(UG901)。 --- ### 6. **示例:优化一个乘法模块** ```verilog // 强制使用DSP48单元,并保留层次 (* USE_DSP48 = "yes", KEEP_HIERARCHY = "yes" *) module multiplier ( input [15:0] a, b, output [31:0] c ); assign c = a * b; endmodule ``` --- 通过合理配置综合属性,开发者可以精准控制逻辑实现方式,在时序、面积和功能之间取得平衡。建议结合设计需求与工具文档(如Vivado的《Synthesis User Guide》),逐步迭代优化策略。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值