trp = self._trp
trfc = self._trfc
- tl = Timeline([
+ m.submodules.timeline = tl = Timeline([
# Precharge All
(0, [
self.a.eq(2**10),
self.done.eq(1),
]),
])
- m.submodules += tl
m.d.comb += tl.trigger.eq(self.start)
return m
def elaborate(self, platform):
m = Module()
- executer = RefreshExecuter(self._abits, self._babits, self._trp, self._trfc)
- m.submodules += executer
+ m.submodules.executer = executer = RefreshExecuter(self._abits, self._babits, self._trp, self._trfc)
m.d.comb += [
self.a.eq(executer.a),
self.ba.eq(executer.ba),
trp = self._trp
tzqcs = self._tzqcs
- tl = Timeline([
+ m.submodules.timeline = tl = Timeline([
# Precharge All
(0, [
self.a.eq(2**10),
self.done.eq(1)
]),
])
- m.submodules += tl
m.d.comb += tl.trigger.eq(self.start)
return m
m.submodules.sequencer = sequencer
if settings.timing.tZQCS is not None:
- wants_zqcs = Signal()
# ZQCS Timer ---------------------------------------------------------------------------
zqcs_timer = RefreshTimer(int(self._clk_freq/self._zqcs_freq))
m.submodules.zqcs_timer = zqcs_timer
- m.d.comb += wants_zqcs.eq(zqcs_timer.done)
# ZQCS Executer ------------------------------------------------------------------------
zqcs_executer = ZQCSExecuter(self._abits, self._babits, settings.timing.tRP, settings.timing.tZQCS)
if settings.timing.tZQCS is None:
with m.State("Do-Refresh"):
- m.d.comb += self.cmd.valid.eq(1)
+ m.d.comb += self.cmd.valid.eq(~sequencer.done)
with m.If(sequencer.done):
- m.d.comb += [
- self.cmd.valid.eq(0),
- self.cmd.last.eq(1),
- ]
+ m.d.comb += self.cmd.last.eq(1)
m.next = "Idle"
else:
with m.State("Do-Refresh"):
- m.d.comb += self.cmd.valid.eq(1)
+ m.d.comb += self.cmd.valid.eq(zqcs_timer.done & ~sequencer.done)
with m.If(sequencer.done):
- with m.If(wants_zqcs):
+ with m.If(zqcs_timer.done):
m.d.comb += zqcs_executer.start.eq(1)
m.next = "Do-Zqcs"
with m.Else():
- m.d.comb += [
- self.cmd.valid.eq(0),
- self.cmd.last.eq(1),
- ]
+ m.d.comb += self.cmd.last.eq(1)
m.next = "Idle"
with m.State("Do-Zqcs"):
- m.d.comb += self.cmd.valid.eq(1)
+ m.d.comb += self.cmd.valid.eq(~zqcs_executer.done)
with m.If(zqcs_executer.done):
- m.d.comb += [
- self.cmd.valid.eq(0),
- self.cmd.last.eq(1),
- ]
+ m.d.comb += self.cmd.last.eq(1)
m.next = "Idle"
# Connect sequencer/executer outputs to cmd