完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
` 对设计中的信号施加DONT_TOUCH约束,可以避免这些信号在综合编译过程中被优化掉。例如,有些信号节点在综合或布局布线编译过程中可能会被优化掉,但是我们希望在后期调试过程中能够监控到这些信号,此时就可以使用DONT_TOUCH约束达到保留这些信号的目的。又如,有时在设计中会对一些高扇出的信号进行手动的逻辑复制,也可以使用DONT_TOUCH约束避免它们被优化掉。 实例: 下面有一个简单的例子,看看DONT_TOUCH约束如何使用。原始代码如下,目前只有一个寄存器vga_valid,它对应了adv7123_blank_n、vga_r、vga_g、vga_b等信号的输出。 reg vga_valid; always @(posedge clk or negedge rst_n) vga_valid<= vga_origin_vld; assign adv7123_blank_n = vga_valid; assign vga_r = vga_valid ? vga_rdb:5'd0; assign vga_g = vga_valid ? vga_gdb:6'd0; assign vga_b = vga_valid ? vga_bdb:5'd0; 编译工程后,点击RunImplementation,打开实现界面。 点击菜单Reports --> Report High Fanout Nets。 如图,设定From cells为[get_cells-hierarchical "*vga_valid*"],即查看所有带vga_valid字符的信号。 此时,可以看到当前vga_valid信号的扇出为17。 这个例子中,vga_valid的扇出为,其实并不多。但是在实际工程中,我们可以通过类似的方式查看到设计中高扇出的关键信号节点。然后,我们会如下在代码中,对这样的信号做逻辑复制。意图减少单个信号的扇出。 reg vga_valid1; reg vga_valid2; always @(posedge clk or negedge rst_n) vga_valid1<= vga_origin_vld; always @(posedge clk or negedge rst_n) vga_valid2<= vga_origin_vld; assign adv7123_blank_n = vga_valid1; assign vga_r = vga_valid2 ? vga_rdb:5'd0; assign vga_g = vga_valid1 ? vga_gdb:6'd0; assign vga_b = vga_valid2 ? vga_bdb:5'd0; 如图,可惜我们做过逻辑复制的代码,最终综合实现下来,并没有减少扇出,和原始代码实现的效果完全一样。怎么回事?综合工具太聪明了,识别了你这个小伎俩,为了减少设计资源消耗,综合工具默认优化掉了代码中新增加的vga_valid2。 |
|
相关推荐 |
|
只有小组成员才能发言,加入小组>>
885个成员聚集在这个小组
加入小组4535 浏览 0 评论
特权同学 Verilog边码边学 Lesson01 Vivado下载与安装
2648 浏览 1 评论
玩转Zynq连载50——[ex69] FIR滤波器IP仿真实例
4338 浏览 2 评论
玩转Zynq连载49——[ex68] MT9V034摄像头的图像FFT滤波处理
5270 浏览 1 评论
玩转Zynq连载48——[ex67] Vivado FFT和IFFT IP核应用实例
5319 浏览 0 评论
1944浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 21:57 , Processed in 0.419046 second(s), Total 40, Slave 31 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号