2
0
mirror of https://github.com/m-labs/artiq.git synced 2025-02-02 22:00:20 +08:00

analyzer: revert lookahead buffer

CTI can be inferred by the last signal.
This commit is contained in:
occheung 2025-01-10 16:08:30 +08:00
parent 7a5e5e4ab4
commit 41933b8849

View File

@ -151,56 +151,25 @@ class DMAWriter(Module, AutoCSR):
alignment_bits=data_alignment)
self.byte_count = CSRStatus(64) # only read when shut down
layout = [
("data", dw),
("valid_token_count", bits_for(messages_per_dw))
]
self.sink = stream.Endpoint(layout)
self.done = Signal()
self.sink = stream.Endpoint(
[("data", dw),
("valid_token_count", bits_for(messages_per_dw))])
# # #
lookahead_buf = stream.Endpoint(layout)
buffer_open = Signal()
self.comb += [
buffer_open.eq(~lookahead_buf.stb | lookahead_buf.ack),
self.sink.ack.eq(buffer_open),
]
self.sync += [
If(buffer_open,
self.sink.connect(lookahead_buf, omit={"ack"}),
),
]
# RULE 4.30: Set End-Of-Burst to signal the end of the current burst.
last = Signal()
stale_last = Signal()
self.comb += last.eq(lookahead_buf.eop | (lookahead_buf.stb & ~self.sink.stb))
self.sync += \
If(~buffer_open,
If(last, stale_last.eq(1)),
).Else(
stale_last.eq(0)
)
# Write operations completes once EoP is transmitted
self.comb += self.done.eq(
lookahead_buf.stb & lookahead_buf.ack & lookahead_buf.eop)
self.comb += [
membus.cyc.eq(lookahead_buf.stb),
membus.stb.eq(lookahead_buf.stb),
membus.cti.eq(Mux(last | stale_last, 0b111, 0b010)),
lookahead_buf.ack.eq(membus.ack),
membus.cyc.eq(self.sink.stb),
membus.stb.eq(self.sink.stb),
membus.cti.eq(Mux(self.sink.last, 0b111, 0b010)),
self.sink.ack.eq(membus.ack),
membus.we.eq(1),
membus.dat_w.eq(dma.convert_signal(lookahead_buf.data, cpu_dw//8))
membus.dat_w.eq(dma.convert_signal(self.sink.data, cpu_dw//8))
]
if messages_per_dw > 1:
for i in range(dw//8):
self.comb += membus.sel[i].eq(
lookahead_buf.valid_token_count >= i//(256//8))
self.sink.valid_token_count >= i//(256//8))
else:
self.comb += membus.sel.eq(2**(dw//8)-1)
@ -222,7 +191,7 @@ class DMAWriter(Module, AutoCSR):
self.sync += [
If(self.reset.re, message_count.eq(0)),
If(membus.ack, message_count.eq(
message_count + lookahead_buf.valid_token_count))
message_count + self.sink.valid_token_count))
]
@ -247,8 +216,8 @@ class Analyzer(Module, AutoCSR):
enable_r.eq(self.enable.storage),
If(self.enable.storage & ~enable_r,
self.busy.status.eq(1)),
If(self.dma.done,
self.busy.status.eq(0)),
If(self.dma.sink.stb & self.dma.sink.ack & self.dma.sink.eop,
self.busy.status.eq(0))
]
self.comb += [