Hi Moderators,
I am new to SV and am currently trying to understand sign extension / zero padding in an assignment
bit [7:0] A,B;
bit signed [7:0] A_S;
bit [30:0] b;
bit signed [30:0] s_b;
initial begin:i1
A_S = -4'sd4; // -4'sd4 is 'b1100
$display("A_S is 'b%b i.e 'd%0d",A_S,A_S);
A = -4'sd4;
$display("A is 'b%b i.e 'd%0d",A,A);
end
Both assignments perform sign extension while I was expecting it only for 1st assignment to A_S ( as lhs is signed type )
[Q1] Does sign extension take place independent of sign type of lhs ?
[Q2] When MSb of rhs is 1, what decides whether sign extension or zero padding is performed ?
initial begin:i2
B = $signed(4'b1100) + $signed(4'b1111);
$display("B is 'b%b i.e 'd%0d",B,B);
end
Similar to i1 I observe that ini2 both operands in rhs are sign-extended to 8-bits before addition operation ( although lhs is unsigned type )
[Q3] What gets determined first ? Is it the sign type or bit length ?
initial begin:i3
// Both LHS & RHS are 31-bits wide so No Sign Extension / Zero padding here
s_b = 31'h7FFF_FFFF;
b = 31'h7FFF_FFFF;
$display("32'(s_b) is 'b%b i.e 'd%0d",32'(s_b),32'(s_b));
$display("32'(b) is 'b%b i.e 'd%0d",32'(b),32'(b));
end
[Q4] Although both b and s_b have MSb as 1,
why does sign extension occur for 32’(s_b) while zero padding is done for 32’(b) ?
[Q5] As per LRM what is an expression type ? Is it only sign and bit-width ?
Thanks & Regards,
Aakash B