feat: implement privileged mode support
This commit is contained in:
@@ -8,37 +8,203 @@ module CSRFile(
|
||||
input [63:0] io_cmd_rs1,
|
||||
input [4:0] io_cmd_zimm,
|
||||
input [11:0] io_readAddr,
|
||||
input [1:0] io_currentPriv,
|
||||
output [63:0] io_rdata,
|
||||
output io_readIllegal,
|
||||
input io_trap,
|
||||
input [63:0] io_trapPc,
|
||||
io_trapCause,
|
||||
io_trapTval,
|
||||
input [1:0] io_trapTargetPriv,
|
||||
output [63:0] io_trapVector,
|
||||
input io_xret,
|
||||
io_xretIsMret,
|
||||
output [63:0] io_satp,
|
||||
io_mtvec,
|
||||
io_mepc
|
||||
io_mepc,
|
||||
io_sepc,
|
||||
io_medeleg,
|
||||
io_mstatus
|
||||
);
|
||||
|
||||
reg [63:0] cycle;
|
||||
reg [63:0] mstatus;
|
||||
reg [63:0] mtvecReg;
|
||||
reg [63:0] mepcReg;
|
||||
reg [63:0] mcause;
|
||||
reg [63:0] mtval;
|
||||
reg [63:0] medeleg;
|
||||
reg [63:0] mideleg;
|
||||
reg [63:0] mie;
|
||||
reg [63:0] mip;
|
||||
reg [63:0] sstatus;
|
||||
reg [63:0] stvec;
|
||||
reg [63:0] sepc;
|
||||
reg [63:0] scause;
|
||||
reg [63:0] stval;
|
||||
reg [63:0] sscratch;
|
||||
reg [63:0] satpReg;
|
||||
reg [63:0] cycle;
|
||||
reg [63:0] instret;
|
||||
reg [63:0] mcountinhibit;
|
||||
reg suppressInstretAfterWrite;
|
||||
reg [63:0] mstatus;
|
||||
reg [63:0] mtvecReg;
|
||||
reg [63:0] mscratch;
|
||||
reg [63:0] mepcReg;
|
||||
reg [63:0] mcause;
|
||||
reg [63:0] mtval;
|
||||
reg [63:0] medeleg;
|
||||
reg [63:0] mideleg;
|
||||
reg [63:0] mie;
|
||||
reg [63:0] mip;
|
||||
reg [63:0] mcounteren;
|
||||
reg [63:0] pmpcfg0;
|
||||
reg [63:0] pmpaddr0;
|
||||
reg [63:0] tdata1;
|
||||
reg [63:0] tdata2;
|
||||
reg [63:0] tcontrol;
|
||||
reg [63:0] mnstatus;
|
||||
reg [63:0] scounteren;
|
||||
reg [63:0] stvec;
|
||||
reg [63:0] sepc;
|
||||
reg [63:0] scause;
|
||||
reg [63:0] stval;
|
||||
reg [63:0] sscratch;
|
||||
reg [63:0] satpReg;
|
||||
wire _readAllowed_T_75 = io_readAddr == 12'h300;
|
||||
wire _readAllowed_T_76 = io_readAddr == 12'h301;
|
||||
wire _readAllowed_T_78 = io_readAddr == 12'h302;
|
||||
wire _readAllowed_T_80 = io_readAddr == 12'h303;
|
||||
wire _readAllowed_T_82 = io_readAddr == 12'h304;
|
||||
wire _readAllowed_T_84 = io_readAddr == 12'h305;
|
||||
wire _readAllowed_T_86 = io_readAddr == 12'h306;
|
||||
wire _readAllowed_T_88 = io_readAddr == 12'h340;
|
||||
wire _readAllowed_T_90 = io_readAddr == 12'h341;
|
||||
wire _readAllowed_T_92 = io_readAddr == 12'h342;
|
||||
wire _readAllowed_T_94 = io_readAddr == 12'h343;
|
||||
wire _readAllowed_T_96 = io_readAddr == 12'h344;
|
||||
wire _readAllowed_T_98 = io_readAddr == 12'h3A0;
|
||||
wire _readAllowed_T_100 = io_readAddr == 12'h3B0;
|
||||
wire _readAllowed_T_102 = io_readAddr == 12'h7A0;
|
||||
wire _readAllowed_T_104 = io_readAddr == 12'h7A1;
|
||||
wire _readAllowed_T_106 = io_readAddr == 12'h7A2;
|
||||
wire _readAllowed_T_108 = io_readAddr == 12'h7A5;
|
||||
wire _readAllowed_T_110 = io_readAddr == 12'h744;
|
||||
wire _readAllowed_T_112 = io_readAddr == 12'h320;
|
||||
wire _readAllowed_T_114 = io_readAddr == 12'hB02;
|
||||
wire _readAllowed_T_116 = io_readAddr == 12'hF11;
|
||||
wire _readAllowed_T_118 = io_readAddr == 12'hF12;
|
||||
wire _readAllowed_T_120 = io_readAddr == 12'hF13;
|
||||
wire _readAllowed_T_122 = io_readAddr == 12'hF14;
|
||||
wire _readAllowed_T_125 = io_readAddr == 12'h100;
|
||||
wire _readAllowed_T_126 = io_readAddr == 12'h104;
|
||||
wire _readAllowed_T_128 = io_readAddr == 12'h105;
|
||||
wire _readAllowed_T_130 = io_readAddr == 12'h140;
|
||||
wire _readAllowed_T_132 = io_readAddr == 12'h106;
|
||||
wire _readAllowed_T_134 = io_readAddr == 12'h141;
|
||||
wire _readAllowed_T_136 = io_readAddr == 12'h142;
|
||||
wire _readAllowed_T_138 = io_readAddr == 12'h143;
|
||||
wire _readAllowed_T_140 = io_readAddr == 12'h144;
|
||||
wire _readAllowed_T_142 = io_readAddr == 12'h180;
|
||||
wire _readAllowed_T_69 = io_readAddr == 12'hC00;
|
||||
wire _readAllowed_T_70 = io_readAddr == 12'hC01;
|
||||
wire _readAllowed_T_72 = io_readAddr == 12'hC02;
|
||||
wire readAllowed =
|
||||
(_readAllowed_T_75 | _readAllowed_T_76 | _readAllowed_T_78 | _readAllowed_T_80
|
||||
| _readAllowed_T_82 | _readAllowed_T_84 | _readAllowed_T_86 | _readAllowed_T_88
|
||||
| _readAllowed_T_90 | _readAllowed_T_92 | _readAllowed_T_94 | _readAllowed_T_96
|
||||
| _readAllowed_T_98 | _readAllowed_T_100 | _readAllowed_T_102 | _readAllowed_T_104
|
||||
| _readAllowed_T_106 | _readAllowed_T_108 | _readAllowed_T_110 | _readAllowed_T_112
|
||||
| _readAllowed_T_114 | _readAllowed_T_116 | _readAllowed_T_118 | _readAllowed_T_120
|
||||
| _readAllowed_T_122 | _readAllowed_T_125 | _readAllowed_T_126 | _readAllowed_T_128
|
||||
| _readAllowed_T_130 | _readAllowed_T_132 | _readAllowed_T_134 | _readAllowed_T_136
|
||||
| _readAllowed_T_138 | _readAllowed_T_140 | _readAllowed_T_142 | _readAllowed_T_69
|
||||
| _readAllowed_T_70 | _readAllowed_T_72)
|
||||
& (_readAllowed_T_75 | _readAllowed_T_76 | _readAllowed_T_78 | _readAllowed_T_80
|
||||
| _readAllowed_T_82 | _readAllowed_T_84 | _readAllowed_T_86 | _readAllowed_T_88
|
||||
| _readAllowed_T_90 | _readAllowed_T_92 | _readAllowed_T_94 | _readAllowed_T_96
|
||||
| _readAllowed_T_98 | _readAllowed_T_100 | _readAllowed_T_102 | _readAllowed_T_104
|
||||
| _readAllowed_T_106 | _readAllowed_T_108 | _readAllowed_T_110 | _readAllowed_T_112
|
||||
| _readAllowed_T_114 | _readAllowed_T_116 | _readAllowed_T_118 | _readAllowed_T_120
|
||||
| _readAllowed_T_122
|
||||
? (&io_currentPriv)
|
||||
: ~(_readAllowed_T_125 | _readAllowed_T_126 | _readAllowed_T_128
|
||||
| _readAllowed_T_130 | _readAllowed_T_132 | _readAllowed_T_134
|
||||
| _readAllowed_T_136 | _readAllowed_T_138 | _readAllowed_T_140
|
||||
| _readAllowed_T_142) | (|io_currentPriv));
|
||||
wire _writeAllowed_T_75 = io_cmd_addr == 12'h300;
|
||||
wire _writeAllowed_T_76 = io_cmd_addr == 12'h301;
|
||||
wire _writeAllowed_T_78 = io_cmd_addr == 12'h302;
|
||||
wire _writeAllowed_T_80 = io_cmd_addr == 12'h303;
|
||||
wire _writeAllowed_T_82 = io_cmd_addr == 12'h304;
|
||||
wire _writeAllowed_T_84 = io_cmd_addr == 12'h305;
|
||||
wire _writeAllowed_T_86 = io_cmd_addr == 12'h306;
|
||||
wire _writeAllowed_T_88 = io_cmd_addr == 12'h340;
|
||||
wire _writeAllowed_T_90 = io_cmd_addr == 12'h341;
|
||||
wire _writeAllowed_T_92 = io_cmd_addr == 12'h342;
|
||||
wire _writeAllowed_T_94 = io_cmd_addr == 12'h343;
|
||||
wire _writeAllowed_T_96 = io_cmd_addr == 12'h344;
|
||||
wire _writeAllowed_T_98 = io_cmd_addr == 12'h3A0;
|
||||
wire _writeAllowed_T_100 = io_cmd_addr == 12'h3B0;
|
||||
wire _writeAllowed_T_102 = io_cmd_addr == 12'h7A0;
|
||||
wire _writeAllowed_T_104 = io_cmd_addr == 12'h7A1;
|
||||
wire _writeAllowed_T_106 = io_cmd_addr == 12'h7A2;
|
||||
wire _writeAllowed_T_108 = io_cmd_addr == 12'h7A5;
|
||||
wire _writeAllowed_T_110 = io_cmd_addr == 12'h744;
|
||||
wire _writeAllowed_T_112 = io_cmd_addr == 12'h320;
|
||||
wire _writeAllowed_T_114 = io_cmd_addr == 12'hB02;
|
||||
wire _writeAllowed_T_148 = io_cmd_addr == 12'hF11;
|
||||
wire _writeAllowed_T_149 = io_cmd_addr == 12'hF12;
|
||||
wire _writeAllowed_T_151 = io_cmd_addr == 12'hF13;
|
||||
wire _writeAllowed_T_153 = io_cmd_addr == 12'hF14;
|
||||
wire _writeAllowed_T_125 = io_cmd_addr == 12'h100;
|
||||
wire _writeAllowed_T_126 = io_cmd_addr == 12'h104;
|
||||
wire _writeAllowed_T_128 = io_cmd_addr == 12'h105;
|
||||
wire _writeAllowed_T_130 = io_cmd_addr == 12'h140;
|
||||
wire _writeAllowed_T_132 = io_cmd_addr == 12'h106;
|
||||
wire _writeAllowed_T_134 = io_cmd_addr == 12'h141;
|
||||
wire _writeAllowed_T_136 = io_cmd_addr == 12'h142;
|
||||
wire _writeAllowed_T_138 = io_cmd_addr == 12'h143;
|
||||
wire _writeAllowed_T_140 = io_cmd_addr == 12'h144;
|
||||
wire _writeAllowed_T_142 = io_cmd_addr == 12'h180;
|
||||
wire _writeAllowed_T_155 = io_cmd_addr == 12'hC00;
|
||||
wire _writeAllowed_T_156 = io_cmd_addr == 12'hC01;
|
||||
wire _writeAllowed_T_158 = io_cmd_addr == 12'hC02;
|
||||
wire [63:0] mstatusView = mstatus & 64'hFFFFFFF0FFFFFFFF | 64'hA00000000;
|
||||
wire [63:0] sstatusView = {30'h0, mstatusView[33:1] & 33'h10006F0B1, 1'h0};
|
||||
wire _GEN =
|
||||
io_cmd_valid & (|io_cmd_cmd)
|
||||
& (_writeAllowed_T_75 | _writeAllowed_T_76 | _writeAllowed_T_78 | _writeAllowed_T_80
|
||||
| _writeAllowed_T_82 | _writeAllowed_T_84 | _writeAllowed_T_86 | _writeAllowed_T_88
|
||||
| _writeAllowed_T_90 | _writeAllowed_T_92 | _writeAllowed_T_94 | _writeAllowed_T_96
|
||||
| _writeAllowed_T_98 | _writeAllowed_T_100 | _writeAllowed_T_102
|
||||
| _writeAllowed_T_104 | _writeAllowed_T_106 | _writeAllowed_T_108
|
||||
| _writeAllowed_T_110 | _writeAllowed_T_112 | _writeAllowed_T_114
|
||||
| _writeAllowed_T_148 | _writeAllowed_T_149 | _writeAllowed_T_151
|
||||
| _writeAllowed_T_153 | _writeAllowed_T_125 | _writeAllowed_T_126
|
||||
| _writeAllowed_T_128 | _writeAllowed_T_130 | _writeAllowed_T_132
|
||||
| _writeAllowed_T_134 | _writeAllowed_T_136 | _writeAllowed_T_138
|
||||
| _writeAllowed_T_140 | _writeAllowed_T_142 | _writeAllowed_T_155
|
||||
| _writeAllowed_T_156 | _writeAllowed_T_158)
|
||||
& (_writeAllowed_T_75 | _writeAllowed_T_76 | _writeAllowed_T_78 | _writeAllowed_T_80
|
||||
| _writeAllowed_T_82 | _writeAllowed_T_84 | _writeAllowed_T_86 | _writeAllowed_T_88
|
||||
| _writeAllowed_T_90 | _writeAllowed_T_92 | _writeAllowed_T_94 | _writeAllowed_T_96
|
||||
| _writeAllowed_T_98 | _writeAllowed_T_100 | _writeAllowed_T_102
|
||||
| _writeAllowed_T_104 | _writeAllowed_T_106 | _writeAllowed_T_108
|
||||
| _writeAllowed_T_110 | _writeAllowed_T_112 | _writeAllowed_T_114
|
||||
| _writeAllowed_T_148 | _writeAllowed_T_149 | _writeAllowed_T_151
|
||||
| _writeAllowed_T_153
|
||||
? (&io_currentPriv)
|
||||
: ~(_writeAllowed_T_125 | _writeAllowed_T_126 | _writeAllowed_T_128
|
||||
| _writeAllowed_T_130 | _writeAllowed_T_132 | _writeAllowed_T_134
|
||||
| _writeAllowed_T_136 | _writeAllowed_T_138 | _writeAllowed_T_140
|
||||
| _writeAllowed_T_142) | (|io_currentPriv))
|
||||
& ~(_writeAllowed_T_148 | _writeAllowed_T_149 | _writeAllowed_T_151
|
||||
| _writeAllowed_T_153 | _writeAllowed_T_155 | _writeAllowed_T_156
|
||||
| _writeAllowed_T_158);
|
||||
wire _GEN_0 =
|
||||
_writeAllowed_T_75 | _writeAllowed_T_78 | _writeAllowed_T_80 | _writeAllowed_T_82
|
||||
| _writeAllowed_T_84 | _writeAllowed_T_86 | _writeAllowed_T_112 | _writeAllowed_T_88
|
||||
| _writeAllowed_T_90 | _writeAllowed_T_92 | _writeAllowed_T_94 | _writeAllowed_T_96
|
||||
| _writeAllowed_T_98 | _writeAllowed_T_100 | _writeAllowed_T_104 | _writeAllowed_T_106
|
||||
| _writeAllowed_T_108 | _writeAllowed_T_110 | _writeAllowed_T_125
|
||||
| _writeAllowed_T_126 | _writeAllowed_T_128 | _writeAllowed_T_132
|
||||
| _writeAllowed_T_130 | _writeAllowed_T_134 | _writeAllowed_T_136
|
||||
| _writeAllowed_T_138 | _writeAllowed_T_140 | _writeAllowed_T_142;
|
||||
wire suppressInstretIncrement = _GEN & ~_GEN_0 & _writeAllowed_T_114;
|
||||
wire trapToS = io_trapTargetPriv == 2'h1;
|
||||
always @(posedge clock) begin
|
||||
if (reset) begin
|
||||
cycle <= 64'h0;
|
||||
instret <= 64'h0;
|
||||
mcountinhibit <= 64'h0;
|
||||
suppressInstretAfterWrite <= 1'h0;
|
||||
mstatus <= 64'h0;
|
||||
mtvecReg <= 64'h0;
|
||||
mscratch <= 64'h0;
|
||||
mepcReg <= 64'h0;
|
||||
mcause <= 64'h0;
|
||||
mtval <= 64'h0;
|
||||
@@ -46,7 +212,14 @@ module CSRFile(
|
||||
mideleg <= 64'h0;
|
||||
mie <= 64'h0;
|
||||
mip <= 64'h0;
|
||||
sstatus <= 64'h0;
|
||||
mcounteren <= 64'h0;
|
||||
pmpcfg0 <= 64'h0;
|
||||
pmpaddr0 <= 64'h0;
|
||||
tdata1 <= 64'h0;
|
||||
tdata2 <= 64'h0;
|
||||
tcontrol <= 64'h0;
|
||||
mnstatus <= 64'h0;
|
||||
scounteren <= 64'h0;
|
||||
stvec <= 64'h0;
|
||||
sepc <= 64'h0;
|
||||
scause <= 64'h0;
|
||||
@@ -55,206 +228,466 @@ module CSRFile(
|
||||
satpReg <= 64'h0;
|
||||
end
|
||||
else begin
|
||||
automatic logic _GEN;
|
||||
automatic logic _GEN_0;
|
||||
automatic logic _GEN_1;
|
||||
automatic logic _GEN_2;
|
||||
automatic logic _GEN_3;
|
||||
automatic logic _GEN_4;
|
||||
automatic logic _GEN_5;
|
||||
automatic logic _GEN_6 = io_cmd_addr == 12'h343;
|
||||
automatic logic _GEN_7 = io_cmd_addr == 12'h344;
|
||||
automatic logic _GEN_8 = io_cmd_addr == 12'h100;
|
||||
automatic logic _GEN_9 = io_cmd_addr == 12'h105;
|
||||
automatic logic _GEN_10 = io_cmd_addr == 12'h140;
|
||||
automatic logic _GEN_11 = io_cmd_addr == 12'h141;
|
||||
automatic logic _GEN_12 = io_cmd_addr == 12'h142;
|
||||
automatic logic _GEN_13 = io_cmd_addr == 12'h143;
|
||||
automatic logic _GEN_14 = io_cmd_addr == 12'h180;
|
||||
automatic logic [63:0] _GEN_15;
|
||||
automatic logic [63:0] writeOld;
|
||||
automatic logic [63:0] writeOld =
|
||||
_writeAllowed_T_75
|
||||
? mstatusView
|
||||
: _writeAllowed_T_76
|
||||
? 64'h8000000000141101
|
||||
: _writeAllowed_T_78
|
||||
? medeleg
|
||||
: _writeAllowed_T_80
|
||||
? mideleg
|
||||
: _writeAllowed_T_82
|
||||
? mie
|
||||
: _writeAllowed_T_84
|
||||
? mtvecReg
|
||||
: _writeAllowed_T_86
|
||||
? mcounteren
|
||||
: _writeAllowed_T_112
|
||||
? mcountinhibit
|
||||
: _writeAllowed_T_88
|
||||
? mscratch
|
||||
: _writeAllowed_T_90
|
||||
? mepcReg
|
||||
: _writeAllowed_T_92
|
||||
? mcause
|
||||
: _writeAllowed_T_94
|
||||
? mtval
|
||||
: _writeAllowed_T_96
|
||||
? mip
|
||||
: _writeAllowed_T_98
|
||||
? pmpcfg0
|
||||
: _writeAllowed_T_100
|
||||
? pmpaddr0
|
||||
: _writeAllowed_T_102
|
||||
? 64'h1
|
||||
: _writeAllowed_T_104
|
||||
? tdata1
|
||||
: _writeAllowed_T_106
|
||||
? tdata2
|
||||
: _writeAllowed_T_108
|
||||
? tcontrol
|
||||
: _writeAllowed_T_110
|
||||
? mnstatus
|
||||
: _writeAllowed_T_125
|
||||
? sstatusView
|
||||
: _writeAllowed_T_126
|
||||
? mie
|
||||
& mideleg
|
||||
: _writeAllowed_T_128
|
||||
? stvec
|
||||
: _writeAllowed_T_132
|
||||
? scounteren
|
||||
: _writeAllowed_T_130
|
||||
? sscratch
|
||||
: _writeAllowed_T_134
|
||||
? sepc
|
||||
: _writeAllowed_T_136
|
||||
? scause
|
||||
: _writeAllowed_T_138
|
||||
? stval
|
||||
: _writeAllowed_T_140
|
||||
? mip
|
||||
& mideleg
|
||||
: _writeAllowed_T_142
|
||||
? satpReg
|
||||
: _writeAllowed_T_148
|
||||
| _writeAllowed_T_149
|
||||
| _writeAllowed_T_151
|
||||
| _writeAllowed_T_153
|
||||
? 64'h0
|
||||
: _writeAllowed_T_114
|
||||
? instret
|
||||
: _writeAllowed_T_155
|
||||
| _writeAllowed_T_156
|
||||
? cycle
|
||||
: _writeAllowed_T_158
|
||||
? instret
|
||||
: 64'h0;
|
||||
automatic logic [63:0] operand;
|
||||
automatic logic [63:0] _next_T_1;
|
||||
automatic logic [63:0] _next_T_3;
|
||||
automatic logic [3:0][63:0] _GEN_16;
|
||||
automatic logic [3:0][63:0] _GEN_1;
|
||||
automatic logic [63:0] next;
|
||||
automatic logic _GEN_17;
|
||||
_GEN = io_cmd_addr == 12'h300;
|
||||
_GEN_0 = io_cmd_addr == 12'h302;
|
||||
_GEN_1 = io_cmd_addr == 12'h303;
|
||||
_GEN_2 = io_cmd_addr == 12'h304;
|
||||
_GEN_3 = io_cmd_addr == 12'h305;
|
||||
_GEN_4 = io_cmd_addr == 12'h341;
|
||||
_GEN_5 = io_cmd_addr == 12'h342;
|
||||
_GEN_15 =
|
||||
io_cmd_addr == 12'h301
|
||||
? 64'h800000000014112D
|
||||
: _GEN_0
|
||||
? medeleg
|
||||
: _GEN_1
|
||||
? mideleg
|
||||
: _GEN_2
|
||||
? mie
|
||||
: _GEN_3
|
||||
? mtvecReg
|
||||
: _GEN_4
|
||||
? mepcReg
|
||||
: _GEN_5
|
||||
? mcause
|
||||
: _GEN_6
|
||||
? mtval
|
||||
: _GEN_7
|
||||
? mip
|
||||
: _GEN_8
|
||||
? sstatus
|
||||
: _GEN_9
|
||||
? stvec
|
||||
: _GEN_10
|
||||
? sscratch
|
||||
: _GEN_11
|
||||
? sepc
|
||||
: _GEN_12
|
||||
? scause
|
||||
: _GEN_13
|
||||
? stval
|
||||
: _GEN_14
|
||||
? satpReg
|
||||
: io_cmd_addr == 12'hF14
|
||||
| io_cmd_addr != 12'hC00
|
||||
? 64'h0
|
||||
: cycle;
|
||||
writeOld = _GEN ? mstatus : _GEN_15;
|
||||
operand = io_cmd_cmd[2] ? {59'h0, io_cmd_zimm} : io_cmd_rs1;
|
||||
_next_T_1 = writeOld | operand;
|
||||
_next_T_3 = writeOld & ~operand;
|
||||
_GEN_16 = {{_next_T_3}, {_next_T_1}, {operand}, {writeOld}};
|
||||
next = _GEN_16[io_cmd_cmd[1:0]];
|
||||
_GEN_17 = io_cmd_valid & (|io_cmd_cmd);
|
||||
_GEN_1 = {{_next_T_3}, {_next_T_1}, {operand}, {writeOld}};
|
||||
next = _GEN_1[io_cmd_cmd[1:0]];
|
||||
cycle <= cycle + 64'h1;
|
||||
if (_GEN_17 & _GEN)
|
||||
mstatus <= next;
|
||||
if (~_GEN_17 | _GEN | _GEN_0 | _GEN_1 | _GEN_2 | ~_GEN_3) begin
|
||||
if (~_GEN | _GEN_0 | ~_writeAllowed_T_114) begin
|
||||
if (mcountinhibit[2] | suppressInstretIncrement | suppressInstretAfterWrite) begin
|
||||
end
|
||||
else
|
||||
instret <= instret + 64'h1;
|
||||
end
|
||||
else
|
||||
instret <= next;
|
||||
if (~_GEN | _writeAllowed_T_75 | _writeAllowed_T_78 | _writeAllowed_T_80
|
||||
| _writeAllowed_T_82 | _writeAllowed_T_84 | _writeAllowed_T_86
|
||||
| ~_writeAllowed_T_112) begin
|
||||
end
|
||||
else
|
||||
mcountinhibit <= {61'h0, next[2], 2'h0};
|
||||
suppressInstretAfterWrite <=
|
||||
~suppressInstretAfterWrite
|
||||
& (suppressInstretIncrement | suppressInstretAfterWrite);
|
||||
if (io_trap) begin
|
||||
automatic logic [63:0] _GEN_2 =
|
||||
mstatus[1] ? mstatus | 64'h20 : mstatus & 64'hFFFFFFFFFFFFFFDF;
|
||||
mstatus <=
|
||||
trapToS
|
||||
? (io_currentPriv == 2'h1
|
||||
? _GEN_2 & 64'hFFFFFFFFFFFFFFFD | 64'h100
|
||||
: _GEN_2 & 64'hFFFFFFFFFFFFFEFD)
|
||||
: (mstatus[3] ? mstatus | 64'h80 : mstatus & 64'hFFFFFFFFFFFFFF7F)
|
||||
& 64'hFFFFFFFFFFFFE7F7 | {51'h0, io_currentPriv, 11'h0};
|
||||
end
|
||||
else if (io_xret)
|
||||
mstatus <=
|
||||
io_xretIsMret
|
||||
? ((mstatus[7] ? mstatus | 64'h8 : mstatus & 64'hFFFFFFFFFFFFFFF7) | 64'h80)
|
||||
& 64'hFFFFFFFFFFFFE7FF
|
||||
: ((mstatus[5] ? mstatus | 64'h2 : mstatus & 64'hFFFFFFFFFFFFFFFD) | 64'h20)
|
||||
& 64'hFFFFFFFFFFFFFEFF;
|
||||
else if (_GEN) begin
|
||||
if (_writeAllowed_T_75) begin
|
||||
automatic logic [3:0][63:0] _GEN_3;
|
||||
_GEN_3 = {{_next_T_3}, {_next_T_1}, {operand}, {mstatusView}};
|
||||
mstatus <= _GEN_3[io_cmd_cmd[1:0]];
|
||||
end
|
||||
else if (_writeAllowed_T_78 | _writeAllowed_T_80 | _writeAllowed_T_82
|
||||
| _writeAllowed_T_84 | _writeAllowed_T_86 | _writeAllowed_T_112
|
||||
| _writeAllowed_T_88 | _writeAllowed_T_90 | _writeAllowed_T_92
|
||||
| _writeAllowed_T_94 | _writeAllowed_T_96 | _writeAllowed_T_98
|
||||
| _writeAllowed_T_100 | _writeAllowed_T_104 | _writeAllowed_T_106
|
||||
| _writeAllowed_T_108 | _writeAllowed_T_110 | ~_writeAllowed_T_125) begin
|
||||
end
|
||||
else
|
||||
mstatus <=
|
||||
mstatus & 64'hFFFFFFFDFFF21E9D | {30'h0, next[33:1] & 33'h10006F0B1, 1'h0};
|
||||
end
|
||||
if (~_GEN | _writeAllowed_T_75 | _writeAllowed_T_78 | _writeAllowed_T_80
|
||||
| _writeAllowed_T_82 | ~_writeAllowed_T_84) begin
|
||||
end
|
||||
else
|
||||
mtvecReg <= next;
|
||||
if (io_trap) begin
|
||||
mepcReg <= io_trapPc;
|
||||
mcause <= io_trapCause;
|
||||
if (~_GEN | _writeAllowed_T_75 | _writeAllowed_T_78 | _writeAllowed_T_80
|
||||
| _writeAllowed_T_82 | _writeAllowed_T_84 | _writeAllowed_T_86
|
||||
| _writeAllowed_T_112 | ~_writeAllowed_T_88) begin
|
||||
end
|
||||
else begin
|
||||
if (~_GEN_17 | _GEN | _GEN_0 | _GEN_1 | _GEN_2 | _GEN_3 | ~_GEN_4) begin
|
||||
else
|
||||
mscratch <= next;
|
||||
if (~io_trap | trapToS) begin
|
||||
if (~_GEN | _writeAllowed_T_75 | _writeAllowed_T_78 | _writeAllowed_T_80
|
||||
| _writeAllowed_T_82 | _writeAllowed_T_84 | _writeAllowed_T_86
|
||||
| _writeAllowed_T_112 | _writeAllowed_T_88 | ~_writeAllowed_T_90) begin
|
||||
end
|
||||
else
|
||||
mepcReg <= next;
|
||||
if (~_GEN_17 | _GEN | _GEN_0 | _GEN_1 | _GEN_2 | _GEN_3 | _GEN_4 | ~_GEN_5) begin
|
||||
if (~_GEN | _writeAllowed_T_75 | _writeAllowed_T_78 | _writeAllowed_T_80
|
||||
| _writeAllowed_T_82 | _writeAllowed_T_84 | _writeAllowed_T_86
|
||||
| _writeAllowed_T_112 | _writeAllowed_T_88 | _writeAllowed_T_90
|
||||
| ~_writeAllowed_T_92) begin
|
||||
end
|
||||
else
|
||||
mcause <= next;
|
||||
end
|
||||
if (~_GEN_17 | _GEN | _GEN_0 | _GEN_1 | _GEN_2 | _GEN_3 | _GEN_4 | _GEN_5
|
||||
| ~_GEN_6) begin
|
||||
end
|
||||
else
|
||||
mtval <= next;
|
||||
if (~_GEN_17 | _GEN | ~_GEN_0) begin
|
||||
if (~_GEN | _writeAllowed_T_75 | _writeAllowed_T_78 | _writeAllowed_T_80
|
||||
| _writeAllowed_T_82 | _writeAllowed_T_84 | _writeAllowed_T_86
|
||||
| _writeAllowed_T_112 | _writeAllowed_T_88 | _writeAllowed_T_90
|
||||
| _writeAllowed_T_92 | ~_writeAllowed_T_94) begin
|
||||
end
|
||||
else
|
||||
mtval <= next;
|
||||
end
|
||||
else begin
|
||||
automatic logic [3:0][63:0] _GEN_18;
|
||||
_GEN_18 = {{_next_T_3}, {_next_T_1}, {operand}, {_GEN_15}};
|
||||
medeleg <= _GEN_18[io_cmd_cmd[1:0]];
|
||||
mepcReg <= io_trapPc;
|
||||
mcause <= io_trapCause;
|
||||
mtval <= io_trapTval;
|
||||
end
|
||||
if (~_GEN_17 | _GEN | _GEN_0 | ~_GEN_1) begin
|
||||
if (~_GEN | _writeAllowed_T_75 | ~_writeAllowed_T_78) begin
|
||||
end
|
||||
else
|
||||
mideleg <= next;
|
||||
if (~_GEN_17 | _GEN | _GEN_0 | _GEN_1 | ~_GEN_2) begin
|
||||
else begin
|
||||
automatic logic [3:0][63:0] _GEN_4;
|
||||
_GEN_4 =
|
||||
{{_next_T_3},
|
||||
{_next_T_1},
|
||||
{operand},
|
||||
{_writeAllowed_T_76 ? 64'h8000000000141101 : medeleg}};
|
||||
medeleg <= _GEN_4[io_cmd_cmd[1:0]];
|
||||
end
|
||||
else
|
||||
if (~_GEN | _writeAllowed_T_75 | _writeAllowed_T_78 | ~_writeAllowed_T_80) begin
|
||||
end
|
||||
else begin
|
||||
automatic logic [3:0][63:0] _GEN_5;
|
||||
_GEN_5 =
|
||||
{{_next_T_3},
|
||||
{_next_T_1},
|
||||
{operand},
|
||||
{_writeAllowed_T_75
|
||||
? mstatusView
|
||||
: _writeAllowed_T_76
|
||||
? 64'h8000000000141101
|
||||
: _writeAllowed_T_78 ? medeleg : mideleg}};
|
||||
mideleg <= _GEN_5[io_cmd_cmd[1:0]];
|
||||
end
|
||||
if (~_GEN | _writeAllowed_T_75 | _writeAllowed_T_78 | _writeAllowed_T_80) begin
|
||||
end
|
||||
else if (_writeAllowed_T_82)
|
||||
mie <= next;
|
||||
if (~_GEN_17 | _GEN | _GEN_0 | _GEN_1 | _GEN_2 | _GEN_3 | _GEN_4 | _GEN_5 | _GEN_6
|
||||
| ~_GEN_7) begin
|
||||
else if (_writeAllowed_T_84 | _writeAllowed_T_86 | _writeAllowed_T_112
|
||||
| _writeAllowed_T_88 | _writeAllowed_T_90 | _writeAllowed_T_92
|
||||
| _writeAllowed_T_94 | _writeAllowed_T_96 | _writeAllowed_T_98
|
||||
| _writeAllowed_T_100 | _writeAllowed_T_104 | _writeAllowed_T_106
|
||||
| _writeAllowed_T_108 | _writeAllowed_T_110 | _writeAllowed_T_125
|
||||
| ~_writeAllowed_T_126) begin
|
||||
end
|
||||
else
|
||||
mie <= mie & ~mideleg | next & mideleg;
|
||||
if (~_GEN | _writeAllowed_T_75 | _writeAllowed_T_78 | _writeAllowed_T_80
|
||||
| _writeAllowed_T_82 | _writeAllowed_T_84 | _writeAllowed_T_86
|
||||
| _writeAllowed_T_112 | _writeAllowed_T_88 | _writeAllowed_T_90
|
||||
| _writeAllowed_T_92 | _writeAllowed_T_94) begin
|
||||
end
|
||||
else if (_writeAllowed_T_96)
|
||||
mip <= next;
|
||||
if (~_GEN_17 | _GEN | _GEN_0 | _GEN_1 | _GEN_2 | _GEN_3 | _GEN_4 | _GEN_5 | _GEN_6
|
||||
| _GEN_7 | ~_GEN_8) begin
|
||||
else if (_writeAllowed_T_98 | _writeAllowed_T_100 | _writeAllowed_T_104
|
||||
| _writeAllowed_T_106 | _writeAllowed_T_108 | _writeAllowed_T_110
|
||||
| _writeAllowed_T_125 | _writeAllowed_T_126 | _writeAllowed_T_128
|
||||
| _writeAllowed_T_132 | _writeAllowed_T_130 | _writeAllowed_T_134
|
||||
| _writeAllowed_T_136 | _writeAllowed_T_138 | ~_writeAllowed_T_140) begin
|
||||
end
|
||||
else
|
||||
sstatus <= next;
|
||||
if (~_GEN_17 | _GEN | _GEN_0 | _GEN_1 | _GEN_2 | _GEN_3 | _GEN_4 | _GEN_5 | _GEN_6
|
||||
| _GEN_7 | _GEN_8 | ~_GEN_9) begin
|
||||
mip <= mip & ~mideleg | next & mideleg;
|
||||
if (~_GEN | _writeAllowed_T_75 | _writeAllowed_T_78 | _writeAllowed_T_80
|
||||
| _writeAllowed_T_82 | _writeAllowed_T_84 | ~_writeAllowed_T_86) begin
|
||||
end
|
||||
else
|
||||
mcounteren <= next;
|
||||
if (~_GEN | _writeAllowed_T_75 | _writeAllowed_T_78 | _writeAllowed_T_80
|
||||
| _writeAllowed_T_82 | _writeAllowed_T_84 | _writeAllowed_T_86
|
||||
| _writeAllowed_T_112 | _writeAllowed_T_88 | _writeAllowed_T_90
|
||||
| _writeAllowed_T_92 | _writeAllowed_T_94 | _writeAllowed_T_96
|
||||
| ~_writeAllowed_T_98) begin
|
||||
end
|
||||
else
|
||||
pmpcfg0 <= next;
|
||||
if (~_GEN | _writeAllowed_T_75 | _writeAllowed_T_78 | _writeAllowed_T_80
|
||||
| _writeAllowed_T_82 | _writeAllowed_T_84 | _writeAllowed_T_86
|
||||
| _writeAllowed_T_112 | _writeAllowed_T_88 | _writeAllowed_T_90
|
||||
| _writeAllowed_T_92 | _writeAllowed_T_94 | _writeAllowed_T_96
|
||||
| _writeAllowed_T_98 | ~_writeAllowed_T_100) begin
|
||||
end
|
||||
else
|
||||
pmpaddr0 <= next;
|
||||
if (~_GEN | _writeAllowed_T_75 | _writeAllowed_T_78 | _writeAllowed_T_80
|
||||
| _writeAllowed_T_82 | _writeAllowed_T_84 | _writeAllowed_T_86
|
||||
| _writeAllowed_T_112 | _writeAllowed_T_88 | _writeAllowed_T_90
|
||||
| _writeAllowed_T_92 | _writeAllowed_T_94 | _writeAllowed_T_96
|
||||
| _writeAllowed_T_98 | _writeAllowed_T_100 | ~_writeAllowed_T_104) begin
|
||||
end
|
||||
else
|
||||
tdata1 <= next;
|
||||
if (~_GEN | _writeAllowed_T_75 | _writeAllowed_T_78 | _writeAllowed_T_80
|
||||
| _writeAllowed_T_82 | _writeAllowed_T_84 | _writeAllowed_T_86
|
||||
| _writeAllowed_T_112 | _writeAllowed_T_88 | _writeAllowed_T_90
|
||||
| _writeAllowed_T_92 | _writeAllowed_T_94 | _writeAllowed_T_96
|
||||
| _writeAllowed_T_98 | _writeAllowed_T_100 | _writeAllowed_T_104
|
||||
| ~_writeAllowed_T_106) begin
|
||||
end
|
||||
else
|
||||
tdata2 <= next;
|
||||
if (~_GEN | _writeAllowed_T_75 | _writeAllowed_T_78 | _writeAllowed_T_80
|
||||
| _writeAllowed_T_82 | _writeAllowed_T_84 | _writeAllowed_T_86
|
||||
| _writeAllowed_T_112 | _writeAllowed_T_88 | _writeAllowed_T_90
|
||||
| _writeAllowed_T_92 | _writeAllowed_T_94 | _writeAllowed_T_96
|
||||
| _writeAllowed_T_98 | _writeAllowed_T_100 | _writeAllowed_T_104
|
||||
| _writeAllowed_T_106 | ~_writeAllowed_T_108) begin
|
||||
end
|
||||
else
|
||||
tcontrol <= next;
|
||||
if (~_GEN | _writeAllowed_T_75 | _writeAllowed_T_78 | _writeAllowed_T_80
|
||||
| _writeAllowed_T_82 | _writeAllowed_T_84 | _writeAllowed_T_86
|
||||
| _writeAllowed_T_112 | _writeAllowed_T_88 | _writeAllowed_T_90
|
||||
| _writeAllowed_T_92 | _writeAllowed_T_94 | _writeAllowed_T_96
|
||||
| _writeAllowed_T_98 | _writeAllowed_T_100 | _writeAllowed_T_104
|
||||
| _writeAllowed_T_106 | _writeAllowed_T_108 | ~_writeAllowed_T_110) begin
|
||||
end
|
||||
else
|
||||
mnstatus <= next;
|
||||
if (~_GEN | _writeAllowed_T_75 | _writeAllowed_T_78 | _writeAllowed_T_80
|
||||
| _writeAllowed_T_82 | _writeAllowed_T_84 | _writeAllowed_T_86
|
||||
| _writeAllowed_T_112 | _writeAllowed_T_88 | _writeAllowed_T_90
|
||||
| _writeAllowed_T_92 | _writeAllowed_T_94 | _writeAllowed_T_96
|
||||
| _writeAllowed_T_98 | _writeAllowed_T_100 | _writeAllowed_T_104
|
||||
| _writeAllowed_T_106 | _writeAllowed_T_108 | _writeAllowed_T_110
|
||||
| _writeAllowed_T_125 | _writeAllowed_T_126 | _writeAllowed_T_128
|
||||
| ~_writeAllowed_T_132) begin
|
||||
end
|
||||
else
|
||||
scounteren <= next;
|
||||
if (~_GEN | _writeAllowed_T_75 | _writeAllowed_T_78 | _writeAllowed_T_80
|
||||
| _writeAllowed_T_82 | _writeAllowed_T_84 | _writeAllowed_T_86
|
||||
| _writeAllowed_T_112 | _writeAllowed_T_88 | _writeAllowed_T_90
|
||||
| _writeAllowed_T_92 | _writeAllowed_T_94 | _writeAllowed_T_96
|
||||
| _writeAllowed_T_98 | _writeAllowed_T_100 | _writeAllowed_T_104
|
||||
| _writeAllowed_T_106 | _writeAllowed_T_108 | _writeAllowed_T_110
|
||||
| _writeAllowed_T_125 | _writeAllowed_T_126 | ~_writeAllowed_T_128) begin
|
||||
end
|
||||
else
|
||||
stvec <= next;
|
||||
if (~_GEN_17 | _GEN | _GEN_0 | _GEN_1 | _GEN_2 | _GEN_3 | _GEN_4 | _GEN_5 | _GEN_6
|
||||
| _GEN_7 | _GEN_8 | _GEN_9 | _GEN_10 | ~_GEN_11) begin
|
||||
if (io_trap & trapToS) begin
|
||||
sepc <= io_trapPc;
|
||||
scause <= io_trapCause;
|
||||
stval <= io_trapTval;
|
||||
end
|
||||
else
|
||||
sepc <= next;
|
||||
if (~_GEN_17 | _GEN | _GEN_0 | _GEN_1 | _GEN_2 | _GEN_3 | _GEN_4 | _GEN_5 | _GEN_6
|
||||
| _GEN_7 | _GEN_8 | _GEN_9 | _GEN_10 | _GEN_11 | ~_GEN_12) begin
|
||||
else begin
|
||||
if (~_GEN | _writeAllowed_T_75 | _writeAllowed_T_78 | _writeAllowed_T_80
|
||||
| _writeAllowed_T_82 | _writeAllowed_T_84 | _writeAllowed_T_86
|
||||
| _writeAllowed_T_112 | _writeAllowed_T_88 | _writeAllowed_T_90
|
||||
| _writeAllowed_T_92 | _writeAllowed_T_94 | _writeAllowed_T_96
|
||||
| _writeAllowed_T_98 | _writeAllowed_T_100 | _writeAllowed_T_104
|
||||
| _writeAllowed_T_106 | _writeAllowed_T_108 | _writeAllowed_T_110
|
||||
| _writeAllowed_T_125 | _writeAllowed_T_126 | _writeAllowed_T_128
|
||||
| _writeAllowed_T_132 | _writeAllowed_T_130 | ~_writeAllowed_T_134) begin
|
||||
end
|
||||
else
|
||||
sepc <= next;
|
||||
if (~_GEN | _writeAllowed_T_75 | _writeAllowed_T_78 | _writeAllowed_T_80
|
||||
| _writeAllowed_T_82 | _writeAllowed_T_84 | _writeAllowed_T_86
|
||||
| _writeAllowed_T_112 | _writeAllowed_T_88 | _writeAllowed_T_90
|
||||
| _writeAllowed_T_92 | _writeAllowed_T_94 | _writeAllowed_T_96
|
||||
| _writeAllowed_T_98 | _writeAllowed_T_100 | _writeAllowed_T_104
|
||||
| _writeAllowed_T_106 | _writeAllowed_T_108 | _writeAllowed_T_110
|
||||
| _writeAllowed_T_125 | _writeAllowed_T_126 | _writeAllowed_T_128
|
||||
| _writeAllowed_T_132 | _writeAllowed_T_130 | _writeAllowed_T_134
|
||||
| ~_writeAllowed_T_136) begin
|
||||
end
|
||||
else
|
||||
scause <= next;
|
||||
if (~_GEN | _writeAllowed_T_75 | _writeAllowed_T_78 | _writeAllowed_T_80
|
||||
| _writeAllowed_T_82 | _writeAllowed_T_84 | _writeAllowed_T_86
|
||||
| _writeAllowed_T_112 | _writeAllowed_T_88 | _writeAllowed_T_90
|
||||
| _writeAllowed_T_92 | _writeAllowed_T_94 | _writeAllowed_T_96
|
||||
| _writeAllowed_T_98 | _writeAllowed_T_100 | _writeAllowed_T_104
|
||||
| _writeAllowed_T_106 | _writeAllowed_T_108 | _writeAllowed_T_110
|
||||
| _writeAllowed_T_125 | _writeAllowed_T_126 | _writeAllowed_T_128
|
||||
| _writeAllowed_T_132 | _writeAllowed_T_130 | _writeAllowed_T_134
|
||||
| _writeAllowed_T_136 | ~_writeAllowed_T_138) begin
|
||||
end
|
||||
else
|
||||
stval <= next;
|
||||
end
|
||||
else
|
||||
scause <= next;
|
||||
if (~_GEN_17 | _GEN | _GEN_0 | _GEN_1 | _GEN_2 | _GEN_3 | _GEN_4 | _GEN_5 | _GEN_6
|
||||
| _GEN_7 | _GEN_8 | _GEN_9 | _GEN_10 | _GEN_11 | _GEN_12 | ~_GEN_13) begin
|
||||
end
|
||||
else
|
||||
stval <= next;
|
||||
if (~_GEN_17 | _GEN | _GEN_0 | _GEN_1 | _GEN_2 | _GEN_3 | _GEN_4 | _GEN_5 | _GEN_6
|
||||
| _GEN_7 | _GEN_8 | _GEN_9 | ~_GEN_10) begin
|
||||
if (~_GEN | _writeAllowed_T_75 | _writeAllowed_T_78 | _writeAllowed_T_80
|
||||
| _writeAllowed_T_82 | _writeAllowed_T_84 | _writeAllowed_T_86
|
||||
| _writeAllowed_T_112 | _writeAllowed_T_88 | _writeAllowed_T_90
|
||||
| _writeAllowed_T_92 | _writeAllowed_T_94 | _writeAllowed_T_96
|
||||
| _writeAllowed_T_98 | _writeAllowed_T_100 | _writeAllowed_T_104
|
||||
| _writeAllowed_T_106 | _writeAllowed_T_108 | _writeAllowed_T_110
|
||||
| _writeAllowed_T_125 | _writeAllowed_T_126 | _writeAllowed_T_128
|
||||
| _writeAllowed_T_132 | ~_writeAllowed_T_130) begin
|
||||
end
|
||||
else
|
||||
sscratch <= next;
|
||||
if (~_GEN_17 | _GEN | _GEN_0 | _GEN_1 | _GEN_2 | _GEN_3 | _GEN_4 | _GEN_5 | _GEN_6
|
||||
| _GEN_7 | _GEN_8 | _GEN_9 | _GEN_10 | _GEN_11 | _GEN_12 | _GEN_13
|
||||
| ~_GEN_14) begin
|
||||
if (~_GEN | _writeAllowed_T_75 | _writeAllowed_T_78 | _writeAllowed_T_80
|
||||
| _writeAllowed_T_82 | _writeAllowed_T_84 | _writeAllowed_T_86
|
||||
| _writeAllowed_T_112 | _writeAllowed_T_88 | _writeAllowed_T_90
|
||||
| _writeAllowed_T_92 | _writeAllowed_T_94 | _writeAllowed_T_96
|
||||
| _writeAllowed_T_98 | _writeAllowed_T_100 | _writeAllowed_T_104
|
||||
| _writeAllowed_T_106 | _writeAllowed_T_108 | _writeAllowed_T_110
|
||||
| _writeAllowed_T_125 | _writeAllowed_T_126 | _writeAllowed_T_128
|
||||
| _writeAllowed_T_132 | _writeAllowed_T_130 | _writeAllowed_T_134
|
||||
| _writeAllowed_T_136 | _writeAllowed_T_138 | _writeAllowed_T_140
|
||||
| ~_writeAllowed_T_142) begin
|
||||
end
|
||||
else
|
||||
satpReg <= next;
|
||||
end
|
||||
end // always @(posedge)
|
||||
assign io_rdata =
|
||||
io_readAddr == 12'h300
|
||||
? mstatus
|
||||
: io_readAddr == 12'h301
|
||||
? 64'h800000000014112D
|
||||
: io_readAddr == 12'h302
|
||||
? medeleg
|
||||
: io_readAddr == 12'h303
|
||||
? mideleg
|
||||
: io_readAddr == 12'h304
|
||||
? mie
|
||||
: io_readAddr == 12'h305
|
||||
? mtvecReg
|
||||
: io_readAddr == 12'h341
|
||||
? mepcReg
|
||||
: io_readAddr == 12'h342
|
||||
? mcause
|
||||
: io_readAddr == 12'h343
|
||||
? mtval
|
||||
: io_readAddr == 12'h344
|
||||
? mip
|
||||
: io_readAddr == 12'h100
|
||||
? sstatus
|
||||
: io_readAddr == 12'h105
|
||||
? stvec
|
||||
: io_readAddr == 12'h140
|
||||
? sscratch
|
||||
: io_readAddr == 12'h141
|
||||
? sepc
|
||||
: io_readAddr == 12'h142
|
||||
? scause
|
||||
: io_readAddr == 12'h143
|
||||
? stval
|
||||
: io_readAddr == 12'h180
|
||||
? satpReg
|
||||
: io_readAddr == 12'hF14
|
||||
| io_readAddr != 12'hC00
|
||||
? 64'h0
|
||||
: cycle;
|
||||
readAllowed
|
||||
? (_readAllowed_T_75
|
||||
? mstatusView
|
||||
: _readAllowed_T_76
|
||||
? 64'h8000000000141101
|
||||
: _readAllowed_T_78
|
||||
? medeleg
|
||||
: _readAllowed_T_80
|
||||
? mideleg
|
||||
: _readAllowed_T_82
|
||||
? mie
|
||||
: _readAllowed_T_84
|
||||
? mtvecReg
|
||||
: _readAllowed_T_86
|
||||
? mcounteren
|
||||
: _readAllowed_T_112
|
||||
? mcountinhibit
|
||||
: _readAllowed_T_88
|
||||
? mscratch
|
||||
: _readAllowed_T_90
|
||||
? mepcReg
|
||||
: _readAllowed_T_92
|
||||
? mcause
|
||||
: _readAllowed_T_94
|
||||
? mtval
|
||||
: _readAllowed_T_96
|
||||
? mip
|
||||
: _readAllowed_T_98
|
||||
? pmpcfg0
|
||||
: _readAllowed_T_100
|
||||
? pmpaddr0
|
||||
: _readAllowed_T_102
|
||||
? 64'h1
|
||||
: _readAllowed_T_104
|
||||
? tdata1
|
||||
: _readAllowed_T_106
|
||||
? tdata2
|
||||
: _readAllowed_T_108
|
||||
? tcontrol
|
||||
: _readAllowed_T_110
|
||||
? mnstatus
|
||||
: _readAllowed_T_125
|
||||
? sstatusView
|
||||
: _readAllowed_T_126
|
||||
? mie
|
||||
& mideleg
|
||||
: _readAllowed_T_128
|
||||
? stvec
|
||||
: _readAllowed_T_132
|
||||
? scounteren
|
||||
: _readAllowed_T_130
|
||||
? sscratch
|
||||
: _readAllowed_T_134
|
||||
? sepc
|
||||
: _readAllowed_T_136
|
||||
? scause
|
||||
: _readAllowed_T_138
|
||||
? stval
|
||||
: _readAllowed_T_140
|
||||
? mip
|
||||
& mideleg
|
||||
: _readAllowed_T_142
|
||||
? satpReg
|
||||
: _readAllowed_T_116
|
||||
| _readAllowed_T_118
|
||||
| _readAllowed_T_120
|
||||
| _readAllowed_T_122
|
||||
? 64'h0
|
||||
: _readAllowed_T_114
|
||||
? instret
|
||||
: _readAllowed_T_69
|
||||
| _readAllowed_T_70
|
||||
? cycle
|
||||
: _readAllowed_T_72
|
||||
? instret
|
||||
: 64'h0)
|
||||
: 64'h0;
|
||||
assign io_readIllegal = ~readAllowed;
|
||||
assign io_trapVector = trapToS ? stvec : mtvecReg;
|
||||
assign io_satp = satpReg;
|
||||
assign io_mtvec = mtvecReg;
|
||||
assign io_mepc = mepcReg;
|
||||
assign io_sepc = sepc;
|
||||
assign io_medeleg = medeleg;
|
||||
assign io_mstatus = mstatus;
|
||||
endmodule
|
||||
|
||||
|
||||
Reference in New Issue
Block a user