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, wide_fanin=None, throttle=False)
 
 ListProducer (int src_id, int length)
 
 ChannelArbiterListTestMod (bool pipelined_scheduler, wide_fanin=None)
 
 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
 
int WIDE_FANIN_NUM_INPUTS = 17
 
 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 316 of file channel_arbiter.py.

References wrap().

Referenced by ChannelArbiterThroughputTestMod().

◆ ChannelArbiterListTestMod()

channel_arbiter.ChannelArbiterListTestMod ( bool  pipelined_scheduler,
  wide_fanin = None 
)
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 204 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 365 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,
  wide_fanin = None,
  throttle = 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. `throttle` drains the output one beat in four
through a minimal output FIFO, so the credit counter runs down to zero.

Definition at line 64 of file channel_arbiter.py.

References wrap().

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 110 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 238 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 462 of file channel_arbiter.py.

◆ Flit

channel_arbiter.Flit = Window.default_of(ListInto)

Definition at line 60 of file channel_arbiter.py.

◆ FlitLowered

channel_arbiter.FlitLowered = Flit.lowered_type

Definition at line 61 of file channel_arbiter.py.

Referenced by ListProducer().

◆ ListInto

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

Definition at line 59 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 463 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_FANIN_NUM_INPUTS

int channel_arbiter.WIDE_FANIN_NUM_INPUTS = 17

Definition at line 54 of file channel_arbiter.py.

◆ WIDE_NUM_INPUTS

int channel_arbiter.WIDE_NUM_INPUTS = 13

Definition at line 52 of file channel_arbiter.py.