|
| 1 | +module main; |
| 2 | + |
| 3 | +`define ui (8'd255+8'd2) |
| 4 | +`define si (8'sd127+8'sd1) |
| 5 | + |
| 6 | + // enlarge |
| 7 | + // The RHS is padded or sign extended. |
| 8 | + wire signed [31:0] sw1 = `ui; // unsigned 8 to signed 32 |
| 9 | + wire signed [31:0] sw2 = `si; // signed 8 to signed 32 |
| 10 | + wire unsigned [31:0] uw1 = `ui; // unsigned 8 to unsigned 32 |
| 11 | + wire unsigned [31:0] uw2 = `si; // signed 8 to unsigned 32 |
| 12 | + |
| 13 | + // shrink |
| 14 | + wire signed [3:0] sn1 = `ui; // unsigned 8 to signed 4 |
| 15 | + wire signed [3:0] sn2 = `si; // signed 8 to signed 4 |
| 16 | + wire unsigned [3:0] un1 = `ui; // unsigned 8 to unsigned 4 |
| 17 | + wire unsigned [3:0] un2 = `si; // signed 8 to unsigned 4 |
| 18 | + |
| 19 | + // same size |
| 20 | + wire signed [7:0] sb1 = `ui; // unsigned 8 to signed 8 |
| 21 | + wire signed [7:0] sb2 = `si; // signed 8 to signed 8 |
| 22 | + wire unsigned [7:0] ub1 = `ui; // unsigned 8 to unsigned 8 |
| 23 | + wire unsigned [7:0] ub2 = `si; // signed 8 to unsigned 8 |
| 24 | + |
| 25 | + // just one bit |
| 26 | + wire signed sbit1 = `ui; // unsigned 8 to signed 1 |
| 27 | + wire signed sbit2 = `si; // signed 8 to signed 1 |
| 28 | + wire unsigned ubit1 = `ui; // unsigned 8 to unsigned 1 |
| 29 | + wire unsigned ubit2 = `si; // signed 8 to unsigned 1 |
| 30 | + |
| 31 | + assert final(sw1 == 257); |
| 32 | + assert final(sw2 == 128); |
| 33 | + assert final(uw1 == 257); |
| 34 | + assert final(uw2 == 128); |
| 35 | + assert final(sn1 == 1); |
| 36 | + assert final(sn2 == 0); |
| 37 | + assert final(un1 == 1); |
| 38 | + assert final(un2 == 0); |
| 39 | + assert final(sb1 == 1); |
| 40 | + assert final(sb2 == -128); |
| 41 | + assert final(ub1 == 1); |
| 42 | + assert final(ub2 == 128); |
| 43 | + assert final(sbit1 == -1); |
| 44 | + assert final(sbit2 == 0); |
| 45 | + assert final(ubit1 == 1); |
| 46 | + assert final(ubit2 == 0); |
| 47 | + |
| 48 | + initial begin |
| 49 | + $display("sw1 == ", sw1); |
| 50 | + $display("sw2 == ", sw2); |
| 51 | + $display("uw1 == ", uw1); |
| 52 | + $display("uw2 == ", uw2); |
| 53 | + |
| 54 | + $display("sn1 == ", sn1); |
| 55 | + $display("sn2 == ", sn2); |
| 56 | + $display("un1 == ", un1); |
| 57 | + $display("un2 == ", un2); |
| 58 | + |
| 59 | + $display("sb1 == ", sb1); |
| 60 | + $display("sb2 == ", sb2); |
| 61 | + $display("ub1 == ", ub1); |
| 62 | + $display("ub2 == ", ub2); |
| 63 | + |
| 64 | + $display("sbit1 == ", sbit1); |
| 65 | + $display("sbit2 == ", sbit2); |
| 66 | + $display("ubit1 == ", ubit1); |
| 67 | + $display("ubit2 == ", ubit2); |
| 68 | + end |
| 69 | + |
| 70 | +endmodule |
0 commit comments