OPAE rtl fixes
This commit is contained in:
48
hw/rtl/cache/VX_bank.v
vendored
48
hw/rtl/cache/VX_bank.v
vendored
@@ -105,35 +105,33 @@ module VX_bank #(
|
||||
);
|
||||
|
||||
`DEBUG_BEGIN
|
||||
|
||||
wire[31:0] debug_use_pc_st0;
|
||||
wire[1:0] debug_wb_st0;
|
||||
wire[4:0] debug_rd_st0;
|
||||
wire[`NW_BITS-1:0] debug_warp_num_st0;
|
||||
wire[2:0] debug_mem_read_st0;
|
||||
wire[2:0] debug_mem_write_st0;
|
||||
wire[`REQS_BITS-1:0] debug_tid_st0;
|
||||
wire[31:0] debug_use_pc_st0;
|
||||
wire[1:0] debug_wb_st0;
|
||||
wire[4:0] debug_rd_st0;
|
||||
wire[`NW_BITS-1:0] debug_warp_num_st0;
|
||||
wire[2:0] debug_mem_read_st0;
|
||||
wire[2:0] debug_mem_write_st0;
|
||||
wire[`REQS_BITS-1:0] debug_tid_st0;
|
||||
|
||||
|
||||
wire[31:0] debug_use_pc_st1e;
|
||||
wire[1:0] debug_wb_st1e;
|
||||
wire[4:0] debug_rd_st1e;
|
||||
wire[`NW_BITS-1:0] debug_warp_num_st1e;
|
||||
wire[2:0] debug_mem_read_st1e;
|
||||
wire[2:0] debug_mem_write_st1e;
|
||||
wire[`REQS_BITS-1:0] debug_tid_st1e;
|
||||
wire[31:0] debug_use_pc_st1e;
|
||||
wire[1:0] debug_wb_st1e;
|
||||
wire[4:0] debug_rd_st1e;
|
||||
wire[`NW_BITS-1:0] debug_warp_num_st1e;
|
||||
wire[2:0] debug_mem_read_st1e;
|
||||
wire[2:0] debug_mem_write_st1e;
|
||||
wire[`REQS_BITS-1:0] debug_tid_st1e;
|
||||
|
||||
|
||||
wire[31:0] debug_use_pc_st2;
|
||||
wire[1:0] debug_wb_st2;
|
||||
wire[4:0] debug_rd_st2;
|
||||
wire[`NW_BITS-1:0] debug_warp_num_st2;
|
||||
wire[2:0] debug_mem_read_st2;
|
||||
wire[2:0] debug_mem_write_st2;
|
||||
wire[`REQS_BITS-1:0] debug_tid_st2;
|
||||
wire[31:0] debug_use_pc_st2;
|
||||
wire[1:0] debug_wb_st2;
|
||||
wire[4:0] debug_rd_st2;
|
||||
wire[`NW_BITS-1:0] debug_warp_num_st2;
|
||||
wire[2:0] debug_mem_read_st2;
|
||||
wire[2:0] debug_mem_write_st2;
|
||||
wire[`REQS_BITS-1:0] debug_tid_st2;
|
||||
`DEBUG_END
|
||||
|
||||
|
||||
wire snrq_pop;
|
||||
wire snrq_empty;
|
||||
wire snrq_full;
|
||||
@@ -505,6 +503,8 @@ module VX_bank #(
|
||||
assign mrvq_init_ready_state_st2 = mrvq_init_ready_state_unqual_st2 || mrvq_init_ready_state_hazard_st0_st1 || mrvq_init_ready_state_hazard_st1e_st1;
|
||||
|
||||
VX_cache_miss_resrv #(
|
||||
.BANK_ID (BANK_ID),
|
||||
.CACHE_ID (CACHE_ID),
|
||||
.BANK_LINE_SIZE (BANK_LINE_SIZE),
|
||||
.NUM_BANKS (NUM_BANKS),
|
||||
.WORD_SIZE (WORD_SIZE),
|
||||
@@ -681,7 +681,7 @@ module VX_bank #(
|
||||
|| msrq_push_stall
|
||||
|| dram_fill_req_stall;
|
||||
|
||||
`ifdef DBG_PRINT_BANK
|
||||
`ifdef DBG_PRINT_CACHE_BANK
|
||||
always_ff @(posedge clk) begin
|
||||
if (dram_fill_req_valid && dram_fill_req_ready) begin
|
||||
$display("%t: bank%02d:%01d dram_fill req: addr=%0h", $time, CACHE_ID, BANK_ID, `LINE_TO_BYTE_ADDR(dram_fill_req_addr, BANK_ID));
|
||||
|
||||
2
hw/rtl/cache/VX_cache.v
vendored
2
hw/rtl/cache/VX_cache.v
vendored
@@ -228,7 +228,7 @@ module VX_cache #(
|
||||
.NUM_BANKS (NUM_BANKS),
|
||||
.WORD_SIZE (WORD_SIZE),
|
||||
.NUM_REQUESTS (NUM_REQUESTS)
|
||||
) cache_core_req_bank_sell (
|
||||
) cache_core_req_bank_sel (
|
||||
.core_req_valid (core_req_valid),
|
||||
.core_req_addr (core_req_addr),
|
||||
.per_bank_valids (per_bank_valids)
|
||||
|
||||
31
hw/rtl/cache/VX_cache_core_req_bank_sel.v
vendored
31
hw/rtl/cache/VX_cache_core_req_bank_sel.v
vendored
@@ -11,25 +11,22 @@ module VX_cache_core_req_bank_sel #(
|
||||
// Number of Word requests per cycle {1, 2, 4, 8, ...}
|
||||
parameter NUM_REQUESTS = 0
|
||||
) (
|
||||
input wire [NUM_REQUESTS-1:0] core_req_valid,
|
||||
input wire [NUM_REQUESTS-1:0][31:0] core_req_addr,
|
||||
input wire [NUM_REQUESTS-1:0] core_req_valid,
|
||||
input wire [NUM_REQUESTS-1:0][31:0] core_req_addr,
|
||||
output reg [NUM_BANKS-1:0][NUM_REQUESTS-1:0] per_bank_valids
|
||||
);
|
||||
integer i;
|
||||
|
||||
output reg [NUM_BANKS-1:0][NUM_REQUESTS-1:0] per_bank_valids
|
||||
);
|
||||
|
||||
generate
|
||||
integer i;
|
||||
always @(*) begin
|
||||
per_bank_valids = 0;
|
||||
for (i = 0; i < NUM_REQUESTS; i++) begin
|
||||
if (NUM_BANKS == 1) begin
|
||||
// If there is only one bank, then only map requests to that bank
|
||||
per_bank_valids[0][i] = core_req_valid[i];
|
||||
end else begin
|
||||
per_bank_valids[core_req_addr[i][`BANK_SELECT_ADDR_RNG]][i] = core_req_valid[i];
|
||||
end
|
||||
always @(*) begin
|
||||
per_bank_valids = 0;
|
||||
for (i = 0; i < NUM_REQUESTS; i++) begin
|
||||
if (NUM_BANKS == 1) begin
|
||||
// If there is only one bank, then only map requests to that bank
|
||||
per_bank_valids[0][i] = core_req_valid[i];
|
||||
end else begin
|
||||
per_bank_valids[core_req_addr[i][`BANK_SELECT_ADDR_RNG]][i] = core_req_valid[i];
|
||||
end
|
||||
end
|
||||
endgenerate
|
||||
end
|
||||
|
||||
endmodule
|
||||
19
hw/rtl/cache/VX_cache_miss_resrv.v
vendored
19
hw/rtl/cache/VX_cache_miss_resrv.v
vendored
@@ -1,6 +1,8 @@
|
||||
`include "VX_cache_config.vh"
|
||||
|
||||
module VX_cache_miss_resrv #(
|
||||
parameter CACHE_ID = 0,
|
||||
parameter BANK_ID = 0,
|
||||
// Size of line inside a bank in bytes
|
||||
parameter BANK_LINE_SIZE = 0,
|
||||
// Number of banks {1, 2, 4, 8,...}
|
||||
@@ -141,4 +143,21 @@ module VX_cache_miss_resrv #(
|
||||
end
|
||||
end
|
||||
|
||||
`ifdef DBG_PRINT_CACHE_MSRQ
|
||||
always_ff @(posedge clk) begin
|
||||
if (mrvq_push || mrvq_pop) begin
|
||||
$write("%t: bank%02d:%01d msrq: push=%b pop=%b", $time, CACHE_ID, BANK_ID, mrvq_push, mrvq_pop);
|
||||
for (int i = 0; i < MRVQ_SIZE; i++) begin
|
||||
if (valid_table[i]) begin
|
||||
$write(" ");
|
||||
if (i == head_ptr) $write("*");
|
||||
if (~ready_table[i]) $write("!");
|
||||
$write("addr%0d=%0h", i, `LINE_TO_BYTE_ADDR(addr_table[i], BANK_ID));
|
||||
end
|
||||
end
|
||||
$write("\n");
|
||||
end
|
||||
end
|
||||
`endif
|
||||
|
||||
endmodule
|
||||
2
hw/rtl/cache/VX_snp_forwarder.v
vendored
2
hw/rtl/cache/VX_snp_forwarder.v
vendored
@@ -112,7 +112,7 @@ module VX_snp_forwarder #(
|
||||
assign snp_fwdin_ready[i] = fwdin_ready && (fwdin_sel == `REQS_BITS'(i));
|
||||
end
|
||||
|
||||
`ifdef DBG_PRINT_SNP_FWD
|
||||
`ifdef DBG_PRINT_CACHE_SNP
|
||||
always_ff @(posedge clk) begin
|
||||
if (snp_req_valid && snp_req_ready) begin
|
||||
$display("%t: snp req: addr=%0h, tag=%0h", $time, snp_req_addr, snp_req_tag);
|
||||
|
||||
Reference in New Issue
Block a user