verilog Signed与赋值形式

`timescale 1ns/1ps
module test;
reg signed[3:0] uu;
reg signed[3:0] dd;
reg [2:0] extract;
reg [4:0] sum;
initial
begin
uu=-7;
dd=3;
extract=uu[2:0]
sum=uu+dd;
#10
uu=7;
dd=-3;
extract=uu[2:0]
sum=uu+dd;
#10
uu=-7;
dd=-3;
extract=uu[2:0]
sum=uu+dd;
end
endmodule

如上述代码,当声明的reg sign通过整数形式赋值,实际得到的是所看到的值的补码形式,如uu=-7,则uu的实际存储值为4‘b1001,即-7在4bit下的补码,即有符号数4’b1111的补码4‘b1001,然后使用补码进行运算。

`timescale 1ns/1ps
module test;
reg signed[3:0] uu;
reg signed[3:0] dd;
reg [2:0] extract;
reg [4:0] sum;
initial
begin
uu=4'b1111;
dd=4'b0011;
extract=uu[2:0]
sum=uu+dd;
#10
uu=4'b0111;
dd=4'b1011;
extract=uu[2:0]
sum=uu+dd;
#10
uu=4'b1111;
dd=4'b1011;
extract=uu[2:0]
sum=uu+dd;
end
endmodule

当reg signed通过上述方式进行赋值时,则默认直接使用编程用户已经进行了原码到补码的转换,此时所写即所存,仍然为补码的形式保存和进行后续计算,这一点区别于使用整数型的值进行赋值。

原文地址:https://www.cnblogs.com/lightmonster/p/15304629.html