diff --git a/pipelined/src/ifu/ifu.sv b/pipelined/src/ifu/ifu.sv index 2b9cfa44..377e5413 100644 --- a/pipelined/src/ifu/ifu.sv +++ b/pipelined/src/ifu/ifu.sv @@ -249,7 +249,7 @@ module ifu ( flopen #(`XLEN) fb(.clk, .en(IFUBusRead), .d(HRDATA), .q(AllInstrRawF[31:0])); busfsm #(LOGBWPL) busfsm( - .clk, .reset, .IgnoreRequest(ITLBMissF), .RW(NonIROMMemRWM), + .clk, .reset, .RW(NonIROMMemRWM & ~{ITLBMissF, ITLBMissF}), .BusAck(IFUBusAck), .BusInit(IFUBusInit), .CPUBusy, .BusStall, .BusWrite(), .BusRead(IFUBusRead), .HTRANS(IFUHTRANS), .BusCommitted()); diff --git a/pipelined/src/lsu/busfsm.sv b/pipelined/src/lsu/busfsm.sv index 2e2d9eda..6d8352f6 100644 --- a/pipelined/src/lsu/busfsm.sv +++ b/pipelined/src/lsu/busfsm.sv @@ -35,7 +35,6 @@ module busfsm #(parameter integer LOGWPL) (input logic clk, input logic reset, - input logic IgnoreRequest, input logic [1:0] RW, input logic BusAck, input logic BusInit, // This might be better as LSUBusLock, or to send this using BusAck. @@ -65,30 +64,29 @@ module busfsm #(parameter integer LOGWPL) always_comb begin case(BusCurrState) - STATE_BUS_READY: if(IgnoreRequest) BusNextState = STATE_BUS_READY; - else if(RW[0]) BusNextState = STATE_BUS_UNCACHED_WRITE; - else if(RW[1]) BusNextState = STATE_BUS_UNCACHED_READ; + STATE_BUS_READY: if(RW[0]) BusNextState = STATE_BUS_UNCACHED_WRITE; + else if(RW[1]) BusNextState = STATE_BUS_UNCACHED_READ; else BusNextState = STATE_BUS_READY; STATE_BUS_UNCACHED_WRITE: if(BusAck) BusNextState = STATE_BUS_UNCACHED_WRITE_DONE; - else BusNextState = STATE_BUS_UNCACHED_WRITE; + else BusNextState = STATE_BUS_UNCACHED_WRITE; STATE_BUS_UNCACHED_READ: if(BusAck) BusNextState = STATE_BUS_UNCACHED_READ_DONE; - else BusNextState = STATE_BUS_UNCACHED_READ; + else BusNextState = STATE_BUS_UNCACHED_READ; STATE_BUS_UNCACHED_WRITE_DONE: if(CPUBusy) BusNextState = STATE_BUS_CPU_BUSY; else BusNextState = STATE_BUS_READY; STATE_BUS_UNCACHED_READ_DONE: if(CPUBusy) BusNextState = STATE_BUS_CPU_BUSY; else BusNextState = STATE_BUS_READY; - STATE_BUS_CPU_BUSY: if(CPUBusy) BusNextState = STATE_BUS_CPU_BUSY; + STATE_BUS_CPU_BUSY: if(CPUBusy) BusNextState = STATE_BUS_CPU_BUSY; else BusNextState = STATE_BUS_READY; - default: BusNextState = STATE_BUS_READY; + default: BusNextState = STATE_BUS_READY; endcase end - assign BusStall = (BusCurrState == STATE_BUS_READY & ~IgnoreRequest & |RW) | + assign BusStall = (BusCurrState == STATE_BUS_READY & |RW) | (BusCurrState == STATE_BUS_UNCACHED_WRITE) | (BusCurrState == STATE_BUS_UNCACHED_READ); - assign BusWrite = (BusCurrState == STATE_BUS_READY & RW[0] & ~IgnoreRequest) | + assign BusWrite = (BusCurrState == STATE_BUS_READY & RW[0]) | (BusCurrState == STATE_BUS_UNCACHED_WRITE); - assign BusRead = (BusCurrState == STATE_BUS_READY & RW[1] & ~IgnoreRequest) | + assign BusRead = (BusCurrState == STATE_BUS_READY & RW[1]) | (BusCurrState == STATE_BUS_UNCACHED_READ); assign BusCommitted = BusCurrState != STATE_BUS_READY; diff --git a/pipelined/src/lsu/lsu.sv b/pipelined/src/lsu/lsu.sv index edc26f69..60768cec 100644 --- a/pipelined/src/lsu/lsu.sv +++ b/pipelined/src/lsu/lsu.sv @@ -269,7 +269,7 @@ module lsu ( assign LSUHWDATA = LSUWriteDataM[`XLEN-1:0]; busfsm #(LOGBWPL) busfsm( - .clk, .reset, .IgnoreRequest, .RW(LSURWM), + .clk, .reset, .RW(LSURWM & ~{IgnoreRequest, IgnoreRequest}), .BusAck(LSUBusAck), .BusInit(LSUBusInit), .CPUBusy, .BusStall, .BusWrite(LSUBusWrite), .BusRead(LSUBusRead), .HTRANS(LSUHTRANS), .BusCommitted(BusCommittedM));