feat: implement privileged mode support
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user