From 989bb7c01ba04d339a935e43be882e272c354909 Mon Sep 17 00:00:00 2001 From: David Harris Date: Sat, 17 Jul 2021 19:34:01 -0400 Subject: [PATCH] Simplified VPN case statement --- wally-pipelined/src/mmu/pagetablewalker.sv | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/wally-pipelined/src/mmu/pagetablewalker.sv b/wally-pipelined/src/mmu/pagetablewalker.sv index fe8aaf5b1..5dbe4e2b2 100644 --- a/wally-pipelined/src/mmu/pagetablewalker.sv +++ b/wally-pipelined/src/mmu/pagetablewalker.sv @@ -101,7 +101,7 @@ module pagetablewalker assign SelPTW = (WalkerState != IDLE) & (WalkerState != FAULT); assign DTLBWriteM = (WalkerState == LEAF) & DTLBWalk; assign ITLBWriteF = (WalkerState == LEAF) & ~DTLBWalk; - assign UseTranslationVAdr = (NextWalkerState == LEAF) || (WalkerState == LEAF); + assign UseTranslationVAdr = (NextWalkerState == LEAF) || (WalkerState == LEAF); // ***explain this logic // Raise faults. DTLBMiss assign WalkerInstrPageFaultF = (WalkerState == FAULT) & ~DTLBWalk; @@ -131,15 +131,10 @@ module pagetablewalker logic [`PPN_BITS-1:0] PPN; always_comb case (WalkerState) // select VPN field based on HPTW state - LEVEL3_SET_ADR: VPN = TranslationVAdr[47:39]; - LEVEL3_READ: VPN = TranslationVAdr[47:39]; - LEVEL3: VPN = TranslationVAdr[38:30]; - LEVEL2_SET_ADR: VPN = TranslationVAdr[38:30]; - LEVEL2_READ: VPN = TranslationVAdr[38:30]; - LEVEL2: VPN = TranslationVAdr[29:21]; - LEVEL1_SET_ADR: VPN = TranslationVAdr[29:21]; - LEVEL1_READ: VPN = TranslationVAdr[29:21]; - default: VPN = TranslationVAdr[20:12]; + LEVEL3_SET_ADR, LEVEL3_READ: VPN = TranslationVAdr[47:39]; + LEVEL3, LEVEL2_SET_ADR, LEVEL2_READ: VPN = TranslationVAdr[38:30]; + LEVEL2, LEVEL1_SET_ADR, LEVEL1_READ: VPN = TranslationVAdr[29:21]; + default: VPN = TranslationVAdr[20:12]; endcase assign PPN = ((WalkerState == LEVEL3_SET_ADR) | (WalkerState == LEVEL3_READ) | (SvMode != `SV48 & ((WalkerState == LEVEL2_SET_ADR) | (WalkerState == LEVEL2_READ)))) ? BasePageTablePPN : CurrentPPN;