mirror of
				https://github.com/openhwgroup/cvw
				synced 2025-02-11 06:05:49 +00:00 
			
		
		
		
	
						commit
						1257439cf8
					
				| @ -62,7 +62,7 @@ module lsu ( | |||||||
|   output logic                LoadPageFaultM, StoreAmoPageFaultM,   // Page fault exceptions
 |   output logic                LoadPageFaultM, StoreAmoPageFaultM,   // Page fault exceptions
 | ||||||
|   output logic                LoadMisalignedFaultM,                 // Load address misaligned fault
 |   output logic                LoadMisalignedFaultM,                 // Load address misaligned fault
 | ||||||
|   output logic                LoadAccessFaultM,                     // Load access fault (PMA)
 |   output logic                LoadAccessFaultM,                     // Load access fault (PMA)
 | ||||||
|   output logic                HPTWInstrAccessFaultM,                // HPTW generated access fault during instruction fetch
 |   output logic                HPTWInstrAccessFaultF,                // HPTW generated access fault during instruction fetch
 | ||||||
|   // cpu hazard unit (trap)
 |   // cpu hazard unit (trap)
 | ||||||
|   output logic                StoreAmoMisalignedFaultM,             // Store or AMO address misaligned fault
 |   output logic                StoreAmoMisalignedFaultM,             // Store or AMO address misaligned fault
 | ||||||
|   output logic                StoreAmoAccessFaultM,                 // Store or AMO access fault
 |   output logic                StoreAmoAccessFaultM,                 // Store or AMO access fault
 | ||||||
| @ -159,7 +159,7 @@ module lsu ( | |||||||
|       .IEUAdrExtM, .PTE, .IHWriteDataM, .PageType, .PreLSURWM, .LSUAtomicM, |       .IEUAdrExtM, .PTE, .IHWriteDataM, .PageType, .PreLSURWM, .LSUAtomicM, | ||||||
|       .IHAdrM, .HPTWStall, .SelHPTW, |       .IHAdrM, .HPTWStall, .SelHPTW, | ||||||
|       .IgnoreRequestTLB, .LSULoadAccessFaultM, .LSUStoreAmoAccessFaultM,  |       .IgnoreRequestTLB, .LSULoadAccessFaultM, .LSUStoreAmoAccessFaultM,  | ||||||
|       .LoadAccessFaultM, .StoreAmoAccessFaultM, .HPTWInstrAccessFaultM); |       .LoadAccessFaultM, .StoreAmoAccessFaultM, .HPTWInstrAccessFaultF); | ||||||
|   end else begin // No HPTW, so signals are not multiplexed
 |   end else begin // No HPTW, so signals are not multiplexed
 | ||||||
|     assign PreLSURWM = MemRWM;  |     assign PreLSURWM = MemRWM;  | ||||||
|     assign IHAdrM = IEUAdrExtM; |     assign IHAdrM = IEUAdrExtM; | ||||||
| @ -170,7 +170,7 @@ module lsu ( | |||||||
|     assign LoadAccessFaultM = LSULoadAccessFaultM; |     assign LoadAccessFaultM = LSULoadAccessFaultM; | ||||||
|     assign StoreAmoAccessFaultM = LSUStoreAmoAccessFaultM;    |     assign StoreAmoAccessFaultM = LSUStoreAmoAccessFaultM;    | ||||||
|     assign {HPTWStall, SelHPTW, PTE, PageType, DTLBWriteM, ITLBWriteF, IgnoreRequestTLB} = '0; |     assign {HPTWStall, SelHPTW, PTE, PageType, DTLBWriteM, ITLBWriteF, IgnoreRequestTLB} = '0; | ||||||
|     assign HPTWInstrAccessFaultM = '0; |     assign HPTWInstrAccessFaultF = '0; | ||||||
|    end |    end | ||||||
| 
 | 
 | ||||||
|   // CommittedM indicates the cache, bus, or HPTW are busy with a multiple cycle operation.
 |   // CommittedM indicates the cache, bus, or HPTW are busy with a multiple cycle operation.
 | ||||||
|  | |||||||
| @ -64,7 +64,7 @@ module hptw ( | |||||||
|   output logic             SelHPTW, |   output logic             SelHPTW, | ||||||
|   output logic             HPTWStall, |   output logic             HPTWStall, | ||||||
|   input  logic             LSULoadAccessFaultM, LSUStoreAmoAccessFaultM,  |   input  logic             LSULoadAccessFaultM, LSUStoreAmoAccessFaultM,  | ||||||
|   output logic             LoadAccessFaultM, StoreAmoAccessFaultM, HPTWInstrAccessFaultM |   output logic             LoadAccessFaultM, StoreAmoAccessFaultM, HPTWInstrAccessFaultF | ||||||
| ); | ); | ||||||
| 
 | 
 | ||||||
|   typedef enum logic [3:0] {L0_ADR, L0_RD,  |   typedef enum logic [3:0] {L0_ADR, L0_RD,  | ||||||
| @ -98,12 +98,25 @@ module hptw ( | |||||||
|   logic [1:0]              HPTWRW; |   logic [1:0]              HPTWRW; | ||||||
|   logic [2:0]              HPTWSize; // 32 or 64 bit access
 |   logic [2:0]              HPTWSize; // 32 or 64 bit access
 | ||||||
|   statetype                WalkerState, NextWalkerState, InitialWalkerState; |   statetype                WalkerState, NextWalkerState, InitialWalkerState; | ||||||
|  |   logic                    HPTWLoadAccessFault, HPTWStoreAmoAccessFault, HPTWInstrAccessFault; | ||||||
|  |   logic                    HPTWLoadAccessFaultDelay, HPTWStoreAmoAccessFaultDelay, HPTWInstrAccessFaultDelay; | ||||||
|  |   logic                    HPTWAccessFaultDelay; | ||||||
|  |   logic                    TakeHPTWFault, TakeHPTWFaultDelay; | ||||||
| 
 | 
 | ||||||
|   // map hptw access faults onto either the original LSU load/store fault or instruction access fault
 |   // map hptw access faults onto either the original LSU load/store fault or instruction access fault
 | ||||||
|   assign LSUAccessFaultM       = LSULoadAccessFaultM | LSUStoreAmoAccessFaultM; |   assign LSUAccessFaultM       = LSULoadAccessFaultM | LSUStoreAmoAccessFaultM; | ||||||
|   assign LoadAccessFaultM      = WalkerState == IDLE ? LSULoadAccessFaultM : LSUAccessFaultM & DTLBWalk & MemRWM[1] & ~MemRWM[0]; |   assign HPTWLoadAccessFault   = LSUAccessFaultM & DTLBWalk & MemRWM[1] & ~MemRWM[0]; | ||||||
|   assign StoreAmoAccessFaultM  = WalkerState == IDLE ? LSUStoreAmoAccessFaultM : LSUAccessFaultM & DTLBWalk & MemRWM[0]; |   assign HPTWStoreAmoAccessFault = LSUAccessFaultM & DTLBWalk & MemRWM[0]; | ||||||
|   assign HPTWInstrAccessFaultM = WalkerState == IDLE ? 1'b0: LSUAccessFaultM & ~DTLBWalk; |   assign HPTWInstrAccessFault    = LSUAccessFaultM & ~DTLBWalk; | ||||||
|  | 
 | ||||||
|  |   flopr #(4) HPTWAccesFaultReg(clk, reset, {TakeHPTWFault, HPTWLoadAccessFault, HPTWStoreAmoAccessFault, HPTWInstrAccessFault}, | ||||||
|  |                                {TakeHPTWFaultDelay, HPTWLoadAccessFaultDelay, HPTWStoreAmoAccessFaultDelay, HPTWInstrAccessFaultDelay}); | ||||||
|  | 
 | ||||||
|  |   assign TakeHPTWFault = WalkerState != IDLE; | ||||||
|  |    | ||||||
|  |   assign LoadAccessFaultM      = TakeHPTWFaultDelay ? HPTWLoadAccessFaultDelay : LSULoadAccessFaultM; | ||||||
|  |   assign StoreAmoAccessFaultM  = TakeHPTWFaultDelay ? HPTWStoreAmoAccessFaultDelay : LSUStoreAmoAccessFaultM; | ||||||
|  |   assign HPTWInstrAccessFaultF = TakeHPTWFaultDelay ? HPTWInstrAccessFaultDelay : 1'b0; | ||||||
| 
 | 
 | ||||||
|   // Extract bits from CSRs and inputs
 |   // Extract bits from CSRs and inputs
 | ||||||
|   assign SvMode = SATP_REGW[`XLEN-1:`XLEN-`SVMODE_BITS]; |   assign SvMode = SATP_REGW[`XLEN-1:`XLEN-`SVMODE_BITS]; | ||||||
| @ -247,22 +260,26 @@ module hptw ( | |||||||
|   flopenl #(.TYPE(statetype)) WalkerStateReg(clk, reset | FlushW, 1'b1, NextWalkerState, IDLE, WalkerState);  |   flopenl #(.TYPE(statetype)) WalkerStateReg(clk, reset | FlushW, 1'b1, NextWalkerState, IDLE, WalkerState);  | ||||||
|   always_comb  |   always_comb  | ||||||
|     case (WalkerState) |     case (WalkerState) | ||||||
|       IDLE:       if (TLBMiss & ~DCacheStallM)                        NextWalkerState = InitialWalkerState; |       IDLE:       if (TLBMiss & ~DCacheStallM & ~HPTWAccessFaultDelay) NextWalkerState = InitialWalkerState; | ||||||
|                   else                                                NextWalkerState = IDLE; |                   else                                                NextWalkerState = IDLE; | ||||||
|       L3_ADR:                                                         NextWalkerState = L3_RD; // first access in SV48
 |       L3_ADR:                                                         NextWalkerState = L3_RD; // first access in SV48
 | ||||||
|       L3_RD:      if (DCacheStallM)                                   NextWalkerState = L3_RD; |       L3_RD:      if (DCacheStallM)                                   NextWalkerState = L3_RD; | ||||||
|  |                   else if(LSUAccessFaultM)                            NextWalkerState = IDLE; | ||||||
|                   else                                                NextWalkerState = L2_ADR; |                   else                                                NextWalkerState = L2_ADR; | ||||||
|       L2_ADR:     if (InitialWalkerState == L2_ADR | ValidNonLeafPTE) NextWalkerState = L2_RD; // first access in SV39
 |       L2_ADR:     if (InitialWalkerState == L2_ADR | ValidNonLeafPTE) NextWalkerState = L2_RD; // first access in SV39
 | ||||||
|                   else                                                NextWalkerState = LEAF; |                   else                                                NextWalkerState = LEAF; | ||||||
|       L2_RD:      if (DCacheStallM)                                   NextWalkerState = L2_RD; |       L2_RD:      if (DCacheStallM)                                   NextWalkerState = L2_RD; | ||||||
|  |                   else if(LSUAccessFaultM)                            NextWalkerState = IDLE; | ||||||
|                   else                                                NextWalkerState = L1_ADR; |                   else                                                NextWalkerState = L1_ADR; | ||||||
|       L1_ADR:     if (InitialWalkerState == L1_ADR | ValidNonLeafPTE) NextWalkerState = L1_RD; // first access in SV32
 |       L1_ADR:     if (InitialWalkerState == L1_ADR | ValidNonLeafPTE) NextWalkerState = L1_RD; // first access in SV32
 | ||||||
|                   else                                                NextWalkerState = LEAF;   |                   else                                                NextWalkerState = LEAF;   | ||||||
|       L1_RD:      if (DCacheStallM)                                   NextWalkerState = L1_RD; |       L1_RD:      if (DCacheStallM)                                   NextWalkerState = L1_RD; | ||||||
|  |                   else if(LSUAccessFaultM)                            NextWalkerState = IDLE; | ||||||
|                   else                                                NextWalkerState = L0_ADR; |                   else                                                NextWalkerState = L0_ADR; | ||||||
|       L0_ADR:     if (ValidNonLeafPTE)                                NextWalkerState = L0_RD; |       L0_ADR:     if (ValidNonLeafPTE)                                NextWalkerState = L0_RD; | ||||||
|                   else                                                NextWalkerState = LEAF; |                   else                                                NextWalkerState = LEAF; | ||||||
|       L0_RD:      if (DCacheStallM)                                   NextWalkerState = L0_RD; |       L0_RD:      if (DCacheStallM)                                   NextWalkerState = L0_RD; | ||||||
|  |                   else if(LSUAccessFaultM)                            NextWalkerState = IDLE; | ||||||
|                   else                                                NextWalkerState = LEAF; |                   else                                                NextWalkerState = LEAF; | ||||||
|       LEAF:       if (`SVADU_SUPPORTED & HPTWUpdateDA)                NextWalkerState = UPDATE_PTE; |       LEAF:       if (`SVADU_SUPPORTED & HPTWUpdateDA)                NextWalkerState = UPDATE_PTE; | ||||||
|                   else                                                NextWalkerState = IDLE; |                   else                                                NextWalkerState = IDLE; | ||||||
| @ -273,7 +290,8 @@ module hptw ( | |||||||
| 
 | 
 | ||||||
|   assign IgnoreRequestTLB = WalkerState == IDLE & TLBMiss; |   assign IgnoreRequestTLB = WalkerState == IDLE & TLBMiss; | ||||||
|   assign SelHPTW = WalkerState != IDLE; |   assign SelHPTW = WalkerState != IDLE; | ||||||
|   assign HPTWStall = (WalkerState != IDLE) | (WalkerState == IDLE & TLBMiss); |   assign HPTWAccessFaultDelay = HPTWLoadAccessFaultDelay | HPTWStoreAmoAccessFaultDelay | HPTWInstrAccessFaultDelay; | ||||||
|  |   assign HPTWStall = (WalkerState != IDLE) | (WalkerState == IDLE & TLBMiss & ~(HPTWAccessFaultDelay)); | ||||||
| 
 | 
 | ||||||
|   assign ITLBMissOrUpdateDAF = ITLBMissF | (`SVADU_SUPPORTED & InstrUpdateDAF); |   assign ITLBMissOrUpdateDAF = ITLBMissF | (`SVADU_SUPPORTED & InstrUpdateDAF); | ||||||
|   assign DTLBMissOrUpdateDAM = DTLBMissM | (`SVADU_SUPPORTED & DataUpdateDAM);   |   assign DTLBMissOrUpdateDAM = DTLBMissM | (`SVADU_SUPPORTED & DataUpdateDAM);   | ||||||
|  | |||||||
| @ -65,7 +65,7 @@ module privileged ( | |||||||
|   // fault sources                                                         
 |   // fault sources                                                         
 | ||||||
|   input  logic             InstrAccessFaultF,                              // instruction access fault
 |   input  logic             InstrAccessFaultF,                              // instruction access fault
 | ||||||
|   input  logic             LoadAccessFaultM, StoreAmoAccessFaultM,         // load or store access fault
 |   input  logic             LoadAccessFaultM, StoreAmoAccessFaultM,         // load or store access fault
 | ||||||
|   input  logic             HPTWInstrAccessFaultM,                          // hardware page table access fault while fetching instruction PTE
 |   input  logic             HPTWInstrAccessFaultF,                          // hardware page table access fault while fetching instruction PTE
 | ||||||
|   input  logic             InstrPageFaultF,                                // page faults
 |   input  logic             InstrPageFaultF,                                // page faults
 | ||||||
|   input  logic             LoadPageFaultM, StoreAmoPageFaultM,             // page faults
 |   input  logic             LoadPageFaultM, StoreAmoPageFaultM,             // page faults
 | ||||||
|   input  logic             InstrMisalignedFaultM,                          // misaligned instruction fault
 |   input  logic             InstrMisalignedFaultM,                          // misaligned instruction fault
 | ||||||
| @ -112,6 +112,8 @@ module privileged ( | |||||||
|   logic                    DelegateM;                                      // trap should be delegated
 |   logic                    DelegateM;                                      // trap should be delegated
 | ||||||
|   logic                    InterruptM;                                     // interrupt occuring
 |   logic                    InterruptM;                                     // interrupt occuring
 | ||||||
|   logic                    ExceptionM;                                     // Memory stage instruction caused a fault
 |   logic                    ExceptionM;                                     // Memory stage instruction caused a fault
 | ||||||
|  |   logic                    HPTWInstrAccessFaultM;                          // Hardware page table access fault while fetching instruction PTE
 | ||||||
|  |    | ||||||
|   |   | ||||||
|   // track the current privilege level
 |   // track the current privilege level
 | ||||||
|   privmode privmode(.clk, .reset, .StallW, .TrapM, .mretM, .sretM, .DelegateM, |   privmode privmode(.clk, .reset, .StallW, .TrapM, .mretM, .sretM, .DelegateM, | ||||||
| @ -142,8 +144,8 @@ module privileged ( | |||||||
| 
 | 
 | ||||||
|   // pipeline early-arriving trap sources
 |   // pipeline early-arriving trap sources
 | ||||||
|   privpiperegs ppr(.clk, .reset, .StallD, .StallE, .StallM, .FlushD, .FlushE, .FlushM, |   privpiperegs ppr(.clk, .reset, .StallD, .StallE, .StallM, .FlushD, .FlushE, .FlushM, | ||||||
|     .InstrPageFaultF, .InstrAccessFaultF, .IllegalIEUFPUInstrD,  |     .InstrPageFaultF, .InstrAccessFaultF, .HPTWInstrAccessFaultF, .IllegalIEUFPUInstrD,  | ||||||
|     .InstrPageFaultM, .InstrAccessFaultM, .IllegalIEUFPUInstrM); |     .InstrPageFaultM, .InstrAccessFaultM, .HPTWInstrAccessFaultM, .IllegalIEUFPUInstrM); | ||||||
| 
 | 
 | ||||||
|   // trap logic
 |   // trap logic
 | ||||||
|   trap trap(.reset, |   trap trap(.reset, | ||||||
|  | |||||||
| @ -33,24 +33,26 @@ module privpiperegs ( | |||||||
|   input  logic         StallD, StallE, StallM, |   input  logic         StallD, StallE, StallM, | ||||||
|   input  logic         FlushD, FlushE, FlushM, |   input  logic         FlushD, FlushE, FlushM, | ||||||
|   input  logic         InstrPageFaultF, InstrAccessFaultF,  // instruction faults
 |   input  logic         InstrPageFaultF, InstrAccessFaultF,  // instruction faults
 | ||||||
|  |   input  logic         HPTWInstrAccessFaultF,               // hptw fault during instruction page fetch
 | ||||||
|   input  logic         IllegalIEUFPUInstrD,                 // illegal IEU instruction decoded
 |   input  logic         IllegalIEUFPUInstrD,                 // illegal IEU instruction decoded
 | ||||||
|   output logic         InstrPageFaultM, InstrAccessFaultM,  // delayed instruction faults
 |   output logic         InstrPageFaultM, InstrAccessFaultM,  // delayed instruction faults
 | ||||||
|   output logic         IllegalIEUFPUInstrM                  // delayed illegal IEU instruction
 |   output logic         IllegalIEUFPUInstrM,                 // delayed illegal IEU instruction
 | ||||||
|  |   output logic         HPTWInstrAccessFaultM                // hptw fault during instruction page fetch
 | ||||||
| ); | ); | ||||||
| 
 | 
 | ||||||
|   // Delayed fault signals
 |   // Delayed fault signals
 | ||||||
|   logic                InstrPageFaultD, InstrAccessFaultD; |   logic                InstrPageFaultD, InstrAccessFaultD, HPTWInstrAccessFaultD; | ||||||
|   logic                InstrPageFaultE, InstrAccessFaultE; |   logic                InstrPageFaultE, InstrAccessFaultE, HPTWInstrAccessFaultE; | ||||||
|   logic                IllegalIEUFPUInstrE;  |   logic                IllegalIEUFPUInstrE;  | ||||||
| 
 | 
 | ||||||
|   // pipeline fault signals
 |   // pipeline fault signals
 | ||||||
|   flopenrc #(2) faultregD(clk, reset, FlushD, ~StallD, |   flopenrc #(3) faultregD(clk, reset, FlushD, ~StallD, | ||||||
|                   {InstrPageFaultF, InstrAccessFaultF}, |                   {InstrPageFaultF, InstrAccessFaultF, HPTWInstrAccessFaultF}, | ||||||
|                   {InstrPageFaultD, InstrAccessFaultD}); |                   {InstrPageFaultD, InstrAccessFaultD, HPTWInstrAccessFaultD}); | ||||||
|   flopenrc #(3) faultregE(clk, reset, FlushE, ~StallE, |   flopenrc #(4) faultregE(clk, reset, FlushE, ~StallE, | ||||||
|                   {IllegalIEUFPUInstrD, InstrPageFaultD, InstrAccessFaultD},  |                   {IllegalIEUFPUInstrD, InstrPageFaultD, InstrAccessFaultD, HPTWInstrAccessFaultD},  | ||||||
|                   {IllegalIEUFPUInstrE, InstrPageFaultE, InstrAccessFaultE}); |                   {IllegalIEUFPUInstrE, InstrPageFaultE, InstrAccessFaultE, HPTWInstrAccessFaultE}); | ||||||
|   flopenrc #(3) faultregM(clk, reset, FlushM, ~StallM, |   flopenrc #(4) faultregM(clk, reset, FlushM, ~StallM, | ||||||
|                   {IllegalIEUFPUInstrE, InstrPageFaultE, InstrAccessFaultE}, |                   {IllegalIEUFPUInstrE, InstrPageFaultE, InstrAccessFaultE, HPTWInstrAccessFaultE}, | ||||||
|                   {IllegalIEUFPUInstrM, InstrPageFaultM, InstrAccessFaultM}); |                   {IllegalIEUFPUInstrM, InstrPageFaultM, InstrAccessFaultM, HPTWInstrAccessFaultM}); | ||||||
| endmodule | endmodule | ||||||
|  | |||||||
| @ -146,7 +146,7 @@ module wallypipelinedcore ( | |||||||
|   logic                          RASPredPCWrongM; |   logic                          RASPredPCWrongM; | ||||||
|   logic                          IClassWrongM; |   logic                          IClassWrongM; | ||||||
|   logic [3:0]                    InstrClassM; |   logic [3:0]                    InstrClassM; | ||||||
|   logic                          InstrAccessFaultF, HPTWInstrAccessFaultM; |   logic                          InstrAccessFaultF, HPTWInstrAccessFaultF; | ||||||
|   logic [2:0]                    LSUHSIZE; |   logic [2:0]                    LSUHSIZE; | ||||||
|   logic [2:0]                    LSUHBURST; |   logic [2:0]                    LSUHBURST; | ||||||
|   logic [1:0]                    LSUHTRANS; |   logic [1:0]                    LSUHTRANS; | ||||||
| @ -237,7 +237,7 @@ module wallypipelinedcore ( | |||||||
|     .StoreAmoPageFaultM, // connects to privilege
 |     .StoreAmoPageFaultM, // connects to privilege
 | ||||||
|     .LoadMisalignedFaultM, // connects to privilege
 |     .LoadMisalignedFaultM, // connects to privilege
 | ||||||
|     .LoadAccessFaultM,         // connects to privilege
 |     .LoadAccessFaultM,         // connects to privilege
 | ||||||
|     .HPTWInstrAccessFaultM,         // connects to privilege
 |     .HPTWInstrAccessFaultF,         // connects to privilege
 | ||||||
|     .StoreAmoMisalignedFaultM, // connects to privilege
 |     .StoreAmoMisalignedFaultM, // connects to privilege
 | ||||||
|     .StoreAmoAccessFaultM,     // connects to privilege
 |     .StoreAmoAccessFaultM,     // connects to privilege
 | ||||||
|     .InstrUpdateDAF, |     .InstrUpdateDAF, | ||||||
| @ -289,7 +289,7 @@ module wallypipelinedcore ( | |||||||
|       .LoadMisalignedFaultM, .StoreAmoMisalignedFaultM, |       .LoadMisalignedFaultM, .StoreAmoMisalignedFaultM, | ||||||
|       .MTimerInt, .MExtInt, .SExtInt, .MSwInt, |       .MTimerInt, .MExtInt, .SExtInt, .MSwInt, | ||||||
|       .MTIME_CLINT, .IEUAdrM, .SetFflagsM, |       .MTIME_CLINT, .IEUAdrM, .SetFflagsM, | ||||||
|       .InstrAccessFaultF, .HPTWInstrAccessFaultM, .LoadAccessFaultM, .StoreAmoAccessFaultM, .SelHPTW, |       .InstrAccessFaultF, .HPTWInstrAccessFaultF, .LoadAccessFaultM, .StoreAmoAccessFaultM, .SelHPTW, | ||||||
|       .PrivilegeModeW, .SATP_REGW, |       .PrivilegeModeW, .SATP_REGW, | ||||||
|       .STATUS_MXR, .STATUS_SUM, .STATUS_MPRV, .STATUS_MPP, .STATUS_FS, |       .STATUS_MXR, .STATUS_SUM, .STATUS_MPRV, .STATUS_MPP, .STATUS_FS, | ||||||
|       .PMPCFG_ARRAY_REGW, .PMPADDR_ARRAY_REGW,  |       .PMPCFG_ARRAY_REGW, .PMPADDR_ARRAY_REGW,  | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user