#m.d.comb += self.l_in.valid.eq(1)
#m.d.comb += self.d_in.load.eq(0)
#m.d.comb += self.l_in.load.eq(0)
+ # set phys addr on both units
m.d.comb += self.d_in.addr.eq(addr)
m.d.comb += self.l_in.addr.eq(addr)
# TODO set mask
data = self.d_out.data
return data, ld_ok
+ """
+ if d_in.error = '1' then
+ if d_in.cache_paradox = '1' then
+ -- signal an interrupt straight away
+ exception := '1';
+ dsisr(63 - 38) := not r2.req.load;
+ -- XXX there is no architected bit for this
+ -- (probably should be a machine check in fact)
+ dsisr(63 - 35) := d_in.cache_paradox;
+ else
+ -- Look up the translation for TLB miss
+ -- and also for permission error and RC error
+ -- in case the PTE has been updated.
+ mmureq := '1';
+ v.state := MMU_LOOKUP;
+ v.stage1_en := '0';
+ end if;
+ end if;
+ """
+
def elaborate(self, platform):
m = super().elaborate(platform)