|
4 | 4 | from veriloggen import * |
5 | 5 |
|
6 | 6 | expected_verilog = """ |
7 | | -module test |
8 | | -( |
9 | | -); |
10 | | -
|
| 7 | +module test; |
11 | 8 | reg CLK; |
12 | 9 | reg RST; |
13 | 10 | reg [32-1:0] x; |
|
45 | 42 | $dumpvars(0, uut); |
46 | 43 | end |
47 | 44 |
|
| 45 | +
|
48 | 46 | initial begin |
49 | 47 | CLK = 0; |
50 | 48 | forever begin |
51 | | - #5 CLK = (!CLK); |
| 49 | + #5 CLK = !CLK; |
52 | 50 | end |
53 | 51 | end |
54 | 52 |
|
| 53 | +
|
55 | 54 | initial begin |
56 | 55 | RST = 0; |
57 | 56 | reset_done = 0; |
|
79 | 78 | localparam xfsm_init = 0; |
80 | 79 | localparam xfsm_1 = 1; |
81 | 80 | localparam xfsm_2 = 2; |
| 81 | + localparam xfsm_3 = 3; |
| 82 | + localparam xfsm_4 = 4; |
| 83 | + localparam xfsm_5 = 5; |
| 84 | + localparam xfsm_6 = 6; |
| 85 | + localparam xfsm_7 = 7; |
| 86 | + localparam xfsm_8 = 8; |
| 87 | + localparam xfsm_9 = 9; |
| 88 | + localparam xfsm_10 = 10; |
| 89 | + localparam xfsm_11 = 11; |
| 90 | + localparam xfsm_12 = 12; |
| 91 | + localparam xfsm_13 = 13; |
| 92 | + localparam xfsm_14 = 14; |
| 93 | + localparam xfsm_15 = 15; |
| 94 | + localparam xfsm_16 = 16; |
| 95 | + localparam xfsm_17 = 17; |
| 96 | + localparam xfsm_18 = 18; |
| 97 | + localparam xfsm_19 = 19; |
| 98 | + localparam xfsm_20 = 20; |
| 99 | + localparam xfsm_21 = 21; |
| 100 | + localparam xfsm_22 = 22; |
| 101 | + localparam xfsm_23 = 23; |
| 102 | + localparam xfsm_24 = 24; |
82 | 103 |
|
83 | 104 | always @(posedge CLK) begin |
84 | 105 | if(RST) begin |
|
93 | 114 | end |
94 | 115 | end |
95 | 116 | xfsm_1: begin |
| 117 | + xfsm <= xfsm_2; |
| 118 | + end |
| 119 | + xfsm_2: begin |
| 120 | + xfsm <= xfsm_3; |
| 121 | + end |
| 122 | + xfsm_3: begin |
| 123 | + xfsm <= xfsm_4; |
| 124 | + end |
| 125 | + xfsm_4: begin |
| 126 | + xfsm <= xfsm_5; |
| 127 | + end |
| 128 | + xfsm_5: begin |
| 129 | + xfsm <= xfsm_6; |
| 130 | + end |
| 131 | + xfsm_6: begin |
| 132 | + xfsm <= xfsm_7; |
| 133 | + end |
| 134 | + xfsm_7: begin |
| 135 | + xfsm <= xfsm_8; |
| 136 | + end |
| 137 | + xfsm_8: begin |
| 138 | + xfsm <= xfsm_9; |
| 139 | + end |
| 140 | + xfsm_9: begin |
| 141 | + xfsm <= xfsm_10; |
| 142 | + end |
| 143 | + xfsm_10: begin |
| 144 | + xfsm <= xfsm_11; |
| 145 | + end |
| 146 | + xfsm_11: begin |
96 | 147 | vx <= 1; |
| 148 | + xfsm <= xfsm_12; |
| 149 | + end |
| 150 | + xfsm_12: begin |
97 | 151 | if(rx) begin |
98 | | - x <= (x + 1); |
| 152 | + x <= x + 1; |
99 | 153 | end |
100 | 154 | if(rx) begin |
101 | | - _tmp_0 <= (_tmp_0 + 1); |
| 155 | + _tmp_0 <= _tmp_0 + 1; |
102 | 156 | end |
103 | | - if(((_tmp_0 == 10) && rx)) begin |
104 | | - xfsm <= xfsm_2; |
| 157 | + if((_tmp_0 == 5) && rx) begin |
| 158 | + xfsm <= xfsm_13; |
105 | 159 | end |
106 | 160 | end |
107 | | - xfsm_2: begin |
| 161 | + xfsm_13: begin |
| 162 | + vx <= 0; |
| 163 | + xfsm <= xfsm_14; |
| 164 | + end |
| 165 | + xfsm_14: begin |
| 166 | + xfsm <= xfsm_15; |
| 167 | + end |
| 168 | + xfsm_15: begin |
| 169 | + xfsm <= xfsm_16; |
| 170 | + end |
| 171 | + xfsm_16: begin |
| 172 | + xfsm <= xfsm_17; |
| 173 | + end |
| 174 | + xfsm_17: begin |
| 175 | + xfsm <= xfsm_18; |
| 176 | + end |
| 177 | + xfsm_18: begin |
| 178 | + xfsm <= xfsm_19; |
| 179 | + end |
| 180 | + xfsm_19: begin |
| 181 | + xfsm <= xfsm_20; |
| 182 | + end |
| 183 | + xfsm_20: begin |
| 184 | + xfsm <= xfsm_21; |
| 185 | + end |
| 186 | + xfsm_21: begin |
| 187 | + xfsm <= xfsm_22; |
| 188 | + end |
| 189 | + xfsm_22: begin |
| 190 | + xfsm <= xfsm_23; |
| 191 | + end |
| 192 | + xfsm_23: begin |
| 193 | + vx <= 1; |
| 194 | + if(rx) begin |
| 195 | + x <= x + 1; |
| 196 | + end |
| 197 | + if(rx) begin |
| 198 | + _tmp_0 <= _tmp_0 + 1; |
| 199 | + end |
| 200 | + if((_tmp_0 == 10) && rx) begin |
| 201 | + xfsm <= xfsm_24; |
| 202 | + end |
| 203 | + end |
| 204 | + xfsm_24: begin |
108 | 205 | vx <= 0; |
109 | 206 | end |
110 | 207 | endcase |
|
115 | 212 | localparam yfsm_init = 0; |
116 | 213 | localparam yfsm_1 = 1; |
117 | 214 | localparam yfsm_2 = 2; |
| 215 | + localparam yfsm_3 = 3; |
118 | 216 |
|
119 | 217 | always @(posedge CLK) begin |
120 | 218 | if(RST) begin |
|
130 | 228 | end |
131 | 229 | yfsm_1: begin |
132 | 230 | vy <= 1; |
| 231 | + yfsm <= yfsm_2; |
| 232 | + end |
| 233 | + yfsm_2: begin |
133 | 234 | if(ry) begin |
134 | | - y <= (y + 2); |
| 235 | + y <= y + 2; |
135 | 236 | end |
136 | 237 | if(ry) begin |
137 | | - _tmp_1 <= (_tmp_1 + 1); |
| 238 | + _tmp_1 <= _tmp_1 + 1; |
138 | 239 | end |
139 | | - if(((_tmp_1 == 10) && ry)) begin |
140 | | - yfsm <= yfsm_2; |
| 240 | + if((_tmp_1 == 10) && ry) begin |
| 241 | + yfsm <= yfsm_3; |
141 | 242 | end |
142 | 243 | end |
143 | | - yfsm_2: begin |
| 244 | + yfsm_3: begin |
144 | 245 | vy <= 0; |
145 | 246 | end |
146 | 247 | endcase |
|
232 | 333 | end |
233 | 334 | end |
234 | 335 |
|
| 336 | +
|
235 | 337 | always @(posedge CLK) begin |
236 | 338 | if(reset_done) begin |
237 | | - if((vx && rx)) begin |
| 339 | + if(vx && rx) begin |
238 | 340 | $display("x=%d", x); |
239 | 341 | end |
240 | | - if((vy && ry)) begin |
| 342 | + if(vy && ry) begin |
241 | 343 | $display("y=%d", y); |
242 | 344 | end |
243 | | - if((vz && rz)) begin |
| 345 | + if(vz && rz) begin |
244 | 346 | $display("z=%d", z); |
245 | 347 | end |
246 | 348 | end |
247 | 349 | end |
248 | 350 |
|
249 | 351 | endmodule |
250 | 352 |
|
| 353 | +
|
251 | 354 | module multadd |
252 | 355 | ( |
253 | 356 | input CLK, |
|
264 | 367 | input rz |
265 | 368 | ); |
266 | 369 |
|
267 | | - assign rx = (_df_ready_0 || (!_df_valid_0)); |
268 | | - assign ry = (_df_ready_1 || (!_df_valid_1)); |
| 370 | + assign rx = (_df_ready_0 || !_df_valid_0) && vx; |
| 371 | + assign ry = (_df_ready_1 || !_df_valid_1) && vy; |
269 | 372 | reg [32-1:0] _df_data_0; |
270 | 373 | reg _df_valid_0; |
271 | 374 | wire _df_ready_0; |
272 | | - assign _df_ready_0 = (_df_ready_2 || (!_df_valid_2)); |
| 375 | + assign _df_ready_0 = (_df_ready_2 || !_df_valid_2) && (_df_valid_0 && _df_valid_1); |
273 | 376 | reg [32-1:0] _df_data_1; |
274 | 377 | reg _df_valid_1; |
275 | 378 | wire _df_ready_1; |
276 | | - assign _df_ready_1 = (_df_ready_2 || (!_df_valid_2)); |
| 379 | + assign _df_ready_1 = (_df_ready_2 || !_df_valid_2) && (_df_valid_0 && _df_valid_1); |
277 | 380 | reg [32-1:0] _df_data_2; |
278 | 381 | reg _df_valid_2; |
279 | 382 | wire _df_ready_2; |
|
290 | 393 | _df_data_2 <= 0; |
291 | 394 | _df_valid_2 <= 0; |
292 | 395 | end else begin |
293 | | - if(((vx && rx) && (_df_ready_0 || (!_df_valid_0)))) begin |
294 | | - _df_data_0 <= (x * c); |
| 396 | + if(vx && rx && (_df_ready_0 || !_df_valid_0)) begin |
| 397 | + _df_data_0 <= x * c; |
| 398 | + end |
| 399 | + if(_df_valid_0 && _df_ready_0) begin |
| 400 | + _df_valid_0 <= 0; |
295 | 401 | end |
296 | | - if((_df_ready_0 || (!_df_valid_0))) begin |
297 | | - _df_valid_0 <= (vx && rx); |
| 402 | + if(rx && (_df_ready_0 || !_df_valid_0)) begin |
| 403 | + _df_valid_0 <= vx; |
298 | 404 | end |
299 | | - if(((vy && ry) && (_df_ready_1 || (!_df_valid_1)))) begin |
| 405 | + if(vy && ry && (_df_ready_1 || !_df_valid_1)) begin |
300 | 406 | _df_data_1 <= y; |
301 | 407 | end |
302 | | - if((_df_ready_1 || (!_df_valid_1))) begin |
303 | | - _df_valid_1 <= (vy && ry); |
| 408 | + if(_df_valid_1 && _df_ready_1) begin |
| 409 | + _df_valid_1 <= 0; |
| 410 | + end |
| 411 | + if(ry && (_df_ready_1 || !_df_valid_1)) begin |
| 412 | + _df_valid_1 <= vy; |
304 | 413 | end |
305 | | - if((((_df_valid_0 && _df_ready_0) && (_df_valid_1 && _df_ready_1)) && (_df_ready_2 || (!_df_valid_2)))) begin |
306 | | - _df_data_2 <= (_df_data_0 + _df_data_1); |
| 414 | + if(_df_valid_0 && _df_valid_1 && (_df_ready_0 && _df_ready_1) && (_df_ready_2 || !_df_valid_2)) begin |
| 415 | + _df_data_2 <= _df_data_0 + _df_data_1; |
307 | 416 | end |
308 | | - if((_df_ready_2 || (!_df_valid_2))) begin |
309 | | - _df_valid_2 <= ((_df_valid_0 && _df_ready_0) && (_df_valid_1 && _df_ready_1)); |
| 417 | + if(_df_valid_2 && _df_ready_2) begin |
| 418 | + _df_valid_2 <= 0; |
| 419 | + end |
| 420 | + if(_df_ready_0 && _df_ready_1 && (_df_ready_2 || !_df_valid_2)) begin |
| 421 | + _df_valid_2 <= _df_valid_0 && _df_valid_1; |
310 | 422 | end |
311 | 423 | end |
312 | 424 | end |
313 | 425 |
|
| 426 | +
|
314 | 427 | endmodule |
315 | 428 | """ |
316 | 429 |
|
317 | 430 | expected_rslt = """\ |
318 | 431 | VCD info: dumpfile uut.vcd opened for output. |
| 432 | +y= 0 |
| 433 | +x= 0 |
319 | 434 | x= 1 |
320 | 435 | y= 2 |
321 | 436 | x= 2 |
322 | 437 | y= 4 |
| 438 | +z= 0 |
323 | 439 | x= 3 |
324 | 440 | y= 6 |
325 | 441 | z= 10 |
|
0 commit comments