微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > nlint检查verilog代码时的报错

nlint检查verilog代码时的报错

时间:10-02 整理:3721RD 点击:

发现这里大虾多,又来求助了
代码如下:
always @(*) begin
      if (……)
           a = XXX;
      else if (……)begin
           casez (bcdefghi)
                 1?: a = xxx;
                 01?: a = xxx;
                 001?: a = xxx;
                 0001?: a = xxx;
                 00001?: a = xxx;
                 000001?: a = xxx;
                 0000001?: a = xxx;
                 00000001: a = xxx;      
           endcase
      end
end
报错为:empty block is detected。           
大家快来找茬…………小女子先谢过啦

优先编码器~你里面的a = xxx是贴到论坛里面故意这样的还是你代码本身是这样的哦?


肯定是我故意写成这样的,就是给a赋值

从可综合代码的角度,不推荐casex和casez。
优先编码器和if else if 表达式产生的结构式一致的。



    这个我试了一下~没问题呀~


  1. module temp1 (
  2. input [7:0] in,
  3. input rst,
  4. output [2:0] a
  5. );
  6. always @ ( * ) begin
  7.       if ( rst )
  8.            a = XXX;
  9.       else begin
  10.            casez ( in )
  11.                  8'b1?: a = 3'd7;
  12.                  8'b01?: a = 3'd6;
  13.                  8'b001?: a = 3'd5;
  14.                  8'b0001?: a = 3'd4;
  15.                  8'b00001?: a = 3'd3;
  16.                  8'b000001?: a = 3'd2;
  17.                  8'b0000001?: a = 3'd1;
  18.                  8'b00000001: a = 3'd0;      
  19.            endcase
  20.       end
  21. end
  22. endmodule

复制代码

这段代码问题很多:
1 不建议敏感列表里用*,因为不是所有的EDA工具都支持verilog2001的标准
2 没有对各个线名和reg声明类型
3 复位信号最好是写成rst==1'b1
4 casez和casex一般规范都禁止使用,可以使用if-else实现
5 最好每个线名都有意义

小编能否传一下你的nlint啊

已确认,项目组统一的规则设定有点问题,casez应该是可以使用的哦,也是可综合的,谢谢各位!
6楼所说的很多问题,是由懒,木有写全,还是谢谢各位了

case语句没有写全,还有000000000 结果

这样写会产生一个LATCH吧,组合逻辑
if(xxx)begin
end
else if(xxx)begin
end
else begin
end
empty block不一定是这段代码的原因

10楼正解

lisence work or not?

qiaoqiao

應該是少了一個else吧

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top