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 表达式产生的结构式一致的。
这个我试了一下~没问题呀~
-
- module temp1 (
- input [7:0] in,
- input rst,
- output [2:0] a
- );
- always @ ( * ) begin
- if ( rst )
- a = XXX;
- else begin
- casez ( in )
- 8'b1?: a = 3'd7;
- 8'b01?: a = 3'd6;
- 8'b001?: a = 3'd5;
- 8'b0001?: a = 3'd4;
- 8'b00001?: a = 3'd3;
- 8'b000001?: a = 3'd2;
- 8'b0000001?: a = 3'd1;
- 8'b00000001: a = 3'd0;
- endcase
- end
- end
- 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吧
