summaryrefslogtreecommitdiff
path: root/tests/simple/macros.v
diff options
context:
space:
mode:
authorClifford Wolf <clifford@clifford.at>2013-12-18 13:41:36 +0100
committerClifford Wolf <clifford@clifford.at>2013-12-18 13:41:36 +0100
commitfbd06a1afcef77e32b1fbe6405f1e639995d2fa5 (patch)
tree941a167a848251dd026f9bbd9903a6146720c402 /tests/simple/macros.v
parent921064c20044f72a64bec12dbd73103bdd3f45e3 (diff)
Added elsif preproc support
Diffstat (limited to 'tests/simple/macros.v')
-rw-r--r--tests/simple/macros.v230
1 files changed, 229 insertions, 1 deletions
diff --git a/tests/simple/macros.v b/tests/simple/macros.v
index e2025717..cda46cb4 100644
--- a/tests/simple/macros.v
+++ b/tests/simple/macros.v
@@ -1,9 +1,237 @@
-module test(a, y);
+
+module test_def(a, y);
+
`define MSB_LSB_SEP :
`define get_msb(off, len) ((off)+(len)-1)
`define get_lsb(off, len) (off)
`define sel_bits(offset, len) `get_msb(offset, len) `MSB_LSB_SEP `get_lsb(offset, len)
+
input [31:0] a;
output [7:0] y;
+
assign y = a[`sel_bits(16, 8)];
+
+endmodule
+
+// ---------------------------------------------------
+
+module test_ifdef(a, y);
+
+input [2:0] a;
+output reg [31:0] y;
+
+always @* begin
+ y = 0;
+
+ `undef X
+ `ifdef X
+ y = y + 42;
+ `else
+ `undef A
+ `undef B
+ `ifdef A
+ y = (y << 1) | a[0];
+ `elsif B
+ y = (y << 1) | a[1];
+ `else
+ y = (y << 1) | a[2];
+ `endif
+ `undef A
+ `define B
+ `ifdef A
+ y = (y << 1) | a[0];
+ `elsif B
+ y = (y << 1) | a[1];
+ `else
+ y = (y << 1) | a[2];
+ `endif
+ `define A
+ `undef B
+ `ifdef A
+ y = (y << 1) | a[0];
+ `elsif B
+ y = (y << 1) | a[1];
+ `else
+ y = (y << 1) | a[2];
+ `endif
+ `define A
+ `define B
+ `ifdef A
+ y = (y << 1) | a[0];
+ `elsif B
+ y = (y << 1) | a[1];
+ `else
+ y = (y << 1) | a[2];
+ `endif
+ // ------------------------------------
+ `undef A
+ `undef B
+ `ifndef A
+ y = (y << 1) | a[0];
+ `elsif B
+ y = (y << 1) | a[1];
+ `else
+ y = (y << 1) | a[2];
+ `endif
+ `undef A
+ `define B
+ `ifndef A
+ y = (y << 1) | a[0];
+ `elsif B
+ y = (y << 1) | a[1];
+ `else
+ y = (y << 1) | a[2];
+ `endif
+ `define A
+ `undef B
+ `ifndef A
+ y = (y << 1) | a[0];
+ `elsif B
+ y = (y << 1) | a[1];
+ `else
+ y = (y << 1) | a[2];
+ `endif
+ `define A
+ `define B
+ `ifndef A
+ y = (y << 1) | a[0];
+ `elsif B
+ y = (y << 1) | a[1];
+ `else
+ y = (y << 1) | a[2];
+ `endif
+ // ------------------------------------
+ `undef A
+ `ifdef A
+ y = (y << 1) | a[0];
+ `else
+ y = (y << 1) | a[2];
+ `endif
+ `define A
+ `ifdef A
+ y = (y << 1) | a[0];
+ `else
+ y = (y << 1) | a[2];
+ `endif
+ // ------------------------------------
+ `undef A
+ `ifndef A
+ y = (y << 1) | a[0];
+ `else
+ y = (y << 1) | a[2];
+ `endif
+ `define A
+ `ifndef A
+ y = (y << 1) | a[0];
+ `else
+ y = (y << 1) | a[2];
+ `endif
+ `endif
+
+ `define X
+ `ifdef X
+ `undef A
+ `undef B
+ `ifdef A
+ y = (y << 1) | a[0];
+ `elsif B
+ y = (y << 1) | a[1];
+ `else
+ y = (y << 1) | a[2];
+ `endif
+ `undef A
+ `define B
+ `ifdef A
+ y = (y << 1) | a[0];
+ `elsif B
+ y = (y << 1) | a[1];
+ `else
+ y = (y << 1) | a[2];
+ `endif
+ `define A
+ `undef B
+ `ifdef A
+ y = (y << 1) | a[0];
+ `elsif B
+ y = (y << 1) | a[1];
+ `else
+ y = (y << 1) | a[2];
+ `endif
+ `define A
+ `define B
+ `ifdef A
+ y = (y << 1) | a[0];
+ `elsif B
+ y = (y << 1) | a[1];
+ `else
+ y = (y << 1) | a[2];
+ `endif
+ // ------------------------------------
+ `undef A
+ `undef B
+ `ifndef A
+ y = (y << 1) | a[0];
+ `elsif B
+ y = (y << 1) | a[1];
+ `else
+ y = (y << 1) | a[2];
+ `endif
+ `undef A
+ `define B
+ `ifndef A
+ y = (y << 1) | a[0];
+ `elsif B
+ y = (y << 1) | a[1];
+ `else
+ y = (y << 1) | a[2];
+ `endif
+ `define A
+ `undef B
+ `ifndef A
+ y = (y << 1) | a[0];
+ `elsif B
+ y = (y << 1) | a[1];
+ `else
+ y = (y << 1) | a[2];
+ `endif
+ `define A
+ `define B
+ `ifndef A
+ y = (y << 1) | a[0];
+ `elsif B
+ y = (y << 1) | a[1];
+ `else
+ y = (y << 1) | a[2];
+ `endif
+ // ------------------------------------
+ `undef A
+ `ifdef A
+ y = (y << 1) | a[0];
+ `else
+ y = (y << 1) | a[2];
+ `endif
+ `define A
+ `ifdef A
+ y = (y << 1) | a[0];
+ `else
+ y = (y << 1) | a[2];
+ `endif
+ // ------------------------------------
+ `undef A
+ `ifndef A
+ y = (y << 1) | a[0];
+ `else
+ y = (y << 1) | a[2];
+ `endif
+ `define A
+ `ifndef A
+ y = (y << 1) | a[0];
+ `else
+ y = (y << 1) | a[2];
+ `endif
+ `else
+ y = y + 42;
+ `endif
+end
+
endmodule