一、m个有符号整数,位宽相同均为n,求它们的和,和的位宽应设置为n+m-1,求和时每个数均扩展m-1个符号位
例1:
reg [3:0] a;
reg [3:0] b;
reg [4:0] sum;
always@(posedge clk)begin
sum <= {a[3],a[3:0]} + {b[3],b[3:0]};
end
例2:
reg [3:0] a;
reg [3:0] b;
reg [3:0] b;
reg [5:0] sum;
always@(posedge clk)begin
sum <= {{2{a[3]}},a[3:0]} + {{2{b[3]}},b[3:0]} + {{2{b[3]}},b[3:0]} ;
end
二、m个有符号整数,位宽不完全相同,最大位宽是n,求它们的和,和的位宽也应设置为n+m-1,求和时每个数都扩展符号位至位宽为n+m-1
例3:
reg [3:0] a;
reg [2:0] b;
reg [4:0] sum;
always@(posedge clk)begin
sum <= {a[3],a[3:0]} + {{2{b[2]}},b[2:0]};
end
例4:
reg [3:0] a;
reg [2:0] b;
reg [1:0] b;
reg [5:0] sum;
always@(posedge clk)begin
sum <= {{2{a[3]}},a[3:0]} + {{3{b[2]}},b[2:0]} + {{4{b[1]}},b[1:0]} ;
end