// Generated by CIRCT firtool-1.139.0 module LSU( input clock, reset, io_reqValid, input [63:0] io_req_addr, io_req_data, input io_req_isStore, input [2:0] io_req_size, output io_reqReady, input [63:0] io_satp, output io_dmemReqValid, output [63:0] io_dmemReq_addr, io_dmemReq_data, output io_dmemReq_isStore, output [2:0] io_dmemReq_size, input io_dmemRespValid, input [63:0] io_dmemRespData, output io_respValid, output [63:0] io_respData, output io_pageFault ); wire _dcache_io_reqReady; wire _dcache_io_memReqValid; wire [63:0] _dcache_io_memReq_addr; wire [63:0] _dcache_io_memReq_data; wire _dcache_io_memReq_isStore; wire [2:0] _dcache_io_memReq_size; wire _dcache_io_respValid; wire _mmu_io_resp_pageFault; wire _mmu_io_ptwMemReq_valid; wire [63:0] _mmu_io_ptwMemReq_addr; wire _mmu_io_refill_valid; wire [26:0] _mmu_io_refill_vpn; wire [43:0] _mmu_io_refill_ppn; wire [7:0] _mmu_io_refill_flags; wire _dtlb_io_resp_hit; wire _dtlb_io_resp_miss; wire [63:0] _dtlb_io_resp_paddr; wire _dtlb_io_resp_pageFault; reg ptwOutstanding; wire translationFault = _dtlb_io_resp_pageFault | _mmu_io_resp_pageFault; always @(posedge clock) begin if (reset) ptwOutstanding <= 1'h0; else ptwOutstanding <= _mmu_io_ptwMemReq_valid | ~(io_dmemRespValid & ptwOutstanding) & ptwOutstanding; end // always @(posedge) DTLB dtlb ( .clock (clock), .reset (reset), .io_req_valid (io_reqValid & (|(io_satp[63:60]))), .io_req_vaddr (io_req_addr), .io_req_isStore (io_req_isStore), .io_resp_hit (_dtlb_io_resp_hit), .io_resp_miss (_dtlb_io_resp_miss), .io_resp_paddr (_dtlb_io_resp_paddr), .io_resp_pageFault (_dtlb_io_resp_pageFault), .io_refill_valid (_mmu_io_refill_valid), .io_refill_vpn (_mmu_io_refill_vpn), .io_refill_ppn (_mmu_io_refill_ppn), .io_refill_flags (_mmu_io_refill_flags) ); MMU mmu ( .clock (clock), .reset (reset), .io_satp (io_satp), .io_req_valid (io_reqValid & (|(io_satp[63:60])) & _dtlb_io_resp_miss), .io_req_vaddr (io_req_addr), .io_req_isStore (io_req_isStore), .io_resp_pageFault (_mmu_io_resp_pageFault), .io_ptwMemReq_valid (_mmu_io_ptwMemReq_valid), .io_ptwMemReq_addr (_mmu_io_ptwMemReq_addr), .io_ptwMemResp_valid (io_dmemRespValid & ptwOutstanding), .io_ptwMemResp_data (io_dmemRespData), .io_refill_valid (_mmu_io_refill_valid), .io_refill_vpn (_mmu_io_refill_vpn), .io_refill_ppn (_mmu_io_refill_ppn), .io_refill_flags (_mmu_io_refill_flags) ); DCache dcache ( .clock (clock), .reset (reset), .io_reqValid (io_reqValid & (~(|(io_satp[63:60])) | _dtlb_io_resp_hit) & ~translationFault), .io_req_addr ((|(io_satp[63:60])) ? _dtlb_io_resp_paddr : io_req_addr), .io_req_data (io_req_data), .io_req_isStore (io_req_isStore), .io_req_size (io_req_size), .io_reqReady (_dcache_io_reqReady), .io_memReqValid (_dcache_io_memReqValid), .io_memReq_addr (_dcache_io_memReq_addr), .io_memReq_data (_dcache_io_memReq_data), .io_memReq_isStore (_dcache_io_memReq_isStore), .io_memReq_size (_dcache_io_memReq_size), .io_memRespValid (io_dmemRespValid & ~ptwOutstanding), .io_memRespData (io_dmemRespData), .io_respValid (_dcache_io_respValid), .io_respData (io_respData) ); assign io_reqReady = _dcache_io_reqReady & ~ptwOutstanding; assign io_dmemReqValid = _mmu_io_ptwMemReq_valid | _dcache_io_memReqValid; assign io_dmemReq_addr = _mmu_io_ptwMemReq_valid ? _mmu_io_ptwMemReq_addr : _dcache_io_memReq_addr; assign io_dmemReq_data = _mmu_io_ptwMemReq_valid ? 64'h0 : _dcache_io_memReq_data; assign io_dmemReq_isStore = ~_mmu_io_ptwMemReq_valid & _dcache_io_memReq_isStore; assign io_dmemReq_size = _mmu_io_ptwMemReq_valid ? 3'h3 : _dcache_io_memReq_size; assign io_respValid = _dcache_io_respValid | translationFault; assign io_pageFault = translationFault; endmodule