mirror of
https://github.com/openhwgroup/cvw
synced 2025-02-11 06:05:49 +00:00
Renamed DCache to Cache in busdp/busfsm signal interface
This commit is contained in:
parent
3500286803
commit
ae0702d129
@ -205,10 +205,10 @@ module ifu (
|
|||||||
busdp(.clk, .reset,
|
busdp(.clk, .reset,
|
||||||
.LSUBusHRDATA(IFUBusHRDATA), .LSUBusAck(IFUBusAck), .LSUBusInit(IFUBusInit), .LSUBusWrite(), .SelLSUBusWord(),
|
.LSUBusHRDATA(IFUBusHRDATA), .LSUBusAck(IFUBusAck), .LSUBusInit(IFUBusInit), .LSUBusWrite(), .SelLSUBusWord(),
|
||||||
.LSUBusRead(IFUBusRead), .LSUBusSize(), .LSUBurstType(IFUBurstType), .LSUTransType(IFUTransType), .LSUTransComplete(IFUTransComplete),
|
.LSUBusRead(IFUBusRead), .LSUBusSize(), .LSUBurstType(IFUBurstType), .LSUTransType(IFUTransType), .LSUTransComplete(IFUTransComplete),
|
||||||
.LSUFunct3M(3'b010), .LSUBusAdr(IFUBusAdr), .DCacheBusAdr(ICacheBusAdr),
|
.LSUFunct3M(3'b010), .LSUBusAdr(IFUBusAdr), .CacheBusAdr(ICacheBusAdr),
|
||||||
.WordCount(),
|
.WordCount(),
|
||||||
.DCacheFetchLine(ICacheFetchLine),
|
.CacheFetchLine(ICacheFetchLine),
|
||||||
.DCacheWriteLine(1'b0), .DCacheBusAck(ICacheBusAck),
|
.CacheWriteLine(1'b0), .CacheBusAck(ICacheBusAck),
|
||||||
.DLSUBusBuffer(ILSUBusBuffer), .LSUPAdrM(PCPF),
|
.DLSUBusBuffer(ILSUBusBuffer), .LSUPAdrM(PCPF),
|
||||||
.SelUncachedAdr,
|
.SelUncachedAdr,
|
||||||
.IgnoreRequest(ITLBMissF), .LSURWM(2'b10), .CPUBusy, .CacheableM(CacheableF),
|
.IgnoreRequest(ITLBMissF), .LSURWM(2'b10), .CPUBusy, .CacheableM(CacheableF),
|
||||||
|
@ -37,6 +37,7 @@
|
|||||||
module busdp #(parameter WORDSPERLINE, LINELEN, LOGWPL, CACHE_ENABLED)
|
module busdp #(parameter WORDSPERLINE, LINELEN, LOGWPL, CACHE_ENABLED)
|
||||||
(
|
(
|
||||||
input logic clk, reset,
|
input logic clk, reset,
|
||||||
|
|
||||||
// bus interface
|
// bus interface
|
||||||
input logic [`XLEN-1:0] LSUBusHRDATA,
|
input logic [`XLEN-1:0] LSUBusHRDATA,
|
||||||
input logic LSUBusAck,
|
input logic LSUBusAck,
|
||||||
@ -50,15 +51,16 @@ module busdp #(parameter WORDSPERLINE, LINELEN, LOGWPL, CACHE_ENABLED)
|
|||||||
input logic [2:0] LSUFunct3M,
|
input logic [2:0] LSUFunct3M,
|
||||||
output logic [`PA_BITS-1:0] LSUBusAdr, // ** change name to HADDR to make ahb lite.
|
output logic [`PA_BITS-1:0] LSUBusAdr, // ** change name to HADDR to make ahb lite.
|
||||||
output logic [LOGWPL-1:0] WordCount,
|
output logic [LOGWPL-1:0] WordCount,
|
||||||
|
|
||||||
// cache interface.
|
// cache interface.
|
||||||
input logic [`PA_BITS-1:0] DCacheBusAdr,
|
input logic [`PA_BITS-1:0] CacheBusAdr,
|
||||||
input logic DCacheFetchLine,
|
input logic CacheFetchLine,
|
||||||
input logic DCacheWriteLine,
|
input logic CacheWriteLine,
|
||||||
output logic DCacheBusAck,
|
output logic CacheBusAck,
|
||||||
output logic [LINELEN-1:0] DLSUBusBuffer, //*** change name.
|
output logic [LINELEN-1:0] DLSUBusBuffer, //*** change name.
|
||||||
output logic SelUncachedAdr,
|
output logic SelUncachedAdr,
|
||||||
|
|
||||||
// lsu interface
|
// lsu/ifu interface
|
||||||
input logic [`PA_BITS-1:0] LSUPAdrM,
|
input logic [`PA_BITS-1:0] LSUPAdrM,
|
||||||
input logic IgnoreRequest,
|
input logic IgnoreRequest,
|
||||||
input logic [1:0] LSURWM,
|
input logic [1:0] LSURWM,
|
||||||
@ -80,14 +82,14 @@ module busdp #(parameter WORDSPERLINE, LINELEN, LOGWPL, CACHE_ENABLED)
|
|||||||
flopen #(`XLEN) fb(.clk, .en(CaptureWord[index]), .d(LSUBusHRDATA),
|
flopen #(`XLEN) fb(.clk, .en(CaptureWord[index]), .d(LSUBusHRDATA),
|
||||||
.q(DLSUBusBuffer[(index+1)*`XLEN-1:index*`XLEN]));
|
.q(DLSUBusBuffer[(index+1)*`XLEN-1:index*`XLEN]));
|
||||||
end
|
end
|
||||||
mux2 #(`PA_BITS) localadrmux(DCacheBusAdr, LSUPAdrM, SelUncachedAdr, LocalLSUBusAdr);
|
mux2 #(`PA_BITS) localadrmux(CacheBusAdr, LSUPAdrM, SelUncachedAdr, LocalLSUBusAdr);
|
||||||
assign LSUBusAdr = ({{`PA_BITS-LOGWPL{1'b0}}, WordCount} << $clog2(`XLEN/8)) + LocalLSUBusAdr;
|
assign LSUBusAdr = ({{`PA_BITS-LOGWPL{1'b0}}, WordCount} << $clog2(`XLEN/8)) + LocalLSUBusAdr;
|
||||||
mux2 #(3) lsubussizemux(.d0(`XLEN == 32 ? 3'b010 : 3'b011), .d1(LSUFunct3M),
|
mux2 #(3) lsubussizemux(.d0(`XLEN == 32 ? 3'b010 : 3'b011), .d1(LSUFunct3M),
|
||||||
.s(SelUncachedAdr), .y(LSUBusSize));
|
.s(SelUncachedAdr), .y(LSUBusSize));
|
||||||
|
|
||||||
busfsm #(WordCountThreshold, LOGWPL, CACHE_ENABLED) busfsm(
|
busfsm #(WordCountThreshold, LOGWPL, CACHE_ENABLED) busfsm(
|
||||||
.clk, .reset, .IgnoreRequest, .LSURWM, .DCacheFetchLine, .DCacheWriteLine,
|
.clk, .reset, .IgnoreRequest, .LSURWM, .CacheFetchLine, .CacheWriteLine,
|
||||||
.LSUBusAck, .LSUBusInit, .CPUBusy, .CacheableM, .BusStall, .LSUBusWrite, .SelLSUBusWord, .LSUBusRead,
|
.LSUBusAck, .LSUBusInit, .CPUBusy, .CacheableM, .BusStall, .LSUBusWrite, .SelLSUBusWord, .LSUBusRead,
|
||||||
.BufferCaptureEn,
|
.BufferCaptureEn,
|
||||||
.LSUBurstType, .LSUTransType, .LSUTransComplete, .DCacheBusAck, .BusCommittedM, .SelUncachedAdr, .WordCount, .WordCountDelayed);
|
.LSUBurstType, .LSUTransType, .LSUTransComplete, .CacheBusAck, .BusCommittedM, .SelUncachedAdr, .WordCount, .WordCountDelayed);
|
||||||
endmodule
|
endmodule
|
||||||
|
@ -38,8 +38,8 @@ module busfsm #(parameter integer WordCountThreshold,
|
|||||||
|
|
||||||
input logic IgnoreRequest,
|
input logic IgnoreRequest,
|
||||||
input logic [1:0] LSURWM,
|
input logic [1:0] LSURWM,
|
||||||
input logic DCacheFetchLine,
|
input logic CacheFetchLine,
|
||||||
input logic DCacheWriteLine,
|
input logic CacheWriteLine,
|
||||||
input logic LSUBusAck,
|
input logic LSUBusAck,
|
||||||
input logic LSUBusInit, // This might be better as LSUBusLock, or to send this using LSUBusAck.
|
input logic LSUBusInit, // This might be better as LSUBusLock, or to send this using LSUBusAck.
|
||||||
input logic CPUBusy,
|
input logic CPUBusy,
|
||||||
@ -52,7 +52,7 @@ module busfsm #(parameter integer WordCountThreshold,
|
|||||||
output logic [2:0] LSUBurstType,
|
output logic [2:0] LSUBurstType,
|
||||||
output logic LSUTransComplete,
|
output logic LSUTransComplete,
|
||||||
output logic [1:0] LSUTransType,
|
output logic [1:0] LSUTransType,
|
||||||
output logic DCacheBusAck,
|
output logic CacheBusAck,
|
||||||
output logic BusCommittedM,
|
output logic BusCommittedM,
|
||||||
output logic SelUncachedAdr,
|
output logic SelUncachedAdr,
|
||||||
output logic BufferCaptureEn,
|
output logic BufferCaptureEn,
|
||||||
@ -116,8 +116,8 @@ module busfsm #(parameter integer WordCountThreshold,
|
|||||||
STATE_BUS_READY: if(IgnoreRequest) BusNextState = STATE_BUS_READY;
|
STATE_BUS_READY: if(IgnoreRequest) BusNextState = STATE_BUS_READY;
|
||||||
else if(LSURWM[0] & UnCachedAccess) BusNextState = STATE_BUS_UNCACHED_WRITE;
|
else if(LSURWM[0] & UnCachedAccess) BusNextState = STATE_BUS_UNCACHED_WRITE;
|
||||||
else if(LSURWM[1] & UnCachedAccess) BusNextState = STATE_BUS_UNCACHED_READ;
|
else if(LSURWM[1] & UnCachedAccess) BusNextState = STATE_BUS_UNCACHED_READ;
|
||||||
else if(DCacheFetchLine) BusNextState = STATE_BUS_FETCH;
|
else if(CacheFetchLine) BusNextState = STATE_BUS_FETCH;
|
||||||
else if(DCacheWriteLine) BusNextState = STATE_BUS_WRITE;
|
else if(CacheWriteLine) BusNextState = STATE_BUS_WRITE;
|
||||||
else BusNextState = STATE_BUS_READY;
|
else BusNextState = STATE_BUS_READY;
|
||||||
STATE_BUS_UNCACHED_WRITE: if(LSUBusAck) BusNextState = STATE_BUS_UNCACHED_WRITE_DONE;
|
STATE_BUS_UNCACHED_WRITE: if(LSUBusAck) BusNextState = STATE_BUS_UNCACHED_WRITE_DONE;
|
||||||
else BusNextState = STATE_BUS_UNCACHED_WRITE;
|
else BusNextState = STATE_BUS_UNCACHED_WRITE;
|
||||||
@ -130,13 +130,13 @@ module busfsm #(parameter integer WordCountThreshold,
|
|||||||
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;
|
else BusNextState = STATE_BUS_READY;
|
||||||
STATE_BUS_FETCH: if (WordCountFlag & LSUBusAck) begin
|
STATE_BUS_FETCH: if (WordCountFlag & LSUBusAck) begin
|
||||||
if (DCacheFetchLine) BusNextState = STATE_BUS_FETCH;
|
if (CacheFetchLine) BusNextState = STATE_BUS_FETCH;
|
||||||
else if (DCacheWriteLine) BusNextState = STATE_BUS_WRITE;
|
else if (CacheWriteLine) BusNextState = STATE_BUS_WRITE;
|
||||||
else BusNextState = STATE_BUS_READY;
|
else BusNextState = STATE_BUS_READY;
|
||||||
end else BusNextState = STATE_BUS_FETCH;
|
end else BusNextState = STATE_BUS_FETCH;
|
||||||
STATE_BUS_WRITE: if(WordCountFlag & LSUBusAck) begin
|
STATE_BUS_WRITE: if(WordCountFlag & LSUBusAck) begin
|
||||||
if (DCacheFetchLine) BusNextState = STATE_BUS_FETCH;
|
if (CacheFetchLine) BusNextState = STATE_BUS_FETCH;
|
||||||
else if (DCacheWriteLine) BusNextState = STATE_BUS_WRITE;
|
else if (CacheWriteLine) BusNextState = STATE_BUS_WRITE;
|
||||||
else BusNextState = STATE_BUS_READY;
|
else BusNextState = STATE_BUS_READY;
|
||||||
end else BusNextState = STATE_BUS_WRITE;
|
end else BusNextState = STATE_BUS_WRITE;
|
||||||
default: BusNextState = STATE_BUS_READY;
|
default: BusNextState = STATE_BUS_READY;
|
||||||
@ -158,9 +158,9 @@ module busfsm #(parameter integer WordCountThreshold,
|
|||||||
// Use SEQ if not doing first word, NONSEQ if doing the first read/write, and IDLE if finishing up.
|
// Use SEQ if not doing first word, NONSEQ if doing the first read/write, and IDLE if finishing up.
|
||||||
assign LSUTransType = (|WordCount) & ~UnCachedRW ? AHB_SEQ : (LSUBusRead | LSUBusWrite) & (~LSUTransComplete) ? AHB_NONSEQ : AHB_IDLE;
|
assign LSUTransType = (|WordCount) & ~UnCachedRW ? AHB_SEQ : (LSUBusRead | LSUBusWrite) & (~LSUTransComplete) ? AHB_NONSEQ : AHB_IDLE;
|
||||||
// Reset if we aren't initiating a transaction or if we are finishing a transaction.
|
// Reset if we aren't initiating a transaction or if we are finishing a transaction.
|
||||||
assign CntReset = BusCurrState == STATE_BUS_READY & ~(DCacheFetchLine | DCacheWriteLine) | LSUTransComplete;
|
assign CntReset = BusCurrState == STATE_BUS_READY & ~(CacheFetchLine | CacheWriteLine) | LSUTransComplete;
|
||||||
|
|
||||||
assign BusStall = (BusCurrState == STATE_BUS_READY & ~IgnoreRequest & ((UnCachedAccess & (|LSURWM)) | DCacheFetchLine | DCacheWriteLine)) |
|
assign BusStall = (BusCurrState == STATE_BUS_READY & ~IgnoreRequest & ((UnCachedAccess & (|LSURWM)) | CacheFetchLine | CacheWriteLine)) |
|
||||||
(BusCurrState == STATE_BUS_UNCACHED_WRITE) |
|
(BusCurrState == STATE_BUS_UNCACHED_WRITE) |
|
||||||
(BusCurrState == STATE_BUS_UNCACHED_READ) |
|
(BusCurrState == STATE_BUS_UNCACHED_READ) |
|
||||||
(BusCurrState == STATE_BUS_FETCH) |
|
(BusCurrState == STATE_BUS_FETCH) |
|
||||||
@ -174,13 +174,13 @@ module busfsm #(parameter integer WordCountThreshold,
|
|||||||
|
|
||||||
assign UnCachedLSUBusRead = (BusCurrState == STATE_BUS_READY & UnCachedAccess & LSURWM[1] & ~IgnoreRequest) |
|
assign UnCachedLSUBusRead = (BusCurrState == STATE_BUS_READY & UnCachedAccess & LSURWM[1] & ~IgnoreRequest) |
|
||||||
(BusCurrState == STATE_BUS_UNCACHED_READ);
|
(BusCurrState == STATE_BUS_UNCACHED_READ);
|
||||||
assign LSUBusRead = UnCachedLSUBusRead | (BusCurrState == STATE_BUS_FETCH & ~(WordCountFlag)) | (BusCurrState == STATE_BUS_READY & DCacheFetchLine);
|
assign LSUBusRead = UnCachedLSUBusRead | (BusCurrState == STATE_BUS_FETCH & ~(WordCountFlag)) | (BusCurrState == STATE_BUS_READY & CacheFetchLine);
|
||||||
assign BufferCaptureEn = UnCachedLSUBusRead | BusCurrState == STATE_BUS_FETCH;
|
assign BufferCaptureEn = UnCachedLSUBusRead | BusCurrState == STATE_BUS_FETCH;
|
||||||
|
|
||||||
// Makes bus only do uncached reads/writes when we actually do uncached reads/writes. Needed because CacheableM is 0 when flushing cache.
|
// Makes bus only do uncached reads/writes when we actually do uncached reads/writes. Needed because CacheableM is 0 when flushing cache.
|
||||||
assign UnCachedRW = UnCachedLSUBusWrite | UnCachedLSUBusRead;
|
assign UnCachedRW = UnCachedLSUBusWrite | UnCachedLSUBusRead;
|
||||||
|
|
||||||
assign DCacheBusAck = (BusCurrState == STATE_BUS_FETCH & WordCountFlag & LSUBusAck) |
|
assign CacheBusAck = (BusCurrState == STATE_BUS_FETCH & WordCountFlag & LSUBusAck) |
|
||||||
(BusCurrState == STATE_BUS_WRITE & WordCountFlag & LSUBusAck);
|
(BusCurrState == STATE_BUS_WRITE & WordCountFlag & LSUBusAck);
|
||||||
assign BusCommittedM = BusCurrState != STATE_BUS_READY;
|
assign BusCommittedM = BusCurrState != STATE_BUS_READY;
|
||||||
assign SelUncachedAdr = (BusCurrState == STATE_BUS_READY & (|LSURWM & UnCachedAccess)) |
|
assign SelUncachedAdr = (BusCurrState == STATE_BUS_READY & (|LSURWM & UnCachedAccess)) |
|
||||||
@ -188,5 +188,5 @@ module busfsm #(parameter integer WordCountThreshold,
|
|||||||
BusCurrState == STATE_BUS_UNCACHED_READ_DONE |
|
BusCurrState == STATE_BUS_UNCACHED_READ_DONE |
|
||||||
BusCurrState == STATE_BUS_UNCACHED_WRITE |
|
BusCurrState == STATE_BUS_UNCACHED_WRITE |
|
||||||
BusCurrState == STATE_BUS_UNCACHED_WRITE_DONE) |
|
BusCurrState == STATE_BUS_UNCACHED_WRITE_DONE) |
|
||||||
~CACHE_ENABLED; // if no dcache always select uncachedadr.
|
~CACHE_ENABLED; // if no Cache always select uncachedadr.
|
||||||
endmodule
|
endmodule
|
||||||
|
@ -225,8 +225,8 @@ module lsu (
|
|||||||
.clk, .reset,
|
.clk, .reset,
|
||||||
.LSUBusHRDATA, .LSUBusAck, .LSUBusInit, .LSUBusWrite, .LSUBusRead, .LSUBusSize, .LSUBurstType, .LSUTransType, .LSUTransComplete,
|
.LSUBusHRDATA, .LSUBusAck, .LSUBusInit, .LSUBusWrite, .LSUBusRead, .LSUBusSize, .LSUBurstType, .LSUTransType, .LSUTransComplete,
|
||||||
.WordCount, .SelLSUBusWord,
|
.WordCount, .SelLSUBusWord,
|
||||||
.LSUFunct3M, .LSUBusAdr, .DCacheBusAdr, .DCacheFetchLine,
|
.LSUFunct3M, .LSUBusAdr, .CacheBusAdr(DCacheBusAdr), .CacheFetchLine(DCacheFetchLine),
|
||||||
.DCacheWriteLine, .DCacheBusAck, .DLSUBusBuffer, .LSUPAdrM,
|
.CacheWriteLine(DCacheWriteLine), .CacheBusAck(DCacheBusAck), .DLSUBusBuffer, .LSUPAdrM,
|
||||||
.SelUncachedAdr, .IgnoreRequest, .LSURWM, .CPUBusy, .CacheableM,
|
.SelUncachedAdr, .IgnoreRequest, .LSURWM, .CPUBusy, .CacheableM,
|
||||||
.BusStall, .BusCommittedM);
|
.BusStall, .BusCommittedM);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user