1
0
Fork 0

sim: add docs to crossbar

This commit is contained in:
morgan 2024-11-08 12:59:54 +08:00
parent 0da7222262
commit a8cd8daa7b
1 changed files with 13 additions and 5 deletions

View File

@ -24,15 +24,19 @@ class EOP_Marker(Module):
self.sink.ack.eq(~self.source.stb | self.source.ack),
self.source.eop.eq(~self.sink.stb & last_stb),
]
class Streams_Crossbar(Module):
def __init__(self, downconn_sources, stream_sinks):
n_downconn = len(downconn_sources)
self.active_conn= C(n_downconn)
# TODO: change self.active_conns to signal and link it to rx_ready of GTX lanes
# # #
self.submodules.mux = mux = stream.Multiplexer(word_layout_dchar, n_downconn)
for i, c in enumerate(downconn_sources):
self.comb += [
c.source.connect(getattr(mux, "sink"+str(i)))
]
for i, downconn in enumerate(downconn_sources):
self.comb += downconn.source.connect(getattr(mux, "sink"+str(i)))
self.submodules.fsm = fsm = FSM(reset_state="WAIT_HEADER")
@ -54,11 +58,15 @@ class Streams_Crossbar(Module):
),
)
# Section 9.5.5 (CXP-001-2021)
# When Multiple connections are active, stream packets are transmitted in
# ascending order of Connection ID. And one connection shall be transmitting data at a time.
read_mask = Signal(max=n_downconn)
self.comb += mux.sel.eq(read_mask)
fsm.act(
"SWITCH_CONN",
If(read_mask == n_downconn - 1,
# assuming downconn_sources have ascending Connection ID
If(read_mask == self.active_conn - 1,
NextValue(read_mask, read_mask.reset),
).Else(
NextValue(read_mask, read_mask + 1),