mirror of
https://github.com/openhwgroup/cvw
synced 2025-02-11 06:05:49 +00:00
Merge branch 'main' of https://github.com/davidharrishmc/riscv-wally into main
This commit is contained in:
commit
8481c93e1b
5
pipelined/src/cache/cache.sv
vendored
5
pipelined/src/cache/cache.sv
vendored
@ -39,7 +39,6 @@ module cache #(parameter integer LINELEN,
|
|||||||
input logic InvalidateCacheM,
|
input logic InvalidateCacheM,
|
||||||
input logic [11:0] NextAdr, // virtual address, but we only use the lower 12 bits.
|
input logic [11:0] NextAdr, // virtual address, but we only use the lower 12 bits.
|
||||||
input logic [`PA_BITS-1:0] PAdr, // physical address
|
input logic [`PA_BITS-1:0] PAdr, // physical address
|
||||||
input logic [11:0] NoTranAdr, // physical or virtual address
|
|
||||||
input logic [`XLEN-1:0] FinalWriteData,
|
input logic [`XLEN-1:0] FinalWriteData,
|
||||||
output logic [`XLEN-1:0] ReadDataWord,
|
output logic [`XLEN-1:0] ReadDataWord,
|
||||||
output logic CacheCommitted,
|
output logic CacheCommitted,
|
||||||
@ -120,7 +119,7 @@ module cache #(parameter integer LINELEN,
|
|||||||
|
|
||||||
mux3 #(INDEXLEN)
|
mux3 #(INDEXLEN)
|
||||||
AdrSelMux(.d0(NextAdr[INDEXLEN+OFFSETLEN-1:OFFSETLEN]),
|
AdrSelMux(.d0(NextAdr[INDEXLEN+OFFSETLEN-1:OFFSETLEN]),
|
||||||
.d1(NoTranAdr[INDEXLEN+OFFSETLEN-1:OFFSETLEN]),
|
.d1(PAdr[INDEXLEN+OFFSETLEN-1:OFFSETLEN]),
|
||||||
.d2(FlushAdr),
|
.d2(FlushAdr),
|
||||||
.s(SelAdr),
|
.s(SelAdr),
|
||||||
.y(RAdr));
|
.y(RAdr));
|
||||||
@ -147,7 +146,7 @@ module cache #(parameter integer LINELEN,
|
|||||||
cachereplacementpolicy(.clk, .reset,
|
cachereplacementpolicy(.clk, .reset,
|
||||||
.WayHit,
|
.WayHit,
|
||||||
.VictimWay,
|
.VictimWay,
|
||||||
.PAdr(NoTranAdr[INDEXLEN+OFFSETLEN-1:OFFSETLEN]),
|
.PAdr(PAdr[INDEXLEN+OFFSETLEN-1:OFFSETLEN]),
|
||||||
.RAdr,
|
.RAdr,
|
||||||
.LRUWriteEn);
|
.LRUWriteEn);
|
||||||
end else begin:vict
|
end else begin:vict
|
||||||
|
@ -269,7 +269,6 @@ module ifu (
|
|||||||
.FlushCache(1'b0),
|
.FlushCache(1'b0),
|
||||||
.NextAdr(PCNextFMux),
|
.NextAdr(PCNextFMux),
|
||||||
.PAdr(PCPF),
|
.PAdr(PCPF),
|
||||||
.NoTranAdr(PCFMux[11:0]),
|
|
||||||
.CacheCommitted(),
|
.CacheCommitted(),
|
||||||
.InvalidateCacheM(InvalidateICacheM));
|
.InvalidateCacheM(InvalidateICacheM));
|
||||||
|
|
||||||
|
@ -98,6 +98,7 @@ module lsu
|
|||||||
logic [1:0] LSURWM;
|
logic [1:0] LSURWM;
|
||||||
logic [1:0] PreLSURWM;
|
logic [1:0] PreLSURWM;
|
||||||
logic [2:0] LSUFunct3M;
|
logic [2:0] LSUFunct3M;
|
||||||
|
logic [6:0] LSUFunct7M;
|
||||||
logic [1:0] LSUAtomicM;
|
logic [1:0] LSUAtomicM;
|
||||||
(* mark_debug = "true" *) logic [`PA_BITS-1:0] PreLSUPAdrM, LocalLSUBusAdr;
|
(* mark_debug = "true" *) logic [`PA_BITS-1:0] PreLSUPAdrM, LocalLSUBusAdr;
|
||||||
logic [11:0] PreLSUAdrE, LSUAdrE;
|
logic [11:0] PreLSUAdrE, LSUAdrE;
|
||||||
@ -146,6 +147,7 @@ module lsu
|
|||||||
// multiplex the outputs to LSU
|
// multiplex the outputs to LSU
|
||||||
mux2 #(2) rwmux(MemRWM, {HPTWRead, 1'b0}, SelHPTW, PreLSURWM);
|
mux2 #(2) rwmux(MemRWM, {HPTWRead, 1'b0}, SelHPTW, PreLSURWM);
|
||||||
mux2 #(3) sizemux(Funct3M, HPTWSize, SelHPTW, LSUFunct3M);
|
mux2 #(3) sizemux(Funct3M, HPTWSize, SelHPTW, LSUFunct3M);
|
||||||
|
mux2 #(7) funct7mux(Funct7M, 7'b0, SelHPTW, LSUFunct7M);
|
||||||
mux2 #(2) atomicmux(AtomicM, 2'b00, SelHPTW, LSUAtomicM);
|
mux2 #(2) atomicmux(AtomicM, 2'b00, SelHPTW, LSUAtomicM);
|
||||||
mux2 #(12) adremux(IEUAdrE[11:0], HPTWAdr[11:0], SelHPTW, PreLSUAdrE);
|
mux2 #(12) adremux(IEUAdrE[11:0], HPTWAdr[11:0], SelHPTW, PreLSUAdrE);
|
||||||
mux2 #(`PA_BITS) lsupadrmux(IEUAdrExtM[`PA_BITS-1:0], HPTWAdr, SelHPTW, PreLSUPAdrM);
|
mux2 #(`PA_BITS) lsupadrmux(IEUAdrExtM[`PA_BITS-1:0], HPTWAdr, SelHPTW, PreLSUPAdrM);
|
||||||
@ -179,6 +181,7 @@ module lsu
|
|||||||
|
|
||||||
assign PreLSURWM = MemRWM;
|
assign PreLSURWM = MemRWM;
|
||||||
assign LSUFunct3M = Funct3M;
|
assign LSUFunct3M = Funct3M;
|
||||||
|
assign LSUFunct7M = Funct7M;
|
||||||
assign LSUAtomicM = AtomicM;
|
assign LSUAtomicM = AtomicM;
|
||||||
assign PreLSUAdrE = IEUAdrE[11:0];
|
assign PreLSUAdrE = IEUAdrE[11:0];
|
||||||
assign PreLSUPAdrM = IEUAdrExtM;
|
assign PreLSUPAdrM = IEUAdrExtM;
|
||||||
@ -301,7 +304,7 @@ module lsu
|
|||||||
.NUMWAYS(`DCACHE_NUMWAYS), .DCACHE(1))
|
.NUMWAYS(`DCACHE_NUMWAYS), .DCACHE(1))
|
||||||
dcache(.clk, .reset, .CPUBusy,
|
dcache(.clk, .reset, .CPUBusy,
|
||||||
.RW(CacheableM ? LSURWM : 2'b00), .FlushCache(FlushDCacheM), .Atomic(CacheableM ? LSUAtomicM : 2'b00),
|
.RW(CacheableM ? LSURWM : 2'b00), .FlushCache(FlushDCacheM), .Atomic(CacheableM ? LSUAtomicM : 2'b00),
|
||||||
.NextAdr(LSUAdrE), .PAdr(LSUPAdrM), .NoTranAdr(PreLSUPAdrM[11:0]),
|
.NextAdr(LSUAdrE), .PAdr(LSUPAdrM),
|
||||||
.FinalWriteData(FinalWriteDataM), .ReadDataWord(ReadDataWordM), .CacheStall(DCacheStall),
|
.FinalWriteData(FinalWriteDataM), .ReadDataWord(ReadDataWordM), .CacheStall(DCacheStall),
|
||||||
.CacheMiss(DCacheMiss), .CacheAccess(DCacheAccess),
|
.CacheMiss(DCacheMiss), .CacheAccess(DCacheAccess),
|
||||||
.IgnoreRequest, .CacheCommitted(DCacheCommittedM),
|
.IgnoreRequest, .CacheCommitted(DCacheCommittedM),
|
||||||
@ -336,7 +339,7 @@ module lsu
|
|||||||
|
|
||||||
if (`A_SUPPORTED) begin : amo
|
if (`A_SUPPORTED) begin : amo
|
||||||
logic [`XLEN-1:0] AMOResult;
|
logic [`XLEN-1:0] AMOResult;
|
||||||
amoalu amoalu(.srca(ReadDataM), .srcb(WriteDataM), .funct(Funct7M), .width(LSUFunct3M[1:0]),
|
amoalu amoalu(.srca(ReadDataM), .srcb(WriteDataM), .funct(LSUFunct7M), .width(LSUFunct3M[1:0]),
|
||||||
.result(AMOResult));
|
.result(AMOResult));
|
||||||
mux2 #(`XLEN) wdmux(WriteDataM, AMOResult, LSUAtomicM[1], FinalAMOWriteDataM);
|
mux2 #(`XLEN) wdmux(WriteDataM, AMOResult, LSUAtomicM[1], FinalAMOWriteDataM);
|
||||||
end else
|
end else
|
||||||
|
@ -111,7 +111,12 @@ module mmu #(parameter TLB_ENTRIES = 8, // number of TLB Entries
|
|||||||
end
|
end
|
||||||
|
|
||||||
// If translation is occuring, select translated physical address from TLB
|
// If translation is occuring, select translated physical address from TLB
|
||||||
mux2 #(`PA_BITS) addressmux(PAdr, TLBPAdr, Translate, PhysicalAddress);
|
// the lower 12 bits are the page offset. These are never changed from the orginal
|
||||||
|
// non translated address.
|
||||||
|
//mux2 #(`PA_BITS) addressmux(PAdr, TLBPAdr, Translate, PhysicalAddress);
|
||||||
|
mux2 #(`PA_BITS-12) addressmux(PAdr[`PA_BITS-1:12], TLBPAdr[`PA_BITS-1:12], Translate, PhysicalAddress[`PA_BITS-1:12]);
|
||||||
|
assign PhysicalAddress[11:0] = PAdr[11:0];
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////
|
///////////////////////////////////////////
|
||||||
// Check physical memory accesses
|
// Check physical memory accesses
|
||||||
|
Loading…
Reference in New Issue
Block a user