|
CIRCT 24.0.0git
|
Public Member Functions | |
| None | test_mux_correctness (self, AcceleratorConnection conn) |
| None | test_mux_correctness_unbalanced (self, AcceleratorConnection conn) |
| None | test_mux_correctness_pipelined (self, AcceleratorConnection conn) |
| None | test_mux_correctness_wide (self, AcceleratorConnection conn) |
| None | test_mux_correctness_scheduled (self, AcceleratorConnection conn) |
| None | test_mux_correctness_scheduled_unbalanced (self, AcceleratorConnection conn) |
| None | test_list_contiguity (self, AcceleratorConnection conn) |
| None | test_list_contiguity_scheduled (self, AcceleratorConnection conn) |
| None | test_token_conservation (self, AcceleratorConnection conn) |
| None | test_throughput_flat (self, AcceleratorConnection conn) |
| None | test_throughput_scheduled (self, AcceleratorConnection conn) |
Static Protected Member Functions | |
| None | _check_contiguity (AcceleratorConnection conn, str dut_name, set[int] expected_src) |
| None | _check_throughput (AcceleratorConnection conn, str dut_name) |
Definition at line 92 of file test_channel_arbiter.py.
|
staticprotected |
|
staticprotected |
Definition at line 194 of file test_channel_arbiter.py.
Referenced by tests.integration.test_channel_arbiter.TestChannelArbiterCosim.test_throughput_flat(), and tests.integration.test_channel_arbiter.TestChannelArbiterCosim.test_throughput_scheduled().
| None tests.integration.test_channel_arbiter.TestChannelArbiterCosim.test_list_contiguity | ( | self, | |
| AcceleratorConnection | conn | ||
| ) |
Contending multi-flit list messages are never interleaved.
Definition at line 130 of file test_channel_arbiter.py.
References tests.integration.test_channel_arbiter.TestChannelArbiterCosim._check_contiguity().
| None tests.integration.test_channel_arbiter.TestChannelArbiterCosim.test_list_contiguity_scheduled | ( | self, | |
| AcceleratorConnection | conn | ||
| ) |
Message atomicity under the decoupled grant-queue scheduler, with more contending producers than the grant queue is deep.
Definition at line 134 of file test_channel_arbiter.py.
References tests.integration.test_channel_arbiter.TestChannelArbiterCosim._check_contiguity().
| None tests.integration.test_channel_arbiter.TestChannelArbiterCosim.test_mux_correctness | ( | self, | |
| AcceleratorConnection | conn | ||
| ) |
Balanced (power-of-two) input count: every value appears once.
Definition at line 94 of file test_channel_arbiter.py.
References tests.integration.test_channel_arbiter._check_mux().
| None tests.integration.test_channel_arbiter.TestChannelArbiterCosim.test_mux_correctness_pipelined | ( | self, | |
| AcceleratorConnection | conn | ||
| ) |
Pipelined selection mux tree: the multi-cycle mux latency (absorbed by a deeper output FIFO + credit counter) must still deliver every value exactly once.
Definition at line 105 of file test_channel_arbiter.py.
References tests.integration.test_channel_arbiter._check_mux().
| None tests.integration.test_channel_arbiter.TestChannelArbiterCosim.test_mux_correctness_scheduled | ( | self, | |
| AcceleratorConnection | conn | ||
| ) |
Decoupled grant-queue scheduler at wide fan-in: grants are chosen ahead of time and buffered, so this exercises the queue, the sweep reload and the stale-entry skip. Delivery must still be exactly-once and every input served.
Definition at line 117 of file test_channel_arbiter.py.
References tests.integration.test_channel_arbiter._check_mux().
| None tests.integration.test_channel_arbiter.TestChannelArbiterCosim.test_mux_correctness_scheduled_unbalanced | ( | self, | |
| AcceleratorConnection | conn | ||
| ) |
The scheduler with a non-power-of-two input count: the one-hot->index encode and the sweep must not produce an out-of-range grant.
Definition at line 124 of file test_channel_arbiter.py.
References tests.integration.test_channel_arbiter._check_mux().
| None tests.integration.test_channel_arbiter.TestChannelArbiterCosim.test_mux_correctness_unbalanced | ( | self, | |
| AcceleratorConnection | conn | ||
| ) |
Unbalanced (non-power-of-two) input count: the array-indexed mux over N < 2**clog2(N) elements and the round-robin wrap still deliver every value exactly once.
Definition at line 98 of file test_channel_arbiter.py.
References tests.integration.test_channel_arbiter._check_mux().
| None tests.integration.test_channel_arbiter.TestChannelArbiterCosim.test_mux_correctness_wide | ( | self, | |
| AcceleratorConnection | conn | ||
| ) |
Wide fan-in: the BSP instantiates arbiters with ~31 inputs, a regime the small counts above never reach. Every value must still be delivered exactly once and every input served.
Definition at line 111 of file test_channel_arbiter.py.
References tests.integration.test_channel_arbiter._check_mux().
| None tests.integration.test_channel_arbiter.TestChannelArbiterCosim.test_throughput_flat | ( | self, | |
| AcceleratorConnection | conn | ||
| ) |
The flat round-robin arbiter sustains ~one beat per cycle.
Definition at line 177 of file test_channel_arbiter.py.
References tests.integration.test_channel_arbiter.TestChannelArbiterCosim._check_throughput().
| None tests.integration.test_channel_arbiter.TestChannelArbiterCosim.test_throughput_scheduled | ( | self, | |
| AcceleratorConnection | conn | ||
| ) |
The decoupled grant-queue scheduler must sustain ~one beat per cycle too. Regression test: reloading the sweep snapshot a cycle after it drains (rather than on the cycle the last entry is queued) costs one idle cycle per sweep, which caps throughput at `n/(n+1)` -- 0.8 here. Correctness tests do not notice that, only this one does. The producers emit **single-flit** messages deliberately: with multi-flit lists the datapath keeps streaming while the sweep refills, which hides the bubble entirely (measured: no loss at list length >= 2).
Definition at line 181 of file test_channel_arbiter.py.
References tests.integration.test_channel_arbiter.TestChannelArbiterCosim._check_throughput().
| None tests.integration.test_channel_arbiter.TestChannelArbiterCosim.test_token_conservation | ( | self, | |
| AcceleratorConnection | conn | ||
| ) |
Zero-width (`i0`) token payloads: the credit-counter-as-buffer path delivers every token exactly once (no loss/duplication/reorder) and serves every producer -- the total is only reachable if no producer is starved.
Definition at line 162 of file test_channel_arbiter.py.