feat: implement privileged mode support

This commit is contained in:
abnerhexu
2026-06-29 07:00:55 +00:00
parent a32db39c80
commit b6afa61e66
89 changed files with 49571 additions and 43647 deletions

View File

@@ -6,6 +6,9 @@ module IDStage(
io_in_inst_1,
input io_in_laneValid_0,
io_in_laneValid_1,
io_in_exception,
input [63:0] io_in_exceptionCause,
io_in_exceptionTval,
output io_outValid_0,
io_outValid_1,
output [63:0] io_out_0_pc,
@@ -34,11 +37,21 @@ module IDStage(
io_out_0_isWord,
io_out_0_isSystem,
io_out_0_isFenceI,
io_out_0_isEcall,
io_out_0_isEbreak,
io_out_0_isMret,
io_out_0_isSret,
io_out_0_isSfenceVma,
io_out_0_isXret,
io_out_0_isWfi,
io_out_0_isAmo,
output [4:0] io_out_0_amoOp,
output io_out_0_writesRd,
io_out_0_illegal,
output [63:0] io_out_1_pc,
io_out_0_fetchException,
output [63:0] io_out_0_fetchExceptionCause,
io_out_0_fetchExceptionTval,
io_out_1_pc,
output [31:0] io_out_1_inst,
output [4:0] io_out_1_rs1,
io_out_1_rs2,
@@ -64,81 +77,111 @@ module IDStage(
io_out_1_isWord,
io_out_1_isSystem,
io_out_1_isFenceI,
io_out_1_isEcall,
io_out_1_isEbreak,
io_out_1_isMret,
io_out_1_isSret,
io_out_1_isSfenceVma,
io_out_1_isXret,
io_out_1_isWfi,
io_out_1_isAmo,
output [4:0] io_out_1_amoOp,
output io_out_1_writesRd,
io_out_1_illegal
io_out_1_illegal,
io_out_1_fetchException,
output [63:0] io_out_1_fetchExceptionCause,
io_out_1_fetchExceptionTval
);
Decoder decoders_0 (
.io_pc (io_in_pc),
.io_inst (io_in_inst_0),
.io_out_pc (io_out_0_pc),
.io_out_inst (io_out_0_inst),
.io_out_rs1 (io_out_0_rs1),
.io_out_rs2 (io_out_0_rs2),
.io_out_rd (io_out_0_rd),
.io_out_funct3 (io_out_0_funct3),
.io_out_immI (io_out_0_immI),
.io_out_immS (io_out_0_immS),
.io_out_immB (io_out_0_immB),
.io_out_immU (io_out_0_immU),
.io_out_immJ (io_out_0_immJ),
.io_out_opClass (io_out_0_opClass),
.io_out_aluFn (io_out_0_aluFn),
.io_out_memWidth (io_out_0_memWidth),
.io_out_memSigned (io_out_0_memSigned),
.io_out_isLoad (io_out_0_isLoad),
.io_out_isStore (io_out_0_isStore),
.io_out_isBranch (io_out_0_isBranch),
.io_out_isJal (io_out_0_isJal),
.io_out_isJalr (io_out_0_isJalr),
.io_out_isLui (io_out_0_isLui),
.io_out_isAuipc (io_out_0_isAuipc),
.io_out_isOpImm (io_out_0_isOpImm),
.io_out_isWord (io_out_0_isWord),
.io_out_isSystem (io_out_0_isSystem),
.io_out_isFenceI (io_out_0_isFenceI),
.io_out_isAmo (io_out_0_isAmo),
.io_out_amoOp (io_out_0_amoOp),
.io_out_writesRd (io_out_0_writesRd),
.io_out_illegal (io_out_0_illegal)
.io_pc (io_in_pc),
.io_inst (io_in_inst_0),
.io_out_pc (io_out_0_pc),
.io_out_inst (io_out_0_inst),
.io_out_rs1 (io_out_0_rs1),
.io_out_rs2 (io_out_0_rs2),
.io_out_rd (io_out_0_rd),
.io_out_funct3 (io_out_0_funct3),
.io_out_immI (io_out_0_immI),
.io_out_immS (io_out_0_immS),
.io_out_immB (io_out_0_immB),
.io_out_immU (io_out_0_immU),
.io_out_immJ (io_out_0_immJ),
.io_out_opClass (io_out_0_opClass),
.io_out_aluFn (io_out_0_aluFn),
.io_out_memWidth (io_out_0_memWidth),
.io_out_memSigned (io_out_0_memSigned),
.io_out_isLoad (io_out_0_isLoad),
.io_out_isStore (io_out_0_isStore),
.io_out_isBranch (io_out_0_isBranch),
.io_out_isJal (io_out_0_isJal),
.io_out_isJalr (io_out_0_isJalr),
.io_out_isLui (io_out_0_isLui),
.io_out_isAuipc (io_out_0_isAuipc),
.io_out_isOpImm (io_out_0_isOpImm),
.io_out_isWord (io_out_0_isWord),
.io_out_isSystem (io_out_0_isSystem),
.io_out_isFenceI (io_out_0_isFenceI),
.io_out_isEcall (io_out_0_isEcall),
.io_out_isEbreak (io_out_0_isEbreak),
.io_out_isMret (io_out_0_isMret),
.io_out_isSret (io_out_0_isSret),
.io_out_isSfenceVma (io_out_0_isSfenceVma),
.io_out_isXret (io_out_0_isXret),
.io_out_isWfi (io_out_0_isWfi),
.io_out_isAmo (io_out_0_isAmo),
.io_out_amoOp (io_out_0_amoOp),
.io_out_writesRd (io_out_0_writesRd),
.io_out_illegal (io_out_0_illegal)
);
Decoder decoders_1 (
.io_pc (io_in_pc + 64'h4),
.io_inst (io_in_inst_1),
.io_out_pc (io_out_1_pc),
.io_out_inst (io_out_1_inst),
.io_out_rs1 (io_out_1_rs1),
.io_out_rs2 (io_out_1_rs2),
.io_out_rd (io_out_1_rd),
.io_out_funct3 (io_out_1_funct3),
.io_out_immI (io_out_1_immI),
.io_out_immS (io_out_1_immS),
.io_out_immB (io_out_1_immB),
.io_out_immU (io_out_1_immU),
.io_out_immJ (io_out_1_immJ),
.io_out_opClass (io_out_1_opClass),
.io_out_aluFn (io_out_1_aluFn),
.io_out_memWidth (io_out_1_memWidth),
.io_out_memSigned (io_out_1_memSigned),
.io_out_isLoad (io_out_1_isLoad),
.io_out_isStore (io_out_1_isStore),
.io_out_isBranch (io_out_1_isBranch),
.io_out_isJal (io_out_1_isJal),
.io_out_isJalr (io_out_1_isJalr),
.io_out_isLui (io_out_1_isLui),
.io_out_isAuipc (io_out_1_isAuipc),
.io_out_isOpImm (io_out_1_isOpImm),
.io_out_isWord (io_out_1_isWord),
.io_out_isSystem (io_out_1_isSystem),
.io_out_isFenceI (io_out_1_isFenceI),
.io_out_isAmo (io_out_1_isAmo),
.io_out_amoOp (io_out_1_amoOp),
.io_out_writesRd (io_out_1_writesRd),
.io_out_illegal (io_out_1_illegal)
.io_pc (io_in_pc + 64'h4),
.io_inst (io_in_inst_1),
.io_out_pc (io_out_1_pc),
.io_out_inst (io_out_1_inst),
.io_out_rs1 (io_out_1_rs1),
.io_out_rs2 (io_out_1_rs2),
.io_out_rd (io_out_1_rd),
.io_out_funct3 (io_out_1_funct3),
.io_out_immI (io_out_1_immI),
.io_out_immS (io_out_1_immS),
.io_out_immB (io_out_1_immB),
.io_out_immU (io_out_1_immU),
.io_out_immJ (io_out_1_immJ),
.io_out_opClass (io_out_1_opClass),
.io_out_aluFn (io_out_1_aluFn),
.io_out_memWidth (io_out_1_memWidth),
.io_out_memSigned (io_out_1_memSigned),
.io_out_isLoad (io_out_1_isLoad),
.io_out_isStore (io_out_1_isStore),
.io_out_isBranch (io_out_1_isBranch),
.io_out_isJal (io_out_1_isJal),
.io_out_isJalr (io_out_1_isJalr),
.io_out_isLui (io_out_1_isLui),
.io_out_isAuipc (io_out_1_isAuipc),
.io_out_isOpImm (io_out_1_isOpImm),
.io_out_isWord (io_out_1_isWord),
.io_out_isSystem (io_out_1_isSystem),
.io_out_isFenceI (io_out_1_isFenceI),
.io_out_isEcall (io_out_1_isEcall),
.io_out_isEbreak (io_out_1_isEbreak),
.io_out_isMret (io_out_1_isMret),
.io_out_isSret (io_out_1_isSret),
.io_out_isSfenceVma (io_out_1_isSfenceVma),
.io_out_isXret (io_out_1_isXret),
.io_out_isWfi (io_out_1_isWfi),
.io_out_isAmo (io_out_1_isAmo),
.io_out_amoOp (io_out_1_amoOp),
.io_out_writesRd (io_out_1_writesRd),
.io_out_illegal (io_out_1_illegal)
);
assign io_outValid_0 = io_inValid & io_in_laneValid_0;
assign io_outValid_1 = io_inValid & io_in_laneValid_1;
assign io_out_0_fetchException = io_in_exception;
assign io_out_0_fetchExceptionCause = io_in_exceptionCause;
assign io_out_0_fetchExceptionTval = io_in_exceptionTval;
assign io_out_1_fetchException = io_in_exception;
assign io_out_1_fetchExceptionCause = io_in_exceptionCause;
assign io_out_1_fetchExceptionTval = io_in_exceptionTval;
endmodule