# connect to LD/ST PortInterface.
comb += pi.is_ld_i.eq(op_is_ld & busy_o) # decoded-LD
comb += pi.is_st_i.eq(op_is_st & busy_o) # decoded-ST
+ comb += pi.is_dcbz_i.eq(op_is_dcbz & busy_o) # decoded-DCBZ
comb += pi.data_len.eq(oper_r.data_len) # data_len
# address: use sync to avoid long latency
sync += pi.addr.data.eq(addr_r) # EA from adder
self.is_ld_i = Signal(reset_less=True)
self.is_st_i = Signal(reset_less=True)
self.is_dcbz_i = Signal(reset_less=True)
- ## self.is_dcbz = self.is_dcbz_i # renamed signal hack
# LD/ST data length (TODO: other things may be needed)
self.data_len = Signal(4, reset_less=True)
# activate mode: only on "edge"
comb += ld_active.s.eq(rising_edge(m, lds)) # activate LD mode
comb += st_active.s.eq(rising_edge(m, sts)) # activate ST mode
- comb += dcbz_active.s.eq(rising_edge(m, dcbzs)) # activate ST mode
+ comb += dcbz_active.s.eq(rising_edge(m, dcbzs)) # activate DCBZ mode
# LD/ST requested activates "busy" (only if not already busy)
with m.If(self.pi.is_ld_i | self.pi.is_st_i):
# if now in "DCBZ" mode: wait for addr_ok, then send the address out
# to memory, acknowledge address, and send out LD data
with m.If(dcbz_active.q):
+ ##comb += Display("dcbz active")
self.set_dcbz_addr(m, pi.addr.data)
# if now in "ST" mode: likewise do the same but with "ST"
from soc.experiment.l0_cache import TstL0CacheBuffer
from soc.fu.ldst.pipe_data import LDSTPipeSpec
regspec = LDSTPipeSpec.regspec
- self.l0 = l0 = TstL0CacheBuffer(pspec)
+ self.l0 = l0 = TstL0CacheBuffer(pspec) #this is wrong, see setup_mmu
self.mmu = MMU()
pi = l0.l0.dports[0]
LDSTCompUnit.__init__(self, pi, regspec, 4)