snooping response handling fix
This commit is contained in:
59
hw/rtl/cache/VX_cache_miss_resrv.v
vendored
59
hw/rtl/cache/VX_cache_miss_resrv.v
vendored
@@ -18,42 +18,38 @@ module VX_cache_miss_resrv #(
|
||||
input wire reset,
|
||||
|
||||
// Miss enqueue
|
||||
input wire miss_add,
|
||||
input wire[`LINE_ADDR_WIDTH-1:0] miss_add_addr,
|
||||
input wire[`BASE_ADDR_BITS-1:0] miss_add_wsel,
|
||||
input wire[`WORD_WIDTH-1:0] miss_add_data,
|
||||
input wire[`REQS_BITS-1:0] miss_add_tid,
|
||||
input wire[CORE_TAG_WIDTH-1:0] miss_add_tag,
|
||||
input wire[`BYTE_EN_BITS-1:0] miss_add_mem_read,
|
||||
input wire[`BYTE_EN_BITS-1:0] miss_add_mem_write,
|
||||
output wire miss_resrv_full,
|
||||
output wire miss_resrv_stop,
|
||||
input wire miss_add,
|
||||
input wire[`LINE_ADDR_WIDTH-1:0] miss_add_addr,
|
||||
input wire[`BASE_ADDR_BITS-1:0] miss_add_wsel,
|
||||
input wire[`WORD_WIDTH-1:0] miss_add_data,
|
||||
input wire[`REQS_BITS-1:0] miss_add_tid,
|
||||
input wire[CORE_TAG_WIDTH-1:0] miss_add_tag,
|
||||
input wire[`BYTE_EN_BITS-1:0] miss_add_mem_read,
|
||||
input wire[`BYTE_EN_BITS-1:0] miss_add_mem_write,
|
||||
output wire miss_resrv_full,
|
||||
output wire miss_resrv_stop,
|
||||
|
||||
// Broadcast Fill
|
||||
input wire is_fill_st1,
|
||||
|
||||
`IGNORE_WARNINGS_BEGIN
|
||||
// TODO: should fix this
|
||||
input wire[`LINE_ADDR_WIDTH-1:0] fill_addr_st1,
|
||||
`IGNORE_WARNINGS_END
|
||||
input wire is_fill_st1,
|
||||
input wire[`LINE_ADDR_WIDTH-1:0] fill_addr_st1,
|
||||
|
||||
// Miss dequeue
|
||||
input wire miss_resrv_pop,
|
||||
output wire miss_resrv_valid_st0,
|
||||
output wire[`LINE_ADDR_WIDTH-1:0] miss_resrv_addr_st0,
|
||||
output wire[`BASE_ADDR_BITS-1:0] miss_resrv_wsel_st0,
|
||||
output wire[`WORD_WIDTH-1:0] miss_resrv_data_st0,
|
||||
output wire[`REQS_BITS-1:0] miss_resrv_tid_st0,
|
||||
output wire[CORE_TAG_WIDTH-1:0] miss_resrv_tag_st0,
|
||||
output wire[`BYTE_EN_BITS-1:0] miss_resrv_mem_read_st0,
|
||||
output wire[`BYTE_EN_BITS-1:0] miss_resrv_mem_write_st0
|
||||
input wire miss_resrv_pop,
|
||||
output wire miss_resrv_valid_st0,
|
||||
output wire[`LINE_ADDR_WIDTH-1:0] miss_resrv_addr_st0,
|
||||
output wire[`BASE_ADDR_BITS-1:0] miss_resrv_wsel_st0,
|
||||
output wire[`WORD_WIDTH-1:0] miss_resrv_data_st0,
|
||||
output wire[`REQS_BITS-1:0] miss_resrv_tid_st0,
|
||||
output wire[CORE_TAG_WIDTH-1:0] miss_resrv_tag_st0,
|
||||
output wire[`BYTE_EN_BITS-1:0] miss_resrv_mem_read_st0,
|
||||
output wire[`BYTE_EN_BITS-1:0] miss_resrv_mem_write_st0
|
||||
);
|
||||
reg [`MRVQ_METADATA_WIDTH-1:0] metadata_table[MRVQ_SIZE-1:0];
|
||||
reg [`MRVQ_METADATA_WIDTH-1:0] metadata_table[MRVQ_SIZE-1:0];
|
||||
reg [MRVQ_SIZE-1:0][`LINE_ADDR_WIDTH-1:0] addr_table;
|
||||
reg [MRVQ_SIZE-1:0] valid_table;
|
||||
reg [MRVQ_SIZE-1:0] ready_table;
|
||||
reg [`LOG2UP(MRVQ_SIZE)-1:0] head_ptr;
|
||||
reg [`LOG2UP(MRVQ_SIZE)-1:0] tail_ptr;
|
||||
reg [MRVQ_SIZE-1:0] valid_table;
|
||||
reg [MRVQ_SIZE-1:0] ready_table;
|
||||
reg [`LOG2UP(MRVQ_SIZE)-1:0] head_ptr;
|
||||
reg [`LOG2UP(MRVQ_SIZE)-1:0] tail_ptr;
|
||||
|
||||
reg [`LOG2UP(MRVQ_SIZE+1)-1:0] size;
|
||||
|
||||
@@ -99,7 +95,8 @@ module VX_cache_miss_resrv #(
|
||||
tail_ptr <= tail_ptr + 1;
|
||||
end
|
||||
|
||||
if (update_ready) begin
|
||||
// update entry as 'ready' during DRAM fill response
|
||||
if (update_ready) begin
|
||||
ready_table <= ready_table | make_ready;
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user