diff --git a/pipelined/src/ifu/ifu.sv b/pipelined/src/ifu/ifu.sv index d44e61f3c..f53669522 100644 --- a/pipelined/src/ifu/ifu.sv +++ b/pipelined/src/ifu/ifu.sv @@ -193,7 +193,7 @@ module ifu ( .LSUBusHRDATA(IFUBusHRDATA), .LSUBusAck(IFUBusAck), .LSUBusWrite(), .LSUBusRead(IFUBusRead), .LSUBusSize(), .LSUFunct3M(3'b010), .LSUBusAdr(IFUBusAdr), .DCacheBusAdr(ICacheBusAdr), - .WordCount(), .SelUncachedAdr(), + .WordCount(), .SelUncachedAdr(), .LSUBusHWDATA(), .ReadDataLineSetsM(), .DCacheFetchLine(ICacheFetchLine), .DCacheWriteLine(1'b0), .DCacheBusAck(ICacheBusAck), .DCacheMemWriteData(ICacheMemWriteData), .LSUPAdrM(PCPF), diff --git a/pipelined/src/lsu/busdp.sv b/pipelined/src/lsu/busdp.sv index dea671103..d987c1a1a 100644 --- a/pipelined/src/lsu/busdp.sv +++ b/pipelined/src/lsu/busdp.sv @@ -34,7 +34,7 @@ `include "wally-config.vh" -module busdp #(parameter WORDSPERLINE, LINELEN, WORDLEN, LOGWPL) +module busdp #(parameter WORDSPERLINE, LINELEN, WORDLEN, LOGWPL, LSU=0) ( input logic clk, reset, // bus interface @@ -42,7 +42,7 @@ module busdp #(parameter WORDSPERLINE, LINELEN, WORDLEN, LOGWPL) input logic LSUBusAck, output logic LSUBusWrite, output logic LSUBusRead, -// output logic [`XLEN-1:0] LSUBusHWDATA, + output logic [`XLEN-1:0] LSUBusHWDATA, output logic [2:0] LSUBusSize, input logic [2:0] LSUFunct3M, output logic [`PA_BITS-1:0] LSUBusAdr, @@ -85,6 +85,11 @@ module busdp #(parameter WORDSPERLINE, LINELEN, WORDLEN, LOGWPL) mux2 #(`PA_BITS) localadrmux(DCacheBusAdr, LSUPAdrM, SelUncachedAdr, LocalLSUBusAdr); assign LSUBusAdr = ({{`PA_BITS-LOGWPL{1'b0}}, WordCount} << $clog2(`XLEN/8)) + LocalLSUBusAdr; //assign PreLSUBusHWDATA = ReadDataWordM;// ReadDataLineSetsM[WordCount]; // only in lsu, not ifu + // this mux is only used in the LSU's bus. + if(LSU == 1) mux2 #(`XLEN) lsubushwdatamux( .d0(ReadDataWordM), .d1(FinalAMOWriteDataM), + .s(SelUncachedAdr), .y(LSUBusHWDATA)); + else assign LSUBusHWDATA = '0; + mux2 #(3) lsubussizemux( .d0(`XLEN == 32 ? 3'b010 : 3'b011), .d1(LSUFunct3M), .s(SelUncachedAdr), .y(LSUBusSize)); mux2 #(WORDLEN) UnCachedDataMux( diff --git a/pipelined/src/lsu/lsu.sv b/pipelined/src/lsu/lsu.sv index dcaf683f1..b625a4194 100644 --- a/pipelined/src/lsu/lsu.sv +++ b/pipelined/src/lsu/lsu.sv @@ -199,10 +199,10 @@ module lsu ( logic [`XLEN-1:0] ReadDataLineSetsM [WORDSPERLINE-1:0]; logic [`PA_BITS-1-`XLEN/8-LOGWPL:0] Pad; - busdp #(WORDSPERLINE, LINELEN, `XLEN, LOGWPL) busdp( + busdp #(WORDSPERLINE, LINELEN, `XLEN, LOGWPL, 1) busdp( .clk, .reset, - .LSUBusHRDATA, .LSUBusAck, .LSUBusWrite, .LSUBusRead, .LSUBusSize, - .WordCount, .SelUncachedAdr, + .LSUBusHRDATA, .LSUBusHWDATA, .LSUBusAck, .LSUBusWrite, .LSUBusRead, .LSUBusSize, + .WordCount, .SelUncachedAdr, .LSUFunct3M, .LSUBusAdr, .DCacheBusAdr, .ReadDataLineSetsM, .DCacheFetchLine, .DCacheWriteLine, .DCacheBusAck, .DCacheMemWriteData, .LSUPAdrM, .FinalAMOWriteDataM, .ReadDataWordM, .ReadDataWordMuxM, .IgnoreRequest, .LSURWM, .CPUBusy, .CacheableM, @@ -210,8 +210,6 @@ module lsu ( assign Pad = '0; assign WordOffsetAddr = LSUBusWrite ? ({{`PA_BITS-LOGWPL{1'b0}}, WordCount} << $clog2(`XLEN/8)) : LSUPAdrM; - mux2 #(`XLEN) lsubushwdatamux( - .d0(ReadDataWordM), .d1(FinalAMOWriteDataM), .s(SelUncachedAdr), .y(LSUBusHWDATA)); subcachelineread #(LINELEN, `XLEN, `XLEN) subcachelineread(