aboutsummaryrefslogtreecommitdiff
path: root/rv64cpu/rtl/core/include/csr_pkg.sv
diff options
context:
space:
mode:
authorRichard Qin <richard.qin.x@gmail.com>2026-11-07 02:59:33 +0800
committerRichard Qin <richard.qin.x@gmail.com>2026-11-07 02:59:33 +0800
commitbc3ec25107314be3cd816c0b669d82338e892806 (patch)
treeff3e69ce6be1218be8bd0dd04e0c75760776d7dc /rv64cpu/rtl/core/include/csr_pkg.sv
parentc67ba709482821f37d63601b001ac07e6db867b6 (diff)
downloadrcc-project-bc3ec25107314be3cd816c0b669d82338e892806.tar.gz
rcc-project-bc3ec25107314be3cd816c0b669d82338e892806.tar.xz
checkpoint: preserve current RV64 CPU development state
Diffstat (limited to 'rv64cpu/rtl/core/include/csr_pkg.sv')
-rw-r--r--rv64cpu/rtl/core/include/csr_pkg.sv115
1 files changed, 115 insertions, 0 deletions
diff --git a/rv64cpu/rtl/core/include/csr_pkg.sv b/rv64cpu/rtl/core/include/csr_pkg.sv
index a908538..d1f9416 100644
--- a/rv64cpu/rtl/core/include/csr_pkg.sv
+++ b/rv64cpu/rtl/core/include/csr_pkg.sv
@@ -41,6 +41,7 @@ package csr_pkg;
localparam logic [11:0] CSR_MARCHID = 12'hF12; // Architecture ID
localparam logic [11:0] CSR_MIMPID = 12'hF13; // Implementation ID
localparam logic [11:0] CSR_MHARTID = 12'hF14; // Hart ID
+ localparam logic [11:0] CSR_MCONFIGPTR= 12'hF15; // Machine Configuration Pointer
localparam logic [11:0] CSR_MSTATUS = 12'h300; // Machine Status Register
localparam logic [11:0] CSR_MISA = 12'h301; // Machine ISA Register
@@ -50,14 +51,32 @@ package csr_pkg;
localparam logic [11:0] CSR_MTVEC = 12'h305; // Machine Trap Vector Register
localparam logic [11:0] CSR_MCOUNTEREN= 12'h306; // Machine Counter Enable Register
+ localparam logic [11:0] CSR_MENVCFG = 12'h30A; // Machine Environment Configuration
+ localparam logic [11:0] CSR_MSTATEEN0 = 12'h30C; // Machine State Enable 0
+ localparam logic [11:0] CSR_MSTATEEN1 = 12'h30D; // Machine State Enable 1
+ localparam logic [11:0] CSR_MSTATEEN2 = 12'h30E; // Machine State Enable 2
+ localparam logic [11:0] CSR_MSTATEEN3 = 12'h30F; // Machine State Enable 3
+
+ localparam logic [11:0] CSR_PMPCFG0 = 12'h3A0; // PMP Configuration Register 0
+ localparam logic [11:0] CSR_PMPCFG15 = 12'h3AF; // PMP Configuration Register 15
+ localparam logic [11:0] CSR_PMPADDR0 = 12'h3B0; // PMP Address Register 0
+ localparam logic [11:0] CSR_PMPADDR63 = 12'h3EF; // PMP Address Register 63
+
localparam logic [11:0] CSR_MSCRATCH = 12'h340; // Machine Scratch Register
localparam logic [11:0] CSR_MEPC = 12'h341; // Machine Exception Program Counter
localparam logic [11:0] CSR_MCAUSE = 12'h342; // Machine Cause Register
localparam logic [11:0] CSR_MTVAL = 12'h343; // Machine Trap Value Register
localparam logic [11:0] CSR_MIP = 12'h344; // Machine Interrupt Pending Register
+ localparam logic [11:0] CSR_MTINST = 12'h34A; // Machine Trap Instruction
+ localparam logic [11:0] CSR_MTVAL2 = 12'h34B; // Machine Second Trap Value
+ localparam logic [11:0] CSR_MCOUNTINHIBIT = 12'h320; // Machine Counter-Inhibit Register
localparam logic [11:0] CSR_MCYCLE = 12'hB00; // Machine Cycle Counter
localparam logic [11:0] CSR_MINSTRET = 12'hB02; // Machine Instruction Retired Counter
+ localparam logic [11:0] CSR_MHPMCOUNTER3 = 12'hB03; // Machine HPM Counter 3
+ localparam logic [11:0] CSR_MHPMCOUNTER31 = 12'hB1F; // Machine HPM Counter 31
+ localparam logic [11:0] CSR_MHPMEVENT3 = 12'h323; // Machine HPM Event Selector 3
+ localparam logic [11:0] CSR_MHPMEVENT31 = 12'h33F; // Machine HPM Event Selector 31
// ---------------------------------
// Supervisor Mode CSRs (S-Mode)
@@ -66,6 +85,11 @@ package csr_pkg;
localparam logic [11:0] CSR_SIE = 12'h104; // Supervisor Interrupt Enable Register
localparam logic [11:0] CSR_STVEC = 12'h105; // Supervisor Trap Vector Register
localparam logic [11:0] CSR_SCOUNTEREN= 12'h106; // Supervisor Counter Enable Register
+ localparam logic [11:0] CSR_SENVCFG = 12'h10A; // Supervisor Environment Configuration
+ localparam logic [11:0] CSR_SSTATEEN0 = 12'h10C; // Supervisor State Enable 0
+ localparam logic [11:0] CSR_SSTATEEN1 = 12'h10D; // Supervisor State Enable 1
+ localparam logic [11:0] CSR_SSTATEEN2 = 12'h10E; // Supervisor State Enable 2
+ localparam logic [11:0] CSR_SSTATEEN3 = 12'h10F; // Supervisor State Enable 3
localparam logic [11:0] CSR_SSCRATCH = 12'h140; // Supervisor Scratch Register
localparam logic [11:0] CSR_SEPC = 12'h141; // Supervisor Exception Program Counter
localparam logic [11:0] CSR_SCAUSE = 12'h142; // Supervisor Cause Register
@@ -74,11 +98,45 @@ package csr_pkg;
localparam logic [11:0] CSR_SATP = 12'h180; // Supervisor Address Translation and Protection Register
// ---------------------------------
+ // Hypervisor CSRs (H-Extension)
+ // ---------------------------------
+ localparam logic [11:0] CSR_HSTATUS = 12'h600; // Hypervisor Status
+ localparam logic [11:0] CSR_HEDELEG = 12'h602; // Hypervisor Exception Delegation
+ localparam logic [11:0] CSR_HIDELEG = 12'h603; // Hypervisor Interrupt Delegation
+ localparam logic [11:0] CSR_HIE = 12'h604; // Hypervisor Interrupt Enable
+ localparam logic [11:0] CSR_HTIMEDELTA = 12'h605; // Hypervisor Timer Delta
+ localparam logic [11:0] CSR_HCOUNTEREN = 12'h606; // Hypervisor Counter Enable
+ localparam logic [11:0] CSR_HGEIE = 12'h607; // Hypervisor Guest External Interrupt Enable
+ localparam logic [11:0] CSR_HENVCFG = 12'h60A; // Hypervisor Environment Configuration
+ localparam logic [11:0] CSR_HSTATEEN0 = 12'h60C; // Hypervisor State Enable 0
+ localparam logic [11:0] CSR_HSTATEEN1 = 12'h60D; // Hypervisor State Enable 1
+ localparam logic [11:0] CSR_HSTATEEN2 = 12'h60E; // Hypervisor State Enable 2
+ localparam logic [11:0] CSR_HSTATEEN3 = 12'h60F; // Hypervisor State Enable 3
+ localparam logic [11:0] CSR_HTVAL = 12'h643; // Hypervisor Trap Value
+ localparam logic [11:0] CSR_HIP = 12'h644; // Hypervisor Interrupt Pending
+ localparam logic [11:0] CSR_HVIP = 12'h645; // Hypervisor Virtual Interrupt Pending
+ localparam logic [11:0] CSR_HTINST = 12'h64A; // Hypervisor Trap Instruction
+ localparam logic [11:0] CSR_HGATP = 12'h680; // Hypervisor Guest Address Translation and Protection
+ localparam logic [11:0] CSR_HGEIP = 12'hE12; // Hypervisor Guest External Interrupt Pending
+
+ localparam logic [11:0] CSR_VSSTATUS = 12'h200; // Virtual Supervisor Status
+ localparam logic [11:0] CSR_VSIE = 12'h204; // Virtual Supervisor Interrupt Enable
+ localparam logic [11:0] CSR_VSTVEC = 12'h205; // Virtual Supervisor Trap Vector
+ localparam logic [11:0] CSR_VSSCRATCH = 12'h240; // Virtual Supervisor Scratch
+ localparam logic [11:0] CSR_VSEPC = 12'h241; // Virtual Supervisor Exception PC
+ localparam logic [11:0] CSR_VSCAUSE = 12'h242; // Virtual Supervisor Cause
+ localparam logic [11:0] CSR_VSTVAL = 12'h243; // Virtual Supervisor Trap Value
+ localparam logic [11:0] CSR_VSIP = 12'h244; // Virtual Supervisor Interrupt Pending
+ localparam logic [11:0] CSR_VSATP = 12'h280; // Virtual Supervisor Address Translation and Protection
+
+ // ---------------------------------
// User Mode CSRs (U-Mode / URW)
// ---------------------------------
localparam logic [11:0] CSR_CYCLE = 12'hC00; // Cycle Counter
localparam logic [11:0] CSR_TIME = 12'hC01; // Timer Counter
localparam logic [11:0] CSR_INSTRET = 12'hC02; // Instruction Retired Counter
+ localparam logic [11:0] CSR_HPMCOUNTER3 = 12'hC03; // HPM Counter 3
+ localparam logic [11:0] CSR_HPMCOUNTER31 = 12'hC1F; // HPM Counter 31
// ---------------------------------
// Exception Cause Codes (mcause.Interrupt == 0)
@@ -98,6 +156,23 @@ package csr_pkg;
localparam logic [XLEN-1:0] EXC_LOAD_PAGE_FAULT = 64'd13; // Load Page Fault
localparam logic [XLEN-1:0] EXC_STORE_PAGE_FAULT = 64'd15; // Store Page Fault
+ localparam logic [XLEN-1:0] MEDELEG_WRITABLE_MASK =
+ (64'h1 << EXC_INST_ADDR_MISALIGNED) |
+ (64'h1 << EXC_INST_FAULT) |
+ (64'h1 << EXC_INST_ILLEGAL) |
+ (64'h1 << EXC_BREAKPOINT) |
+ (64'h1 << EXC_LOAD_ADDR_MISALIGNED) |
+ (64'h1 << EXC_LOAD_FAULT) |
+ (64'h1 << EXC_STORE_ADDR_MISALIGNED) |
+ (64'h1 << EXC_STORE_FAULT) |
+ (64'h1 << EXC_ECALL_FROM_U) |
+ (64'h1 << EXC_ECALL_FROM_S) |
+ (64'h1 << EXC_INSTR_PAGE_FAULT) |
+ (64'h1 << EXC_LOAD_PAGE_FAULT) |
+ (64'h1 << EXC_STORE_PAGE_FAULT);
+
+ localparam logic [XLEN-1:0] MEDELEG_READ_ONLY_ONE_MASK = '0;
+
// ---------------------------------
// Interrupt Cause Codes (mcause.Interrupt == 1)
// ---------------------------------
@@ -114,4 +189,44 @@ package csr_pkg;
localparam logic [XLEN-1:0] INTERRUPT_M_TIMER = 64'd7; // Machine Mode Timer Interrupt
localparam logic [XLEN-1:0] INTERRUPT_M_EXTERNAL = 64'd11; // Machine Mode External Interrupt
+ localparam logic [XLEN-1:0] MIDELEG_WRITABLE_MASK =
+ (64'h1 << INTERRUPT_S_SOFTWARE) |
+ (64'h1 << INTERRUPT_S_TIMER) |
+ (64'h1 << INTERRUPT_S_EXTERNAL);
+
+ // ---------------------------------
+ // Physical Memory Protection (PMP)
+ // ---------------------------------
+ localparam int PMP_ENTRY_COUNT = 64;
+ localparam int PMP_CFG_CSR_COUNT = 16;
+ localparam int PMP_CFG_ENTRIES_PER_RV64_CSR = 8;
+
+ typedef logic [7:0] pmpcfg_entry_t;
+ typedef logic [XLEN-1:0] pmpaddr_entry_t;
+
+ localparam int PMPCFG_R_BIT = 0;
+ localparam int PMPCFG_W_BIT = 1;
+ localparam int PMPCFG_X_BIT = 2;
+ localparam int PMPCFG_A_LO = 3;
+ localparam int PMPCFG_A_HI = 4;
+ localparam int PMPCFG_L_BIT = 7;
+
+ localparam logic [1:0] PMP_MODE_OFF = 2'b00;
+ localparam logic [1:0] PMP_MODE_TOR = 2'b01;
+ localparam logic [1:0] PMP_MODE_NA4 = 2'b10;
+ localparam logic [1:0] PMP_MODE_NAPOT = 2'b11;
+
+ // ---------------------------------
+ // Environment Configuration / State Enable
+ // ---------------------------------
+ localparam int ENVCFG_FIOM_BIT = 0;
+ localparam int ENVCFG_CBIE_LO = 4;
+ localparam int ENVCFG_CBIE_HI = 5;
+ localparam int ENVCFG_CBCFE_BIT = 6;
+ localparam int ENVCFG_CBZE_BIT = 7;
+ localparam int ENVCFG_PMM_LO = 32;
+ localparam int ENVCFG_PMM_HI = 33;
+ localparam int STATEEN0_ENVCFG_BIT = 62;
+ localparam int STATEEN_SE0_BIT = 63;
+
endpackage