Verilog 带符号的数值运算 加法

module TestBench(
  output signed [9:0] result1,
  output signed [9:0] result2,
  output signed [9:0] result3,
  output [9:0] result4,
  output [9:0] result5,
  output [9:0] result6,
  
  output [5:0] result7,
  output [5:0] result8,
  output [5:0] result9,
  output [5:0] result10      
);

wire [7:0] dataA = 8'hFF;
wire signed [7:0] dataB = -1;


//1:数值计算只有两个操作数都是有符号数,才会把两个操作数都看作有符号数计算,否则无论是有符号数还是无符号数都会按照无符号数计算。
//2:B=A赋值的时候,B长度大于A的情况下。若A是有符号数,则B高位空余用A的最高位填充,若A是无符号数,B的高位用0填充。
assign result1 = dataA + dataA;   //10'b0111_1111_1110
assign result2 = dataA + dataB;   //10'b0111_1111_1110
assign result3 = dataB + dataB;   //10'b1111_1111_1110

assign result4 = dataA + dataA;   //10'b0111_1111_1110
assign result5 = dataA + dataB;   //10'b0111_1111_1110
assign result6 = dataB + dataB;   //10'b1111_1111_1110

//3:B=A赋值的时候,B长度小于A的情况下。数据A就会被截断,截断的规则就是从低位开始取,被截断的是高位
assign result7 = result2;         //10'b11_1110
assign result8 = result3;         //10'b11_1110
assign result9 = result4;         //10'b11_1110
assign result10 = result5;        //10'b11_1110

endmodule

 

你可能感兴趣的:(Verilog)