首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >用ECO脚本的方式在网表中插入LUT1

用ECO脚本的方式在网表中插入LUT1

作者头像
碎碎思
发布2020-12-30 16:03:20
发布2020-12-30 16:03:20
1.2K00
代码可运行
举报
文章被收录于专栏:OpenFPGAOpenFPGA
运行总次数:0
代码可运行

作者:Hong Han,来源:赛灵思中文社区论坛

有时我们需要在设计网表的基础上微调一下逻辑,这样可以无需修改代码,也无需重新做综合,在设计调试中可以节省时间同时维持其他逻辑无任何改动。

这里带大家一起体验一下Vivado 的ECO流程,以vivado自带的Example Design为例, 直接用TCL命令修改网表,在正常的寄存器路径之间加一级LUT。

1. 打开Vivado 界面

2. 打开Example Design "Wavegen": File -> Project -> Open Example 选中Wavegen(HDL), 器件选择xcku035

3. 点击左侧Flow Navigator 窗口 Run Implementation 按钮, 完成综合实现.

4. 打开Implemented Design (点击左侧Flow Navigator 窗口 Open Implemented Design 按钮)

5. 选一条两个寄存器之间的路径 运行以下命令,选中打印出的路径,双击可以查看时序报告,F4 键可以打开这条路径的原理图

代码语言:javascript
代码运行次数:0
运行
复制
 %report_timing -from [get_cells 
clkx_spd_i0/meta_harden_bus_new_i0/signal_meta_reg] -to [get_cells 
clkx_spd_i0/meta_harden_bus_new_i0/signal_dst_reg] -delay_type max -name test1

可以看到Data Path的布线延迟是0.504ns

路径的原理图

6. 把目的寄存器的D端从net上断下来

代码语言:javascript
代码运行次数:0
运行
复制
%disconnect_net -net 
clkx_spd_i0/meta_harden_bus_new_i0/signal_meta_reg_n_0  -objects 
{clkx_spd_i0/meta_harden_bus_new_i0/signal_dst_reg/D}

在这里获取操作对象(net, Pin) 的方法: 在原理图中选中对象,然后查看走下角Property 窗口中的NAME 属性

Pin被从Net上断开后,会在原理图上显示n/c

7. 创建一个LUT1,并设置LUT的INIT property

代码语言:javascript
代码运行次数:0
运行
复制
%create_cell -reference LUT1clkx_spd_i0/meta_harden_bus_new_i0/my_lut1 
%set_property INIT 2'h1 [get_cells clkx_spd_i0/meta_harden_bus_new_i0/my_lut1]

可以看到这个新创建的LUT1所有端口(Pin)都是悬空的. 接下来的步骤要将这些pin连接到合适的net上.

8. 把LUT1的输入端口连接到之前断开的net上.

代码语言:javascript
代码运行次数:0
运行
复制
%connect_net -net clkx_spd_i0/meta_harden_bus_new_i0/signal_meta_reg_n_0  -objects {clkx_spd_i0/meta_harden_bus_new_i0/my_lut1/I0}

9. 创建一个新的net用来连接LUT1的输出pin和之前断下来的寄存器D pin

代码语言:javascript
代码运行次数:0
运行
复制
%create_net  clkx_spd_i0/meta_harden_bus_new_i0/my_net

10. 连接LUT1的输出pin和之前断下来的寄存器D pin 到新创建的net上

代码语言:javascript
代码运行次数:0
运行
复制
%connect_net -net clkx_spd_i0/meta_harden_bus_new_i0/my_net   -objects {clkx_spd_i0/meta_harden_bus_new_i0/my_lut1/O clkx_spd_i0/meta_harden_bus_new_i0/signal_dst_reg/D}

11. 在Netlist窗口选窗口选中新建的LUT1,将其拖曳到Device中空着的slice LUT bel中

对应的命令:

代码语言:javascript
代码运行次数:0
运行
复制
place_cell clkx_spd_i0/meta_harden_bus_new_i0/my_lut1 SLICE_X52Y83/B6LUT

12. 对新的LUT1两端的net进行布线

代码语言:javascript
代码运行次数:0
运行
复制
%route_design -nets [get_nets -of [get_pins clkx_spd_i0/meta_harden_bus_new_i0/my_lut1/*]]

13.检查布线结果确保没有布线错误

代码语言:javascript
代码运行次数:0
运行
复制
%report_route_status

14.用步骤5的命令重新报一下时序

15. 生成bit文件

代码语言:javascript
代码运行次数:0
运行
复制
%write_bitstream test.bit

NOW现在行动!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-12-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 OpenFPGA 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档