OpenCores
URL https://opencores.org/ocsvn/sdr_ctrl/sdr_ctrl/trunk

Subversion Repositories sdr_ctrl

[/] [sdr_ctrl/] [trunk/] [rtl/] [core/] [sdrc_bank_ctl.v] - Diff between revs 51 and 54

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 51 Rev 54
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];

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.