<div id="article_content" class="article_content clearfix">
<link rel="stylesheet" href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-d7093e7f7c.css">
<div id="content_views" class="markdown_views prism-atom-one-light">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
<path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path>
</svg>
<p></p>
<div class="toc">
<h3><a name="t0"></a>目录</h3>
<ul><li><a href="#1__6" target="_self">1 综合前的准备</a></li><li><ul><li><a href="#11_Vivado_Implementation__14" target="_self">1.1 Vivado Implementation 子过程</a></li><li><a href="#12_Implementation_24" target="_self">1.2 管理Implementation</a></li><li><ul><li><a href="#121__25" target="_self">1.2.1 工程模式和非工程模式</a></li></ul>
</li><li><a href="#14_Implementation_39" target="_self">1.4 用约束引导Implementation</a></li><li><ul><li><a href="#141__40" target="_self">1.4.1 物理约束和时序约束</a></li><li><a href="#144__53" target="_self">1.4.4 约束集</a></li><li><a href="#145__74" target="_self">1.4.5 约束中也可以添加关于属性的描述</a></li></ul>
</li><li><a href="#15_Checkpointssnapshots_76" target="_self">1.5 用Checkpoints保存设计快照(snapshots)</a></li></ul>
</li><li><a href="#2_Implementing_the_Design_90" target="_self">2 Implementing the Design</a></li><li><ul><li><ul><li><a href="#223__109" target="_self">2.2.3 设计运行的相关设置</a></li></ul>
</li></ul>
</li><li><a href="#23_implementation_116" target="_self">2.3 自定义implementation的策略</a></li><li><ul><li><ul><li><a href="#232__117" target="_self">2.3.2 定义策略</a></li><li><a href="#234__125" target="_self">2.3.4 查看,复制和修改策略</a></li></ul>
</li><li><a href="#210_Logic_Optimization_137" target="_self">2.10 逻辑优化(Logic Optimization)</a></li><li><ul><li><a href="#2102_Opt_Design_Directives_144" target="_self">2.10.2 Opt Design: -Directives指令说明</a></li><li><a href="#2103__167" target="_self">2.10.3 逻辑优化约束</a></li></ul>
</li><li><a href="#210_Power_Optimization_174" target="_self">2.10 Power Optimization</a></li><li><ul><li><a href="#2101_CEs_176" target="_self">2.10.1 时钟使能(CEs)</a></li><li><a href="#2102__180" target="_self">2.10.2 智能门控时钟</a></li></ul>
</li><li><a href="#211_Placement_186" target="_self">2.11 Placement</a></li><li><a href="#2112__195" target="_self">2.11.2 设计规则检查</a></li><li><a href="#2113_IO_198" target="_self">2.11.3 时钟和I/O布局</a></li><li><ul><li><a href="#2115_Place_Designdirectives_218" target="_self">2.11.5 Place Design:-directives指令说明</a></li></ul>
</li><li><a href="#214_Physical_Optimization_261" target="_self">2.14 Physical Optimization</a></li><li><a href="#2144_PostPlace_Phys_Opt_Design_directive_274" target="_self">2.14.4 Post-Place Phys Opt Design: -directive指令说明</a></li><li><a href="#213_Routing_291" target="_self">2.13 Routing</a></li><li><ul><li><a href="#2135_Route_Designdirective_319" target="_self">2.13.5 Route Design:-directive指令说明</a></li></ul>
</li></ul>
</li><li><a href="#_334" target="_self">参考文献</a></li></ul>
</div>
<p></p>
<p>implementation 过程把一个【逻辑网表(logical netlist)和约束(constraints)】转换为一个【完成布局(place)和布线(route)的设计】。</p>
<h1><a name="t1"></a><a id="1__6"></a>1 综合前的准备</h1>
<p><a href="https://so.csdn.net/so/search?q=Vivado&spm=1001.2101.3001.7020" target="_blank" class="hl hl-1" data-report-click="{"spm":"1001.2101.3001.7020","dest":"https://so.csdn.net/so/search?q=Vivado&spm=1001.2101.3001.7020"}">Vivado</a>高层次设计流程:</p>
<p>Markdown将文本转换为 HTML。<br> <img src="https://img-blog.csdnimg.cn/969abe00441541acb388a0aad2598c8b.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_Q1NETiBAdzBzaGlzaGFiaQ==,size_25,color_FFFFFF,t_70,g_se,x_16#pic_center" alt="在这里插入图片描述"></p>
<h2><a name="t2"></a><a id="11_Vivado_Implementation__14"></a>1.1 Vivado Implementation 子过程</h2>
<ol><li><code>Opt Design</code>:优化逻辑设计,使其更容易适合目标Xilinx器件。</li><li><code>Power Opt Design(可选)</code>:优化设计元素,以降低目标Xilinx器件的功率需求。</li><li><code>Place Design</code>:将设计完成在目标Xilinx器件上的布局。</li><li><code>Post-Place Power Opt Design (可选)</code>:额外的优化,以减少布局后的功率。</li><li><code>Post-Place Phys Opt Design(可选)</code>:基于位置估计时序用于优化逻辑和布局,包括复制具有高扇出的驱动以减少扇出。</li><li><code>Route Design</code>:完成目标设计在对应器件上的布线。</li><li><code>Post-Route Phys Opt Design(可选)</code>:用实际的线路延迟来优化逻辑、布局以及布线。</li><li><code>Write Bitstream</code>:为Xilinx器件配置生成bit流。通常,位流的生成是在实现之后。</li></ol>
<h2><a name="t3"></a><a id="12_Implementation_24"></a>1.2 管理Implementation</h2>
<h3><a name="t4"></a><a id="121__25"></a>1.2.1 工程模式和非工程模式</h3>
<ul><li> <p>导入之前综合后的网表文件,支持的格式:</p>
<ul><li>Structural Verilog</li><li>Structural SystemVerilog</li><li>EDIF</li><li>Xilinx NGC</li><li>Synthesized Design Checkpoint (DCP)</li></ul> <p>*UltraScale器件不支持 NGC。<br> *IP核使用XCI文件而不是DCP文件,这确保IP输出产品在设计流程的所有阶段都得到一致的使用。<br> *如果时RTL文件,Vivado会自动先完成综合。</p> </li></ul>
<h2><a name="t5"></a><a id="14_Implementation_39"></a>1.4 用约束引导Implementation</h2>
<h3><a name="t6"></a><a id="141__40"></a>1.4.1 物理约束和<a href="https://so.csdn.net/so/search?q=%E6%97%B6%E5%BA%8F%E7%BA%A6%E6%9D%9F&spm=1001.2101.3001.7020" target="_blank" class="hl hl-1" data-report-click="{"spm":"1001.2101.3001.7020","dest":"https://so.csdn.net/so/search?q=%E6%97%B6%E5%BA%8F%E7%BA%A6%E6%9D%9F&spm=1001.2101.3001.7020"}">时序约束</a></h3>
<p>两种类型的约束:物理(physical)约束核时序(timing)约束:</p>
<ul><li> <p>物理约束:定义了逻辑设计对象和设备资源之间的关系,如</p>
<ul><li>引脚布局</li><li>各单元的绝对或相对位置,包括块RAM、DSP、LUT和触发器。</li><li>预布局(Floorplanning)约束,指定单元在器件中的区域。</li><li>器件配置。</li></ul> </li><li> <p>时序约束:定义了设计的频率要求,采用标准SDC编写。<br> 在没有时间限制的情况下,Vivado只针对线路长度和布线拥塞优化设计,不评估或改善设计的性能。</p> </li></ul>
<p>*不支持UCF格式的约束文件。</p>
<h3><a name="t7"></a><a id="144__53"></a>1.4.4 约束集</h3>
<p>约束集是可应用于项目模式中的设计的约束文件列表,该集合包含XDC或Tcl文件中获取的设计约束。</p>
<p>合法的约束集结构:</p>
<ul><li>一个约束集有多个约束文件。</li><li>约束集物理约束和时序约束时分开的。</li><li>一个主约束文件。</li><li>新的约束文件可以更改之前的约束。</li><li>多个约束集。</li></ul>
<p>建议:按功能将约束分离到不同的约束文件中,以(a)使约束策略更清晰,(b)便于目标时间安排和实施更改。<br> <strong>多个约束集</strong><br> 一个项目可以有多个约束集,这样就可以按不同约束进行implementation。<br> 也可以用一个约束集给Synthesis,一个约束集给implementation。这样可以在综合,实现,和仿真时应用不同的约束。<br> 多个约束集的好处:</p>
<ul><li>给相同的工程设定不同的器件,不同的器件需要不一样的物理和时序约束。</li><li>执行what-if设计探索。使用约束集来探索floorplanning和over-constraining设计的各种场景。</li><li>管理约束改变,用一个独立的约束文件覆盖主约束。</li></ul>
<p>技巧:要验证时序约束,请在synthesis后的设计上运行report_timing_summary。在implementation之前修复有问题的约束!</p>
<h3><a name="t8"></a><a id="145__74"></a>1.4.5 约束中也可以添加关于属性的描述</h3>
<h2><a name="t9"></a><a id="15_Checkpointssnapshots_76"></a>1.5 用Checkpoints保存设计快照(snapshots)</h2>
<p>Checkpoint文件(.dcp)用来保存设计流程中某个关键节点的物理数据库,这个数据库存储了布局和布线的关键信息,一个checkpoint就是一个关键运行节点的快照。<br> .dcp文件包含:</p>
<ul><li>当前的网表,包含implementation过程中所有的优化。</li><li>设计约束。</li><li>implementation的结果。</li></ul>
<p>dcp文件可以被其他流程用Tcl命令使用,但是不能被修改。<br> <strong>重要</strong>:在项目模式下,Vivado设计工具会随着设计的进展自动保存和恢复检查点。在非项目模式下,您必须在设计流程的适当阶段保存检查点,否则,进程将丢失。</p>
<p>写checkpoint文件:<code>write_checkpoint</code><br> 读checkpoint文件:<code>open_checkpoint</code></p>
<h1><a name="t10"></a><a id="2_Implementing_the_Design_90"></a>2 Implementing the Design</h1>
<p>非项目模式下implementation的Tcl脚本:</p>
<ul><li>opt_design</li><li>power_opt_design</li><li>place_design</li><li>phys_opt_design</li><li>route_design</li><li>write_bitstream</li></ul>
<p>项目模式:<br> 主菜单Flow->creat run->implementation可以创建新的implementation</p>
<p><img src="https://img-blog.csdnimg.cn/1e747749b7be4443a010fb987bdc3f8e.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_Q1NETiBAdzBzaGlzaGFiaQ==,size_45,color_FFFFFF,t_70,g_se,x_16#pic_center" alt="在这里插入图片描述"></p>
<p>Name:implementation的名字。<br> Synth Name:将要生成(或已经生成)要实现的implementation网表的Synthesis。<br> Constraints Set:约束集。</p>
<h3><a name="t11"></a><a id="223__109"></a>2.2.3 设计运行的相关设置</h3>
<p>设置窗口可以进行设置。</p>
<p><img src="https://img-blog.csdnimg.cn/69a46d9be83c451d9a73c24857dc7371.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_Q1NETiBAdzBzaGlzaGFiaQ==,size_40,color_FFFFFF,t_70,g_se,x_16#pic_center" alt="在这里插入图片描述"></p>
<h1><a name="t12"></a><a id="23_implementation_116"></a>2.3 自定义implementation的策略</h1>
<h3><a name="t13"></a><a id="232__117"></a>2.3.2 定义策略</h3>
<p>策略是为了解决synthesis和implementation中问题而提前定义的方法。</p>
<ul><li>策略是为Vivado Implementation功能而在预先的配置集中定义的。</li><li>策略与不同的工具和版本相关。</li><li>每个发行的Vivado设计环境包含了版本特定的策略。</li></ul>
<p><strong>技巧</strong>:不可以改变内置的策略,但是可以复制,修改然后保存为自定义的策略。</p>
<h3><a name="t14"></a><a id="234__125"></a>2.3.4 查看,复制和修改策略</h3>
<p><img src="https://img-blog.csdnimg.cn/d59429fb591e49f6b15a5d99e08e7bf3.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_Q1NETiBAdzBzaGlzaGFiaQ==,size_40,color_FFFFFF,t_70,g_se,x_16#pic_center" alt="在这里插入图片描述"></p>
<p>区域4中➕号可以创建新策略。<br> 区域4中的copy符号可以复制当前策略,并保存在自定义策略列表。</p>
<p>自定义策略存储路径:C:\Users<username>\AppData\Roaming\Xilinx\Vivado\strategies</p>
<p>将策略文件复制到 /Vivado//strategies 就可以使用这个策略。</p>
<h2><a name="t15"></a><a id="210_Logic_Optimization_137"></a>2.10 逻辑优化(Logic Optimization)</h2>
<p>逻辑优化确保进行placement之前是最高效的逻辑设计。它执行网表连接性检查对潜在的设计问题提出警告,比如多驱动的nets,无驱动的inputs,逻辑优化也执行block RAM的功耗优化。</p>
<p>通常,设计连接错误会延续到逻辑优化步骤,从而导致设计流程失败。在implementation之前用DRC 报告确保有效的连接是很有必要的。</p>
<p>逻辑优化会跳过DONT_TOUCH属性为TRUE的cells和nets。</p>
<h3><a name="t16"></a><a id="2102_Opt_Design_Directives_144"></a>2.10.2 Opt Design: -Directives指令说明</h3>
<p>逻辑优化的指令列表:</p>
<p><img src="https://img-blog.csdnimg.cn/78e03257d3684e039f525327b20f120f.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_Q1NETiBAdzBzaGlzaGFiaQ==,size_26,color_FFFFFF,t_70,g_se,x_16#pic_center" alt="在这里插入图片描述"></p>
<ul><li><code>Explore</code>:运行多重优化。</li><li><code>ExploreArea</code>:强调减少组合逻辑的多重优化。</li><li><code>AddRemap</code>:运行默认的逻辑优化,并进行LUT重新映射以减少逻辑级别。</li><li><code>ExploreSequentialArea</code>:运行强调减少寄存器和相关组合逻辑的多重逻辑优化。</li><li><code>RuntimeOptimized</code>:运行最少的逻辑优化,以设计性能换取运行时间。</li><li><code>NoBramPowerOpt</code>:运行所有默认的优化除了 block RAM 功耗优化。</li><li><code>ExploreWithRemap</code>:在Explore的基础上假设Remap优化。</li><li><code>Default</code>:以默认设置运行opt_design。</li></ul>
<p><img src="https://img-blog.csdnimg.cn/ecb2600021514a1ab36f82e98d0f126d.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_Q1NETiBAdzBzaGlzaGFiaQ==,size_34,color_FFFFFF,t_70,g_se,x_16#pic_center" alt="在这里插入图片描述"></p>
<p><strong>-debug_log和-verbose</strong></p>
<ul><li>-debug_log查看更多的优化结果细节。</li><li>-verbose查看所有的执行的逻辑优化。</li></ul>
<h3><a name="t17"></a><a id="2103__167"></a>2.10.3 逻辑优化约束</h3>
<ol><li><code>DONT_TOUCH</code></li></ol>
<ul><li>防止对应的nets或cells进行优化。</li><li>约束的cells保证边界不被优化,但内部可能仍然会进行优化,常数仍然可以跨边界传递。为了防止层次内不被优化,使用get_nets的-segments选项将DONT_TOUCH属性应用到所有nets。</li><li>对于<code>MARK_DEBUG</code>为TRUE的nets,工具会自动将<code>DONT_TOUCH</code>属性置为TRUE。</li><li>在极少数情况下,<code>DONT_TOUCH</code>可能限制太大,可能会阻止诸如constant propagation、 sweep或remap等优化,从而导致更困难的时序收敛。在这种情况下,可以将DONT_TOUCH设置为FALSE,同时保持MARK_DEBUG为TRUE。这样做的风险是可能会被优化掉。</li></ul>
<h2><a name="t18"></a><a id="210_Power_Optimization_174"></a>2.10 Power Optimization</h2>
<h3><a name="t19"></a><a id="2101_CEs_176"></a>2.10.1 时钟使能(CEs)</h3>
<p>Vivado在7系列中运用丰富的时钟使能进行功耗优化。这些工具创建精细的时钟门控,或逻辑门控信号,消除寄存器中不必要的切换活动。<br> 此外,在触发器级,CEs实际上是对时钟进行使能而不是触发器的D输入和反馈Q输出。这增加了CE输入的性能,而且也降低了时钟功率。</p>
<h3><a name="t20"></a><a id="2102__180"></a>2.10.2 智能门控时钟</h3>
<p>根据功耗决定是否添加门控时钟。对于block RAMs根据是否有数据输入或输出添加门控时钟。</p>
<p><img src="https://img-blog.csdnimg.cn/b2e2202a9c5844ba972c201bbac10d1d.png#pic_center" alt="在这里插入图片描述"></p>
<h2><a name="t21"></a><a id="211_Placement_186"></a>2.11 Placement</h2>
<p>Vivado Design Suite placer将网表中的cells放置到器件中的特定位置。</p>
<p>Vivado placer同时优化设计布局:</p>
<ul><li>Timing slack: 将cells放置在关键时间路径中以最小化负松弛。</li><li>Wirelength(线长): 总体布局是为了尽量减少连接的总长度。</li><li>Congestion(拥塞): 该Vivado placer监测pin密度和分散cells,以减少潜在的路由拥塞。</li></ul>
<h2><a name="t22"></a><a id="2112__195"></a>2.11.2 设计规则检查</h2>
<p>在开始布局之前,Vivado实现运行设计规则检查(drc),包括用户从report_drc选择的drc,以及Vivado placer内部的内置drc。内部drc检查非法放置,如没有LOC约束的内存IP单元和具有冲突iostandard的I/O bank。</p>
<h2><a name="t23"></a><a id="2113_IO_198"></a>2.11.3 时钟和I/O布局</h2>
<p>规则检查之后开始,时钟和I/O单元同时放置因为它们通常通过特定于目标Xilinx器件的复杂放置规则相互关联。</p>
<p><strong>placer布局的目标</strong></p>
<ul><li>I/O口及其相关的逻辑。</li><li>全局和本地时钟缓冲器。</li><li>时钟管理器 (MMCMs and PLLs)。</li><li>Gigabit 收发器(GT)单元。</li></ul>
<p>布置不确定的逻辑。比如LOC属性和Pblock赋值。</p>
<p>当时钟和I/O布局失败的原因:</p>
<ul><li>由冲突的约束引起的时钟树问题。</li><li>时钟树问题太复杂了。</li><li>RAM和DSP块放置与其他约束冲突,如pblock。</li><li>资源过度使用。</li><li>不符合I/O bank的要求和规则。</li></ul>
<p>技巧:首先使用place_ports来运行时钟和I/O放置步骤。然后运行place_design。如果端口放置失败,则将放置位置保存到内存中,以便进行故障分析。</p>
<h3><a name="t24"></a><a id="2115_Place_Designdirectives_218"></a>2.11.5 Place Design:-directives指令说明</h3>
<p><img src="https://img-blog.csdnimg.cn/51b8ea495ca148d287001de738a7a24c.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_Q1NETiBAdzBzaGlzaGFiaQ==,size_26,color_FFFFFF,t_70,g_se,x_16#pic_center" alt="在这里插入图片描述"></p>
<p>类型以及对应有益处的设计类型:</p>
<ul><li>BlockPlacement:多block RAM, DSP块的设计。</li><li>ExtraNetDelay:多长距离net连接和对许多不同的模块扇出的nets。</li><li>SpreadLogic:容易造成拥塞的高连接性设计。</li><li>ExtraPostPlacementOpt:所有设计类型。</li><li>SSI:分区以缓解拥塞或提高时序。</li></ul>
<p>可选的指令:</p>
<ul><li><code>-Explore</code>:强调细节布局和布局后优化。</li><li><code>-WLDrivenBlockPlacement</code>: 根据线长完成RAM和DSP块的放置。强调时序驱动布局以最小化块之间的距离,可以提高RAM和DSP块的时序。</li><li><code>-EarlyBlockPlacement</code>:根据时序完成RAM和DSP块的放置。放置过程的早期确定RAM和DSP块位置是在,并用作锚放置剩余的逻辑。</li><li><code>-ExtraNetDelay_high</code>: 增加高扇出以及长距离nets预估的延时,这个指令可以改善关键路径的计时,在place_design之后满足时序,但在route_design过程由于过于乐观的估计延迟导致不满足时序要求。ExtraNetDelay_high适用于最悲观水平。</li><li><code>-ExtraNetDelay_low</code>: 与ExtraNetDelay_high一样,但是ExtraNetDelay_low应用最乐观水平。</li><li><code>-SSI_SpreadLogic_high</code>: 在整个SSI器件中分散分布逻辑,以避免造成拥塞区域。支持两个分散级别:高和低。SpreadLogic_high达到分散的最高水平。</li><li><code>-SSI_SpreadLogic_low</code>: SpreadLogic_low实现最小的分散级别。</li><li><code>-AltSpreadLogic_high</code>: 在整个设备中分散分布逻辑,以避免产生拥塞区域。支持三个分散级别:高、中、低。AltSpreadLogic_high实现了最高级别的分散。</li><li><code>-AltSpreadLogic_medium</code>: 中等级别的分散。</li><li><code>-AltSpreadLogic_low</code>: 低级别的分散。</li><li><code>-ExtraPostPlacementOpt</code>: 尽量布局后优化</li><li><code>-ExtraTimingOpt</code>: 在后期阶段使用一个可选的算术集用于时序驱动的布局。</li><li><code>-SSI_SpreadSLLs</code>: Partition across SLRs并且为高连通性区域分配额外的区域。</li><li><code>-SSI_BalanceSLLs</code>: Partition across SLRs当试图平衡SLLs与SLRs时。</li><li><code>-SSI_BalanceSLRs</code>: Partition across SLRs以平衡cells与SLRs。</li><li><code>-SSI_HighUtilSLRs</code>: 迫使placer尝试在每个SLR中把逻辑更紧密地放在一起。</li><li><code>-RuntimeOptimized</code>: 运行更少的迭代次数,以更低的设计性能换取更快的运行时间。</li><li><code>-Quick</code>: 更快的运行时间。</li><li><code>-Default</code>: 使用默认设置运行place_design。</li></ul>
<p>其他的选项:</p>
<ul><li><code>-unplace</code>: unplace选项将在设计中没有固定位置的所有单元和所有端口进行unplace。</li><li><code>-no_timing_driven</code>: 关闭所有的时序约束。这使得基于导线长度的放置更快。</li><li><code>-timing_summary</code>: 放置之后,估计的时序摘要将输出到日志文件。</li><li><code>-verbose</code>:查看cells和I/O布局的更多细节。</li><li><code>-post_place_opt</code>: 放置后优化是一种放置优化,它可能以额外的运行时间为代价提高关键路径的时序。</li><li><code>-fanout_opt</code>: 在可选的扇出优化阶段,placer可以复制驱动高扇出网(fanout > 1000, Slack < 2.0 ns)的寄存器,或者使用专用块负载(BRAM, FIFO, URAM, DSP)的寄存器,这些块负载被放置得很远(Slack < 0.5 ns)。</li><li><code>-no_bufg_opt</code>: 该placer在global routing tracks上路由高扇出net节省布线资源。</li></ul>
<h2><a name="t25"></a><a id="214_Physical_Optimization_261"></a>2.14 Physical Optimization</h2>
<p>物理优化对设计的负松弛路径进行时序驱动优化。物理优化有post-place和post-route两种操作方式。</p>
<p>在post-place模式下,基于cells布局的时序估计进行优化。物理优化会根据逻辑优化和cells布局的需要自动合并网表的变化。</p>
<p>在post-route模式下,根据实际路由延迟进行优化。除了在逻辑更改和放置cells上自动更新网表外,物理优化还会根据需要自动更新路由。</p>
<p>路径后物理优化最有效地用于有一些失败路径的设计。在WNS<-0.200 ns或超过200个失败端点的设计上使用post-route物理优化会导致长时间运行,而对QOR几乎没有改善。</p>
<p>在post-place模式中,整体物理优化更加积极,因为在post-place模式中有更多的逻辑优化机会。在post-route模式下,物理优化往往更加保守,以避免干扰时间封闭的路由。在运行之前,物理优化检查设计的路由状态,以确定使用哪种模式,post-place或post-route。</p>
<p>如果设计没有负松弛,并且要求进行基于时间的优化选项的物理优化,则命令会在不执行优化的情况下迅速退出。为了平衡运行时和设计性能,物理优化不会自动尝试优化设计中的所有失败路径。只有前几个百分比的失败路径被考虑进行优化。因此,在设计中可以使用多次连续的物理优化来逐步减少失败路径的数量。</p>
<h2><a name="t26"></a><a id="2144_PostPlace_Phys_Opt_Design_directive_274"></a>2.14.4 Post-Place Phys Opt Design: -directive指令说明</h2>
<p>指令为phys_opt_design命令提供了不同的行为模式。一次只能指定一个指令,并且指令选项与其他选项不兼容。下面描述了可用的指令。</p>
<p><img src="https://img-blog.csdnimg.cn/418a4ff6a13b4bb4ab8637d936d505a5.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_Q1NETiBAdzBzaGlzaGFiaQ==,size_26,color_FFFFFF,t_70,g_se,x_16#pic_center" alt="在这里插入图片描述"></p>
<ul><li><code>Explore</code>: 在多个优化过程中运行不同的算法,包括对非常高的扇出net的复制,最后一个阶段称为关键路径优化,其中物理优化的子集在【所有端点时钟的顶级关键路径】上运行,而不考虑冗余。</li><li><code>ExploreWithHoldFix</code>: 在多个优化过程中运行不同的算法,包括hold violation<br> fixing和复制高扇出nets。<br> 技巧:Hold-Fixing只修复保持时间高于某个阈值的问题。这是因为router不可以修复任何低于阈值的保持松弛违例。</li><li><code>AggressiveExplore</code>: 类似于Explore,但有不同的优化算法和更激进的目标。</li><li><code>AlternateReplication</code>: 使用不同的算法执行关键cell复制。</li><li><code>AggressiveFanoutOpt</code>: 用不同的算法进行扇出相关的优化,目标更激进。</li><li><code>AddRetime</code>: 执行默认的phys_opt_design流程并添加寄存器重定时。</li><li><code>AlternateFlowWithRetiming</code>: 执行更积极的复制和DSP和block RAM优化,并启用寄存器重定时。</li><li><code>Default</code>: 使用默认设置运行phys_opt_design。</li></ul>
<h2><a name="t27"></a><a id="213_Routing_291"></a>2.13 Routing</h2>
<p>Vivado router在完成布局的设计上执行布线,并在完成布线的设计上执行优化以解决保持时间问题。</p>
<p>Vivado router从一个完成布局的设计开始,并试图路由所有的nets。它可以从未路由、部分路由或完全路由的已布局的设计开始。</p>
<p>对于部分路由设计,Vivado router使用现有路由作为起点,而不是从头开始。对于全路由设计,router检查是否时序违例,并尝试重新对关键部分进行布线以满足时序。</p>
<p>注意:重布线过程通常被称为“rip-up and re-route”。</p>
<p>router提供对整个设计布线或者单独的nets和pins进行布线的选项。</p>
<p>当对整个设计进行布线,这个过程时时序优先的,基于时序约束自动估计时间裕量。</p>
<p>对单独的nets和pins进行布线有两种模式:</p>
<ul><li>交互router模式</li><li>Auto-Delay模式</li></ul>
<p>交互router模式使用快速、轻量级的时间模型以在交互式会话中获得更大的响应能力。由于估计的延迟是悲观的,因此牺牲了一些延迟精度。在此模式下,时间限制将被忽略,但有几个选择会影响布线:</p>
<ul><li>基于资源的布线(默认):布线器从可用的布线资源中进行选择,从而获得最快的运行时间。</li><li>最小延迟(-delay选项):布线器尝试从可用布线资源中获得最小的可能延迟。</li><li>延迟驱动(-max_delay和-min_delay选项):根据最大延迟、最小延迟或两者同时指定定时要求。布线器尝试以满足指定要求的延迟来对nets进行布线。</li></ul>
<p>在Auto-Delay模式下,布线器运行基于时序约束的自动时间裕量计算的时序驱动过程,但与默认过程不同的是,只有指定的nets或pins被布线。这种模式用于在布线设计的其余部分之前布线关键的nets或pins。这包括setup-critical、hold-critical或两者兼有的nets或pins。在包含大量布线的设计中,自动延迟模式并不适用于单独的net。应该使用交互式路由。</p>
<p>当对许多单独的nets或pins进行布线时,为获得最佳结果,对这些问题分别进行优先排序和布线。这避免了对关键路径资源的争用。</p>
<p>布线需要一次初始化的“运行时点击”,即使在nets和pins的布线时也是如此。初始化时间随着设计的大小和器件的大小而增加。布线器不需要重新初始化,除非设计被关闭并重新打开。</p>
<h3><a name="t28"></a><a id="2135_Route_Designdirective_319"></a>2.13.5 Route Design:-directive指令说明</h3>
<p>当对整个设计进行布线时,指令为route_design命令提供了不同的行为模式。一次只能指定一个指令。指令选项与大多数其他选项不兼容,以防止冲突的优化。以下指令可用:</p>
<p><img src="https://img-blog.csdnimg.cn/aa6a88307b6f4fe1910d0903bb24809c.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_Q1NETiBAdzBzaGlzaGFiaQ==,size_26,color_FFFFFF,t_70,g_se,x_16#pic_center" alt="在这里插入图片描述"></p>
<ul><li><code>Explore</code>: 允许布线器在初始布线之后探索不同的关键路径位置。</li><li><code>NoTimingRelaxation</code>: 防止布线器放松时序要求来完成布线。如果布线器在满足时间限制方面有困难,它就会花费更长的时间来尝试满足最初的时序约束。</li><li><code>MoreGlobalIterations</code>: 在所有阶段(而不是最后阶段)使用详细的时序分析,并运行更多的全局迭代,即使时序只提高了一点点。</li><li><code>HigherDelayCost</code>: 调整布线器的成本功能,以强调迭代的延迟,允许在运行时间上进行权衡,以获得更好的性能。</li><li><code>RuntimeOptimized</code>: 运行最少的迭代,以更低的设计性能换取更快的运行时间。</li><li><code>AlternateCLBRouting</code>: 选择需要额外运行时间但可能有助于解决布线拥塞的备选布线算法。</li><li><code>Quick</code>: 绝对的,最快的运行时间,非时间驱动,执行合规设计所需的最低要求。</li><li><code>Default</code>: 使用默认设置运行route_design。</li></ul>
<h1><a name="t29"></a><a id="_334"></a>参考文献</h1>
<p>UG904:Vivado Design Suite User Guide: Implementation</p>
</div><div><div></div></div>
<link href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-89f5acb30b.css" rel="stylesheet">
<link href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-49037e4d27.css" rel="stylesheet">
</div>
12223额
最新推荐文章于 2024-03-18 20:40:48 发布