fixed afu cci write bug, fixed profile cache write miss bug, fixed bram byteenable inferance
This commit is contained in:
7
hw/rtl/cache/VX_bank.v
vendored
7
hw/rtl/cache/VX_bank.v
vendored
@@ -441,7 +441,6 @@ end
|
||||
.wwsel_in (wsel_st01),
|
||||
.wbyteen_in (byteen_st01),
|
||||
.writeword_in (writeword_st01),
|
||||
.readdata_in (readdata_st1),
|
||||
.filldata_in (filldata_st1)
|
||||
);
|
||||
|
||||
@@ -683,9 +682,9 @@ end
|
||||
`SCOPE_ASSIGN (addr_st1, `LINE_TO_BYTE_ADDR(addr_st1, BANK_ID));
|
||||
|
||||
`ifdef PERF_ENABLE
|
||||
assign perf_read_misses = !pipeline_stall && miss_st1 && !is_mshr_st1 && !mem_rw_st1;
|
||||
assign perf_write_misses = !pipeline_stall && miss_st1 && !is_mshr_st1 && mem_rw_st1;
|
||||
assign perf_pipe_stalls = pipeline_stall || mshr_almost_full || dreq_going_full;
|
||||
assign perf_read_misses = valid_st1 && !pipeline_stall && !is_fill_st1 && !is_mshr_st1 && miss_st1 && !mem_rw_st1;
|
||||
assign perf_write_misses = valid_st1 && !pipeline_stall && !is_fill_st1 && !is_mshr_st1 && miss_st1 && mem_rw_st1;
|
||||
assign perf_pipe_stalls = pipeline_stall || mshr_almost_full || dreq_almost_full;
|
||||
assign perf_mshr_stalls = mshr_almost_full;
|
||||
`endif
|
||||
|
||||
|
||||
4
hw/rtl/cache/VX_cache.v
vendored
4
hw/rtl/cache/VX_cache.v
vendored
@@ -438,10 +438,10 @@ module VX_cache #(
|
||||
perf_pipe_stalls <= 0;
|
||||
perf_crsp_stalls <= 0;
|
||||
end else begin
|
||||
perf_core_reads <= perf_core_reads + 64'(perf_core_reads_per_cycle);
|
||||
perf_core_reads <= perf_core_reads + 64'(perf_core_reads_per_cycle);
|
||||
perf_core_writes <= perf_core_writes + 64'(perf_core_writes_per_cycle);
|
||||
perf_read_misses <= perf_read_misses + 64'(perf_read_miss_per_cycle);
|
||||
perf_write_misses <= perf_write_misses + 64'(perf_write_miss_per_cycle);
|
||||
perf_write_misses <= perf_write_misses+ 64'(perf_write_miss_per_cycle);
|
||||
perf_mshr_stalls <= perf_mshr_stalls + 64'(perf_mshr_stall_per_cycle);
|
||||
perf_pipe_stalls <= perf_pipe_stalls + 64'(perf_pipe_stall_per_cycle);
|
||||
perf_crsp_stalls <= perf_crsp_stalls + 64'(perf_crsp_stall_per_cycle);
|
||||
|
||||
21
hw/rtl/cache/VX_data_access.v
vendored
21
hw/rtl/cache/VX_data_access.v
vendored
@@ -56,7 +56,6 @@ module VX_data_access #(
|
||||
input wire [WORD_SIZE-1:0] wbyteen_in,
|
||||
input wire wfill_in,
|
||||
input wire [`WORD_WIDTH-1:0] writeword_in,
|
||||
input wire [`CACHE_LINE_WIDTH-1:0] readdata_in,
|
||||
input wire [`CACHE_LINE_WIDTH-1:0] filldata_in
|
||||
);
|
||||
|
||||
@@ -98,24 +97,14 @@ module VX_data_access #(
|
||||
wire [`WORDS_PER_LINE-1:0][`WORD_WIDTH-1:0] writedata_qual;
|
||||
|
||||
if (`WORD_SELECT_BITS != 0) begin
|
||||
for (genvar i = 0; i < `WORDS_PER_LINE; i++) begin
|
||||
wire [`WORD_WIDTH-1:0] readdata_sel = readdata_in[i * `WORD_WIDTH +: `WORD_WIDTH];
|
||||
wire [`WORD_WIDTH-1:0] writeword_qual;
|
||||
for (genvar j = 0; j < WORD_SIZE; j++) begin
|
||||
assign writeword_qual[j * 8 +: 8] = wbyteen_in[j] ? writeword_in[j * 8 +: 8] : readdata_sel[j * 8 +: 8];
|
||||
end
|
||||
wire wenable = (wwsel_in == `WORD_SELECT_BITS'(i));
|
||||
assign wbyteen_qual[i] = wenable ? wbyteen_in : {WORD_SIZE{1'b0}};
|
||||
assign writedata_qual[i] = wenable ? writeword_qual : readdata_sel;
|
||||
for (genvar i = 0; i < `WORDS_PER_LINE; i++) begin
|
||||
assign wbyteen_qual[i] = (wwsel_in == `WORD_SELECT_BITS'(i)) ? wbyteen_in : {WORD_SIZE{1'b0}};
|
||||
assign writedata_qual[i] = writeword_in;
|
||||
end
|
||||
end else begin
|
||||
`UNUSED_VAR (wwsel_in)
|
||||
wire [`WORD_WIDTH-1:0] writeword_qual;
|
||||
for (genvar i = 0; i < WORD_SIZE; i++) begin
|
||||
assign writeword_qual[i * 8 +: 8] = wbyteen_in[i] ? writeword_in[i * 8 +: 8] : readdata_in[i * 8 +: 8];
|
||||
end
|
||||
assign wbyteen_qual = wbyteen_in;
|
||||
assign writedata_qual = writeword_qual;
|
||||
assign writedata_qual = writeword_in;
|
||||
end
|
||||
|
||||
assign write_enable = writeen_in && !stall;
|
||||
@@ -141,7 +130,7 @@ module VX_data_access #(
|
||||
for (genvar i = 0; i < WORD_SIZE; i++) begin
|
||||
assign writeword_qual[i * 8 +: 8] = wbyteen_in[i] ? writeword_in[i * 8 +: 8] : read_data[i * 8 +: 8];
|
||||
end
|
||||
assign dirtyb_out = read_dirtyb | ({WORD_SIZE{rw_hazard}} & wbyteen_in);
|
||||
assign dirtyb_out = read_dirtyb | ({WORD_SIZE{rw_hazard}} & wbyteen_in);
|
||||
assign readdata_out = rw_hazard ? (wfill_in ? filldata_in : writeword_qual) : read_data;
|
||||
end
|
||||
|
||||
|
||||
3
hw/rtl/cache/VX_data_store.v
vendored
3
hw/rtl/cache/VX_data_store.v
vendored
@@ -48,13 +48,14 @@ module VX_data_store #(
|
||||
VX_dp_ram #(
|
||||
.DATAW(CACHE_LINE_SIZE * 8),
|
||||
.SIZE(`LINES_PER_BANK),
|
||||
.BYTEENW(CACHE_LINE_SIZE),
|
||||
.RWCHECK(1)
|
||||
) data (
|
||||
.clk(clk),
|
||||
.waddr(write_addr),
|
||||
.raddr(read_addr),
|
||||
.wren(write_enable),
|
||||
.byteen(1'b1),
|
||||
.byteen(byte_enable),
|
||||
.rden(1'b1),
|
||||
.din(write_data),
|
||||
.dout(read_data)
|
||||
|
||||
Reference in New Issue
Block a user