aboutsummaryrefslogtreecommitdiff
path: root/rv64cpu/rtl/core/include/csr_pkg.sv
blob: a225da23d40c0cc76efceba89b4485332377465f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
//     Richard CPU
//     Copyright (C) 2026  Richard Qin

//     This program is free software: you can redistribute it and/or modify
//     it under the terms of the GNU General Public License as published by
//     the Free Software Foundation, either version 3 of the License, or
//     (at your option) any later version.

//     This program is distributed in the hope that it will be useful,
//     but WITHOUT ANY WARRANTY; without even the implied warranty of
//     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//     GNU General Public License for more details.

//     You should have received a copy of the GNU General Public License
//     along with this program.  If not, see <https://www.gnu.org/licenses/>.

// File path: rtl/core/include/csr_pkg.sv
// Description: Global enumerations, address definitions, and exception reason constants related to CSR and privilege-level architecture

package csr_pkg;
    import rv64_pkg::*;

    typedef enum logic [2:0] { 
        CSR_OP_NONE  = 3'b000,
        CSR_OP_WRITE = 3'b001,
        CSR_OP_SET   = 3'b010,
        CSR_OP_CLEAR = 3'b011
    } csr_op_t;

    // ---------------------------------
    // Floating-Point CSRs
    // ---------------------------------
    localparam logic [11:0]     CSR_FFLAGS   = 12'h001;    // Floating-Point accrued exception flags
    localparam logic [11:0]     CSR_FRM      = 12'h002;    // Floating-Point dynamic rounding mode
    localparam logic [11:0]     CSR_FCSR     = 12'h003;    // Combined fflags/frm register

    // ---------------------------------
    // Machine Mode CSRs (M-Mode)
    // ---------------------------------
    localparam logic [11:0]     CSR_MVENDORID = 12'hF11;    // Vendor ID
    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_MSTATUS   = 12'h300;    // Machine Status Register
    localparam logic [11:0]     CSR_MISA      = 12'h301;    // Machine ISA Register
    localparam logic [11:0]     CSR_MEDELEG   = 12'h302;    // Exception Delegation
    localparam logic [11:0]     CSR_MIDELEG   = 12'h303;    // Interrupt Delegation
    localparam logic [11:0]     CSR_MIE       = 12'h304;    // Machine Interrupt Enable Register
    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_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_MCYCLE    = 12'hB00;    // Machine Cycle Counter
    localparam logic [11:0]     CSR_MINSTRET  = 12'hB02;    // Machine Instruction Retired Counter

    // ---------------------------------
    // Supervisor Mode CSRs (S-Mode)
    // ---------------------------------
    localparam logic [11:0]     CSR_SSTATUS   = 12'h100;    // Supervisor Status Register
    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_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
    localparam logic [11:0]     CSR_STVAL     = 12'h143;    // Supervisor Trap Value Register
    localparam logic [11:0]     CSR_SIP       = 12'h144;    // Supervisor Interrupt Pending Register
    localparam logic [11:0]     CSR_SATP      = 12'h180;    // Supervisor Address Translation and Protection Register

    // ---------------------------------
    // 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

    // ---------------------------------
    // Exception Cause Codes (mcause.Interrupt == 0)
    // ---------------------------------
    localparam logic [XLEN-1:0] EXC_INST_ADDR_MISALIGNED        = 64'd0;    // Instruction Address Misaligned
    localparam logic [XLEN-1:0] EXC_INST_FAULT                  = 64'd1;    // Instruction Access Fault
    localparam logic [XLEN-1:0] EXC_INST_ILLEGAL                = 64'd2;    // Illegal Instruction
    localparam logic [XLEN-1:0] EXC_BREAKPOINT                  = 64'd3;    // Breakpoint
    localparam logic [XLEN-1:0] EXC_LOAD_ADDR_MISALIGNED        = 64'd4;    // Load Address Misaligned
    localparam logic [XLEN-1:0] EXC_LOAD_FAULT                  = 64'd5;    // Load Access Fault
    localparam logic [XLEN-1:0] EXC_STORE_ADDR_MISALIGNED       = 64'd6;    // Store Address Misaligned
    localparam logic [XLEN-1:0] EXC_STORE_FAULT                 = 64'd7;    // Store Access Fault
    localparam logic [XLEN-1:0] EXC_ECALL_FROM_U                = 64'd8;    // Environment Call from U-Mode
    localparam logic [XLEN-1:0] EXC_ECALL_FROM_S                = 64'd9;    // Environment Call from S-Mode
    localparam logic [XLEN-1:0] EXC_ECALL_FROM_M                = 64'd11;   // Environment Call from M-Mode
    localparam logic [XLEN-1:0] EXC_INSTR_PAGE_FAULT            = 64'd12;   // Instruction Page Fault
    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

    // ---------------------------------
    // Interrupt Cause Codes (mcause.Interrupt == 1)
    // ---------------------------------
    // User Mode Interrupts
    localparam logic [XLEN-1:0] INT_U_SOFTWARE                  = 64'd0;    // User Mode Software Interrupt
    localparam logic [XLEN-1:0] INT_U_TIMER                     = 64'd4;    // User Mode Timer Interrupt
    localparam logic [XLEN-1:0] INT_U_EXTERNAL                  = 64'd8;    // User Mode External Interrupt
    // Supervisor Mode Interrupts
    localparam logic [XLEN-1:0] INT_S_SOFTWARE                  = 64'd1;    // Supervisor Mode Software Interrupt
    localparam logic [XLEN-1:0] INT_S_TIMER                     = 64'd5;    // Supervisor Mode Timer Interrupt
    localparam logic [XLEN-1:0] INT_S_EXTERNAL                  = 64'd9;    // Supervisor Mode External Interrupt
    // Machine Mode Interrupts
    localparam logic [XLEN-1:0] INT_M_SOFTWARE                  = 64'd3;    // Machine Mode Software Interrupt
    localparam logic [XLEN-1:0] INT_M_TIMER                     = 64'd7;    // Machine Mode Timer Interrupt
    localparam logic [XLEN-1:0] INT_M_EXTERNAL                  = 64'd11;   // Machine Mode External Interrupt

endpackage