When an operation such as an addtion or a substraction is done using different size operands than final variable, it is necessary to extend sign to ensure the operation is done properly.
Example:
logic signed [21:0] acc;
logic signed [5:0] data_in;
logic [3:0] offset;
Wrong:
acc = data_in + offset;
Sign on data_in
will not be respected. data_in
will be filled with 0 before doing the operation and won’t be taken as negative (if applies).
Correct:
acc = {{16{data_in[5]}},data_in} + offset;
Extend sign to match number of acc_add
bits before doing operation