L2 and L1 using different block size support, RTLsim fixes, dram_rsp_ready optimization
This commit is contained in:
@@ -45,19 +45,19 @@ module VX_avs_wrapper #(
|
||||
reg [AVS_BANKS_BITS-1:0] avs_bankselect_r;
|
||||
reg [AVS_BURSTW-1:0] avs_burstcount_r;
|
||||
|
||||
wire avs_rtq_push = !dram_req_rw && dram_req_valid && dram_req_ready;
|
||||
wire avs_rtq_pop = dram_rsp_valid && dram_rsp_ready;
|
||||
wire avs_reqq_push = dram_req_valid && dram_req_ready && !dram_req_rw;
|
||||
wire avs_reqq_pop = dram_rsp_valid && dram_rsp_ready;
|
||||
|
||||
wire avs_rdq_push = avs_readdatavalid;
|
||||
wire avs_rdq_pop = avs_rtq_pop;
|
||||
wire avs_rdq_empty;
|
||||
wire avs_rspq_push = avs_readdatavalid;
|
||||
wire avs_rspq_pop = avs_reqq_pop;
|
||||
wire avs_rspq_empty;
|
||||
|
||||
reg [RD_QUEUE_ADDRW-1:0] avs_pending_reads;
|
||||
wire [RD_QUEUE_ADDRW-1:0] avs_pending_reads_n;
|
||||
|
||||
assign avs_pending_reads_n = avs_pending_reads
|
||||
+ RD_QUEUE_ADDRW'((avs_rtq_push && !avs_rdq_pop) ? 1 :
|
||||
(avs_rdq_pop && !avs_rtq_push) ? -1 : 0);
|
||||
+ RD_QUEUE_ADDRW'((avs_reqq_push && !avs_rspq_pop) ? 1 :
|
||||
(avs_rspq_pop && !avs_reqq_push) ? -1 : 0);
|
||||
|
||||
always @(posedge clk) begin
|
||||
if (reset) begin
|
||||
@@ -75,9 +75,9 @@ module VX_avs_wrapper #(
|
||||
) rd_req_queue (
|
||||
.clk (clk),
|
||||
.reset (reset),
|
||||
.push (avs_rtq_push),
|
||||
.push (avs_reqq_push),
|
||||
.pop (avs_reqq_pop),
|
||||
.data_in (dram_req_tag),
|
||||
.pop (avs_rtq_pop),
|
||||
.data_out (dram_rsp_tag),
|
||||
`UNUSED_PIN (empty),
|
||||
`UNUSED_PIN (full),
|
||||
@@ -90,37 +90,38 @@ module VX_avs_wrapper #(
|
||||
) rd_rsp_queue (
|
||||
.clk (clk),
|
||||
.reset (reset),
|
||||
.push (avs_rdq_push),
|
||||
.data_in (avs_readdata),
|
||||
.pop (avs_rdq_pop),
|
||||
.push (avs_rspq_push),
|
||||
.pop (avs_rspq_pop),
|
||||
.data_in (avs_readdata),
|
||||
.data_out (dram_rsp_data),
|
||||
.empty (avs_rdq_empty),
|
||||
.empty (avs_rspq_empty),
|
||||
`UNUSED_PIN (full),
|
||||
`UNUSED_PIN (size)
|
||||
);
|
||||
|
||||
assign avs_read = dram_req_valid && !dram_req_rw;
|
||||
assign avs_write = dram_req_valid && dram_req_rw;
|
||||
wire rsp_queue_ready = (avs_pending_reads != RD_QUEUE_SIZE);
|
||||
|
||||
assign avs_read = dram_req_valid && !dram_req_rw && rsp_queue_ready;
|
||||
assign avs_write = dram_req_valid && dram_req_rw && rsp_queue_ready;
|
||||
assign avs_address = dram_req_addr;
|
||||
assign avs_byteenable = dram_req_byteen;
|
||||
assign avs_writedata = dram_req_data;
|
||||
assign dram_req_ready = !avs_waitrequest
|
||||
&& (avs_pending_reads < RD_QUEUE_SIZE);
|
||||
assign dram_req_ready = !avs_waitrequest && rsp_queue_ready;
|
||||
assign avs_burstcount = avs_burstcount_r;
|
||||
assign avs_bankselect = avs_bankselect_r;
|
||||
|
||||
assign dram_rsp_valid = !avs_rdq_empty;
|
||||
assign dram_rsp_valid = !avs_rspq_empty;
|
||||
|
||||
`ifdef DBG_PRINT_AVS
|
||||
always @(posedge clk) begin
|
||||
if (dram_req_valid && dram_req_ready) begin
|
||||
if (dram_req_rw)
|
||||
$display("%t: AVS Wr Req: addr=%0h, byteen=%0h, tag=%0h, data=%0h", $time, `DRAM_TO_BYTE_ADDR(avs_address), avs_byteenable, dram_req_tag, avs_writedata);
|
||||
$display("%t: AVS Wr Req: addr=%0h, byteen=%0h, tag=%0h, data=%0h", $time, `DRAM_TO_BYTE_ADDR(dram_req_addr), dram_req_byteen, dram_req_tag, dram_req_data);
|
||||
else
|
||||
$display("%t: AVS Rd Req: addr=%0h, byteen=%0h, tag=%0h, pending=%0d", $time, `DRAM_TO_BYTE_ADDR(avs_address), avs_byteenable, dram_req_tag, avs_pending_reads_n);
|
||||
$display("%t: AVS Rd Req: addr=%0h, byteen=%0h, tag=%0h, pending=%0d", $time, `DRAM_TO_BYTE_ADDR(dram_req_addr), dram_req_byteen, dram_req_tag, avs_pending_reads_n);
|
||||
end
|
||||
if (dram_rsp_valid && dram_rsp_ready) begin
|
||||
$display("%t: AVS Rd Rsp: data=%0h, pending=%0d", $time, avs_readdata, avs_pending_reads_n);
|
||||
$display("%t: AVS Rd Rsp: tag=%0h, data=%0h, pending=%0d", $time, dram_rsp_tag, dram_rsp_data, avs_pending_reads_n);
|
||||
end
|
||||
end
|
||||
`endif
|
||||
|
||||
@@ -501,7 +501,6 @@ wire [AVS_REQ_TAGW-1:0] vx_dram_rsp_tag_unqual;
|
||||
wire cci_dram_rd_req_valid, cci_dram_wr_req_valid;
|
||||
wire [DRAM_ADDR_WIDTH-1:0] cci_dram_rd_req_addr, cci_dram_wr_req_addr;
|
||||
wire [CCI_RD_RQ_DATAW-1:0] cci_rdq_dout;
|
||||
wire [VX_DRAM_LINE_IDX-1:0] vx_dram_req_idx, vx_dram_rsp_idx;
|
||||
|
||||
//--
|
||||
|
||||
@@ -526,20 +525,19 @@ assign vx_dram_req_valid_qual = vx_dram_req_valid && vx_enabled;
|
||||
assign vx_dram_req_addr_qual = vx_dram_req_addr[`VX_DRAM_ADDR_WIDTH-1:`VX_DRAM_ADDR_WIDTH-DRAM_ADDR_WIDTH];
|
||||
|
||||
if (`VX_DRAM_LINE_WIDTH != DRAM_LINE_WIDTH) begin
|
||||
assign vx_dram_req_idx = vx_dram_req_addr[VX_DRAM_LINE_IDX-1:0];
|
||||
wire [VX_DRAM_LINE_IDX-1:0] vx_dram_req_idx = vx_dram_req_addr[VX_DRAM_LINE_IDX-1:0];
|
||||
wire [VX_DRAM_LINE_IDX-1:0] vx_dram_rsp_idx = vx_dram_rsp_tag_unqual[VX_DRAM_LINE_IDX-1:0];
|
||||
assign vx_dram_req_byteen_qual = 64'(vx_dram_req_byteen) << (6'(vx_dram_req_addr[VX_DRAM_LINE_IDX-1:0]) << (VX_DRAM_LINE_LW-3));
|
||||
assign vx_dram_req_data_qual = DRAM_LINE_WIDTH'(vx_dram_req_data) << ((DRAM_LINE_LW'(vx_dram_req_idx)) << VX_DRAM_LINE_LW);
|
||||
assign vx_dram_req_tag_qual = {vx_dram_req_tag, vx_dram_req_idx};
|
||||
assign vx_dram_rsp_data = vx_dram_rsp_data_unqual[vx_dram_rsp_idx];
|
||||
assign vx_dram_rsp_data = vx_dram_rsp_data_unqual[vx_dram_rsp_idx];
|
||||
end else begin
|
||||
assign vx_dram_req_idx = VX_DRAM_LINE_IDX'(0);
|
||||
assign vx_dram_req_byteen_qual = vx_dram_req_byteen;
|
||||
assign vx_dram_req_tag_qual = vx_dram_req_tag;
|
||||
assign vx_dram_req_data_qual = vx_dram_req_data;
|
||||
assign vx_dram_rsp_data = vx_dram_rsp_data_unqual;
|
||||
end
|
||||
|
||||
assign vx_dram_rsp_idx = vx_dram_rsp_tag_unqual[VX_DRAM_LINE_IDX-1:0];
|
||||
assign vx_dram_rsp_tag = vx_dram_rsp_tag_unqual[`VX_DRAM_TAG_WIDTH+VX_DRAM_LINE_IDX-1:VX_DRAM_LINE_IDX];
|
||||
|
||||
//--
|
||||
@@ -723,15 +721,15 @@ always @(posedge clk) begin
|
||||
cci_rd_req_wait <= 0; // restart new request batch
|
||||
end
|
||||
`ifdef DBG_PRINT_OPAE
|
||||
$display("%t: CCI Rd Rsp: idx=%0d, ctr=%0d", $time, cci_rd_rsp_tag, cci_rd_rsp_ctr);
|
||||
$display("%t: CCI Rd Rsp: idx=%0d, ctr=%0d, data=%0h", $time, cci_rd_rsp_tag, cci_rd_rsp_ctr, cp2af_sRxPort.c0.data);
|
||||
`endif
|
||||
end
|
||||
|
||||
if (cci_rdq_pop) begin
|
||||
/*if (cci_rdq_pop) begin
|
||||
`ifdef DBG_PRINT_OPAE
|
||||
$display("%t: CCI Rd Queue Pop: pending=%0d", $time, cci_pending_reads_next);
|
||||
`endif
|
||||
end
|
||||
end*/
|
||||
|
||||
if (cci_dram_wr_req_fire) begin
|
||||
cci_dram_wr_req_addr_unqual <= cci_dram_wr_req_addr_unqual + ((CCI_RD_RQ_TAGW'(cci_dram_wr_req_ctr) == CCI_RD_RQ_TAGW'(CCI_RD_WINDOW_SIZE-1)) ? DRAM_ADDR_WIDTH'(CCI_RD_WINDOW_SIZE) : DRAM_ADDR_WIDTH'(0));
|
||||
@@ -836,15 +834,15 @@ begin
|
||||
cci_wr_req_addr <= cci_wr_req_addr + t_ccip_clAddr'(1);
|
||||
cci_wr_req_ctr <= cci_wr_req_ctr - DRAM_ADDR_WIDTH'(1);
|
||||
`ifdef DBG_PRINT_OPAE
|
||||
$display("%t: CCI Wr Req: addr=%0h, rem=%0d, pending=%0d", $time, cci_wr_req_addr, (cci_wr_req_ctr - 1), cci_pending_writes_next);
|
||||
$display("%t: CCI Wr Req: addr=%0h, rem=%0d, pending=%0d, data=%0h", $time, cci_wr_req_addr, (cci_wr_req_ctr - 1), cci_pending_writes_next, af2cp_sTxPort.c1.data);
|
||||
`endif
|
||||
end
|
||||
|
||||
`ifdef DBG_PRINT_OPAE
|
||||
/*`ifdef DBG_PRINT_OPAE
|
||||
if (cci_wr_rsp_fire) begin
|
||||
$display("%t: CCI Wr Rsp: pending=%0d", $time, cci_pending_writes_next);
|
||||
end
|
||||
`endif
|
||||
`endif*/
|
||||
|
||||
if (cci_dram_rd_req_fire) begin
|
||||
cci_dram_rd_req_addr_unqual <= cci_dram_rd_req_addr_unqual + DRAM_ADDR_WIDTH'(1);
|
||||
|
||||
Reference in New Issue
Block a user