验证Vivado布局布线不变

平台:vivado2018.3

应用场景,在设计的过程中,一些特定的引脚,我们想在原有的基础上不改变其布局布线方式。

使用手动布局布线

验证模块led。在没有约束的情况下。布局,这里我们看这几个信号。

观察LED_REG,即LED输出寄存器。

在vivado里面的布局在。

clock region:X4Y0

Tiles:CLE_M_X65Y24

Site:SLICE_X97Y24

BEL:DFF2

这里我选中一个cells即我们的led_reg,打开原理图发现是一个FDCE。我选中当前cells,拖动到AFF2。

然后固定布线led_OBUF,右键fix routing。固定布线。

发现XDC文件中发现了将当前cells固定到了AFF位置。且led_OBUF信号布线也被约束固定。重新进行综合实现。

set_property FIXED_ROUTE { { CLE_CLE_M_SITE_0_DQ2  { INT_NODE_IMUX_96_INT_OUT IMUX_W21 }  SDNDNW_W_0_FTS WW2_W_BEG0 INT_NODE_IMUX_54_INT_OUT BYPASS_W2 INT_NODE_IMUX_46_INT_OUT IMUX_W13 IMUXOUT13 XIPHY_BITSLICE_TILE_256_TX_Q HRIO_IOB_45_OP_PIN }  } [get_nets u_led/led_OBUF]

set_property BEL D5LUT [get_cells u_led/led_i_1]

set_property LOC SLICE_X97Y24 [get_cells u_led/led_i_1]

set_property BEL AFF [get_cells u_led/led_reg]

set_property LOC SLICE_X97Y24 [get_cells u_led/led_reg]

打开实现后切换到floorplanning,找到led_reg观察他的位置。led_reg被固定到了AFF这个FDCE。但是由于我们约束了led_OBUF的布线。Vivado在保证他布线约束不变的情况下,我们的led_reg被我约束到了AFF,他在原来的DFF2上没有找到驱动,所以led_OBUF的约束无效。

那么布线约束的意义在哪。

删除布线约束,只保留cell关于led_reg的位置约束。

set_property BEL AFF [get_cells u_led/led_reg]

set_property LOC SLICE_X97Y24 [get_cells u_led/led_reg]

重新实现后出现如下情况。

可以看到,vivado的实现后,还是改变了其中的布局布线。

测试总结,手动布局布线可以选定其中一个routing,或者cell,约定其位置。但是你约束了其中一个,但是一个模块中其他的cell也会随之改变。

使用pblock划分区域布局布线划分静态区

在网上有人说到,如果使用的ultrascale和ultrascale+芯片,可以将目标模块放置在静态部分。这个是Floorplaning,然后创建一个pblock。

验证将我的LED模块创建pblock,放置在X5Y0区域。布局布线后,效果如下。

将该工程复制,在新工程中,加入XDMA的IP核。实现后。效果如下。

可以看到,在我规划的pblok中,pcie的IP核将他的布局布线也放置在了我的规划区域中。检测LED模块里面的几个cells发现布线位置没有改变。下面将我的led模块添加几个计数器,在重新实现一下。

未添加pcie核之前的布局布线。

添加了pcie核之后的布局布线。

可以发现综led_contral_reg已经改变了。

Vivado设计锁定与增量编译

增量编译的结果是在改动很小的情况下,增量布局布线,当改动较大时,增量编译后还是会重新布局布线。

下面验证一下增量编译。

floorplanning_lock_2工程综合实现完成。找打DCP文件,文件路径如下。再新建一个dcp_files文件夹。将该文件放入到文件夹下。

然后在锁定该设计。新打开一个vivado界面,点击open_checkpoint。

打开后,在当前界面下输入tcl命令,锁定锁定设计(简单的增量编译不能保证模块固定在某个位置,这里对设计进行锁定)这里输入lock_design –level routing。

锁定设计后保存。

在将floorplanning_lock_2复制到floorplanning_lock_3,修改led模块代码。

修改完成后,在viavdo界面点击。Flow-Great Runs。

选择both。

不变。

点击make_active。

选择Do not launch now。

完成后。

完成后,新的综合和实现如上图。

在impl_2中选择set incremental implementation。

选中刚才锁定的设计。

实现增量锁定编译,直接失败了。

放弃使用增量编译锁定。实现增量编译。

选择设置setting-implementation-incremental implementation选择增量编译的dcp文件。

设置完成后开始编译。

编译完成后时间缩短了。

对于较小的改动布局布线没有改变。查阅资料发现对于以下两种情况下适用。

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

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

所以增量编译也不能保证原始设计布局布线不变。

验证结论

使用手动布局布线,在约束了模块中的cell和位置和routing布线约束后,只能保证当前信号的位置布线不改变。在vivado综合实现过程中,如果遇到需要优化的地方,默认其他cell的位置将采取最优值。

使用pblock划分区域,在floorplaning中,划分出一块区域,将当前模块划分在该区域中布局(布线也可以约束在此区域内)。约束完成后,对该工程进行综合,发现pblock中的布局布线约束也改变了,并不能保存默认不变。

使用增量编译,只有改动较小的时候(<5%),才能保证不变。

附录资料

资料时钟域clock region。

在FPGA设计中,时钟域的划分是为了解决时钟同步和数据同步的问题。

Tile:tiles指FPGA芯片上的最小物理单元,通常是由一组逻辑块、存储单元、时钟资源、IO资源等组成的。tiles是FPGA芯片上最小的可编程单元,设计人员可以通过对tiles进行编程,实现特定的功能。(图中的白色框就是tile的边界,可以包含多个BEL单元或者site(不同时包含BEL单元和site))

Site:在FPGA设计中,sites是指FPGA芯片上的物理位置,通常用于描述FPGA芯片上的资源分配和布局。FPGA芯片通常由一系列的逻辑块(logic blocks)、存储单元、时钟资源、IO资源等组成,每个逻辑块、存储单元、时钟资源、IO资源都会被分配到特定的site

BEL:BELs是FPGA设计中的一个术语,指的是Basic Element Library,即基本元素库。BELs是指一组基本的逻辑元素,例如AND、OR、NOT等,这些元素可以组合成更复杂的逻辑电路。这里是一个FDCE。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值