verilog之字符拼接血的教训!

reg [7:0] x;

wire [7:0] y;

assign y= {1'b0, x[6:0]}; 这样子没问题;

assign y= {1'b0, ~x[6:0]};也没问题;

但是:

assign y={1'b0,~x[6:0]+1} ;  企图保证最高为一直为0 ,但不行;

这样就会出问题,拼接符号{}中不能用+?这句话应该怎么理解?乘法器最后一步有很多人用到这句话。

解决办法就是分开写成下面这样:    

assign y[6:0] = ~x[6:0]+1;
assign y[7] = 1'b0;

另外:负数赋值给无符号reg时,值为补码的值;

测试过程代码如下所示:

verilog之字符拼接血的教训!_第1张图片

仿真结果如下:

verilog之字符拼接血的教训!_第2张图片

其中z为出问题的情况,t为解决方法,其他均为测试对比用;

原因目前未知,有时间看一下原理图

 

你可能感兴趣的:(FPGA)