soc/cores/hyperbus: Avoid waiting for clk_phase in IDLE state to reduce latency.
This commit is contained in:
parent
bfe000150c
commit
a30651e44e
|
@ -133,12 +133,20 @@ class HyperRAM(LiteXModule):
|
||||||
self.burst_timer = burst_timer = WaitTimer(sys_clk_freq * self.tCSM)
|
self.burst_timer = burst_timer = WaitTimer(sys_clk_freq * self.tCSM)
|
||||||
|
|
||||||
# Clock Generation (sys_clk/4) -------------------------------------------------------------
|
# Clock Generation (sys_clk/4) -------------------------------------------------------------
|
||||||
self.sync += clk_phase.eq(clk_phase + 1)
|
self.sync += [
|
||||||
|
If(cs,
|
||||||
|
# Increment Clk Phase on CS.
|
||||||
|
clk_phase.eq(clk_phase + 1)
|
||||||
|
).Else(
|
||||||
|
# Else set Clk Phase to default value.
|
||||||
|
clk_phase.eq(0b01)
|
||||||
|
)
|
||||||
|
]
|
||||||
cases = {
|
cases = {
|
||||||
0 : clk.eq(0), # 0°
|
0b00 : clk.eq(0), # 0°
|
||||||
1 : clk.eq(cs), # 90° / Set Clk.
|
0b01 : clk.eq(cs), # 90° / Set Clk.
|
||||||
2 : clk.eq(cs), # 180°
|
0b10 : clk.eq(cs), # 180°
|
||||||
3 : clk.eq(0), # 270° / Clr Clk.
|
0b11 : clk.eq(0), # 270° / Clr Clk.
|
||||||
}
|
}
|
||||||
self.comb += Case(clk_phase, cases)
|
self.comb += Case(clk_phase, cases)
|
||||||
|
|
||||||
|
@ -237,11 +245,9 @@ class HyperRAM(LiteXModule):
|
||||||
self.fsm = fsm = FSM(reset_state="IDLE")
|
self.fsm = fsm = FSM(reset_state="IDLE")
|
||||||
fsm.act("IDLE",
|
fsm.act("IDLE",
|
||||||
NextValue(first, 1),
|
NextValue(first, 1),
|
||||||
If(clk_phase == 0,
|
If((bus.cyc & bus.stb) | reg_write_req | reg_read_req,
|
||||||
If((bus.cyc & bus.stb) | reg_write_req | reg_read_req,
|
NextValue(sr, ca),
|
||||||
NextValue(sr, ca),
|
NextState("SEND-COMMAND-ADDRESS")
|
||||||
NextState("SEND-COMMAND-ADDRESS")
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
fsm.act("SEND-COMMAND-ADDRESS",
|
fsm.act("SEND-COMMAND-ADDRESS",
|
||||||
|
|
Loading…
Reference in New Issue