前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >今日说“法”:如何防止reg、wire型信号在使用逻辑分析仪时被优化

今日说“法”:如何防止reg、wire型信号在使用逻辑分析仪时被优化

作者头像
FPGA技术江湖
发布2020-12-29 17:48:56
8560
发布2020-12-29 17:48:56
举报
文章被收录于专栏:FPGA技术江湖FPGA技术江湖

大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分。大侠可以关注FPGA技术江湖,在“闯荡江湖”、"行侠仗义"栏里获取其他感兴趣的资源,或者一起煮酒言欢。

欢迎大侠来到FPGA技术江湖新栏目今日说“法”,当然,在这里我们肯定不是去研究讨论法律法规知识,那我们讨论什么呢,在这里我们讨论的是产品研发以及技术学习时一些小细节小方法等,欢迎大家一起学习交流,有好的灵感以及文章随笔,欢迎投稿,投稿请标明笔名以及相关文章,投稿接收邮箱:1033788863@qq.com。今天带来的是“如何防止reg、wire型信号在使用逻辑分析仪时被优化”,话不多说,上货。

随着FPGA设计复杂程度越来越高,芯片内部逻辑分析功能显得越来越重要。硬件层次上的逻辑分析仪价格十分昂贵,而且操作比较复杂。目前,FPGA芯片的两大供应商都为自己的FPGA芯片提供了软件层面上的逻辑分析仪,可以帮助我们在线分析芯片内部逻辑。而且操作简单方便,但是往往因为某些原因,有些信号在综合的时候就会被优化掉,就可能会导致我们的设计失败,当然在为逻辑分析仪添加观察信号的时候也无法找到该信号。从而对设计、调试人员的工作带来一定的不便。下面就分别以Xilinx公司的逻辑分析仪ChipScope和Altera公司的SignalTap做以下总结:

一、使用Xilinx公司的ChipScope

使用ChipScope观察芯片内部的信号的之前先要在把需要观察的信号添加到ChipScope信号观察列表当中。也就是说,我们必须能够在综合的网表文件中找到相应的信号。如果是使用XST综合的话,最好保留芯片内部结构的层次,这样就可以在相应的子模块查找需要观察的信号。默认情况下,Chipscope只能观察reg类型的信号。但是通过设置属性也是可以观察wire型信号的。使用不同的综合工具需要添加的属性也不一样。

1、使用XST综合。

(1) 对于reg型信号,如果被ISE优化掉,一般有可以把这个信号和其他没有被优化的信号进行“与”、“或”等操作,这样就可以达到观察信号的目的。

(2) 对于wire型号,对于ISE12.3以后的版本,XST综合,以Spartan3为例,可以使用(* KEEP="TRUE"*) wire [15:0] CPLD_ _AD;这样就可以在查找信号的信号找到wire类型的CPLD_ _AD信号进行观察。

2、使用Synplify Pro综合

Synplify Pro对wire、reg类型的信号有着不同的综合属性。

(1) 对于wire型信号,使用/* synthesis syn_keep=1 */综合属性,例如下面的语句:

代码语言:javascript
复制
wire  [7:0]  data_in  /* synthesis syn_keep=1 */;

(2) 对于reg型信号,使用/* synthesis preserve = 1 */综合属性,例如下面的语句:

代码语言:javascript
复制
reg  [7:0]   data_in  /* synthesis preserve = 1 */;

二、使用Altera公司的SignalTap

1、使用Altera自带的综合器综合

Altera自带的综合器为了防止某些信号综合器优化掉,也有自己的一套综合约束属性。

(1)对于reg型信号,为了防止Altera自带综合器将其优化掉,可以添加noprune属性。这样就可以防止某些寄存器信号被优化掉。也可以使用/*synthesis noprune*/综合属性。

代码语言:javascript
复制
`include "define.v"

module SignalTap_test( Clk, Rst, Cnt) /*synthesis noprune*/ ;

    input   wire        Clk ;
    input   wire        Rst ;   
    output  reg [7:0]     Cnt ;
    
    always@(posedge Clk or posedge Rst)   
    begin
        if( Rst == 1'b1)
            Cnt <= 8'h0;
        else
            Cnt <= #`ULDY Cnt + 1'b1;
    end

endmodule

如上例(假设Cnt信号会被优化掉),这样添加综合属性之后,整个module的reg信号都不会被优化掉。

跟reg相关的综合属性,除了/*synthesis noprune*/可用,还有一个/*synthesis preserve*/可用

二者的差别在于:

/*synthesis noprune*/ 避免Quartus II优化掉output 型的reg信号。

/*synthesis preserve*/ 避免Quartus II把reg信号当成VCC或者GND等常数

同时单独的reg信号也可以: (*preserve*) reg [3:0] cnt;防止被优化掉。

(2)对于wire类型的信号

对于wire型信号来说,要想观察此类信号,Altera综合器提供了/*synthesis keep*/ 综合属性。如 wire [7:0] Cnt /*synthesis keep*/; 对于Quartus II 9.0以后的版本也可以使用(“keep”) wire [7:0] Cnt ;的写法。

此外,/*synthesis keep*/也支持对reg型信号,使用它也可以防止reg型信号被优化掉。但是也有可能出现这样的情况,有的信号即使经过此处理,仍然会被综合工具优化掉,致使无法找到它。这个时候就需要对其使用“测试属性”,可以加入probe_port属性,把这两个属性结合在一起,即就是:

( *synthesis, probe_port,keep *) 即可,这种方法同时适应于wire和reg型信号类型。

2、使用Synplify Pro综合

使用Synplify Pro综合时防止信号被优化掉的方法和使用Xilinx公司 ChipScope使用Synplify Pro综合时添加的综合约束一样,因为Synplify Pro是专业的综合厂商,所以对主流的FPGA厂商都支持。

三、总结

1、以上的方法也不一定是全部都可以使用,有时候因为版本不对应就会导致信号依然会被优化掉。不过经过轮询之后发现,ISE 12.3以后的版本、Quartus II 9.0之后的版本、Synplify Pro 9.0.1以后的版本都可以使用。

2、一般情况下,信号经常被优化掉,还是与代码风格或者逻辑设计有冗余有关的,所以还是应该尽量提供代码质量。在不能解决的时候再添加综合约束。

END

后续会持续更新,带来Vivado、 ISE、Quartus II 、candence等安装相关设计教程,学习资源、项目资源、好文推荐等,希望大侠持续关注。

大侠们,江湖偌大,继续闯荡,愿一切安好,有缘再见!

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

本文分享自 FPGA技术江湖 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、使用Xilinx公司的ChipScope
    • 1、使用XST综合。
      • 2、使用Synplify Pro综合
        • 1、使用Altera自带的综合器综合
          • 2、使用Synplify Pro综合
          • 三、总结
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档