// Generated by CIRCT firtool-1.139.0 module Core( input clock, reset, output io_imem_req_valid, output [63:0] io_imem_req_bits, input io_imem_resp_valid, input [31:0] io_imem_resp_bits_0, io_imem_resp_bits_1, output io_dmem_req_valid, output [63:0] io_dmem_req_bits_addr, io_dmem_req_bits_data, output io_dmem_req_bits_isStore, output [2:0] io_dmem_req_bits_size, input io_dmem_resp_valid, 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; wire [31:0] _id_io_out_0_inst; wire [4:0] _id_io_out_0_rs1; wire [4:0] _id_io_out_0_rs2; wire [4:0] _id_io_out_0_rd; wire [2:0] _id_io_out_0_funct3; wire [63:0] _id_io_out_0_immI; wire [63:0] _id_io_out_0_immS; wire [63:0] _id_io_out_0_immB; wire [63:0] _id_io_out_0_immU; wire [63:0] _id_io_out_0_immJ; wire [3:0] _id_io_out_0_opClass; wire [4:0] _id_io_out_0_aluFn; wire [2:0] _id_io_out_0_memWidth; wire _id_io_out_0_memSigned; wire _id_io_out_0_isLoad; wire _id_io_out_0_isStore; wire _id_io_out_0_isBranch; wire _id_io_out_0_isJal; wire _id_io_out_0_isJalr; wire _id_io_out_0_isLui; wire _id_io_out_0_isAuipc; wire _id_io_out_0_isOpImm; 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; wire [4:0] _id_io_out_1_rs2; wire [4:0] _id_io_out_1_rd; wire [2:0] _id_io_out_1_funct3; wire [63:0] _id_io_out_1_immI; wire [63:0] _id_io_out_1_immS; wire [63:0] _id_io_out_1_immB; wire [63:0] _id_io_out_1_immU; wire [63:0] _id_io_out_1_immJ; wire [3:0] _id_io_out_1_opClass; wire [4:0] _id_io_out_1_aluFn; wire [2:0] _id_io_out_1_memWidth; wire _id_io_out_1_memSigned; wire _id_io_out_1_isLoad; wire _id_io_out_1_isStore; wire _id_io_out_1_isBranch; wire _id_io_out_1_isJal; wire _id_io_out_1_isJalr; wire _id_io_out_1_isLui; wire _id_io_out_1_isAuipc; wire _id_io_out_1_isOpImm; 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) begin fetchValid <= 1'h0; 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 fetchReg_pc <= _frontend_io_out_pc; fetchReg_inst_0 <= _frontend_io_out_inst_0; 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_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