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)代替

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

你可能感兴趣的:(ise,verilog,数字信号处理)