Skip to content

Commit 8a0d435

Browse files
committed
Test for assignment extension and truncation
This tests the behavior when an assignment requires extension or truncation.
1 parent 2728d52 commit 8a0d435

File tree

3 files changed

+28
-23
lines changed

3 files changed

+28
-23
lines changed
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
CORE
2+
extension-and-truncation1.sv
3+
4+
^EXIT=0$
5+
^SIGNAL=0$
6+
--
7+
^warning: ignoring
8+
--

regression/verilog/expressions/conversions1.sv renamed to regression/verilog/assignments/extension-and-truncation1.sv

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,18 @@
11
module converter(input signed [7:0] si, input unsigned [7:0] ui);
22

3+
// 1800-2017 10.7 Assignment extension and truncation
4+
35
// enlarge
6+
// The RHS is padded or sign extended.
47
wire signed [31:0] sw1 = ui; // unsigned 8 to signed 32
58
wire signed [31:0] sw2 = si; // signed 8 to signed 32
69
wire unsigned [31:0] uw1 = ui; // unsigned 8 to unsigned 32
710
wire unsigned [31:0] uw2 = si; // signed 8 to unsigned 32
811

912
// shrink
13+
// The RHS is truncated.
14+
// Icarus Verilog yields 'z' for this, but the standard requires
15+
// truncation. VCS, Questa, Xcelium, Riviera implement this.
1016
wire signed [3:0] sn1 = ui; // unsigned 8 to signed 4
1117
wire signed [3:0] sn2 = si; // signed 8 to signed 4
1218
wire unsigned [3:0] un1 = ui; // unsigned 8 to unsigned 4
@@ -22,20 +28,20 @@ endmodule
2228

2329
module main;
2430

25-
converter c(8'sb1000_0000, 8'b1000_0000);
26-
27-
assert final(c.sw1 == 128);
28-
assert final(c.sw2 == -128);
29-
assert final(c.uw1 == 128);
30-
assert final(c.uw2 == 4294967168);
31-
assert final(c.sn1 == 'z);
32-
assert final(c.sn2 == 'z);
33-
assert final(c.un1 == 'z);
34-
assert final(c.un2 == 'z);
35-
assert final(c.sb1 == -128);
36-
assert final(c.sb2 == -128);
37-
assert final(c.ub1 == 128);
38-
assert final(c.ub2 == 128);
31+
converter c(8'sb1000_1000, 8'b1000_1000);
32+
33+
assert final(c.sw1 == 136);
34+
assert final(c.sw2 == -120);
35+
assert final(c.uw1 == 136);
36+
assert final(c.uw2 == 4294967176);
37+
assert final(c.sn1 == -8);
38+
assert final(c.sn2 == -8);
39+
assert final(c.un1 == 8);
40+
assert final(c.un2 == 8);
41+
assert final(c.sb1 == -120);
42+
assert final(c.sb2 == -120);
43+
assert final(c.ub1 == 136);
44+
assert final(c.ub2 == 136);
3945

4046
initial begin
4147
$display("c.sw1 == ", c.sw1);

regression/verilog/expressions/conversions1.desc

Lines changed: 0 additions & 9 deletions
This file was deleted.

0 commit comments

Comments
 (0)