mirror of
https://github.com/openhwgroup/cvw
synced 2025-02-11 06:05:49 +00:00
Simplify FSM
This commit is contained in:
parent
03ef3f7f17
commit
330e500442
@ -156,6 +156,9 @@ module pagetablewalker
|
|||||||
assign PageTableEntryF = PageTableEntry;
|
assign PageTableEntryF = PageTableEntry;
|
||||||
assign PageTableEntryM = PageTableEntry;
|
assign PageTableEntryM = PageTableEntry;
|
||||||
|
|
||||||
|
assign SelPTW = (WalkerState != IDLE) & (WalkerState != FAULT);
|
||||||
|
|
||||||
|
|
||||||
// *** is there a way to speed up HPTW?
|
// *** is there a way to speed up HPTW?
|
||||||
|
|
||||||
// TranslationPAdr mux
|
// TranslationPAdr mux
|
||||||
@ -216,7 +219,6 @@ module pagetablewalker
|
|||||||
// State transition logic
|
// State transition logic
|
||||||
always_comb begin
|
always_comb begin
|
||||||
PRegEn = 1'b0;
|
PRegEn = 1'b0;
|
||||||
// TranslationPAdr = '0;
|
|
||||||
HPTWRead = 1'b0;
|
HPTWRead = 1'b0;
|
||||||
PageTableEntry = '0;
|
PageTableEntry = '0;
|
||||||
PageType = '0;
|
PageType = '0;
|
||||||
@ -227,46 +229,27 @@ module pagetablewalker
|
|||||||
WalkerLoadPageFaultM = 1'b0;
|
WalkerLoadPageFaultM = 1'b0;
|
||||||
WalkerStorePageFaultM = 1'b0;
|
WalkerStorePageFaultM = 1'b0;
|
||||||
|
|
||||||
SelPTW = 1'b1;
|
// SelPTW = 1'b1;
|
||||||
|
|
||||||
case (WalkerState)
|
case (WalkerState)
|
||||||
IDLE: begin
|
IDLE: if (AnyTLBMissM & SvMode == `SV32) NextWalkerState = LEVEL1_SET_ADRE;
|
||||||
SelPTW = 1'b0;
|
else NextWalkerState = IDLE;
|
||||||
if (AnyTLBMissM & SvMode == `SV32) begin
|
LEVEL1_SET_ADRE: NextWalkerState = LEVEL1_WDV;
|
||||||
NextWalkerState = LEVEL1_SET_ADRE;
|
|
||||||
end else begin
|
|
||||||
NextWalkerState = IDLE;
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
LEVEL1_SET_ADRE: begin
|
|
||||||
NextWalkerState = LEVEL1_WDV;
|
|
||||||
//TranslationPAdr = {BasePageTablePPN, VPN1, 2'b00};
|
|
||||||
end
|
|
||||||
|
|
||||||
LEVEL1_WDV: begin
|
LEVEL1_WDV: begin
|
||||||
//TranslationPAdr = {BasePageTablePPN, VPN1, 2'b00};
|
|
||||||
HPTWRead = 1'b1;
|
HPTWRead = 1'b1;
|
||||||
if (HPTWStall) begin
|
if (HPTWStall) NextWalkerState = LEVEL1_WDV;
|
||||||
NextWalkerState = LEVEL1_WDV;
|
else begin
|
||||||
end else begin
|
|
||||||
NextWalkerState = LEVEL1;
|
NextWalkerState = LEVEL1;
|
||||||
PRegEn = 1'b1;
|
PRegEn = 1'b1;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
LEVEL1: begin
|
LEVEL1: begin
|
||||||
if (ValidPTE && LeafPTE && ~(MegapageMisaligned | ADPageFault)) begin
|
if (ValidPTE && LeafPTE && ~(MegapageMisaligned | ADPageFault)) NextWalkerState = LEAF;
|
||||||
NextWalkerState = LEAF;
|
|
||||||
//TranslationPAdr = {2'b00, TranslationVAdr[31:0]}; // ***check this
|
|
||||||
end
|
|
||||||
else if (ValidPTE && ~LeafPTE) begin
|
else if (ValidPTE && ~LeafPTE) begin
|
||||||
NextWalkerState = LEVEL0_SET_ADRE;
|
NextWalkerState = LEVEL0_SET_ADRE;
|
||||||
//TranslationPAdr = {CurrentPPN, VPN0, 2'b00};
|
HPTWRead = 1'b1;
|
||||||
HPTWRead = 1'b1;
|
end else NextWalkerState = FAULT;
|
||||||
end else begin
|
|
||||||
NextWalkerState = FAULT;
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
LEVEL0_SET_ADRE: begin
|
LEVEL0_SET_ADRE: begin
|
||||||
@ -304,7 +287,7 @@ module pagetablewalker
|
|||||||
end
|
end
|
||||||
|
|
||||||
FAULT: begin
|
FAULT: begin
|
||||||
SelPTW = 1'b0;
|
//SelPTW = 1'b0;
|
||||||
NextWalkerState = IDLE;
|
NextWalkerState = IDLE;
|
||||||
WalkerInstrPageFaultF = ~DTLBMissMQ;
|
WalkerInstrPageFaultF = ~DTLBMissMQ;
|
||||||
WalkerLoadPageFaultM = DTLBMissMQ && ~MemStore;
|
WalkerLoadPageFaultM = DTLBMissMQ && ~MemStore;
|
||||||
@ -356,11 +339,9 @@ module pagetablewalker
|
|||||||
WalkerLoadPageFaultM = 1'b0;
|
WalkerLoadPageFaultM = 1'b0;
|
||||||
WalkerStorePageFaultM = 1'b0;
|
WalkerStorePageFaultM = 1'b0;
|
||||||
|
|
||||||
SelPTW = 1'b1;
|
|
||||||
|
|
||||||
case (WalkerState)
|
case (WalkerState)
|
||||||
IDLE: begin
|
IDLE: begin
|
||||||
SelPTW = 1'b0;
|
//SelPTW = 1'b0;
|
||||||
if (AnyTLBMissM & SvMode == `SV48) begin
|
if (AnyTLBMissM & SvMode == `SV48) begin
|
||||||
NextWalkerState = LEVEL3_SET_ADRE;
|
NextWalkerState = LEVEL3_SET_ADRE;
|
||||||
end else if (AnyTLBMissM & SvMode == `SV39) begin
|
end else if (AnyTLBMissM & SvMode == `SV39) begin
|
||||||
@ -505,7 +486,7 @@ module pagetablewalker
|
|||||||
end
|
end
|
||||||
|
|
||||||
FAULT: begin
|
FAULT: begin
|
||||||
SelPTW = 1'b0;
|
//SelPTW = 1'b0;
|
||||||
NextWalkerState = IDLE;
|
NextWalkerState = IDLE;
|
||||||
WalkerInstrPageFaultF = ~DTLBMissMQ;
|
WalkerInstrPageFaultF = ~DTLBMissMQ;
|
||||||
WalkerLoadPageFaultM = DTLBMissMQ && ~MemStore;
|
WalkerLoadPageFaultM = DTLBMissMQ && ~MemStore;
|
||||||
|
Loading…
Reference in New Issue
Block a user