forked from Github_Repos/cvw
Separated busdp for cache from simpler logic for no cache
This commit is contained in:
parent
5c1934208a
commit
0b918d6916
@ -224,6 +224,18 @@ module lsu (
|
|||||||
logic DCacheBusAck;
|
logic DCacheBusAck;
|
||||||
logic [LOGBWPL-1:0] WordCount;
|
logic [LOGBWPL-1:0] WordCount;
|
||||||
|
|
||||||
|
if(`DCACHE) begin : dcache
|
||||||
|
cache #(.LINELEN(`DCACHE_LINELENINBITS), .NUMLINES(`DCACHE_WAYSIZEINBYTES*8/LINELEN),
|
||||||
|
.NUMWAYS(`DCACHE_NUMWAYS), .LOGBWPL(LOGBWPL), .WORDLEN(`LLEN), .MUXINTERVAL(`XLEN), .DCACHE(1)) dcache(
|
||||||
|
.clk, .reset, .CPUBusy, .SelBusWord, .RW(LSURWM), .Atomic(LSUAtomicM),
|
||||||
|
.FlushCache(FlushDCacheM), .NextAdr(LSUAdrE), .PAdr(LSUPAdrM),
|
||||||
|
.ByteMask(ByteMaskM), .WordCount,
|
||||||
|
.FinalWriteData(LSUWriteDataM), .Cacheable(CacheableM),
|
||||||
|
.CacheStall(DCacheStallM), .CacheMiss(DCacheMiss), .CacheAccess(DCacheAccess),
|
||||||
|
.IgnoreRequestTLB, .TrapM, .CacheCommitted(DCacheCommittedM),
|
||||||
|
.CacheBusAdr(DCacheBusAdr), .ReadDataWord(ReadDataWordM),
|
||||||
|
.FetchBuffer, .CacheFetchLine(DCacheFetchLine),
|
||||||
|
.CacheWriteLine(DCacheWriteLine), .CacheBusAck(DCacheBusAck), .InvalidateCache(1'b0));
|
||||||
busdp #(WORDSPERLINE, LINELEN, LOGBWPL, `DCACHE) busdp(
|
busdp #(WORDSPERLINE, LINELEN, LOGBWPL, `DCACHE) busdp(
|
||||||
.clk, .reset,
|
.clk, .reset,
|
||||||
.HRDATA, .BusAck(LSUBusAck), .BusInit(LSUBusInit), .BusWrite(LSUBusWrite),
|
.HRDATA, .BusAck(LSUBusAck), .BusInit(LSUBusInit), .BusWrite(LSUBusWrite),
|
||||||
@ -238,20 +250,30 @@ module lsu (
|
|||||||
.s(SelUncachedAdr), .y(ReadDataWordMuxM));
|
.s(SelUncachedAdr), .y(ReadDataWordMuxM));
|
||||||
mux2 #(`XLEN) LSUHWDATAMux(.d0(ReadDataWordM[`XLEN-1:0]), .d1(LSUWriteDataM[`XLEN-1:0]),
|
mux2 #(`XLEN) LSUHWDATAMux(.d0(ReadDataWordM[`XLEN-1:0]), .d1(LSUWriteDataM[`XLEN-1:0]),
|
||||||
.s(SelUncachedAdr), .y(LSUHWDATA));
|
.s(SelUncachedAdr), .y(LSUHWDATA));
|
||||||
if(`DCACHE) begin : dcache
|
end else begin : passthrough // just needs a register to hold the value from the bus
|
||||||
cache #(.LINELEN(`DCACHE_LINELENINBITS), .NUMLINES(`DCACHE_WAYSIZEINBYTES*8/LINELEN),
|
logic BufferCaptureEn;
|
||||||
.NUMWAYS(`DCACHE_NUMWAYS), .LOGBWPL(LOGBWPL), .WORDLEN(`LLEN), .MUXINTERVAL(`XLEN), .DCACHE(1)) dcache(
|
|
||||||
.clk, .reset, .CPUBusy, .SelBusWord, .RW(LSURWM), .Atomic(LSUAtomicM),
|
|
||||||
.FlushCache(FlushDCacheM), .NextAdr(LSUAdrE), .PAdr(LSUPAdrM),
|
|
||||||
.ByteMask(ByteMaskM), .WordCount,
|
|
||||||
.FinalWriteData(LSUWriteDataM), .Cacheable(CacheableM),
|
|
||||||
.CacheStall(DCacheStallM), .CacheMiss(DCacheMiss), .CacheAccess(DCacheAccess),
|
|
||||||
.IgnoreRequestTLB, .TrapM, .CacheCommitted(DCacheCommittedM),
|
|
||||||
.CacheBusAdr(DCacheBusAdr), .ReadDataWord(ReadDataWordM),
|
|
||||||
.FetchBuffer, .CacheFetchLine(DCacheFetchLine),
|
|
||||||
.CacheWriteLine(DCacheWriteLine), .CacheBusAck(DCacheBusAck), .InvalidateCache(1'b0));
|
|
||||||
|
|
||||||
end else begin : passthrough
|
flopen #(`XLEN) fb(.clk, .en(BufferCaptureEn), .d(HRDATA), .q(ReadDataWordMuxM));
|
||||||
|
assign LSUHWDATA = LSUWriteDataM[`XLEN-1:0];
|
||||||
|
|
||||||
|
busfsm #(0, LOGBWPL, `DCACHE) busfsm(
|
||||||
|
.clk, .reset, .IgnoreRequest, .RW(LSURWM), .CacheFetchLine(DCacheFetchLine), .CacheWriteLine(DCacheWriteLine),
|
||||||
|
.BusAck(LSUBusAck), .BusInit(LSUBusInit), .CPUBusy, .Cacheable(1'b0), .BusStall, .BusWrite(LSUBusWrite),
|
||||||
|
.SelBusWord, .BusRead(LSUBusRead), .BufferCaptureEn,
|
||||||
|
.HBURST(LSUHBURST), .HTRANS(LSUHTRANS), .BusTransComplete(LSUTransComplete),
|
||||||
|
.CacheBusAck(DCacheBusAck), .BusCommitted(BusCommittedM), .SelUncachedAdr, .WordCount(), .WordCountDelayed());
|
||||||
|
|
||||||
|
/* busdp #(WORDSPERLINE, LINELEN, LOGBWPL, `DCACHE) busdp(
|
||||||
|
.clk, .reset,
|
||||||
|
.HRDATA, .BusAck(LSUBusAck), .BusInit(LSUBusInit), .BusWrite(LSUBusWrite),
|
||||||
|
.BusRead(LSUBusRead), .HSIZE(LSUHSIZE), .HBURST(LSUHBURST), .HTRANS(LSUHTRANS), .BusTransComplete(LSUTransComplete),
|
||||||
|
.WordCount, .SelBusWord,
|
||||||
|
.Funct3(LSUFunct3M), .HADDR(LSUHADDR), .CacheBusAdr(DCacheBusAdr), .CacheFetchLine(DCacheFetchLine),
|
||||||
|
.CacheWriteLine(DCacheWriteLine), .CacheBusAck(DCacheBusAck), .FetchBuffer, .PAdr(LSUPAdrM),
|
||||||
|
.SelUncachedAdr, .IgnoreRequest, .RW(LSURWM), .CPUBusy, .Cacheable(CacheableM),
|
||||||
|
.BusStall, .BusCommitted(BusCommittedM)); */
|
||||||
|
|
||||||
|
// *** possible bug - ReadDatWordM vs. ReadDataWordMuxW - is byte swapping needed for endian
|
||||||
assign {ReadDataWordM, DCacheStallM, DCacheCommittedM, DCacheFetchLine, DCacheWriteLine} = '0;
|
assign {ReadDataWordM, DCacheStallM, DCacheCommittedM, DCacheFetchLine, DCacheWriteLine} = '0;
|
||||||
assign DCacheMiss = CacheableM; assign DCacheAccess = CacheableM;
|
assign DCacheMiss = CacheableM; assign DCacheAccess = CacheableM;
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user