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

@@ -16,10 +16,20 @@ module Core(
input [63:0] io_dmem_resp_bits
);
wire [1:0] _privCtrl_io_priv;
wire _backend_io_decodeReady;
wire _backend_io_flush;
wire [63:0] _backend_io_redirectPc;
wire _backend_io_invalidateICache;
wire _backend_io_sfenceVma;
wire _backend_io_setPriv;
wire [1:0] _backend_io_targetPriv;
wire _backend_io_dmemReqValid;
wire [63:0] _backend_io_dmemReq_addr;
wire [63:0] _backend_io_dmemReq_data;
wire _backend_io_dmemReq_isStore;
wire [2:0] _backend_io_dmemReq_size;
wire [63:0] _backend_io_satpOut;
wire _id_io_outValid_0;
wire _id_io_outValid_1;
wire [63:0] _id_io_out_0_pc;
@@ -48,10 +58,20 @@ module Core(
wire _id_io_out_0_isWord;
wire _id_io_out_0_isSystem;
wire _id_io_out_0_isFenceI;
wire _id_io_out_0_isEcall;
wire _id_io_out_0_isEbreak;
wire _id_io_out_0_isMret;
wire _id_io_out_0_isSret;
wire _id_io_out_0_isSfenceVma;
wire _id_io_out_0_isXret;
wire _id_io_out_0_isWfi;
wire _id_io_out_0_isAmo;
wire [4:0] _id_io_out_0_amoOp;
wire _id_io_out_0_writesRd;
wire _id_io_out_0_illegal;
wire _id_io_out_0_fetchException;
wire [63:0] _id_io_out_0_fetchExceptionCause;
wire [63:0] _id_io_out_0_fetchExceptionTval;
wire [63:0] _id_io_out_1_pc;
wire [31:0] _id_io_out_1_inst;
wire [4:0] _id_io_out_1_rs1;
@@ -78,29 +98,70 @@ module Core(
wire _id_io_out_1_isWord;
wire _id_io_out_1_isSystem;
wire _id_io_out_1_isFenceI;
wire _id_io_out_1_isEcall;
wire _id_io_out_1_isEbreak;
wire _id_io_out_1_isMret;
wire _id_io_out_1_isSret;
wire _id_io_out_1_isSfenceVma;
wire _id_io_out_1_isXret;
wire _id_io_out_1_isWfi;
wire _id_io_out_1_isAmo;
wire [4:0] _id_io_out_1_amoOp;
wire _id_io_out_1_writesRd;
wire _id_io_out_1_illegal;
wire _id_io_out_1_fetchException;
wire [63:0] _id_io_out_1_fetchExceptionCause;
wire [63:0] _id_io_out_1_fetchExceptionTval;
wire _frontend_io_ptwMemReqValid;
wire [63:0] _frontend_io_ptwMemReqAddr;
wire _frontend_io_outValid;
wire [63:0] _frontend_io_out_pc;
wire [31:0] _frontend_io_out_inst_0;
wire [31:0] _frontend_io_out_inst_1;
wire _frontend_io_out_laneValid_0;
wire _frontend_io_out_laneValid_1;
wire _frontend_io_out_exception;
wire [63:0] _frontend_io_out_exceptionCause;
wire [63:0] _frontend_io_out_exceptionTval;
reg fetchValid;
reg [63:0] fetchReg_pc;
reg [31:0] fetchReg_inst_0;
reg [31:0] fetchReg_inst_1;
reg fetchReg_laneValid_0;
reg fetchReg_laneValid_1;
reg fetchReg_exception;
reg [63:0] fetchReg_exceptionCause;
reg [63:0] fetchReg_exceptionTval;
wire fetchReady = ~fetchValid | _backend_io_decodeReady;
reg frontendPtwOutstanding;
reg backendReadOutstanding;
wire frontendPtwCanIssue =
_frontend_io_ptwMemReqValid & ~frontendPtwOutstanding & ~backendReadOutstanding
& ~_backend_io_dmemReqValid;
wire _io_dmem_req_bits_isStore_T =
_backend_io_dmemReqValid & ~frontendPtwOutstanding;
wire frontendPtwRespValid =
io_dmem_resp_valid & (frontendPtwOutstanding | frontendPtwCanIssue);
wire backendRespValid =
io_dmem_resp_valid & ~frontendPtwOutstanding & ~frontendPtwCanIssue;
always @(posedge clock) begin
if (reset)
if (reset) begin
fetchValid <= 1'h0;
else
frontendPtwOutstanding <= 1'h0;
backendReadOutstanding <= 1'h0;
end
else begin
automatic logic backendReadIssue =
_io_dmem_req_bits_isStore_T & ~_backend_io_dmemReq_isStore
& ~backendReadOutstanding;
fetchValid <=
~_backend_io_flush & (fetchReady ? _frontend_io_outValid : fetchValid);
frontendPtwOutstanding <=
~frontendPtwRespValid & (frontendPtwCanIssue | frontendPtwOutstanding);
backendReadOutstanding <=
~(backendRespValid & (backendReadOutstanding | backendReadIssue))
& (backendReadIssue & ~backendRespValid | backendReadOutstanding);
end
if (_backend_io_flush | ~fetchReady) begin
end
else begin
@@ -109,173 +170,248 @@ module Core(
fetchReg_inst_1 <= _frontend_io_out_inst_1;
fetchReg_laneValid_0 <= _frontend_io_out_laneValid_0;
fetchReg_laneValid_1 <= _frontend_io_out_laneValid_1;
fetchReg_exception <= _frontend_io_out_exception;
fetchReg_exceptionCause <= _frontend_io_out_exceptionCause;
fetchReg_exceptionTval <= _frontend_io_out_exceptionTval;
end
end // always @(posedge)
Frontend frontend (
.clock (clock),
.reset (reset),
.io_redirectValid (_backend_io_flush),
.io_redirectPc (_backend_io_redirectPc),
.io_invalidateICache (_backend_io_invalidateICache),
.io_imemReqValid (io_imem_req_valid),
.io_imemReqAddr (io_imem_req_bits),
.io_imemRespValid (io_imem_resp_valid),
.io_imemRespBits_0 (io_imem_resp_bits_0),
.io_imemRespBits_1 (io_imem_resp_bits_1),
.io_outReady (fetchReady),
.io_outValid (_frontend_io_outValid),
.io_out_pc (_frontend_io_out_pc),
.io_out_inst_0 (_frontend_io_out_inst_0),
.io_out_inst_1 (_frontend_io_out_inst_1),
.io_out_laneValid_0 (_frontend_io_out_laneValid_0),
.io_out_laneValid_1 (_frontend_io_out_laneValid_1)
);
IDStage id (
.io_inValid (fetchValid),
.io_in_pc (fetchReg_pc),
.io_in_inst_0 (fetchReg_inst_0),
.io_in_inst_1 (fetchReg_inst_1),
.io_in_laneValid_0 (fetchReg_laneValid_0),
.io_in_laneValid_1 (fetchReg_laneValid_1),
.io_outValid_0 (_id_io_outValid_0),
.io_outValid_1 (_id_io_outValid_1),
.io_out_0_pc (_id_io_out_0_pc),
.io_out_0_inst (_id_io_out_0_inst),
.io_out_0_rs1 (_id_io_out_0_rs1),
.io_out_0_rs2 (_id_io_out_0_rs2),
.io_out_0_rd (_id_io_out_0_rd),
.io_out_0_funct3 (_id_io_out_0_funct3),
.io_out_0_immI (_id_io_out_0_immI),
.io_out_0_immS (_id_io_out_0_immS),
.io_out_0_immB (_id_io_out_0_immB),
.io_out_0_immU (_id_io_out_0_immU),
.io_out_0_immJ (_id_io_out_0_immJ),
.io_out_0_opClass (_id_io_out_0_opClass),
.io_out_0_aluFn (_id_io_out_0_aluFn),
.io_out_0_memWidth (_id_io_out_0_memWidth),
.io_out_0_memSigned (_id_io_out_0_memSigned),
.io_out_0_isLoad (_id_io_out_0_isLoad),
.io_out_0_isStore (_id_io_out_0_isStore),
.io_out_0_isBranch (_id_io_out_0_isBranch),
.io_out_0_isJal (_id_io_out_0_isJal),
.io_out_0_isJalr (_id_io_out_0_isJalr),
.io_out_0_isLui (_id_io_out_0_isLui),
.io_out_0_isAuipc (_id_io_out_0_isAuipc),
.io_out_0_isOpImm (_id_io_out_0_isOpImm),
.io_out_0_isWord (_id_io_out_0_isWord),
.io_out_0_isSystem (_id_io_out_0_isSystem),
.io_out_0_isFenceI (_id_io_out_0_isFenceI),
.io_out_0_isAmo (_id_io_out_0_isAmo),
.io_out_0_amoOp (_id_io_out_0_amoOp),
.io_out_0_writesRd (_id_io_out_0_writesRd),
.io_out_0_illegal (_id_io_out_0_illegal),
.io_out_1_pc (_id_io_out_1_pc),
.io_out_1_inst (_id_io_out_1_inst),
.io_out_1_rs1 (_id_io_out_1_rs1),
.io_out_1_rs2 (_id_io_out_1_rs2),
.io_out_1_rd (_id_io_out_1_rd),
.io_out_1_funct3 (_id_io_out_1_funct3),
.io_out_1_immI (_id_io_out_1_immI),
.io_out_1_immS (_id_io_out_1_immS),
.io_out_1_immB (_id_io_out_1_immB),
.io_out_1_immU (_id_io_out_1_immU),
.io_out_1_immJ (_id_io_out_1_immJ),
.io_out_1_opClass (_id_io_out_1_opClass),
.io_out_1_aluFn (_id_io_out_1_aluFn),
.io_out_1_memWidth (_id_io_out_1_memWidth),
.io_out_1_memSigned (_id_io_out_1_memSigned),
.io_out_1_isLoad (_id_io_out_1_isLoad),
.io_out_1_isStore (_id_io_out_1_isStore),
.io_out_1_isBranch (_id_io_out_1_isBranch),
.io_out_1_isJal (_id_io_out_1_isJal),
.io_out_1_isJalr (_id_io_out_1_isJalr),
.io_out_1_isLui (_id_io_out_1_isLui),
.io_out_1_isAuipc (_id_io_out_1_isAuipc),
.io_out_1_isOpImm (_id_io_out_1_isOpImm),
.io_out_1_isWord (_id_io_out_1_isWord),
.io_out_1_isSystem (_id_io_out_1_isSystem),
.io_out_1_isFenceI (_id_io_out_1_isFenceI),
.io_out_1_isAmo (_id_io_out_1_isAmo),
.io_out_1_amoOp (_id_io_out_1_amoOp),
.io_out_1_writesRd (_id_io_out_1_writesRd),
.io_out_1_illegal (_id_io_out_1_illegal)
);
OoOBackend backend (
.clock (clock),
.reset (reset),
.io_decodeValid_0 (_id_io_outValid_0),
.io_decodeValid_1 (_id_io_outValid_1),
.io_decode_0_pc (_id_io_out_0_pc),
.io_decode_0_inst (_id_io_out_0_inst),
.io_decode_0_rs1 (_id_io_out_0_rs1),
.io_decode_0_rs2 (_id_io_out_0_rs2),
.io_decode_0_rd (_id_io_out_0_rd),
.io_decode_0_funct3 (_id_io_out_0_funct3),
.io_decode_0_immI (_id_io_out_0_immI),
.io_decode_0_immS (_id_io_out_0_immS),
.io_decode_0_immB (_id_io_out_0_immB),
.io_decode_0_immU (_id_io_out_0_immU),
.io_decode_0_immJ (_id_io_out_0_immJ),
.io_decode_0_opClass (_id_io_out_0_opClass),
.io_decode_0_aluFn (_id_io_out_0_aluFn),
.io_decode_0_memWidth (_id_io_out_0_memWidth),
.io_decode_0_memSigned (_id_io_out_0_memSigned),
.io_decode_0_isLoad (_id_io_out_0_isLoad),
.io_decode_0_isStore (_id_io_out_0_isStore),
.io_decode_0_isBranch (_id_io_out_0_isBranch),
.io_decode_0_isJal (_id_io_out_0_isJal),
.io_decode_0_isJalr (_id_io_out_0_isJalr),
.io_decode_0_isLui (_id_io_out_0_isLui),
.io_decode_0_isAuipc (_id_io_out_0_isAuipc),
.io_decode_0_isOpImm (_id_io_out_0_isOpImm),
.io_decode_0_isWord (_id_io_out_0_isWord),
.io_decode_0_isSystem (_id_io_out_0_isSystem),
.io_decode_0_isFenceI (_id_io_out_0_isFenceI),
.io_decode_0_isAmo (_id_io_out_0_isAmo),
.io_decode_0_amoOp (_id_io_out_0_amoOp),
.io_decode_0_writesRd (_id_io_out_0_writesRd),
.io_decode_0_illegal (_id_io_out_0_illegal),
.io_decode_1_pc (_id_io_out_1_pc),
.io_decode_1_inst (_id_io_out_1_inst),
.io_decode_1_rs1 (_id_io_out_1_rs1),
.io_decode_1_rs2 (_id_io_out_1_rs2),
.io_decode_1_rd (_id_io_out_1_rd),
.io_decode_1_funct3 (_id_io_out_1_funct3),
.io_decode_1_immI (_id_io_out_1_immI),
.io_decode_1_immS (_id_io_out_1_immS),
.io_decode_1_immB (_id_io_out_1_immB),
.io_decode_1_immU (_id_io_out_1_immU),
.io_decode_1_immJ (_id_io_out_1_immJ),
.io_decode_1_opClass (_id_io_out_1_opClass),
.io_decode_1_aluFn (_id_io_out_1_aluFn),
.io_decode_1_memWidth (_id_io_out_1_memWidth),
.io_decode_1_memSigned (_id_io_out_1_memSigned),
.io_decode_1_isLoad (_id_io_out_1_isLoad),
.io_decode_1_isStore (_id_io_out_1_isStore),
.io_decode_1_isBranch (_id_io_out_1_isBranch),
.io_decode_1_isJal (_id_io_out_1_isJal),
.io_decode_1_isJalr (_id_io_out_1_isJalr),
.io_decode_1_isLui (_id_io_out_1_isLui),
.io_decode_1_isAuipc (_id_io_out_1_isAuipc),
.io_decode_1_isOpImm (_id_io_out_1_isOpImm),
.io_decode_1_isWord (_id_io_out_1_isWord),
.io_decode_1_isSystem (_id_io_out_1_isSystem),
.io_decode_1_isFenceI (_id_io_out_1_isFenceI),
.io_decode_1_isAmo (_id_io_out_1_isAmo),
.io_decode_1_amoOp (_id_io_out_1_amoOp),
.io_decode_1_writesRd (_id_io_out_1_writesRd),
.io_decode_1_illegal (_id_io_out_1_illegal),
.io_decodeReady (_backend_io_decodeReady),
.io_flush (_backend_io_flush),
.io_redirectValid (_backend_io_flush),
.io_redirectPc (_backend_io_redirectPc),
.io_invalidateICache (_backend_io_invalidateICache),
.io_dmemReqValid (io_dmem_req_valid),
.io_dmemReq_addr (io_dmem_req_bits_addr),
.io_dmemReq_data (io_dmem_req_bits_data),
.io_dmemReq_isStore (io_dmem_req_bits_isStore),
.io_dmemReq_size (io_dmem_req_bits_size),
.io_dmemRespValid (io_dmem_resp_valid),
.io_dmemRespData (io_dmem_resp_bits)
.io_sfenceVma (_backend_io_sfenceVma),
.io_satp (_backend_io_satpOut),
.io_currentPriv (_privCtrl_io_priv),
.io_imemReqValid (io_imem_req_valid),
.io_imemReqAddr (io_imem_req_bits),
.io_imemRespValid (io_imem_resp_valid),
.io_imemRespBits_0 (io_imem_resp_bits_0),
.io_imemRespBits_1 (io_imem_resp_bits_1),
.io_ptwMemReqValid (_frontend_io_ptwMemReqValid),
.io_ptwMemReqAddr (_frontend_io_ptwMemReqAddr),
.io_ptwMemRespValid (frontendPtwRespValid),
.io_ptwMemRespData (io_dmem_resp_bits),
.io_outReady (fetchReady),
.io_outValid (_frontend_io_outValid),
.io_out_pc (_frontend_io_out_pc),
.io_out_inst_0 (_frontend_io_out_inst_0),
.io_out_inst_1 (_frontend_io_out_inst_1),
.io_out_laneValid_0 (_frontend_io_out_laneValid_0),
.io_out_laneValid_1 (_frontend_io_out_laneValid_1),
.io_out_exception (_frontend_io_out_exception),
.io_out_exceptionCause (_frontend_io_out_exceptionCause),
.io_out_exceptionTval (_frontend_io_out_exceptionTval)
);
IDStage id (
.io_inValid (fetchValid),
.io_in_pc (fetchReg_pc),
.io_in_inst_0 (fetchReg_inst_0),
.io_in_inst_1 (fetchReg_inst_1),
.io_in_laneValid_0 (fetchReg_laneValid_0),
.io_in_laneValid_1 (fetchReg_laneValid_1),
.io_in_exception (fetchReg_exception),
.io_in_exceptionCause (fetchReg_exceptionCause),
.io_in_exceptionTval (fetchReg_exceptionTval),
.io_outValid_0 (_id_io_outValid_0),
.io_outValid_1 (_id_io_outValid_1),
.io_out_0_pc (_id_io_out_0_pc),
.io_out_0_inst (_id_io_out_0_inst),
.io_out_0_rs1 (_id_io_out_0_rs1),
.io_out_0_rs2 (_id_io_out_0_rs2),
.io_out_0_rd (_id_io_out_0_rd),
.io_out_0_funct3 (_id_io_out_0_funct3),
.io_out_0_immI (_id_io_out_0_immI),
.io_out_0_immS (_id_io_out_0_immS),
.io_out_0_immB (_id_io_out_0_immB),
.io_out_0_immU (_id_io_out_0_immU),
.io_out_0_immJ (_id_io_out_0_immJ),
.io_out_0_opClass (_id_io_out_0_opClass),
.io_out_0_aluFn (_id_io_out_0_aluFn),
.io_out_0_memWidth (_id_io_out_0_memWidth),
.io_out_0_memSigned (_id_io_out_0_memSigned),
.io_out_0_isLoad (_id_io_out_0_isLoad),
.io_out_0_isStore (_id_io_out_0_isStore),
.io_out_0_isBranch (_id_io_out_0_isBranch),
.io_out_0_isJal (_id_io_out_0_isJal),
.io_out_0_isJalr (_id_io_out_0_isJalr),
.io_out_0_isLui (_id_io_out_0_isLui),
.io_out_0_isAuipc (_id_io_out_0_isAuipc),
.io_out_0_isOpImm (_id_io_out_0_isOpImm),
.io_out_0_isWord (_id_io_out_0_isWord),
.io_out_0_isSystem (_id_io_out_0_isSystem),
.io_out_0_isFenceI (_id_io_out_0_isFenceI),
.io_out_0_isEcall (_id_io_out_0_isEcall),
.io_out_0_isEbreak (_id_io_out_0_isEbreak),
.io_out_0_isMret (_id_io_out_0_isMret),
.io_out_0_isSret (_id_io_out_0_isSret),
.io_out_0_isSfenceVma (_id_io_out_0_isSfenceVma),
.io_out_0_isXret (_id_io_out_0_isXret),
.io_out_0_isWfi (_id_io_out_0_isWfi),
.io_out_0_isAmo (_id_io_out_0_isAmo),
.io_out_0_amoOp (_id_io_out_0_amoOp),
.io_out_0_writesRd (_id_io_out_0_writesRd),
.io_out_0_illegal (_id_io_out_0_illegal),
.io_out_0_fetchException (_id_io_out_0_fetchException),
.io_out_0_fetchExceptionCause (_id_io_out_0_fetchExceptionCause),
.io_out_0_fetchExceptionTval (_id_io_out_0_fetchExceptionTval),
.io_out_1_pc (_id_io_out_1_pc),
.io_out_1_inst (_id_io_out_1_inst),
.io_out_1_rs1 (_id_io_out_1_rs1),
.io_out_1_rs2 (_id_io_out_1_rs2),
.io_out_1_rd (_id_io_out_1_rd),
.io_out_1_funct3 (_id_io_out_1_funct3),
.io_out_1_immI (_id_io_out_1_immI),
.io_out_1_immS (_id_io_out_1_immS),
.io_out_1_immB (_id_io_out_1_immB),
.io_out_1_immU (_id_io_out_1_immU),
.io_out_1_immJ (_id_io_out_1_immJ),
.io_out_1_opClass (_id_io_out_1_opClass),
.io_out_1_aluFn (_id_io_out_1_aluFn),
.io_out_1_memWidth (_id_io_out_1_memWidth),
.io_out_1_memSigned (_id_io_out_1_memSigned),
.io_out_1_isLoad (_id_io_out_1_isLoad),
.io_out_1_isStore (_id_io_out_1_isStore),
.io_out_1_isBranch (_id_io_out_1_isBranch),
.io_out_1_isJal (_id_io_out_1_isJal),
.io_out_1_isJalr (_id_io_out_1_isJalr),
.io_out_1_isLui (_id_io_out_1_isLui),
.io_out_1_isAuipc (_id_io_out_1_isAuipc),
.io_out_1_isOpImm (_id_io_out_1_isOpImm),
.io_out_1_isWord (_id_io_out_1_isWord),
.io_out_1_isSystem (_id_io_out_1_isSystem),
.io_out_1_isFenceI (_id_io_out_1_isFenceI),
.io_out_1_isEcall (_id_io_out_1_isEcall),
.io_out_1_isEbreak (_id_io_out_1_isEbreak),
.io_out_1_isMret (_id_io_out_1_isMret),
.io_out_1_isSret (_id_io_out_1_isSret),
.io_out_1_isSfenceVma (_id_io_out_1_isSfenceVma),
.io_out_1_isXret (_id_io_out_1_isXret),
.io_out_1_isWfi (_id_io_out_1_isWfi),
.io_out_1_isAmo (_id_io_out_1_isAmo),
.io_out_1_amoOp (_id_io_out_1_amoOp),
.io_out_1_writesRd (_id_io_out_1_writesRd),
.io_out_1_illegal (_id_io_out_1_illegal),
.io_out_1_fetchException (_id_io_out_1_fetchException),
.io_out_1_fetchExceptionCause (_id_io_out_1_fetchExceptionCause),
.io_out_1_fetchExceptionTval (_id_io_out_1_fetchExceptionTval)
);
OoOBackend backend (
.clock (clock),
.reset (reset),
.io_decodeValid_0 (_id_io_outValid_0),
.io_decodeValid_1 (_id_io_outValid_1),
.io_decode_0_pc (_id_io_out_0_pc),
.io_decode_0_inst (_id_io_out_0_inst),
.io_decode_0_rs1 (_id_io_out_0_rs1),
.io_decode_0_rs2 (_id_io_out_0_rs2),
.io_decode_0_rd (_id_io_out_0_rd),
.io_decode_0_funct3 (_id_io_out_0_funct3),
.io_decode_0_immI (_id_io_out_0_immI),
.io_decode_0_immS (_id_io_out_0_immS),
.io_decode_0_immB (_id_io_out_0_immB),
.io_decode_0_immU (_id_io_out_0_immU),
.io_decode_0_immJ (_id_io_out_0_immJ),
.io_decode_0_opClass (_id_io_out_0_opClass),
.io_decode_0_aluFn (_id_io_out_0_aluFn),
.io_decode_0_memWidth (_id_io_out_0_memWidth),
.io_decode_0_memSigned (_id_io_out_0_memSigned),
.io_decode_0_isLoad (_id_io_out_0_isLoad),
.io_decode_0_isStore (_id_io_out_0_isStore),
.io_decode_0_isBranch (_id_io_out_0_isBranch),
.io_decode_0_isJal (_id_io_out_0_isJal),
.io_decode_0_isJalr (_id_io_out_0_isJalr),
.io_decode_0_isLui (_id_io_out_0_isLui),
.io_decode_0_isAuipc (_id_io_out_0_isAuipc),
.io_decode_0_isOpImm (_id_io_out_0_isOpImm),
.io_decode_0_isWord (_id_io_out_0_isWord),
.io_decode_0_isSystem (_id_io_out_0_isSystem),
.io_decode_0_isFenceI (_id_io_out_0_isFenceI),
.io_decode_0_isEcall (_id_io_out_0_isEcall),
.io_decode_0_isEbreak (_id_io_out_0_isEbreak),
.io_decode_0_isMret (_id_io_out_0_isMret),
.io_decode_0_isSret (_id_io_out_0_isSret),
.io_decode_0_isSfenceVma (_id_io_out_0_isSfenceVma),
.io_decode_0_isXret (_id_io_out_0_isXret),
.io_decode_0_isWfi (_id_io_out_0_isWfi),
.io_decode_0_isAmo (_id_io_out_0_isAmo),
.io_decode_0_amoOp (_id_io_out_0_amoOp),
.io_decode_0_writesRd (_id_io_out_0_writesRd),
.io_decode_0_illegal (_id_io_out_0_illegal),
.io_decode_0_fetchException (_id_io_out_0_fetchException),
.io_decode_0_fetchExceptionCause (_id_io_out_0_fetchExceptionCause),
.io_decode_0_fetchExceptionTval (_id_io_out_0_fetchExceptionTval),
.io_decode_1_pc (_id_io_out_1_pc),
.io_decode_1_inst (_id_io_out_1_inst),
.io_decode_1_rs1 (_id_io_out_1_rs1),
.io_decode_1_rs2 (_id_io_out_1_rs2),
.io_decode_1_rd (_id_io_out_1_rd),
.io_decode_1_funct3 (_id_io_out_1_funct3),
.io_decode_1_immI (_id_io_out_1_immI),
.io_decode_1_immS (_id_io_out_1_immS),
.io_decode_1_immB (_id_io_out_1_immB),
.io_decode_1_immU (_id_io_out_1_immU),
.io_decode_1_immJ (_id_io_out_1_immJ),
.io_decode_1_opClass (_id_io_out_1_opClass),
.io_decode_1_aluFn (_id_io_out_1_aluFn),
.io_decode_1_memWidth (_id_io_out_1_memWidth),
.io_decode_1_memSigned (_id_io_out_1_memSigned),
.io_decode_1_isLoad (_id_io_out_1_isLoad),
.io_decode_1_isStore (_id_io_out_1_isStore),
.io_decode_1_isBranch (_id_io_out_1_isBranch),
.io_decode_1_isJal (_id_io_out_1_isJal),
.io_decode_1_isJalr (_id_io_out_1_isJalr),
.io_decode_1_isLui (_id_io_out_1_isLui),
.io_decode_1_isAuipc (_id_io_out_1_isAuipc),
.io_decode_1_isOpImm (_id_io_out_1_isOpImm),
.io_decode_1_isWord (_id_io_out_1_isWord),
.io_decode_1_isSystem (_id_io_out_1_isSystem),
.io_decode_1_isFenceI (_id_io_out_1_isFenceI),
.io_decode_1_isEcall (_id_io_out_1_isEcall),
.io_decode_1_isEbreak (_id_io_out_1_isEbreak),
.io_decode_1_isMret (_id_io_out_1_isMret),
.io_decode_1_isSret (_id_io_out_1_isSret),
.io_decode_1_isSfenceVma (_id_io_out_1_isSfenceVma),
.io_decode_1_isXret (_id_io_out_1_isXret),
.io_decode_1_isWfi (_id_io_out_1_isWfi),
.io_decode_1_isAmo (_id_io_out_1_isAmo),
.io_decode_1_amoOp (_id_io_out_1_amoOp),
.io_decode_1_writesRd (_id_io_out_1_writesRd),
.io_decode_1_illegal (_id_io_out_1_illegal),
.io_decode_1_fetchException (_id_io_out_1_fetchException),
.io_decode_1_fetchExceptionCause (_id_io_out_1_fetchExceptionCause),
.io_decode_1_fetchExceptionTval (_id_io_out_1_fetchExceptionTval),
.io_decodeReady (_backend_io_decodeReady),
.io_flush (_backend_io_flush),
.io_redirectPc (_backend_io_redirectPc),
.io_invalidateICache (_backend_io_invalidateICache),
.io_sfenceVma (_backend_io_sfenceVma),
.io_setPriv (_backend_io_setPriv),
.io_targetPriv (_backend_io_targetPriv),
.io_dmemReqValid (_backend_io_dmemReqValid),
.io_dmemReq_addr (_backend_io_dmemReq_addr),
.io_dmemReq_data (_backend_io_dmemReq_data),
.io_dmemReq_isStore (_backend_io_dmemReq_isStore),
.io_dmemReq_size (_backend_io_dmemReq_size),
.io_dmemRespValid (backendRespValid),
.io_dmemRespData (io_dmem_resp_bits),
.io_satpOut (_backend_io_satpOut),
.io_currentPriv (_privCtrl_io_priv)
);
PrivilegeControl privCtrl (
.clock (clock),
.reset (reset),
.io_nextPriv (_backend_io_targetPriv),
.io_setPriv (_backend_io_setPriv),
.io_priv (_privCtrl_io_priv)
);
assign io_dmem_req_valid = _io_dmem_req_bits_isStore_T | frontendPtwCanIssue;
assign io_dmem_req_bits_addr =
frontendPtwCanIssue ? _frontend_io_ptwMemReqAddr : _backend_io_dmemReq_addr;
assign io_dmem_req_bits_data = frontendPtwCanIssue ? 64'h0 : _backend_io_dmemReq_data;
assign io_dmem_req_bits_isStore =
_io_dmem_req_bits_isStore_T & _backend_io_dmemReq_isStore;
assign io_dmem_req_bits_size = frontendPtwCanIssue ? 3'h3 : _backend_io_dmemReq_size;
endmodule