Line 114... |
Line 114... |
parameter APP_RW = 9; // Application Request Width
|
parameter APP_RW = 9; // Application Request 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 ;
|
input clk ;
|
input reset_n ;
|
input reset_n ;
|
input [1:0] cfg_colbits ; // 2'b00 - 8 Bit column address, 2'b01 - 9 Bit, 10 - 10 bit, 11 - 11Bits
|
input [1:0] cfg_colbits ; // 2'b00 - 8 Bit column address, 2'b01 - 9 Bit, 10 - 10 bit, 11 - 11Bits
|
|
|
Line 141... |
Line 139... |
output r2b_wrap ; // 1 - Wrap the Address at the page boundary.
|
output r2b_wrap ; // 1 - Wrap the Address at the page boundary.
|
output [`SDR_REQ_ID_W-1:0] r2b_req_id;
|
output [`SDR_REQ_ID_W-1:0] r2b_req_id;
|
output [1:0] r2b_ba ; // Bank Address
|
output [1:0] r2b_ba ; // Bank Address
|
output [11:0] r2b_raddr ; // Row Address
|
output [11:0] r2b_raddr ; // Row Address
|
output [11:0] r2b_caddr ; // Column Address
|
output [11:0] r2b_caddr ; // Column Address
|
output [REQ_BW-1:0] r2b_len ; // Burst Length
|
output [`REQ_BW-1:0] r2b_len ; // Burst Length
|
input b2r_ack ; // Request Ack
|
input b2r_ack ; // Request Ack
|
input b2r_arb_ok ; // Bank controller fifo is not full and ready to accept the command
|
input b2r_arb_ok ; // Bank controller fifo is not full and ready to accept the command
|
//
|
//
|
input [1:0] sdr_width; // 2'b00 - 32 Bit, 2'b01 - 16 Bit, 2'b1x - 8Bit
|
input [1:0] sdr_width; // 2'b00 - 32 Bit, 2'b01 - 16 Bit, 2'b1x - 8Bit
|
|
|
Line 158... |
Line 156... |
|
|
reg req_st, next_req_st;
|
reg req_st, next_req_st;
|
reg r2x_idle, req_ack, r2b_req, r2b_start,
|
reg r2x_idle, req_ack, r2b_req, r2b_start,
|
r2b_write, req_idle, req_ld, lcl_wrap;
|
r2b_write, req_idle, req_ld, lcl_wrap;
|
reg [`SDR_REQ_ID_W-1:0] r2b_req_id;
|
reg [`SDR_REQ_ID_W-1:0] r2b_req_id;
|
reg [REQ_BW-1:0] lcl_req_len;
|
reg [`REQ_BW-1:0] lcl_req_len;
|
|
|
wire r2b_last, page_ovflw;
|
wire r2b_last, page_ovflw;
|
wire [REQ_BW-1:0] r2b_len, next_req_len;
|
wire [`REQ_BW-1:0] r2b_len, next_req_len;
|
wire [12:0] max_r2b_len;
|
wire [12:0] max_r2b_len;
|
reg [12:0] max_r2b_len_r;
|
reg [12:0] max_r2b_len_r;
|
|
|
reg [1:0] r2b_ba;
|
reg [1:0] r2b_ba;
|
reg [11:0] r2b_raddr;
|
reg [11:0] r2b_raddr;
|
Line 223... |
Line 221... |
// if the current burst cross the page boundary.
|
// if the current burst cross the page boundary.
|
assign page_ovflw = ({1'b0, lcl_req_len} > max_r2b_len_r) ? ~lcl_wrap : 1'b0;
|
assign page_ovflw = ({1'b0, lcl_req_len} > max_r2b_len_r) ? ~lcl_wrap : 1'b0;
|
|
|
assign r2b_len = (page_ovflw) ? max_r2b_len_r : lcl_req_len;
|
assign r2b_len = (page_ovflw) ? max_r2b_len_r : lcl_req_len;
|
|
|
assign next_req_len = lcl_req_len - r2b_len;
|
assign next_req_len = lcl_req_len - max_r2b_len_r;
|
|
|
assign next_sdr_addr = curr_sdr_addr + r2b_len;
|
assign next_sdr_addr = curr_sdr_addr + max_r2b_len_r;
|
|
|
|
|
assign r2b_wrap = lcl_wrap;
|
assign r2b_wrap = lcl_wrap;
|
|
|
assign r2b_last = ~page_ovflw;
|
assign r2b_last = ~page_ovflw;
|