|
CIRCT 24.0.0git
|
Classes | |
| class | ChannelArbiterTokenTest |
| class | ListChecker |
| class | ThroughputProbe |
| class | TokenChecker |
| class | Top |
Functions | |
| HostMux (int num_inputs, mux_pipeline_levels=None, pipelined_scheduler=False) | |
| ListProducer (int src_id, int length) | |
| ChannelArbiterListTestMod (bool pipelined_scheduler) | |
| TokenProducer (int count) | |
| AlwaysValidProducer (int tag) | |
| ChannelArbiterThroughputTestMod (bool pipelined_scheduler) | |
Variables | |
| int | NUM_INPUTS = 4 |
| int | ODD_NUM_INPUTS = 3 |
| int | PIPE_NUM_INPUTS = 6 |
| int | TOKEN_NUM_INPUTS = 5 |
| int | THROUGHPUT_NUM_INPUTS = 4 |
| int | THROUGHPUT_WINDOW = 1000 |
| int | TOKENS_PER_INPUT = 8 |
| int | WIDE_NUM_INPUTS = 13 |
| ListInto = StructType({'src': UInt(8), 'items': ListType(UInt(16))}) | |
| Flit = Window.default_of(ListInto) | |
| FlitLowered = Flit.lowered_type | |
| bsp = get_bsp(sys.argv[2] if len(sys.argv) > 2 else None) | |
| s = System(bsp(Top), name="ChannelArbiterTest", output_directory=sys.argv[1]) | |
| channel_arbiter.AlwaysValidProducer | ( | int | tag | ) |
Never idles: `valid` is tied high, so the only thing limiting the arbiter's delivery rate is the arbiter itself.
Definition at line 298 of file channel_arbiter.py.
References wrap().
Referenced by ChannelArbiterThroughputTestMod().
| channel_arbiter.ChannelArbiterListTestMod | ( | bool | pipelined_scheduler | ) |
Contending list producers -> arbiter -> contiguity checker. Message atomicity is the property most at risk from any arbitration change, so it is covered for both arbitration modes.
Definition at line 187 of file channel_arbiter.py.
References ListProducer().
Referenced by channel_arbiter.Top.construct().
| channel_arbiter.ChannelArbiterThroughputTestMod | ( | bool | pipelined_scheduler | ) |
`THROUGHPUT_NUM_INPUTS` never-idle producers -> arbiter -> throughput probe. Pins the arbiter's sustained delivery rate: a scheduler which needs a refill/turnaround cycle between grants shows up here as a throughput well below one beat per cycle, while correctness tests stay green.
Definition at line 347 of file channel_arbiter.py.
References AlwaysValidProducer().
Referenced by channel_arbiter.Top.construct().
| channel_arbiter.HostMux | ( | int | num_inputs, |
mux_pipeline_levels = None, |
|||
pipelined_scheduler = False |
|||
| ) |
A host-driven single-flit multiplexer: `num_inputs` `from_host` UInt(32) channels muxed into a single `to_host` channel. `mux_pipeline_levels` pipelines the selection mux tree; `pipelined_scheduler` selects the decoupled grant-queue arbitration.
Definition at line 62 of file channel_arbiter.py.
Referenced by channel_arbiter.Top.construct().
| channel_arbiter.ListProducer | ( | int | src_id, |
| int | length | ||
| ) |
A module which continuously emits back-to-back list messages of `length` flits tagged with `src_id`. `items` counts 0..length-1 and `last` is set on the final flit. Always valid, so two of these contend for the arbiter.
Definition at line 93 of file channel_arbiter.py.
References FlitLowered, and wrap().
Referenced by ChannelArbiterListTestMod().
| channel_arbiter.TokenProducer | ( | int | count | ) |
Emits exactly `count` zero-width (`i0`) tokens then idles: `valid` stays high until `count` tokens have been accepted. There is no payload -- only the valid/ready handshake carries information.
Definition at line 220 of file channel_arbiter.py.
References wrap().
Referenced by channel_arbiter.ChannelArbiterTokenTest.build().
| channel_arbiter.bsp = get_bsp(sys.argv[2] if len(sys.argv) > 2 else None) |
Definition at line 421 of file channel_arbiter.py.
| channel_arbiter.Flit = Window.default_of(ListInto) |
Definition at line 58 of file channel_arbiter.py.
| channel_arbiter.FlitLowered = Flit.lowered_type |
Definition at line 59 of file channel_arbiter.py.
Referenced by ListProducer().
| channel_arbiter.ListInto = StructType({'src': UInt(8), 'items': ListType(UInt(16))}) |
Definition at line 57 of file channel_arbiter.py.
| int channel_arbiter.NUM_INPUTS = 4 |
Definition at line 39 of file channel_arbiter.py.
| int channel_arbiter.ODD_NUM_INPUTS = 3 |
Definition at line 40 of file channel_arbiter.py.
| int channel_arbiter.PIPE_NUM_INPUTS = 6 |
Definition at line 41 of file channel_arbiter.py.
Definition at line 422 of file channel_arbiter.py.
| int channel_arbiter.THROUGHPUT_NUM_INPUTS = 4 |
Definition at line 46 of file channel_arbiter.py.
| int channel_arbiter.THROUGHPUT_WINDOW = 1000 |
Definition at line 47 of file channel_arbiter.py.
| int channel_arbiter.TOKEN_NUM_INPUTS = 5 |
Definition at line 42 of file channel_arbiter.py.
| int channel_arbiter.TOKENS_PER_INPUT = 8 |
Definition at line 48 of file channel_arbiter.py.
| int channel_arbiter.WIDE_NUM_INPUTS = 13 |
Definition at line 52 of file channel_arbiter.py.