verilogSigned与赋值形式
`timescale 1ns/1psmodule test;
reg signed[3:0] uu;reg signed[3:0] dd;reg [2:0] extract;reg [4:0] sum;initialbeginuu=-7;dd=3;
extract=uu[2:0]sum=uu+dd;#10uu=7;dd=-3;
extract=uu[2:0]sum=uu+dd;#10uu=-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/1psmodule test;
reg signed[3:0] uu;reg signed[3:0] dd;reg [2:0] extract;reg [4:0] sum;initialbegin
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通过上述⽅式进⾏赋值时,则默认直接使⽤编程⽤户已经进⾏了原码到补码的转换,此时所写即所存,仍然为补码的形式保存和进⾏后续计算,这⼀点区别于使⽤整数型的值进⾏赋值。