forked from Github_Repos/cvw
updated so svmode actually causes the right state tranitions. fsm now stuck in idle loop
This commit is contained in:
parent
9b27cd6fb7
commit
3e19eba20d
@ -225,12 +225,11 @@ module pagetablewalker (
|
|||||||
|
|
||||||
always_comb begin
|
always_comb begin
|
||||||
case (WalkerState)
|
case (WalkerState)
|
||||||
IDLE: if (MMUTranslate) NextWalkerState = LEVEL3;
|
IDLE: if (MMUTranslate && SvMode == `SV48) NextWalkerState = LEVEL3;
|
||||||
|
else if (MMUTranslate && SvMode == `SV39) NextWalkerState = LEVEL2;
|
||||||
else NextWalkerState = IDLE;
|
else NextWalkerState = IDLE;
|
||||||
LEVEL3: if (SvMode != `SV48) NextWalkerState = LEVEL2;
|
|
||||||
// 3rd level used if SV48 is enabled.
|
LEVEL3: if (~MMUReady) NextWalkerState = LEVEL3;
|
||||||
else begin
|
|
||||||
if (~MMUReady) NextWalkerState = LEVEL3;
|
|
||||||
// *** <FUTURE WORK> According to the architecture, we should
|
// *** <FUTURE WORK> According to the architecture, we should
|
||||||
// fault upon finding a superpage that is misaligned or has 0
|
// fault upon finding a superpage that is misaligned or has 0
|
||||||
// access bit. The following commented line of code is
|
// access bit. The following commented line of code is
|
||||||
@ -239,7 +238,7 @@ module pagetablewalker (
|
|||||||
// else if (ValidPTE && LeafPTE) NextWalkerState = LEAF; // *** Once the above line is properly tested, delete this line.
|
// else if (ValidPTE && LeafPTE) NextWalkerState = LEAF; // *** Once the above line is properly tested, delete this line.
|
||||||
else if (ValidPTE && ~LeafPTE) NextWalkerState = LEVEL2;
|
else if (ValidPTE && ~LeafPTE) NextWalkerState = LEVEL2;
|
||||||
else NextWalkerState = FAULT;
|
else NextWalkerState = FAULT;
|
||||||
end
|
|
||||||
LEVEL2: if (~MMUReady) NextWalkerState = LEVEL2;
|
LEVEL2: if (~MMUReady) NextWalkerState = LEVEL2;
|
||||||
// *** <FUTURE WORK> According to the architecture, we should
|
// *** <FUTURE WORK> According to the architecture, we should
|
||||||
// fault upon finding a superpage that is misaligned or has 0
|
// fault upon finding a superpage that is misaligned or has 0
|
||||||
@ -249,6 +248,7 @@ module pagetablewalker (
|
|||||||
// else if (ValidPTE && LeafPTE) NextWalkerState = LEAF; // *** Once the above line is properly tested, delete this line.
|
// else if (ValidPTE && LeafPTE) NextWalkerState = LEAF; // *** Once the above line is properly tested, delete this line.
|
||||||
else if (ValidPTE && ~LeafPTE) NextWalkerState = LEVEL1;
|
else if (ValidPTE && ~LeafPTE) NextWalkerState = LEVEL1;
|
||||||
else NextWalkerState = FAULT;
|
else NextWalkerState = FAULT;
|
||||||
|
|
||||||
LEVEL1: if (~MMUReady) NextWalkerState = LEVEL1;
|
LEVEL1: if (~MMUReady) NextWalkerState = LEVEL1;
|
||||||
// *** <FUTURE WORK> According to the architecture, we should
|
// *** <FUTURE WORK> According to the architecture, we should
|
||||||
// fault upon finding a superpage that is misaligned or has 0
|
// fault upon finding a superpage that is misaligned or has 0
|
||||||
@ -258,12 +258,14 @@ module pagetablewalker (
|
|||||||
// else if (ValidPTE && LeafPTE) NextWalkerState = LEAF; // *** Once the above line is properly tested, delete this line.
|
// else if (ValidPTE && LeafPTE) NextWalkerState = LEAF; // *** Once the above line is properly tested, delete this line.
|
||||||
else if (ValidPTE && ~LeafPTE) NextWalkerState = LEVEL0;
|
else if (ValidPTE && ~LeafPTE) NextWalkerState = LEVEL0;
|
||||||
else NextWalkerState = FAULT;
|
else NextWalkerState = FAULT;
|
||||||
|
|
||||||
LEVEL0: if (~MMUReady) NextWalkerState = LEVEL0;
|
LEVEL0: if (~MMUReady) NextWalkerState = LEVEL0;
|
||||||
else if (ValidPTE && LeafPTE && ~AccessAlert)
|
else if (ValidPTE && LeafPTE && ~AccessAlert) NextWalkerState = LEAF;
|
||||||
NextWalkerState = LEAF;
|
|
||||||
else NextWalkerState = FAULT;
|
else NextWalkerState = FAULT;
|
||||||
|
|
||||||
LEAF: if (MMUTranslate) NextWalkerState = LEVEL3;
|
LEAF: if (MMUTranslate) NextWalkerState = LEVEL3;
|
||||||
else NextWalkerState = IDLE;
|
else NextWalkerState = IDLE;
|
||||||
|
|
||||||
FAULT: if (MMUTranslate) NextWalkerState = LEVEL3;
|
FAULT: if (MMUTranslate) NextWalkerState = LEVEL3;
|
||||||
else NextWalkerState = IDLE;
|
else NextWalkerState = IDLE;
|
||||||
// Default case should never happen, but is included for linter.
|
// Default case should never happen, but is included for linter.
|
||||||
|
Loading…
Reference in New Issue
Block a user