class CoreOutput:
def __init__(self):
# start/stop and terminated signalling
- self.core_terminate_o = Signal(reset=0) # indicates stopped
+ self.core_terminate_o = Signal() # indicates stopped
+ self.busy_o = Signal(name="corebusy_o") # at least one ALU busy
self.exc_happened = Signal() # exception happened
def eq(self, i):
self.core_terminate_o.eq(i.core_terminate_o)
+ self.busy_o.eq(i.busy_o)
self.exc_happened.eq(i.exc_happened)
fus = self.fus.fus
# indicate if core is busy
- busy_o = Signal(name="corebusy_o", reset_less=True)
+ busy_o = self.o.busy_o
# enable/busy-signals for each FU, get one bit for each FU (by name)
fu_enable = Signal(len(fus), reset_less=True)
# indicator. BUT, of course, when there is no instruction
# we must ignore the fu_found flag, otherwise o_ready will never
# be set when everything is idle
- comb += self.p.o_ready.eq(~busy_o & (fu_found | ~self.p.i_valid))
+ comb += self.p.o_ready.eq(fu_found | ~self.p.i_valid)
# return both the function unit "enable" dict as well as the "busy".
# the "busy-or-issued" can be passed in to the Read/Write port
pdecode2 = self.pdecode2
# temporaries
- core_busy_o = ~core.p.o_ready # core is busy
+ core_busy_o = ~core.p.o_ready | core.n.o_data.busy_o # core is busy
core_ivalid_i = core.p.i_valid # instruction is valid
with m.FSM(name="exec_fsm"):
comb += dbg_rst.eq(ResetSignal())
# busy/halted signals from core
- core_busy_o = ~core.p.o_ready # core is busy
+ core_busy_o = ~core.p.o_ready | core.n.o_data.busy_o # core is busy
comb += self.busy_o.eq(core_busy_o)
comb += pdecode2.dec.bigendian.eq(self.core_bigendian_i)