在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2483|回复: 1

[原创] DONT_TOUCH约束

[复制链接]
发表于 2020-9-18 14:26:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
FPGA开发技巧 - DONT_TOUCH约束应用.jpg
         对设计中的信号施加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,打开实现界面。
1.jpg
         点击菜单Reports --> ReportHigh Fanout Nets。
2.jpg
         如图,设定From cells为[get_cells-hierarchical "*vga_valid*"],即查看所有带vga_valid字符的信号。
3.jpg
         此时,可以看到当前vga_valid信号的扇出为17。
4.jpg
         这个例子中,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。
5.jpg
         但是,工具并不懂我们真正的心思,怎么办?此时DONT_TOUCH约束就派上用场了。如下,在不希望被综合优化的2个寄存器前面,加上(*dont_touch ="true"*)的语法。
(*dont_touch = "true"*) reg vga_valid1;
(*dont_touch = "true"*) reg vga_valid2;
         重新编译后,我们看到,代码生效了。vga_valid1和vga_valid2分担了原本vga_valid的扇出。
6.jpg

发表于 2024-5-2 13:28:28 | 显示全部楼层
感谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-22 14:56 , Processed in 0.016541 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表