|
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