0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

浅析Vivado中增量编译与设计锁定方法与验证

Hx 来源:开源博客 作者:OpenFPGA   2021-04-14 12:01 次阅读

1增量实现

所谓增量实现,更严格地讲是增量布局和增量布线。它是在设计改动较小的情形下参考原始设计的布局、布线结果,将其中未改动的模块、引脚和网线等直接复用,而对发生改变的部分重新布局、布线。这样做的好处是显而易见的,即节省运行时间,能提高再次布局、布线结果的可预测性,并有助于时序收敛。

增量实现由两个流程构成:原始流程和增量流程,如图所示。其中,原始流程提供网表。这里的网表可以是布局后的DCP文件,也可以是布线后的DCP文件。

100061279-120586-1.png

增量实现流程有两种模式:高复用模式和低复用模式。在高复用模式下,布局、布线会尽可能地复用已有布局、布线的结果。在这种情形下,place_design和route_design都只有三种directive可用,分别为Default、Explore和Quick。

以下两种情形适合于高复用模式。

情形1:很小的设计改动。

情形2:与原始设计相比,更新后的设计只是添加了调试模块,如ILA等。

由此可见,高复用模式在网表时序收敛且多达95%的逻辑单元被复用时最为有效。

与高复用模式相比,低复用模式则适用于更新后的设计与参考设计相比有较大的改动,或者用户通过read_checkpoint的选项−reuse_objects指定复用逻辑单元的情况。此时,place_design和route_design的所有−directive均可用。

当布局、布线在某些区域面临挑战时,低复用模式更为有效。例如,从网表中获得较好的Block RAMDSP的布局,或者时序难以收敛的逻辑单元。这些都可通过Tcl命令获得。

一般来说,增量编译都是与设计锁定联合使用的。

2设计锁定与增量编译方法

为了实现对模块的布局(place)、布线(route)的锁定,仅适用增量编译是不够的,因为增量编译的本质目的是为了实现编译时间的缩短,还需要引入设计锁定,设计锁定的TCL命令是:lock_design –level routing

下面例说操作方法。

(1)建立工程:建立一个工程,走完综合实现的流程,如图1所示,该工程将作为样例工程(工程名:incre_compile_demo),将该工程备份一份(工程名:initial_project,后面对比要用到这个工程);

100061279-120587-2.png

图1 建好的工程

(2)找到dcp文件:增量编译需要有一个参考文件,这个参考文件是“参考设计”实现之后生成的,后缀是“.dcp”,该文件的路径一般在“。. project_1project_1.runsimpl_1”路径下,如图2所示,新建一个文件夹(名字是dcp_file),将该文件复制到其中,如图3所示;

100061279-120588-3.png

图2 dcp文件

100061279-120589-4.png

图3新建文件夹,复制dcp文件

(3)锁定设计:前面说道,简单的增量编译是不能保证模块固定在某个位置的,为了实现这一点,需要对设计进行锁定,方法是,打开一个新的Vivado界面,然后打开dcp_file文件夹下的dcp文件(注意选择“open checkpoint”),如图4所示;打开后,在TCL Console中输入命令:“lock_design –level routing”,点击左上角保存,如图5所示,做完这一步后,设计就锁定好了,dcp文件就可以用了;

100061279-120590-5.png

图4 vivado打开dcp界面

100061279-120591-6.png

图5 锁定设计并保存

(4)增量编译:

1)修改代码,将顶层模块(test_compare.v)line263-line266注释取消,保存,如图6所示;

2)在主界面菜单栏处,点:Flow 》 Create Runs;

3)选both,点next,如图7所示;

4)勾选make active,点next,如图8所示;

5)选Do not launch now,点next,如图9所示;

6)完成后如图10所示;

7)在impl_2右键,选择“Set Incremental Compile”,选择步骤(3)中准备好的dcp文件,示意图如图11所示(注意这只是一个示意图,图中选的文件不是步骤(3)准备好的那个文件)

8)开始综合、实现,完成增量编译过程。

100061279-120592-7.png

图6 改代码

100061279-120593-8.png

图7 选both

100061279-120594-9.png

图8 make active

100061279-120595-10.png

图9 Do not launch now

100061279-120596-11.png

图10 新的run已建好

100061279-120597-12.png

图11 选择参考dcp文件

3、正确性验证

怎么证明增量编译后,原始设计成功锁定了呢?我们来做一个对照实验。

样本1:原始工程,名称是: initial_project;

样本2:增量编译工程,名称是: incre_compile_demo;

样本3:原始工程复制一份出来,不进行增量编译,直接修改代码(见图6),重新综合实现,名称是:modify_project。

打开三个工程,之后open implemented design,选取几个模块,观察其在FPGA上的位置,发现样本1和样本2位置完全一样,而样本3和前两个样本不一样,说明设计锁定是成功的,如图12、13、14所示。

100061279-120598-13.png

图12 样本1位置观察

100061279-120599-14.png

图13 样本2位置观察

100061279-120600-15.png

图14 样本3位置观察

Vivado下如何锁定设计的模块的布局布线

Xilinx官方论坛上也有相关问题的回答。

https://forums.xilinx.com/t5/Vivado/Vivado%E4%B8%8B%E5%A6%82%E4%BD%95%E9.。.。

Vivado下如何锁定设计模块的布局布线

问题:

我现在设计了一个延时模块,应用后需要把该模块的布局和布线全部锁定,然后在别的项目中直接调用。现在布局没有问题。可以通过约束文件来锁定,就是布线不能大范围锁定,否则应用时会失败。我已经尝试过增量编译(调用DCP文件)的功能,发现在增量编译中布局布线并不是全部不变的,个别走线也是会变的。请问有办法把布线也固定下来吗?(Tool: Vivado17.3 Device: K7)

回答1:如果你用的是Ultrascale/Ultrascale+ , 我觉得PR是个不错的选择,你的目标模块可以放在静态部分,只占据很小的一块面积,剩下大块的动态部分。但是7系列有很多primitive不能放在动态,静态的部分包含的逻辑过多,剩下供你修改的逻辑偏少,不太适合目前的应用场景。

回答2:关于锁定某一个net的布线路径,请参考以下步骤:

1.打开跑完布局布线的工程,Open Implemented Design

2.找到你要锁定布线的net,选中,右键菜单点击Fixed Routing,如下图所示:

100061279-120601-16.png

3. Tcl Console里面会打印出一些命令,然后在Tcl Console里面敲命令:write_xdc/dirt.xdc

4. 打开导出的xdc,在最下面的部分会有所有元件的位置锁定以及FIXED_ROUTE,示例如下:

100061279-120602-17.png

5. 另外还需注意的是,负载中有LUT的话需要将LUT的输入pin也锁住。以下图的LUT2为例,在其property窗口中找到Cell pins,信号是连到LUT2的I0端,映射到BEL pin是A3。

100061279-120603-18.png

因此上述导出的位置锁定约束中还有一个LOCK_PINS的设置:

set_property LOCK_PINS {I0:A3} [get_cells clk_gen_i0/rst_meta_i_1]

6. 将这部分有关锁定的约束拷贝到你工程的约束文件中,重新跑implementation,这条线会按照原先的结果布。

温馨提示:

我们并不建议完全锁死某个模块的所有布线,当合入的工程比较复杂,用到的布线资源较密集时,工具没有灵活性去调整和优化,有很大的概率会布线失败。

划分静态区和动态区

除了上述的逻辑锁定方法之外,Xilinx 的FPGA还提供了静态区和动态区的划分也可以实现逻辑的锁定。只不过静态区占据了大多数的空间,动态区是可以随意修改的小部分空间。

FPGA提供了现场编程和重新编程的灵活性,无需通过改进的设计进行重新制造。部分重配置(PR)进一步提高了这种灵活性,允许通过加载部分配置文件(通常是部分BIT文件)来修改操作FPGA设计。在完整的BIT文件配置FPGA之后,可以下载部分BIT文件以修改FPGA中的可重配置区域,而不会影响在未重新配置的设备部分上运行的应用程序的完整性。

部分可重构的基本前提

如图所示,通过下载几个部分BIT文件A1.bit,A2.bit,A3.bit或A4.bit中的一个来修改在重新配置块A中实现的功能。FPGA设计中的逻辑分为两种不同的类型,可重构逻辑和静态逻辑。FPGA块的灰色区域表示静态逻辑,标记为Reconfig Block“A”的块部分表示可重配置逻辑。静态逻辑仍然有效,并且不受加载部分BIT文件的影响。可重配置逻辑由部分BIT文件的内容替换。

为什么在单个FPGA器件上动态地对多个硬件进行时间复用的能力是有利的。这些包括:

•减小实现给定功能所需的FPGA器件尺寸,从而降低成本和功耗

•为应用可用的算法或协议选择提供灵活性

•实现设计安全性的新技术

•提高FPGA容错能力

•加速可配置计算

除了减小尺寸,重量,功耗和成本之外,部分重配置还可以实现没有它的新型FPGA设计。
编辑:lyn

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • DCP
    DCP
    +关注

    关注

    0

    文章

    28

    浏览量

    17024
  • Quick
    +关注

    关注

    0

    文章

    16

    浏览量

    12406
  • Vivado
    +关注

    关注

    18

    文章

    787

    浏览量

    65089
收藏 人收藏

    评论

    相关推荐

    Vivado编译常见错误与关键警告梳理与解析

    Xilinx Vivado开发环境编译HDL时,对时钟信号设置了编译规则,如果时钟由于硬件设计原因分配到了普通IO上,而非_SRCC或者_MRCC专用时钟管脚上时,编译器就会提示错误。
    的头像 发表于 04-15 11:38 317次阅读

    Vivado那些事儿:节省编译时间系列文章

    虽然想必您知道,在综合或实现阶段,增量运行可以从参考文件中读取和复制信息,但仅在某些阶段中能节省时间,如果网表发生大量更改,其中引用的内容就会减少,编译时间也会受到相应影响。
    的头像 发表于 10-09 16:48 945次阅读
    <b class='flag-5'>Vivado</b>那些事儿:节省<b class='flag-5'>编译</b>时间系列文章

    UltraFast Vivado HLS方法指南

    电子发烧友网站提供《UltraFast Vivado HLS方法指南.pdf》资料免费下载
    发表于 09-13 11:23 1次下载
    UltraFast <b class='flag-5'>Vivado</b> HLS<b class='flag-5'>方法</b>指南

    Vivado隔离验证器用户指南

    电子发烧友网站提供《Vivado隔离验证器用户指南.pdf》资料免费下载
    发表于 09-13 11:11 0次下载
    <b class='flag-5'>Vivado</b>隔离<b class='flag-5'>验证</b>器用户指南

    使用增量综合节省编译时间

    增量综合的工作方式与增量实现流程相似,但仅适用于综合阶段,并且不会对紧随其后的实现阶段给予引导。
    的头像 发表于 09-08 11:01 313次阅读
    使用<b class='flag-5'>增量</b>综合节省<b class='flag-5'>编译</b>时间

    Xilinx Vivado使用增量实现

    增量实现自从首次获得支持以来,不断升级演变,在此过程中已添加了多项针对性能和编译时间的增强功能。它解决了实现阶段针对快速迭代的需求,显著节省了编译时间,还能确保所得结果和性能的可预测性。 以下图表显示了在一整套困难的设计上采用
    的头像 发表于 09-04 10:07 408次阅读
    Xilinx <b class='flag-5'>Vivado</b>使用<b class='flag-5'>增量</b>实现

    节省编译时间系列-使用增量实现

    增量实现自从首次获得支持以来,不断升级演变,在此过程中已添加了多项针对性能和编译时间的增强功能。
    的头像 发表于 09-01 09:36 385次阅读
    节省<b class='flag-5'>编译</b>时间系列-使用<b class='flag-5'>增量</b>实现

    基于VMM验证方法学的MCU验证环境

    1 简介 随着设计的复杂程度不断增加,要求把更多的资源放到验证上,不但要求验证能够覆盖所有的功能,还希望能够给出大量的异常情况来检查DUT对应异常的处理状态,这在传统测试方法下往往是难以实现
    的头像 发表于 08-25 16:45 616次阅读

    选择增量编码器分辨率的方法,影响增量式编码器分辨率的因素

    增量式编码器的分辨率是以编码器轴转动一周所产生的输出信号基本周期数来表示的,即脉冲数/转(PPR)。本文主要介绍选择增量编码器分辨率的方法以及影响增量式编码器分辨率的因素。
    的头像 发表于 07-26 09:59 818次阅读

    Vivado统一Web安装程序:下载和安装过程中无法绕过用户帐户身份验证阶段

    当我尝试在机器上安装 Vivado 时,无法通过帐户身份验证检查。为什么会出现此问题?
    的头像 发表于 07-11 17:05 811次阅读
    <b class='flag-5'>Vivado</b>统一Web安装程序:下载和安装过程中无法绕过用户帐户身份<b class='flag-5'>验证</b>阶段

    用 TCL 定制 Vivado 设计实现流程

    /XDC 的优势, 在 Tcl Console 输入新的 Tcl/XDC,无需重跑设计,只要运行时序报告来验证。当然,如果能重跑设计,效果会更好,但是这种方法在早期设计阶段提供了一种快速进行交互式
    发表于 06-28 19:34

    Vivado增量编译的基本概念、优点、使用方法以及注意事项

    随着FPGA设计的复杂度不断提高,设计人员需要选择更为高效的设计流程来保证开发效率和减少开发成本。其中,Vivado增量编译是一种非常重要的设计流程。本文将介绍Vivado
    的头像 发表于 05-25 18:25 3239次阅读
    <b class='flag-5'>Vivado</b><b class='flag-5'>增量</b><b class='flag-5'>编译</b>的基本概念、优点、使用<b class='flag-5'>方法</b>以及注意事项

    Xilinx FPGA远程调试方法(二)

    上篇主要是分享了Vivado编译软件远程调试的方法。杰克使用Vivado软件进行远程连接,主要是用于固化程序以及FPGA(PL端)的异常排查。而本篇主要内容是对使用Vitis软件远程调
    发表于 05-25 14:36 1771次阅读
    Xilinx FPGA远程调试<b class='flag-5'>方法</b>(二)

    Quartus中的逻辑锁定增量编译

    逻辑锁定功能可以将FPGA中的代码模块在固定区域实现,优化时序性能,提升设计可靠性。 增量编译功能,可以使设计更快速时序收敛,加快编译速度。
    的头像 发表于 05-25 11:22 881次阅读
    Quartus中的逻辑<b class='flag-5'>锁定</b>与<b class='flag-5'>增量</b><b class='flag-5'>编译</b>

    Vivado使用进阶:读懂用好Timing Report

    《XDC 约束技巧》系列中讨论了XDC 约束的设置方法、约束思路和一些容易混淆的地方。我们提到过约束是为了设计服务,写入 Vivado中 的 XDC 实际上就是用户设定的目标,Vivado
    的头像 发表于 05-04 11:20 2675次阅读
    <b class='flag-5'>Vivado</b>使用进阶:读懂用好Timing Report