Line 133... |
Line 133... |
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
|
parameter REQ_BW = 12; // Request 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;
|
|
|
/* Req from bank_ctl */
|
/* Req from bank_ctl */
|
Line 239... |
Line 240... |
|
|
assign xfr_cmd = (sel_mgmt) ? mgmt_cmd :
|
assign xfr_cmd = (sel_mgmt) ? mgmt_cmd :
|
(sel_b2x) ? b2x_sdr_cmd : i_xfr_cmd;
|
(sel_b2x) ? b2x_sdr_cmd : i_xfr_cmd;
|
|
|
assign xfr_addr = (sel_mgmt) ? mgmt_addr :
|
assign xfr_addr = (sel_mgmt) ? mgmt_addr :
|
(sel_b2x) ? b2x_addr : xfr_caddr;
|
(sel_b2x) ? b2x_addr : xfr_caddr+1;
|
|
|
assign mgmt_ack = sel_mgmt;
|
assign mgmt_ack = sel_mgmt;
|
|
|
assign x2b_ack = sel_b2x;
|
assign x2b_ack = sel_b2x;
|
|
|
assign ld_xfr = sel_b2x & (b2x_read | b2x_write);
|
assign ld_xfr = sel_b2x & (b2x_read | b2x_write);
|
|
|
assign xfr_len = (ld_xfr) ? b2x_len : l_len;
|
assign xfr_len = (ld_xfr) ? b2x_len : l_len;
|
|
|
assign next_xfr_len = (xfr_end) ? xfr_len : xfr_len - 1;
|
//assign next_xfr_len = (l_xfr_end && !ld_xfr) ? l_len : xfr_len - 1;
|
|
assign next_xfr_len = (ld_xfr) ? b2x_len :
|
|
(l_xfr_end) ? l_len: l_len - 1;
|
|
|
assign d_rd_next = (cas_latency == 2'b01) ? l_rd_next[2] :
|
assign d_rd_next = (cas_latency == 2'b01) ? l_rd_next[2] :
|
(cas_latency == 2'b10) ? l_rd_next[3] :
|
(cas_latency == 2'b10) ? l_rd_next[3] :
|
l_rd_next[4];
|
l_rd_next[4];
|
|
|
Line 271... |
Line 274... |
|
|
assign dt_next = wr_next | d_rd_next;
|
assign dt_next = wr_next | d_rd_next;
|
|
|
assign xfr_end = ~|xfr_len;
|
assign xfr_end = ~|xfr_len;
|
|
|
assign l_xfr_end = ~|l_len;
|
assign l_xfr_end = ~|(l_len-1);
|
|
|
assign rd_start = ld_xfr & b2x_read & b2x_start;
|
assign rd_start = ld_xfr & b2x_read & b2x_start;
|
|
|
assign wr_start = ld_xfr & b2x_write & b2x_start;
|
assign wr_start = ld_xfr & b2x_write & b2x_start;
|
|
|
Line 290... |
Line 293... |
(sel_b2x) ? b2x_ba : l_ba;
|
(sel_b2x) ? b2x_ba : l_ba;
|
|
|
assign xfr_wrap = (ld_xfr) ? b2x_wrap : l_wrap;
|
assign xfr_wrap = (ld_xfr) ? b2x_wrap : l_wrap;
|
|
|
// assign burst_bdry = ~|xfr_caddr[2:0];
|
// assign burst_bdry = ~|xfr_caddr[2:0];
|
assign burst_bdry = ~|xfr_caddr[1:0];
|
wire [1:0] xfr_caddr_lsb = (xfr_caddr[1:0]+1);
|
|
assign burst_bdry = ~|(xfr_caddr_lsb[1:0]);
|
|
|
always @ (posedge clk) begin
|
always @ (posedge clk) begin
|
if (~reset_n) begin
|
if (~reset_n) begin
|
xfr_caddr <= 12'b0;
|
xfr_caddr <= 12'b0;
|
l_start <= 1'b0;
|
l_start <= 1'b0;
|
Line 310... |
Line 314... |
d_act_cmd <= 1'b0;
|
d_act_cmd <= 1'b0;
|
xfr_st <= `XFR_IDLE;
|
xfr_st <= `XFR_IDLE;
|
end // if (~reset_n)
|
end // if (~reset_n)
|
|
|
else begin
|
else begin
|
xfr_caddr <= (ld_xfr) ? b2x_addr + 12'h1 :
|
xfr_caddr <= (ld_xfr) ? b2x_addr :
|
(rd_next | wr_next) ? xfr_caddr + 12'h1 :
|
(rd_next | wr_next) ? xfr_caddr + 1 : xfr_caddr;
|
xfr_caddr;
|
|
l_start <= (dt_next) ? 1'b0 :
|
l_start <= (dt_next) ? 1'b0 :
|
(ld_xfr) ? b2x_start : l_start;
|
(ld_xfr) ? b2x_start : l_start;
|
l_last <= (ld_xfr) ? b2x_last : l_last;
|
l_last <= (ld_xfr) ? b2x_last : l_last;
|
l_wrap <= (ld_xfr) ? b2x_wrap : l_wrap;
|
l_wrap <= (ld_xfr) ? b2x_wrap : l_wrap;
|
l_id <= (ld_xfr) ? b2x_id : l_id;
|
l_id <= (ld_xfr) ? b2x_id : l_id;
|
Line 356... |
Line 359... |
`XFR_READ : begin
|
`XFR_READ : begin
|
rd_next = ~l_xfr_end |
|
rd_next = ~l_xfr_end |
|
l_xfr_end & ~mgmt_req & b2x_req & b2x_read;
|
l_xfr_end & ~mgmt_req & b2x_req & b2x_read;
|
wr_next = 1'b0;
|
wr_next = 1'b0;
|
rdok = l_xfr_end & ~mgmt_req;
|
rdok = l_xfr_end & ~mgmt_req;
|
cb_pre_ok = l_xfr_end;
|
// Break the timing path for FPGA Based Design
|
|
cb_pre_ok = (`TARGET_DESIGN == `FPGA) ? 1'b0 : l_xfr_end;
|
wrok = 1'b0;
|
wrok = 1'b0;
|
sel_mgmt = 1'b0;
|
sel_mgmt = 1'b0;
|
|
|
if (l_xfr_end) begin // end of transfer
|
if (l_xfr_end) begin // end of transfer
|
|
|
Line 499... |
Line 503... |
|
|
assign x2b_rdok = rdok;
|
assign x2b_rdok = rdok;
|
|
|
assign x2b_wrok = wrok;
|
assign x2b_wrok = wrok;
|
|
|
assign x2b_pre_ok[0] = (l_ba == 2'b00) ? cb_pre_ok : 1'b1;
|
//assign x2b_pre_ok[0] = (l_ba == 2'b00) ? cb_pre_ok : 1'b1;
|
assign x2b_pre_ok[1] = (l_ba == 2'b01) ? cb_pre_ok : 1'b1;
|
//assign x2b_pre_ok[1] = (l_ba == 2'b01) ? cb_pre_ok : 1'b1;
|
assign x2b_pre_ok[2] = (l_ba == 2'b10) ? cb_pre_ok : 1'b1;
|
//assign x2b_pre_ok[2] = (l_ba == 2'b10) ? cb_pre_ok : 1'b1;
|
assign x2b_pre_ok[3] = (l_ba == 2'b11) ? cb_pre_ok : 1'b1;
|
//assign x2b_pre_ok[3] = (l_ba == 2'b11) ? cb_pre_ok : 1'b1;
|
|
|
|
assign x2b_pre_ok[0] = cb_pre_ok;
|
|
assign x2b_pre_ok[1] = cb_pre_ok;
|
|
assign x2b_pre_ok[2] = cb_pre_ok;
|
|
assign x2b_pre_ok[3] = cb_pre_ok;
|
assign last_burst = (ld_xfr) ? b2x_last : l_last;
|
assign last_burst = (ld_xfr) ? b2x_last : l_last;
|
|
|
/************************************************************************/
|
/************************************************************************/
|
// APP Data I/F
|
// APP Data I/F
|
|
|