Vivado Design Suite中route_design命令脚本示例

本文详细介绍了四个route_design命令的示例脚本,这些脚本需要添加到工程的约束文件.xdc中,结果保存在工程文件中的runs\impl_1中的runme.log文件。

一、示例脚本1

route_design write_checkpoint -force $outputDir/post_route report_timing_summary -file $outputDir/post_route_timing_summary.rpt

该脚本执行了以下步骤:
a. 对设计进行布线(Routing)。
b. 在完成布线后写入设计检查点。
c. 生成时序摘要报告。
d. 将报告写入指定的文件。
布线是实现流程的一部分,或者作为 Tcl 脚本的一部分在 place_design 之后运行 route_design。路由器在日志中提供信息以指示进度,例如当前阶段(初始化、全局布线迭代和时序更新)。在全局布线结束时,日志包括周期性更新,显示路由器尝试实现完全合法化设计时当前重叠网络的数量。例如,时序更新会在整个流程中提供,以显示时序收敛的进度。
route_design 脚本用于对FPGA设计进行布线,并在此过程中提供关于布线进度和时序更新的详细信息。布线后,脚本会保存设计的检查点,并生成一个包含时序摘要的报告,该报告随后被写入到指定的文件中。
1、全局迭代(Global Iteration)
在全局布线迭代过程中,路由器会检查并尝试解决信号线之间的重叠问题。重叠指的是两条或多条信号线试图占用同一物理位置的情况,这在实际硬件中是不可能实现的。因此,路由器需要不断地调整信号线的路径,直到所有信号线都能在不重叠的情况下布通。
例如:

Phase 4.1  Global Iteration 0
Number of Nodes with overlaps = 435 
Number of Nodes with overlaps = 3
Number of Nodes with overlaps = 1
Number of Nodes with overlaps = 0。

第一句表示在全局布线迭代的某个时刻,存在435个节点(通常是信号线的端点或交点)具有重叠问题。随后,路由器在迭代过程中成功地解决了所有的重叠问题,布线已经变得合法化,即所有的信号线现在都有各自不重叠的路径。
2、时序摘要(Timing Summary)
提供了关于FPGA设计在布线后的时序性能的关键信息。例如:

[Route 35-57] Estimated Timing Summary | WNS=0.105 | TNS=0 | WHS=0.051 | THS=0 

解释:
WNS (Worst Negative Slack) :表示最差的负裕量。负裕量表示路径的实际延迟时间与要求的延迟时间之差,如果这个值是负数,则意味着路径的实际延迟超过了要求,这可能导致功能上的错误。 WNS是所有路径中负裕量最大的那个值,它反映了设计中时序最紧张的部分。 TNS (Total Negative Slack):表示所有路径负裕量的总和。通过这个值可以了解设计中存在多少时序紧张的情况。
WHS (Worst Hold Slack):表示最差的保持裕量。保持裕量表示路径的保持时间与实际延迟时间之差,它确保信号在稳定之前不会被下一个信号覆盖。WHS是所有路径中保持裕量最小的那个值。 THS (Total Hold Slack) 表示所有路径保持裕量的总和。
需要注意的是,时序分析包括建立和保持时间的检查。在FPGA设计的某些中间布线阶段,可能会跳过保持时间的分析以加快流程。如果未执行保持时间分析,路由器将显示WHS和THS的值为"N/A"(不适用)。
在布线完成后,路由器会报告布线利用率摘要和最终的估计时序摘要。布线利用率摘要通常包括使用的逻辑单元、内存块、DSP切片等的数量,以及它们相对于可用资源的百分比。
3、路由器利用率总结(Router Utilization Summary)

Global Vertical Routing Utilization = 15.3424%
Global Horizontal Routing Utilization  = 16.3981%
Routable Net Status:Does not include unroutable nets such as driverless and loadless. 
Run report_route_status for detailed report
Number of Failed Nets = 0
Number of Unrouted Nets = 0
Number of Partially Routed Nets = 0
Number of Node Overlaps = 0

解释:
Global Vertical Routing Utilization:表示在整个布线过程中,垂直方向(通常是Y轴)上使用的布线资源的百分比。
Global Horizontal Routing Utilization :表示在整个布线过程中,水平方向(通常是X轴)上使用的布线资源的百分比。
Routable Net Status:这部分给出了关于网络中布线状态的统计信息,但不包括那些无法布线的网络,比如没有驱动或没有负载的网络。
Number of Failed Nets:在布线过程中,由于某些原因(如空间不足、连接问题等)无法成功布线的网络数量。
Number of Unrouted Nets:那些尚未开始或尝试布线的网络数量。
Number of Partially Routed Nets:有些网络可能只部分地被布线了,但尚未完成。这部分数量表示了这些网络的数量。
Number of Node Overlaps:在布线过程中,如果两个或更多的布线元素(如线或通孔)尝试占用同一个物理位置,就会发生节点重叠。这个数量表示了这种情况发生的次数。
从上述总结中,在当前的布线过程中,没有失败、未布线或部分布线的网络,也没有节点重叠的情况。这意味着布线过程相对顺利,所有网络都已成功布线,且没有发生物理冲突。

二、示例脚本2

这段示例脚本主要描述了在一个电子设计自动化(EDA)流程中,如何优先布线(routing)设计中最重要的网络(nets)。脚本的具体步骤和背后的逻辑如下:

set preRoutes [get_nets -of [get_timing_paths -max_paths 10]]
route_design -nets [get_nets $preRoutes] -delay
route_design -preserve

第一句是首先通过get_timing_paths -max_paths 10获取设计中时序最关键的10条路径。然后,使用get_nets -of从这些路径中提取出网络,并将这些网络赋值给变量 p r e R o u t e s 。第二句是使用 r o u t e d e s i g n 命令对 preRoutes。 第二句是使用route_design命令对 preRoutes。第二句是使用routedesign命令对preRoutes中的网络进行布线,-nets选项指定了要布线的网络,-delay选项可能意味着在布线时考虑延迟,以最小化这些网络的延迟。
第三句是保留这些关键网络的布线,并继续布线其余部分:这行代码继续进行设计的整体布线,但-preserve选项意味着保留之前对$preRoutes中网络的布线结果。这通常是为了避免在后续布线过程中对这些关键网络进行不必要的修改。
在这个示例脚本中,首先布线了几个关键的网络,然后对整个设计进行布线。这展示了如何对单个网络和引脚(在这个情况下是网络)进行布线,这通常是为了解决特定的布线问题,比如:
在全面布线之前,预先布线关键网络并锁定资源。
手动取消非关键网络的布线,以释放布线资源给更关键的网络。
脚本中的第一行route_design命令实际上并没有在示例中明确给出,但从注释中我们可以推测,它可能用于初始化路由器并对一些必要的网络布线,比如时钟网络。这些网络通常需要在整个设计的其他部分之前布线,因为它们对时序至关重要。
总的来说,这个脚本是电子设计自动化(EDA)流程中优化布线步骤的一个例子,目的是通过优先处理关键网络来优化设计的整体性能。

三、示例脚本3

set preRoutes [get_nets -of [get_timing_paths -max_paths 10]]
lappend preRoutes [get_nets -of [get_timing_paths -hold -max_paths 10]]
route_design -nets [get_nets $preRoutes] -auto_delay
route_design -preserve

与示例2一样,首先布线几个关键的网络,然后对整个设计进行布线。不同之处在于使用了-auto_delay选项而不是-delay。路由器对关键网络进行时序驱动的布线,这虽然牺牲了一些运行时间,但可以获得更高的准确性。这对于那些同时涉及建立时间关键路径和保持时间关键路径的网络特别有用,因为布线必须在一定的延迟范围内,以满足建立时间和保持时间的要求。
在这个脚本中,我们考虑了两种类型的时序关键路径:建立时间关键路径和保持时间关键路径。建立时间是指数据必须在时钟边沿到达之前稳定的时间,而保持时间是指数据必须在时钟边沿之后保持稳定的时间。这两个因素对于确保电路正确运行都至关重要。
最后,使用-preserve选项确保了在布线设计的其余部分时,先前布线的关键网络的布线结果不会被更改。这有助于保护这些关键网络的时序性能,并确保整个设计的稳定性和性能。

四、示例脚本 4

route_design 
# Unroute all the nets in u0/u1, and route the critical nets first

route_design -unroute [get_nets u0/u1/*] 
route_design -delay -nets [get_nets $myCritNets] 
route_design -preserve

这个示例脚本中的策略展示了一种可能的方法,用于解决由于拥塞导致的时序失败问题。在示例设计中,一些由变量 m y C r i t N e t s 表示的关键网络需要与实例 u 0 / u 1 中的网络相同的设备区域中的布线资源。然而, u 0 / u 1 中的网络并不是特别时序关键的,因此首先取消它们的布线,以便关键网络 myCritNets表示的关键网络需要与实例u0/u1中的网络相同的设备区域中的布线资源。然而,u0/u1中的网络并不是特别时序关键的,因此首先取消它们的布线,以便关键网络 myCritNets表示的关键网络需要与实例u0/u1中的网络相同的设备区域中的布线资源。然而,u0/u1中的网络并不是特别时序关键的,因此首先取消它们的布线,以便关键网络myCritNets能够以最小的可能延迟进行布线。然后,使用route_design -preserve对整个设计进行布线。-preserve开关保留了$myCritNets的布线,而之前未布线的u0/u1网络则重新进行布线。
通过这种方式,可以优先处理那些对时序要求严格的关键网络,确保它们获得最佳的布线结果。同时,通过取消非关键网络的布线,可以释放布线资源,使得关键网络的布线更加容易实现。最后,使用-preserve选项确保在布线整个设计时,之前已经布线好的关键网络不会被改变,从而保护它们的时序性能。这种策略有助于在资源受限的情况下优化设计的整体性能。

相关推荐

  1. Vivado Design Suiteroute_design命令脚本示例

    2024-04-13 10:06:01       15 阅读
  2. node.js常用的命令示例

    2024-04-13 10:06:01       18 阅读
  3. shell命令脚本特殊注释指定脚本解释器

    2024-04-13 10:06:01       14 阅读
  4. Ubuntu 命令脚本

    2024-04-13 10:06:01       33 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-13 10:06:01       17 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-13 10:06:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-13 10:06:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-13 10:06:01       18 阅读

热门阅读

  1. div浮动后高度丧失问题

    2024-04-13 10:06:01       13 阅读
  2. 新型物联网创新实践教学体系建设

    2024-04-13 10:06:01       12 阅读
  3. HBase Shell命令

    2024-04-13 10:06:01       11 阅读
  4. Vivado Design Suite中的Routing优化

    2024-04-13 10:06:01       17 阅读
  5. 洛谷 P2863

    2024-04-13 10:06:01       16 阅读