anchor.diff:                      mainMemory.request.put(GenericMemReq{write: True, byteen: '1, addr: a, data: pack(pte)});
                   end
               end
  -        end else if (i != 0) begin
  +        end else begin
               // go to next level
  -            Addr newA = {0, pte.ppn2, pte.ppn1, pte.ppn0, 12'b0} + (zeroExtend(vpn[i-1]) << 3);
  +            Addr newA = {0, pte.ppn2, pte.ppn1, pte.ppn0, 12'b0} | (zeroExtend(vpn[i-1]) << 3);
               mainMemory.request.put(GenericMemReq{write: False, byteen: '1, addr: newA, data: ?});
               a <= newA;
               i <= i - 1;
  -        end else begin
  -            // non-leaf page at lowest level, access fault
  -            procMMUResp.enq(RVDMMUResp{addr: 0, exception: accessFault});
  -            walking <= False;
           end
       endrule
   
  
positive.code:         Maybe#(ExceptionCause) accessFault = tagged Valid (isInst ? InstAccessFault :
                                                              (store ? StoreAccessFault :
                                                                  LoadAccessFault));
          if (!pte.valid) begin
              // invalid page, access fault
              procMMUResp.enq(RVDMMUResp{addr: 0, exception: accessFault});
              walking <= False;
          end else if ((pte.x || pte.w || pte.r) && !(pte.w && !pte.r) ) begin // XXX: isLeafPTE
              // valid leaf page
  
              // translated physical address
  
negative.code:                 paddr = {0, pte.ppn2, pte.ppn1, pte.ppn0, pageoffset};
              end else if (i == 1) begin
                  paddr = {0, pte.ppn2, pte.ppn1, vpn[0], pageoffset};
              end else begin // if (i == 2)
                  paddr = {0, pte.ppn2, vpn[1], vpn[0], pageoffset};
              end
  
  