vivado 物理优化约束、交互式物理优化

本文介绍了VivadoDesignSuite在物理优化过程中的特性,如DONT_TOUCH和MARK_DEBUG的作用,以及如何使用iphys_opt_design进行交互式优化,包括复制、重定时和报告优化详情。着重讲解了如何通过交互式Tcl命令控制物理优化并重复设计更改的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

物理优化约束

Vivado Design Suite在物理优化过程中尊重DONT_TOUCH特性。它不在具有这些属性的网络或小区上执行物理优化。要加快网络选择过程中,具有DONT_TOUCH属性的网络经过预过滤,不被考虑用于物理优化。此外,还遵守Pblock分配,以便复制逻辑继承原始逻辑的Pblock赋值。定时异常也从复制从原始细胞到复制细胞。有关更多信息,请参阅《Vivado Design Suite用户指南》中的“合成属性”一节:合成(UG901)。DONT_TOUCH属性通常放置在叶细胞上,以防止它们优化。分层单元格上的DONT_TOUCH保留了单元格边界,但进行了优化仍然可以发生在细胞内。

工具会自动将值为TRUE的DONT_TOUCH属性添加到具有值为TRUE的MARK_DEBUG属性。这样做是为了在整个实现流程,以便可以在任何设计阶段对其进行探索。这是推荐的MARK_DEBUG的使用。但是,DONT_TOUCH限制性太强,阻止了复制和重定时等优化,导致关闭时机困难。在这些情况下,DONT_TOUCH可以设置为FALSE值,而保持MARK_DEBUG为真。删除DONT_TOUCH属性的结果是DEBUG的网络可以被优化掉并且不再被探测。如果MARK_DEBUGnet被复制,只有原始的net保留MARK_DEBUG,而不是被复制的net。

物理优化报告

Tcl报告命令report_phys_opt提供了执行的每个优化的详细信息通过phys_opt_design在非常精细的细节级别上实现。它必须在与相同的Vivado会话中运行phys_opt_design,而优化历史存在于存储器中。因此,如果需要报告,建议包括report_phys_opt命令在最后一个phys_ opt_design命令之后的Tcl脚本中。这些报告仅可用于放置后的phys_opt_design优化。这个报告不是累积的。每个phys_pt运行都有一个不同的phys_pt报告,仅说明在phys_opt_design的特定运行期间所做的更改。以下报告示例显示了涉及寄存器的扇出优化的第一个条目命名为pipeline_en。报告中显示了以下详细信息:

1.原始驱动器pipeline_en驱动816负载和包含该高扇出网络的路径WNS为-1.057 ns的故障定时。

2.复制驱动程序pipeline_en以创建一个新的单元pipeline_en_replica。

3.816个负载在pipeline_en_replica和原始负载之间分配,前者占用386个负载驱动程序pipeline_en,它承担剩余的430个负载。

4.在复制和放置pipeline_en_replica之后,pipeline_en _replica路径的WNS是+0.464ns,并且pipeline_en路径的WNS减少到零。

5.改变了原始驱动程序pipeline_en的位置,以改进基于其减少的一组负载的位置。

交互式物理优化

从2015.3版本开始,物理优化具有“回放”功能使用交互式Tcl命令iphys_opt_design进行优化。iphys_opt_design命令描述特定的优化事件,例如关键单元的复制或者从块RAM中提取一组寄存器。该命令包括所有信息重新创建网表和优化所需的位置更改所必需的发生交互式物理优化可以通过两种方式使用:

<think>嗯,用户问的是Vivado中多时钟选择的约束。这个问题看起来涉及到FPGA设计中的时钟管理,特别是当设计中有多个时钟源时的约束方法。首先,我需要回忆一下Vivado的时钟约束相关的内容,尤其是关于多时钟的情况。 首先,用户可能已经知道基本的时钟约束,比如使用create_clock来定义主时钟。但在多时钟情况下,可能需要处理异步时钟、生成时钟,以及时钟之间的交互。这时候,正确的约束对于时序分析和实现结果至关重要。 接下来,我需要考虑用户可能遇到的具体情况。比如,如何定义多个主时钟,如何处理跨时钟域的信号,以及如何设置时钟组来避免不必要的时序分析。此外,生成时钟的情况,比如通过PLL或MMCM生成的时钟,也需要正确的约束。 然后,我应该分步骤介绍这些内容。可能的结构是:主时钟约束、生成时钟约束、时钟组设置、跨时钟域处理,以及时序例外。每个部分都需要给出具体的命令示例,并说明其作用。 需要注意的是,用户可能对Vivado约束语法不熟悉,所以例子要简单明了。比如,create_clock的基本用法,create_generated_clock如何指定源时钟,set_clock_groups来声明异步时钟组,以及set_false_path处理跨时钟域路径。 另外,用户可能会混淆异步时钟组和时钟域交叉的处理方法,需要明确区分两者的应用场景。比如,时钟组用于全局声明时钟关系,而set_false_path或set_max_delay用于特定路径的约束。 最后,要提醒用户进行时序验证,使用report_timing_summary来检查约束是否生效,确保设计满足时序要求。可能还需要提到常见的错误,比如遗漏生成时钟的约束,或者错误地设置时钟组导致时序分析不准确。 总结一下,回答应该结构清晰,逐步讲解多时钟约束的各个方面,结合具体命令示例,帮助用户正确应用约束,确保设计的可靠性和性能。</think>在Vivado中进行多时钟系统设计时,正确的时钟约束是保证时序收敛的关键。以下是分步骤的详细说明: 1. **主时钟定义** 对每个物理输入的时钟信号使用`create_clock`: ```tcl create_clock -name clk100 -period 10 [get_ports clk_100MHz] create_clock -name clk200 -period 5 [get_ports clk_200MHz] ``` $$ period = \frac{1}{频率} \times 10^9 \ (ns) $$ 2. **生成时钟约束** 对PLL/MMCM产生的派生时钟使用`create_generated_clock`: ```tcl create_generated_clock -name clk50 \ -source [get_pins clk_wiz_0/inst/clk_in1] \ -divide_by 2 \ [get_pins clk_wiz_0/inst/CLKOUT0] ``` 3. **时钟组声明** 通过异步关系分组减少无效时序路径分析: ```tcl set_clock_groups -name async_clks \ -asynchronous \ -group {clk100 clk50} \ -group {clk200} ``` 4. **跨时钟域处理** 对明确安全的跨时钟域路径设置例外: ```tcl set_false_path -from [get_clocks clk100] -to [get_clocks clk200] set_max_delay -from [get_clocks clk50] -to [get_clocks clk200] 12.0 ``` 5. **时序例外优先级** Vivado按以下优先级处理约束冲突: - `set_clock_groups` - `set_false_path` - `set_max/min_delay` - 默认时序规则 **验证步骤**: 1. 运行`report_clocks`检查时钟定义 2. 使用`report_clock_interaction`验证时钟关系 3. 时序分析后查看`report_timing_summary` **典型错误案例**: - 未约束生成的GT收发器时钟 - 将同步时钟误设为异步组 - 遗漏DDR时钟的上升/下降沿约束 建议结合`Clock Wizard`IP的自动约束生成功能,并通过`Timing Constraints Wizard`进行交互式约束检查。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cckkppll

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值