尽管 Vivado 不支持 “placement cost tale”的功能,InTime 却有一个相似功能叫做“Placement Exploration”配方(Receipe),并且不会对性能产生任何影响。在本文中,我们将通过展示几则用户案例的结果,来了解这个布局配方的作用以及它能对您有哪些帮助。
<strong>1. 什么是“Placement Exploration”配方?</strong>
Placement Exploration 这种策略可以将非关键的寄存器位置随机化。这样可以让 Vivado 探索更多的可能性,使用不同的布局布线计算来产生不同的结果,同时不会影响设计的功能。
<strong>2. 运行原理</strong>
这个配方需要设计有一些非关键的单元(单元已经达到时序路径),目标器件要有一些未使用的 slice。设计中未使用的 slice 越多,就有更多的运行组合可以创造出来,从而提升随机性,取得更好的结果。
如果这些需要没有满足,用户在运行配方的时候会看到下面的报错。
<center><img src="http://xilinx.eetrend.com/files-eetrend-xilinx/article/201810/13729-398…; width="670"></center>
这种情况下,您需要重新检验设计,看看是不是没有假路径(false path,适用于 InTime 2.2.1以前的版本)或者是不是器件可用的 slice 数量较少。如果是因为没有假路径,您可以查看是否可以为设计设置假路径。了解如何具体地使用这个配方,请参考这个<a href="https://support.plunify.com/en/wp-content/uploads/sites/5/2017/08/Appli…; target="_blank">应用附注</a>。
<strong>3. 真实案例</strong>
我们继续前面案例。下面的代码可以让您使用FEP Tcl API 来在云端编译:
项目一
· Device 器件: xcvu190
· TNS (ns) : -5841.436
· WNS (ns): -0.725
· WHS (ns): 0.016
· CLB Utilization 利用率 (%): 80.15
· Run Time 运行时间: 04:46
<center><img src="http://xilinx.eetrend.com/files-eetrend-xilinx/article/201810/13729-398…; width="670"></center>
本设计优化了两轮。每轮有20-30次编译以及结果。对于 placement exploration,我们从前一轮的结果中选取最好的WNS 结果,在这个案例中,是-0.417ns。然后将它设置成“父版本”来进行探索。在下表(log)中,您可以看到结果中“种子”的作用,WNS 有着非常广泛的分布值。最好 WNS结果的平均值是-0.694ns,产生了高达0.457ns的巨大变化。如果您对比最好 WNS 结果和上一轮的 Placement Exploration,WNS 显著提升了43%。
<center><img src="http://xilinx.eetrend.com/files-eetrend-xilinx/article/201810/13729-398…; alt="图一: TNS 盒状图"></center>
<p align="center"><strong>图一: TNS 盒状图</strong></p>
<center><img src="http://xilinx.eetrend.com/files-eetrend-xilinx/article/201810/13729-398…; alt="图二: WNS盒状图"></center>
<p align="center"><strong>图二: WNS盒状图</strong></p>
项目二
· Device器件: xcvu190-flgb2104
· TNS (ns) : -10229.035
· WNS (ns): -1.203
· WHS (ns): 0.016
· CLB Utilization 使用率(%): 75.71
· Run Time 运行时间: 04:33
<center><img src="http://xilinx.eetrend.com/files-eetrend-xilinx/article/201810/13729-398…; width="670"></center>
与项目一相似,项目二也有两轮优化。在第一轮中,目标是取得最好的WNS。我们使用上一轮最好的 WNS 结果(-0.404),运行一轮 placement exploration。基于 placement exploration 的结果, 平均值是-0.512ns。最好结果是-0.187,对于原父版本的结果来说,325ps是一个高达53%的巨幅提升。
<center><img src="http://xilinx.eetrend.com/files-eetrend-xilinx/article/201810/13729-398…; alt="图三: 项目二 TNS"></center>
<p align="center"><strong>图三: 项目二 TNS</strong></p>
<center><img src="http://xilinx.eetrend.com/files-eetrend-xilinx/article/201810/13729-398…; alt="图四: 项目二 WNS"></center>
<p align="center"><strong>图四: 项目二 WNS</strong></p>
<strong>4. 技术总结</strong>
结果的提升不言自明。如果您在为最终的300ps提升而奋战,请考虑使用这个方法,它能帮您在截止日期之前达到要求。
最后一点需要说明的是,运行附加的编译需要很多计算能力和运行时间。而最好的解决方案是云计算,您可以使用您自己的云服务,或者<a href="https://cloud.plunify.com/register?lang=CN&utm_source=WeChat2018100…; target="_blank">注册一个 Plunify Cloud 账户</a>。如果您有兴趣使用 InTime,可以<a href="https://www.plunify.com/cn/free-evaluation/?utm_source=WeChat20181005&a…; target="_blank"><strong>点此申请免费试用</strong></a>。
文章来源: <span id="profileBt"><a href="https://mp.weixin.qq.com/s/ZlF2NPvereBPOMhHB1VE5g">Plunify社区FPGA设计优化</a…;