def __init__(self, pspec):
self.pspec = pspec
self.addr_wid = pspec.addr_wid
- self.data_wid = pspec.reg_wid
- self.adr_lsbs = log2_int(pspec.reg_wid//8)
+ if isinstance(pspec.imem_reg_wid, int):
+ self.data_wid = pspec.imem_reg_wid
+ else:
+ self.data_wid = pspec.reg_wid
+ self.adr_lsbs = log2_int(self.data_wid//8)
self.ibus = Record(make_wb_layout(pspec))
bad_wid = pspec.addr_wid - self.adr_lsbs # TODO: is this correct?
comb += self.imem.f_valid_i.eq(1)
with m.Else():
# not busy: instruction fetched
- insn = self.imem.f_instr_o.word_select(cur_pc[2], 32)
+ f_instr_o = self.imem.f_instr_o
+ if f_instr_o.width == 32:
+ insn = f_instr_o
+ else:
+ insn = f_instr_o.word_select(cur_pc[2], 32)
comb += current_insn.eq(insn)
comb += core_ivalid_i.eq(1) # instruction is valid
comb += core_issue_i.eq(1) # and issued