【干货分享】用ECO脚本的方式在网表中插入LUT1
这里带大家一起体验一下Vivado 的ECO流程,以vivado自带的Example Design为例, 直接用TCL命令修改网表,在正常的寄存器路径之间加一级LUT。有时我们需要在设计网表的基础上微调一下逻辑,这样可以无需修改代码,也无需重新做综合,在设计调试中可以节省时间同时维持其他逻辑无任何改动。可以看到这个新创建的LUT1所有端口(Pin)都是悬空的. 接下来的步骤要将这些pin连接到合适
关注、星标公众号,精彩内容每日送达
来源:网络素材
作者: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 键可以打开这条路径的原理图
%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上断下来
%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
%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上.
%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
%create_net clkx_spd_i0/meta_harden_bus_new_i0/my_net
10. 连接LUT1的输出pin和之前断下来的寄存器D pin 到新创建的net上
%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中
对应的命令:
place_cell clkx_spd_i0/meta_harden_bus_new_i0/my_lut1 SLICE_X52Y83/B6LUT
12. 对新的LUT1两端的net进行布线
%route_design -nets [get_nets -of [get_pins clkx_spd_i0/meta_harden_bus_new_i0/my_lut1/*]]
13.检查布线结果确保没有布线错误
%report_route_status
14.用步骤5的命令重新报一下时序
15. 生成bit文件
%write_bitstream test.bit
(全文完)
声明:我们尊重原创,也注重分享;文字、图片版权归原作者所有。转载目的在于分享更多信息,不代表本号立场,如有侵犯您的权益请及时联系,我们将第一时间删除,谢谢!

想要了解FPGA吗?这里有实例分享,ZYNQ设计,关注我们的公众号,探索
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)