299|0

109

帖子

0

资源

一粒金砂(中级)

DONT_TOUCH约束

FPGA开发技巧 - DONT_TOUCH约束应用.jpg

         对设计中的信号施加DONT_TOUCH约束,可以避免这些信号在综合编译过程中被优化掉。例如,有些信号节点在综合或布局布线编译过程中可能会被优化掉,但是我们希望在后期调试过程中能够监控到这些信号,此时就可以使用DONT_TOUCH约束达到保留这些信号的目的。又如,有时在设计中会对一些高扇出的信号进行手动的逻辑复制,也可以使用DONT_TOUCH约束避免它们被优化掉。

 

实例:

         下面有一个简单的例子,看看DONT_TOUCH约束如何使用。原始代码如下,目前只有一个寄存器vga_valid,它对应了adv7123_blank_nvga_rvga_gvga_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;

编译工程后,点击Run Implementation,打开实现界面。

image-20200918142730-1.jpeg

         点击菜单Reports --> Report High Fanout Nets

image-20200918142730-2.png

         如图,设定From cells[get_cells -hierarchical "*vga_valid*"],即查看所有带vga_valid字符的信号。

image-20200918142730-3.png

         此时,可以看到当前vga_valid信号的扇出为17

image-20200918142730-4.png

         这个例子中,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

image-20200918142730-5.png

         但是,工具并不懂我们真正的心思,怎么办?此时DONT_TOUCH约束就派上用场了。如下,在不希望被综合优化的2个寄存器前面,加上(*dont_touch = "true"*)的语法。

(*dont_touch = "true"*) reg vga_valid1;

(*dont_touch = "true"*) reg vga_valid2;

 

         重新编译后,我们看到,代码生效了。vga_valid1vga_valid2分担了原本vga_valid的扇出。

image-20200918142730-6.png

 

此帖出自FPGA/CPLD论坛

回复
您需要登录后才可以回帖 登录 | 注册

关闭
站长推荐上一条 1/5 下一条

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表