mirror of
https://github.com/openhwgroup/cvw
synced 2025-02-11 06:05:49 +00:00
cleaning up FSM
This commit is contained in:
parent
26cd57aae0
commit
6d8a6eeba0
@ -229,8 +229,6 @@ module pagetablewalker
|
|||||||
WalkerLoadPageFaultM = 1'b0;
|
WalkerLoadPageFaultM = 1'b0;
|
||||||
WalkerStorePageFaultM = 1'b0;
|
WalkerStorePageFaultM = 1'b0;
|
||||||
|
|
||||||
// SelPTW = 1'b1;
|
|
||||||
|
|
||||||
case (WalkerState)
|
case (WalkerState)
|
||||||
IDLE: if (AnyTLBMissM & SvMode == `SV32) NextWalkerState = LEVEL1_SET_ADRE;
|
IDLE: if (AnyTLBMissM & SvMode == `SV32) NextWalkerState = LEVEL1_SET_ADRE;
|
||||||
else NextWalkerState = IDLE;
|
else NextWalkerState = IDLE;
|
||||||
@ -239,8 +237,8 @@ module pagetablewalker
|
|||||||
HPTWRead = 1'b1;
|
HPTWRead = 1'b1;
|
||||||
if (HPTWStall) NextWalkerState = LEVEL1_WDV;
|
if (HPTWStall) NextWalkerState = LEVEL1_WDV;
|
||||||
else begin
|
else begin
|
||||||
NextWalkerState = LEVEL1;
|
NextWalkerState = LEVEL1;
|
||||||
PRegEn = 1'b1;
|
PRegEn = 1'b1;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -251,33 +249,19 @@ module pagetablewalker
|
|||||||
HPTWRead = 1'b1;
|
HPTWRead = 1'b1;
|
||||||
end else NextWalkerState = FAULT;
|
end else NextWalkerState = FAULT;
|
||||||
end
|
end
|
||||||
|
LEVEL0_SET_ADRE: NextWalkerState = LEVEL0_WDV;
|
||||||
LEVEL0_SET_ADRE: begin
|
|
||||||
NextWalkerState = LEVEL0_WDV;
|
|
||||||
//TranslationPAdr = {CurrentPPN, VPN0, 2'b00};
|
|
||||||
end
|
|
||||||
|
|
||||||
LEVEL0_WDV: begin
|
LEVEL0_WDV: begin
|
||||||
//TranslationPAdr = {CurrentPPN, VPN0, 2'b00};
|
|
||||||
HPTWRead = 1'b1;
|
HPTWRead = 1'b1;
|
||||||
if (HPTWStall) begin
|
if (HPTWStall) NextWalkerState = LEVEL0_WDV;
|
||||||
NextWalkerState = LEVEL0_WDV;
|
else begin
|
||||||
end else begin
|
NextWalkerState = LEVEL0;
|
||||||
NextWalkerState = LEVEL0;
|
PRegEn = 1'b1;
|
||||||
PRegEn = 1'b1;
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
LEVEL0: begin
|
LEVEL0: if (ValidPTE & LeafPTE & ~ADPageFault) NextWalkerState = LEAF;
|
||||||
if (ValidPTE & LeafPTE & ~ADPageFault) begin
|
else NextWalkerState = FAULT;
|
||||||
NextWalkerState = LEAF;
|
LEAF: begin // *** pull out datapath stuff
|
||||||
//TranslationPAdr = {2'b00, TranslationVAdr[31:0]};
|
|
||||||
end else begin
|
|
||||||
NextWalkerState = FAULT;
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
LEAF: begin
|
|
||||||
NextWalkerState = IDLE;
|
NextWalkerState = IDLE;
|
||||||
PageTableEntry = CurrentPTE;
|
PageTableEntry = CurrentPTE;
|
||||||
PageType = (PreviousWalkerState == LEVEL1) ? 2'b01 : 2'b00; // *** not sure about this mux?
|
PageType = (PreviousWalkerState == LEVEL1) ? 2'b01 : 2'b00; // *** not sure about this mux?
|
||||||
@ -287,7 +271,6 @@ module pagetablewalker
|
|||||||
end
|
end
|
||||||
|
|
||||||
FAULT: begin
|
FAULT: begin
|
||||||
//SelPTW = 1'b0;
|
|
||||||
NextWalkerState = IDLE;
|
NextWalkerState = IDLE;
|
||||||
WalkerInstrPageFaultF = ~DTLBMissMQ;
|
WalkerInstrPageFaultF = ~DTLBMissMQ;
|
||||||
WalkerLoadPageFaultM = DTLBMissMQ && ~MemStore;
|
WalkerLoadPageFaultM = DTLBMissMQ && ~MemStore;
|
||||||
@ -309,13 +292,6 @@ module pagetablewalker
|
|||||||
assign HPTWPAdrE = TranslationPAdr[31:0];
|
assign HPTWPAdrE = TranslationPAdr[31:0];
|
||||||
|
|
||||||
end else begin
|
end else begin
|
||||||
|
|
||||||
/* logic [8:0] VPN3, VPN2, VPN1, VPN0;
|
|
||||||
assign VPN3 = TranslationVAdr[47:39];
|
|
||||||
assign VPN2 = TranslationVAdr[38:30];
|
|
||||||
assign VPN1 = TranslationVAdr[29:21];
|
|
||||||
assign VPN0 = TranslationVAdr[20:12];*/
|
|
||||||
|
|
||||||
logic TerapageMisaligned, GigapageMisaligned;
|
logic TerapageMisaligned, GigapageMisaligned;
|
||||||
// A terapage is a level 3 leaf page. This page must have zero PPN[2],
|
// A terapage is a level 3 leaf page. This page must have zero PPN[2],
|
||||||
// zero PPN[1], and zero PPN[0]
|
// zero PPN[1], and zero PPN[0]
|
||||||
@ -328,7 +304,6 @@ module pagetablewalker
|
|||||||
|
|
||||||
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;
|
||||||
@ -340,16 +315,8 @@ module pagetablewalker
|
|||||||
WalkerStorePageFaultM = 1'b0;
|
WalkerStorePageFaultM = 1'b0;
|
||||||
|
|
||||||
case (WalkerState)
|
case (WalkerState)
|
||||||
IDLE: begin
|
IDLE: if (AnyTLBMissM) NextWalkerState = (SvMode == `SV48) ? LEVEL3_SET_ADRE : LEVEL2_SET_ADRE;
|
||||||
//SelPTW = 1'b0;
|
else NextWalkerState = IDLE;
|
||||||
if (AnyTLBMissM & SvMode == `SV48) begin
|
|
||||||
NextWalkerState = LEVEL3_SET_ADRE;
|
|
||||||
end else if (AnyTLBMissM & SvMode == `SV39) begin
|
|
||||||
NextWalkerState = LEVEL2_SET_ADRE;
|
|
||||||
end else begin
|
|
||||||
NextWalkerState = IDLE;
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
LEVEL3_SET_ADRE: begin
|
LEVEL3_SET_ADRE: begin
|
||||||
NextWalkerState = LEVEL3_WDV;
|
NextWalkerState = LEVEL3_WDV;
|
||||||
|
Loading…
Reference in New Issue
Block a user