implementation 过程把一个【逻辑网表(logical netlist)和约束(constraints)】转换为一个【完成布局(place)和布线(route)的设计】。
Vivado高层次设计流程:
Markdown将文本转换为 HTML。
导入之前综合后的网表文件,支持的格式:
*UltraScale器件不支持 NGC。
*IP核使用XCI文件而不是DCP文件,这确保IP输出产品在设计流程的所有阶段都得到一致的使用。
*如果时RTL文件,Vivado会自动先完成综合。
两种类型的约束:物理(physical)约束核时序(timing)约束:
物理约束:定义了逻辑设计对象和设备资源之间的关系,如
时序约束:定义了设计的频率要求,采用标准SDC编写。
在没有时间限制的情况下,Vivado只针对线路长度和布线拥塞优化设计,不评估或改善设计的性能。
*不支持UCF格式的约束文件。
约束集是可应用于项目模式中的设计的约束文件列表,该集合包含XDC或Tcl文件中获取的设计约束。
合法的约束集结构:
建议:按功能将约束分离到不同的约束文件中,以(a)使约束策略更清晰,(b)便于目标时间安排和实施更改。
多个约束集
一个项目可以有多个约束集,这样就可以按不同约束进行implementation。
也可以用一个约束集给Synthesis,一个约束集给implementation。这样可以在综合,实现,和仿真时应用不同的约束。
多个约束集的好处:
技巧:要验证时序约束,请在synthesis后的设计上运行report_timing_summary。在implementation之前修复有问题的约束!
Checkpoint文件(.dcp)用来保存设计流程中某个关键节点的物理数据库,这个数据库存储了布局和布线的关键信息,一个checkpoint就是一个关键运行节点的快照。
.dcp文件包含:
dcp文件可以被其他流程用Tcl命令使用,但是不能被修改。
重要:在项目模式下,Vivado设计工具会随着设计的进展自动保存和恢复检查点。在非项目模式下,您必须在设计流程的适当阶段保存检查点,否则,进程将丢失。
写checkpoint文件:
读checkpoint文件:
非项目模式下implementation的Tcl脚本:
项目模式:
主菜单Flow->creat run->implementation可以创建新的implementation
Name:implementation的名字。
Synth Name:将要生成(或已经生成)要实现的implementation网表的Synthesis。
Constraints Set:约束集。
设置窗口可以进行设置。
策略是为了解决synthesis和implementation中问题而提前定义的方法。
技巧:不可以改变内置的策略,但是可以复制,修改然后保存为自定义的策略。
区域4中?号可以创建新策略。
区域4中的copy符号可以复制当前策略,并保存在自定义策略列表。
自定义策略存储路径:C:\Users<username>\AppData\Roaming\Xilinx\Vivado\strategies
将策略文件复制到 /Vivado//strategies 就可以使用这个策略。
逻辑优化确保进行placement之前是最高效的逻辑设计。它执行网表连接性检查对潜在的设计问题提出警告,比如多驱动的nets,无驱动的inputs,逻辑优化也执行block RAM的功耗优化。
通常,设计连接错误会延续到逻辑优化步骤,从而导致设计流程失败。在implementation之前用DRC 报告确保有效的连接是很有必要的。
逻辑优化会跳过DONT_TOUCH属性为TRUE的cells和nets。
逻辑优化的指令列表:
-debug_log和-verbose
Vivado在7系列中运用丰富的时钟使能进行功耗优化。这些工具创建精细的时钟门控,或逻辑门控信号,消除寄存器中不必要的切换活动。
此外,在触发器级,CEs实际上是对时钟进行使能而不是触发器的D输入和反馈Q输出。这增加了CE输入的性能,而且也降低了时钟功率。
根据功耗决定是否添加门控时钟。对于block RAMs根据是否有数据输入或输出添加门控时钟。
Vivado Design Suite placer将网表中的cells放置到器件中的特定位置。
Vivado placer同时优化设计布局:
在开始布局之前,Vivado实现运行设计规则检查(drc),包括用户从report_drc选择的drc,以及Vivado placer内部的内置drc。内部drc检查非法放置,如没有LOC约束的内存IP单元和具有冲突iostandard的I/O bank。
规则检查之后开始,时钟和I/O单元同时放置因为它们通常通过特定于目标Xilinx器件的复杂放置规则相互关联。
placer布局的目标
布置不确定的逻辑。比如LOC属性和Pblock赋值。
当时钟和I/O布局失败的原因:
技巧:首先使用place_ports来运行时钟和I/O放置步骤。然后运行place_design。如果端口放置失败,则将放置位置保存到内存中,以便进行故障分析。
类型以及对应有益处的设计类型:
可选的指令:
其他的选项:
物理优化对设计的负松弛路径进行时序驱动优化。物理优化有post-place和post-route两种操作方式。
在post-place模式下,基于cells布局的时序估计进行优化。物理优化会根据逻辑优化和cells布局的需要自动合并网表的变化。
在post-route模式下,根据实际路由延迟进行优化。除了在逻辑更改和放置cells上自动更新网表外,物理优化还会根据需要自动更新路由。
路径后物理优化最有效地用于有一些失败路径的设计。在WNS<-0.200 ns或超过200个失败端点的设计上使用post-route物理优化会导致长时间运行,而对QOR几乎没有改善。
在post-place模式中,整体物理优化更加积极,因为在post-place模式中有更多的逻辑优化机会。在post-route模式下,物理优化往往更加保守,以避免干扰时间封闭的路由。在运行之前,物理优化检查设计的路由状态,以确定使用哪种模式,post-place或post-route。
如果设计没有负松弛,并且要求进行基于时间的优化选项的物理优化,则命令会在不执行优化的情况下迅速退出。为了平衡运行时和设计性能,物理优化不会自动尝试优化设计中的所有失败路径。只有前几个百分比的失败路径被考虑进行优化。因此,在设计中可以使用多次连续的物理优化来逐步减少失败路径的数量。
指令为phys_opt_design命令提供了不同的行为模式。一次只能指定一个指令,并且指令选项与其他选项不兼容。下面描述了可用的指令。
Vivado router在完成布局的设计上执行布线,并在完成布线的设计上执行优化以解决保持时间问题。
Vivado router从一个完成布局的设计开始,并试图路由所有的nets。它可以从未路由、部分路由或完全路由的已布局的设计开始。
对于部分路由设计,Vivado router使用现有路由作为起点,而不是从头开始。对于全路由设计,router检查是否时序违例,并尝试重新对关键部分进行布线以满足时序。
注意:重布线过程通常被称为“rip-up and re-route”。
router提供对整个设计布线或者单独的nets和pins进行布线的选项。
当对整个设计进行布线,这个过程时时序优先的,基于时序约束自动估计时间裕量。
对单独的nets和pins进行布线有两种模式:
交互router模式使用快速、轻量级的时间模型以在交互式会话中获得更大的响应能力。由于估计的延迟是悲观的,因此牺牲了一些延迟精度。在此模式下,时间限制将被忽略,但有几个选择会影响布线:
在Auto-Delay模式下,布线器运行基于时序约束的自动时间裕量计算的时序驱动过程,但与默认过程不同的是,只有指定的nets或pins被布线。这种模式用于在布线设计的其余部分之前布线关键的nets或pins。这包括setup-critical、hold-critical或两者兼有的nets或pins。在包含大量布线的设计中,自动延迟模式并不适用于单独的net。应该使用交互式路由。
当对许多单独的nets或pins进行布线时,为获得最佳结果,对这些问题分别进行优先排序和布线。这避免了对关键路径资源的争用。
布线需要一次初始化的“运行时点击”,即使在nets和pins的布线时也是如此。初始化时间随着设计的大小和器件的大小而增加。布线器不需要重新初始化,除非设计被关闭并重新打开。
当对整个设计进行布线时,指令为route_design命令提供了不同的行为模式。一次只能指定一个指令。指令选项与大多数其他选项不兼容,以防止冲突的优化。以下指令可用:
UG904:Vivado Design Suite User Guide: Implementation