cocotb_benches.dau_rolling_extremum_tb

Attributes

WINDOW

VALUE_WIDTH

FIND_MAX

WORDS

_VALUES

Functions

_golden(values, *[, window])

rolling_extremum_matches_golden(dut)

rolling_extremum_backpressure_both_sides(dut)

Backpressure must not change a value or reorder a row: the network is

rolling_extremum_resets_per_symbol(dut)

The segment boundary is the whole point: a new symbol must not see the

rolling_extremum_all_warmup_emits_nothing_and_closes_out(dut)

A stream that forwards NOTHING still closes out. Zero forwarded rows is

rolling_extremum_last_rides_the_final_forwarded_row(dut)

The final input rows may all be warm-up. output_last still has to land

rolling_extremum_reuses_across_batches(dut)

A SECOND batch after input_last must be a fresh window.

rolling_extremum_zero_row_close_out_fires_exactly_once(dut)

The close-out is a pulse, not a level.

_start(dut) → None

_run(dut, values, *[, ready_pattern, expect_close_out])

_decode_rows(words)

_send_rows(dut, values) → None

_collect_output(dut, ready_pattern)

_collect_with_last(dut, values)

_accept_success_status(dut) → None

_signed(value, width) → int

_signed32(value) → int

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