描述如下代码,实现加法;
C = A + B;
A是21bit无符号数;
B是18位有符号数;
如何实现才能保证正确得到一个不溢出的有符号数C;
module unsign_sign(
input wire [20:0]A,
input wire signed [17:0]B,
output wire signed [22:0]C
);
assign C =$signed({1'b0, A})+$signed({{4{B[17]}}, B});
endmodule
注意点:
- 位宽的无符号与有符号数的加法运算,需要将其位宽对补齐后运算
- 无符号数和任何书相加都是无符号数,所以需要强制转换