forked from Github_Repos/cvw
Fixed dcache flush.
This commit is contained in:
parent
17b9143d10
commit
3c3c6d0fe8
14
pipelined/src/cache/dcache.sv
vendored
14
pipelined/src/cache/dcache.sv
vendored
@ -104,6 +104,7 @@ module dcache
|
|||||||
|
|
||||||
logic [INDEXLEN-1:0] FlushAdr;
|
logic [INDEXLEN-1:0] FlushAdr;
|
||||||
logic [INDEXLEN-1:0] FlushAdrP1;
|
logic [INDEXLEN-1:0] FlushAdrP1;
|
||||||
|
logic [INDEXLEN-1:0] FlushAdrQ;
|
||||||
logic FlushAdrCntEn;
|
logic FlushAdrCntEn;
|
||||||
logic FlushAdrCntRst;
|
logic FlushAdrCntRst;
|
||||||
logic FlushAdrFlag;
|
logic FlushAdrFlag;
|
||||||
@ -127,7 +128,7 @@ module dcache
|
|||||||
.d2(FlushAdr),
|
.d2(FlushAdr),
|
||||||
.s(SelAdrM),
|
.s(SelAdrM),
|
||||||
.y(RAdr));
|
.y(RAdr));
|
||||||
|
|
||||||
cacheway #(.NUMLINES(NUMLINES), .BLOCKLEN(BLOCKLEN), .TAGLEN(TAGLEN),
|
cacheway #(.NUMLINES(NUMLINES), .BLOCKLEN(BLOCKLEN), .TAGLEN(TAGLEN),
|
||||||
.OFFSETLEN(OFFSETLEN), .INDEXLEN(INDEXLEN))
|
.OFFSETLEN(OFFSETLEN), .INDEXLEN(INDEXLEN))
|
||||||
MemWay[NUMWAYS-1:0](.clk, .reset, .RAdr,
|
MemWay[NUMWAYS-1:0](.clk, .reset, .RAdr,
|
||||||
@ -207,20 +208,27 @@ module dcache
|
|||||||
|
|
||||||
mux3 #(`PA_BITS) BaseAdrMux(.d0({LsuPAdrM[`PA_BITS-1:OFFSETLEN], {{OFFSETLEN}{1'b0}}}),
|
mux3 #(`PA_BITS) BaseAdrMux(.d0({LsuPAdrM[`PA_BITS-1:OFFSETLEN], {{OFFSETLEN}{1'b0}}}),
|
||||||
.d1({VictimTag, LsuPAdrM[INDEXLEN+OFFSETLEN-1:OFFSETLEN], {{OFFSETLEN}{1'b0}}}),
|
.d1({VictimTag, LsuPAdrM[INDEXLEN+OFFSETLEN-1:OFFSETLEN], {{OFFSETLEN}{1'b0}}}),
|
||||||
.d2({VictimTag, FlushAdr, {{OFFSETLEN}{1'b0}}}),
|
.d2({VictimTag, FlushAdrQ, {{OFFSETLEN}{1'b0}}}),
|
||||||
.s({SelFlush, SelEvict}),
|
.s({SelFlush, SelEvict}),
|
||||||
.y(DCacheBusAdr));
|
.y(DCacheBusAdr));
|
||||||
|
|
||||||
|
|
||||||
// flush address and way generation.
|
// flush address and way generation.
|
||||||
|
// increment on 2nd to last way
|
||||||
flopenr #(INDEXLEN)
|
flopenr #(INDEXLEN)
|
||||||
FlushAdrReg(.clk,
|
FlushAdrReg(.clk,
|
||||||
.reset(reset | FlushAdrCntRst),
|
.reset(reset | FlushAdrCntRst),
|
||||||
.en(FlushAdrCntEn & FlushWay[NUMWAYS-1]),
|
.en(FlushAdrCntEn & FlushWay[NUMWAYS-2]),
|
||||||
.d(FlushAdrP1),
|
.d(FlushAdrP1),
|
||||||
.q(FlushAdr));
|
.q(FlushAdr));
|
||||||
assign FlushAdrP1 = FlushAdr + 1'b1;
|
assign FlushAdrP1 = FlushAdr + 1'b1;
|
||||||
|
|
||||||
|
flopenr #(INDEXLEN)
|
||||||
|
FlushAdrQReg(.clk,
|
||||||
|
.reset(reset | FlushAdrCntRst),
|
||||||
|
.en(FlushAdrCntEn),
|
||||||
|
.d(FlushAdr),
|
||||||
|
.q(FlushAdrQ));
|
||||||
|
|
||||||
flopenl #(NUMWAYS)
|
flopenl #(NUMWAYS)
|
||||||
FlushWayReg(.clk,
|
FlushWayReg(.clk,
|
||||||
|
Loading…
Reference in New Issue
Block a user