Главный смысл: все операнды и результат должны быть signed.
Сложение. При сложении двух чисел с базой N, получившиеся число будет иметь базу N+1.
Exported from Notepad++
Умножение. При умножении двух чисел с базой N, получившееся число будет иметь базу 2*N.
Exported from Notepad++
Сложение. При сложении двух чисел с базой N, получившиеся число будет иметь базу N+1.
module main(
);
parameter N = 8;
reg signed [ N-1: 0 ] a = {1'b0, {(N-1){1'b1}}}; //127
reg signed [ N-1: 0 ] b = {1'b1, {(N-1){1'b0}}}; //-128
wire signed [ N : 0 ] sum = a + b; //-1
wire signed [ N : 0 ] dif = a - b; //255
wire signed [ N : 0 ] min = b + b; //-256
wire signed [ N : 0 ] max = a + a; //254
endmodule
Умножение. При умножении двух чисел с базой N, получившееся число будет иметь базу 2*N.
module main(
);
parameter N = 8;
reg signed [ N-1: 0 ] a = {1'b0, {(N-1){1'b1}}}; //127
reg signed [ N-1: 0 ] b = {1'b1, {(N-1){1'b0}}}; //-128
wire signed [2*N-1: 0 ] ab = a * b; //-16256
wire signed [2*N-1: 0 ] a2 = a * a; //16129
wire signed [2*N-1: 0 ] b2 = b * b; //16384
endmodule