Merge pull request #1814 from YosysHQ/mmicko/pyosys_makefile
[yosys.git] / tests / simple / macros.v
1
2 module test_def(a, y);
3
4 `define MSB_LSB_SEP :
5 `define get_msb(off, len) ((off)+(len)-1)
6 `define get_lsb(off, len) (off)
7 `define sel_bits(offset, len) `get_msb(offset, len) `MSB_LSB_SEP `get_lsb(offset, len)
8
9 input [31:0] a;
10 output [7:0] y;
11
12 assign y = a[`sel_bits(16, 8)];
13
14 endmodule
15
16 // ---------------------------------------------------
17
18 module test_ifdef(a, y);
19
20 input [2:0] a;
21 output reg [31:0] y;
22
23 always @* begin
24 y = 0;
25
26 `undef X
27 `ifdef X
28 y = y + 42;
29 `else
30 `undef A
31 `undef B
32 `ifdef A
33 y = (y << 1) | a[0];
34 `elsif B
35 y = (y << 1) | a[1];
36 `else
37 y = (y << 1) | a[2];
38 `endif
39 `undef A
40 `define B
41 `ifdef A
42 y = (y << 1) | a[0];
43 `elsif B
44 y = (y << 1) | a[1];
45 `else
46 y = (y << 1) | a[2];
47 `endif
48 `define A
49 `undef B
50 `ifdef A
51 y = (y << 1) | a[0];
52 `elsif B
53 y = (y << 1) | a[1];
54 `else
55 y = (y << 1) | a[2];
56 `endif
57 `define A
58 `define B
59 `ifdef A
60 y = (y << 1) | a[0];
61 `elsif B
62 y = (y << 1) | a[1];
63 `else
64 y = (y << 1) | a[2];
65 `endif
66 // ------------------------------------
67 `undef A
68 `undef B
69 `ifndef A
70 y = (y << 1) | a[0];
71 `elsif B
72 y = (y << 1) | a[1];
73 `else
74 y = (y << 1) | a[2];
75 `endif
76 `undef A
77 `define B
78 `ifndef A
79 y = (y << 1) | a[0];
80 `elsif B
81 y = (y << 1) | a[1];
82 `else
83 y = (y << 1) | a[2];
84 `endif
85 `define A
86 `undef B
87 `ifndef A
88 y = (y << 1) | a[0];
89 `elsif B
90 y = (y << 1) | a[1];
91 `else
92 y = (y << 1) | a[2];
93 `endif
94 `define A
95 `define B
96 `ifndef A
97 y = (y << 1) | a[0];
98 `elsif B
99 y = (y << 1) | a[1];
100 `else
101 y = (y << 1) | a[2];
102 `endif
103 // ------------------------------------
104 `undef A
105 `ifdef A
106 y = (y << 1) | a[0];
107 `else
108 y = (y << 1) | a[2];
109 `endif
110 `define A
111 `ifdef A
112 y = (y << 1) | a[0];
113 `else
114 y = (y << 1) | a[2];
115 `endif
116 // ------------------------------------
117 `undef A
118 `ifndef A
119 y = (y << 1) | a[0];
120 `else
121 y = (y << 1) | a[2];
122 `endif
123 `define A
124 `ifndef A
125 y = (y << 1) | a[0];
126 `else
127 y = (y << 1) | a[2];
128 `endif
129 `endif
130
131 `define X
132 `ifdef X
133 `undef A
134 `undef B
135 `ifdef A
136 y = (y << 1) | a[0];
137 `elsif B
138 y = (y << 1) | a[1];
139 `else
140 y = (y << 1) | a[2];
141 `endif
142 `undef A
143 `define B
144 `ifdef A
145 y = (y << 1) | a[0];
146 `elsif B
147 y = (y << 1) | a[1];
148 `else
149 y = (y << 1) | a[2];
150 `endif
151 `define A
152 `undef B
153 `ifdef A
154 y = (y << 1) | a[0];
155 `elsif B
156 y = (y << 1) | a[1];
157 `else
158 y = (y << 1) | a[2];
159 `endif
160 `define A
161 `define B
162 `ifdef A
163 y = (y << 1) | a[0];
164 `elsif B
165 y = (y << 1) | a[1];
166 `else
167 y = (y << 1) | a[2];
168 `endif
169 // ------------------------------------
170 `undef A
171 `undef B
172 `ifndef A
173 y = (y << 1) | a[0];
174 `elsif B
175 y = (y << 1) | a[1];
176 `else
177 y = (y << 1) | a[2];
178 `endif
179 `undef A
180 `define B
181 `ifndef A
182 y = (y << 1) | a[0];
183 `elsif B
184 y = (y << 1) | a[1];
185 `else
186 y = (y << 1) | a[2];
187 `endif
188 `define A
189 `undef B
190 `ifndef A
191 y = (y << 1) | a[0];
192 `elsif B
193 y = (y << 1) | a[1];
194 `else
195 y = (y << 1) | a[2];
196 `endif
197 `define A
198 `define B
199 `ifndef A
200 y = (y << 1) | a[0];
201 `elsif B
202 y = (y << 1) | a[1];
203 `else
204 y = (y << 1) | a[2];
205 `endif
206 // ------------------------------------
207 `undef A
208 `ifdef A
209 y = (y << 1) | a[0];
210 `else
211 y = (y << 1) | a[2];
212 `endif
213 `define A
214 `ifdef A
215 y = (y << 1) | a[0];
216 `else
217 y = (y << 1) | a[2];
218 `endif
219 // ------------------------------------
220 `undef A
221 `ifndef A
222 y = (y << 1) | a[0];
223 `else
224 y = (y << 1) | a[2];
225 `endif
226 `define A
227 `ifndef A
228 y = (y << 1) | a[0];
229 `else
230 y = (y << 1) | a[2];
231 `endif
232 `else
233 y = y + 42;
234 `endif
235 end
236
237 endmodule
238
239 `define SIZE 4 // comment supported in this part
240 module test_comment_in_macro ( din_a, dout_a );
241 input [`SIZE-1:0] din_a;
242 output [`SIZE-1:0] dout_a;
243 assign dout_a = din_a | `SIZE'ha;
244 endmodule