cocotb_benches.dau_rolling_extremum_tb¶
Attributes¶
Functions¶
|
|
Backpressure must not change a value or reorder a row: the network is |
|
The segment boundary is the whole point: a new symbol must not see the |
|
|
A stream that forwards NOTHING still closes out. Zero forwarded rows is |
The final input rows may all be warm-up. output_last still has to land |
|
A SECOND batch after input_last must be a fresh window. |
|
The close-out is a pulse, not a level. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Module Contents¶
- cocotb_benches.dau_rolling_extremum_tb.WINDOW¶
- cocotb_benches.dau_rolling_extremum_tb.VALUE_WIDTH¶
- cocotb_benches.dau_rolling_extremum_tb.FIND_MAX¶
- cocotb_benches.dau_rolling_extremum_tb.WORDS = 2¶
- cocotb_benches.dau_rolling_extremum_tb._VALUES¶
- cocotb_benches.dau_rolling_extremum_tb._golden(values, *, window=WINDOW)¶
- async cocotb_benches.dau_rolling_extremum_tb.rolling_extremum_matches_golden(dut)¶
- async cocotb_benches.dau_rolling_extremum_tb.rolling_extremum_backpressure_both_sides(dut)¶
Backpressure must not change a value or reorder a row: the network is a pipeline, and a skid slot sits between it and the output.
- async cocotb_benches.dau_rolling_extremum_tb.rolling_extremum_resets_per_symbol(dut)¶
The segment boundary is the whole point: a new symbol must not see the previous symbol’s values, however extreme they were.
- async cocotb_benches.dau_rolling_extremum_tb.rolling_extremum_all_warmup_emits_nothing_and_closes_out(dut)¶
A stream that forwards NOTHING still closes out. Zero forwarded rows is the one outcome a downstream tile cannot tell apart from a stall, which is why this tile is silent on success only while it is forwarding.
- async cocotb_benches.dau_rolling_extremum_tb.rolling_extremum_last_rides_the_final_forwarded_row(dut)¶
The final input rows may all be warm-up. output_last still has to land on the last row actually forwarded, so the skid holds it back until the stream ends.
- async cocotb_benches.dau_rolling_extremum_tb.rolling_extremum_reuses_across_batches(dut)¶
A SECOND batch after input_last must be a fresh window.
Every other test resets first, which is exactly how a tile that carries its segment state across a batch boundary passes a whole bench. Here the second batch opens with the SAME symbol the first one closed on: if the run length survived, its first rows emit during what should be warm-up.
- async cocotb_benches.dau_rolling_extremum_tb.rolling_extremum_zero_row_close_out_fires_exactly_once(dut)¶
The close-out is a pulse, not a level.
The condition is derived from a latched ‘stream has ended’ bit, so without a fired-once guard it re-asserts every cycle and a consumer holding status_ready sees an unbounded run of transfers.
- async cocotb_benches.dau_rolling_extremum_tb._start(dut) None¶
- async cocotb_benches.dau_rolling_extremum_tb._run(dut, values, *, ready_pattern=(1,), expect_close_out=False)¶
- cocotb_benches.dau_rolling_extremum_tb._decode_rows(words)¶
- async cocotb_benches.dau_rolling_extremum_tb._send_rows(dut, values) None¶
- async cocotb_benches.dau_rolling_extremum_tb._collect_output(dut, ready_pattern)¶
- async cocotb_benches.dau_rolling_extremum_tb._collect_with_last(dut, values)¶
- async cocotb_benches.dau_rolling_extremum_tb._accept_success_status(dut) None¶
- cocotb_benches.dau_rolling_extremum_tb._signed(value: int, width: int) int¶
- cocotb_benches.dau_rolling_extremum_tb._signed32(value: int) int¶