|
214 | 214 | " val in = IO(Flipped(Decoupled(ioType)))\n", |
215 | 215 | " val out = IO(Decoupled(ioType))\n", |
216 | 216 | " out <> Queue(in, entries)\n", |
217 | | - "}\n" |
| 217 | + "}" |
218 | 218 | ] |
219 | 219 | }, |
220 | 220 | { |
|
339 | 339 | "metadata": {}, |
340 | 340 | "outputs": [], |
341 | 341 | "source": [ |
342 | | - "\n", |
343 | 342 | "test(QueueModule(UInt(9.W), entries = 200)) { c =>\n", |
344 | 343 | " // Example testsequence showing the use and behavior of Queue\n", |
345 | 344 | " c.in.initSource()\n", |
|
434 | 433 | " y := y - x\n", |
435 | 434 | " }\n", |
436 | 435 | " when(y === 0.U) {\n", |
437 | | - " // when y becomes zero computation is over, signal valid data to output\n", |
| 436 | + " // when y becomes zero computation is over,\n", |
| 437 | + " // signal valid data to output if the output is ready\n", |
438 | 438 | " output.bits.value1 := xInitial\n", |
439 | 439 | " output.bits.value2 := yInitial\n", |
440 | 440 | " output.bits.gcd := x\n", |
441 | 441 | " output.valid := true.B\n", |
442 | | - " busy := false.B\n", |
| 442 | + " busy := ! output.ready\n", |
443 | 443 | " }\n", |
444 | 444 | " }.otherwise {\n", |
445 | 445 | " when(input.valid) {\n", |
|
453 | 453 | " resultValid := false.B\n", |
454 | 454 | " }\n", |
455 | 455 | " }\n", |
456 | | - "}\n" |
| 456 | + "}" |
457 | 457 | ] |
458 | 458 | }, |
459 | 459 | { |
|
498 | 498 | " fork {\n", |
499 | 499 | " dut.input.enqueueSeq(inputSeq)\n", |
500 | 500 | " }.fork {\n", |
501 | | - " dut.output.expectDequeueSeq(resultSeq)\n", |
| 501 | + " for (expected <- resultSeq) {\n", |
| 502 | + " dut.output.expectDequeue(expected)\n", |
| 503 | + " dut.clock.step(5) // wait some cycles before receiving the next output to create backpressure\n", |
| 504 | + " }\n", |
502 | 505 | " }.join()\n", |
503 | 506 | "}\n" |
504 | 507 | ] |
|
0 commit comments