| 1 | 
         3 | 
         dinesha | 
         /*********************************************************************
  | 
      
      
         | 2 | 
          | 
          | 
          
  | 
      
      
         | 3 | 
          | 
          | 
           SDRAM Controller Request Generation
  | 
      
      
         | 4 | 
          | 
          | 
          
  | 
      
      
         | 5 | 
          | 
          | 
           This file is part of the sdram controller project
  | 
      
      
         | 6 | 
          | 
          | 
           http://www.opencores.org/cores/sdr_ctrl/
  | 
      
      
         | 7 | 
          | 
          | 
          
  | 
      
      
         | 8 | 
          | 
          | 
           Description: SDRAM Controller Reguest Generation
  | 
      
      
         | 9 | 
          | 
          | 
           The 2Mx32 SDRAM is addressed by a 21 bit address,
  | 
      
      
         | 10 | 
          | 
          | 
           each loation is 32 bits wide.
  | 
      
      
         | 11 | 
          | 
          | 
           This 21 bit address is mapped as follows:
  | 
      
      
         | 12 | 
          | 
          | 
           ADDR [7:0]      : Column Address (256 columns)
  | 
      
      
         | 13 | 
          | 
          | 
           ADDR [18:8]     : Row Address (2K Rows)
  | 
      
      
         | 14 | 
          | 
          | 
           ADDR [20:19]    : Bank Address (2 banks)
  | 
      
      
         | 15 | 
          | 
          | 
          
  | 
      
      
         | 16 | 
          | 
          | 
           The 4Mx16 SDRAM is addressed by a 22 bit address,
  | 
      
      
         | 17 | 
          | 
          | 
           each loation is 16 bits wide.
  | 
      
      
         | 18 | 
          | 
          | 
           This 22 bit address is mapped as follows:
  | 
      
      
         | 19 | 
          | 
          | 
           ADDR [7:0]      : Column Address (256 columns)
  | 
      
      
         | 20 | 
          | 
          | 
           ADDR [21:10]    : Row Address (4K Rows)
  | 
      
      
         | 21 | 
          | 
          | 
           ADDR [21:20]    : Bank Address (4 banks)
  | 
      
      
         | 22 | 
          | 
          | 
          
  | 
      
      
         | 23 | 
          | 
          | 
           The 8Mx16 SDRAM is addressed by a 23 bit address,
  | 
      
      
         | 24 | 
          | 
          | 
           each loation is 16 bits wide.
  | 
      
      
         | 25 | 
          | 
          | 
           This 23 bit address is mapped as follows:
  | 
      
      
         | 26 | 
          | 
          | 
           ADDR [8:0]      : Column Address (512 columns)
  | 
      
      
         | 27 | 
          | 
          | 
           ADDR [20:9]     : Row Address (4K Rows)
  | 
      
      
         | 28 | 
          | 
          | 
           ADDR [22:21]    : Bank Address (4 banks)
  | 
      
      
         | 29 | 
          | 
          | 
          
  | 
      
      
         | 30 | 
          | 
          | 
           The SDRAMs are operated in 4 beat burst mode.
  | 
      
      
         | 31 | 
          | 
          | 
           This module takes requests from the mc,
  | 
      
      
         | 32 | 
          | 
          | 
           chops them to page boundaries if wrap=0,
  | 
      
      
         | 33 | 
          | 
          | 
           and passes the request to bank_ctl
  | 
      
      
         | 34 | 
          | 
          | 
          
  | 
      
      
         | 35 | 
          | 
          | 
           To Do:
  | 
      
      
         | 36 | 
          | 
          | 
             nothing
  | 
      
      
         | 37 | 
          | 
          | 
          
  | 
      
      
         | 38 | 
          | 
          | 
           Author(s):
  | 
      
      
         | 39 | 
          | 
          | 
               - Dinesh Annayya, dinesha@opencores.org
  | 
      
      
         | 40 | 
          | 
          | 
           Version  : 1.0 - 8th Jan 2012
  | 
      
      
         | 41 | 
          | 
          | 
          
  | 
      
      
         | 42 | 
          | 
          | 
          
  | 
      
      
         | 43 | 
          | 
          | 
          
  | 
      
      
         | 44 | 
          | 
          | 
          Copyright (C) 2000 Authors and OPENCORES.ORG
  | 
      
      
         | 45 | 
          | 
          | 
          
  | 
      
      
         | 46 | 
          | 
          | 
          This source file may be used and distributed without
  | 
      
      
         | 47 | 
          | 
          | 
          restriction provided that this copyright statement is not
  | 
      
      
         | 48 | 
          | 
          | 
          removed from the file and that any derivative work contains
  | 
      
      
         | 49 | 
          | 
          | 
          the original copyright notice and the associated disclaimer.
  | 
      
      
         | 50 | 
          | 
          | 
          
  | 
      
      
         | 51 | 
          | 
          | 
          This source file is free software; you can redistribute it
  | 
      
      
         | 52 | 
          | 
          | 
          and/or modify it under the terms of the GNU Lesser General
  | 
      
      
         | 53 | 
          | 
          | 
          Public License as published by the Free Software Foundation;
  | 
      
      
         | 54 | 
          | 
          | 
          either version 2.1 of the License, or (at your option) any
  | 
      
      
         | 55 | 
          | 
          | 
         later version.
  | 
      
      
         | 56 | 
          | 
          | 
          
  | 
      
      
         | 57 | 
          | 
          | 
          This source is distributed in the hope that it will be
  | 
      
      
         | 58 | 
          | 
          | 
          useful, but WITHOUT ANY WARRANTY; without even the implied
  | 
      
      
         | 59 | 
          | 
          | 
          warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
  | 
      
      
         | 60 | 
          | 
          | 
          PURPOSE.  See the GNU Lesser General Public License for more
  | 
      
      
         | 61 | 
          | 
          | 
          details.
  | 
      
      
         | 62 | 
          | 
          | 
          
  | 
      
      
         | 63 | 
          | 
          | 
          You should have received a copy of the GNU Lesser General
  | 
      
      
         | 64 | 
          | 
          | 
          Public License along with this source; if not, download it
  | 
      
      
         | 65 | 
          | 
          | 
          from http://www.opencores.org/lgpl.shtml
  | 
      
      
         | 66 | 
          | 
          | 
          
  | 
      
      
         | 67 | 
          | 
          | 
         *******************************************************************/
  | 
      
      
         | 68 | 
          | 
          | 
          
  | 
      
      
         | 69 | 
          | 
          | 
         `include "sdrc.def"
  | 
      
      
         | 70 | 
          | 
          | 
          
  | 
      
      
         | 71 | 
          | 
          | 
         module sdrc_req_gen (clk,
  | 
      
      
         | 72 | 
          | 
          | 
                             reset_n,
  | 
      
      
         | 73 | 
          | 
          | 
          
  | 
      
      
         | 74 | 
          | 
          | 
                             /* Request from app */
  | 
      
      
         | 75 | 
          | 
          | 
                             req,        // Transfer Request
  | 
      
      
         | 76 | 
          | 
          | 
                             req_id,     // ID for this transfer
  | 
      
      
         | 77 | 
          | 
          | 
                             req_addr,   // SDRAM Address
  | 
      
      
         | 78 | 
          | 
          | 
                             req_addr_mask,
  | 
      
      
         | 79 | 
          | 
          | 
                             req_len,    // Burst Length (in 32 bit words)
  | 
      
      
         | 80 | 
          | 
          | 
                             req_wrap,   // Wrap mode request (xfr_len = 4)
  | 
      
      
         | 81 | 
          | 
          | 
                             req_wr_n,   // 0 => Write request, 1 => read req
  | 
      
      
         | 82 | 
          | 
          | 
                             req_ack,    // Request has been accepted
  | 
      
      
         | 83 | 
          | 
          | 
                             sdr_core_busy_n,    // SDRAM Core Busy Indication
  | 
      
      
         | 84 | 
         13 | 
         dinesha | 
                             cfg_colbits,
  | 
      
      
         | 85 | 
         3 | 
         dinesha | 
          
  | 
      
      
         | 86 | 
          | 
          | 
                             /* Req to bank_ctl */
  | 
      
      
         | 87 | 
          | 
          | 
                             r2x_idle,
  | 
      
      
         | 88 | 
          | 
          | 
                             r2b_req,    // request
  | 
      
      
         | 89 | 
          | 
          | 
                             r2b_req_id, // ID
  | 
      
      
         | 90 | 
          | 
          | 
                             r2b_start,  // First chunk of burst
  | 
      
      
         | 91 | 
          | 
          | 
                             r2b_last,   // Last chunk of burst
  | 
      
      
         | 92 | 
          | 
          | 
                             r2b_wrap,   // Wrap Mode
  | 
      
      
         | 93 | 
          | 
          | 
                             r2b_ba,     // bank address
  | 
      
      
         | 94 | 
          | 
          | 
                             r2b_raddr,  // row address
  | 
      
      
         | 95 | 
          | 
          | 
                             r2b_caddr,  // col address
  | 
      
      
         | 96 | 
          | 
          | 
                             r2b_len,    // length
  | 
      
      
         | 97 | 
          | 
          | 
                             r2b_write,  // write request
  | 
      
      
         | 98 | 
          | 
          | 
                             b2r_ack,
  | 
      
      
         | 99 | 
          | 
          | 
                             b2r_arb_ok,
  | 
      
      
         | 100 | 
          | 
          | 
                             sdr_width,
  | 
      
      
         | 101 | 
          | 
          | 
                             sdr_init_done);
  | 
      
      
         | 102 | 
          | 
          | 
          
  | 
      
      
         | 103 | 
          | 
          | 
         parameter  APP_AW   = 30;  // Application Address Width
  | 
      
      
         | 104 | 
          | 
          | 
         parameter  APP_DW   = 32;  // Application Data Width 
  | 
      
      
         | 105 | 
          | 
          | 
         parameter  APP_BW   = 4;   // Application Byte Width
  | 
      
      
         | 106 | 
          | 
          | 
         parameter  APP_RW   = 9;   // Application Request Width
  | 
      
      
         | 107 | 
          | 
          | 
          
  | 
      
      
         | 108 | 
          | 
          | 
         parameter  SDR_DW   = 16;  // SDR Data Width 
  | 
      
      
         | 109 | 
          | 
          | 
         parameter  SDR_BW   = 2;   // SDR Byte Width
  | 
      
      
         | 110 | 
          | 
          | 
          
  | 
      
      
         | 111 | 
          | 
          | 
            input                        clk, reset_n;
  | 
      
      
         | 112 | 
         13 | 
         dinesha | 
            input [1:0]                  cfg_colbits; // 2'b00 - 8 Bit column address, 2'b01 - 9 Bit, 10 - 10 bit, 11 - 11Bits
  | 
      
      
         | 113 | 
         3 | 
         dinesha | 
          
  | 
      
      
         | 114 | 
          | 
          | 
            /* Request from app */
  | 
      
      
         | 115 | 
          | 
          | 
            input                        req;
  | 
      
      
         | 116 | 
          | 
          | 
            input [`SDR_REQ_ID_W-1:0]     req_id;
  | 
      
      
         | 117 | 
          | 
          | 
            input [APP_AW:0]      req_addr;
  | 
      
      
         | 118 | 
          | 
          | 
            input [APP_AW-2:0]    req_addr_mask;
  | 
      
      
         | 119 | 
          | 
          | 
            input [APP_RW-1:0]    req_len;
  | 
      
      
         | 120 | 
          | 
          | 
            input                        req_wr_n, req_wrap;
  | 
      
      
         | 121 | 
          | 
          | 
            output                       req_ack, sdr_core_busy_n;
  | 
      
      
         | 122 | 
          | 
          | 
          
  | 
      
      
         | 123 | 
          | 
          | 
            /* Req to bank_ctl */
  | 
      
      
         | 124 | 
          | 
          | 
            output                       r2x_idle, r2b_req, r2b_start, r2b_last,
  | 
      
      
         | 125 | 
          | 
          | 
                                         r2b_write, r2b_wrap;
  | 
      
      
         | 126 | 
          | 
          | 
            output [`SDR_REQ_ID_W-1:0]    r2b_req_id;
  | 
      
      
         | 127 | 
          | 
          | 
            output [1:0]          r2b_ba;
  | 
      
      
         | 128 | 
          | 
          | 
            output [11:0]                 r2b_raddr;
  | 
      
      
         | 129 | 
          | 
          | 
            output [11:0]                 r2b_caddr;
  | 
      
      
         | 130 | 
          | 
          | 
            output [APP_RW-1:0]   r2b_len;
  | 
      
      
         | 131 | 
          | 
          | 
            input                        b2r_ack, b2r_arb_ok, sdr_init_done;
  | 
      
      
         | 132 | 
          | 
          | 
         //
  | 
      
      
         | 133 | 
          | 
          | 
            input                        sdr_width;
  | 
      
      
         | 134 | 
          | 
          | 
          
  | 
      
      
         | 135 | 
          | 
          | 
            /****************************************************************************/
  | 
      
      
         | 136 | 
          | 
          | 
            // Internal Nets
  | 
      
      
         | 137 | 
          | 
          | 
          
  | 
      
      
         | 138 | 
          | 
          | 
            `define REQ_IDLE        1'b0
  | 
      
      
         | 139 | 
          | 
          | 
            `define REQ_ACTIVE      1'b1
  | 
      
      
         | 140 | 
          | 
          | 
          
  | 
      
      
         | 141 | 
          | 
          | 
            reg                          req_st, next_req_st;
  | 
      
      
         | 142 | 
          | 
          | 
            reg                          r2x_idle, req_ack, r2b_req, r2b_start,
  | 
      
      
         | 143 | 
          | 
          | 
                                         r2b_write, req_idle, req_ld, lcl_wrap;
  | 
      
      
         | 144 | 
          | 
          | 
            reg [`SDR_REQ_ID_W-1:0]       r2b_req_id;
  | 
      
      
         | 145 | 
          | 
          | 
            reg [APP_RW-1:0]      lcl_req_len;
  | 
      
      
         | 146 | 
          | 
          | 
          
  | 
      
      
         | 147 | 
          | 
          | 
            wire                         r2b_last, page_ovflw;
  | 
      
      
         | 148 | 
          | 
          | 
            wire [APP_RW-1:0]     r2b_len, next_req_len;
  | 
      
      
         | 149 | 
          | 
          | 
            wire [APP_RW:0]       max_r2b_len;
  | 
      
      
         | 150 | 
          | 
          | 
          
  | 
      
      
         | 151 | 
          | 
          | 
            wire [1:0]                    r2b_ba;
  | 
      
      
         | 152 | 
          | 
          | 
            wire [11:0]                   r2b_raddr;
  | 
      
      
         | 153 | 
          | 
          | 
            wire [11:0]                   r2b_caddr;
  | 
      
      
         | 154 | 
          | 
          | 
          
  | 
      
      
         | 155 | 
          | 
          | 
            reg [APP_AW-1:0]      curr_sdr_addr, sdr_addrs_mask;
  | 
      
      
         | 156 | 
          | 
          | 
            wire [APP_AW-1:0]     next_sdr_addr, next_sdr_addr1;
  | 
      
      
         | 157 | 
          | 
          | 
          
  | 
      
      
         | 158 | 
          | 
          | 
            //
  | 
      
      
         | 159 | 
          | 
          | 
            // The maximum length for no page overflow is 200h/100h - caddr. Split a request
  | 
      
      
         | 160 | 
          | 
          | 
            // into 2 or more requests if it crosses a page boundary.
  | 
      
      
         | 161 | 
          | 
          | 
            // For non-queue accesses req_addr_mask is set to all 1 and the accesses
  | 
      
      
         | 162 | 
          | 
          | 
            // proceed linearly. 
  | 
      
      
         | 163 | 
          | 
          | 
            // All queues end on a 512 byte boundary (actually a 1K boundary). For Q
  | 
      
      
         | 164 | 
          | 
          | 
            // accesses req_addr_mask is set to LSB of 1 and MSB of 0 to constrain the
  | 
      
      
         | 165 | 
          | 
          | 
            // accesses within the space for a Q. When splitting and calculating the next
  | 
      
      
         | 166 | 
          | 
          | 
            // address only the LSBs are incremented, the MSBs remain = req_addr.
  | 
      
      
         | 167 | 
          | 
          | 
            //
  | 
      
      
         | 168 | 
         13 | 
         dinesha | 
            assign max_r2b_len = (cfg_colbits == 2'b00) ? (12'h100 - r2b_caddr) :
  | 
      
      
         | 169 | 
          | 
          | 
                                 (cfg_colbits == 2'b01) ? (12'h200 - r2b_caddr) :
  | 
      
      
         | 170 | 
          | 
          | 
                                 (cfg_colbits == 2'b10) ? (12'h400 - r2b_caddr) : (12'h800 - r2b_caddr);
  | 
      
      
         | 171 | 
         3 | 
         dinesha | 
          
  | 
      
      
         | 172 | 
          | 
          | 
            assign page_ovflw = ({1'b0, lcl_req_len} > max_r2b_len) ? ~lcl_wrap : 1'b0;
  | 
      
      
         | 173 | 
          | 
          | 
          
  | 
      
      
         | 174 | 
          | 
          | 
            assign r2b_len = (page_ovflw) ? max_r2b_len : lcl_req_len;
  | 
      
      
         | 175 | 
          | 
          | 
          
  | 
      
      
         | 176 | 
          | 
          | 
            assign next_req_len = lcl_req_len - r2b_len;
  | 
      
      
         | 177 | 
          | 
          | 
          
  | 
      
      
         | 178 | 
          | 
          | 
            assign next_sdr_addr1 = curr_sdr_addr + r2b_len;
  | 
      
      
         | 179 | 
          | 
          | 
          
  | 
      
      
         | 180 | 
          | 
          | 
            // Wrap back based on the mask
  | 
      
      
         | 181 | 
          | 
          | 
            assign next_sdr_addr = (sdr_addrs_mask & next_sdr_addr1) |
  | 
      
      
         | 182 | 
          | 
          | 
                                   (~sdr_addrs_mask & curr_sdr_addr);
  | 
      
      
         | 183 | 
          | 
          | 
          
  | 
      
      
         | 184 | 
          | 
          | 
            assign sdr_core_busy_n = req_idle & b2r_arb_ok & sdr_init_done;
  | 
      
      
         | 185 | 
          | 
          | 
          
  | 
      
      
         | 186 | 
          | 
          | 
            assign r2b_wrap = lcl_wrap;
  | 
      
      
         | 187 | 
          | 
          | 
          
  | 
      
      
         | 188 | 
          | 
          | 
            assign r2b_last = ~page_ovflw;
  | 
      
      
         | 189 | 
          | 
          | 
         //
  | 
      
      
         | 190 | 
          | 
          | 
         //
  | 
      
      
         | 191 | 
          | 
          | 
         //
  | 
      
      
         | 192 | 
          | 
          | 
            always @ (posedge clk) begin
  | 
      
      
         | 193 | 
          | 
          | 
          
  | 
      
      
         | 194 | 
          | 
          | 
               r2b_start <= (req_ack) ? 1'b1 :
  | 
      
      
         | 195 | 
          | 
          | 
                            (b2r_ack) ? 1'b0 : r2b_start;
  | 
      
      
         | 196 | 
          | 
          | 
          
  | 
      
      
         | 197 | 
          | 
          | 
               r2b_write <= (req_ack) ? ~req_wr_n : r2b_write;
  | 
      
      
         | 198 | 
          | 
          | 
          
  | 
      
      
         | 199 | 
          | 
          | 
               r2b_req_id <= (req_ack) ? req_id : r2b_req_id;
  | 
      
      
         | 200 | 
          | 
          | 
          
  | 
      
      
         | 201 | 
          | 
          | 
               lcl_wrap <= (req_ack) ? req_wrap : lcl_wrap;
  | 
      
      
         | 202 | 
          | 
          | 
          
  | 
      
      
         | 203 | 
          | 
          | 
               lcl_req_len <= (req_ack) ? req_len  :
  | 
      
      
         | 204 | 
          | 
          | 
                            (req_ld) ? next_req_len : lcl_req_len;
  | 
      
      
         | 205 | 
          | 
          | 
          
  | 
      
      
         | 206 | 
          | 
          | 
               curr_sdr_addr <= (req_ack) ? req_addr :
  | 
      
      
         | 207 | 
          | 
          | 
                                (req_ld) ? next_sdr_addr : curr_sdr_addr;
  | 
      
      
         | 208 | 
          | 
          | 
          
  | 
      
      
         | 209 | 
          | 
          | 
               sdr_addrs_mask <= (req_ack) ? (sdr_width ? {req_addr_mask,req_addr_mask[0]} : req_addr_mask) : sdr_addrs_mask;
  | 
      
      
         | 210 | 
          | 
          | 
          
  | 
      
      
         | 211 | 
          | 
          | 
            end // always @ (posedge clk)
  | 
      
      
         | 212 | 
          | 
          | 
          
  | 
      
      
         | 213 | 
          | 
          | 
            always @ (*) begin
  | 
      
      
         | 214 | 
          | 
          | 
          
  | 
      
      
         | 215 | 
          | 
          | 
               case (req_st)      // synopsys full_case parallel_case
  | 
      
      
         | 216 | 
          | 
          | 
          
  | 
      
      
         | 217 | 
          | 
          | 
                 `REQ_IDLE : begin
  | 
      
      
         | 218 | 
          | 
          | 
                    r2x_idle = ~req;
  | 
      
      
         | 219 | 
          | 
          | 
                    req_idle = 1'b1;
  | 
      
      
         | 220 | 
          | 
          | 
                    req_ack = req & b2r_arb_ok;
  | 
      
      
         | 221 | 
          | 
          | 
                    req_ld = 1'b0;
  | 
      
      
         | 222 | 
          | 
          | 
                    r2b_req = 1'b0;
  | 
      
      
         | 223 | 
          | 
          | 
                    next_req_st = (req & b2r_arb_ok) ? `REQ_ACTIVE : `REQ_IDLE;
  | 
      
      
         | 224 | 
          | 
          | 
                 end // case: `REQ_IDLE
  | 
      
      
         | 225 | 
          | 
          | 
          
  | 
      
      
         | 226 | 
          | 
          | 
                 `REQ_ACTIVE : begin
  | 
      
      
         | 227 | 
          | 
          | 
                    r2x_idle = 1'b0;
  | 
      
      
         | 228 | 
          | 
          | 
                    req_idle = 1'b0;
  | 
      
      
         | 229 | 
          | 
          | 
                    req_ack = 1'b0;
  | 
      
      
         | 230 | 
          | 
          | 
                    req_ld = b2r_ack;
  | 
      
      
         | 231 | 
          | 
          | 
                    r2b_req = 1'b1;                       // req_gen to bank_req
  | 
      
      
         | 232 | 
          | 
          | 
                    next_req_st = (b2r_ack & r2b_last) ? `REQ_IDLE : `REQ_ACTIVE;
  | 
      
      
         | 233 | 
          | 
          | 
                 end // case: `REQ_ACTIVE
  | 
      
      
         | 234 | 
          | 
          | 
          
  | 
      
      
         | 235 | 
          | 
          | 
               endcase // case(req_st)
  | 
      
      
         | 236 | 
          | 
          | 
          
  | 
      
      
         | 237 | 
          | 
          | 
            end // always @ (req_st or ....)
  | 
      
      
         | 238 | 
          | 
          | 
          
  | 
      
      
         | 239 | 
          | 
          | 
            always @ (posedge clk)
  | 
      
      
         | 240 | 
          | 
          | 
               if (~reset_n) begin
  | 
      
      
         | 241 | 
          | 
          | 
                  req_st <= `REQ_IDLE;
  | 
      
      
         | 242 | 
          | 
          | 
               end // if (~reset_n)
  | 
      
      
         | 243 | 
          | 
          | 
               else begin
  | 
      
      
         | 244 | 
          | 
          | 
                  req_st <= next_req_st;
  | 
      
      
         | 245 | 
          | 
          | 
               end // else: !if(~reset_n)
  | 
      
      
         | 246 | 
          | 
          | 
         //
  | 
      
      
         | 247 | 
          | 
          | 
         // addrs bits for the bank, row and column
  | 
      
      
         | 248 | 
          | 
          | 
         //
  | 
      
      
         | 249 | 
          | 
          | 
          
  | 
      
      
         | 250 | 
         13 | 
         dinesha | 
         // Bank Bits are always - 2 Bits
  | 
      
      
         | 251 | 
          | 
          | 
            assign r2b_ba = (cfg_colbits == 2'b00) ? {curr_sdr_addr[9:8]}   :
  | 
      
      
         | 252 | 
          | 
          | 
                            (cfg_colbits == 2'b01) ? {curr_sdr_addr[10:9]}  :
  | 
      
      
         | 253 | 
          | 
          | 
                            (cfg_colbits == 2'b10) ? {curr_sdr_addr[11:10]} : curr_sdr_addr[12:11];
  | 
      
      
         | 254 | 
         3 | 
         dinesha | 
          
  | 
      
      
         | 255 | 
         13 | 
         dinesha | 
            /********************
  | 
      
      
         | 256 | 
          | 
          | 
            *  Colbits Mapping:
  | 
      
      
         | 257 | 
          | 
          | 
            *           2'b00 - 8 Bit
  | 
      
      
         | 258 | 
          | 
          | 
            *           2'b01 - 16 Bit
  | 
      
      
         | 259 | 
          | 
          | 
            *           2'b10 - 10 Bit
  | 
      
      
         | 260 | 
          | 
          | 
            *           2'b11 - 11 Bits
  | 
      
      
         | 261 | 
          | 
          | 
            ************************/
  | 
      
      
         | 262 | 
          | 
          | 
            assign r2b_caddr = (cfg_colbits == 2'b00) ? {4'b0, curr_sdr_addr[7:0]} :
  | 
      
      
         | 263 | 
          | 
          | 
                               (cfg_colbits == 2'b01) ? {3'b0, curr_sdr_addr[8:0]} :
  | 
      
      
         | 264 | 
          | 
          | 
                               (cfg_colbits == 2'b10) ? {2'b0, curr_sdr_addr[9:0]} : {1'b0, curr_sdr_addr[10:0]};
  | 
      
      
         | 265 | 
         3 | 
         dinesha | 
          
  | 
      
      
         | 266 | 
         13 | 
         dinesha | 
            assign r2b_raddr = (cfg_colbits == 2'b00)  ? curr_sdr_addr[21:10] :
  | 
      
      
         | 267 | 
          | 
          | 
                               (cfg_colbits == 2'b01)  ? curr_sdr_addr[22:11] :
  | 
      
      
         | 268 | 
          | 
          | 
                               (cfg_colbits == 2'b10)  ? curr_sdr_addr[23:12] : curr_sdr_addr[24:13];
  | 
      
      
         | 269 | 
          | 
          | 
          
  | 
      
      
         | 270 | 
         3 | 
         dinesha | 
          
  | 
      
      
         | 271 | 
          | 
          | 
         endmodule // sdr_req_gen
  |