fix: resolve OoO simulation timeout

This commit is contained in:
abnerhexu
2026-06-27 03:38:34 +00:00
parent 502803c37f
commit a2e0126199
68 changed files with 78250 additions and 210 deletions

113
generated-ooo/LSU.sv Normal file
View File

@@ -0,0 +1,113 @@
// 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