CIRCT 24.0.0git
Loading...
Searching...
No Matches
Classes | Functions | Variables
channel_arbiter Namespace Reference

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])
 

Function Documentation

◆ AlwaysValidProducer()

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().

◆ ChannelArbiterListTestMod()

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().

◆ ChannelArbiterThroughputTestMod()

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().

◆ HostMux()

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().

◆ ListProducer()

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().

◆ TokenProducer()

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().

Variable Documentation

◆ bsp

channel_arbiter.bsp = get_bsp(sys.argv[2] if len(sys.argv) > 2 else None)

Definition at line 421 of file channel_arbiter.py.

◆ Flit

channel_arbiter.Flit = Window.default_of(ListInto)

Definition at line 58 of file channel_arbiter.py.

◆ FlitLowered

channel_arbiter.FlitLowered = Flit.lowered_type

Definition at line 59 of file channel_arbiter.py.

Referenced by ListProducer().

◆ ListInto

channel_arbiter.ListInto = StructType({'src': UInt(8), 'items': ListType(UInt(16))})

Definition at line 57 of file channel_arbiter.py.

◆ NUM_INPUTS

int channel_arbiter.NUM_INPUTS = 4

Definition at line 39 of file channel_arbiter.py.

◆ ODD_NUM_INPUTS

int channel_arbiter.ODD_NUM_INPUTS = 3

Definition at line 40 of file channel_arbiter.py.

◆ PIPE_NUM_INPUTS

int channel_arbiter.PIPE_NUM_INPUTS = 6

Definition at line 41 of file channel_arbiter.py.

◆ s

channel_arbiter.s = System(bsp(Top), name="ChannelArbiterTest", output_directory=sys.argv[1])

Definition at line 422 of file channel_arbiter.py.

◆ THROUGHPUT_NUM_INPUTS

int channel_arbiter.THROUGHPUT_NUM_INPUTS = 4

Definition at line 46 of file channel_arbiter.py.

◆ THROUGHPUT_WINDOW

int channel_arbiter.THROUGHPUT_WINDOW = 1000

Definition at line 47 of file channel_arbiter.py.

◆ TOKEN_NUM_INPUTS

int channel_arbiter.TOKEN_NUM_INPUTS = 5

Definition at line 42 of file channel_arbiter.py.

◆ TOKENS_PER_INPUT

int channel_arbiter.TOKENS_PER_INPUT = 8

Definition at line 48 of file channel_arbiter.py.

◆ WIDE_NUM_INPUTS

int channel_arbiter.WIDE_NUM_INPUTS = 13

Definition at line 52 of file channel_arbiter.py.