Line 98... |
Line 98... |
parameter APP_DW = 32; // Application Data Width
|
parameter APP_DW = 32; // Application Data Width
|
parameter APP_BW = 4; // Application Byte Width
|
parameter APP_BW = 4; // Application Byte Width
|
|
|
parameter SDR_DW = 16; // SDR Data Width
|
parameter SDR_DW = 16; // SDR Data Width
|
parameter SDR_BW = 2; // SDR Byte Width
|
parameter SDR_BW = 2; // SDR Byte Width
|
// 12 bit subtractor is not feasibile for FPGA, so changed to 8 bits
|
|
parameter REQ_BW = (`TARGET_DESIGN == `FPGA) ? 8 : 12; // Request Width
|
|
input clk, reset_n;
|
input clk, reset_n;
|
|
|
input [1:0] a2b_req_depth;
|
input [1:0] a2b_req_depth;
|
|
|
/* Req from bank_ctl */
|
/* Req from bank_ctl */
|
Line 111... |
Line 109... |
r2b_write, r2b_wrap;
|
r2b_write, r2b_wrap;
|
input [`SDR_REQ_ID_W-1:0] r2b_req_id;
|
input [`SDR_REQ_ID_W-1:0] r2b_req_id;
|
input [1:0] r2b_ba;
|
input [1:0] r2b_ba;
|
input [11:0] r2b_raddr;
|
input [11:0] r2b_raddr;
|
input [11:0] r2b_caddr;
|
input [11:0] r2b_caddr;
|
input [REQ_BW-1:0] r2b_len;
|
input [`REQ_BW-1:0] r2b_len;
|
output b2r_arb_ok, b2r_ack;
|
output b2r_arb_ok, b2r_ack;
|
input sdr_req_norm_dma_last;
|
input sdr_req_norm_dma_last;
|
|
|
/* Req to xfr_ctl */
|
/* Req to xfr_ctl */
|
output b2x_idle, b2x_req, b2x_start, b2x_last,
|
output b2x_idle, b2x_req, b2x_start, b2x_last,
|
b2x_tras_ok, b2x_wrap;
|
b2x_tras_ok, b2x_wrap;
|
output [`SDR_REQ_ID_W-1:0] b2x_id;
|
output [`SDR_REQ_ID_W-1:0] b2x_id;
|
output [1:0] b2x_ba;
|
output [1:0] b2x_ba;
|
output [11:0] b2x_addr;
|
output [11:0] b2x_addr;
|
output [REQ_BW-1:0] b2x_len;
|
output [`REQ_BW-1:0] b2x_len;
|
output [1:0] b2x_cmd;
|
output [1:0] b2x_cmd;
|
input x2b_ack;
|
input x2b_ack;
|
|
|
/* Status from xfr_ctl */
|
/* Status from xfr_ctl */
|
input [3:0] x2b_pre_ok;
|
input [3:0] x2b_pre_ok;
|
Line 140... |
Line 138... |
// Internal Nets
|
// Internal Nets
|
|
|
wire [3:0] r2i_req, i2r_ack, i2x_req,
|
wire [3:0] r2i_req, i2r_ack, i2x_req,
|
i2x_start, i2x_last, i2x_wrap, tras_ok;
|
i2x_start, i2x_last, i2x_wrap, tras_ok;
|
wire [11:0] i2x_addr0, i2x_addr1, i2x_addr2, i2x_addr3;
|
wire [11:0] i2x_addr0, i2x_addr1, i2x_addr2, i2x_addr3;
|
wire [REQ_BW-1:0] i2x_len0, i2x_len1, i2x_len2, i2x_len3;
|
wire [`REQ_BW-1:0] i2x_len0, i2x_len1, i2x_len2, i2x_len3;
|
wire [1:0] i2x_cmd0, i2x_cmd1, i2x_cmd2, i2x_cmd3;
|
wire [1:0] i2x_cmd0, i2x_cmd1, i2x_cmd2, i2x_cmd3;
|
wire [`SDR_REQ_ID_W-1:0] i2x_id0, i2x_id1, i2x_id2, i2x_id3;
|
wire [`SDR_REQ_ID_W-1:0] i2x_id0, i2x_id1, i2x_id2, i2x_id3;
|
|
|
reg b2x_req;
|
reg b2x_req;
|
wire b2x_idle, b2x_start, b2x_last, b2x_wrap;
|
wire b2x_idle, b2x_start, b2x_last, b2x_wrap;
|
wire [`SDR_REQ_ID_W-1:0] b2x_id;
|
wire [`SDR_REQ_ID_W-1:0] b2x_id;
|
wire [11:0] b2x_addr;
|
wire [11:0] b2x_addr;
|
wire [REQ_BW-1:0] b2x_len;
|
wire [`REQ_BW-1:0] b2x_len;
|
wire [1:0] b2x_cmd;
|
wire [1:0] b2x_cmd;
|
wire [3:0] x2i_ack;
|
wire [3:0] x2i_ack;
|
reg [1:0] b2x_ba;
|
reg [1:0] b2x_ba;
|
|
|
reg [`SDR_REQ_ID_W-1:0] curr_id;
|
reg [`SDR_REQ_ID_W-1:0] curr_id;
|
Line 229... |
Line 227... |
(rank_ba[7:6] == 2'b00) ? i2x_req[0] & ~i2x_cmd0[1] :
|
(rank_ba[7:6] == 2'b00) ? i2x_req[0] & ~i2x_cmd0[1] :
|
(rank_ba[7:6] == 2'b01) ? i2x_req[1] & ~i2x_cmd1[1] :
|
(rank_ba[7:6] == 2'b01) ? i2x_req[1] & ~i2x_cmd1[1] :
|
(rank_ba[7:6] == 2'b10) ? i2x_req[2] & ~i2x_cmd2[1] :
|
(rank_ba[7:6] == 2'b10) ? i2x_req[2] & ~i2x_cmd2[1] :
|
i2x_req[3] & ~i2x_cmd3[1];
|
i2x_req[3] & ~i2x_cmd3[1];
|
|
|
always @ (rank_req or rank_ba or xfr_ba or xfr_ba_last) begin
|
always @ (*) begin
|
|
b2x_req = 1'b0;
|
|
b2x_ba = xfr_ba;
|
|
|
|
if(`TARGET_DESIGN == `ASIC) begin // Support Multiple Rank request only on ASIC
|
if (rank_req[0]) begin
|
if (rank_req[0]) begin
|
b2x_req = 1'b1;
|
b2x_req = 1'b1;
|
b2x_ba = xfr_ba;
|
b2x_ba = xfr_ba;
|
end // if (rank_req[0])
|
end // if (rank_req[0])
|
|
|
else if (rank_req[1]) begin
|
else if (rank_req[1]) begin
|
b2x_req = 1'b1;
|
b2x_req = 1'b1;
|
b2x_ba = rank_ba[3:2];
|
b2x_ba = rank_ba[3:2];
|
end // if (rank_req[1])
|
end // if (rank_req[1])
|
|
|
else if (rank_req[2]) begin
|
else if (rank_req[2]) begin
|
b2x_req = 1'b1;
|
b2x_req = 1'b1;
|
b2x_ba = rank_ba[5:4];
|
b2x_ba = rank_ba[5:4];
|
end // if (rank_req[2])
|
end // if (rank_req[2])
|
|
|
else if (rank_req[3]) begin
|
else if (rank_req[3]) begin
|
b2x_req = 1'b1;
|
b2x_req = 1'b1;
|
b2x_ba = rank_ba[7:6];
|
b2x_ba = rank_ba[7:6];
|
end // if (rank_req[3])
|
end // if (rank_req[3])
|
|
end else begin // If FPGA
|
else begin
|
if (rank_req[0]) begin
|
b2x_req = 1'b0;
|
b2x_req = 1'b1;
|
b2x_ba = 2'b00;
|
end
|
end // else: !if(rank_req[3])
|
end
|
|
|
end // always @ (rank_req or rank_fifo_mt or r2b_ba or rank_ba)
|
end // always @ (rank_req or rank_fifo_mt or r2b_ba or rank_ba)
|
|
|
assign b2x_idle = rank_fifo_mt;
|
assign b2x_idle = rank_fifo_mt;
|
assign b2x_start = i2x_start[b2x_ba];
|
assign b2x_start = i2x_start[b2x_ba];
|
assign b2x_last = i2x_last[b2x_ba];
|
assign b2x_last = i2x_last[b2x_ba];
|