verilog 常见位宽问题集合

verilog 常见的位宽问题集合

1. 位宽不等

wire b[31:0];
assign b = 5'b0;

这种错误常见于赋值操作中。

2. 保留最低位

wire b;
assign b = 32'h5;

此时因为b缺省定义为1位长度,因此只能被赋值最低为1。

3.位宽不匹配

wire b[4:0];
reg a;
assign b = 5'ha;
always @(*) begin
	if(b)begin
		a = 1;
	end
end

此段代码本意是想判断若b不为5’b0则将a赋值为1。但由于verilog的判断只对1位数据有效,因此取最低位0判断为无效。
有两种解决办法:

  1. 用比较运算符取代
    本例中,可以使用if(b != 5’b0)代替
  2. 用规约运算符
    本例中,可以使用if(|b)代替

第三种位宽问题最难识别,也很容易出问题。

2024年4月22日,评论区补充:
上述写法存在报错:
(modelsim报错信息:** Error: tb_top.v(9): (vlog-2110) Illegal reference to net array “b”.)

wire [4:0] b;
reg a;
assign b = 5'ha;
always @(*) begin
if(b)begin
a = 1;
end
end

这位朋友的平台为Modelsim SE-64 10.4。
笔者未验证,特列在此。
感谢@璃_

  • 9
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值