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

View File

60
generated-ooo/ALU.sv Normal file
View File

@@ -0,0 +1,60 @@
// Generated by CIRCT firtool-1.139.0
module ALU(
input [4:0] io_fn,
input [63:0] io_a,
io_b,
input io_isWord,
output [63:0] io_out
);
wire [5:0] shamt = io_isWord ? {1'h0, io_b[4:0]} : io_b[5:0];
wire [126:0] _raw_T_4 = {63'h0, io_a} << shamt;
wire [63:0] _GEN = {58'h0, shamt};
wire [64:0] _raw_T_22 =
$unsigned($signed($signed({io_a[63], io_a}) / $signed({io_b[63], io_b})));
wire [63:0] raw =
io_fn == 5'h0
? io_a + io_b
: io_fn == 5'h1
? io_a - io_b
: io_fn == 5'h2
? _raw_T_4[63:0]
: io_fn == 5'h3
? {63'h0, $signed(io_a) < $signed(io_b)}
: io_fn == 5'h4
? {63'h0, io_a < io_b}
: io_fn == 5'h5
? io_a ^ io_b
: io_fn == 5'h6
? io_a >> _GEN
: io_fn == 5'h7
? $signed($signed(io_a) >>> _GEN)
: io_fn == 5'h8
? io_a | io_b
: io_fn == 5'h9
? io_a & io_b
: io_fn == 5'hA
? io_a * io_b
: io_fn == 5'hB
? ((|io_b)
? _raw_T_22[63:0]
: 64'hFFFFFFFFFFFFFFFF)
: io_fn == 5'hC
? ((|io_b)
? io_a / io_b
: 64'hFFFFFFFFFFFFFFFF)
: io_fn == 5'hD
? ((|io_b)
? $signed($signed(io_a)
% $signed(io_b))
: io_a)
: io_fn == 5'hE
? ((|io_b)
? io_a % io_b
: io_a)
: io_fn == 5'hF
? io_b
: 64'h0;
assign io_out = io_isWord ? {{32{raw[31]}}, raw[31:0]} : raw;
endmodule

View File

@@ -0,0 +1,21 @@
// Generated by CIRCT firtool-1.139.0
module BranchUnit(
input [2:0] io_funct3,
input [63:0] io_a,
io_b,
output io_taken
);
wire _io_taken_T_11 = io_funct3 == 3'h0 & io_a == io_b;
wire [7:0] _GEN =
{{io_a >= io_b},
{io_a < io_b},
{$signed(io_a) >= $signed(io_b)},
{$signed(io_a) < $signed(io_b)},
{_io_taken_T_11},
{_io_taken_T_11},
{io_a != io_b},
{_io_taken_T_11}};
assign io_taken = _GEN[io_funct3];
endmodule

260
generated-ooo/CSRFile.sv Normal file
View File

@@ -0,0 +1,260 @@
// Generated by CIRCT firtool-1.139.0
module CSRFile(
input clock,
reset,
io_cmd_valid,
input [11:0] io_cmd_addr,
input [2:0] io_cmd_cmd,
input [63:0] io_cmd_rs1,
input [4:0] io_cmd_zimm,
input [11:0] io_readAddr,
output [63:0] io_rdata,
input io_trap,
input [63:0] io_trapPc,
io_trapCause,
output [63:0] io_satp,
io_mtvec,
io_mepc
);
reg [63:0] cycle;
reg [63:0] mstatus;
reg [63:0] mtvecReg;
reg [63:0] mepcReg;
reg [63:0] mcause;
reg [63:0] mtval;
reg [63:0] medeleg;
reg [63:0] mideleg;
reg [63:0] mie;
reg [63:0] mip;
reg [63:0] sstatus;
reg [63:0] stvec;
reg [63:0] sepc;
reg [63:0] scause;
reg [63:0] stval;
reg [63:0] sscratch;
reg [63:0] satpReg;
always @(posedge clock) begin
if (reset) begin
cycle <= 64'h0;
mstatus <= 64'h0;
mtvecReg <= 64'h0;
mepcReg <= 64'h0;
mcause <= 64'h0;
mtval <= 64'h0;
medeleg <= 64'h0;
mideleg <= 64'h0;
mie <= 64'h0;
mip <= 64'h0;
sstatus <= 64'h0;
stvec <= 64'h0;
sepc <= 64'h0;
scause <= 64'h0;
stval <= 64'h0;
sscratch <= 64'h0;
satpReg <= 64'h0;
end
else begin
automatic logic _GEN;
automatic logic _GEN_0;
automatic logic _GEN_1;
automatic logic _GEN_2;
automatic logic _GEN_3;
automatic logic _GEN_4;
automatic logic _GEN_5;
automatic logic _GEN_6 = io_cmd_addr == 12'h343;
automatic logic _GEN_7 = io_cmd_addr == 12'h344;
automatic logic _GEN_8 = io_cmd_addr == 12'h100;
automatic logic _GEN_9 = io_cmd_addr == 12'h105;
automatic logic _GEN_10 = io_cmd_addr == 12'h140;
automatic logic _GEN_11 = io_cmd_addr == 12'h141;
automatic logic _GEN_12 = io_cmd_addr == 12'h142;
automatic logic _GEN_13 = io_cmd_addr == 12'h143;
automatic logic _GEN_14 = io_cmd_addr == 12'h180;
automatic logic [63:0] _GEN_15;
automatic logic [63:0] writeOld;
automatic logic [63:0] operand;
automatic logic [63:0] _next_T_1;
automatic logic [63:0] _next_T_3;
automatic logic [3:0][63:0] _GEN_16;
automatic logic [63:0] next;
automatic logic _GEN_17;
_GEN = io_cmd_addr == 12'h300;
_GEN_0 = io_cmd_addr == 12'h302;
_GEN_1 = io_cmd_addr == 12'h303;
_GEN_2 = io_cmd_addr == 12'h304;
_GEN_3 = io_cmd_addr == 12'h305;
_GEN_4 = io_cmd_addr == 12'h341;
_GEN_5 = io_cmd_addr == 12'h342;
_GEN_15 =
io_cmd_addr == 12'h301
? 64'h800000000014112D
: _GEN_0
? medeleg
: _GEN_1
? mideleg
: _GEN_2
? mie
: _GEN_3
? mtvecReg
: _GEN_4
? mepcReg
: _GEN_5
? mcause
: _GEN_6
? mtval
: _GEN_7
? mip
: _GEN_8
? sstatus
: _GEN_9
? stvec
: _GEN_10
? sscratch
: _GEN_11
? sepc
: _GEN_12
? scause
: _GEN_13
? stval
: _GEN_14
? satpReg
: io_cmd_addr == 12'hF14
| io_cmd_addr != 12'hC00
? 64'h0
: cycle;
writeOld = _GEN ? mstatus : _GEN_15;
operand = io_cmd_cmd[2] ? {59'h0, io_cmd_zimm} : io_cmd_rs1;
_next_T_1 = writeOld | operand;
_next_T_3 = writeOld & ~operand;
_GEN_16 = {{_next_T_3}, {_next_T_1}, {operand}, {writeOld}};
next = _GEN_16[io_cmd_cmd[1:0]];
_GEN_17 = io_cmd_valid & (|io_cmd_cmd);
cycle <= cycle + 64'h1;
if (_GEN_17 & _GEN)
mstatus <= next;
if (~_GEN_17 | _GEN | _GEN_0 | _GEN_1 | _GEN_2 | ~_GEN_3) begin
end
else
mtvecReg <= next;
if (io_trap) begin
mepcReg <= io_trapPc;
mcause <= io_trapCause;
end
else begin
if (~_GEN_17 | _GEN | _GEN_0 | _GEN_1 | _GEN_2 | _GEN_3 | ~_GEN_4) begin
end
else
mepcReg <= next;
if (~_GEN_17 | _GEN | _GEN_0 | _GEN_1 | _GEN_2 | _GEN_3 | _GEN_4 | ~_GEN_5) begin
end
else
mcause <= next;
end
if (~_GEN_17 | _GEN | _GEN_0 | _GEN_1 | _GEN_2 | _GEN_3 | _GEN_4 | _GEN_5
| ~_GEN_6) begin
end
else
mtval <= next;
if (~_GEN_17 | _GEN | ~_GEN_0) begin
end
else begin
automatic logic [3:0][63:0] _GEN_18;
_GEN_18 = {{_next_T_3}, {_next_T_1}, {operand}, {_GEN_15}};
medeleg <= _GEN_18[io_cmd_cmd[1:0]];
end
if (~_GEN_17 | _GEN | _GEN_0 | ~_GEN_1) begin
end
else
mideleg <= next;
if (~_GEN_17 | _GEN | _GEN_0 | _GEN_1 | ~_GEN_2) begin
end
else
mie <= next;
if (~_GEN_17 | _GEN | _GEN_0 | _GEN_1 | _GEN_2 | _GEN_3 | _GEN_4 | _GEN_5 | _GEN_6
| ~_GEN_7) begin
end
else
mip <= next;
if (~_GEN_17 | _GEN | _GEN_0 | _GEN_1 | _GEN_2 | _GEN_3 | _GEN_4 | _GEN_5 | _GEN_6
| _GEN_7 | ~_GEN_8) begin
end
else
sstatus <= next;
if (~_GEN_17 | _GEN | _GEN_0 | _GEN_1 | _GEN_2 | _GEN_3 | _GEN_4 | _GEN_5 | _GEN_6
| _GEN_7 | _GEN_8 | ~_GEN_9) begin
end
else
stvec <= next;
if (~_GEN_17 | _GEN | _GEN_0 | _GEN_1 | _GEN_2 | _GEN_3 | _GEN_4 | _GEN_5 | _GEN_6
| _GEN_7 | _GEN_8 | _GEN_9 | _GEN_10 | ~_GEN_11) begin
end
else
sepc <= next;
if (~_GEN_17 | _GEN | _GEN_0 | _GEN_1 | _GEN_2 | _GEN_3 | _GEN_4 | _GEN_5 | _GEN_6
| _GEN_7 | _GEN_8 | _GEN_9 | _GEN_10 | _GEN_11 | ~_GEN_12) begin
end
else
scause <= next;
if (~_GEN_17 | _GEN | _GEN_0 | _GEN_1 | _GEN_2 | _GEN_3 | _GEN_4 | _GEN_5 | _GEN_6
| _GEN_7 | _GEN_8 | _GEN_9 | _GEN_10 | _GEN_11 | _GEN_12 | ~_GEN_13) begin
end
else
stval <= next;
if (~_GEN_17 | _GEN | _GEN_0 | _GEN_1 | _GEN_2 | _GEN_3 | _GEN_4 | _GEN_5 | _GEN_6
| _GEN_7 | _GEN_8 | _GEN_9 | ~_GEN_10) begin
end
else
sscratch <= next;
if (~_GEN_17 | _GEN | _GEN_0 | _GEN_1 | _GEN_2 | _GEN_3 | _GEN_4 | _GEN_5 | _GEN_6
| _GEN_7 | _GEN_8 | _GEN_9 | _GEN_10 | _GEN_11 | _GEN_12 | _GEN_13
| ~_GEN_14) begin
end
else
satpReg <= next;
end
end // always @(posedge)
assign io_rdata =
io_readAddr == 12'h300
? mstatus
: io_readAddr == 12'h301
? 64'h800000000014112D
: io_readAddr == 12'h302
? medeleg
: io_readAddr == 12'h303
? mideleg
: io_readAddr == 12'h304
? mie
: io_readAddr == 12'h305
? mtvecReg
: io_readAddr == 12'h341
? mepcReg
: io_readAddr == 12'h342
? mcause
: io_readAddr == 12'h343
? mtval
: io_readAddr == 12'h344
? mip
: io_readAddr == 12'h100
? sstatus
: io_readAddr == 12'h105
? stvec
: io_readAddr == 12'h140
? sscratch
: io_readAddr == 12'h141
? sepc
: io_readAddr == 12'h142
? scause
: io_readAddr == 12'h143
? stval
: io_readAddr == 12'h180
? satpReg
: io_readAddr == 12'hF14
| io_readAddr != 12'hC00
? 64'h0
: cycle;
assign io_satp = satpReg;
assign io_mtvec = mtvecReg;
assign io_mepc = mepcReg;
endmodule

View File

@@ -0,0 +1,83 @@
// Generated by CIRCT firtool-1.139.0
module CommitStage(
input io_robValid_0,
io_robValid_1,
input [4:0] io_robEntry_0_archDest,
input io_robEntry_0_writesDest,
input [3:0] io_robEntry_0_opClass,
input [5:0] io_robEntry_0_dest,
io_robEntry_0_oldDest,
input io_robEntry_0_exception,
input [63:0] io_robEntry_0_exceptionCause,
io_robEntry_0_badAddr,
input io_robEntry_0_branchMispredict,
input [63:0] io_robEntry_0_redirectPc,
input io_robEntry_0_csrValid,
input [4:0] io_robEntry_1_archDest,
input io_robEntry_1_writesDest,
input [5:0] io_robEntry_1_dest,
io_robEntry_1_oldDest,
input io_robEntry_1_exception,
input [63:0] io_robEntry_1_exceptionCause,
io_robEntry_1_badAddr,
input io_robEntry_1_branchMispredict,
input [63:0] io_robEntry_1_redirectPc,
input io_robEntry_1_csrValid,
output io_commitReady_0,
io_commitReady_1,
io_freeOldPhys_0,
io_freeOldPhys_1,
output [5:0] io_oldPhys_0,
io_oldPhys_1,
output io_commitMapValid_0,
io_commitMapValid_1,
output [4:0] io_commitArch_0,
io_commitArch_1,
output [5:0] io_commitPhys_0,
io_commitPhys_1,
output io_flush,
output [63:0] io_redirectPc,
output io_exception,
output [63:0] io_exceptionCause,
io_badAddr
);
wire firstTrap =
io_robValid_0 & (io_robEntry_0_exception | io_robEntry_0_branchMispredict);
wire secondTrap =
io_robValid_1 & (io_robEntry_1_exception | io_robEntry_1_branchMispredict);
wire io_commitReady_1_0 =
io_robValid_1 & ~firstTrap & ~secondTrap
& ~(io_robValid_0 & io_robValid_1 & io_robEntry_0_csrValid & io_robEntry_1_csrValid)
& ~(io_robValid_0 & io_robEntry_0_opClass == 4'h4);
wire _io_commitMapValid_0_T = io_robValid_0 & io_robEntry_0_writesDest;
wire _io_commitMapValid_1_T = io_commitReady_1_0 & io_robEntry_1_writesDest;
wire secondTrapSelected = ~io_robValid_0 & secondTrap;
assign io_commitReady_0 = io_robValid_0;
assign io_commitReady_1 = io_commitReady_1_0;
assign io_freeOldPhys_0 =
_io_commitMapValid_0_T & io_robEntry_0_oldDest != io_robEntry_0_dest;
assign io_freeOldPhys_1 =
_io_commitMapValid_1_T & io_robEntry_1_oldDest != io_robEntry_1_dest;
assign io_oldPhys_0 = io_robEntry_0_oldDest;
assign io_oldPhys_1 = io_robEntry_1_oldDest;
assign io_commitMapValid_0 = _io_commitMapValid_0_T & (|io_robEntry_0_archDest);
assign io_commitMapValid_1 = _io_commitMapValid_1_T & (|io_robEntry_1_archDest);
assign io_commitArch_0 = io_robEntry_0_archDest;
assign io_commitArch_1 = io_robEntry_1_archDest;
assign io_commitPhys_0 = io_robEntry_0_dest;
assign io_commitPhys_1 = io_robEntry_1_dest;
assign io_flush = firstTrap | secondTrapSelected;
assign io_redirectPc = firstTrap ? io_robEntry_0_redirectPc : io_robEntry_1_redirectPc;
assign io_exception =
firstTrap ? io_robEntry_0_exception : secondTrapSelected & io_robEntry_1_exception;
assign io_exceptionCause =
firstTrap
? io_robEntry_0_exceptionCause
: secondTrapSelected ? io_robEntry_1_exceptionCause : 64'h0;
assign io_badAddr =
firstTrap
? io_robEntry_0_badAddr
: secondTrapSelected ? io_robEntry_1_badAddr : 64'h0;
endmodule

254
generated-ooo/Core.sv Normal file
View File

@@ -0,0 +1,254 @@
// 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 _backend_io_decodeReady;
wire _backend_io_flush;
wire [63:0] _backend_io_redirectPc;
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_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_writesRd;
wire _id_io_out_0_illegal;
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_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_writesRd;
wire _id_io_out_1_illegal;
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;
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;
wire fetchReady = ~fetchValid | _backend_io_decodeReady;
always @(posedge clock) begin
if (reset)
fetchValid <= 1'h0;
else
fetchValid <=
~_backend_io_flush & (fetchReady ? _frontend_io_outValid : fetchValid);
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;
end
end // always @(posedge)
Frontend frontend (
.clock (clock),
.reset (reset),
.io_redirectValid (_backend_io_flush),
.io_redirectPc (_backend_io_redirectPc),
.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_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_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_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_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_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_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_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_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_redirectPc (_backend_io_redirectPc),
.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)
);
endmodule

4352
generated-ooo/DCache.sv Normal file

File diff suppressed because it is too large Load Diff

636
generated-ooo/DTLB.sv Normal file
View File

@@ -0,0 +1,636 @@
// Generated by CIRCT firtool-1.139.0
module DTLB(
input clock,
reset,
io_req_valid,
input [63:0] io_req_vaddr,
input io_req_isStore,
output io_resp_hit,
io_resp_miss,
output [63:0] io_resp_paddr,
output io_resp_pageFault,
input io_refill_valid,
input [26:0] io_refill_vpn,
input [43:0] io_refill_ppn,
input [7:0] io_refill_flags
);
reg valid_0;
reg valid_1;
reg valid_2;
reg valid_3;
reg valid_4;
reg valid_5;
reg valid_6;
reg valid_7;
reg valid_8;
reg valid_9;
reg valid_10;
reg valid_11;
reg valid_12;
reg valid_13;
reg valid_14;
reg valid_15;
reg valid_16;
reg valid_17;
reg valid_18;
reg valid_19;
reg valid_20;
reg valid_21;
reg valid_22;
reg valid_23;
reg valid_24;
reg valid_25;
reg valid_26;
reg valid_27;
reg valid_28;
reg valid_29;
reg valid_30;
reg valid_31;
reg [26:0] vpn_0;
reg [26:0] vpn_1;
reg [26:0] vpn_2;
reg [26:0] vpn_3;
reg [26:0] vpn_4;
reg [26:0] vpn_5;
reg [26:0] vpn_6;
reg [26:0] vpn_7;
reg [26:0] vpn_8;
reg [26:0] vpn_9;
reg [26:0] vpn_10;
reg [26:0] vpn_11;
reg [26:0] vpn_12;
reg [26:0] vpn_13;
reg [26:0] vpn_14;
reg [26:0] vpn_15;
reg [26:0] vpn_16;
reg [26:0] vpn_17;
reg [26:0] vpn_18;
reg [26:0] vpn_19;
reg [26:0] vpn_20;
reg [26:0] vpn_21;
reg [26:0] vpn_22;
reg [26:0] vpn_23;
reg [26:0] vpn_24;
reg [26:0] vpn_25;
reg [26:0] vpn_26;
reg [26:0] vpn_27;
reg [26:0] vpn_28;
reg [26:0] vpn_29;
reg [26:0] vpn_30;
reg [26:0] vpn_31;
reg [43:0] ppn_0;
reg [43:0] ppn_1;
reg [43:0] ppn_2;
reg [43:0] ppn_3;
reg [43:0] ppn_4;
reg [43:0] ppn_5;
reg [43:0] ppn_6;
reg [43:0] ppn_7;
reg [43:0] ppn_8;
reg [43:0] ppn_9;
reg [43:0] ppn_10;
reg [43:0] ppn_11;
reg [43:0] ppn_12;
reg [43:0] ppn_13;
reg [43:0] ppn_14;
reg [43:0] ppn_15;
reg [43:0] ppn_16;
reg [43:0] ppn_17;
reg [43:0] ppn_18;
reg [43:0] ppn_19;
reg [43:0] ppn_20;
reg [43:0] ppn_21;
reg [43:0] ppn_22;
reg [43:0] ppn_23;
reg [43:0] ppn_24;
reg [43:0] ppn_25;
reg [43:0] ppn_26;
reg [43:0] ppn_27;
reg [43:0] ppn_28;
reg [43:0] ppn_29;
reg [43:0] ppn_30;
reg [43:0] ppn_31;
reg [7:0] flags_0;
reg [7:0] flags_1;
reg [7:0] flags_2;
reg [7:0] flags_3;
reg [7:0] flags_4;
reg [7:0] flags_5;
reg [7:0] flags_6;
reg [7:0] flags_7;
reg [7:0] flags_8;
reg [7:0] flags_9;
reg [7:0] flags_10;
reg [7:0] flags_11;
reg [7:0] flags_12;
reg [7:0] flags_13;
reg [7:0] flags_14;
reg [7:0] flags_15;
reg [7:0] flags_16;
reg [7:0] flags_17;
reg [7:0] flags_18;
reg [7:0] flags_19;
reg [7:0] flags_20;
reg [7:0] flags_21;
reg [7:0] flags_22;
reg [7:0] flags_23;
reg [7:0] flags_24;
reg [7:0] flags_25;
reg [7:0] flags_26;
reg [7:0] flags_27;
reg [7:0] flags_28;
reg [7:0] flags_29;
reg [7:0] flags_30;
reg [7:0] flags_31;
reg [4:0] repl;
wire hitVec_1 = valid_1 & vpn_1 == io_req_vaddr[38:12];
wire hitVec_2 = valid_2 & vpn_2 == io_req_vaddr[38:12];
wire hitVec_3 = valid_3 & vpn_3 == io_req_vaddr[38:12];
wire hitVec_4 = valid_4 & vpn_4 == io_req_vaddr[38:12];
wire hitVec_5 = valid_5 & vpn_5 == io_req_vaddr[38:12];
wire hitVec_6 = valid_6 & vpn_6 == io_req_vaddr[38:12];
wire hitVec_7 = valid_7 & vpn_7 == io_req_vaddr[38:12];
wire hitVec_8 = valid_8 & vpn_8 == io_req_vaddr[38:12];
wire hitVec_9 = valid_9 & vpn_9 == io_req_vaddr[38:12];
wire hitVec_10 = valid_10 & vpn_10 == io_req_vaddr[38:12];
wire hitVec_11 = valid_11 & vpn_11 == io_req_vaddr[38:12];
wire hitVec_12 = valid_12 & vpn_12 == io_req_vaddr[38:12];
wire hitVec_13 = valid_13 & vpn_13 == io_req_vaddr[38:12];
wire hitVec_14 = valid_14 & vpn_14 == io_req_vaddr[38:12];
wire hitVec_15 = valid_15 & vpn_15 == io_req_vaddr[38:12];
wire hitVec_16 = valid_16 & vpn_16 == io_req_vaddr[38:12];
wire hitVec_17 = valid_17 & vpn_17 == io_req_vaddr[38:12];
wire hitVec_18 = valid_18 & vpn_18 == io_req_vaddr[38:12];
wire hitVec_19 = valid_19 & vpn_19 == io_req_vaddr[38:12];
wire hitVec_20 = valid_20 & vpn_20 == io_req_vaddr[38:12];
wire hitVec_21 = valid_21 & vpn_21 == io_req_vaddr[38:12];
wire hitVec_22 = valid_22 & vpn_22 == io_req_vaddr[38:12];
wire hitVec_23 = valid_23 & vpn_23 == io_req_vaddr[38:12];
wire hitVec_24 = valid_24 & vpn_24 == io_req_vaddr[38:12];
wire hitVec_25 = valid_25 & vpn_25 == io_req_vaddr[38:12];
wire hitVec_26 = valid_26 & vpn_26 == io_req_vaddr[38:12];
wire hitVec_27 = valid_27 & vpn_27 == io_req_vaddr[38:12];
wire hitVec_28 = valid_28 & vpn_28 == io_req_vaddr[38:12];
wire hitVec_29 = valid_29 & vpn_29 == io_req_vaddr[38:12];
wire hitVec_30 = valid_30 & vpn_30 == io_req_vaddr[38:12];
wire hitVec_31 = valid_31 & vpn_31 == io_req_vaddr[38:12];
wire hit =
io_req_valid
& (|{hitVec_31,
hitVec_30,
hitVec_29,
hitVec_28,
hitVec_27,
hitVec_26,
hitVec_25,
hitVec_24,
hitVec_23,
hitVec_22,
hitVec_21,
hitVec_20,
hitVec_19,
hitVec_18,
hitVec_17,
hitVec_16,
hitVec_15,
hitVec_14,
hitVec_13,
hitVec_12,
hitVec_11,
hitVec_10,
hitVec_9,
hitVec_8,
hitVec_7,
hitVec_6,
hitVec_5,
hitVec_4,
hitVec_3,
hitVec_2,
hitVec_1,
valid_0 & vpn_0 == io_req_vaddr[38:12]});
wire [14:0] _hitIdx_T_2 =
{hitVec_31,
hitVec_30,
hitVec_29,
hitVec_28,
hitVec_27,
hitVec_26,
hitVec_25,
hitVec_24,
hitVec_23,
hitVec_22,
hitVec_21,
hitVec_20,
hitVec_19,
hitVec_18,
hitVec_17}
| {hitVec_15,
hitVec_14,
hitVec_13,
hitVec_12,
hitVec_11,
hitVec_10,
hitVec_9,
hitVec_8,
hitVec_7,
hitVec_6,
hitVec_5,
hitVec_4,
hitVec_3,
hitVec_2,
hitVec_1};
wire [6:0] _hitIdx_T_4 = _hitIdx_T_2[14:8] | _hitIdx_T_2[6:0];
wire [2:0] _hitIdx_T_6 = _hitIdx_T_4[6:4] | _hitIdx_T_4[2:0];
wire [4:0] hitIdx =
{|{hitVec_31,
hitVec_30,
hitVec_29,
hitVec_28,
hitVec_27,
hitVec_26,
hitVec_25,
hitVec_24,
hitVec_23,
hitVec_22,
hitVec_21,
hitVec_20,
hitVec_19,
hitVec_18,
hitVec_17,
hitVec_16},
|(_hitIdx_T_2[14:7]),
|(_hitIdx_T_4[6:3]),
|(_hitIdx_T_6[2:1]),
_hitIdx_T_6[2] | _hitIdx_T_6[0]};
wire [31:0][7:0] _GEN =
{{flags_31},
{flags_30},
{flags_29},
{flags_28},
{flags_27},
{flags_26},
{flags_25},
{flags_24},
{flags_23},
{flags_22},
{flags_21},
{flags_20},
{flags_19},
{flags_18},
{flags_17},
{flags_16},
{flags_15},
{flags_14},
{flags_13},
{flags_12},
{flags_11},
{flags_10},
{flags_9},
{flags_8},
{flags_7},
{flags_6},
{flags_5},
{flags_4},
{flags_3},
{flags_2},
{flags_1},
{flags_0}};
wire pageFault =
hit & (io_req_isStore ? ~(_GEN[hitIdx][2]) : ~(_GEN[hitIdx][1]));
wire [31:0][43:0] _GEN_0 =
{{ppn_31},
{ppn_30},
{ppn_29},
{ppn_28},
{ppn_27},
{ppn_26},
{ppn_25},
{ppn_24},
{ppn_23},
{ppn_22},
{ppn_21},
{ppn_20},
{ppn_19},
{ppn_18},
{ppn_17},
{ppn_16},
{ppn_15},
{ppn_14},
{ppn_13},
{ppn_12},
{ppn_11},
{ppn_10},
{ppn_9},
{ppn_8},
{ppn_7},
{ppn_6},
{ppn_5},
{ppn_4},
{ppn_3},
{ppn_2},
{ppn_1},
{ppn_0}};
always @(posedge clock) begin
automatic logic _GEN_1;
automatic logic _GEN_2;
automatic logic _GEN_3;
automatic logic _GEN_4;
automatic logic _GEN_5;
automatic logic _GEN_6;
automatic logic _GEN_7;
automatic logic _GEN_8;
automatic logic _GEN_9;
automatic logic _GEN_10;
automatic logic _GEN_11;
automatic logic _GEN_12;
automatic logic _GEN_13;
automatic logic _GEN_14;
automatic logic _GEN_15;
automatic logic _GEN_16;
automatic logic _GEN_17;
automatic logic _GEN_18;
automatic logic _GEN_19;
automatic logic _GEN_20;
automatic logic _GEN_21;
automatic logic _GEN_22;
automatic logic _GEN_23;
automatic logic _GEN_24;
automatic logic _GEN_25;
automatic logic _GEN_26;
automatic logic _GEN_27;
automatic logic _GEN_28;
automatic logic _GEN_29;
automatic logic _GEN_30;
automatic logic _GEN_31;
automatic logic _GEN_32;
_GEN_1 = io_refill_valid & repl == 5'h0;
_GEN_2 = io_refill_valid & repl == 5'h1;
_GEN_3 = io_refill_valid & repl == 5'h2;
_GEN_4 = io_refill_valid & repl == 5'h3;
_GEN_5 = io_refill_valid & repl == 5'h4;
_GEN_6 = io_refill_valid & repl == 5'h5;
_GEN_7 = io_refill_valid & repl == 5'h6;
_GEN_8 = io_refill_valid & repl == 5'h7;
_GEN_9 = io_refill_valid & repl == 5'h8;
_GEN_10 = io_refill_valid & repl == 5'h9;
_GEN_11 = io_refill_valid & repl == 5'hA;
_GEN_12 = io_refill_valid & repl == 5'hB;
_GEN_13 = io_refill_valid & repl == 5'hC;
_GEN_14 = io_refill_valid & repl == 5'hD;
_GEN_15 = io_refill_valid & repl == 5'hE;
_GEN_16 = io_refill_valid & repl == 5'hF;
_GEN_17 = io_refill_valid & repl == 5'h10;
_GEN_18 = io_refill_valid & repl == 5'h11;
_GEN_19 = io_refill_valid & repl == 5'h12;
_GEN_20 = io_refill_valid & repl == 5'h13;
_GEN_21 = io_refill_valid & repl == 5'h14;
_GEN_22 = io_refill_valid & repl == 5'h15;
_GEN_23 = io_refill_valid & repl == 5'h16;
_GEN_24 = io_refill_valid & repl == 5'h17;
_GEN_25 = io_refill_valid & repl == 5'h18;
_GEN_26 = io_refill_valid & repl == 5'h19;
_GEN_27 = io_refill_valid & repl == 5'h1A;
_GEN_28 = io_refill_valid & repl == 5'h1B;
_GEN_29 = io_refill_valid & repl == 5'h1C;
_GEN_30 = io_refill_valid & repl == 5'h1D;
_GEN_31 = io_refill_valid & repl == 5'h1E;
_GEN_32 = io_refill_valid & (&repl);
if (reset) begin
valid_0 <= 1'h0;
valid_1 <= 1'h0;
valid_2 <= 1'h0;
valid_3 <= 1'h0;
valid_4 <= 1'h0;
valid_5 <= 1'h0;
valid_6 <= 1'h0;
valid_7 <= 1'h0;
valid_8 <= 1'h0;
valid_9 <= 1'h0;
valid_10 <= 1'h0;
valid_11 <= 1'h0;
valid_12 <= 1'h0;
valid_13 <= 1'h0;
valid_14 <= 1'h0;
valid_15 <= 1'h0;
valid_16 <= 1'h0;
valid_17 <= 1'h0;
valid_18 <= 1'h0;
valid_19 <= 1'h0;
valid_20 <= 1'h0;
valid_21 <= 1'h0;
valid_22 <= 1'h0;
valid_23 <= 1'h0;
valid_24 <= 1'h0;
valid_25 <= 1'h0;
valid_26 <= 1'h0;
valid_27 <= 1'h0;
valid_28 <= 1'h0;
valid_29 <= 1'h0;
valid_30 <= 1'h0;
valid_31 <= 1'h0;
repl <= 5'h0;
end
else begin
valid_0 <= _GEN_1 | valid_0;
valid_1 <= _GEN_2 | valid_1;
valid_2 <= _GEN_3 | valid_2;
valid_3 <= _GEN_4 | valid_3;
valid_4 <= _GEN_5 | valid_4;
valid_5 <= _GEN_6 | valid_5;
valid_6 <= _GEN_7 | valid_6;
valid_7 <= _GEN_8 | valid_7;
valid_8 <= _GEN_9 | valid_8;
valid_9 <= _GEN_10 | valid_9;
valid_10 <= _GEN_11 | valid_10;
valid_11 <= _GEN_12 | valid_11;
valid_12 <= _GEN_13 | valid_12;
valid_13 <= _GEN_14 | valid_13;
valid_14 <= _GEN_15 | valid_14;
valid_15 <= _GEN_16 | valid_15;
valid_16 <= _GEN_17 | valid_16;
valid_17 <= _GEN_18 | valid_17;
valid_18 <= _GEN_19 | valid_18;
valid_19 <= _GEN_20 | valid_19;
valid_20 <= _GEN_21 | valid_20;
valid_21 <= _GEN_22 | valid_21;
valid_22 <= _GEN_23 | valid_22;
valid_23 <= _GEN_24 | valid_23;
valid_24 <= _GEN_25 | valid_24;
valid_25 <= _GEN_26 | valid_25;
valid_26 <= _GEN_27 | valid_26;
valid_27 <= _GEN_28 | valid_27;
valid_28 <= _GEN_29 | valid_28;
valid_29 <= _GEN_30 | valid_29;
valid_30 <= _GEN_31 | valid_30;
valid_31 <= _GEN_32 | valid_31;
if (io_refill_valid)
repl <= repl + 5'h1;
end
if (_GEN_1) begin
vpn_0 <= io_refill_vpn;
ppn_0 <= io_refill_ppn;
flags_0 <= io_refill_flags;
end
if (_GEN_2) begin
vpn_1 <= io_refill_vpn;
ppn_1 <= io_refill_ppn;
flags_1 <= io_refill_flags;
end
if (_GEN_3) begin
vpn_2 <= io_refill_vpn;
ppn_2 <= io_refill_ppn;
flags_2 <= io_refill_flags;
end
if (_GEN_4) begin
vpn_3 <= io_refill_vpn;
ppn_3 <= io_refill_ppn;
flags_3 <= io_refill_flags;
end
if (_GEN_5) begin
vpn_4 <= io_refill_vpn;
ppn_4 <= io_refill_ppn;
flags_4 <= io_refill_flags;
end
if (_GEN_6) begin
vpn_5 <= io_refill_vpn;
ppn_5 <= io_refill_ppn;
flags_5 <= io_refill_flags;
end
if (_GEN_7) begin
vpn_6 <= io_refill_vpn;
ppn_6 <= io_refill_ppn;
flags_6 <= io_refill_flags;
end
if (_GEN_8) begin
vpn_7 <= io_refill_vpn;
ppn_7 <= io_refill_ppn;
flags_7 <= io_refill_flags;
end
if (_GEN_9) begin
vpn_8 <= io_refill_vpn;
ppn_8 <= io_refill_ppn;
flags_8 <= io_refill_flags;
end
if (_GEN_10) begin
vpn_9 <= io_refill_vpn;
ppn_9 <= io_refill_ppn;
flags_9 <= io_refill_flags;
end
if (_GEN_11) begin
vpn_10 <= io_refill_vpn;
ppn_10 <= io_refill_ppn;
flags_10 <= io_refill_flags;
end
if (_GEN_12) begin
vpn_11 <= io_refill_vpn;
ppn_11 <= io_refill_ppn;
flags_11 <= io_refill_flags;
end
if (_GEN_13) begin
vpn_12 <= io_refill_vpn;
ppn_12 <= io_refill_ppn;
flags_12 <= io_refill_flags;
end
if (_GEN_14) begin
vpn_13 <= io_refill_vpn;
ppn_13 <= io_refill_ppn;
flags_13 <= io_refill_flags;
end
if (_GEN_15) begin
vpn_14 <= io_refill_vpn;
ppn_14 <= io_refill_ppn;
flags_14 <= io_refill_flags;
end
if (_GEN_16) begin
vpn_15 <= io_refill_vpn;
ppn_15 <= io_refill_ppn;
flags_15 <= io_refill_flags;
end
if (_GEN_17) begin
vpn_16 <= io_refill_vpn;
ppn_16 <= io_refill_ppn;
flags_16 <= io_refill_flags;
end
if (_GEN_18) begin
vpn_17 <= io_refill_vpn;
ppn_17 <= io_refill_ppn;
flags_17 <= io_refill_flags;
end
if (_GEN_19) begin
vpn_18 <= io_refill_vpn;
ppn_18 <= io_refill_ppn;
flags_18 <= io_refill_flags;
end
if (_GEN_20) begin
vpn_19 <= io_refill_vpn;
ppn_19 <= io_refill_ppn;
flags_19 <= io_refill_flags;
end
if (_GEN_21) begin
vpn_20 <= io_refill_vpn;
ppn_20 <= io_refill_ppn;
flags_20 <= io_refill_flags;
end
if (_GEN_22) begin
vpn_21 <= io_refill_vpn;
ppn_21 <= io_refill_ppn;
flags_21 <= io_refill_flags;
end
if (_GEN_23) begin
vpn_22 <= io_refill_vpn;
ppn_22 <= io_refill_ppn;
flags_22 <= io_refill_flags;
end
if (_GEN_24) begin
vpn_23 <= io_refill_vpn;
ppn_23 <= io_refill_ppn;
flags_23 <= io_refill_flags;
end
if (_GEN_25) begin
vpn_24 <= io_refill_vpn;
ppn_24 <= io_refill_ppn;
flags_24 <= io_refill_flags;
end
if (_GEN_26) begin
vpn_25 <= io_refill_vpn;
ppn_25 <= io_refill_ppn;
flags_25 <= io_refill_flags;
end
if (_GEN_27) begin
vpn_26 <= io_refill_vpn;
ppn_26 <= io_refill_ppn;
flags_26 <= io_refill_flags;
end
if (_GEN_28) begin
vpn_27 <= io_refill_vpn;
ppn_27 <= io_refill_ppn;
flags_27 <= io_refill_flags;
end
if (_GEN_29) begin
vpn_28 <= io_refill_vpn;
ppn_28 <= io_refill_ppn;
flags_28 <= io_refill_flags;
end
if (_GEN_30) begin
vpn_29 <= io_refill_vpn;
ppn_29 <= io_refill_ppn;
flags_29 <= io_refill_flags;
end
if (_GEN_31) begin
vpn_30 <= io_refill_vpn;
ppn_30 <= io_refill_ppn;
flags_30 <= io_refill_flags;
end
if (_GEN_32) begin
vpn_31 <= io_refill_vpn;
ppn_31 <= io_refill_ppn;
flags_31 <= io_refill_flags;
end
end // always @(posedge)
assign io_resp_hit = hit & ~pageFault;
assign io_resp_miss = io_req_valid & ~hit;
assign io_resp_paddr = {8'h0, _GEN_0[hitIdx], io_req_vaddr[11:0]};
assign io_resp_pageFault = pageFault;
endmodule

161
generated-ooo/Decoder.sv Normal file
View File

@@ -0,0 +1,161 @@
// Generated by CIRCT firtool-1.139.0
module Decoder(
input [63:0] io_pc,
input [31:0] io_inst,
output [63:0] io_out_pc,
output [31:0] io_out_inst,
output [4:0] io_out_rs1,
io_out_rs2,
io_out_rd,
output [2:0] io_out_funct3,
output [63:0] io_out_immI,
io_out_immS,
io_out_immB,
io_out_immU,
io_out_immJ,
output [3:0] io_out_opClass,
output [4:0] io_out_aluFn,
output [2:0] io_out_memWidth,
output io_out_isLoad,
io_out_isStore,
io_out_isBranch,
io_out_isJal,
io_out_isJalr,
io_out_isLui,
io_out_isAuipc,
io_out_isOpImm,
io_out_isWord,
io_out_isSystem,
io_out_writesRd,
io_out_illegal
);
wire [7:0][1:0] _GEN = '{2'h3, 2'h2, 2'h1, 2'h0, 2'h3, 2'h2, 2'h1, 2'h0};
wire d_isLui = io_inst[6:0] == 7'h37;
wire _GEN_0 = io_inst[6:0] == 7'h17;
wire _GEN_1 = io_inst[6:0] == 7'h6F;
wire _GEN_2 = d_isLui | _GEN_0;
wire _GEN_3 = io_inst[6:0] == 7'h67;
wire _GEN_4 = io_inst[6:0] == 7'h63;
wire _GEN_5 = io_inst[6:0] == 7'h3;
wire _GEN_6 = io_inst[6:0] == 7'h23;
wire _d_isWord_T = io_inst[6:0] == 7'h1B;
wire _GEN_7 = io_inst[6:0] == 7'h13 | _d_isWord_T;
wire _GEN_8 = _GEN_0 | _GEN_1 | _GEN_3 | _GEN_4 | _GEN_5 | _GEN_6;
wire _GEN_9 = d_isLui | _GEN_8;
wire [4:0] _d_aluFn_T_3 = {3'h0, io_inst[14:12] == 3'h1, 1'h0};
wire [7:0][4:0] _GEN_10 =
{{5'h9},
{5'h8},
{{4'h3, io_inst[30]}},
{5'h5},
{5'h4},
{5'h3},
{_d_aluFn_T_3},
{_d_aluFn_T_3}};
wire _d_isWord_T_1 = io_inst[6:0] == 7'h3B;
wire _GEN_11 = io_inst[6:0] == 7'h33 | _d_isWord_T_1;
wire [7:0][4:0] _GEN_12 =
{{5'h9},
{5'h8},
{{4'h3, io_inst[30]}},
{5'h5},
{5'h4},
{5'h3},
{5'h2},
{{4'h0, io_inst[30]}}};
wire _GEN_13 = io_inst[6:0] == 7'hF;
wire _GEN_14 = io_inst[6:0] == 7'h73;
wire _GEN_15 = io_inst[6:0] == 7'h2F;
wire _GEN_16 = _GEN_13 | _GEN_14;
wire _GEN_17 = _GEN_7 | _GEN_11 | _GEN_16;
wire _GEN_18 = _GEN_6 | _GEN_17;
wire _GEN_19 = _GEN_1 | _GEN_3 | _GEN_4;
assign io_out_pc = io_pc;
assign io_out_inst = io_inst;
assign io_out_rs1 = io_inst[19:15];
assign io_out_rs2 = io_inst[24:20];
assign io_out_rd = io_inst[11:7];
assign io_out_funct3 = io_inst[14:12];
assign io_out_immI = {{52{io_inst[31]}}, io_inst[31:20]};
assign io_out_immS = {{52{io_inst[31]}}, io_inst[31:25], io_inst[11:7]};
assign io_out_immB =
{{52{io_inst[31]}}, io_inst[7], io_inst[30:25], io_inst[11:8], 1'h0};
assign io_out_immU = {{32{io_inst[31]}}, io_inst[31:12], 12'h0};
assign io_out_immJ =
{{44{io_inst[31]}}, io_inst[19:12], io_inst[20], io_inst[30:21], 1'h0};
assign io_out_opClass =
_GEN_2
? 4'h1
: _GEN_19
? 4'h2
: _GEN_5
? 4'h3
: _GEN_6
? 4'h4
: _GEN_7 | _GEN_11 ? 4'h1 : _GEN_16 ? 4'h5 : _GEN_15 ? 4'h3 : 4'h0;
assign io_out_aluFn =
d_isLui
? 5'hF
: _GEN_8
? 5'h0
: _GEN_7
? _GEN_10[io_inst[14:12]]
: _GEN_11
? (io_inst[31:25] == 7'h1
? ((&(io_inst[14:12]))
? 5'hE
: io_inst[14:12] == 3'h6
? 5'hD
: io_inst[14:12] == 3'h5
? 5'hC
: {4'h5, io_inst[14:12] == 3'h4})
: _GEN_12[io_inst[14:12]])
: 5'h0;
assign io_out_memWidth =
d_isLui | _GEN_0 | _GEN_1 | _GEN_3 | _GEN_4 | _GEN_5 | _GEN_18 | ~_GEN_15
? {1'h0, _GEN[io_inst[14:12]]}
: {2'h1, io_inst[14:12] != 3'h2};
assign io_out_isLoad = ~(d_isLui | _GEN_0 | _GEN_19) & (_GEN_5 | ~_GEN_18 & _GEN_15);
assign io_out_isStore =
~(d_isLui | _GEN_0 | _GEN_1 | _GEN_3 | _GEN_4 | _GEN_5)
& (_GEN_6 | ~_GEN_17 & _GEN_15);
assign io_out_isBranch = ~(d_isLui | _GEN_0 | _GEN_1 | _GEN_3) & _GEN_4;
assign io_out_isJal = ~_GEN_2 & _GEN_1;
assign io_out_isJalr = ~(d_isLui | _GEN_0 | _GEN_1) & _GEN_3;
assign io_out_isLui = d_isLui;
assign io_out_isAuipc = ~d_isLui & _GEN_0;
assign io_out_isOpImm = ~_GEN_9 & _GEN_7;
assign io_out_isWord = ~_GEN_9 & (_GEN_7 ? _d_isWord_T : _GEN_11 & _d_isWord_T_1);
assign io_out_isSystem =
~(d_isLui | _GEN_0 | _GEN_1 | _GEN_3 | _GEN_4 | _GEN_5 | _GEN_6 | _GEN_7 | _GEN_11
| _GEN_13) & _GEN_14;
assign io_out_writesRd =
d_isLui
? (|(io_inst[11:7]))
: _GEN_0
? (|(io_inst[11:7]))
: _GEN_1
? (|(io_inst[11:7]))
: _GEN_3
? (|(io_inst[11:7]))
: ~_GEN_4
& (_GEN_5
? (|(io_inst[11:7]))
: ~_GEN_6
& (_GEN_7
? (|(io_inst[11:7]))
: _GEN_11
? (|(io_inst[11:7]))
: ~_GEN_13
& (_GEN_14
? (|(io_inst[11:7])) & (|(io_inst[14:12]))
: _GEN_15 & (|(io_inst[11:7])))));
assign io_out_illegal =
io_inst[6:0] != 7'h37 & io_inst[6:0] != 7'h17 & io_inst[6:0] != 7'h6F
& io_inst[6:0] != 7'h67 & io_inst[6:0] != 7'h63 & io_inst[6:0] != 7'h3
& io_inst[6:0] != 7'h23 & io_inst[6:0] != 7'h13 & io_inst[6:0] != 7'h1B
& io_inst[6:0] != 7'h33 & io_inst[6:0] != 7'h3B & io_inst[6:0] != 7'hF
& io_inst[6:0] != 7'h73 & io_inst[6:0] != 7'h2F;
endmodule

View File

@@ -0,0 +1,29 @@
// Generated by CIRCT firtool-1.139.0
module ExecStage(
input io_inValid,
input [2:0] io_in_funct3,
input [4:0] io_in_aluFn,
input io_in_isWord,
input [63:0] io_src1,
io_src2,
output io_outValid,
output [63:0] io_result,
output io_branchTaken
);
ALU alu (
.io_fn (io_in_aluFn),
.io_a (io_src1),
.io_b (io_src2),
.io_isWord (io_in_isWord),
.io_out (io_result)
);
BranchUnit branch (
.io_funct3 (io_in_funct3),
.io_a (io_src1),
.io_b (io_src2),
.io_taken (io_branchTaken)
);
assign io_outValid = io_inValid;
endmodule

2245
generated-ooo/FreeList.sv Normal file

File diff suppressed because it is too large Load Diff

62
generated-ooo/Frontend.sv Normal file
View File

@@ -0,0 +1,62 @@
// Generated by CIRCT firtool-1.139.0
module Frontend(
input clock,
reset,
io_redirectValid,
input [63:0] io_redirectPc,
output io_imemReqValid,
output [63:0] io_imemReqAddr,
input io_imemRespValid,
input [31:0] io_imemRespBits_0,
io_imemRespBits_1,
input io_outReady,
output io_outValid,
output [63:0] io_out_pc,
output [31:0] io_out_inst_0,
io_out_inst_1,
output io_out_laneValid_0,
io_out_laneValid_1
);
wire _icache_io_respValid;
wire [63:0] _icache_io_resp_pc;
wire _icache_io_resp_laneValid_0;
wire _icache_io_resp_laneValid_1;
reg [63:0] pc;
always @(posedge clock) begin
if (reset)
pc <= 64'h80000000;
else if (io_redirectValid)
pc <= io_redirectPc;
else if (_icache_io_respValid & io_outReady)
pc <=
_icache_io_resp_pc
+ {60'h0,
{1'h0, _icache_io_resp_laneValid_0} + {1'h0, _icache_io_resp_laneValid_1},
2'h0};
end // always @(posedge)
ICache icache (
.clock (clock),
.reset (reset),
.io_reqAddr (pc),
.io_reqPc (pc),
.io_flush (io_redirectValid),
.io_respReady (io_outReady),
.io_memReqValid (io_imemReqValid),
.io_memReqAddr (io_imemReqAddr),
.io_memRespValid (io_imemRespValid),
.io_memRespBits_0 (io_imemRespBits_0),
.io_memRespBits_1 (io_imemRespBits_1),
.io_respValid (_icache_io_respValid),
.io_resp_pc (_icache_io_resp_pc),
.io_resp_inst_0 (io_out_inst_0),
.io_resp_inst_1 (io_out_inst_1),
.io_resp_laneValid_0 (_icache_io_resp_laneValid_0),
.io_resp_laneValid_1 (_icache_io_resp_laneValid_1)
);
assign io_outValid = _icache_io_respValid;
assign io_out_pc = _icache_io_resp_pc;
assign io_out_laneValid_0 = _icache_io_resp_laneValid_0;
assign io_out_laneValid_1 = _icache_io_resp_laneValid_1;
endmodule

49536
generated-ooo/ICache.sv Normal file

File diff suppressed because it is too large Load Diff

128
generated-ooo/IDStage.sv Normal file
View File

@@ -0,0 +1,128 @@
// Generated by CIRCT firtool-1.139.0
module IDStage(
input io_inValid,
input [63:0] io_in_pc,
input [31:0] io_in_inst_0,
io_in_inst_1,
input io_in_laneValid_0,
io_in_laneValid_1,
output io_outValid_0,
io_outValid_1,
output [63:0] io_out_0_pc,
output [31:0] io_out_0_inst,
output [4:0] io_out_0_rs1,
io_out_0_rs2,
io_out_0_rd,
output [2:0] io_out_0_funct3,
output [63:0] io_out_0_immI,
io_out_0_immS,
io_out_0_immB,
io_out_0_immU,
io_out_0_immJ,
output [3:0] io_out_0_opClass,
output [4:0] io_out_0_aluFn,
output [2:0] io_out_0_memWidth,
output io_out_0_isLoad,
io_out_0_isStore,
io_out_0_isBranch,
io_out_0_isJal,
io_out_0_isJalr,
io_out_0_isLui,
io_out_0_isAuipc,
io_out_0_isOpImm,
io_out_0_isWord,
io_out_0_isSystem,
io_out_0_writesRd,
io_out_0_illegal,
output [63:0] io_out_1_pc,
output [31:0] io_out_1_inst,
output [4:0] io_out_1_rs1,
io_out_1_rs2,
io_out_1_rd,
output [2:0] io_out_1_funct3,
output [63:0] io_out_1_immI,
io_out_1_immS,
io_out_1_immB,
io_out_1_immU,
io_out_1_immJ,
output [3:0] io_out_1_opClass,
output [4:0] io_out_1_aluFn,
output [2:0] io_out_1_memWidth,
output io_out_1_isLoad,
io_out_1_isStore,
io_out_1_isBranch,
io_out_1_isJal,
io_out_1_isJalr,
io_out_1_isLui,
io_out_1_isAuipc,
io_out_1_isOpImm,
io_out_1_isWord,
io_out_1_isSystem,
io_out_1_writesRd,
io_out_1_illegal
);
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_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_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_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_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;
endmodule

266
generated-ooo/IssueQueue.sv Normal file
View File

@@ -0,0 +1,266 @@
// Generated by CIRCT firtool-1.139.0
module IssueQueue(
input clock,
reset,
io_enqValid_0,
io_enqValid_1,
input [63:0] io_enq_0_decoded_pc,
input [31:0] io_enq_0_decoded_inst,
input [4:0] io_enq_0_decoded_rs1,
io_enq_0_decoded_rs2,
input [2:0] io_enq_0_decoded_funct3,
input [63:0] io_enq_0_decoded_immI,
io_enq_0_decoded_immS,
io_enq_0_decoded_immB,
io_enq_0_decoded_immU,
io_enq_0_decoded_immJ,
input [4:0] io_enq_0_decoded_aluFn,
input [2:0] io_enq_0_decoded_memWidth,
input io_enq_0_decoded_isLoad,
io_enq_0_decoded_isStore,
io_enq_0_decoded_isBranch,
io_enq_0_decoded_isJal,
io_enq_0_decoded_isJalr,
io_enq_0_decoded_isLui,
io_enq_0_decoded_isAuipc,
io_enq_0_decoded_isOpImm,
io_enq_0_decoded_isWord,
io_enq_0_decoded_isSystem,
io_enq_0_decoded_writesRd,
io_enq_0_decoded_illegal,
input [5:0] io_enq_0_prs1,
io_enq_0_prs2,
input io_enq_0_src1Ready,
io_enq_0_src2Ready,
input [5:0] io_enq_0_prd,
io_enq_0_robIdx,
input [63:0] io_enq_1_decoded_pc,
input [31:0] io_enq_1_decoded_inst,
input [4:0] io_enq_1_decoded_rs1,
io_enq_1_decoded_rs2,
input [2:0] io_enq_1_decoded_funct3,
input [63:0] io_enq_1_decoded_immI,
io_enq_1_decoded_immS,
io_enq_1_decoded_immB,
io_enq_1_decoded_immU,
io_enq_1_decoded_immJ,
input [4:0] io_enq_1_decoded_aluFn,
input [2:0] io_enq_1_decoded_memWidth,
input io_enq_1_decoded_isLoad,
io_enq_1_decoded_isStore,
io_enq_1_decoded_isBranch,
io_enq_1_decoded_isJal,
io_enq_1_decoded_isJalr,
io_enq_1_decoded_isLui,
io_enq_1_decoded_isAuipc,
io_enq_1_decoded_isOpImm,
io_enq_1_decoded_isWord,
io_enq_1_decoded_isSystem,
io_enq_1_decoded_writesRd,
io_enq_1_decoded_illegal,
input [5:0] io_enq_1_prs1,
io_enq_1_prs2,
input io_enq_1_src1Ready,
io_enq_1_src2Ready,
input [5:0] io_enq_1_prd,
io_enq_1_robIdx,
output io_enqReady_0,
io_enqReady_1,
input io_wakeup_0_valid,
input [5:0] io_wakeup_0_phys,
input io_wakeup_1_valid,
input [5:0] io_wakeup_1_phys,
output io_issueValid_0,
io_issueValid_1,
output [63:0] io_issue_0_decoded_pc,
output [31:0] io_issue_0_decoded_inst,
output [4:0] io_issue_0_decoded_rs1,
output [2:0] io_issue_0_decoded_funct3,
output [63:0] io_issue_0_decoded_immI,
io_issue_0_decoded_immS,
io_issue_0_decoded_immB,
io_issue_0_decoded_immU,
io_issue_0_decoded_immJ,
output [4:0] io_issue_0_decoded_aluFn,
output [2:0] io_issue_0_decoded_memWidth,
output io_issue_0_decoded_isLoad,
io_issue_0_decoded_isStore,
io_issue_0_decoded_isBranch,
io_issue_0_decoded_isJal,
io_issue_0_decoded_isJalr,
io_issue_0_decoded_isLui,
io_issue_0_decoded_isAuipc,
io_issue_0_decoded_isOpImm,
io_issue_0_decoded_isWord,
io_issue_0_decoded_isSystem,
io_issue_0_decoded_writesRd,
io_issue_0_decoded_illegal,
output [5:0] io_issue_0_prs1,
io_issue_0_prs2,
io_issue_0_prd,
io_issue_0_robIdx,
output [63:0] io_issue_1_decoded_pc,
output [31:0] io_issue_1_decoded_inst,
output [4:0] io_issue_1_decoded_rs1,
output [2:0] io_issue_1_decoded_funct3,
output [63:0] io_issue_1_decoded_immI,
io_issue_1_decoded_immS,
io_issue_1_decoded_immB,
io_issue_1_decoded_immU,
io_issue_1_decoded_immJ,
output [4:0] io_issue_1_decoded_aluFn,
output [2:0] io_issue_1_decoded_memWidth,
output io_issue_1_decoded_isLoad,
io_issue_1_decoded_isStore,
io_issue_1_decoded_isBranch,
io_issue_1_decoded_isJal,
io_issue_1_decoded_isJalr,
io_issue_1_decoded_isLui,
io_issue_1_decoded_isAuipc,
io_issue_1_decoded_isOpImm,
io_issue_1_decoded_isWord,
io_issue_1_decoded_isSystem,
io_issue_1_decoded_writesRd,
io_issue_1_decoded_illegal,
output [5:0] io_issue_1_prs1,
io_issue_1_prs2,
io_issue_1_prd,
io_issue_1_robIdx,
input io_issueReady_0,
io_issueReady_1,
io_flush
);
ReservationStation intRs (
.clock (clock),
.reset (reset),
.io_enqValid_0 (io_enqValid_0),
.io_enqValid_1 (io_enqValid_1),
.io_enq_0_decoded_pc (io_enq_0_decoded_pc),
.io_enq_0_decoded_inst (io_enq_0_decoded_inst),
.io_enq_0_decoded_rs1 (io_enq_0_decoded_rs1),
.io_enq_0_decoded_rs2 (io_enq_0_decoded_rs2),
.io_enq_0_decoded_funct3 (io_enq_0_decoded_funct3),
.io_enq_0_decoded_immI (io_enq_0_decoded_immI),
.io_enq_0_decoded_immS (io_enq_0_decoded_immS),
.io_enq_0_decoded_immB (io_enq_0_decoded_immB),
.io_enq_0_decoded_immU (io_enq_0_decoded_immU),
.io_enq_0_decoded_immJ (io_enq_0_decoded_immJ),
.io_enq_0_decoded_aluFn (io_enq_0_decoded_aluFn),
.io_enq_0_decoded_memWidth (io_enq_0_decoded_memWidth),
.io_enq_0_decoded_isLoad (io_enq_0_decoded_isLoad),
.io_enq_0_decoded_isStore (io_enq_0_decoded_isStore),
.io_enq_0_decoded_isBranch (io_enq_0_decoded_isBranch),
.io_enq_0_decoded_isJal (io_enq_0_decoded_isJal),
.io_enq_0_decoded_isJalr (io_enq_0_decoded_isJalr),
.io_enq_0_decoded_isLui (io_enq_0_decoded_isLui),
.io_enq_0_decoded_isAuipc (io_enq_0_decoded_isAuipc),
.io_enq_0_decoded_isOpImm (io_enq_0_decoded_isOpImm),
.io_enq_0_decoded_isWord (io_enq_0_decoded_isWord),
.io_enq_0_decoded_isSystem (io_enq_0_decoded_isSystem),
.io_enq_0_decoded_writesRd (io_enq_0_decoded_writesRd),
.io_enq_0_decoded_illegal (io_enq_0_decoded_illegal),
.io_enq_0_prs1 (io_enq_0_prs1),
.io_enq_0_prs2 (io_enq_0_prs2),
.io_enq_0_src1Ready (io_enq_0_src1Ready),
.io_enq_0_src2Ready (io_enq_0_src2Ready),
.io_enq_0_prd (io_enq_0_prd),
.io_enq_0_robIdx (io_enq_0_robIdx),
.io_enq_1_decoded_pc (io_enq_1_decoded_pc),
.io_enq_1_decoded_inst (io_enq_1_decoded_inst),
.io_enq_1_decoded_rs1 (io_enq_1_decoded_rs1),
.io_enq_1_decoded_rs2 (io_enq_1_decoded_rs2),
.io_enq_1_decoded_funct3 (io_enq_1_decoded_funct3),
.io_enq_1_decoded_immI (io_enq_1_decoded_immI),
.io_enq_1_decoded_immS (io_enq_1_decoded_immS),
.io_enq_1_decoded_immB (io_enq_1_decoded_immB),
.io_enq_1_decoded_immU (io_enq_1_decoded_immU),
.io_enq_1_decoded_immJ (io_enq_1_decoded_immJ),
.io_enq_1_decoded_aluFn (io_enq_1_decoded_aluFn),
.io_enq_1_decoded_memWidth (io_enq_1_decoded_memWidth),
.io_enq_1_decoded_isLoad (io_enq_1_decoded_isLoad),
.io_enq_1_decoded_isStore (io_enq_1_decoded_isStore),
.io_enq_1_decoded_isBranch (io_enq_1_decoded_isBranch),
.io_enq_1_decoded_isJal (io_enq_1_decoded_isJal),
.io_enq_1_decoded_isJalr (io_enq_1_decoded_isJalr),
.io_enq_1_decoded_isLui (io_enq_1_decoded_isLui),
.io_enq_1_decoded_isAuipc (io_enq_1_decoded_isAuipc),
.io_enq_1_decoded_isOpImm (io_enq_1_decoded_isOpImm),
.io_enq_1_decoded_isWord (io_enq_1_decoded_isWord),
.io_enq_1_decoded_isSystem (io_enq_1_decoded_isSystem),
.io_enq_1_decoded_writesRd (io_enq_1_decoded_writesRd),
.io_enq_1_decoded_illegal (io_enq_1_decoded_illegal),
.io_enq_1_prs1 (io_enq_1_prs1),
.io_enq_1_prs2 (io_enq_1_prs2),
.io_enq_1_src1Ready (io_enq_1_src1Ready),
.io_enq_1_src2Ready (io_enq_1_src2Ready),
.io_enq_1_prd (io_enq_1_prd),
.io_enq_1_robIdx (io_enq_1_robIdx),
.io_enqReady_0 (io_enqReady_0),
.io_enqReady_1 (io_enqReady_1),
.io_wakeup_0_valid (io_wakeup_0_valid),
.io_wakeup_0_phys (io_wakeup_0_phys),
.io_wakeup_1_valid (io_wakeup_1_valid),
.io_wakeup_1_phys (io_wakeup_1_phys),
.io_issueValid_0 (io_issueValid_0),
.io_issueValid_1 (io_issueValid_1),
.io_issue_0_decoded_pc (io_issue_0_decoded_pc),
.io_issue_0_decoded_inst (io_issue_0_decoded_inst),
.io_issue_0_decoded_rs1 (io_issue_0_decoded_rs1),
.io_issue_0_decoded_funct3 (io_issue_0_decoded_funct3),
.io_issue_0_decoded_immI (io_issue_0_decoded_immI),
.io_issue_0_decoded_immS (io_issue_0_decoded_immS),
.io_issue_0_decoded_immB (io_issue_0_decoded_immB),
.io_issue_0_decoded_immU (io_issue_0_decoded_immU),
.io_issue_0_decoded_immJ (io_issue_0_decoded_immJ),
.io_issue_0_decoded_aluFn (io_issue_0_decoded_aluFn),
.io_issue_0_decoded_memWidth (io_issue_0_decoded_memWidth),
.io_issue_0_decoded_isLoad (io_issue_0_decoded_isLoad),
.io_issue_0_decoded_isStore (io_issue_0_decoded_isStore),
.io_issue_0_decoded_isBranch (io_issue_0_decoded_isBranch),
.io_issue_0_decoded_isJal (io_issue_0_decoded_isJal),
.io_issue_0_decoded_isJalr (io_issue_0_decoded_isJalr),
.io_issue_0_decoded_isLui (io_issue_0_decoded_isLui),
.io_issue_0_decoded_isAuipc (io_issue_0_decoded_isAuipc),
.io_issue_0_decoded_isOpImm (io_issue_0_decoded_isOpImm),
.io_issue_0_decoded_isWord (io_issue_0_decoded_isWord),
.io_issue_0_decoded_isSystem (io_issue_0_decoded_isSystem),
.io_issue_0_decoded_writesRd (io_issue_0_decoded_writesRd),
.io_issue_0_decoded_illegal (io_issue_0_decoded_illegal),
.io_issue_0_prs1 (io_issue_0_prs1),
.io_issue_0_prs2 (io_issue_0_prs2),
.io_issue_0_prd (io_issue_0_prd),
.io_issue_0_robIdx (io_issue_0_robIdx),
.io_issue_1_decoded_pc (io_issue_1_decoded_pc),
.io_issue_1_decoded_inst (io_issue_1_decoded_inst),
.io_issue_1_decoded_rs1 (io_issue_1_decoded_rs1),
.io_issue_1_decoded_funct3 (io_issue_1_decoded_funct3),
.io_issue_1_decoded_immI (io_issue_1_decoded_immI),
.io_issue_1_decoded_immS (io_issue_1_decoded_immS),
.io_issue_1_decoded_immB (io_issue_1_decoded_immB),
.io_issue_1_decoded_immU (io_issue_1_decoded_immU),
.io_issue_1_decoded_immJ (io_issue_1_decoded_immJ),
.io_issue_1_decoded_aluFn (io_issue_1_decoded_aluFn),
.io_issue_1_decoded_memWidth (io_issue_1_decoded_memWidth),
.io_issue_1_decoded_isLoad (io_issue_1_decoded_isLoad),
.io_issue_1_decoded_isStore (io_issue_1_decoded_isStore),
.io_issue_1_decoded_isBranch (io_issue_1_decoded_isBranch),
.io_issue_1_decoded_isJal (io_issue_1_decoded_isJal),
.io_issue_1_decoded_isJalr (io_issue_1_decoded_isJalr),
.io_issue_1_decoded_isLui (io_issue_1_decoded_isLui),
.io_issue_1_decoded_isAuipc (io_issue_1_decoded_isAuipc),
.io_issue_1_decoded_isOpImm (io_issue_1_decoded_isOpImm),
.io_issue_1_decoded_isWord (io_issue_1_decoded_isWord),
.io_issue_1_decoded_isSystem (io_issue_1_decoded_isSystem),
.io_issue_1_decoded_writesRd (io_issue_1_decoded_writesRd),
.io_issue_1_decoded_illegal (io_issue_1_decoded_illegal),
.io_issue_1_prs1 (io_issue_1_prs1),
.io_issue_1_prs2 (io_issue_1_prs2),
.io_issue_1_prd (io_issue_1_prd),
.io_issue_1_robIdx (io_issue_1_robIdx),
.io_issueReady_0 (io_issueReady_0),
.io_issueReady_1 (io_issueReady_1),
.io_flush (io_flush)
);
endmodule

266
generated-ooo/IssueStage.sv Normal file
View File

@@ -0,0 +1,266 @@
// Generated by CIRCT firtool-1.139.0
module IssueStage(
input clock,
reset,
io_inValid_0,
io_inValid_1,
input [63:0] io_in_0_decoded_pc,
input [31:0] io_in_0_decoded_inst,
input [4:0] io_in_0_decoded_rs1,
io_in_0_decoded_rs2,
input [2:0] io_in_0_decoded_funct3,
input [63:0] io_in_0_decoded_immI,
io_in_0_decoded_immS,
io_in_0_decoded_immB,
io_in_0_decoded_immU,
io_in_0_decoded_immJ,
input [4:0] io_in_0_decoded_aluFn,
input [2:0] io_in_0_decoded_memWidth,
input io_in_0_decoded_isLoad,
io_in_0_decoded_isStore,
io_in_0_decoded_isBranch,
io_in_0_decoded_isJal,
io_in_0_decoded_isJalr,
io_in_0_decoded_isLui,
io_in_0_decoded_isAuipc,
io_in_0_decoded_isOpImm,
io_in_0_decoded_isWord,
io_in_0_decoded_isSystem,
io_in_0_decoded_writesRd,
io_in_0_decoded_illegal,
input [5:0] io_in_0_prs1,
io_in_0_prs2,
input io_in_0_src1Ready,
io_in_0_src2Ready,
input [5:0] io_in_0_prd,
io_in_0_robIdx,
input [63:0] io_in_1_decoded_pc,
input [31:0] io_in_1_decoded_inst,
input [4:0] io_in_1_decoded_rs1,
io_in_1_decoded_rs2,
input [2:0] io_in_1_decoded_funct3,
input [63:0] io_in_1_decoded_immI,
io_in_1_decoded_immS,
io_in_1_decoded_immB,
io_in_1_decoded_immU,
io_in_1_decoded_immJ,
input [4:0] io_in_1_decoded_aluFn,
input [2:0] io_in_1_decoded_memWidth,
input io_in_1_decoded_isLoad,
io_in_1_decoded_isStore,
io_in_1_decoded_isBranch,
io_in_1_decoded_isJal,
io_in_1_decoded_isJalr,
io_in_1_decoded_isLui,
io_in_1_decoded_isAuipc,
io_in_1_decoded_isOpImm,
io_in_1_decoded_isWord,
io_in_1_decoded_isSystem,
io_in_1_decoded_writesRd,
io_in_1_decoded_illegal,
input [5:0] io_in_1_prs1,
io_in_1_prs2,
input io_in_1_src1Ready,
io_in_1_src2Ready,
input [5:0] io_in_1_prd,
io_in_1_robIdx,
output io_inReady_0,
io_inReady_1,
input io_wakeup_0_valid,
input [5:0] io_wakeup_0_phys,
input io_wakeup_1_valid,
input [5:0] io_wakeup_1_phys,
output io_outValid_0,
io_outValid_1,
output [63:0] io_out_0_decoded_pc,
output [31:0] io_out_0_decoded_inst,
output [4:0] io_out_0_decoded_rs1,
output [2:0] io_out_0_decoded_funct3,
output [63:0] io_out_0_decoded_immI,
io_out_0_decoded_immS,
io_out_0_decoded_immB,
io_out_0_decoded_immU,
io_out_0_decoded_immJ,
output [4:0] io_out_0_decoded_aluFn,
output [2:0] io_out_0_decoded_memWidth,
output io_out_0_decoded_isLoad,
io_out_0_decoded_isStore,
io_out_0_decoded_isBranch,
io_out_0_decoded_isJal,
io_out_0_decoded_isJalr,
io_out_0_decoded_isLui,
io_out_0_decoded_isAuipc,
io_out_0_decoded_isOpImm,
io_out_0_decoded_isWord,
io_out_0_decoded_isSystem,
io_out_0_decoded_writesRd,
io_out_0_decoded_illegal,
output [5:0] io_out_0_prs1,
io_out_0_prs2,
io_out_0_prd,
io_out_0_robIdx,
output [63:0] io_out_1_decoded_pc,
output [31:0] io_out_1_decoded_inst,
output [4:0] io_out_1_decoded_rs1,
output [2:0] io_out_1_decoded_funct3,
output [63:0] io_out_1_decoded_immI,
io_out_1_decoded_immS,
io_out_1_decoded_immB,
io_out_1_decoded_immU,
io_out_1_decoded_immJ,
output [4:0] io_out_1_decoded_aluFn,
output [2:0] io_out_1_decoded_memWidth,
output io_out_1_decoded_isLoad,
io_out_1_decoded_isStore,
io_out_1_decoded_isBranch,
io_out_1_decoded_isJal,
io_out_1_decoded_isJalr,
io_out_1_decoded_isLui,
io_out_1_decoded_isAuipc,
io_out_1_decoded_isOpImm,
io_out_1_decoded_isWord,
io_out_1_decoded_isSystem,
io_out_1_decoded_writesRd,
io_out_1_decoded_illegal,
output [5:0] io_out_1_prs1,
io_out_1_prs2,
io_out_1_prd,
io_out_1_robIdx,
input io_outReady_0,
io_outReady_1,
io_flush
);
IssueQueue queue (
.clock (clock),
.reset (reset),
.io_enqValid_0 (io_inValid_0),
.io_enqValid_1 (io_inValid_1),
.io_enq_0_decoded_pc (io_in_0_decoded_pc),
.io_enq_0_decoded_inst (io_in_0_decoded_inst),
.io_enq_0_decoded_rs1 (io_in_0_decoded_rs1),
.io_enq_0_decoded_rs2 (io_in_0_decoded_rs2),
.io_enq_0_decoded_funct3 (io_in_0_decoded_funct3),
.io_enq_0_decoded_immI (io_in_0_decoded_immI),
.io_enq_0_decoded_immS (io_in_0_decoded_immS),
.io_enq_0_decoded_immB (io_in_0_decoded_immB),
.io_enq_0_decoded_immU (io_in_0_decoded_immU),
.io_enq_0_decoded_immJ (io_in_0_decoded_immJ),
.io_enq_0_decoded_aluFn (io_in_0_decoded_aluFn),
.io_enq_0_decoded_memWidth (io_in_0_decoded_memWidth),
.io_enq_0_decoded_isLoad (io_in_0_decoded_isLoad),
.io_enq_0_decoded_isStore (io_in_0_decoded_isStore),
.io_enq_0_decoded_isBranch (io_in_0_decoded_isBranch),
.io_enq_0_decoded_isJal (io_in_0_decoded_isJal),
.io_enq_0_decoded_isJalr (io_in_0_decoded_isJalr),
.io_enq_0_decoded_isLui (io_in_0_decoded_isLui),
.io_enq_0_decoded_isAuipc (io_in_0_decoded_isAuipc),
.io_enq_0_decoded_isOpImm (io_in_0_decoded_isOpImm),
.io_enq_0_decoded_isWord (io_in_0_decoded_isWord),
.io_enq_0_decoded_isSystem (io_in_0_decoded_isSystem),
.io_enq_0_decoded_writesRd (io_in_0_decoded_writesRd),
.io_enq_0_decoded_illegal (io_in_0_decoded_illegal),
.io_enq_0_prs1 (io_in_0_prs1),
.io_enq_0_prs2 (io_in_0_prs2),
.io_enq_0_src1Ready (io_in_0_src1Ready),
.io_enq_0_src2Ready (io_in_0_src2Ready),
.io_enq_0_prd (io_in_0_prd),
.io_enq_0_robIdx (io_in_0_robIdx),
.io_enq_1_decoded_pc (io_in_1_decoded_pc),
.io_enq_1_decoded_inst (io_in_1_decoded_inst),
.io_enq_1_decoded_rs1 (io_in_1_decoded_rs1),
.io_enq_1_decoded_rs2 (io_in_1_decoded_rs2),
.io_enq_1_decoded_funct3 (io_in_1_decoded_funct3),
.io_enq_1_decoded_immI (io_in_1_decoded_immI),
.io_enq_1_decoded_immS (io_in_1_decoded_immS),
.io_enq_1_decoded_immB (io_in_1_decoded_immB),
.io_enq_1_decoded_immU (io_in_1_decoded_immU),
.io_enq_1_decoded_immJ (io_in_1_decoded_immJ),
.io_enq_1_decoded_aluFn (io_in_1_decoded_aluFn),
.io_enq_1_decoded_memWidth (io_in_1_decoded_memWidth),
.io_enq_1_decoded_isLoad (io_in_1_decoded_isLoad),
.io_enq_1_decoded_isStore (io_in_1_decoded_isStore),
.io_enq_1_decoded_isBranch (io_in_1_decoded_isBranch),
.io_enq_1_decoded_isJal (io_in_1_decoded_isJal),
.io_enq_1_decoded_isJalr (io_in_1_decoded_isJalr),
.io_enq_1_decoded_isLui (io_in_1_decoded_isLui),
.io_enq_1_decoded_isAuipc (io_in_1_decoded_isAuipc),
.io_enq_1_decoded_isOpImm (io_in_1_decoded_isOpImm),
.io_enq_1_decoded_isWord (io_in_1_decoded_isWord),
.io_enq_1_decoded_isSystem (io_in_1_decoded_isSystem),
.io_enq_1_decoded_writesRd (io_in_1_decoded_writesRd),
.io_enq_1_decoded_illegal (io_in_1_decoded_illegal),
.io_enq_1_prs1 (io_in_1_prs1),
.io_enq_1_prs2 (io_in_1_prs2),
.io_enq_1_src1Ready (io_in_1_src1Ready),
.io_enq_1_src2Ready (io_in_1_src2Ready),
.io_enq_1_prd (io_in_1_prd),
.io_enq_1_robIdx (io_in_1_robIdx),
.io_enqReady_0 (io_inReady_0),
.io_enqReady_1 (io_inReady_1),
.io_wakeup_0_valid (io_wakeup_0_valid),
.io_wakeup_0_phys (io_wakeup_0_phys),
.io_wakeup_1_valid (io_wakeup_1_valid),
.io_wakeup_1_phys (io_wakeup_1_phys),
.io_issueValid_0 (io_outValid_0),
.io_issueValid_1 (io_outValid_1),
.io_issue_0_decoded_pc (io_out_0_decoded_pc),
.io_issue_0_decoded_inst (io_out_0_decoded_inst),
.io_issue_0_decoded_rs1 (io_out_0_decoded_rs1),
.io_issue_0_decoded_funct3 (io_out_0_decoded_funct3),
.io_issue_0_decoded_immI (io_out_0_decoded_immI),
.io_issue_0_decoded_immS (io_out_0_decoded_immS),
.io_issue_0_decoded_immB (io_out_0_decoded_immB),
.io_issue_0_decoded_immU (io_out_0_decoded_immU),
.io_issue_0_decoded_immJ (io_out_0_decoded_immJ),
.io_issue_0_decoded_aluFn (io_out_0_decoded_aluFn),
.io_issue_0_decoded_memWidth (io_out_0_decoded_memWidth),
.io_issue_0_decoded_isLoad (io_out_0_decoded_isLoad),
.io_issue_0_decoded_isStore (io_out_0_decoded_isStore),
.io_issue_0_decoded_isBranch (io_out_0_decoded_isBranch),
.io_issue_0_decoded_isJal (io_out_0_decoded_isJal),
.io_issue_0_decoded_isJalr (io_out_0_decoded_isJalr),
.io_issue_0_decoded_isLui (io_out_0_decoded_isLui),
.io_issue_0_decoded_isAuipc (io_out_0_decoded_isAuipc),
.io_issue_0_decoded_isOpImm (io_out_0_decoded_isOpImm),
.io_issue_0_decoded_isWord (io_out_0_decoded_isWord),
.io_issue_0_decoded_isSystem (io_out_0_decoded_isSystem),
.io_issue_0_decoded_writesRd (io_out_0_decoded_writesRd),
.io_issue_0_decoded_illegal (io_out_0_decoded_illegal),
.io_issue_0_prs1 (io_out_0_prs1),
.io_issue_0_prs2 (io_out_0_prs2),
.io_issue_0_prd (io_out_0_prd),
.io_issue_0_robIdx (io_out_0_robIdx),
.io_issue_1_decoded_pc (io_out_1_decoded_pc),
.io_issue_1_decoded_inst (io_out_1_decoded_inst),
.io_issue_1_decoded_rs1 (io_out_1_decoded_rs1),
.io_issue_1_decoded_funct3 (io_out_1_decoded_funct3),
.io_issue_1_decoded_immI (io_out_1_decoded_immI),
.io_issue_1_decoded_immS (io_out_1_decoded_immS),
.io_issue_1_decoded_immB (io_out_1_decoded_immB),
.io_issue_1_decoded_immU (io_out_1_decoded_immU),
.io_issue_1_decoded_immJ (io_out_1_decoded_immJ),
.io_issue_1_decoded_aluFn (io_out_1_decoded_aluFn),
.io_issue_1_decoded_memWidth (io_out_1_decoded_memWidth),
.io_issue_1_decoded_isLoad (io_out_1_decoded_isLoad),
.io_issue_1_decoded_isStore (io_out_1_decoded_isStore),
.io_issue_1_decoded_isBranch (io_out_1_decoded_isBranch),
.io_issue_1_decoded_isJal (io_out_1_decoded_isJal),
.io_issue_1_decoded_isJalr (io_out_1_decoded_isJalr),
.io_issue_1_decoded_isLui (io_out_1_decoded_isLui),
.io_issue_1_decoded_isAuipc (io_out_1_decoded_isAuipc),
.io_issue_1_decoded_isOpImm (io_out_1_decoded_isOpImm),
.io_issue_1_decoded_isWord (io_out_1_decoded_isWord),
.io_issue_1_decoded_isSystem (io_out_1_decoded_isSystem),
.io_issue_1_decoded_writesRd (io_out_1_decoded_writesRd),
.io_issue_1_decoded_illegal (io_out_1_decoded_illegal),
.io_issue_1_prs1 (io_out_1_prs1),
.io_issue_1_prs2 (io_out_1_prs2),
.io_issue_1_prd (io_out_1_prd),
.io_issue_1_robIdx (io_out_1_robIdx),
.io_issueReady_0 (io_outReady_0),
.io_issueReady_1 (io_outReady_1),
.io_flush (io_flush)
);
endmodule

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

865
generated-ooo/LoadQueue.sv Normal file
View File

@@ -0,0 +1,865 @@
// Generated by CIRCT firtool-1.139.0
module LoadQueue(
input clock,
reset,
io_enqValid,
input [5:0] io_enqRobIdx,
output [3:0] io_enqIdx,
input io_addrValid,
input [3:0] io_addrIdx,
input [63:0] io_addr,
input [2:0] io_size,
input io_complete,
input [3:0] io_completeIdx,
input io_storeAddrValid,
input [5:0] io_storeRobIdx,
input [63:0] io_storeAddr,
input [2:0] io_storeSize,
output io_violation,
input io_flush
);
reg entries_0_valid;
reg [5:0] entries_0_robIdx;
reg entries_0_addrValid;
reg [63:0] entries_0_addr;
reg [2:0] entries_0_size;
reg entries_0_completed;
reg entries_1_valid;
reg [5:0] entries_1_robIdx;
reg entries_1_addrValid;
reg [63:0] entries_1_addr;
reg [2:0] entries_1_size;
reg entries_1_completed;
reg entries_2_valid;
reg [5:0] entries_2_robIdx;
reg entries_2_addrValid;
reg [63:0] entries_2_addr;
reg [2:0] entries_2_size;
reg entries_2_completed;
reg entries_3_valid;
reg [5:0] entries_3_robIdx;
reg entries_3_addrValid;
reg [63:0] entries_3_addr;
reg [2:0] entries_3_size;
reg entries_3_completed;
reg entries_4_valid;
reg [5:0] entries_4_robIdx;
reg entries_4_addrValid;
reg [63:0] entries_4_addr;
reg [2:0] entries_4_size;
reg entries_4_completed;
reg entries_5_valid;
reg [5:0] entries_5_robIdx;
reg entries_5_addrValid;
reg [63:0] entries_5_addr;
reg [2:0] entries_5_size;
reg entries_5_completed;
reg entries_6_valid;
reg [5:0] entries_6_robIdx;
reg entries_6_addrValid;
reg [63:0] entries_6_addr;
reg [2:0] entries_6_size;
reg entries_6_completed;
reg entries_7_valid;
reg [5:0] entries_7_robIdx;
reg entries_7_addrValid;
reg [63:0] entries_7_addr;
reg [2:0] entries_7_size;
reg entries_7_completed;
reg entries_8_valid;
reg [5:0] entries_8_robIdx;
reg entries_8_addrValid;
reg [63:0] entries_8_addr;
reg [2:0] entries_8_size;
reg entries_8_completed;
reg entries_9_valid;
reg [5:0] entries_9_robIdx;
reg entries_9_addrValid;
reg [63:0] entries_9_addr;
reg [2:0] entries_9_size;
reg entries_9_completed;
reg entries_10_valid;
reg [5:0] entries_10_robIdx;
reg entries_10_addrValid;
reg [63:0] entries_10_addr;
reg [2:0] entries_10_size;
reg entries_10_completed;
reg entries_11_valid;
reg [5:0] entries_11_robIdx;
reg entries_11_addrValid;
reg [63:0] entries_11_addr;
reg [2:0] entries_11_size;
reg entries_11_completed;
reg entries_12_valid;
reg [5:0] entries_12_robIdx;
reg entries_12_addrValid;
reg [63:0] entries_12_addr;
reg [2:0] entries_12_size;
reg entries_12_completed;
reg entries_13_valid;
reg [5:0] entries_13_robIdx;
reg entries_13_addrValid;
reg [63:0] entries_13_addr;
reg [2:0] entries_13_size;
reg entries_13_completed;
reg entries_14_valid;
reg [5:0] entries_14_robIdx;
reg entries_14_addrValid;
reg [63:0] entries_14_addr;
reg [2:0] entries_14_size;
reg entries_14_completed;
reg entries_15_valid;
reg [5:0] entries_15_robIdx;
reg entries_15_addrValid;
reg [63:0] entries_15_addr;
reg [2:0] entries_15_size;
reg entries_15_completed;
wire [14:0] enqOH =
entries_0_valid
? (entries_1_valid
? (entries_2_valid
? (entries_3_valid
? (entries_4_valid
? (entries_5_valid
? (entries_6_valid
? (entries_7_valid
? (entries_8_valid
? (entries_9_valid
? (entries_10_valid
? (entries_11_valid
? (entries_12_valid
? (entries_13_valid
? (entries_14_valid
? {~entries_15_valid,
14'h0}
: 15'h2000)
: 15'h1000)
: 15'h800)
: 15'h400)
: 15'h200)
: 15'h100)
: 15'h80)
: 15'h40)
: 15'h20)
: 15'h10)
: 15'h8)
: 15'h4)
: 15'h2)
: 15'h1)
: 15'h0;
wire [6:0] _enqIdx_T_1 = enqOH[14:8] | enqOH[6:0];
wire [2:0] _enqIdx_T_3 = _enqIdx_T_1[6:4] | _enqIdx_T_1[2:0];
wire [3:0] enqIdx =
{|(enqOH[14:7]),
|(_enqIdx_T_1[6:3]),
|(_enqIdx_T_3[2:1]),
_enqIdx_T_3[2] | _enqIdx_T_3[0]};
wire _violationVec_15_bm_T = io_storeSize == 3'h0;
wire _violationVec_15_bm_T_2 = io_storeSize == 3'h1;
wire _violationVec_15_bm_T_4 = io_storeSize == 3'h2;
wire _violationVec_15_bm_T_6 = io_storeSize == 3'h3;
wire [15:0] _io_violation_T =
{io_storeAddrValid & entries_15_valid & entries_15_completed & entries_15_addrValid
& entries_15_robIdx > io_storeRobIdx & entries_15_addr[63:3] == io_storeAddr[63:3]
& (entries_15_addr[2:0]
| (entries_15_size == 3'h3
? 3'h7
: entries_15_size == 3'h2
? 3'h3
: entries_15_size == 3'h1
? 3'h1
: entries_15_size == 3'h0 ? 3'h0 : 3'h7)) >= io_storeAddr[2:0]
& (io_storeAddr[2:0]
| (_violationVec_15_bm_T_6
? 3'h7
: _violationVec_15_bm_T_4
? 3'h3
: _violationVec_15_bm_T_2
? 3'h1
: _violationVec_15_bm_T ? 3'h0 : 3'h7)) >= entries_15_addr[2:0],
io_storeAddrValid & entries_14_valid & entries_14_completed & entries_14_addrValid
& entries_14_robIdx > io_storeRobIdx & entries_14_addr[63:3] == io_storeAddr[63:3]
& (entries_14_addr[2:0]
| (entries_14_size == 3'h3
? 3'h7
: entries_14_size == 3'h2
? 3'h3
: entries_14_size == 3'h1
? 3'h1
: entries_14_size == 3'h0 ? 3'h0 : 3'h7)) >= io_storeAddr[2:0]
& (io_storeAddr[2:0]
| (_violationVec_15_bm_T_6
? 3'h7
: _violationVec_15_bm_T_4
? 3'h3
: _violationVec_15_bm_T_2
? 3'h1
: _violationVec_15_bm_T ? 3'h0 : 3'h7)) >= entries_14_addr[2:0],
io_storeAddrValid & entries_13_valid & entries_13_completed & entries_13_addrValid
& entries_13_robIdx > io_storeRobIdx & entries_13_addr[63:3] == io_storeAddr[63:3]
& (entries_13_addr[2:0]
| (entries_13_size == 3'h3
? 3'h7
: entries_13_size == 3'h2
? 3'h3
: entries_13_size == 3'h1
? 3'h1
: entries_13_size == 3'h0 ? 3'h0 : 3'h7)) >= io_storeAddr[2:0]
& (io_storeAddr[2:0]
| (_violationVec_15_bm_T_6
? 3'h7
: _violationVec_15_bm_T_4
? 3'h3
: _violationVec_15_bm_T_2
? 3'h1
: _violationVec_15_bm_T ? 3'h0 : 3'h7)) >= entries_13_addr[2:0],
io_storeAddrValid & entries_12_valid & entries_12_completed & entries_12_addrValid
& entries_12_robIdx > io_storeRobIdx & entries_12_addr[63:3] == io_storeAddr[63:3]
& (entries_12_addr[2:0]
| (entries_12_size == 3'h3
? 3'h7
: entries_12_size == 3'h2
? 3'h3
: entries_12_size == 3'h1
? 3'h1
: entries_12_size == 3'h0 ? 3'h0 : 3'h7)) >= io_storeAddr[2:0]
& (io_storeAddr[2:0]
| (_violationVec_15_bm_T_6
? 3'h7
: _violationVec_15_bm_T_4
? 3'h3
: _violationVec_15_bm_T_2
? 3'h1
: _violationVec_15_bm_T ? 3'h0 : 3'h7)) >= entries_12_addr[2:0],
io_storeAddrValid & entries_11_valid & entries_11_completed & entries_11_addrValid
& entries_11_robIdx > io_storeRobIdx & entries_11_addr[63:3] == io_storeAddr[63:3]
& (entries_11_addr[2:0]
| (entries_11_size == 3'h3
? 3'h7
: entries_11_size == 3'h2
? 3'h3
: entries_11_size == 3'h1
? 3'h1
: entries_11_size == 3'h0 ? 3'h0 : 3'h7)) >= io_storeAddr[2:0]
& (io_storeAddr[2:0]
| (_violationVec_15_bm_T_6
? 3'h7
: _violationVec_15_bm_T_4
? 3'h3
: _violationVec_15_bm_T_2
? 3'h1
: _violationVec_15_bm_T ? 3'h0 : 3'h7)) >= entries_11_addr[2:0],
io_storeAddrValid & entries_10_valid & entries_10_completed & entries_10_addrValid
& entries_10_robIdx > io_storeRobIdx & entries_10_addr[63:3] == io_storeAddr[63:3]
& (entries_10_addr[2:0]
| (entries_10_size == 3'h3
? 3'h7
: entries_10_size == 3'h2
? 3'h3
: entries_10_size == 3'h1
? 3'h1
: entries_10_size == 3'h0 ? 3'h0 : 3'h7)) >= io_storeAddr[2:0]
& (io_storeAddr[2:0]
| (_violationVec_15_bm_T_6
? 3'h7
: _violationVec_15_bm_T_4
? 3'h3
: _violationVec_15_bm_T_2
? 3'h1
: _violationVec_15_bm_T ? 3'h0 : 3'h7)) >= entries_10_addr[2:0],
io_storeAddrValid & entries_9_valid & entries_9_completed & entries_9_addrValid
& entries_9_robIdx > io_storeRobIdx & entries_9_addr[63:3] == io_storeAddr[63:3]
& (entries_9_addr[2:0]
| (entries_9_size == 3'h3
? 3'h7
: entries_9_size == 3'h2
? 3'h3
: entries_9_size == 3'h1
? 3'h1
: entries_9_size == 3'h0 ? 3'h0 : 3'h7)) >= io_storeAddr[2:0]
& (io_storeAddr[2:0]
| (_violationVec_15_bm_T_6
? 3'h7
: _violationVec_15_bm_T_4
? 3'h3
: _violationVec_15_bm_T_2
? 3'h1
: _violationVec_15_bm_T ? 3'h0 : 3'h7)) >= entries_9_addr[2:0],
io_storeAddrValid & entries_8_valid & entries_8_completed & entries_8_addrValid
& entries_8_robIdx > io_storeRobIdx & entries_8_addr[63:3] == io_storeAddr[63:3]
& (entries_8_addr[2:0]
| (entries_8_size == 3'h3
? 3'h7
: entries_8_size == 3'h2
? 3'h3
: entries_8_size == 3'h1
? 3'h1
: entries_8_size == 3'h0 ? 3'h0 : 3'h7)) >= io_storeAddr[2:0]
& (io_storeAddr[2:0]
| (_violationVec_15_bm_T_6
? 3'h7
: _violationVec_15_bm_T_4
? 3'h3
: _violationVec_15_bm_T_2
? 3'h1
: _violationVec_15_bm_T ? 3'h0 : 3'h7)) >= entries_8_addr[2:0],
io_storeAddrValid & entries_7_valid & entries_7_completed & entries_7_addrValid
& entries_7_robIdx > io_storeRobIdx & entries_7_addr[63:3] == io_storeAddr[63:3]
& (entries_7_addr[2:0]
| (entries_7_size == 3'h3
? 3'h7
: entries_7_size == 3'h2
? 3'h3
: entries_7_size == 3'h1
? 3'h1
: entries_7_size == 3'h0 ? 3'h0 : 3'h7)) >= io_storeAddr[2:0]
& (io_storeAddr[2:0]
| (_violationVec_15_bm_T_6
? 3'h7
: _violationVec_15_bm_T_4
? 3'h3
: _violationVec_15_bm_T_2
? 3'h1
: _violationVec_15_bm_T ? 3'h0 : 3'h7)) >= entries_7_addr[2:0],
io_storeAddrValid & entries_6_valid & entries_6_completed & entries_6_addrValid
& entries_6_robIdx > io_storeRobIdx & entries_6_addr[63:3] == io_storeAddr[63:3]
& (entries_6_addr[2:0]
| (entries_6_size == 3'h3
? 3'h7
: entries_6_size == 3'h2
? 3'h3
: entries_6_size == 3'h1
? 3'h1
: entries_6_size == 3'h0 ? 3'h0 : 3'h7)) >= io_storeAddr[2:0]
& (io_storeAddr[2:0]
| (_violationVec_15_bm_T_6
? 3'h7
: _violationVec_15_bm_T_4
? 3'h3
: _violationVec_15_bm_T_2
? 3'h1
: _violationVec_15_bm_T ? 3'h0 : 3'h7)) >= entries_6_addr[2:0],
io_storeAddrValid & entries_5_valid & entries_5_completed & entries_5_addrValid
& entries_5_robIdx > io_storeRobIdx & entries_5_addr[63:3] == io_storeAddr[63:3]
& (entries_5_addr[2:0]
| (entries_5_size == 3'h3
? 3'h7
: entries_5_size == 3'h2
? 3'h3
: entries_5_size == 3'h1
? 3'h1
: entries_5_size == 3'h0 ? 3'h0 : 3'h7)) >= io_storeAddr[2:0]
& (io_storeAddr[2:0]
| (_violationVec_15_bm_T_6
? 3'h7
: _violationVec_15_bm_T_4
? 3'h3
: _violationVec_15_bm_T_2
? 3'h1
: _violationVec_15_bm_T ? 3'h0 : 3'h7)) >= entries_5_addr[2:0],
io_storeAddrValid & entries_4_valid & entries_4_completed & entries_4_addrValid
& entries_4_robIdx > io_storeRobIdx & entries_4_addr[63:3] == io_storeAddr[63:3]
& (entries_4_addr[2:0]
| (entries_4_size == 3'h3
? 3'h7
: entries_4_size == 3'h2
? 3'h3
: entries_4_size == 3'h1
? 3'h1
: entries_4_size == 3'h0 ? 3'h0 : 3'h7)) >= io_storeAddr[2:0]
& (io_storeAddr[2:0]
| (_violationVec_15_bm_T_6
? 3'h7
: _violationVec_15_bm_T_4
? 3'h3
: _violationVec_15_bm_T_2
? 3'h1
: _violationVec_15_bm_T ? 3'h0 : 3'h7)) >= entries_4_addr[2:0],
io_storeAddrValid & entries_3_valid & entries_3_completed & entries_3_addrValid
& entries_3_robIdx > io_storeRobIdx & entries_3_addr[63:3] == io_storeAddr[63:3]
& (entries_3_addr[2:0]
| (entries_3_size == 3'h3
? 3'h7
: entries_3_size == 3'h2
? 3'h3
: entries_3_size == 3'h1
? 3'h1
: entries_3_size == 3'h0 ? 3'h0 : 3'h7)) >= io_storeAddr[2:0]
& (io_storeAddr[2:0]
| (_violationVec_15_bm_T_6
? 3'h7
: _violationVec_15_bm_T_4
? 3'h3
: _violationVec_15_bm_T_2
? 3'h1
: _violationVec_15_bm_T ? 3'h0 : 3'h7)) >= entries_3_addr[2:0],
io_storeAddrValid & entries_2_valid & entries_2_completed & entries_2_addrValid
& entries_2_robIdx > io_storeRobIdx & entries_2_addr[63:3] == io_storeAddr[63:3]
& (entries_2_addr[2:0]
| (entries_2_size == 3'h3
? 3'h7
: entries_2_size == 3'h2
? 3'h3
: entries_2_size == 3'h1
? 3'h1
: entries_2_size == 3'h0 ? 3'h0 : 3'h7)) >= io_storeAddr[2:0]
& (io_storeAddr[2:0]
| (_violationVec_15_bm_T_6
? 3'h7
: _violationVec_15_bm_T_4
? 3'h3
: _violationVec_15_bm_T_2
? 3'h1
: _violationVec_15_bm_T ? 3'h0 : 3'h7)) >= entries_2_addr[2:0],
io_storeAddrValid & entries_1_valid & entries_1_completed & entries_1_addrValid
& entries_1_robIdx > io_storeRobIdx & entries_1_addr[63:3] == io_storeAddr[63:3]
& (entries_1_addr[2:0]
| (entries_1_size == 3'h3
? 3'h7
: entries_1_size == 3'h2
? 3'h3
: entries_1_size == 3'h1
? 3'h1
: entries_1_size == 3'h0 ? 3'h0 : 3'h7)) >= io_storeAddr[2:0]
& (io_storeAddr[2:0]
| (_violationVec_15_bm_T_6
? 3'h7
: _violationVec_15_bm_T_4
? 3'h3
: _violationVec_15_bm_T_2
? 3'h1
: _violationVec_15_bm_T ? 3'h0 : 3'h7)) >= entries_1_addr[2:0],
io_storeAddrValid & entries_0_valid & entries_0_completed & entries_0_addrValid
& entries_0_robIdx > io_storeRobIdx & entries_0_addr[63:3] == io_storeAddr[63:3]
& (entries_0_addr[2:0]
| (entries_0_size == 3'h3
? 3'h7
: entries_0_size == 3'h2
? 3'h3
: entries_0_size == 3'h1
? 3'h1
: entries_0_size == 3'h0 ? 3'h0 : 3'h7)) >= io_storeAddr[2:0]
& (io_storeAddr[2:0]
| (_violationVec_15_bm_T_6
? 3'h7
: _violationVec_15_bm_T_4
? 3'h3
: _violationVec_15_bm_T_2
? 3'h1
: _violationVec_15_bm_T ? 3'h0 : 3'h7)) >= entries_0_addr[2:0]};
always @(posedge clock) begin
if (reset) begin
entries_0_valid <= 1'h0;
entries_0_robIdx <= 6'h0;
entries_0_addrValid <= 1'h0;
entries_0_addr <= 64'h0;
entries_0_size <= 3'h0;
entries_0_completed <= 1'h0;
entries_1_valid <= 1'h0;
entries_1_robIdx <= 6'h0;
entries_1_addrValid <= 1'h0;
entries_1_addr <= 64'h0;
entries_1_size <= 3'h0;
entries_1_completed <= 1'h0;
entries_2_valid <= 1'h0;
entries_2_robIdx <= 6'h0;
entries_2_addrValid <= 1'h0;
entries_2_addr <= 64'h0;
entries_2_size <= 3'h0;
entries_2_completed <= 1'h0;
entries_3_valid <= 1'h0;
entries_3_robIdx <= 6'h0;
entries_3_addrValid <= 1'h0;
entries_3_addr <= 64'h0;
entries_3_size <= 3'h0;
entries_3_completed <= 1'h0;
entries_4_valid <= 1'h0;
entries_4_robIdx <= 6'h0;
entries_4_addrValid <= 1'h0;
entries_4_addr <= 64'h0;
entries_4_size <= 3'h0;
entries_4_completed <= 1'h0;
entries_5_valid <= 1'h0;
entries_5_robIdx <= 6'h0;
entries_5_addrValid <= 1'h0;
entries_5_addr <= 64'h0;
entries_5_size <= 3'h0;
entries_5_completed <= 1'h0;
entries_6_valid <= 1'h0;
entries_6_robIdx <= 6'h0;
entries_6_addrValid <= 1'h0;
entries_6_addr <= 64'h0;
entries_6_size <= 3'h0;
entries_6_completed <= 1'h0;
entries_7_valid <= 1'h0;
entries_7_robIdx <= 6'h0;
entries_7_addrValid <= 1'h0;
entries_7_addr <= 64'h0;
entries_7_size <= 3'h0;
entries_7_completed <= 1'h0;
entries_8_valid <= 1'h0;
entries_8_robIdx <= 6'h0;
entries_8_addrValid <= 1'h0;
entries_8_addr <= 64'h0;
entries_8_size <= 3'h0;
entries_8_completed <= 1'h0;
entries_9_valid <= 1'h0;
entries_9_robIdx <= 6'h0;
entries_9_addrValid <= 1'h0;
entries_9_addr <= 64'h0;
entries_9_size <= 3'h0;
entries_9_completed <= 1'h0;
entries_10_valid <= 1'h0;
entries_10_robIdx <= 6'h0;
entries_10_addrValid <= 1'h0;
entries_10_addr <= 64'h0;
entries_10_size <= 3'h0;
entries_10_completed <= 1'h0;
entries_11_valid <= 1'h0;
entries_11_robIdx <= 6'h0;
entries_11_addrValid <= 1'h0;
entries_11_addr <= 64'h0;
entries_11_size <= 3'h0;
entries_11_completed <= 1'h0;
entries_12_valid <= 1'h0;
entries_12_robIdx <= 6'h0;
entries_12_addrValid <= 1'h0;
entries_12_addr <= 64'h0;
entries_12_size <= 3'h0;
entries_12_completed <= 1'h0;
entries_13_valid <= 1'h0;
entries_13_robIdx <= 6'h0;
entries_13_addrValid <= 1'h0;
entries_13_addr <= 64'h0;
entries_13_size <= 3'h0;
entries_13_completed <= 1'h0;
entries_14_valid <= 1'h0;
entries_14_robIdx <= 6'h0;
entries_14_addrValid <= 1'h0;
entries_14_addr <= 64'h0;
entries_14_size <= 3'h0;
entries_14_completed <= 1'h0;
entries_15_valid <= 1'h0;
entries_15_robIdx <= 6'h0;
entries_15_addrValid <= 1'h0;
entries_15_addr <= 64'h0;
entries_15_size <= 3'h0;
entries_15_completed <= 1'h0;
end
else begin
automatic logic _GEN =
io_enqValid
& (|{~entries_15_valid,
~entries_14_valid,
~entries_13_valid,
~entries_12_valid,
~entries_11_valid,
~entries_10_valid,
~entries_9_valid,
~entries_8_valid,
~entries_7_valid,
~entries_6_valid,
~entries_5_valid,
~entries_4_valid,
~entries_3_valid,
~entries_2_valid,
~entries_1_valid,
~entries_0_valid});
automatic logic _GEN_0;
automatic logic _GEN_1;
automatic logic _GEN_2;
automatic logic _GEN_3;
automatic logic _GEN_4;
automatic logic _GEN_5;
automatic logic _GEN_6;
automatic logic _GEN_7;
automatic logic _GEN_8;
automatic logic _GEN_9;
automatic logic _GEN_10;
automatic logic _GEN_11;
automatic logic _GEN_12;
automatic logic _GEN_13;
automatic logic _GEN_14;
automatic logic _GEN_15;
automatic logic _GEN_16;
automatic logic _GEN_17;
automatic logic _GEN_18;
automatic logic _GEN_19;
automatic logic _GEN_20;
automatic logic _GEN_21;
automatic logic _GEN_22;
automatic logic _GEN_23;
automatic logic _GEN_24;
automatic logic _GEN_25;
automatic logic _GEN_26;
automatic logic _GEN_27;
automatic logic _GEN_28;
automatic logic _GEN_29;
automatic logic _GEN_30;
automatic logic _GEN_31;
_GEN_0 = _GEN & enqIdx == 4'h0;
_GEN_1 = _GEN & enqIdx == 4'h1;
_GEN_2 = _GEN & enqIdx == 4'h2;
_GEN_3 = _GEN & enqIdx == 4'h3;
_GEN_4 = _GEN & enqIdx == 4'h4;
_GEN_5 = _GEN & enqIdx == 4'h5;
_GEN_6 = _GEN & enqIdx == 4'h6;
_GEN_7 = _GEN & enqIdx == 4'h7;
_GEN_8 = _GEN & enqIdx == 4'h8;
_GEN_9 = _GEN & enqIdx == 4'h9;
_GEN_10 = _GEN & enqIdx == 4'hA;
_GEN_11 = _GEN & enqIdx == 4'hB;
_GEN_12 = _GEN & enqIdx == 4'hC;
_GEN_13 = _GEN & enqIdx == 4'hD;
_GEN_14 = _GEN & enqIdx == 4'hE;
_GEN_15 = _GEN & (&enqIdx);
_GEN_16 = io_addrValid & io_addrIdx == 4'h0;
_GEN_17 = io_addrValid & io_addrIdx == 4'h1;
_GEN_18 = io_addrValid & io_addrIdx == 4'h2;
_GEN_19 = io_addrValid & io_addrIdx == 4'h3;
_GEN_20 = io_addrValid & io_addrIdx == 4'h4;
_GEN_21 = io_addrValid & io_addrIdx == 4'h5;
_GEN_22 = io_addrValid & io_addrIdx == 4'h6;
_GEN_23 = io_addrValid & io_addrIdx == 4'h7;
_GEN_24 = io_addrValid & io_addrIdx == 4'h8;
_GEN_25 = io_addrValid & io_addrIdx == 4'h9;
_GEN_26 = io_addrValid & io_addrIdx == 4'hA;
_GEN_27 = io_addrValid & io_addrIdx == 4'hB;
_GEN_28 = io_addrValid & io_addrIdx == 4'hC;
_GEN_29 = io_addrValid & io_addrIdx == 4'hD;
_GEN_30 = io_addrValid & io_addrIdx == 4'hE;
_GEN_31 = io_addrValid & (&io_addrIdx);
entries_0_valid <= ~io_flush & (_GEN_0 | entries_0_valid);
if (io_flush) begin
entries_0_robIdx <= 6'h0;
entries_0_addr <= 64'h0;
entries_0_size <= 3'h0;
entries_1_robIdx <= 6'h0;
entries_1_addr <= 64'h0;
entries_1_size <= 3'h0;
entries_2_robIdx <= 6'h0;
entries_2_addr <= 64'h0;
entries_2_size <= 3'h0;
entries_3_robIdx <= 6'h0;
entries_3_addr <= 64'h0;
entries_3_size <= 3'h0;
entries_4_robIdx <= 6'h0;
entries_4_addr <= 64'h0;
entries_4_size <= 3'h0;
entries_5_robIdx <= 6'h0;
entries_5_addr <= 64'h0;
entries_5_size <= 3'h0;
entries_6_robIdx <= 6'h0;
entries_6_addr <= 64'h0;
entries_6_size <= 3'h0;
entries_7_robIdx <= 6'h0;
entries_7_addr <= 64'h0;
entries_7_size <= 3'h0;
entries_8_robIdx <= 6'h0;
entries_8_addr <= 64'h0;
entries_8_size <= 3'h0;
entries_9_robIdx <= 6'h0;
entries_9_addr <= 64'h0;
entries_9_size <= 3'h0;
entries_10_robIdx <= 6'h0;
entries_10_addr <= 64'h0;
entries_10_size <= 3'h0;
entries_11_robIdx <= 6'h0;
entries_11_addr <= 64'h0;
entries_11_size <= 3'h0;
entries_12_robIdx <= 6'h0;
entries_12_addr <= 64'h0;
entries_12_size <= 3'h0;
entries_13_robIdx <= 6'h0;
entries_13_addr <= 64'h0;
entries_13_size <= 3'h0;
entries_14_robIdx <= 6'h0;
entries_14_addr <= 64'h0;
entries_14_size <= 3'h0;
entries_15_robIdx <= 6'h0;
entries_15_addr <= 64'h0;
entries_15_size <= 3'h0;
end
else begin
if (_GEN_0)
entries_0_robIdx <= io_enqRobIdx;
if (_GEN_16) begin
entries_0_addr <= io_addr;
entries_0_size <= io_size;
end
if (_GEN_1)
entries_1_robIdx <= io_enqRobIdx;
if (_GEN_17) begin
entries_1_addr <= io_addr;
entries_1_size <= io_size;
end
if (_GEN_2)
entries_2_robIdx <= io_enqRobIdx;
if (_GEN_18) begin
entries_2_addr <= io_addr;
entries_2_size <= io_size;
end
if (_GEN_3)
entries_3_robIdx <= io_enqRobIdx;
if (_GEN_19) begin
entries_3_addr <= io_addr;
entries_3_size <= io_size;
end
if (_GEN_4)
entries_4_robIdx <= io_enqRobIdx;
if (_GEN_20) begin
entries_4_addr <= io_addr;
entries_4_size <= io_size;
end
if (_GEN_5)
entries_5_robIdx <= io_enqRobIdx;
if (_GEN_21) begin
entries_5_addr <= io_addr;
entries_5_size <= io_size;
end
if (_GEN_6)
entries_6_robIdx <= io_enqRobIdx;
if (_GEN_22) begin
entries_6_addr <= io_addr;
entries_6_size <= io_size;
end
if (_GEN_7)
entries_7_robIdx <= io_enqRobIdx;
if (_GEN_23) begin
entries_7_addr <= io_addr;
entries_7_size <= io_size;
end
if (_GEN_8)
entries_8_robIdx <= io_enqRobIdx;
if (_GEN_24) begin
entries_8_addr <= io_addr;
entries_8_size <= io_size;
end
if (_GEN_9)
entries_9_robIdx <= io_enqRobIdx;
if (_GEN_25) begin
entries_9_addr <= io_addr;
entries_9_size <= io_size;
end
if (_GEN_10)
entries_10_robIdx <= io_enqRobIdx;
if (_GEN_26) begin
entries_10_addr <= io_addr;
entries_10_size <= io_size;
end
if (_GEN_11)
entries_11_robIdx <= io_enqRobIdx;
if (_GEN_27) begin
entries_11_addr <= io_addr;
entries_11_size <= io_size;
end
if (_GEN_12)
entries_12_robIdx <= io_enqRobIdx;
if (_GEN_28) begin
entries_12_addr <= io_addr;
entries_12_size <= io_size;
end
if (_GEN_13)
entries_13_robIdx <= io_enqRobIdx;
if (_GEN_29) begin
entries_13_addr <= io_addr;
entries_13_size <= io_size;
end
if (_GEN_14)
entries_14_robIdx <= io_enqRobIdx;
if (_GEN_30) begin
entries_14_addr <= io_addr;
entries_14_size <= io_size;
end
if (_GEN_15)
entries_15_robIdx <= io_enqRobIdx;
if (_GEN_31) begin
entries_15_addr <= io_addr;
entries_15_size <= io_size;
end
end
entries_0_addrValid <= ~io_flush & (_GEN_16 | ~_GEN_0 & entries_0_addrValid);
entries_0_completed <=
~io_flush
& (io_complete & io_completeIdx == 4'h0 | ~_GEN_0 & entries_0_completed);
entries_1_valid <= ~io_flush & (_GEN_1 | entries_1_valid);
entries_1_addrValid <= ~io_flush & (_GEN_17 | ~_GEN_1 & entries_1_addrValid);
entries_1_completed <=
~io_flush
& (io_complete & io_completeIdx == 4'h1 | ~_GEN_1 & entries_1_completed);
entries_2_valid <= ~io_flush & (_GEN_2 | entries_2_valid);
entries_2_addrValid <= ~io_flush & (_GEN_18 | ~_GEN_2 & entries_2_addrValid);
entries_2_completed <=
~io_flush
& (io_complete & io_completeIdx == 4'h2 | ~_GEN_2 & entries_2_completed);
entries_3_valid <= ~io_flush & (_GEN_3 | entries_3_valid);
entries_3_addrValid <= ~io_flush & (_GEN_19 | ~_GEN_3 & entries_3_addrValid);
entries_3_completed <=
~io_flush
& (io_complete & io_completeIdx == 4'h3 | ~_GEN_3 & entries_3_completed);
entries_4_valid <= ~io_flush & (_GEN_4 | entries_4_valid);
entries_4_addrValid <= ~io_flush & (_GEN_20 | ~_GEN_4 & entries_4_addrValid);
entries_4_completed <=
~io_flush
& (io_complete & io_completeIdx == 4'h4 | ~_GEN_4 & entries_4_completed);
entries_5_valid <= ~io_flush & (_GEN_5 | entries_5_valid);
entries_5_addrValid <= ~io_flush & (_GEN_21 | ~_GEN_5 & entries_5_addrValid);
entries_5_completed <=
~io_flush
& (io_complete & io_completeIdx == 4'h5 | ~_GEN_5 & entries_5_completed);
entries_6_valid <= ~io_flush & (_GEN_6 | entries_6_valid);
entries_6_addrValid <= ~io_flush & (_GEN_22 | ~_GEN_6 & entries_6_addrValid);
entries_6_completed <=
~io_flush
& (io_complete & io_completeIdx == 4'h6 | ~_GEN_6 & entries_6_completed);
entries_7_valid <= ~io_flush & (_GEN_7 | entries_7_valid);
entries_7_addrValid <= ~io_flush & (_GEN_23 | ~_GEN_7 & entries_7_addrValid);
entries_7_completed <=
~io_flush
& (io_complete & io_completeIdx == 4'h7 | ~_GEN_7 & entries_7_completed);
entries_8_valid <= ~io_flush & (_GEN_8 | entries_8_valid);
entries_8_addrValid <= ~io_flush & (_GEN_24 | ~_GEN_8 & entries_8_addrValid);
entries_8_completed <=
~io_flush
& (io_complete & io_completeIdx == 4'h8 | ~_GEN_8 & entries_8_completed);
entries_9_valid <= ~io_flush & (_GEN_9 | entries_9_valid);
entries_9_addrValid <= ~io_flush & (_GEN_25 | ~_GEN_9 & entries_9_addrValid);
entries_9_completed <=
~io_flush
& (io_complete & io_completeIdx == 4'h9 | ~_GEN_9 & entries_9_completed);
entries_10_valid <= ~io_flush & (_GEN_10 | entries_10_valid);
entries_10_addrValid <= ~io_flush & (_GEN_26 | ~_GEN_10 & entries_10_addrValid);
entries_10_completed <=
~io_flush
& (io_complete & io_completeIdx == 4'hA | ~_GEN_10 & entries_10_completed);
entries_11_valid <= ~io_flush & (_GEN_11 | entries_11_valid);
entries_11_addrValid <= ~io_flush & (_GEN_27 | ~_GEN_11 & entries_11_addrValid);
entries_11_completed <=
~io_flush
& (io_complete & io_completeIdx == 4'hB | ~_GEN_11 & entries_11_completed);
entries_12_valid <= ~io_flush & (_GEN_12 | entries_12_valid);
entries_12_addrValid <= ~io_flush & (_GEN_28 | ~_GEN_12 & entries_12_addrValid);
entries_12_completed <=
~io_flush
& (io_complete & io_completeIdx == 4'hC | ~_GEN_12 & entries_12_completed);
entries_13_valid <= ~io_flush & (_GEN_13 | entries_13_valid);
entries_13_addrValid <= ~io_flush & (_GEN_29 | ~_GEN_13 & entries_13_addrValid);
entries_13_completed <=
~io_flush
& (io_complete & io_completeIdx == 4'hD | ~_GEN_13 & entries_13_completed);
entries_14_valid <= ~io_flush & (_GEN_14 | entries_14_valid);
entries_14_addrValid <= ~io_flush & (_GEN_30 | ~_GEN_14 & entries_14_addrValid);
entries_14_completed <=
~io_flush
& (io_complete & io_completeIdx == 4'hE | ~_GEN_14 & entries_14_completed);
entries_15_valid <= ~io_flush & (_GEN_15 | entries_15_valid);
entries_15_addrValid <= ~io_flush & (_GEN_31 | ~_GEN_15 & entries_15_addrValid);
entries_15_completed <=
~io_flush & (io_complete & (&io_completeIdx) | ~_GEN_15 & entries_15_completed);
end
end // always @(posedge)
assign io_enqIdx = enqIdx;
assign io_violation = |_io_violation_T;
endmodule

42
generated-ooo/MMU.sv Normal file
View File

@@ -0,0 +1,42 @@
// Generated by CIRCT firtool-1.139.0
module MMU(
input clock,
reset,
input [63:0] io_satp,
input io_req_valid,
input [63:0] io_req_vaddr,
input io_req_isStore,
output io_resp_pageFault,
io_ptwMemReq_valid,
output [63:0] io_ptwMemReq_addr,
input io_ptwMemResp_valid,
input [63:0] io_ptwMemResp_data,
output io_refill_valid,
output [26:0] io_refill_vpn,
output [43:0] io_refill_ppn,
output [7:0] io_refill_flags
);
wire _walker_io_respValid;
wire _walker_io_pageFault;
PageTableWalker walker (
.clock (clock),
.reset (reset),
.io_reqValid (io_req_valid & (|(io_satp[63:60]))),
.io_reqVpn (io_req_vaddr[38:12]),
.io_isStore (io_req_isStore),
.io_satp (io_satp),
.io_memReq_valid (io_ptwMemReq_valid),
.io_memReq_addr (io_ptwMemReq_addr),
.io_memResp_valid (io_ptwMemResp_valid),
.io_memResp_data (io_ptwMemResp_data),
.io_respValid (_walker_io_respValid),
.io_refill_valid (io_refill_valid),
.io_refill_vpn (io_refill_vpn),
.io_refill_ppn (io_refill_ppn),
.io_refill_flags (io_refill_flags),
.io_pageFault (_walker_io_pageFault)
);
assign io_resp_pageFault = _walker_io_respValid & _walker_io_pageFault;
endmodule

969
generated-ooo/OoOBackend.sv Normal file
View File

@@ -0,0 +1,969 @@
// Generated by CIRCT firtool-1.139.0
module OoOBackend(
input clock,
reset,
io_decodeValid_0,
io_decodeValid_1,
input [63:0] io_decode_0_pc,
input [31:0] io_decode_0_inst,
input [4:0] io_decode_0_rs1,
io_decode_0_rs2,
io_decode_0_rd,
input [2:0] io_decode_0_funct3,
input [63:0] io_decode_0_immI,
io_decode_0_immS,
io_decode_0_immB,
io_decode_0_immU,
io_decode_0_immJ,
input [3:0] io_decode_0_opClass,
input [4:0] io_decode_0_aluFn,
input [2:0] io_decode_0_memWidth,
input io_decode_0_isLoad,
io_decode_0_isStore,
io_decode_0_isBranch,
io_decode_0_isJal,
io_decode_0_isJalr,
io_decode_0_isLui,
io_decode_0_isAuipc,
io_decode_0_isOpImm,
io_decode_0_isWord,
io_decode_0_isSystem,
io_decode_0_writesRd,
io_decode_0_illegal,
input [63:0] io_decode_1_pc,
input [31:0] io_decode_1_inst,
input [4:0] io_decode_1_rs1,
io_decode_1_rs2,
io_decode_1_rd,
input [2:0] io_decode_1_funct3,
input [63:0] io_decode_1_immI,
io_decode_1_immS,
io_decode_1_immB,
io_decode_1_immU,
io_decode_1_immJ,
input [3:0] io_decode_1_opClass,
input [4:0] io_decode_1_aluFn,
input [2:0] io_decode_1_memWidth,
input io_decode_1_isLoad,
io_decode_1_isStore,
io_decode_1_isBranch,
io_decode_1_isJal,
io_decode_1_isJalr,
io_decode_1_isLui,
io_decode_1_isAuipc,
io_decode_1_isOpImm,
io_decode_1_isWord,
io_decode_1_isSystem,
io_decode_1_writesRd,
io_decode_1_illegal,
output io_decodeReady,
io_flush,
output [63:0] io_redirectPc,
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
);
wire [63:0] _csr_io_rdata;
wire [63:0] _csr_io_satp;
wire [63:0] _csr_io_mtvec;
wire [63:0] _csr_io_mepc;
wire _lsu_io_reqReady;
wire _lsu_io_respValid;
wire [63:0] _lsu_io_respData;
wire _lsu_io_pageFault;
wire [3:0] _sq_io_enqIdx;
wire _sq_io_forwardValid;
wire _sq_io_drainValid;
wire [63:0] _sq_io_drain_addr;
wire [63:0] _sq_io_drain_data;
wire [2:0] _sq_io_drain_size;
wire [3:0] _lq_io_enqIdx;
wire _lq_io_violation;
wire _commit_io_commitReady_0;
wire _commit_io_commitReady_1;
wire _commit_io_freeOldPhys_0;
wire _commit_io_freeOldPhys_1;
wire [5:0] _commit_io_oldPhys_0;
wire [5:0] _commit_io_oldPhys_1;
wire _commit_io_commitMapValid_0;
wire _commit_io_commitMapValid_1;
wire [4:0] _commit_io_commitArch_0;
wire [4:0] _commit_io_commitArch_1;
wire [5:0] _commit_io_commitPhys_0;
wire [5:0] _commit_io_commitPhys_1;
wire _commit_io_flush;
wire [63:0] _commit_io_redirectPc;
wire _commit_io_exception;
wire [63:0] _commit_io_exceptionCause;
wire [63:0] _commit_io_badAddr;
wire _wb_1_io_wen;
wire [5:0] _wb_1_io_waddr;
wire [63:0] _wb_1_io_wdata;
wire _wb_0_io_wen;
wire [5:0] _wb_0_io_waddr;
wire [63:0] _wb_0_io_wdata;
wire _exec_1_io_outValid;
wire [63:0] _exec_1_io_result;
wire _exec_1_io_branchTaken;
wire _exec_0_io_outValid;
wire [63:0] _exec_0_io_result;
wire _exec_0_io_branchTaken;
wire [63:0] _prf_io_rdata_0;
wire [63:0] _prf_io_rdata_1;
wire [63:0] _prf_io_rdata_2;
wire [63:0] _prf_io_rdata_3;
wire _issue_io_inReady_0;
wire _issue_io_inReady_1;
wire _issue_io_outValid_0;
wire _issue_io_outValid_1;
wire [63:0] _issue_io_out_0_decoded_pc;
wire [31:0] _issue_io_out_0_decoded_inst;
wire [4:0] _issue_io_out_0_decoded_rs1;
wire [2:0] _issue_io_out_0_decoded_funct3;
wire [63:0] _issue_io_out_0_decoded_immI;
wire [63:0] _issue_io_out_0_decoded_immS;
wire [63:0] _issue_io_out_0_decoded_immB;
wire [63:0] _issue_io_out_0_decoded_immU;
wire [63:0] _issue_io_out_0_decoded_immJ;
wire [4:0] _issue_io_out_0_decoded_aluFn;
wire [2:0] _issue_io_out_0_decoded_memWidth;
wire _issue_io_out_0_decoded_isLoad;
wire _issue_io_out_0_decoded_isStore;
wire _issue_io_out_0_decoded_isBranch;
wire _issue_io_out_0_decoded_isJal;
wire _issue_io_out_0_decoded_isJalr;
wire _issue_io_out_0_decoded_isLui;
wire _issue_io_out_0_decoded_isAuipc;
wire _issue_io_out_0_decoded_isOpImm;
wire _issue_io_out_0_decoded_isWord;
wire _issue_io_out_0_decoded_isSystem;
wire _issue_io_out_0_decoded_writesRd;
wire _issue_io_out_0_decoded_illegal;
wire [5:0] _issue_io_out_0_prs1;
wire [5:0] _issue_io_out_0_prs2;
wire [5:0] _issue_io_out_0_prd;
wire [5:0] _issue_io_out_0_robIdx;
wire [63:0] _issue_io_out_1_decoded_pc;
wire [31:0] _issue_io_out_1_decoded_inst;
wire [4:0] _issue_io_out_1_decoded_rs1;
wire [2:0] _issue_io_out_1_decoded_funct3;
wire [63:0] _issue_io_out_1_decoded_immI;
wire [63:0] _issue_io_out_1_decoded_immS;
wire [63:0] _issue_io_out_1_decoded_immB;
wire [63:0] _issue_io_out_1_decoded_immU;
wire [63:0] _issue_io_out_1_decoded_immJ;
wire [4:0] _issue_io_out_1_decoded_aluFn;
wire [2:0] _issue_io_out_1_decoded_memWidth;
wire _issue_io_out_1_decoded_isLoad;
wire _issue_io_out_1_decoded_isStore;
wire _issue_io_out_1_decoded_isBranch;
wire _issue_io_out_1_decoded_isJal;
wire _issue_io_out_1_decoded_isJalr;
wire _issue_io_out_1_decoded_isLui;
wire _issue_io_out_1_decoded_isAuipc;
wire _issue_io_out_1_decoded_isOpImm;
wire _issue_io_out_1_decoded_isWord;
wire _issue_io_out_1_decoded_isSystem;
wire _issue_io_out_1_decoded_writesRd;
wire _issue_io_out_1_decoded_illegal;
wire [5:0] _issue_io_out_1_prs1;
wire [5:0] _issue_io_out_1_prs2;
wire [5:0] _issue_io_out_1_prd;
wire [5:0] _issue_io_out_1_robIdx;
wire _rename_io_outValid_0;
wire _rename_io_outValid_1;
wire [63:0] _rename_io_out_0_decoded_pc;
wire [31:0] _rename_io_out_0_decoded_inst;
wire [4:0] _rename_io_out_0_decoded_rs1;
wire [4:0] _rename_io_out_0_decoded_rs2;
wire [2:0] _rename_io_out_0_decoded_funct3;
wire [63:0] _rename_io_out_0_decoded_immI;
wire [63:0] _rename_io_out_0_decoded_immS;
wire [63:0] _rename_io_out_0_decoded_immB;
wire [63:0] _rename_io_out_0_decoded_immU;
wire [63:0] _rename_io_out_0_decoded_immJ;
wire [4:0] _rename_io_out_0_decoded_aluFn;
wire [2:0] _rename_io_out_0_decoded_memWidth;
wire _rename_io_out_0_decoded_isLoad;
wire _rename_io_out_0_decoded_isStore;
wire _rename_io_out_0_decoded_isBranch;
wire _rename_io_out_0_decoded_isJal;
wire _rename_io_out_0_decoded_isJalr;
wire _rename_io_out_0_decoded_isLui;
wire _rename_io_out_0_decoded_isAuipc;
wire _rename_io_out_0_decoded_isOpImm;
wire _rename_io_out_0_decoded_isWord;
wire _rename_io_out_0_decoded_isSystem;
wire _rename_io_out_0_decoded_writesRd;
wire _rename_io_out_0_decoded_illegal;
wire [5:0] _rename_io_out_0_prs1;
wire [5:0] _rename_io_out_0_prs2;
wire _rename_io_out_0_src1Ready;
wire _rename_io_out_0_src2Ready;
wire [5:0] _rename_io_out_0_prd;
wire [5:0] _rename_io_out_0_robIdx;
wire [63:0] _rename_io_out_1_decoded_pc;
wire [31:0] _rename_io_out_1_decoded_inst;
wire [4:0] _rename_io_out_1_decoded_rs1;
wire [4:0] _rename_io_out_1_decoded_rs2;
wire [2:0] _rename_io_out_1_decoded_funct3;
wire [63:0] _rename_io_out_1_decoded_immI;
wire [63:0] _rename_io_out_1_decoded_immS;
wire [63:0] _rename_io_out_1_decoded_immB;
wire [63:0] _rename_io_out_1_decoded_immU;
wire [63:0] _rename_io_out_1_decoded_immJ;
wire [4:0] _rename_io_out_1_decoded_aluFn;
wire [2:0] _rename_io_out_1_decoded_memWidth;
wire _rename_io_out_1_decoded_isLoad;
wire _rename_io_out_1_decoded_isStore;
wire _rename_io_out_1_decoded_isBranch;
wire _rename_io_out_1_decoded_isJal;
wire _rename_io_out_1_decoded_isJalr;
wire _rename_io_out_1_decoded_isLui;
wire _rename_io_out_1_decoded_isAuipc;
wire _rename_io_out_1_decoded_isOpImm;
wire _rename_io_out_1_decoded_isWord;
wire _rename_io_out_1_decoded_isSystem;
wire _rename_io_out_1_decoded_writesRd;
wire _rename_io_out_1_decoded_illegal;
wire [5:0] _rename_io_out_1_prs1;
wire [5:0] _rename_io_out_1_prs2;
wire _rename_io_out_1_src1Ready;
wire _rename_io_out_1_src2Ready;
wire [5:0] _rename_io_out_1_prd;
wire [5:0] _rename_io_out_1_robIdx;
wire _rename_io_canAccept;
wire _rename_io_commitValid_0;
wire _rename_io_commitValid_1;
wire [5:0] _rename_io_commitEntry_0_robIdx;
wire [4:0] _rename_io_commitEntry_0_archDest;
wire _rename_io_commitEntry_0_writesDest;
wire [3:0] _rename_io_commitEntry_0_opClass;
wire [5:0] _rename_io_commitEntry_0_dest;
wire [5:0] _rename_io_commitEntry_0_oldDest;
wire _rename_io_commitEntry_0_exception;
wire [63:0] _rename_io_commitEntry_0_exceptionCause;
wire [63:0] _rename_io_commitEntry_0_badAddr;
wire _rename_io_commitEntry_0_branchMispredict;
wire [63:0] _rename_io_commitEntry_0_redirectPc;
wire _rename_io_commitEntry_0_csrValid;
wire [11:0] _rename_io_commitEntry_0_csrAddr;
wire [2:0] _rename_io_commitEntry_0_csrCmd;
wire [63:0] _rename_io_commitEntry_0_csrRs1;
wire [4:0] _rename_io_commitEntry_0_csrZimm;
wire [5:0] _rename_io_commitEntry_1_robIdx;
wire [4:0] _rename_io_commitEntry_1_archDest;
wire _rename_io_commitEntry_1_writesDest;
wire [3:0] _rename_io_commitEntry_1_opClass;
wire [5:0] _rename_io_commitEntry_1_dest;
wire [5:0] _rename_io_commitEntry_1_oldDest;
wire _rename_io_commitEntry_1_exception;
wire [63:0] _rename_io_commitEntry_1_exceptionCause;
wire [63:0] _rename_io_commitEntry_1_badAddr;
wire _rename_io_commitEntry_1_branchMispredict;
wire [63:0] _rename_io_commitEntry_1_redirectPc;
wire _rename_io_commitEntry_1_csrValid;
wire [11:0] _rename_io_commitEntry_1_csrAddr;
wire [2:0] _rename_io_commitEntry_1_csrCmd;
wire [63:0] _rename_io_commitEntry_1_csrRs1;
wire [4:0] _rename_io_commitEntry_1_csrZimm;
reg wakeupReg_0_valid;
reg [5:0] wakeupReg_0_phys;
reg wakeupReg_1_valid;
reg [5:0] wakeupReg_1_phys;
reg loadPending;
reg [5:0] loadPendingRob;
reg [5:0] loadPendingPhys;
reg [3:0] loadPendingLq;
wire loadRespValid = _lsu_io_respValid & loadPending;
wire isMem0 = _issue_io_out_0_decoded_isLoad | _issue_io_out_0_decoded_isStore;
wire memIssue_0 = _issue_io_outValid_0 & isMem0;
wire isMem1 = _issue_io_out_1_decoded_isLoad | _issue_io_out_1_decoded_isStore;
wire csrReadReq_0 =
_issue_io_outValid_0 & _issue_io_out_0_decoded_isSystem
& (|_issue_io_out_0_decoded_funct3);
wire _memReady1_T_1 = _lsu_io_reqReady & ~loadPending;
wire issue_io_outReady_0 = ~isMem0 | _memReady1_T_1;
wire issue_io_outReady_1 =
(~isMem1 | _memReady1_T_1 & ~memIssue_0)
& ~(csrReadReq_0 & _issue_io_outValid_1 & _issue_io_out_1_decoded_isSystem
& (|_issue_io_out_1_decoded_funct3));
wire issueFire_0 = _issue_io_outValid_0 & issue_io_outReady_0;
wire issueFire_1 = _issue_io_outValid_1 & issue_io_outReady_1;
wire [2:0] sq_io_size =
memIssue_0 ? _issue_io_out_0_decoded_memWidth : _issue_io_out_1_decoded_memWidth;
wire _GEN =
memIssue_0 ? _issue_io_out_0_decoded_isStore : _issue_io_out_1_decoded_isStore;
wire [5:0] sq_io_enqRobIdx =
memIssue_0 ? _issue_io_out_0_robIdx : _issue_io_out_1_robIdx;
wire [63:0] _memAddr_T_1 =
(memIssue_0 ? _prf_io_rdata_0 : _prf_io_rdata_2)
+ (_GEN
? (memIssue_0 ? _issue_io_out_0_decoded_immS : _issue_io_out_1_decoded_immS)
: memIssue_0 ? _issue_io_out_0_decoded_immI : _issue_io_out_1_decoded_immI);
wire _storeEnq_T = memIssue_0 | ~memIssue_0 & _issue_io_outValid_1 & isMem1;
wire _GEN_0 = memIssue_0 ? issue_io_outReady_0 : issue_io_outReady_1;
wire loadEnq =
_storeEnq_T
& (memIssue_0 ? _issue_io_out_0_decoded_isLoad : _issue_io_out_1_decoded_isLoad)
& _GEN_0;
wire storeEnq = _storeEnq_T & _GEN & _GEN_0;
wire lsuLoadReq = loadEnq & ~_sq_io_forwardValid;
wire _commitCsr0_T = _commit_io_commitReady_0 & _rename_io_commitValid_0;
wire commitStore0 = _commitCsr0_T & _rename_io_commitEntry_0_opClass == 4'h4;
wire _commitCsr1_T = _commit_io_commitReady_1 & _rename_io_commitValid_1;
wire commitCsr0 = _commitCsr0_T & _rename_io_commitEntry_0_csrValid;
wire _completeMispredict_0_T =
_issue_io_out_0_decoded_isJal | _issue_io_out_0_decoded_isJalr;
wire [63:0] _branchRedirect_T_1 = _issue_io_out_0_decoded_pc + 64'h4;
wire [63:0] _jalrTarget_T = _prf_io_rdata_0 + _issue_io_out_0_decoded_immI;
wire _completeMispredict_0_T_2 =
_issue_io_out_0_decoded_isBranch & _exec_0_io_branchTaken;
wire isEcall = _issue_io_out_0_decoded_inst == 32'h73;
wire isEbreak = _issue_io_out_0_decoded_inst == 32'h100073;
wire isMret = _issue_io_out_0_decoded_inst == 32'h30200073;
wire _completeCause_0_T = loadRespValid & _lsu_io_pageFault;
wire _completeMispredict_1_T =
_issue_io_out_1_decoded_isJal | _issue_io_out_1_decoded_isJalr;
wire [63:0] _branchRedirect_T_6 = _issue_io_out_1_decoded_pc + 64'h4;
wire [63:0] _jalrTarget_T_3 = _prf_io_rdata_2 + _issue_io_out_1_decoded_immI;
wire _completeMispredict_1_T_2 =
_issue_io_out_1_decoded_isBranch & _exec_1_io_branchTaken;
wire isEcall_1 = _issue_io_out_1_decoded_inst == 32'h73;
wire isEbreak_1 = _issue_io_out_1_decoded_inst == 32'h100073;
wire isMret_1 = _issue_io_out_1_decoded_inst == 32'h30200073;
always @(posedge clock) begin
automatic logic _GEN_1;
_GEN_1 = loadEnq & ~_sq_io_forwardValid;
if (reset) begin
wakeupReg_0_valid <= 1'h0;
wakeupReg_0_phys <= 6'h0;
wakeupReg_1_valid <= 1'h0;
wakeupReg_1_phys <= 6'h0;
loadPending <= 1'h0;
end
else begin
wakeupReg_0_valid <= _wb_0_io_wen;
wakeupReg_0_phys <= _wb_0_io_waddr;
wakeupReg_1_valid <= _wb_1_io_wen;
wakeupReg_1_phys <= _wb_1_io_waddr;
loadPending <= ~_commit_io_flush & (_GEN_1 | ~loadRespValid & loadPending);
end
if (_commit_io_flush | ~_GEN_1) begin
end
else begin
loadPendingRob <= sq_io_enqRobIdx;
loadPendingPhys <= memIssue_0 ? _issue_io_out_0_prd : _issue_io_out_1_prd;
loadPendingLq <= _lq_io_enqIdx;
end
end // always @(posedge)
RenameStage rename (
.clock (clock),
.reset (reset),
.io_inValid_0 (io_decodeValid_0 & _issue_io_inReady_0),
.io_inValid_1 (io_decodeValid_1 & _issue_io_inReady_1),
.io_in_0_pc (io_decode_0_pc),
.io_in_0_inst (io_decode_0_inst),
.io_in_0_rs1 (io_decode_0_rs1),
.io_in_0_rs2 (io_decode_0_rs2),
.io_in_0_rd (io_decode_0_rd),
.io_in_0_funct3 (io_decode_0_funct3),
.io_in_0_immI (io_decode_0_immI),
.io_in_0_immS (io_decode_0_immS),
.io_in_0_immB (io_decode_0_immB),
.io_in_0_immU (io_decode_0_immU),
.io_in_0_immJ (io_decode_0_immJ),
.io_in_0_opClass (io_decode_0_opClass),
.io_in_0_aluFn (io_decode_0_aluFn),
.io_in_0_memWidth (io_decode_0_memWidth),
.io_in_0_isLoad (io_decode_0_isLoad),
.io_in_0_isStore (io_decode_0_isStore),
.io_in_0_isBranch (io_decode_0_isBranch),
.io_in_0_isJal (io_decode_0_isJal),
.io_in_0_isJalr (io_decode_0_isJalr),
.io_in_0_isLui (io_decode_0_isLui),
.io_in_0_isAuipc (io_decode_0_isAuipc),
.io_in_0_isOpImm (io_decode_0_isOpImm),
.io_in_0_isWord (io_decode_0_isWord),
.io_in_0_isSystem (io_decode_0_isSystem),
.io_in_0_writesRd (io_decode_0_writesRd),
.io_in_0_illegal (io_decode_0_illegal),
.io_in_1_pc (io_decode_1_pc),
.io_in_1_inst (io_decode_1_inst),
.io_in_1_rs1 (io_decode_1_rs1),
.io_in_1_rs2 (io_decode_1_rs2),
.io_in_1_rd (io_decode_1_rd),
.io_in_1_funct3 (io_decode_1_funct3),
.io_in_1_immI (io_decode_1_immI),
.io_in_1_immS (io_decode_1_immS),
.io_in_1_immB (io_decode_1_immB),
.io_in_1_immU (io_decode_1_immU),
.io_in_1_immJ (io_decode_1_immJ),
.io_in_1_opClass (io_decode_1_opClass),
.io_in_1_aluFn (io_decode_1_aluFn),
.io_in_1_memWidth (io_decode_1_memWidth),
.io_in_1_isLoad (io_decode_1_isLoad),
.io_in_1_isStore (io_decode_1_isStore),
.io_in_1_isBranch (io_decode_1_isBranch),
.io_in_1_isJal (io_decode_1_isJal),
.io_in_1_isJalr (io_decode_1_isJalr),
.io_in_1_isLui (io_decode_1_isLui),
.io_in_1_isAuipc (io_decode_1_isAuipc),
.io_in_1_isOpImm (io_decode_1_isOpImm),
.io_in_1_isWord (io_decode_1_isWord),
.io_in_1_isSystem (io_decode_1_isSystem),
.io_in_1_writesRd (io_decode_1_writesRd),
.io_in_1_illegal (io_decode_1_illegal),
.io_outValid_0 (_rename_io_outValid_0),
.io_outValid_1 (_rename_io_outValid_1),
.io_out_0_decoded_pc (_rename_io_out_0_decoded_pc),
.io_out_0_decoded_inst (_rename_io_out_0_decoded_inst),
.io_out_0_decoded_rs1 (_rename_io_out_0_decoded_rs1),
.io_out_0_decoded_rs2 (_rename_io_out_0_decoded_rs2),
.io_out_0_decoded_funct3 (_rename_io_out_0_decoded_funct3),
.io_out_0_decoded_immI (_rename_io_out_0_decoded_immI),
.io_out_0_decoded_immS (_rename_io_out_0_decoded_immS),
.io_out_0_decoded_immB (_rename_io_out_0_decoded_immB),
.io_out_0_decoded_immU (_rename_io_out_0_decoded_immU),
.io_out_0_decoded_immJ (_rename_io_out_0_decoded_immJ),
.io_out_0_decoded_aluFn (_rename_io_out_0_decoded_aluFn),
.io_out_0_decoded_memWidth (_rename_io_out_0_decoded_memWidth),
.io_out_0_decoded_isLoad (_rename_io_out_0_decoded_isLoad),
.io_out_0_decoded_isStore (_rename_io_out_0_decoded_isStore),
.io_out_0_decoded_isBranch (_rename_io_out_0_decoded_isBranch),
.io_out_0_decoded_isJal (_rename_io_out_0_decoded_isJal),
.io_out_0_decoded_isJalr (_rename_io_out_0_decoded_isJalr),
.io_out_0_decoded_isLui (_rename_io_out_0_decoded_isLui),
.io_out_0_decoded_isAuipc (_rename_io_out_0_decoded_isAuipc),
.io_out_0_decoded_isOpImm (_rename_io_out_0_decoded_isOpImm),
.io_out_0_decoded_isWord (_rename_io_out_0_decoded_isWord),
.io_out_0_decoded_isSystem (_rename_io_out_0_decoded_isSystem),
.io_out_0_decoded_writesRd (_rename_io_out_0_decoded_writesRd),
.io_out_0_decoded_illegal (_rename_io_out_0_decoded_illegal),
.io_out_0_prs1 (_rename_io_out_0_prs1),
.io_out_0_prs2 (_rename_io_out_0_prs2),
.io_out_0_src1Ready (_rename_io_out_0_src1Ready),
.io_out_0_src2Ready (_rename_io_out_0_src2Ready),
.io_out_0_prd (_rename_io_out_0_prd),
.io_out_0_robIdx (_rename_io_out_0_robIdx),
.io_out_1_decoded_pc (_rename_io_out_1_decoded_pc),
.io_out_1_decoded_inst (_rename_io_out_1_decoded_inst),
.io_out_1_decoded_rs1 (_rename_io_out_1_decoded_rs1),
.io_out_1_decoded_rs2 (_rename_io_out_1_decoded_rs2),
.io_out_1_decoded_funct3 (_rename_io_out_1_decoded_funct3),
.io_out_1_decoded_immI (_rename_io_out_1_decoded_immI),
.io_out_1_decoded_immS (_rename_io_out_1_decoded_immS),
.io_out_1_decoded_immB (_rename_io_out_1_decoded_immB),
.io_out_1_decoded_immU (_rename_io_out_1_decoded_immU),
.io_out_1_decoded_immJ (_rename_io_out_1_decoded_immJ),
.io_out_1_decoded_aluFn (_rename_io_out_1_decoded_aluFn),
.io_out_1_decoded_memWidth (_rename_io_out_1_decoded_memWidth),
.io_out_1_decoded_isLoad (_rename_io_out_1_decoded_isLoad),
.io_out_1_decoded_isStore (_rename_io_out_1_decoded_isStore),
.io_out_1_decoded_isBranch (_rename_io_out_1_decoded_isBranch),
.io_out_1_decoded_isJal (_rename_io_out_1_decoded_isJal),
.io_out_1_decoded_isJalr (_rename_io_out_1_decoded_isJalr),
.io_out_1_decoded_isLui (_rename_io_out_1_decoded_isLui),
.io_out_1_decoded_isAuipc (_rename_io_out_1_decoded_isAuipc),
.io_out_1_decoded_isOpImm (_rename_io_out_1_decoded_isOpImm),
.io_out_1_decoded_isWord (_rename_io_out_1_decoded_isWord),
.io_out_1_decoded_isSystem (_rename_io_out_1_decoded_isSystem),
.io_out_1_decoded_writesRd (_rename_io_out_1_decoded_writesRd),
.io_out_1_decoded_illegal (_rename_io_out_1_decoded_illegal),
.io_out_1_prs1 (_rename_io_out_1_prs1),
.io_out_1_prs2 (_rename_io_out_1_prs2),
.io_out_1_src1Ready (_rename_io_out_1_src1Ready),
.io_out_1_src2Ready (_rename_io_out_1_src2Ready),
.io_out_1_prd (_rename_io_out_1_prd),
.io_out_1_robIdx (_rename_io_out_1_robIdx),
.io_canAccept (_rename_io_canAccept),
.io_wbValid_0 (_wb_0_io_wen),
.io_wbValid_1 (_wb_1_io_wen),
.io_wbPhys_0 (_wb_0_io_waddr),
.io_wbPhys_1 (_wb_1_io_waddr),
.io_completeValid_0
(issueFire_0 & ~_issue_io_out_0_decoded_isLoad | loadRespValid),
.io_completeValid_1 (issueFire_1 & ~_issue_io_out_1_decoded_isLoad),
.io_completeIdx_0
(loadRespValid ? loadPendingRob : _issue_io_out_0_robIdx),
.io_completeIdx_1 (_issue_io_out_1_robIdx),
.io_completeException_0
(issueFire_0
& (_issue_io_out_0_decoded_illegal | isEcall | isEbreak | _lq_io_violation)
| _completeCause_0_T),
.io_completeException_1
(issueFire_1
& (_issue_io_out_1_decoded_illegal | isEcall_1 | isEbreak_1 | _lq_io_violation)),
.io_completeCause_0
({60'h0,
_completeCause_0_T
? 4'hD
: issueFire_0 & isEbreak
? 4'h3
: issueFire_0 & isEcall
? 4'hB
: {2'h0, issueFire_0 & _issue_io_out_0_decoded_illegal, 1'h0}}),
.io_completeCause_1
({60'h0,
issueFire_1 & isEbreak_1
? 4'h3
: issueFire_1 & isEcall_1
? 4'hB
: {2'h0, issueFire_1 & _issue_io_out_1_decoded_illegal, 1'h0}}),
.io_completeBadAddr_0 (_issue_io_out_0_decoded_pc),
.io_completeBadAddr_1 (_issue_io_out_1_decoded_pc),
.io_completeMispredict_0
(issueFire_0 & (_completeMispredict_0_T | isMret | _completeMispredict_0_T_2)),
.io_completeMispredict_1
(issueFire_1 & (_completeMispredict_1_T | isMret_1 | _completeMispredict_1_T_2)),
.io_completeRedirectPc_0
(isEcall | isEbreak
? _csr_io_mtvec
: isMret
? _csr_io_mepc
: _issue_io_out_0_decoded_isJal
? _issue_io_out_0_decoded_pc + _issue_io_out_0_decoded_immJ
: _issue_io_out_0_decoded_isJalr
? {_jalrTarget_T[63:1], 1'h0}
: _completeMispredict_0_T_2
? _issue_io_out_0_decoded_pc + _issue_io_out_0_decoded_immB
: _branchRedirect_T_1),
.io_completeRedirectPc_1
(isEcall_1 | isEbreak_1
? _csr_io_mtvec
: isMret_1
? _csr_io_mepc
: _issue_io_out_1_decoded_isJal
? _issue_io_out_1_decoded_pc + _issue_io_out_1_decoded_immJ
: _issue_io_out_1_decoded_isJalr
? {_jalrTarget_T_3[63:1], 1'h0}
: _completeMispredict_1_T_2
? _issue_io_out_1_decoded_pc + _issue_io_out_1_decoded_immB
: _branchRedirect_T_6),
.io_completeCsrValid_0
(issueFire_0 & _issue_io_out_0_decoded_isSystem & (|_issue_io_out_0_decoded_funct3)
& ~(_issue_io_out_0_decoded_funct3[1] & _issue_io_out_0_decoded_rs1 == 5'h0)),
.io_completeCsrValid_1
(issueFire_1 & _issue_io_out_1_decoded_isSystem & (|_issue_io_out_1_decoded_funct3)
& ~(_issue_io_out_1_decoded_funct3[1] & _issue_io_out_1_decoded_rs1 == 5'h0)),
.io_completeCsrAddr_0 (_issue_io_out_0_decoded_inst[31:20]),
.io_completeCsrAddr_1 (_issue_io_out_1_decoded_inst[31:20]),
.io_completeCsrCmd_0 (_issue_io_out_0_decoded_funct3),
.io_completeCsrCmd_1 (_issue_io_out_1_decoded_funct3),
.io_completeCsrRs1_0 (_prf_io_rdata_0),
.io_completeCsrRs1_1 (_prf_io_rdata_2),
.io_completeCsrZimm_0 (_issue_io_out_0_decoded_rs1),
.io_completeCsrZimm_1 (_issue_io_out_1_decoded_rs1),
.io_commitReady_0 (_commit_io_commitReady_0),
.io_commitReady_1 (_commit_io_commitReady_1),
.io_commitValid_0 (_rename_io_commitValid_0),
.io_commitValid_1 (_rename_io_commitValid_1),
.io_commitEntry_0_robIdx (_rename_io_commitEntry_0_robIdx),
.io_commitEntry_0_archDest (_rename_io_commitEntry_0_archDest),
.io_commitEntry_0_writesDest (_rename_io_commitEntry_0_writesDest),
.io_commitEntry_0_opClass (_rename_io_commitEntry_0_opClass),
.io_commitEntry_0_dest (_rename_io_commitEntry_0_dest),
.io_commitEntry_0_oldDest (_rename_io_commitEntry_0_oldDest),
.io_commitEntry_0_exception (_rename_io_commitEntry_0_exception),
.io_commitEntry_0_exceptionCause (_rename_io_commitEntry_0_exceptionCause),
.io_commitEntry_0_badAddr (_rename_io_commitEntry_0_badAddr),
.io_commitEntry_0_branchMispredict (_rename_io_commitEntry_0_branchMispredict),
.io_commitEntry_0_redirectPc (_rename_io_commitEntry_0_redirectPc),
.io_commitEntry_0_csrValid (_rename_io_commitEntry_0_csrValid),
.io_commitEntry_0_csrAddr (_rename_io_commitEntry_0_csrAddr),
.io_commitEntry_0_csrCmd (_rename_io_commitEntry_0_csrCmd),
.io_commitEntry_0_csrRs1 (_rename_io_commitEntry_0_csrRs1),
.io_commitEntry_0_csrZimm (_rename_io_commitEntry_0_csrZimm),
.io_commitEntry_1_robIdx (_rename_io_commitEntry_1_robIdx),
.io_commitEntry_1_archDest (_rename_io_commitEntry_1_archDest),
.io_commitEntry_1_writesDest (_rename_io_commitEntry_1_writesDest),
.io_commitEntry_1_opClass (_rename_io_commitEntry_1_opClass),
.io_commitEntry_1_dest (_rename_io_commitEntry_1_dest),
.io_commitEntry_1_oldDest (_rename_io_commitEntry_1_oldDest),
.io_commitEntry_1_exception (_rename_io_commitEntry_1_exception),
.io_commitEntry_1_exceptionCause (_rename_io_commitEntry_1_exceptionCause),
.io_commitEntry_1_badAddr (_rename_io_commitEntry_1_badAddr),
.io_commitEntry_1_branchMispredict (_rename_io_commitEntry_1_branchMispredict),
.io_commitEntry_1_redirectPc (_rename_io_commitEntry_1_redirectPc),
.io_commitEntry_1_csrValid (_rename_io_commitEntry_1_csrValid),
.io_commitEntry_1_csrAddr (_rename_io_commitEntry_1_csrAddr),
.io_commitEntry_1_csrCmd (_rename_io_commitEntry_1_csrCmd),
.io_commitEntry_1_csrRs1 (_rename_io_commitEntry_1_csrRs1),
.io_commitEntry_1_csrZimm (_rename_io_commitEntry_1_csrZimm),
.io_commitMapValid_0 (_commit_io_commitMapValid_0),
.io_commitMapValid_1 (_commit_io_commitMapValid_1),
.io_commitArch_0 (_commit_io_commitArch_0),
.io_commitArch_1 (_commit_io_commitArch_1),
.io_commitPhys_0 (_commit_io_commitPhys_0),
.io_commitPhys_1 (_commit_io_commitPhys_1),
.io_commitFreeOld_0 (_commit_io_freeOldPhys_0),
.io_commitFreeOld_1 (_commit_io_freeOldPhys_1),
.io_commitOldPhys_0 (_commit_io_oldPhys_0),
.io_commitOldPhys_1 (_commit_io_oldPhys_1),
.io_flush (_commit_io_flush)
);
IssueStage issue (
.clock (clock),
.reset (reset),
.io_inValid_0 (_rename_io_outValid_0),
.io_inValid_1 (_rename_io_outValid_1),
.io_in_0_decoded_pc (_rename_io_out_0_decoded_pc),
.io_in_0_decoded_inst (_rename_io_out_0_decoded_inst),
.io_in_0_decoded_rs1 (_rename_io_out_0_decoded_rs1),
.io_in_0_decoded_rs2 (_rename_io_out_0_decoded_rs2),
.io_in_0_decoded_funct3 (_rename_io_out_0_decoded_funct3),
.io_in_0_decoded_immI (_rename_io_out_0_decoded_immI),
.io_in_0_decoded_immS (_rename_io_out_0_decoded_immS),
.io_in_0_decoded_immB (_rename_io_out_0_decoded_immB),
.io_in_0_decoded_immU (_rename_io_out_0_decoded_immU),
.io_in_0_decoded_immJ (_rename_io_out_0_decoded_immJ),
.io_in_0_decoded_aluFn (_rename_io_out_0_decoded_aluFn),
.io_in_0_decoded_memWidth (_rename_io_out_0_decoded_memWidth),
.io_in_0_decoded_isLoad (_rename_io_out_0_decoded_isLoad),
.io_in_0_decoded_isStore (_rename_io_out_0_decoded_isStore),
.io_in_0_decoded_isBranch (_rename_io_out_0_decoded_isBranch),
.io_in_0_decoded_isJal (_rename_io_out_0_decoded_isJal),
.io_in_0_decoded_isJalr (_rename_io_out_0_decoded_isJalr),
.io_in_0_decoded_isLui (_rename_io_out_0_decoded_isLui),
.io_in_0_decoded_isAuipc (_rename_io_out_0_decoded_isAuipc),
.io_in_0_decoded_isOpImm (_rename_io_out_0_decoded_isOpImm),
.io_in_0_decoded_isWord (_rename_io_out_0_decoded_isWord),
.io_in_0_decoded_isSystem (_rename_io_out_0_decoded_isSystem),
.io_in_0_decoded_writesRd (_rename_io_out_0_decoded_writesRd),
.io_in_0_decoded_illegal (_rename_io_out_0_decoded_illegal),
.io_in_0_prs1 (_rename_io_out_0_prs1),
.io_in_0_prs2 (_rename_io_out_0_prs2),
.io_in_0_src1Ready (_rename_io_out_0_src1Ready),
.io_in_0_src2Ready (_rename_io_out_0_src2Ready),
.io_in_0_prd (_rename_io_out_0_prd),
.io_in_0_robIdx (_rename_io_out_0_robIdx),
.io_in_1_decoded_pc (_rename_io_out_1_decoded_pc),
.io_in_1_decoded_inst (_rename_io_out_1_decoded_inst),
.io_in_1_decoded_rs1 (_rename_io_out_1_decoded_rs1),
.io_in_1_decoded_rs2 (_rename_io_out_1_decoded_rs2),
.io_in_1_decoded_funct3 (_rename_io_out_1_decoded_funct3),
.io_in_1_decoded_immI (_rename_io_out_1_decoded_immI),
.io_in_1_decoded_immS (_rename_io_out_1_decoded_immS),
.io_in_1_decoded_immB (_rename_io_out_1_decoded_immB),
.io_in_1_decoded_immU (_rename_io_out_1_decoded_immU),
.io_in_1_decoded_immJ (_rename_io_out_1_decoded_immJ),
.io_in_1_decoded_aluFn (_rename_io_out_1_decoded_aluFn),
.io_in_1_decoded_memWidth (_rename_io_out_1_decoded_memWidth),
.io_in_1_decoded_isLoad (_rename_io_out_1_decoded_isLoad),
.io_in_1_decoded_isStore (_rename_io_out_1_decoded_isStore),
.io_in_1_decoded_isBranch (_rename_io_out_1_decoded_isBranch),
.io_in_1_decoded_isJal (_rename_io_out_1_decoded_isJal),
.io_in_1_decoded_isJalr (_rename_io_out_1_decoded_isJalr),
.io_in_1_decoded_isLui (_rename_io_out_1_decoded_isLui),
.io_in_1_decoded_isAuipc (_rename_io_out_1_decoded_isAuipc),
.io_in_1_decoded_isOpImm (_rename_io_out_1_decoded_isOpImm),
.io_in_1_decoded_isWord (_rename_io_out_1_decoded_isWord),
.io_in_1_decoded_isSystem (_rename_io_out_1_decoded_isSystem),
.io_in_1_decoded_writesRd (_rename_io_out_1_decoded_writesRd),
.io_in_1_decoded_illegal (_rename_io_out_1_decoded_illegal),
.io_in_1_prs1 (_rename_io_out_1_prs1),
.io_in_1_prs2 (_rename_io_out_1_prs2),
.io_in_1_src1Ready (_rename_io_out_1_src1Ready),
.io_in_1_src2Ready (_rename_io_out_1_src2Ready),
.io_in_1_prd (_rename_io_out_1_prd),
.io_in_1_robIdx (_rename_io_out_1_robIdx),
.io_inReady_0 (_issue_io_inReady_0),
.io_inReady_1 (_issue_io_inReady_1),
.io_wakeup_0_valid (wakeupReg_0_valid),
.io_wakeup_0_phys (wakeupReg_0_phys),
.io_wakeup_1_valid (wakeupReg_1_valid),
.io_wakeup_1_phys (wakeupReg_1_phys),
.io_outValid_0 (_issue_io_outValid_0),
.io_outValid_1 (_issue_io_outValid_1),
.io_out_0_decoded_pc (_issue_io_out_0_decoded_pc),
.io_out_0_decoded_inst (_issue_io_out_0_decoded_inst),
.io_out_0_decoded_rs1 (_issue_io_out_0_decoded_rs1),
.io_out_0_decoded_funct3 (_issue_io_out_0_decoded_funct3),
.io_out_0_decoded_immI (_issue_io_out_0_decoded_immI),
.io_out_0_decoded_immS (_issue_io_out_0_decoded_immS),
.io_out_0_decoded_immB (_issue_io_out_0_decoded_immB),
.io_out_0_decoded_immU (_issue_io_out_0_decoded_immU),
.io_out_0_decoded_immJ (_issue_io_out_0_decoded_immJ),
.io_out_0_decoded_aluFn (_issue_io_out_0_decoded_aluFn),
.io_out_0_decoded_memWidth (_issue_io_out_0_decoded_memWidth),
.io_out_0_decoded_isLoad (_issue_io_out_0_decoded_isLoad),
.io_out_0_decoded_isStore (_issue_io_out_0_decoded_isStore),
.io_out_0_decoded_isBranch (_issue_io_out_0_decoded_isBranch),
.io_out_0_decoded_isJal (_issue_io_out_0_decoded_isJal),
.io_out_0_decoded_isJalr (_issue_io_out_0_decoded_isJalr),
.io_out_0_decoded_isLui (_issue_io_out_0_decoded_isLui),
.io_out_0_decoded_isAuipc (_issue_io_out_0_decoded_isAuipc),
.io_out_0_decoded_isOpImm (_issue_io_out_0_decoded_isOpImm),
.io_out_0_decoded_isWord (_issue_io_out_0_decoded_isWord),
.io_out_0_decoded_isSystem (_issue_io_out_0_decoded_isSystem),
.io_out_0_decoded_writesRd (_issue_io_out_0_decoded_writesRd),
.io_out_0_decoded_illegal (_issue_io_out_0_decoded_illegal),
.io_out_0_prs1 (_issue_io_out_0_prs1),
.io_out_0_prs2 (_issue_io_out_0_prs2),
.io_out_0_prd (_issue_io_out_0_prd),
.io_out_0_robIdx (_issue_io_out_0_robIdx),
.io_out_1_decoded_pc (_issue_io_out_1_decoded_pc),
.io_out_1_decoded_inst (_issue_io_out_1_decoded_inst),
.io_out_1_decoded_rs1 (_issue_io_out_1_decoded_rs1),
.io_out_1_decoded_funct3 (_issue_io_out_1_decoded_funct3),
.io_out_1_decoded_immI (_issue_io_out_1_decoded_immI),
.io_out_1_decoded_immS (_issue_io_out_1_decoded_immS),
.io_out_1_decoded_immB (_issue_io_out_1_decoded_immB),
.io_out_1_decoded_immU (_issue_io_out_1_decoded_immU),
.io_out_1_decoded_immJ (_issue_io_out_1_decoded_immJ),
.io_out_1_decoded_aluFn (_issue_io_out_1_decoded_aluFn),
.io_out_1_decoded_memWidth (_issue_io_out_1_decoded_memWidth),
.io_out_1_decoded_isLoad (_issue_io_out_1_decoded_isLoad),
.io_out_1_decoded_isStore (_issue_io_out_1_decoded_isStore),
.io_out_1_decoded_isBranch (_issue_io_out_1_decoded_isBranch),
.io_out_1_decoded_isJal (_issue_io_out_1_decoded_isJal),
.io_out_1_decoded_isJalr (_issue_io_out_1_decoded_isJalr),
.io_out_1_decoded_isLui (_issue_io_out_1_decoded_isLui),
.io_out_1_decoded_isAuipc (_issue_io_out_1_decoded_isAuipc),
.io_out_1_decoded_isOpImm (_issue_io_out_1_decoded_isOpImm),
.io_out_1_decoded_isWord (_issue_io_out_1_decoded_isWord),
.io_out_1_decoded_isSystem (_issue_io_out_1_decoded_isSystem),
.io_out_1_decoded_writesRd (_issue_io_out_1_decoded_writesRd),
.io_out_1_decoded_illegal (_issue_io_out_1_decoded_illegal),
.io_out_1_prs1 (_issue_io_out_1_prs1),
.io_out_1_prs2 (_issue_io_out_1_prs2),
.io_out_1_prd (_issue_io_out_1_prd),
.io_out_1_robIdx (_issue_io_out_1_robIdx),
.io_outReady_0 (issue_io_outReady_0),
.io_outReady_1 (issue_io_outReady_1),
.io_flush (_commit_io_flush)
);
PhysicalRegFile prf (
.clock (clock),
.reset (reset),
.io_raddr_0 (_issue_io_out_0_prs1),
.io_raddr_1 (_issue_io_out_0_prs2),
.io_raddr_2 (_issue_io_out_1_prs1),
.io_raddr_3 (_issue_io_out_1_prs2),
.io_rdata_0 (_prf_io_rdata_0),
.io_rdata_1 (_prf_io_rdata_1),
.io_rdata_2 (_prf_io_rdata_2),
.io_rdata_3 (_prf_io_rdata_3),
.io_wen_0 (_wb_0_io_wen),
.io_wen_1 (_wb_1_io_wen),
.io_waddr_0 (_wb_0_io_waddr),
.io_waddr_1 (_wb_1_io_waddr),
.io_wdata_0 (_wb_0_io_wdata),
.io_wdata_1 (_wb_1_io_wdata)
);
ExecStage exec_0 (
.io_inValid (issueFire_0),
.io_in_funct3 (_issue_io_out_0_decoded_funct3),
.io_in_aluFn (_issue_io_out_0_decoded_aluFn),
.io_in_isWord (_issue_io_out_0_decoded_isWord),
.io_src1 (_prf_io_rdata_0),
.io_src2
(_issue_io_out_0_decoded_isOpImm | _issue_io_out_0_decoded_isLoad
| _issue_io_out_0_decoded_isJalr
? _issue_io_out_0_decoded_immI
: _prf_io_rdata_1),
.io_outValid (_exec_0_io_outValid),
.io_result (_exec_0_io_result),
.io_branchTaken (_exec_0_io_branchTaken)
);
ExecStage exec_1 (
.io_inValid (issueFire_1),
.io_in_funct3 (_issue_io_out_1_decoded_funct3),
.io_in_aluFn (_issue_io_out_1_decoded_aluFn),
.io_in_isWord (_issue_io_out_1_decoded_isWord),
.io_src1 (_prf_io_rdata_2),
.io_src2
(_issue_io_out_1_decoded_isOpImm | _issue_io_out_1_decoded_isLoad
| _issue_io_out_1_decoded_isJalr
? _issue_io_out_1_decoded_immI
: _prf_io_rdata_3),
.io_outValid (_exec_1_io_outValid),
.io_result (_exec_1_io_result),
.io_branchTaken (_exec_1_io_branchTaken)
);
WriteBackStage wb_0 (
.io_valid
(_exec_0_io_outValid & _issue_io_out_0_decoded_writesRd
& ~_issue_io_out_0_decoded_isLoad | loadRespValid),
.io_physDest (loadRespValid ? loadPendingPhys : _issue_io_out_0_prd),
.io_data
(loadRespValid
? _lsu_io_respData
: _issue_io_out_0_decoded_isLui
? _issue_io_out_0_decoded_immU
: _issue_io_out_0_decoded_isAuipc
? _issue_io_out_0_decoded_pc + _issue_io_out_0_decoded_immU
: _completeMispredict_0_T
? _branchRedirect_T_1
: _issue_io_out_0_decoded_isSystem
& (|_issue_io_out_0_decoded_funct3)
? _csr_io_rdata
: _exec_0_io_result),
.io_wen (_wb_0_io_wen),
.io_waddr (_wb_0_io_waddr),
.io_wdata (_wb_0_io_wdata)
);
WriteBackStage wb_1 (
.io_valid
(_exec_1_io_outValid & _issue_io_out_1_decoded_writesRd
& ~_issue_io_out_1_decoded_isLoad),
.io_physDest (_issue_io_out_1_prd),
.io_data
(_issue_io_out_1_decoded_isLui
? _issue_io_out_1_decoded_immU
: _issue_io_out_1_decoded_isAuipc
? _issue_io_out_1_decoded_pc + _issue_io_out_1_decoded_immU
: _completeMispredict_1_T
? _branchRedirect_T_6
: _issue_io_out_1_decoded_isSystem & (|_issue_io_out_1_decoded_funct3)
? _csr_io_rdata
: _exec_1_io_result),
.io_wen (_wb_1_io_wen),
.io_waddr (_wb_1_io_waddr),
.io_wdata (_wb_1_io_wdata)
);
CommitStage commit (
.io_robValid_0 (_rename_io_commitValid_0),
.io_robValid_1 (_rename_io_commitValid_1),
.io_robEntry_0_archDest (_rename_io_commitEntry_0_archDest),
.io_robEntry_0_writesDest (_rename_io_commitEntry_0_writesDest),
.io_robEntry_0_opClass (_rename_io_commitEntry_0_opClass),
.io_robEntry_0_dest (_rename_io_commitEntry_0_dest),
.io_robEntry_0_oldDest (_rename_io_commitEntry_0_oldDest),
.io_robEntry_0_exception (_rename_io_commitEntry_0_exception),
.io_robEntry_0_exceptionCause (_rename_io_commitEntry_0_exceptionCause),
.io_robEntry_0_badAddr (_rename_io_commitEntry_0_badAddr),
.io_robEntry_0_branchMispredict (_rename_io_commitEntry_0_branchMispredict),
.io_robEntry_0_redirectPc (_rename_io_commitEntry_0_redirectPc),
.io_robEntry_0_csrValid (_rename_io_commitEntry_0_csrValid),
.io_robEntry_1_archDest (_rename_io_commitEntry_1_archDest),
.io_robEntry_1_writesDest (_rename_io_commitEntry_1_writesDest),
.io_robEntry_1_dest (_rename_io_commitEntry_1_dest),
.io_robEntry_1_oldDest (_rename_io_commitEntry_1_oldDest),
.io_robEntry_1_exception (_rename_io_commitEntry_1_exception),
.io_robEntry_1_exceptionCause (_rename_io_commitEntry_1_exceptionCause),
.io_robEntry_1_badAddr (_rename_io_commitEntry_1_badAddr),
.io_robEntry_1_branchMispredict (_rename_io_commitEntry_1_branchMispredict),
.io_robEntry_1_redirectPc (_rename_io_commitEntry_1_redirectPc),
.io_robEntry_1_csrValid (_rename_io_commitEntry_1_csrValid),
.io_commitReady_0 (_commit_io_commitReady_0),
.io_commitReady_1 (_commit_io_commitReady_1),
.io_freeOldPhys_0 (_commit_io_freeOldPhys_0),
.io_freeOldPhys_1 (_commit_io_freeOldPhys_1),
.io_oldPhys_0 (_commit_io_oldPhys_0),
.io_oldPhys_1 (_commit_io_oldPhys_1),
.io_commitMapValid_0 (_commit_io_commitMapValid_0),
.io_commitMapValid_1 (_commit_io_commitMapValid_1),
.io_commitArch_0 (_commit_io_commitArch_0),
.io_commitArch_1 (_commit_io_commitArch_1),
.io_commitPhys_0 (_commit_io_commitPhys_0),
.io_commitPhys_1 (_commit_io_commitPhys_1),
.io_flush (_commit_io_flush),
.io_redirectPc (_commit_io_redirectPc),
.io_exception (_commit_io_exception),
.io_exceptionCause (_commit_io_exceptionCause),
.io_badAddr (_commit_io_badAddr)
);
LoadQueue lq (
.clock (clock),
.reset (reset),
.io_enqValid (loadEnq),
.io_enqRobIdx (sq_io_enqRobIdx),
.io_enqIdx (_lq_io_enqIdx),
.io_addrValid (loadEnq),
.io_addrIdx (_lq_io_enqIdx),
.io_addr (_memAddr_T_1),
.io_size (sq_io_size),
.io_complete (loadRespValid),
.io_completeIdx (loadPendingLq),
.io_storeAddrValid (storeEnq),
.io_storeRobIdx (sq_io_enqRobIdx),
.io_storeAddr (_memAddr_T_1),
.io_storeSize (sq_io_size),
.io_violation (_lq_io_violation),
.io_flush (_commit_io_flush)
);
StoreQueue sq (
.clock (clock),
.reset (reset),
.io_enqValid (storeEnq),
.io_enqRobIdx (sq_io_enqRobIdx),
.io_enqIdx (_sq_io_enqIdx),
.io_writeAddr (storeEnq),
.io_writeData (storeEnq),
.io_writeIdx (_sq_io_enqIdx),
.io_addr (_memAddr_T_1),
.io_data (memIssue_0 ? _prf_io_rdata_1 : _prf_io_rdata_3),
.io_size (sq_io_size),
.io_loadAddr (_memAddr_T_1),
.io_loadRobIdx (sq_io_enqRobIdx),
.io_forwardValid (_sq_io_forwardValid),
.io_commitValid
(commitStore0 | _commitCsr1_T & _rename_io_commitEntry_1_opClass == 4'h4),
.io_commitRobIdx
(commitStore0 ? _rename_io_commitEntry_0_robIdx : _rename_io_commitEntry_1_robIdx),
.io_drainValid (_sq_io_drainValid),
.io_drain_addr (_sq_io_drain_addr),
.io_drain_data (_sq_io_drain_data),
.io_drain_size (_sq_io_drain_size),
.io_drainReady (~lsuLoadReq & _lsu_io_reqReady),
.io_flush (_commit_io_flush)
);
LSU lsu (
.clock (clock),
.reset (reset),
.io_reqValid (lsuLoadReq | _sq_io_drainValid),
.io_req_addr
(lsuLoadReq ? _memAddr_T_1 : _sq_io_drainValid ? _sq_io_drain_addr : 64'h0),
.io_req_data (lsuLoadReq | ~_sq_io_drainValid ? 64'h0 : _sq_io_drain_data),
.io_req_isStore (~lsuLoadReq & _sq_io_drainValid),
.io_req_size
(lsuLoadReq ? sq_io_size : _sq_io_drainValid ? _sq_io_drain_size : 3'h0),
.io_reqReady (_lsu_io_reqReady),
.io_satp (_csr_io_satp),
.io_dmemReqValid (io_dmemReqValid),
.io_dmemReq_addr (io_dmemReq_addr),
.io_dmemReq_data (io_dmemReq_data),
.io_dmemReq_isStore (io_dmemReq_isStore),
.io_dmemReq_size (io_dmemReq_size),
.io_dmemRespValid (io_dmemRespValid),
.io_dmemRespData (io_dmemRespData),
.io_respValid (_lsu_io_respValid),
.io_respData (_lsu_io_respData),
.io_pageFault (_lsu_io_pageFault)
);
CSRFile csr (
.clock (clock),
.reset (reset),
.io_cmd_valid (commitCsr0 | _commitCsr1_T & _rename_io_commitEntry_1_csrValid),
.io_cmd_addr
(commitCsr0 ? _rename_io_commitEntry_0_csrAddr : _rename_io_commitEntry_1_csrAddr),
.io_cmd_cmd
(commitCsr0 ? _rename_io_commitEntry_0_csrCmd : _rename_io_commitEntry_1_csrCmd),
.io_cmd_rs1
(commitCsr0 ? _rename_io_commitEntry_0_csrRs1 : _rename_io_commitEntry_1_csrRs1),
.io_cmd_zimm
(commitCsr0 ? _rename_io_commitEntry_0_csrZimm : _rename_io_commitEntry_1_csrZimm),
.io_readAddr
(csrReadReq_0 & issue_io_outReady_0
? _issue_io_out_0_decoded_inst[31:20]
: _issue_io_out_1_decoded_inst[31:20]),
.io_rdata (_csr_io_rdata),
.io_trap (_commit_io_flush & _commit_io_exception),
.io_trapPc (_commit_io_badAddr),
.io_trapCause (_commit_io_exceptionCause),
.io_satp (_csr_io_satp),
.io_mtvec (_csr_io_mtvec),
.io_mepc (_csr_io_mepc)
);
assign io_decodeReady =
_rename_io_canAccept & (&{_issue_io_inReady_1, _issue_io_inReady_0});
assign io_flush = _commit_io_flush;
assign io_redirectPc = _commit_io_exception ? _csr_io_mtvec : _commit_io_redirectPc;
endmodule

View File

@@ -0,0 +1,102 @@
// Generated by CIRCT firtool-1.139.0
module PageTableWalker(
input clock,
reset,
io_reqValid,
input [26:0] io_reqVpn,
input io_isStore,
input [63:0] io_satp,
output io_memReq_valid,
output [63:0] io_memReq_addr,
input io_memResp_valid,
input [63:0] io_memResp_data,
output io_respValid,
io_refill_valid,
output [26:0] io_refill_vpn,
output [43:0] io_refill_ppn,
output [7:0] io_refill_flags,
output io_pageFault
);
reg [2:0] state;
reg [26:0] vpnReg;
reg isStoreReg;
reg walkFault;
reg [43:0] nextPpn;
wire _io_memReq_addr_T = state == 3'h1;
wire _io_memReq_addr_T_1 = state == 3'h2;
reg [43:0] curPpn;
wire _io_memReq_valid_T_3 = state == 3'h3;
wire io_respValid_0 = state == 3'h4;
always @(posedge clock) begin
automatic logic pteIsLeaf;
automatic logic invalidPte;
automatic logic _GEN;
automatic logic _GEN_0;
automatic logic _GEN_1;
automatic logic _GEN_2;
pteIsLeaf = io_memResp_data[1] | io_memResp_data[3];
invalidPte = ~(io_memResp_data[0]) | ~(io_memResp_data[1]) & io_memResp_data[2];
_GEN = state == 3'h0;
_GEN_0 = _io_memReq_addr_T | _io_memReq_addr_T_1;
_GEN_1 = (_GEN_0 | _io_memReq_valid_T_3) & io_memResp_valid;
_GEN_2 = invalidPte | pteIsLeaf;
if (reset) begin
state <= 3'h0;
walkFault <= 1'h0;
end
else begin
if (_GEN) begin
if (io_reqValid)
state <= 3'h1;
end
else if (_GEN_1)
state <=
_GEN_2 ? 3'h4 : _io_memReq_addr_T ? 3'h2 : _io_memReq_addr_T_1 ? 3'h3 : 3'h4;
else if (io_respValid_0)
state <= 3'h0;
walkFault <=
~_GEN
& (_GEN_1
? invalidPte
| (pteIsLeaf
? (isStoreReg
? ~(io_memResp_data[2]) | ~(io_memResp_data[7])
: ~(io_memResp_data[1])) | ~(io_memResp_data[6]) | walkFault
: ~_GEN_0 | walkFault)
: walkFault);
end
if (_GEN & io_reqValid) begin
vpnReg <= io_reqVpn;
isStoreReg <= io_isStore;
end
if (_GEN | ~_GEN_1 | invalidPte | ~pteIsLeaf) begin
end
else begin
automatic logic [1:0] level =
_io_memReq_addr_T ? 2'h2 : {1'h0, _io_memReq_addr_T_1};
nextPpn <=
{io_memResp_data[53:28],
level[1] ? vpnReg[17:9] : io_memResp_data[27:19],
level == 2'h0 ? io_memResp_data[18:10] : vpnReg[8:0]};
end
if (_GEN | ~_GEN_1 | _GEN_2) begin
end
else
curPpn <= io_memResp_data[53:10];
end // always @(posedge)
assign io_memReq_valid = _io_memReq_addr_T | _io_memReq_addr_T_1 | _io_memReq_valid_T_3;
assign io_memReq_addr =
{8'h0,
_io_memReq_addr_T
? {io_satp[43:0], vpnReg[26:18]}
: {curPpn, _io_memReq_addr_T_1 ? vpnReg[17:9] : vpnReg[8:0]},
3'h0};
assign io_respValid = io_respValid_0;
assign io_refill_valid = io_respValid_0 & ~walkFault;
assign io_refill_vpn = vpnReg;
assign io_refill_ppn = nextPpn;
assign io_refill_flags = io_memResp_data[7:0];
assign io_pageFault = walkFault;
endmodule

View File

@@ -0,0 +1,484 @@
// Generated by CIRCT firtool-1.139.0
module PhysicalRegFile(
input clock,
reset,
input [5:0] io_raddr_0,
io_raddr_1,
io_raddr_2,
io_raddr_3,
output [63:0] io_rdata_0,
io_rdata_1,
io_rdata_2,
io_rdata_3,
input io_wen_0,
io_wen_1,
input [5:0] io_waddr_0,
io_waddr_1,
input [63:0] io_wdata_0,
io_wdata_1
);
reg [63:0] regs_0;
reg [63:0] regs_1;
reg [63:0] regs_2;
reg [63:0] regs_3;
reg [63:0] regs_4;
reg [63:0] regs_5;
reg [63:0] regs_6;
reg [63:0] regs_7;
reg [63:0] regs_8;
reg [63:0] regs_9;
reg [63:0] regs_10;
reg [63:0] regs_11;
reg [63:0] regs_12;
reg [63:0] regs_13;
reg [63:0] regs_14;
reg [63:0] regs_15;
reg [63:0] regs_16;
reg [63:0] regs_17;
reg [63:0] regs_18;
reg [63:0] regs_19;
reg [63:0] regs_20;
reg [63:0] regs_21;
reg [63:0] regs_22;
reg [63:0] regs_23;
reg [63:0] regs_24;
reg [63:0] regs_25;
reg [63:0] regs_26;
reg [63:0] regs_27;
reg [63:0] regs_28;
reg [63:0] regs_29;
reg [63:0] regs_30;
reg [63:0] regs_31;
reg [63:0] regs_32;
reg [63:0] regs_33;
reg [63:0] regs_34;
reg [63:0] regs_35;
reg [63:0] regs_36;
reg [63:0] regs_37;
reg [63:0] regs_38;
reg [63:0] regs_39;
reg [63:0] regs_40;
reg [63:0] regs_41;
reg [63:0] regs_42;
reg [63:0] regs_43;
reg [63:0] regs_44;
reg [63:0] regs_45;
reg [63:0] regs_46;
reg [63:0] regs_47;
reg [63:0] regs_48;
reg [63:0] regs_49;
reg [63:0] regs_50;
reg [63:0] regs_51;
reg [63:0] regs_52;
reg [63:0] regs_53;
reg [63:0] regs_54;
reg [63:0] regs_55;
reg [63:0] regs_56;
reg [63:0] regs_57;
reg [63:0] regs_58;
reg [63:0] regs_59;
reg [63:0] regs_60;
reg [63:0] regs_61;
reg [63:0] regs_62;
reg [63:0] regs_63;
wire [63:0][63:0] _GEN =
{{regs_63},
{regs_62},
{regs_61},
{regs_60},
{regs_59},
{regs_58},
{regs_57},
{regs_56},
{regs_55},
{regs_54},
{regs_53},
{regs_52},
{regs_51},
{regs_50},
{regs_49},
{regs_48},
{regs_47},
{regs_46},
{regs_45},
{regs_44},
{regs_43},
{regs_42},
{regs_41},
{regs_40},
{regs_39},
{regs_38},
{regs_37},
{regs_36},
{regs_35},
{regs_34},
{regs_33},
{regs_32},
{regs_31},
{regs_30},
{regs_29},
{regs_28},
{regs_27},
{regs_26},
{regs_25},
{regs_24},
{regs_23},
{regs_22},
{regs_21},
{regs_20},
{regs_19},
{regs_18},
{regs_17},
{regs_16},
{regs_15},
{regs_14},
{regs_13},
{regs_12},
{regs_11},
{regs_10},
{regs_9},
{regs_8},
{regs_7},
{regs_6},
{regs_5},
{regs_4},
{regs_3},
{regs_2},
{regs_1},
{regs_0}};
always @(posedge clock) begin
if (reset) begin
regs_0 <= 64'h0;
regs_1 <= 64'h0;
regs_2 <= 64'h0;
regs_3 <= 64'h0;
regs_4 <= 64'h0;
regs_5 <= 64'h0;
regs_6 <= 64'h0;
regs_7 <= 64'h0;
regs_8 <= 64'h0;
regs_9 <= 64'h0;
regs_10 <= 64'h0;
regs_11 <= 64'h0;
regs_12 <= 64'h0;
regs_13 <= 64'h0;
regs_14 <= 64'h0;
regs_15 <= 64'h0;
regs_16 <= 64'h0;
regs_17 <= 64'h0;
regs_18 <= 64'h0;
regs_19 <= 64'h0;
regs_20 <= 64'h0;
regs_21 <= 64'h0;
regs_22 <= 64'h0;
regs_23 <= 64'h0;
regs_24 <= 64'h0;
regs_25 <= 64'h0;
regs_26 <= 64'h0;
regs_27 <= 64'h0;
regs_28 <= 64'h0;
regs_29 <= 64'h0;
regs_30 <= 64'h0;
regs_31 <= 64'h0;
regs_32 <= 64'h0;
regs_33 <= 64'h0;
regs_34 <= 64'h0;
regs_35 <= 64'h0;
regs_36 <= 64'h0;
regs_37 <= 64'h0;
regs_38 <= 64'h0;
regs_39 <= 64'h0;
regs_40 <= 64'h0;
regs_41 <= 64'h0;
regs_42 <= 64'h0;
regs_43 <= 64'h0;
regs_44 <= 64'h0;
regs_45 <= 64'h0;
regs_46 <= 64'h0;
regs_47 <= 64'h0;
regs_48 <= 64'h0;
regs_49 <= 64'h0;
regs_50 <= 64'h0;
regs_51 <= 64'h0;
regs_52 <= 64'h0;
regs_53 <= 64'h0;
regs_54 <= 64'h0;
regs_55 <= 64'h0;
regs_56 <= 64'h0;
regs_57 <= 64'h0;
regs_58 <= 64'h0;
regs_59 <= 64'h0;
regs_60 <= 64'h0;
regs_61 <= 64'h0;
regs_62 <= 64'h0;
regs_63 <= 64'h0;
end
else begin
automatic logic _GEN_0;
automatic logic _GEN_1 = io_wen_1 & (|io_waddr_1);
_GEN_0 = io_wen_0 & (|io_waddr_0);
if (_GEN_1 & ~(|io_waddr_1))
regs_0 <= io_wdata_1;
else if (_GEN_0 & ~(|io_waddr_0))
regs_0 <= io_wdata_0;
if (_GEN_1 & io_waddr_1 == 6'h1)
regs_1 <= io_wdata_1;
else if (_GEN_0 & io_waddr_0 == 6'h1)
regs_1 <= io_wdata_0;
if (_GEN_1 & io_waddr_1 == 6'h2)
regs_2 <= io_wdata_1;
else if (_GEN_0 & io_waddr_0 == 6'h2)
regs_2 <= io_wdata_0;
if (_GEN_1 & io_waddr_1 == 6'h3)
regs_3 <= io_wdata_1;
else if (_GEN_0 & io_waddr_0 == 6'h3)
regs_3 <= io_wdata_0;
if (_GEN_1 & io_waddr_1 == 6'h4)
regs_4 <= io_wdata_1;
else if (_GEN_0 & io_waddr_0 == 6'h4)
regs_4 <= io_wdata_0;
if (_GEN_1 & io_waddr_1 == 6'h5)
regs_5 <= io_wdata_1;
else if (_GEN_0 & io_waddr_0 == 6'h5)
regs_5 <= io_wdata_0;
if (_GEN_1 & io_waddr_1 == 6'h6)
regs_6 <= io_wdata_1;
else if (_GEN_0 & io_waddr_0 == 6'h6)
regs_6 <= io_wdata_0;
if (_GEN_1 & io_waddr_1 == 6'h7)
regs_7 <= io_wdata_1;
else if (_GEN_0 & io_waddr_0 == 6'h7)
regs_7 <= io_wdata_0;
if (_GEN_1 & io_waddr_1 == 6'h8)
regs_8 <= io_wdata_1;
else if (_GEN_0 & io_waddr_0 == 6'h8)
regs_8 <= io_wdata_0;
if (_GEN_1 & io_waddr_1 == 6'h9)
regs_9 <= io_wdata_1;
else if (_GEN_0 & io_waddr_0 == 6'h9)
regs_9 <= io_wdata_0;
if (_GEN_1 & io_waddr_1 == 6'hA)
regs_10 <= io_wdata_1;
else if (_GEN_0 & io_waddr_0 == 6'hA)
regs_10 <= io_wdata_0;
if (_GEN_1 & io_waddr_1 == 6'hB)
regs_11 <= io_wdata_1;
else if (_GEN_0 & io_waddr_0 == 6'hB)
regs_11 <= io_wdata_0;
if (_GEN_1 & io_waddr_1 == 6'hC)
regs_12 <= io_wdata_1;
else if (_GEN_0 & io_waddr_0 == 6'hC)
regs_12 <= io_wdata_0;
if (_GEN_1 & io_waddr_1 == 6'hD)
regs_13 <= io_wdata_1;
else if (_GEN_0 & io_waddr_0 == 6'hD)
regs_13 <= io_wdata_0;
if (_GEN_1 & io_waddr_1 == 6'hE)
regs_14 <= io_wdata_1;
else if (_GEN_0 & io_waddr_0 == 6'hE)
regs_14 <= io_wdata_0;
if (_GEN_1 & io_waddr_1 == 6'hF)
regs_15 <= io_wdata_1;
else if (_GEN_0 & io_waddr_0 == 6'hF)
regs_15 <= io_wdata_0;
if (_GEN_1 & io_waddr_1 == 6'h10)
regs_16 <= io_wdata_1;
else if (_GEN_0 & io_waddr_0 == 6'h10)
regs_16 <= io_wdata_0;
if (_GEN_1 & io_waddr_1 == 6'h11)
regs_17 <= io_wdata_1;
else if (_GEN_0 & io_waddr_0 == 6'h11)
regs_17 <= io_wdata_0;
if (_GEN_1 & io_waddr_1 == 6'h12)
regs_18 <= io_wdata_1;
else if (_GEN_0 & io_waddr_0 == 6'h12)
regs_18 <= io_wdata_0;
if (_GEN_1 & io_waddr_1 == 6'h13)
regs_19 <= io_wdata_1;
else if (_GEN_0 & io_waddr_0 == 6'h13)
regs_19 <= io_wdata_0;
if (_GEN_1 & io_waddr_1 == 6'h14)
regs_20 <= io_wdata_1;
else if (_GEN_0 & io_waddr_0 == 6'h14)
regs_20 <= io_wdata_0;
if (_GEN_1 & io_waddr_1 == 6'h15)
regs_21 <= io_wdata_1;
else if (_GEN_0 & io_waddr_0 == 6'h15)
regs_21 <= io_wdata_0;
if (_GEN_1 & io_waddr_1 == 6'h16)
regs_22 <= io_wdata_1;
else if (_GEN_0 & io_waddr_0 == 6'h16)
regs_22 <= io_wdata_0;
if (_GEN_1 & io_waddr_1 == 6'h17)
regs_23 <= io_wdata_1;
else if (_GEN_0 & io_waddr_0 == 6'h17)
regs_23 <= io_wdata_0;
if (_GEN_1 & io_waddr_1 == 6'h18)
regs_24 <= io_wdata_1;
else if (_GEN_0 & io_waddr_0 == 6'h18)
regs_24 <= io_wdata_0;
if (_GEN_1 & io_waddr_1 == 6'h19)
regs_25 <= io_wdata_1;
else if (_GEN_0 & io_waddr_0 == 6'h19)
regs_25 <= io_wdata_0;
if (_GEN_1 & io_waddr_1 == 6'h1A)
regs_26 <= io_wdata_1;
else if (_GEN_0 & io_waddr_0 == 6'h1A)
regs_26 <= io_wdata_0;
if (_GEN_1 & io_waddr_1 == 6'h1B)
regs_27 <= io_wdata_1;
else if (_GEN_0 & io_waddr_0 == 6'h1B)
regs_27 <= io_wdata_0;
if (_GEN_1 & io_waddr_1 == 6'h1C)
regs_28 <= io_wdata_1;
else if (_GEN_0 & io_waddr_0 == 6'h1C)
regs_28 <= io_wdata_0;
if (_GEN_1 & io_waddr_1 == 6'h1D)
regs_29 <= io_wdata_1;
else if (_GEN_0 & io_waddr_0 == 6'h1D)
regs_29 <= io_wdata_0;
if (_GEN_1 & io_waddr_1 == 6'h1E)
regs_30 <= io_wdata_1;
else if (_GEN_0 & io_waddr_0 == 6'h1E)
regs_30 <= io_wdata_0;
if (_GEN_1 & io_waddr_1 == 6'h1F)
regs_31 <= io_wdata_1;
else if (_GEN_0 & io_waddr_0 == 6'h1F)
regs_31 <= io_wdata_0;
if (_GEN_1 & io_waddr_1 == 6'h20)
regs_32 <= io_wdata_1;
else if (_GEN_0 & io_waddr_0 == 6'h20)
regs_32 <= io_wdata_0;
if (_GEN_1 & io_waddr_1 == 6'h21)
regs_33 <= io_wdata_1;
else if (_GEN_0 & io_waddr_0 == 6'h21)
regs_33 <= io_wdata_0;
if (_GEN_1 & io_waddr_1 == 6'h22)
regs_34 <= io_wdata_1;
else if (_GEN_0 & io_waddr_0 == 6'h22)
regs_34 <= io_wdata_0;
if (_GEN_1 & io_waddr_1 == 6'h23)
regs_35 <= io_wdata_1;
else if (_GEN_0 & io_waddr_0 == 6'h23)
regs_35 <= io_wdata_0;
if (_GEN_1 & io_waddr_1 == 6'h24)
regs_36 <= io_wdata_1;
else if (_GEN_0 & io_waddr_0 == 6'h24)
regs_36 <= io_wdata_0;
if (_GEN_1 & io_waddr_1 == 6'h25)
regs_37 <= io_wdata_1;
else if (_GEN_0 & io_waddr_0 == 6'h25)
regs_37 <= io_wdata_0;
if (_GEN_1 & io_waddr_1 == 6'h26)
regs_38 <= io_wdata_1;
else if (_GEN_0 & io_waddr_0 == 6'h26)
regs_38 <= io_wdata_0;
if (_GEN_1 & io_waddr_1 == 6'h27)
regs_39 <= io_wdata_1;
else if (_GEN_0 & io_waddr_0 == 6'h27)
regs_39 <= io_wdata_0;
if (_GEN_1 & io_waddr_1 == 6'h28)
regs_40 <= io_wdata_1;
else if (_GEN_0 & io_waddr_0 == 6'h28)
regs_40 <= io_wdata_0;
if (_GEN_1 & io_waddr_1 == 6'h29)
regs_41 <= io_wdata_1;
else if (_GEN_0 & io_waddr_0 == 6'h29)
regs_41 <= io_wdata_0;
if (_GEN_1 & io_waddr_1 == 6'h2A)
regs_42 <= io_wdata_1;
else if (_GEN_0 & io_waddr_0 == 6'h2A)
regs_42 <= io_wdata_0;
if (_GEN_1 & io_waddr_1 == 6'h2B)
regs_43 <= io_wdata_1;
else if (_GEN_0 & io_waddr_0 == 6'h2B)
regs_43 <= io_wdata_0;
if (_GEN_1 & io_waddr_1 == 6'h2C)
regs_44 <= io_wdata_1;
else if (_GEN_0 & io_waddr_0 == 6'h2C)
regs_44 <= io_wdata_0;
if (_GEN_1 & io_waddr_1 == 6'h2D)
regs_45 <= io_wdata_1;
else if (_GEN_0 & io_waddr_0 == 6'h2D)
regs_45 <= io_wdata_0;
if (_GEN_1 & io_waddr_1 == 6'h2E)
regs_46 <= io_wdata_1;
else if (_GEN_0 & io_waddr_0 == 6'h2E)
regs_46 <= io_wdata_0;
if (_GEN_1 & io_waddr_1 == 6'h2F)
regs_47 <= io_wdata_1;
else if (_GEN_0 & io_waddr_0 == 6'h2F)
regs_47 <= io_wdata_0;
if (_GEN_1 & io_waddr_1 == 6'h30)
regs_48 <= io_wdata_1;
else if (_GEN_0 & io_waddr_0 == 6'h30)
regs_48 <= io_wdata_0;
if (_GEN_1 & io_waddr_1 == 6'h31)
regs_49 <= io_wdata_1;
else if (_GEN_0 & io_waddr_0 == 6'h31)
regs_49 <= io_wdata_0;
if (_GEN_1 & io_waddr_1 == 6'h32)
regs_50 <= io_wdata_1;
else if (_GEN_0 & io_waddr_0 == 6'h32)
regs_50 <= io_wdata_0;
if (_GEN_1 & io_waddr_1 == 6'h33)
regs_51 <= io_wdata_1;
else if (_GEN_0 & io_waddr_0 == 6'h33)
regs_51 <= io_wdata_0;
if (_GEN_1 & io_waddr_1 == 6'h34)
regs_52 <= io_wdata_1;
else if (_GEN_0 & io_waddr_0 == 6'h34)
regs_52 <= io_wdata_0;
if (_GEN_1 & io_waddr_1 == 6'h35)
regs_53 <= io_wdata_1;
else if (_GEN_0 & io_waddr_0 == 6'h35)
regs_53 <= io_wdata_0;
if (_GEN_1 & io_waddr_1 == 6'h36)
regs_54 <= io_wdata_1;
else if (_GEN_0 & io_waddr_0 == 6'h36)
regs_54 <= io_wdata_0;
if (_GEN_1 & io_waddr_1 == 6'h37)
regs_55 <= io_wdata_1;
else if (_GEN_0 & io_waddr_0 == 6'h37)
regs_55 <= io_wdata_0;
if (_GEN_1 & io_waddr_1 == 6'h38)
regs_56 <= io_wdata_1;
else if (_GEN_0 & io_waddr_0 == 6'h38)
regs_56 <= io_wdata_0;
if (_GEN_1 & io_waddr_1 == 6'h39)
regs_57 <= io_wdata_1;
else if (_GEN_0 & io_waddr_0 == 6'h39)
regs_57 <= io_wdata_0;
if (_GEN_1 & io_waddr_1 == 6'h3A)
regs_58 <= io_wdata_1;
else if (_GEN_0 & io_waddr_0 == 6'h3A)
regs_58 <= io_wdata_0;
if (_GEN_1 & io_waddr_1 == 6'h3B)
regs_59 <= io_wdata_1;
else if (_GEN_0 & io_waddr_0 == 6'h3B)
regs_59 <= io_wdata_0;
if (_GEN_1 & io_waddr_1 == 6'h3C)
regs_60 <= io_wdata_1;
else if (_GEN_0 & io_waddr_0 == 6'h3C)
regs_60 <= io_wdata_0;
if (_GEN_1 & io_waddr_1 == 6'h3D)
regs_61 <= io_wdata_1;
else if (_GEN_0 & io_waddr_0 == 6'h3D)
regs_61 <= io_wdata_0;
if (_GEN_1 & io_waddr_1 == 6'h3E)
regs_62 <= io_wdata_1;
else if (_GEN_0 & io_waddr_0 == 6'h3E)
regs_62 <= io_wdata_0;
if (_GEN_1 & (&io_waddr_1))
regs_63 <= io_wdata_1;
else if (_GEN_0 & (&io_waddr_0))
regs_63 <= io_wdata_0;
end
end // always @(posedge)
assign io_rdata_0 = io_raddr_0 == 6'h0 ? 64'h0 : _GEN[io_raddr_0];
assign io_rdata_1 = io_raddr_1 == 6'h0 ? 64'h0 : _GEN[io_raddr_1];
assign io_rdata_2 = io_raddr_2 == 6'h0 ? 64'h0 : _GEN[io_raddr_2];
assign io_rdata_3 = io_raddr_3 == 6'h0 ? 64'h0 : _GEN[io_raddr_3];
endmodule

9720
generated-ooo/ROB.sv Normal file

File diff suppressed because it is too large Load Diff

1019
generated-ooo/RenameStage.sv Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,565 @@
// Generated by CIRCT firtool-1.139.0
module RenameTable(
input clock,
reset,
input [4:0] io_rs1_0,
io_rs1_1,
io_rs2_0,
io_rs2_1,
io_rd_0,
io_rd_1,
input [5:0] io_newPhys_0,
io_newPhys_1,
input io_wen_0,
io_wen_1,
output [5:0] io_prs1_0,
io_prs1_1,
io_prs2_0,
io_prs2_1,
io_oldPrd_0,
io_oldPrd_1,
input io_commitWen_0,
io_commitWen_1,
input [4:0] io_commitRd_0,
io_commitRd_1,
input [5:0] io_commitPhys_0,
io_commitPhys_1,
input io_recover,
output [5:0] io_committedPhys_0,
io_committedPhys_1,
io_committedPhys_2,
io_committedPhys_3,
io_committedPhys_4,
io_committedPhys_5,
io_committedPhys_6,
io_committedPhys_7,
io_committedPhys_8,
io_committedPhys_9,
io_committedPhys_10,
io_committedPhys_11,
io_committedPhys_12,
io_committedPhys_13,
io_committedPhys_14,
io_committedPhys_15,
io_committedPhys_16,
io_committedPhys_17,
io_committedPhys_18,
io_committedPhys_19,
io_committedPhys_20,
io_committedPhys_21,
io_committedPhys_22,
io_committedPhys_23,
io_committedPhys_24,
io_committedPhys_25,
io_committedPhys_26,
io_committedPhys_27,
io_committedPhys_28,
io_committedPhys_29,
io_committedPhys_30,
io_committedPhys_31
);
reg [5:0] speculative_0;
reg [5:0] speculative_1;
reg [5:0] speculative_2;
reg [5:0] speculative_3;
reg [5:0] speculative_4;
reg [5:0] speculative_5;
reg [5:0] speculative_6;
reg [5:0] speculative_7;
reg [5:0] speculative_8;
reg [5:0] speculative_9;
reg [5:0] speculative_10;
reg [5:0] speculative_11;
reg [5:0] speculative_12;
reg [5:0] speculative_13;
reg [5:0] speculative_14;
reg [5:0] speculative_15;
reg [5:0] speculative_16;
reg [5:0] speculative_17;
reg [5:0] speculative_18;
reg [5:0] speculative_19;
reg [5:0] speculative_20;
reg [5:0] speculative_21;
reg [5:0] speculative_22;
reg [5:0] speculative_23;
reg [5:0] speculative_24;
reg [5:0] speculative_25;
reg [5:0] speculative_26;
reg [5:0] speculative_27;
reg [5:0] speculative_28;
reg [5:0] speculative_29;
reg [5:0] speculative_30;
reg [5:0] speculative_31;
reg [5:0] committed_0;
reg [5:0] committed_1;
reg [5:0] committed_2;
reg [5:0] committed_3;
reg [5:0] committed_4;
reg [5:0] committed_5;
reg [5:0] committed_6;
reg [5:0] committed_7;
reg [5:0] committed_8;
reg [5:0] committed_9;
reg [5:0] committed_10;
reg [5:0] committed_11;
reg [5:0] committed_12;
reg [5:0] committed_13;
reg [5:0] committed_14;
reg [5:0] committed_15;
reg [5:0] committed_16;
reg [5:0] committed_17;
reg [5:0] committed_18;
reg [5:0] committed_19;
reg [5:0] committed_20;
reg [5:0] committed_21;
reg [5:0] committed_22;
reg [5:0] committed_23;
reg [5:0] committed_24;
reg [5:0] committed_25;
reg [5:0] committed_26;
reg [5:0] committed_27;
reg [5:0] committed_28;
reg [5:0] committed_29;
reg [5:0] committed_30;
reg [5:0] committed_31;
wire [31:0][5:0] _GEN =
{{speculative_31},
{speculative_30},
{speculative_29},
{speculative_28},
{speculative_27},
{speculative_26},
{speculative_25},
{speculative_24},
{speculative_23},
{speculative_22},
{speculative_21},
{speculative_20},
{speculative_19},
{speculative_18},
{speculative_17},
{speculative_16},
{speculative_15},
{speculative_14},
{speculative_13},
{speculative_12},
{speculative_11},
{speculative_10},
{speculative_9},
{speculative_8},
{speculative_7},
{speculative_6},
{speculative_5},
{speculative_4},
{speculative_3},
{speculative_2},
{speculative_1},
{speculative_0}};
wire slot0Writes = io_wen_0 & (|io_rd_0);
always @(posedge clock) begin
if (reset) begin
speculative_0 <= 6'h0;
speculative_1 <= 6'h1;
speculative_2 <= 6'h2;
speculative_3 <= 6'h3;
speculative_4 <= 6'h4;
speculative_5 <= 6'h5;
speculative_6 <= 6'h6;
speculative_7 <= 6'h7;
speculative_8 <= 6'h8;
speculative_9 <= 6'h9;
speculative_10 <= 6'hA;
speculative_11 <= 6'hB;
speculative_12 <= 6'hC;
speculative_13 <= 6'hD;
speculative_14 <= 6'hE;
speculative_15 <= 6'hF;
speculative_16 <= 6'h10;
speculative_17 <= 6'h11;
speculative_18 <= 6'h12;
speculative_19 <= 6'h13;
speculative_20 <= 6'h14;
speculative_21 <= 6'h15;
speculative_22 <= 6'h16;
speculative_23 <= 6'h17;
speculative_24 <= 6'h18;
speculative_25 <= 6'h19;
speculative_26 <= 6'h1A;
speculative_27 <= 6'h1B;
speculative_28 <= 6'h1C;
speculative_29 <= 6'h1D;
speculative_30 <= 6'h1E;
speculative_31 <= 6'h1F;
committed_0 <= 6'h0;
committed_1 <= 6'h1;
committed_2 <= 6'h2;
committed_3 <= 6'h3;
committed_4 <= 6'h4;
committed_5 <= 6'h5;
committed_6 <= 6'h6;
committed_7 <= 6'h7;
committed_8 <= 6'h8;
committed_9 <= 6'h9;
committed_10 <= 6'hA;
committed_11 <= 6'hB;
committed_12 <= 6'hC;
committed_13 <= 6'hD;
committed_14 <= 6'hE;
committed_15 <= 6'hF;
committed_16 <= 6'h10;
committed_17 <= 6'h11;
committed_18 <= 6'h12;
committed_19 <= 6'h13;
committed_20 <= 6'h14;
committed_21 <= 6'h15;
committed_22 <= 6'h16;
committed_23 <= 6'h17;
committed_24 <= 6'h18;
committed_25 <= 6'h19;
committed_26 <= 6'h1A;
committed_27 <= 6'h1B;
committed_28 <= 6'h1C;
committed_29 <= 6'h1D;
committed_30 <= 6'h1E;
committed_31 <= 6'h1F;
end
else if (io_recover) begin
speculative_0 <= committed_0;
speculative_1 <= committed_1;
speculative_2 <= committed_2;
speculative_3 <= committed_3;
speculative_4 <= committed_4;
speculative_5 <= committed_5;
speculative_6 <= committed_6;
speculative_7 <= committed_7;
speculative_8 <= committed_8;
speculative_9 <= committed_9;
speculative_10 <= committed_10;
speculative_11 <= committed_11;
speculative_12 <= committed_12;
speculative_13 <= committed_13;
speculative_14 <= committed_14;
speculative_15 <= committed_15;
speculative_16 <= committed_16;
speculative_17 <= committed_17;
speculative_18 <= committed_18;
speculative_19 <= committed_19;
speculative_20 <= committed_20;
speculative_21 <= committed_21;
speculative_22 <= committed_22;
speculative_23 <= committed_23;
speculative_24 <= committed_24;
speculative_25 <= committed_25;
speculative_26 <= committed_26;
speculative_27 <= committed_27;
speculative_28 <= committed_28;
speculative_29 <= committed_29;
speculative_30 <= committed_30;
speculative_31 <= committed_31;
end
else begin
automatic logic _GEN_0;
automatic logic _GEN_1;
automatic logic _GEN_2 = io_wen_1 & (|io_rd_1);
automatic logic _GEN_3 = io_commitWen_1 & (|io_commitRd_1);
_GEN_0 = io_wen_0 & (|io_rd_0);
_GEN_1 = io_commitWen_0 & (|io_commitRd_0);
if (_GEN_2 & ~(|io_rd_1))
speculative_0 <= io_newPhys_1;
else if (_GEN_0 & io_rd_0 == 5'h0)
speculative_0 <= io_newPhys_0;
if (_GEN_2 & io_rd_1 == 5'h1)
speculative_1 <= io_newPhys_1;
else if (_GEN_0 & io_rd_0 == 5'h1)
speculative_1 <= io_newPhys_0;
if (_GEN_2 & io_rd_1 == 5'h2)
speculative_2 <= io_newPhys_1;
else if (_GEN_0 & io_rd_0 == 5'h2)
speculative_2 <= io_newPhys_0;
if (_GEN_2 & io_rd_1 == 5'h3)
speculative_3 <= io_newPhys_1;
else if (_GEN_0 & io_rd_0 == 5'h3)
speculative_3 <= io_newPhys_0;
if (_GEN_2 & io_rd_1 == 5'h4)
speculative_4 <= io_newPhys_1;
else if (_GEN_0 & io_rd_0 == 5'h4)
speculative_4 <= io_newPhys_0;
if (_GEN_2 & io_rd_1 == 5'h5)
speculative_5 <= io_newPhys_1;
else if (_GEN_0 & io_rd_0 == 5'h5)
speculative_5 <= io_newPhys_0;
if (_GEN_2 & io_rd_1 == 5'h6)
speculative_6 <= io_newPhys_1;
else if (_GEN_0 & io_rd_0 == 5'h6)
speculative_6 <= io_newPhys_0;
if (_GEN_2 & io_rd_1 == 5'h7)
speculative_7 <= io_newPhys_1;
else if (_GEN_0 & io_rd_0 == 5'h7)
speculative_7 <= io_newPhys_0;
if (_GEN_2 & io_rd_1 == 5'h8)
speculative_8 <= io_newPhys_1;
else if (_GEN_0 & io_rd_0 == 5'h8)
speculative_8 <= io_newPhys_0;
if (_GEN_2 & io_rd_1 == 5'h9)
speculative_9 <= io_newPhys_1;
else if (_GEN_0 & io_rd_0 == 5'h9)
speculative_9 <= io_newPhys_0;
if (_GEN_2 & io_rd_1 == 5'hA)
speculative_10 <= io_newPhys_1;
else if (_GEN_0 & io_rd_0 == 5'hA)
speculative_10 <= io_newPhys_0;
if (_GEN_2 & io_rd_1 == 5'hB)
speculative_11 <= io_newPhys_1;
else if (_GEN_0 & io_rd_0 == 5'hB)
speculative_11 <= io_newPhys_0;
if (_GEN_2 & io_rd_1 == 5'hC)
speculative_12 <= io_newPhys_1;
else if (_GEN_0 & io_rd_0 == 5'hC)
speculative_12 <= io_newPhys_0;
if (_GEN_2 & io_rd_1 == 5'hD)
speculative_13 <= io_newPhys_1;
else if (_GEN_0 & io_rd_0 == 5'hD)
speculative_13 <= io_newPhys_0;
if (_GEN_2 & io_rd_1 == 5'hE)
speculative_14 <= io_newPhys_1;
else if (_GEN_0 & io_rd_0 == 5'hE)
speculative_14 <= io_newPhys_0;
if (_GEN_2 & io_rd_1 == 5'hF)
speculative_15 <= io_newPhys_1;
else if (_GEN_0 & io_rd_0 == 5'hF)
speculative_15 <= io_newPhys_0;
if (_GEN_2 & io_rd_1 == 5'h10)
speculative_16 <= io_newPhys_1;
else if (_GEN_0 & io_rd_0 == 5'h10)
speculative_16 <= io_newPhys_0;
if (_GEN_2 & io_rd_1 == 5'h11)
speculative_17 <= io_newPhys_1;
else if (_GEN_0 & io_rd_0 == 5'h11)
speculative_17 <= io_newPhys_0;
if (_GEN_2 & io_rd_1 == 5'h12)
speculative_18 <= io_newPhys_1;
else if (_GEN_0 & io_rd_0 == 5'h12)
speculative_18 <= io_newPhys_0;
if (_GEN_2 & io_rd_1 == 5'h13)
speculative_19 <= io_newPhys_1;
else if (_GEN_0 & io_rd_0 == 5'h13)
speculative_19 <= io_newPhys_0;
if (_GEN_2 & io_rd_1 == 5'h14)
speculative_20 <= io_newPhys_1;
else if (_GEN_0 & io_rd_0 == 5'h14)
speculative_20 <= io_newPhys_0;
if (_GEN_2 & io_rd_1 == 5'h15)
speculative_21 <= io_newPhys_1;
else if (_GEN_0 & io_rd_0 == 5'h15)
speculative_21 <= io_newPhys_0;
if (_GEN_2 & io_rd_1 == 5'h16)
speculative_22 <= io_newPhys_1;
else if (_GEN_0 & io_rd_0 == 5'h16)
speculative_22 <= io_newPhys_0;
if (_GEN_2 & io_rd_1 == 5'h17)
speculative_23 <= io_newPhys_1;
else if (_GEN_0 & io_rd_0 == 5'h17)
speculative_23 <= io_newPhys_0;
if (_GEN_2 & io_rd_1 == 5'h18)
speculative_24 <= io_newPhys_1;
else if (_GEN_0 & io_rd_0 == 5'h18)
speculative_24 <= io_newPhys_0;
if (_GEN_2 & io_rd_1 == 5'h19)
speculative_25 <= io_newPhys_1;
else if (_GEN_0 & io_rd_0 == 5'h19)
speculative_25 <= io_newPhys_0;
if (_GEN_2 & io_rd_1 == 5'h1A)
speculative_26 <= io_newPhys_1;
else if (_GEN_0 & io_rd_0 == 5'h1A)
speculative_26 <= io_newPhys_0;
if (_GEN_2 & io_rd_1 == 5'h1B)
speculative_27 <= io_newPhys_1;
else if (_GEN_0 & io_rd_0 == 5'h1B)
speculative_27 <= io_newPhys_0;
if (_GEN_2 & io_rd_1 == 5'h1C)
speculative_28 <= io_newPhys_1;
else if (_GEN_0 & io_rd_0 == 5'h1C)
speculative_28 <= io_newPhys_0;
if (_GEN_2 & io_rd_1 == 5'h1D)
speculative_29 <= io_newPhys_1;
else if (_GEN_0 & io_rd_0 == 5'h1D)
speculative_29 <= io_newPhys_0;
if (_GEN_2 & io_rd_1 == 5'h1E)
speculative_30 <= io_newPhys_1;
else if (_GEN_0 & io_rd_0 == 5'h1E)
speculative_30 <= io_newPhys_0;
if (_GEN_2 & (&io_rd_1))
speculative_31 <= io_newPhys_1;
else if (_GEN_0 & (&io_rd_0))
speculative_31 <= io_newPhys_0;
if (_GEN_3 & ~(|io_commitRd_1))
committed_0 <= io_commitPhys_1;
else if (_GEN_1 & ~(|io_commitRd_0))
committed_0 <= io_commitPhys_0;
if (_GEN_3 & io_commitRd_1 == 5'h1)
committed_1 <= io_commitPhys_1;
else if (_GEN_1 & io_commitRd_0 == 5'h1)
committed_1 <= io_commitPhys_0;
if (_GEN_3 & io_commitRd_1 == 5'h2)
committed_2 <= io_commitPhys_1;
else if (_GEN_1 & io_commitRd_0 == 5'h2)
committed_2 <= io_commitPhys_0;
if (_GEN_3 & io_commitRd_1 == 5'h3)
committed_3 <= io_commitPhys_1;
else if (_GEN_1 & io_commitRd_0 == 5'h3)
committed_3 <= io_commitPhys_0;
if (_GEN_3 & io_commitRd_1 == 5'h4)
committed_4 <= io_commitPhys_1;
else if (_GEN_1 & io_commitRd_0 == 5'h4)
committed_4 <= io_commitPhys_0;
if (_GEN_3 & io_commitRd_1 == 5'h5)
committed_5 <= io_commitPhys_1;
else if (_GEN_1 & io_commitRd_0 == 5'h5)
committed_5 <= io_commitPhys_0;
if (_GEN_3 & io_commitRd_1 == 5'h6)
committed_6 <= io_commitPhys_1;
else if (_GEN_1 & io_commitRd_0 == 5'h6)
committed_6 <= io_commitPhys_0;
if (_GEN_3 & io_commitRd_1 == 5'h7)
committed_7 <= io_commitPhys_1;
else if (_GEN_1 & io_commitRd_0 == 5'h7)
committed_7 <= io_commitPhys_0;
if (_GEN_3 & io_commitRd_1 == 5'h8)
committed_8 <= io_commitPhys_1;
else if (_GEN_1 & io_commitRd_0 == 5'h8)
committed_8 <= io_commitPhys_0;
if (_GEN_3 & io_commitRd_1 == 5'h9)
committed_9 <= io_commitPhys_1;
else if (_GEN_1 & io_commitRd_0 == 5'h9)
committed_9 <= io_commitPhys_0;
if (_GEN_3 & io_commitRd_1 == 5'hA)
committed_10 <= io_commitPhys_1;
else if (_GEN_1 & io_commitRd_0 == 5'hA)
committed_10 <= io_commitPhys_0;
if (_GEN_3 & io_commitRd_1 == 5'hB)
committed_11 <= io_commitPhys_1;
else if (_GEN_1 & io_commitRd_0 == 5'hB)
committed_11 <= io_commitPhys_0;
if (_GEN_3 & io_commitRd_1 == 5'hC)
committed_12 <= io_commitPhys_1;
else if (_GEN_1 & io_commitRd_0 == 5'hC)
committed_12 <= io_commitPhys_0;
if (_GEN_3 & io_commitRd_1 == 5'hD)
committed_13 <= io_commitPhys_1;
else if (_GEN_1 & io_commitRd_0 == 5'hD)
committed_13 <= io_commitPhys_0;
if (_GEN_3 & io_commitRd_1 == 5'hE)
committed_14 <= io_commitPhys_1;
else if (_GEN_1 & io_commitRd_0 == 5'hE)
committed_14 <= io_commitPhys_0;
if (_GEN_3 & io_commitRd_1 == 5'hF)
committed_15 <= io_commitPhys_1;
else if (_GEN_1 & io_commitRd_0 == 5'hF)
committed_15 <= io_commitPhys_0;
if (_GEN_3 & io_commitRd_1 == 5'h10)
committed_16 <= io_commitPhys_1;
else if (_GEN_1 & io_commitRd_0 == 5'h10)
committed_16 <= io_commitPhys_0;
if (_GEN_3 & io_commitRd_1 == 5'h11)
committed_17 <= io_commitPhys_1;
else if (_GEN_1 & io_commitRd_0 == 5'h11)
committed_17 <= io_commitPhys_0;
if (_GEN_3 & io_commitRd_1 == 5'h12)
committed_18 <= io_commitPhys_1;
else if (_GEN_1 & io_commitRd_0 == 5'h12)
committed_18 <= io_commitPhys_0;
if (_GEN_3 & io_commitRd_1 == 5'h13)
committed_19 <= io_commitPhys_1;
else if (_GEN_1 & io_commitRd_0 == 5'h13)
committed_19 <= io_commitPhys_0;
if (_GEN_3 & io_commitRd_1 == 5'h14)
committed_20 <= io_commitPhys_1;
else if (_GEN_1 & io_commitRd_0 == 5'h14)
committed_20 <= io_commitPhys_0;
if (_GEN_3 & io_commitRd_1 == 5'h15)
committed_21 <= io_commitPhys_1;
else if (_GEN_1 & io_commitRd_0 == 5'h15)
committed_21 <= io_commitPhys_0;
if (_GEN_3 & io_commitRd_1 == 5'h16)
committed_22 <= io_commitPhys_1;
else if (_GEN_1 & io_commitRd_0 == 5'h16)
committed_22 <= io_commitPhys_0;
if (_GEN_3 & io_commitRd_1 == 5'h17)
committed_23 <= io_commitPhys_1;
else if (_GEN_1 & io_commitRd_0 == 5'h17)
committed_23 <= io_commitPhys_0;
if (_GEN_3 & io_commitRd_1 == 5'h18)
committed_24 <= io_commitPhys_1;
else if (_GEN_1 & io_commitRd_0 == 5'h18)
committed_24 <= io_commitPhys_0;
if (_GEN_3 & io_commitRd_1 == 5'h19)
committed_25 <= io_commitPhys_1;
else if (_GEN_1 & io_commitRd_0 == 5'h19)
committed_25 <= io_commitPhys_0;
if (_GEN_3 & io_commitRd_1 == 5'h1A)
committed_26 <= io_commitPhys_1;
else if (_GEN_1 & io_commitRd_0 == 5'h1A)
committed_26 <= io_commitPhys_0;
if (_GEN_3 & io_commitRd_1 == 5'h1B)
committed_27 <= io_commitPhys_1;
else if (_GEN_1 & io_commitRd_0 == 5'h1B)
committed_27 <= io_commitPhys_0;
if (_GEN_3 & io_commitRd_1 == 5'h1C)
committed_28 <= io_commitPhys_1;
else if (_GEN_1 & io_commitRd_0 == 5'h1C)
committed_28 <= io_commitPhys_0;
if (_GEN_3 & io_commitRd_1 == 5'h1D)
committed_29 <= io_commitPhys_1;
else if (_GEN_1 & io_commitRd_0 == 5'h1D)
committed_29 <= io_commitPhys_0;
if (_GEN_3 & io_commitRd_1 == 5'h1E)
committed_30 <= io_commitPhys_1;
else if (_GEN_1 & io_commitRd_0 == 5'h1E)
committed_30 <= io_commitPhys_0;
if (_GEN_3 & (&io_commitRd_1))
committed_31 <= io_commitPhys_1;
else if (_GEN_1 & (&io_commitRd_0))
committed_31 <= io_commitPhys_0;
end
end // always @(posedge)
assign io_prs1_0 = _GEN[io_rs1_0];
assign io_prs1_1 = slot0Writes & io_rd_0 == io_rs1_1 ? io_newPhys_0 : _GEN[io_rs1_1];
assign io_prs2_0 = _GEN[io_rs2_0];
assign io_prs2_1 = slot0Writes & io_rd_0 == io_rs2_1 ? io_newPhys_0 : _GEN[io_rs2_1];
assign io_oldPrd_0 = _GEN[io_rd_0];
assign io_oldPrd_1 = slot0Writes & io_rd_0 == io_rd_1 ? io_newPhys_0 : _GEN[io_rd_1];
assign io_committedPhys_0 = committed_0;
assign io_committedPhys_1 = committed_1;
assign io_committedPhys_2 = committed_2;
assign io_committedPhys_3 = committed_3;
assign io_committedPhys_4 = committed_4;
assign io_committedPhys_5 = committed_5;
assign io_committedPhys_6 = committed_6;
assign io_committedPhys_7 = committed_7;
assign io_committedPhys_8 = committed_8;
assign io_committedPhys_9 = committed_9;
assign io_committedPhys_10 = committed_10;
assign io_committedPhys_11 = committed_11;
assign io_committedPhys_12 = committed_12;
assign io_committedPhys_13 = committed_13;
assign io_committedPhys_14 = committed_14;
assign io_committedPhys_15 = committed_15;
assign io_committedPhys_16 = committed_16;
assign io_committedPhys_17 = committed_17;
assign io_committedPhys_18 = committed_18;
assign io_committedPhys_19 = committed_19;
assign io_committedPhys_20 = committed_20;
assign io_committedPhys_21 = committed_21;
assign io_committedPhys_22 = committed_22;
assign io_committedPhys_23 = committed_23;
assign io_committedPhys_24 = committed_24;
assign io_committedPhys_25 = committed_25;
assign io_committedPhys_26 = committed_26;
assign io_committedPhys_27 = committed_27;
assign io_committedPhys_28 = committed_28;
assign io_committedPhys_29 = committed_29;
assign io_committedPhys_30 = committed_30;
assign io_committedPhys_31 = committed_31;
endmodule

File diff suppressed because it is too large Load Diff

961
generated-ooo/StoreQueue.sv Normal file
View File

@@ -0,0 +1,961 @@
// Generated by CIRCT firtool-1.139.0
module StoreQueue(
input clock,
reset,
io_enqValid,
input [5:0] io_enqRobIdx,
output [3:0] io_enqIdx,
input io_writeAddr,
io_writeData,
input [3:0] io_writeIdx,
input [63:0] io_addr,
io_data,
input [2:0] io_size,
input [63:0] io_loadAddr,
input [5:0] io_loadRobIdx,
output io_forwardValid,
input io_commitValid,
input [5:0] io_commitRobIdx,
output io_drainValid,
output [63:0] io_drain_addr,
io_drain_data,
output [2:0] io_drain_size,
input io_drainReady,
io_flush
);
reg entries_0_valid;
reg [5:0] entries_0_robIdx;
reg entries_0_addrValid;
reg entries_0_dataValid;
reg [63:0] entries_0_addr;
reg [63:0] entries_0_data;
reg [2:0] entries_0_size;
reg entries_0_committed;
reg entries_1_valid;
reg [5:0] entries_1_robIdx;
reg entries_1_addrValid;
reg entries_1_dataValid;
reg [63:0] entries_1_addr;
reg [63:0] entries_1_data;
reg [2:0] entries_1_size;
reg entries_1_committed;
reg entries_2_valid;
reg [5:0] entries_2_robIdx;
reg entries_2_addrValid;
reg entries_2_dataValid;
reg [63:0] entries_2_addr;
reg [63:0] entries_2_data;
reg [2:0] entries_2_size;
reg entries_2_committed;
reg entries_3_valid;
reg [5:0] entries_3_robIdx;
reg entries_3_addrValid;
reg entries_3_dataValid;
reg [63:0] entries_3_addr;
reg [63:0] entries_3_data;
reg [2:0] entries_3_size;
reg entries_3_committed;
reg entries_4_valid;
reg [5:0] entries_4_robIdx;
reg entries_4_addrValid;
reg entries_4_dataValid;
reg [63:0] entries_4_addr;
reg [63:0] entries_4_data;
reg [2:0] entries_4_size;
reg entries_4_committed;
reg entries_5_valid;
reg [5:0] entries_5_robIdx;
reg entries_5_addrValid;
reg entries_5_dataValid;
reg [63:0] entries_5_addr;
reg [63:0] entries_5_data;
reg [2:0] entries_5_size;
reg entries_5_committed;
reg entries_6_valid;
reg [5:0] entries_6_robIdx;
reg entries_6_addrValid;
reg entries_6_dataValid;
reg [63:0] entries_6_addr;
reg [63:0] entries_6_data;
reg [2:0] entries_6_size;
reg entries_6_committed;
reg entries_7_valid;
reg [5:0] entries_7_robIdx;
reg entries_7_addrValid;
reg entries_7_dataValid;
reg [63:0] entries_7_addr;
reg [63:0] entries_7_data;
reg [2:0] entries_7_size;
reg entries_7_committed;
reg entries_8_valid;
reg [5:0] entries_8_robIdx;
reg entries_8_addrValid;
reg entries_8_dataValid;
reg [63:0] entries_8_addr;
reg [63:0] entries_8_data;
reg [2:0] entries_8_size;
reg entries_8_committed;
reg entries_9_valid;
reg [5:0] entries_9_robIdx;
reg entries_9_addrValid;
reg entries_9_dataValid;
reg [63:0] entries_9_addr;
reg [63:0] entries_9_data;
reg [2:0] entries_9_size;
reg entries_9_committed;
reg entries_10_valid;
reg [5:0] entries_10_robIdx;
reg entries_10_addrValid;
reg entries_10_dataValid;
reg [63:0] entries_10_addr;
reg [63:0] entries_10_data;
reg [2:0] entries_10_size;
reg entries_10_committed;
reg entries_11_valid;
reg [5:0] entries_11_robIdx;
reg entries_11_addrValid;
reg entries_11_dataValid;
reg [63:0] entries_11_addr;
reg [63:0] entries_11_data;
reg [2:0] entries_11_size;
reg entries_11_committed;
reg entries_12_valid;
reg [5:0] entries_12_robIdx;
reg entries_12_addrValid;
reg entries_12_dataValid;
reg [63:0] entries_12_addr;
reg [63:0] entries_12_data;
reg [2:0] entries_12_size;
reg entries_12_committed;
reg entries_13_valid;
reg [5:0] entries_13_robIdx;
reg entries_13_addrValid;
reg entries_13_dataValid;
reg [63:0] entries_13_addr;
reg [63:0] entries_13_data;
reg [2:0] entries_13_size;
reg entries_13_committed;
reg entries_14_valid;
reg [5:0] entries_14_robIdx;
reg entries_14_addrValid;
reg entries_14_dataValid;
reg [63:0] entries_14_addr;
reg [63:0] entries_14_data;
reg [2:0] entries_14_size;
reg entries_14_committed;
reg entries_15_valid;
reg [5:0] entries_15_robIdx;
reg entries_15_addrValid;
reg entries_15_dataValid;
reg [63:0] entries_15_addr;
reg [63:0] entries_15_data;
reg [2:0] entries_15_size;
reg entries_15_committed;
wire [14:0] enqOH =
entries_0_valid
? (entries_1_valid
? (entries_2_valid
? (entries_3_valid
? (entries_4_valid
? (entries_5_valid
? (entries_6_valid
? (entries_7_valid
? (entries_8_valid
? (entries_9_valid
? (entries_10_valid
? (entries_11_valid
? (entries_12_valid
? (entries_13_valid
? (entries_14_valid
? {~entries_15_valid,
14'h0}
: 15'h2000)
: 15'h1000)
: 15'h800)
: 15'h400)
: 15'h200)
: 15'h100)
: 15'h80)
: 15'h40)
: 15'h20)
: 15'h10)
: 15'h8)
: 15'h4)
: 15'h2)
: 15'h1)
: 15'h0;
wire [6:0] _enqIdx_T_1 = enqOH[14:8] | enqOH[6:0];
wire [2:0] _enqIdx_T_3 = _enqIdx_T_1[6:4] | _enqIdx_T_1[2:0];
wire [3:0] enqIdx =
{|(enqOH[14:7]),
|(_enqIdx_T_1[6:3]),
|(_enqIdx_T_3[2:1]),
_enqIdx_T_3[2] | _enqIdx_T_3[0]};
wire drainVec_0 =
entries_0_valid & entries_0_committed & entries_0_addrValid & entries_0_dataValid;
wire drainVec_1 =
entries_1_valid & entries_1_committed & entries_1_addrValid & entries_1_dataValid;
wire drainVec_2 =
entries_2_valid & entries_2_committed & entries_2_addrValid & entries_2_dataValid;
wire drainVec_3 =
entries_3_valid & entries_3_committed & entries_3_addrValid & entries_3_dataValid;
wire drainVec_4 =
entries_4_valid & entries_4_committed & entries_4_addrValid & entries_4_dataValid;
wire drainVec_5 =
entries_5_valid & entries_5_committed & entries_5_addrValid & entries_5_dataValid;
wire drainVec_6 =
entries_6_valid & entries_6_committed & entries_6_addrValid & entries_6_dataValid;
wire drainVec_7 =
entries_7_valid & entries_7_committed & entries_7_addrValid & entries_7_dataValid;
wire drainVec_8 =
entries_8_valid & entries_8_committed & entries_8_addrValid & entries_8_dataValid;
wire drainVec_9 =
entries_9_valid & entries_9_committed & entries_9_addrValid & entries_9_dataValid;
wire drainVec_10 =
entries_10_valid & entries_10_committed & entries_10_addrValid & entries_10_dataValid;
wire drainVec_11 =
entries_11_valid & entries_11_committed & entries_11_addrValid & entries_11_dataValid;
wire drainVec_12 =
entries_12_valid & entries_12_committed & entries_12_addrValid & entries_12_dataValid;
wire drainVec_13 =
entries_13_valid & entries_13_committed & entries_13_addrValid & entries_13_dataValid;
wire drainVec_14 =
entries_14_valid & entries_14_committed & entries_14_addrValid & entries_14_dataValid;
wire drainVec_15 =
entries_15_valid & entries_15_committed & entries_15_addrValid & entries_15_dataValid;
wire [15:0] _io_drainValid_T =
{drainVec_15,
drainVec_14,
drainVec_13,
drainVec_12,
drainVec_11,
drainVec_10,
drainVec_9,
drainVec_8,
drainVec_7,
drainVec_6,
drainVec_5,
drainVec_4,
drainVec_3,
drainVec_2,
drainVec_1,
drainVec_0};
wire [14:0] drainOH =
drainVec_0
? 15'h0
: drainVec_1
? 15'h1
: drainVec_2
? 15'h2
: drainVec_3
? 15'h4
: drainVec_4
? 15'h8
: drainVec_5
? 15'h10
: drainVec_6
? 15'h20
: drainVec_7
? 15'h40
: drainVec_8
? 15'h80
: drainVec_9
? 15'h100
: drainVec_10
? 15'h200
: drainVec_11
? 15'h400
: drainVec_12
? 15'h800
: drainVec_13
? 15'h1000
: drainVec_14
? 15'h2000
: {drainVec_15, 14'h0};
wire [6:0] _drainIdx_T_1 = drainOH[14:8] | drainOH[6:0];
wire [2:0] _drainIdx_T_3 = _drainIdx_T_1[6:4] | _drainIdx_T_1[2:0];
wire [3:0] drainIdx =
{|(drainOH[14:7]),
|(_drainIdx_T_1[6:3]),
|(_drainIdx_T_3[2:1]),
_drainIdx_T_3[2] | _drainIdx_T_3[0]};
wire [15:0][63:0] _GEN =
{{entries_15_addr},
{entries_14_addr},
{entries_13_addr},
{entries_12_addr},
{entries_11_addr},
{entries_10_addr},
{entries_9_addr},
{entries_8_addr},
{entries_7_addr},
{entries_6_addr},
{entries_5_addr},
{entries_4_addr},
{entries_3_addr},
{entries_2_addr},
{entries_1_addr},
{entries_0_addr}};
wire [15:0][63:0] _GEN_0 =
{{entries_15_data},
{entries_14_data},
{entries_13_data},
{entries_12_data},
{entries_11_data},
{entries_10_data},
{entries_9_data},
{entries_8_data},
{entries_7_data},
{entries_6_data},
{entries_5_data},
{entries_4_data},
{entries_3_data},
{entries_2_data},
{entries_1_data},
{entries_0_data}};
wire [15:0][2:0] _GEN_1 =
{{entries_15_size},
{entries_14_size},
{entries_13_size},
{entries_12_size},
{entries_11_size},
{entries_10_size},
{entries_9_size},
{entries_8_size},
{entries_7_size},
{entries_6_size},
{entries_5_size},
{entries_4_size},
{entries_3_size},
{entries_2_size},
{entries_1_size},
{entries_0_size}};
always @(posedge clock) begin
if (reset) begin
entries_0_valid <= 1'h0;
entries_0_robIdx <= 6'h0;
entries_0_addrValid <= 1'h0;
entries_0_dataValid <= 1'h0;
entries_0_addr <= 64'h0;
entries_0_data <= 64'h0;
entries_0_size <= 3'h0;
entries_0_committed <= 1'h0;
entries_1_valid <= 1'h0;
entries_1_robIdx <= 6'h0;
entries_1_addrValid <= 1'h0;
entries_1_dataValid <= 1'h0;
entries_1_addr <= 64'h0;
entries_1_data <= 64'h0;
entries_1_size <= 3'h0;
entries_1_committed <= 1'h0;
entries_2_valid <= 1'h0;
entries_2_robIdx <= 6'h0;
entries_2_addrValid <= 1'h0;
entries_2_dataValid <= 1'h0;
entries_2_addr <= 64'h0;
entries_2_data <= 64'h0;
entries_2_size <= 3'h0;
entries_2_committed <= 1'h0;
entries_3_valid <= 1'h0;
entries_3_robIdx <= 6'h0;
entries_3_addrValid <= 1'h0;
entries_3_dataValid <= 1'h0;
entries_3_addr <= 64'h0;
entries_3_data <= 64'h0;
entries_3_size <= 3'h0;
entries_3_committed <= 1'h0;
entries_4_valid <= 1'h0;
entries_4_robIdx <= 6'h0;
entries_4_addrValid <= 1'h0;
entries_4_dataValid <= 1'h0;
entries_4_addr <= 64'h0;
entries_4_data <= 64'h0;
entries_4_size <= 3'h0;
entries_4_committed <= 1'h0;
entries_5_valid <= 1'h0;
entries_5_robIdx <= 6'h0;
entries_5_addrValid <= 1'h0;
entries_5_dataValid <= 1'h0;
entries_5_addr <= 64'h0;
entries_5_data <= 64'h0;
entries_5_size <= 3'h0;
entries_5_committed <= 1'h0;
entries_6_valid <= 1'h0;
entries_6_robIdx <= 6'h0;
entries_6_addrValid <= 1'h0;
entries_6_dataValid <= 1'h0;
entries_6_addr <= 64'h0;
entries_6_data <= 64'h0;
entries_6_size <= 3'h0;
entries_6_committed <= 1'h0;
entries_7_valid <= 1'h0;
entries_7_robIdx <= 6'h0;
entries_7_addrValid <= 1'h0;
entries_7_dataValid <= 1'h0;
entries_7_addr <= 64'h0;
entries_7_data <= 64'h0;
entries_7_size <= 3'h0;
entries_7_committed <= 1'h0;
entries_8_valid <= 1'h0;
entries_8_robIdx <= 6'h0;
entries_8_addrValid <= 1'h0;
entries_8_dataValid <= 1'h0;
entries_8_addr <= 64'h0;
entries_8_data <= 64'h0;
entries_8_size <= 3'h0;
entries_8_committed <= 1'h0;
entries_9_valid <= 1'h0;
entries_9_robIdx <= 6'h0;
entries_9_addrValid <= 1'h0;
entries_9_dataValid <= 1'h0;
entries_9_addr <= 64'h0;
entries_9_data <= 64'h0;
entries_9_size <= 3'h0;
entries_9_committed <= 1'h0;
entries_10_valid <= 1'h0;
entries_10_robIdx <= 6'h0;
entries_10_addrValid <= 1'h0;
entries_10_dataValid <= 1'h0;
entries_10_addr <= 64'h0;
entries_10_data <= 64'h0;
entries_10_size <= 3'h0;
entries_10_committed <= 1'h0;
entries_11_valid <= 1'h0;
entries_11_robIdx <= 6'h0;
entries_11_addrValid <= 1'h0;
entries_11_dataValid <= 1'h0;
entries_11_addr <= 64'h0;
entries_11_data <= 64'h0;
entries_11_size <= 3'h0;
entries_11_committed <= 1'h0;
entries_12_valid <= 1'h0;
entries_12_robIdx <= 6'h0;
entries_12_addrValid <= 1'h0;
entries_12_dataValid <= 1'h0;
entries_12_addr <= 64'h0;
entries_12_data <= 64'h0;
entries_12_size <= 3'h0;
entries_12_committed <= 1'h0;
entries_13_valid <= 1'h0;
entries_13_robIdx <= 6'h0;
entries_13_addrValid <= 1'h0;
entries_13_dataValid <= 1'h0;
entries_13_addr <= 64'h0;
entries_13_data <= 64'h0;
entries_13_size <= 3'h0;
entries_13_committed <= 1'h0;
entries_14_valid <= 1'h0;
entries_14_robIdx <= 6'h0;
entries_14_addrValid <= 1'h0;
entries_14_dataValid <= 1'h0;
entries_14_addr <= 64'h0;
entries_14_data <= 64'h0;
entries_14_size <= 3'h0;
entries_14_committed <= 1'h0;
entries_15_valid <= 1'h0;
entries_15_robIdx <= 6'h0;
entries_15_addrValid <= 1'h0;
entries_15_dataValid <= 1'h0;
entries_15_addr <= 64'h0;
entries_15_data <= 64'h0;
entries_15_size <= 3'h0;
entries_15_committed <= 1'h0;
end
else begin
automatic logic _GEN_2 =
io_enqValid
& (|{~entries_15_valid,
~entries_14_valid,
~entries_13_valid,
~entries_12_valid,
~entries_11_valid,
~entries_10_valid,
~entries_9_valid,
~entries_8_valid,
~entries_7_valid,
~entries_6_valid,
~entries_5_valid,
~entries_4_valid,
~entries_3_valid,
~entries_2_valid,
~entries_1_valid,
~entries_0_valid});
automatic logic _GEN_3;
automatic logic _GEN_4;
automatic logic _GEN_5;
automatic logic _GEN_6;
automatic logic _GEN_7;
automatic logic _GEN_8;
automatic logic _GEN_9;
automatic logic _GEN_10;
automatic logic _GEN_11;
automatic logic _GEN_12;
automatic logic _GEN_13;
automatic logic _GEN_14;
automatic logic _GEN_15;
automatic logic _GEN_16;
automatic logic _GEN_17;
automatic logic _GEN_18;
automatic logic _GEN_19 = io_writeIdx == 4'h0;
automatic logic _GEN_20;
automatic logic _GEN_21 = io_writeIdx == 4'h1;
automatic logic _GEN_22;
automatic logic _GEN_23 = io_writeIdx == 4'h2;
automatic logic _GEN_24;
automatic logic _GEN_25 = io_writeIdx == 4'h3;
automatic logic _GEN_26;
automatic logic _GEN_27 = io_writeIdx == 4'h4;
automatic logic _GEN_28;
automatic logic _GEN_29 = io_writeIdx == 4'h5;
automatic logic _GEN_30;
automatic logic _GEN_31 = io_writeIdx == 4'h6;
automatic logic _GEN_32;
automatic logic _GEN_33 = io_writeIdx == 4'h7;
automatic logic _GEN_34;
automatic logic _GEN_35 = io_writeIdx == 4'h8;
automatic logic _GEN_36;
automatic logic _GEN_37 = io_writeIdx == 4'h9;
automatic logic _GEN_38;
automatic logic _GEN_39 = io_writeIdx == 4'hA;
automatic logic _GEN_40;
automatic logic _GEN_41 = io_writeIdx == 4'hB;
automatic logic _GEN_42;
automatic logic _GEN_43 = io_writeIdx == 4'hC;
automatic logic _GEN_44;
automatic logic _GEN_45 = io_writeIdx == 4'hD;
automatic logic _GEN_46;
automatic logic _GEN_47 = io_writeIdx == 4'hE;
automatic logic _GEN_48;
automatic logic _GEN_49;
automatic logic _GEN_50;
automatic logic _GEN_51;
automatic logic _GEN_52;
automatic logic _GEN_53;
automatic logic _GEN_54;
automatic logic _GEN_55;
automatic logic _GEN_56;
automatic logic _GEN_57;
automatic logic _GEN_58;
automatic logic _GEN_59;
automatic logic _GEN_60;
automatic logic _GEN_61;
automatic logic _GEN_62;
automatic logic _GEN_63;
automatic logic _GEN_64;
automatic logic _GEN_65;
automatic logic _GEN_66 = (|_io_drainValid_T) & io_drainReady;
_GEN_3 = _GEN_2 & enqIdx == 4'h0;
_GEN_4 = _GEN_2 & enqIdx == 4'h1;
_GEN_5 = _GEN_2 & enqIdx == 4'h2;
_GEN_6 = _GEN_2 & enqIdx == 4'h3;
_GEN_7 = _GEN_2 & enqIdx == 4'h4;
_GEN_8 = _GEN_2 & enqIdx == 4'h5;
_GEN_9 = _GEN_2 & enqIdx == 4'h6;
_GEN_10 = _GEN_2 & enqIdx == 4'h7;
_GEN_11 = _GEN_2 & enqIdx == 4'h8;
_GEN_12 = _GEN_2 & enqIdx == 4'h9;
_GEN_13 = _GEN_2 & enqIdx == 4'hA;
_GEN_14 = _GEN_2 & enqIdx == 4'hB;
_GEN_15 = _GEN_2 & enqIdx == 4'hC;
_GEN_16 = _GEN_2 & enqIdx == 4'hD;
_GEN_17 = _GEN_2 & enqIdx == 4'hE;
_GEN_18 = _GEN_2 & (&enqIdx);
_GEN_20 = io_writeAddr & _GEN_19;
_GEN_22 = io_writeAddr & _GEN_21;
_GEN_24 = io_writeAddr & _GEN_23;
_GEN_26 = io_writeAddr & _GEN_25;
_GEN_28 = io_writeAddr & _GEN_27;
_GEN_30 = io_writeAddr & _GEN_29;
_GEN_32 = io_writeAddr & _GEN_31;
_GEN_34 = io_writeAddr & _GEN_33;
_GEN_36 = io_writeAddr & _GEN_35;
_GEN_38 = io_writeAddr & _GEN_37;
_GEN_40 = io_writeAddr & _GEN_39;
_GEN_42 = io_writeAddr & _GEN_41;
_GEN_44 = io_writeAddr & _GEN_43;
_GEN_46 = io_writeAddr & _GEN_45;
_GEN_48 = io_writeAddr & _GEN_47;
_GEN_49 = io_writeAddr & (&io_writeIdx);
_GEN_50 = io_writeData & _GEN_19;
_GEN_51 = io_writeData & _GEN_21;
_GEN_52 = io_writeData & _GEN_23;
_GEN_53 = io_writeData & _GEN_25;
_GEN_54 = io_writeData & _GEN_27;
_GEN_55 = io_writeData & _GEN_29;
_GEN_56 = io_writeData & _GEN_31;
_GEN_57 = io_writeData & _GEN_33;
_GEN_58 = io_writeData & _GEN_35;
_GEN_59 = io_writeData & _GEN_37;
_GEN_60 = io_writeData & _GEN_39;
_GEN_61 = io_writeData & _GEN_41;
_GEN_62 = io_writeData & _GEN_43;
_GEN_63 = io_writeData & _GEN_45;
_GEN_64 = io_writeData & _GEN_47;
_GEN_65 = io_writeData & (&io_writeIdx);
entries_0_valid <=
~(io_flush | _GEN_66 & drainIdx == 4'h0) & (_GEN_3 | entries_0_valid);
if (io_flush) begin
entries_0_robIdx <= 6'h0;
entries_0_addr <= 64'h0;
entries_0_data <= 64'h0;
entries_0_size <= 3'h0;
entries_1_robIdx <= 6'h0;
entries_1_addr <= 64'h0;
entries_1_data <= 64'h0;
entries_1_size <= 3'h0;
entries_2_robIdx <= 6'h0;
entries_2_addr <= 64'h0;
entries_2_data <= 64'h0;
entries_2_size <= 3'h0;
entries_3_robIdx <= 6'h0;
entries_3_addr <= 64'h0;
entries_3_data <= 64'h0;
entries_3_size <= 3'h0;
entries_4_robIdx <= 6'h0;
entries_4_addr <= 64'h0;
entries_4_data <= 64'h0;
entries_4_size <= 3'h0;
entries_5_robIdx <= 6'h0;
entries_5_addr <= 64'h0;
entries_5_data <= 64'h0;
entries_5_size <= 3'h0;
entries_6_robIdx <= 6'h0;
entries_6_addr <= 64'h0;
entries_6_data <= 64'h0;
entries_6_size <= 3'h0;
entries_7_robIdx <= 6'h0;
entries_7_addr <= 64'h0;
entries_7_data <= 64'h0;
entries_7_size <= 3'h0;
entries_8_robIdx <= 6'h0;
entries_8_addr <= 64'h0;
entries_8_data <= 64'h0;
entries_8_size <= 3'h0;
entries_9_robIdx <= 6'h0;
entries_9_addr <= 64'h0;
entries_9_data <= 64'h0;
entries_9_size <= 3'h0;
entries_10_robIdx <= 6'h0;
entries_10_addr <= 64'h0;
entries_10_data <= 64'h0;
entries_10_size <= 3'h0;
entries_11_robIdx <= 6'h0;
entries_11_addr <= 64'h0;
entries_11_data <= 64'h0;
entries_11_size <= 3'h0;
entries_12_robIdx <= 6'h0;
entries_12_addr <= 64'h0;
entries_12_data <= 64'h0;
entries_12_size <= 3'h0;
entries_13_robIdx <= 6'h0;
entries_13_addr <= 64'h0;
entries_13_data <= 64'h0;
entries_13_size <= 3'h0;
entries_14_robIdx <= 6'h0;
entries_14_addr <= 64'h0;
entries_14_data <= 64'h0;
entries_14_size <= 3'h0;
entries_15_robIdx <= 6'h0;
entries_15_addr <= 64'h0;
entries_15_data <= 64'h0;
entries_15_size <= 3'h0;
end
else begin
if (_GEN_3)
entries_0_robIdx <= io_enqRobIdx;
if (_GEN_20) begin
entries_0_addr <= io_addr;
entries_0_size <= io_size;
end
if (_GEN_50)
entries_0_data <= io_data;
if (_GEN_4)
entries_1_robIdx <= io_enqRobIdx;
if (_GEN_22) begin
entries_1_addr <= io_addr;
entries_1_size <= io_size;
end
if (_GEN_51)
entries_1_data <= io_data;
if (_GEN_5)
entries_2_robIdx <= io_enqRobIdx;
if (_GEN_24) begin
entries_2_addr <= io_addr;
entries_2_size <= io_size;
end
if (_GEN_52)
entries_2_data <= io_data;
if (_GEN_6)
entries_3_robIdx <= io_enqRobIdx;
if (_GEN_26) begin
entries_3_addr <= io_addr;
entries_3_size <= io_size;
end
if (_GEN_53)
entries_3_data <= io_data;
if (_GEN_7)
entries_4_robIdx <= io_enqRobIdx;
if (_GEN_28) begin
entries_4_addr <= io_addr;
entries_4_size <= io_size;
end
if (_GEN_54)
entries_4_data <= io_data;
if (_GEN_8)
entries_5_robIdx <= io_enqRobIdx;
if (_GEN_30) begin
entries_5_addr <= io_addr;
entries_5_size <= io_size;
end
if (_GEN_55)
entries_5_data <= io_data;
if (_GEN_9)
entries_6_robIdx <= io_enqRobIdx;
if (_GEN_32) begin
entries_6_addr <= io_addr;
entries_6_size <= io_size;
end
if (_GEN_56)
entries_6_data <= io_data;
if (_GEN_10)
entries_7_robIdx <= io_enqRobIdx;
if (_GEN_34) begin
entries_7_addr <= io_addr;
entries_7_size <= io_size;
end
if (_GEN_57)
entries_7_data <= io_data;
if (_GEN_11)
entries_8_robIdx <= io_enqRobIdx;
if (_GEN_36) begin
entries_8_addr <= io_addr;
entries_8_size <= io_size;
end
if (_GEN_58)
entries_8_data <= io_data;
if (_GEN_12)
entries_9_robIdx <= io_enqRobIdx;
if (_GEN_38) begin
entries_9_addr <= io_addr;
entries_9_size <= io_size;
end
if (_GEN_59)
entries_9_data <= io_data;
if (_GEN_13)
entries_10_robIdx <= io_enqRobIdx;
if (_GEN_40) begin
entries_10_addr <= io_addr;
entries_10_size <= io_size;
end
if (_GEN_60)
entries_10_data <= io_data;
if (_GEN_14)
entries_11_robIdx <= io_enqRobIdx;
if (_GEN_42) begin
entries_11_addr <= io_addr;
entries_11_size <= io_size;
end
if (_GEN_61)
entries_11_data <= io_data;
if (_GEN_15)
entries_12_robIdx <= io_enqRobIdx;
if (_GEN_44) begin
entries_12_addr <= io_addr;
entries_12_size <= io_size;
end
if (_GEN_62)
entries_12_data <= io_data;
if (_GEN_16)
entries_13_robIdx <= io_enqRobIdx;
if (_GEN_46) begin
entries_13_addr <= io_addr;
entries_13_size <= io_size;
end
if (_GEN_63)
entries_13_data <= io_data;
if (_GEN_17)
entries_14_robIdx <= io_enqRobIdx;
if (_GEN_48) begin
entries_14_addr <= io_addr;
entries_14_size <= io_size;
end
if (_GEN_64)
entries_14_data <= io_data;
if (_GEN_18)
entries_15_robIdx <= io_enqRobIdx;
if (_GEN_49) begin
entries_15_addr <= io_addr;
entries_15_size <= io_size;
end
if (_GEN_65)
entries_15_data <= io_data;
end
entries_0_addrValid <= ~io_flush & (_GEN_20 | ~_GEN_3 & entries_0_addrValid);
entries_0_dataValid <= ~io_flush & (_GEN_50 | ~_GEN_3 & entries_0_dataValid);
entries_0_committed <=
~io_flush
& (io_commitValid & entries_0_valid & entries_0_robIdx == io_commitRobIdx
| ~_GEN_3 & entries_0_committed);
entries_1_valid <=
~(io_flush | _GEN_66 & drainIdx == 4'h1) & (_GEN_4 | entries_1_valid);
entries_1_addrValid <= ~io_flush & (_GEN_22 | ~_GEN_4 & entries_1_addrValid);
entries_1_dataValid <= ~io_flush & (_GEN_51 | ~_GEN_4 & entries_1_dataValid);
entries_1_committed <=
~io_flush
& (io_commitValid & entries_1_valid & entries_1_robIdx == io_commitRobIdx
| ~_GEN_4 & entries_1_committed);
entries_2_valid <=
~(io_flush | _GEN_66 & drainIdx == 4'h2) & (_GEN_5 | entries_2_valid);
entries_2_addrValid <= ~io_flush & (_GEN_24 | ~_GEN_5 & entries_2_addrValid);
entries_2_dataValid <= ~io_flush & (_GEN_52 | ~_GEN_5 & entries_2_dataValid);
entries_2_committed <=
~io_flush
& (io_commitValid & entries_2_valid & entries_2_robIdx == io_commitRobIdx
| ~_GEN_5 & entries_2_committed);
entries_3_valid <=
~(io_flush | _GEN_66 & drainIdx == 4'h3) & (_GEN_6 | entries_3_valid);
entries_3_addrValid <= ~io_flush & (_GEN_26 | ~_GEN_6 & entries_3_addrValid);
entries_3_dataValid <= ~io_flush & (_GEN_53 | ~_GEN_6 & entries_3_dataValid);
entries_3_committed <=
~io_flush
& (io_commitValid & entries_3_valid & entries_3_robIdx == io_commitRobIdx
| ~_GEN_6 & entries_3_committed);
entries_4_valid <=
~(io_flush | _GEN_66 & drainIdx == 4'h4) & (_GEN_7 | entries_4_valid);
entries_4_addrValid <= ~io_flush & (_GEN_28 | ~_GEN_7 & entries_4_addrValid);
entries_4_dataValid <= ~io_flush & (_GEN_54 | ~_GEN_7 & entries_4_dataValid);
entries_4_committed <=
~io_flush
& (io_commitValid & entries_4_valid & entries_4_robIdx == io_commitRobIdx
| ~_GEN_7 & entries_4_committed);
entries_5_valid <=
~(io_flush | _GEN_66 & drainIdx == 4'h5) & (_GEN_8 | entries_5_valid);
entries_5_addrValid <= ~io_flush & (_GEN_30 | ~_GEN_8 & entries_5_addrValid);
entries_5_dataValid <= ~io_flush & (_GEN_55 | ~_GEN_8 & entries_5_dataValid);
entries_5_committed <=
~io_flush
& (io_commitValid & entries_5_valid & entries_5_robIdx == io_commitRobIdx
| ~_GEN_8 & entries_5_committed);
entries_6_valid <=
~(io_flush | _GEN_66 & drainIdx == 4'h6) & (_GEN_9 | entries_6_valid);
entries_6_addrValid <= ~io_flush & (_GEN_32 | ~_GEN_9 & entries_6_addrValid);
entries_6_dataValid <= ~io_flush & (_GEN_56 | ~_GEN_9 & entries_6_dataValid);
entries_6_committed <=
~io_flush
& (io_commitValid & entries_6_valid & entries_6_robIdx == io_commitRobIdx
| ~_GEN_9 & entries_6_committed);
entries_7_valid <=
~(io_flush | _GEN_66 & drainIdx == 4'h7) & (_GEN_10 | entries_7_valid);
entries_7_addrValid <= ~io_flush & (_GEN_34 | ~_GEN_10 & entries_7_addrValid);
entries_7_dataValid <= ~io_flush & (_GEN_57 | ~_GEN_10 & entries_7_dataValid);
entries_7_committed <=
~io_flush
& (io_commitValid & entries_7_valid & entries_7_robIdx == io_commitRobIdx
| ~_GEN_10 & entries_7_committed);
entries_8_valid <=
~(io_flush | _GEN_66 & drainIdx == 4'h8) & (_GEN_11 | entries_8_valid);
entries_8_addrValid <= ~io_flush & (_GEN_36 | ~_GEN_11 & entries_8_addrValid);
entries_8_dataValid <= ~io_flush & (_GEN_58 | ~_GEN_11 & entries_8_dataValid);
entries_8_committed <=
~io_flush
& (io_commitValid & entries_8_valid & entries_8_robIdx == io_commitRobIdx
| ~_GEN_11 & entries_8_committed);
entries_9_valid <=
~(io_flush | _GEN_66 & drainIdx == 4'h9) & (_GEN_12 | entries_9_valid);
entries_9_addrValid <= ~io_flush & (_GEN_38 | ~_GEN_12 & entries_9_addrValid);
entries_9_dataValid <= ~io_flush & (_GEN_59 | ~_GEN_12 & entries_9_dataValid);
entries_9_committed <=
~io_flush
& (io_commitValid & entries_9_valid & entries_9_robIdx == io_commitRobIdx
| ~_GEN_12 & entries_9_committed);
entries_10_valid <=
~(io_flush | _GEN_66 & drainIdx == 4'hA) & (_GEN_13 | entries_10_valid);
entries_10_addrValid <= ~io_flush & (_GEN_40 | ~_GEN_13 & entries_10_addrValid);
entries_10_dataValid <= ~io_flush & (_GEN_60 | ~_GEN_13 & entries_10_dataValid);
entries_10_committed <=
~io_flush
& (io_commitValid & entries_10_valid & entries_10_robIdx == io_commitRobIdx
| ~_GEN_13 & entries_10_committed);
entries_11_valid <=
~(io_flush | _GEN_66 & drainIdx == 4'hB) & (_GEN_14 | entries_11_valid);
entries_11_addrValid <= ~io_flush & (_GEN_42 | ~_GEN_14 & entries_11_addrValid);
entries_11_dataValid <= ~io_flush & (_GEN_61 | ~_GEN_14 & entries_11_dataValid);
entries_11_committed <=
~io_flush
& (io_commitValid & entries_11_valid & entries_11_robIdx == io_commitRobIdx
| ~_GEN_14 & entries_11_committed);
entries_12_valid <=
~(io_flush | _GEN_66 & drainIdx == 4'hC) & (_GEN_15 | entries_12_valid);
entries_12_addrValid <= ~io_flush & (_GEN_44 | ~_GEN_15 & entries_12_addrValid);
entries_12_dataValid <= ~io_flush & (_GEN_62 | ~_GEN_15 & entries_12_dataValid);
entries_12_committed <=
~io_flush
& (io_commitValid & entries_12_valid & entries_12_robIdx == io_commitRobIdx
| ~_GEN_15 & entries_12_committed);
entries_13_valid <=
~(io_flush | _GEN_66 & drainIdx == 4'hD) & (_GEN_16 | entries_13_valid);
entries_13_addrValid <= ~io_flush & (_GEN_46 | ~_GEN_16 & entries_13_addrValid);
entries_13_dataValid <= ~io_flush & (_GEN_63 | ~_GEN_16 & entries_13_dataValid);
entries_13_committed <=
~io_flush
& (io_commitValid & entries_13_valid & entries_13_robIdx == io_commitRobIdx
| ~_GEN_16 & entries_13_committed);
entries_14_valid <=
~(io_flush | _GEN_66 & drainIdx == 4'hE) & (_GEN_17 | entries_14_valid);
entries_14_addrValid <= ~io_flush & (_GEN_48 | ~_GEN_17 & entries_14_addrValid);
entries_14_dataValid <= ~io_flush & (_GEN_64 | ~_GEN_17 & entries_14_dataValid);
entries_14_committed <=
~io_flush
& (io_commitValid & entries_14_valid & entries_14_robIdx == io_commitRobIdx
| ~_GEN_17 & entries_14_committed);
entries_15_valid <=
~(io_flush | _GEN_66 & (&drainIdx)) & (_GEN_18 | entries_15_valid);
entries_15_addrValid <= ~io_flush & (_GEN_49 | ~_GEN_18 & entries_15_addrValid);
entries_15_dataValid <= ~io_flush & (_GEN_65 | ~_GEN_18 & entries_15_dataValid);
entries_15_committed <=
~io_flush
& (io_commitValid & entries_15_valid & entries_15_robIdx == io_commitRobIdx
| ~_GEN_18 & entries_15_committed);
end
end // always @(posedge)
assign io_enqIdx = enqIdx;
assign io_forwardValid =
|{entries_15_valid & entries_15_addrValid & entries_15_dataValid
& entries_15_robIdx < io_loadRobIdx & entries_15_addr[63:3] == io_loadAddr[63:3],
entries_14_valid & entries_14_addrValid & entries_14_dataValid
& entries_14_robIdx < io_loadRobIdx & entries_14_addr[63:3] == io_loadAddr[63:3],
entries_13_valid & entries_13_addrValid & entries_13_dataValid
& entries_13_robIdx < io_loadRobIdx & entries_13_addr[63:3] == io_loadAddr[63:3],
entries_12_valid & entries_12_addrValid & entries_12_dataValid
& entries_12_robIdx < io_loadRobIdx & entries_12_addr[63:3] == io_loadAddr[63:3],
entries_11_valid & entries_11_addrValid & entries_11_dataValid
& entries_11_robIdx < io_loadRobIdx & entries_11_addr[63:3] == io_loadAddr[63:3],
entries_10_valid & entries_10_addrValid & entries_10_dataValid
& entries_10_robIdx < io_loadRobIdx & entries_10_addr[63:3] == io_loadAddr[63:3],
entries_9_valid & entries_9_addrValid & entries_9_dataValid
& entries_9_robIdx < io_loadRobIdx & entries_9_addr[63:3] == io_loadAddr[63:3],
entries_8_valid & entries_8_addrValid & entries_8_dataValid
& entries_8_robIdx < io_loadRobIdx & entries_8_addr[63:3] == io_loadAddr[63:3],
entries_7_valid & entries_7_addrValid & entries_7_dataValid
& entries_7_robIdx < io_loadRobIdx & entries_7_addr[63:3] == io_loadAddr[63:3],
entries_6_valid & entries_6_addrValid & entries_6_dataValid
& entries_6_robIdx < io_loadRobIdx & entries_6_addr[63:3] == io_loadAddr[63:3],
entries_5_valid & entries_5_addrValid & entries_5_dataValid
& entries_5_robIdx < io_loadRobIdx & entries_5_addr[63:3] == io_loadAddr[63:3],
entries_4_valid & entries_4_addrValid & entries_4_dataValid
& entries_4_robIdx < io_loadRobIdx & entries_4_addr[63:3] == io_loadAddr[63:3],
entries_3_valid & entries_3_addrValid & entries_3_dataValid
& entries_3_robIdx < io_loadRobIdx & entries_3_addr[63:3] == io_loadAddr[63:3],
entries_2_valid & entries_2_addrValid & entries_2_dataValid
& entries_2_robIdx < io_loadRobIdx & entries_2_addr[63:3] == io_loadAddr[63:3],
entries_1_valid & entries_1_addrValid & entries_1_dataValid
& entries_1_robIdx < io_loadRobIdx & entries_1_addr[63:3] == io_loadAddr[63:3],
entries_0_valid & entries_0_addrValid & entries_0_dataValid
& entries_0_robIdx < io_loadRobIdx & entries_0_addr[63:3] == io_loadAddr[63:3]};
assign io_drainValid = |_io_drainValid_T;
assign io_drain_addr = _GEN[drainIdx];
assign io_drain_data = _GEN_0[drainIdx];
assign io_drain_size = _GEN_1[drainIdx];
endmodule

View File

@@ -0,0 +1,15 @@
// Generated by CIRCT firtool-1.139.0
module WriteBackStage(
input io_valid,
input [5:0] io_physDest,
input [63:0] io_data,
output io_wen,
output [5:0] io_waddr,
output [63:0] io_wdata
);
assign io_wen = io_valid;
assign io_waddr = io_physDest;
assign io_wdata = io_data;
endmodule

View File

@@ -0,0 +1,27 @@
// Generated by CIRCT firtool-1.139.0
// VCS coverage exclude_file
module data_1024x256(
input [9:0] R0_addr,
input R0_en,
R0_clk,
output [255:0] R0_data,
input [9:0] W0_addr,
input W0_en,
W0_clk,
input [255:0] W0_data
);
reg [255:0] Memory[0:1023];
reg _R0_en_d0;
reg [9:0] _R0_addr_d0;
always @(posedge R0_clk) begin
_R0_en_d0 <= R0_en;
_R0_addr_d0 <= R0_addr;
end // always @(posedge)
always @(posedge W0_clk) begin
if (W0_en)
Memory[W0_addr] <= W0_data;
end // always @(posedge)
assign R0_data = _R0_en_d0 ? Memory[_R0_addr_d0] : 256'bx;
endmodule

View File

@@ -0,0 +1,27 @@
// Generated by CIRCT firtool-1.139.0
// VCS coverage exclude_file
module data_64x4096(
input [5:0] R0_addr,
input R0_en,
R0_clk,
output [4095:0] R0_data,
input [5:0] W0_addr,
input W0_en,
W0_clk,
input [4095:0] W0_data
);
reg [4095:0] Memory[0:63];
reg _R0_en_d0;
reg [5:0] _R0_addr_d0;
always @(posedge R0_clk) begin
_R0_en_d0 <= R0_en;
_R0_addr_d0 <= R0_addr;
end // always @(posedge)
always @(posedge W0_clk) begin
if (W0_en)
Memory[W0_addr] <= W0_data;
end // always @(posedge)
assign R0_data = _R0_en_d0 ? Memory[_R0_addr_d0] : 4096'bx;
endmodule

31
generated-ooo/filelist.f Normal file
View File

@@ -0,0 +1,31 @@
tags_1024x204.sv
data_1024x256.sv
ICache.sv
Frontend.sv
Decoder.sv
IDStage.sv
RenameTable.sv
FreeList.sv
ROB.sv
RenameStage.sv
ReservationStation.sv
IssueQueue.sv
IssueStage.sv
PhysicalRegFile.sv
ALU.sv
BranchUnit.sv
ExecStage.sv
WriteBackStage.sv
CommitStage.sv
LoadQueue.sv
StoreQueue.sv
DTLB.sv
PageTableWalker.sv
MMU.sv
tags_64x416.sv
data_64x4096.sv
DCache.sv
LSU.sv
CSRFile.sv
OoOBackend.sv
Core.sv

View File

@@ -0,0 +1,27 @@
// Generated by CIRCT firtool-1.139.0
// VCS coverage exclude_file
module tags_1024x204(
input [9:0] R0_addr,
input R0_en,
R0_clk,
output [203:0] R0_data,
input [9:0] W0_addr,
input W0_en,
W0_clk,
input [203:0] W0_data
);
reg [203:0] Memory[0:1023];
reg _R0_en_d0;
reg [9:0] _R0_addr_d0;
always @(posedge R0_clk) begin
_R0_en_d0 <= R0_en;
_R0_addr_d0 <= R0_addr;
end // always @(posedge)
always @(posedge W0_clk) begin
if (W0_en)
Memory[W0_addr] <= W0_data;
end // always @(posedge)
assign R0_data = _R0_en_d0 ? Memory[_R0_addr_d0] : 204'bx;
endmodule

View File

@@ -0,0 +1,27 @@
// Generated by CIRCT firtool-1.139.0
// VCS coverage exclude_file
module tags_64x416(
input [5:0] R0_addr,
input R0_en,
R0_clk,
output [415:0] R0_data,
input [5:0] W0_addr,
input W0_en,
W0_clk,
input [415:0] W0_data
);
reg [415:0] Memory[0:63];
reg _R0_en_d0;
reg [5:0] _R0_addr_d0;
always @(posedge R0_clk) begin
_R0_en_d0 <= R0_en;
_R0_addr_d0 <= R0_addr;
end // always @(posedge)
always @(posedge W0_clk) begin
if (W0_en)
Memory[W0_addr] <= W0_data;
end // always @(posedge)
assign R0_data = _R0_en_d0 ? Memory[_R0_addr_d0] : 416'bx;
endmodule

View File

@@ -0,0 +1,38 @@
// Generated by CIRCT firtool-1.139.0
// Users can define 'PRINTF_COND' to add an extra gate to prints.
`ifndef PRINTF_COND_
`ifdef PRINTF_COND
`define PRINTF_COND_ (`PRINTF_COND)
`else // PRINTF_COND
`define PRINTF_COND_ 1
`endif // PRINTF_COND
`endif // not def PRINTF_COND_
module OoOBackend_Verification();
`ifndef SYNTHESIS
always @(posedge OoOBackend.clock) begin
automatic logic [63:0] _GEN;
_GEN =
OoOBackend.memSlot
? OoOBackend.issue_io_out_1_decoded_pc
: OoOBackend.issue_io_out_0_decoded_pc;
if ((`PRINTF_COND_) & OoOBackend._storeEnq_T & _GEN < 64'h80000050
& ~OoOBackend.reset)
$fwrite(32'h80000002,
"[mem-issue] pc=0x%x inst=0x%x isLoad=%d isStore=%d prs1=%d src1=0x%x immS=0x%x addr=0x%x ready=%d\n",
_GEN,
OoOBackend.memSlot
? OoOBackend.issue_io_out_1_decoded_inst
: OoOBackend.issue_io_out_0_decoded_inst, OoOBackend._layer_probe_0,
OoOBackend._layer_probe_1,
OoOBackend.memSlot
? OoOBackend.issue_io_out_1_prs1
: OoOBackend.issue_io_out_0_prs1, OoOBackend.memSrc1,
OoOBackend._layer_probe, OoOBackend.memAddr,
OoOBackend.memSlot
? OoOBackend.issue_io_outReady_1
: OoOBackend.issue_io_outReady_0);
end // always @(posedge)
`endif // not def SYNTHESIS
endmodule

View File

@@ -0,0 +1,32 @@
// Generated by CIRCT firtool-1.139.0
// Users can define 'PRINTF_COND' to add an extra gate to prints.
`ifndef PRINTF_COND_
`ifdef PRINTF_COND
`define PRINTF_COND_ (`PRINTF_COND)
`else // PRINTF_COND
`define PRINTF_COND_ 1
`endif // PRINTF_COND
`endif // not def PRINTF_COND_
module RenameStage_Verification();
`ifndef SYNTHESIS
always @(posedge RenameStage.clock) begin
if ((`PRINTF_COND_) & RenameStage.io_outValid_0_0
& RenameStage.io_in_0_pc < 64'h80000050 & ~RenameStage.reset)
$fwrite(32'h80000002,
"[rename] pc=0x%x inst=0x%x rs1=%d prs1=%d src1Ready=%d src1FromOlder=%d rd=%d prd=%d\n",
RenameStage.io_in_0_pc, RenameStage.io_in_0_inst, RenameStage.io_in_0_rs1,
RenameStage.table_io_prs1_0, RenameStage.io_out_0_src1Ready_0, 1'h0,
RenameStage.io_in_0_rd, RenameStage.io_out_0_prd_0);
if ((`PRINTF_COND_) & RenameStage.io_outValid_1_0
& RenameStage.io_in_1_pc < 64'h80000050 & ~RenameStage.reset)
$fwrite(32'h80000002,
"[rename] pc=0x%x inst=0x%x rs1=%d prs1=%d src1Ready=%d src1FromOlder=%d rd=%d prd=%d\n",
RenameStage.io_in_1_pc, RenameStage.io_in_1_inst, RenameStage.io_in_1_rs1,
RenameStage.table_io_prs1_1, RenameStage.io_out_1_src1Ready_0,
RenameStage.src1FromOlder, RenameStage.io_in_1_rd,
RenameStage.io_out_1_prd_0);
end // always @(posedge)
`endif // not def SYNTHESIS
endmodule

View File

@@ -0,0 +1,5 @@
// Generated by CIRCT firtool-1.139.0
`ifndef layers_Core_Verification_Assert
`define layers_Core_Verification_Assert
`include "layers-Core-Verification.sv"
`endif // not def layers_Core_Verification_Assert

View File

@@ -0,0 +1,5 @@
// Generated by CIRCT firtool-1.139.0
`ifndef layers_Core_Verification_Assume
`define layers_Core_Verification_Assume
`include "layers-Core-Verification.sv"
`endif // not def layers_Core_Verification_Assume

View File

@@ -0,0 +1,5 @@
// Generated by CIRCT firtool-1.139.0
`ifndef layers_Core_Verification_Cover
`define layers_Core_Verification_Cover
`include "layers-Core-Verification.sv"
`endif // not def layers_Core_Verification_Cover

View File

@@ -0,0 +1,4 @@
// Generated by CIRCT firtool-1.139.0
`ifndef layers_Core_Verification
`define layers_Core_Verification
`endif // not def layers_Core_Verification

View File

@@ -0,0 +1,6 @@
// Generated by CIRCT firtool-1.139.0
`ifndef layers_OoOBackend_Verification
`define layers_OoOBackend_Verification
`include "layers-RenameStage-Verification.sv"
bind OoOBackend OoOBackend_Verification verification ();
`endif // not def layers_OoOBackend_Verification

View File

@@ -0,0 +1,5 @@
// Generated by CIRCT firtool-1.139.0
`ifndef layers_RenameStage_Verification
`define layers_RenameStage_Verification
bind RenameStage RenameStage_Verification verification ();
`endif // not def layers_RenameStage_Verification