Pushing HPTWPAdrM flop into LSUArb

This commit is contained in:
David Harris 2021-07-17 19:39:18 -04:00
parent 586341a41a
commit d9750c16a5
3 changed files with 7 additions and 4 deletions

View File

@ -122,7 +122,7 @@ module lsu
logic [`XLEN-1:0] HPTWReadPTE; logic [`XLEN-1:0] HPTWReadPTE;
logic HPTWStall; logic HPTWStall;
logic [`XLEN-1:0] HPTWPAdrE; logic [`XLEN-1:0] HPTWPAdrE;
logic [`XLEN-1:0] HPTWPAdrM; // logic [`XLEN-1:0] HPTWPAdrM;
logic [`XLEN-1:0] TranslationVAdr; logic [`XLEN-1:0] TranslationVAdr;
logic [`PA_BITS-1:0] TranslationPAdr; logic [`PA_BITS-1:0] TranslationPAdr;
logic UseTranslationVAdr; logic UseTranslationVAdr;
@ -180,7 +180,7 @@ module lsu
else assign TranslationPAdrXLEN = {{(`XLEN-`PA_BITS){1'b0}}, TranslationPAdr[`PA_BITS-1:0]}; else assign TranslationPAdrXLEN = {{(`XLEN-`PA_BITS){1'b0}}, TranslationPAdr[`PA_BITS-1:0]};
endgenerate endgenerate
mux2 #(`XLEN) HPTWPAdrMux(TranslationPAdrXLEN, TranslationVAdr, UseTranslationVAdr, HPTWPAdrE); // *** misleading to call it PAdr, bad because some bits have been truncated mux2 #(`XLEN) HPTWPAdrMux(TranslationPAdrXLEN, TranslationVAdr, UseTranslationVAdr, HPTWPAdrE); // *** misleading to call it PAdr, bad because some bits have been truncated
flop #(`XLEN) HPTWPAdrMReg(clk, HPTWPAdrE, HPTWPAdrM); // flop #(`XLEN) HPTWPAdrMReg(clk, HPTWPAdrE, HPTWPAdrM);
assign WalkerPageFaultM = WalkerStorePageFaultM | WalkerLoadPageFaultM; assign WalkerPageFaultM = WalkerStorePageFaultM | WalkerLoadPageFaultM;
@ -191,7 +191,7 @@ module lsu
.SelPTW(SelPTW), .SelPTW(SelPTW),
.HPTWRead(HPTWRead), .HPTWRead(HPTWRead),
.HPTWPAdrE(HPTWPAdrE), .HPTWPAdrE(HPTWPAdrE),
.HPTWPAdrM(HPTWPAdrM), // .HPTWPAdrM(HPTWPAdrM),
.HPTWStall(HPTWStall), .HPTWStall(HPTWStall),
// CPU connection // CPU connection
.MemRWM(MemRWM), .MemRWM(MemRWM),

View File

@ -33,7 +33,6 @@ module lsuArb
input logic SelPTW, input logic SelPTW,
input logic HPTWRead, input logic HPTWRead,
input logic [`XLEN-1:0] HPTWPAdrE, input logic [`XLEN-1:0] HPTWPAdrE,
input logic [`XLEN-1:0] HPTWPAdrM,
output logic HPTWStall, output logic HPTWStall,
// from CPU // from CPU
@ -72,6 +71,7 @@ module lsuArb
); );
logic [2:0] PTWSize; logic [2:0] PTWSize;
logic [`XLEN-1:0] HPTWPAdrM;
// multiplex the outputs to LSU // multiplex the outputs to LSU
assign DisableTranslation = SelPTW; // change names between SelPTW would be confusing in DTLB. assign DisableTranslation = SelPTW; // change names between SelPTW would be confusing in DTLB.
@ -82,6 +82,8 @@ module lsuArb
endgenerate endgenerate
mux2 #(3) sizemux(Funct3M, PTWSize, SelPTW, Funct3MtoDCache); mux2 #(3) sizemux(Funct3M, PTWSize, SelPTW, Funct3MtoDCache);
flop #(`XLEN) HPTWPAdrMReg(clk, HPTWPAdrE, HPTWPAdrM); // delay HPTWPAdr by a cycle
assign AtomicMtoDCache = SelPTW ? 2'b00 : AtomicM; assign AtomicMtoDCache = SelPTW ? 2'b00 : AtomicM;
assign MemAdrMtoDCache = SelPTW ? HPTWPAdrM : MemAdrM; assign MemAdrMtoDCache = SelPTW ? HPTWPAdrM : MemAdrM;
assign MemAdrEtoDCache = SelPTW ? HPTWPAdrE : MemAdrE; assign MemAdrEtoDCache = SelPTW ? HPTWPAdrE : MemAdrE;

View File

@ -141,6 +141,7 @@ module pagetablewalker
assign TranslationPAdr = {PPN, VPN, 3'b000}; assign TranslationPAdr = {PPN, VPN, 3'b000};
end end
// Initial state and misalignment for RV32/64
if (`XLEN == 32) begin if (`XLEN == 32) begin
assign InitialWalkerState = LEVEL1_SET_ADR; assign InitialWalkerState = LEVEL1_SET_ADR;
assign TerapageMisaligned = 0; // not applicable assign TerapageMisaligned = 0; // not applicable