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 50 and 51

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

Rev 50 Rev 51
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
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;
 
 
   input [1:0]                   a2b_req_depth;
   input [1:0]                   a2b_req_depth;
 
 
   /* Req from bank_ctl */
   /* Req from bank_ctl */
Line 172... Line 173...
 
 
   wire [11:0] bank0_row, bank1_row, bank2_row, bank3_row;
   wire [11:0] bank0_row, bank1_row, bank2_row, bank3_row;
 
 
   assign b2x_tras_ok = &tras_ok;
   assign b2x_tras_ok = &tras_ok;
 
 
 
 
   // Distribute the request from req_gen
   // Distribute the request from req_gen
 
 
   assign r2i_req[0] = (r2b_ba == 2'b00) ? r2b_req & ~rank_fifo_full : 1'b0;
   assign r2i_req[0] = (r2b_ba == 2'b00) ? r2b_req & ~rank_fifo_full : 1'b0;
   assign r2i_req[1] = (r2b_ba == 2'b01) ? r2b_req & ~rank_fifo_full : 1'b0;
   assign r2i_req[1] = (r2b_ba == 2'b01) ? r2b_req & ~rank_fifo_full : 1'b0;
   assign r2i_req[2] = (r2b_ba == 2'b10) ? r2b_req & ~rank_fifo_full : 1'b0;
   assign r2i_req[2] = (r2b_ba == 2'b10) ? r2b_req & ~rank_fifo_full : 1'b0;
   assign r2i_req[3] = (r2b_ba == 2'b11) ? r2b_req & ~rank_fifo_full : 1'b0;
   assign r2i_req[3] = (r2b_ba == 2'b11) ? r2b_req & ~rank_fifo_full : 1'b0;
 
 
   assign b2r_ack = (r2b_ba == 2'b00) ? i2r_ack[0] :
   /******************
                    (r2b_ba == 2'b01) ? i2r_ack[1] :
   Modified the Better FPGA Timing Purpose
                    (r2b_ba == 2'b10) ? i2r_ack[2] :
   assign b2r_ack = (r2b_ba == 2'b00) ? i2r_ack[0] :
                    (r2b_ba == 2'b11) ? i2r_ack[3] : 1'b0;
                    (r2b_ba == 2'b01) ? i2r_ack[1] :
 
                    (r2b_ba == 2'b10) ? i2r_ack[2] :
 
                    (r2b_ba == 2'b11) ? i2r_ack[3] : 1'b0;
 
   ********************/
 
   // Assumption: Only one Ack Will be asserted at a time.
 
   assign b2r_ack  =|i2r_ack;
 
 
   assign b2r_arb_ok = ~rank_fifo_full;
   assign b2r_arb_ok = ~rank_fifo_full;
 
 
   // Put the requests from the 4 bank_fsms into a 4 deep shift
   // Put the requests from the 4 bank_fsms into a 4 deep shift
   // register file. The earliest request is prioritized over the
   // register file. The earliest request is prioritized over the
Line 196... Line 203...
   // Mux the req/cmd to xfr_ctl. Allow RD/WR commands from the request in
   // Mux the req/cmd to xfr_ctl. Allow RD/WR commands from the request in
   // rank0, allow only PR/ACT commands from the requests in other ranks
   // rank0, allow only PR/ACT commands from the requests in other ranks
   // If the rank_fifo is empty, send the request from the bank addressed by
   // If the rank_fifo is empty, send the request from the bank addressed by
   // r2b_ba 
   // r2b_ba 
 
 
   assign xfr_ba = (rank_fifo_mt) ? r2b_ba : rank_ba[1:0];
   // In FPGA Mode, to improve the timing, also send the rank_ba
   assign xfr_ba_last = (rank_fifo_mt) ? sdr_req_norm_dma_last : rank_ba_last[0];
   assign xfr_ba = (`TARGET_DESIGN == `FPGA) ? rank_ba[1:0]:
 
                   ((rank_fifo_mt) ? r2b_ba : rank_ba[1:0]);
 
   assign xfr_ba_last = (`TARGET_DESIGN == `FPGA) ? rank_ba_last[0]:
 
                        ((rank_fifo_mt) ? sdr_req_norm_dma_last : rank_ba_last[0]);
 
 
   assign rank_req[0] = i2x_req[xfr_ba];     // each rank generates requests
   assign rank_req[0] = i2x_req[xfr_ba];     // each rank generates requests
 
 
   assign rank_req[1] = (rank_cnt < 3'h2) ? 1'b0 :
   assign rank_req[1] = (rank_cnt < 3'h2) ? 1'b0 :
                        (rank_ba[3:2] == 2'b00) ? i2x_req[0] & ~i2x_cmd0[1] :
                        (rank_ba[3:2] == 2'b00) ? i2x_req[0] & ~i2x_cmd0[1] :
Line 348... Line 358...
                         (rank_fifo_rd) ? rank_ba[7:6] : rank_ba[5:4];
                         (rank_fifo_rd) ? rank_ba[7:6] : rank_ba[5:4];
 
 
         rank_ba[7:6] <= (rank_wr_sel[3]) ? r2b_ba :
         rank_ba[7:6] <= (rank_wr_sel[3]) ? r2b_ba :
                         (rank_fifo_rd) ? 2'b00 : rank_ba[7:6];
                         (rank_fifo_rd) ? 2'b00 : rank_ba[7:6];
 
 
 
         if(`TARGET_DESIGN == `ASIC) begin // This Logic is implemented for ASIC Only
 
            // Note: Currenly top-level does not generate the
 
            // sdr_req_norm_dma_last signal and can be tied zero at top-level
         rank_ba_last[0] <= (rank_wr_sel[0]) ? sdr_req_norm_dma_last :
         rank_ba_last[0] <= (rank_wr_sel[0]) ? sdr_req_norm_dma_last :
                            (rank_fifo_rd) ?  rank_ba_last[1] : rank_ba_last[0];
                            (rank_fifo_rd) ?  rank_ba_last[1] : rank_ba_last[0];
 
 
         rank_ba_last[1] <= (rank_wr_sel[1]) ? sdr_req_norm_dma_last :
         rank_ba_last[1] <= (rank_wr_sel[1]) ? sdr_req_norm_dma_last :
                            (rank_fifo_rd) ?  rank_ba_last[2] : rank_ba_last[1];
                            (rank_fifo_rd) ?  rank_ba_last[2] : rank_ba_last[1];
Line 359... Line 372...
         rank_ba_last[2] <= (rank_wr_sel[2]) ? sdr_req_norm_dma_last :
         rank_ba_last[2] <= (rank_wr_sel[2]) ? sdr_req_norm_dma_last :
                            (rank_fifo_rd) ?  rank_ba_last[3] : rank_ba_last[2];
                            (rank_fifo_rd) ?  rank_ba_last[3] : rank_ba_last[2];
 
 
         rank_ba_last[3] <= (rank_wr_sel[3]) ? sdr_req_norm_dma_last :
         rank_ba_last[3] <= (rank_wr_sel[3]) ? sdr_req_norm_dma_last :
                            (rank_fifo_rd) ?  1'b0 : rank_ba_last[3];
                            (rank_fifo_rd) ?  1'b0 : rank_ba_last[3];
 
         end
 
 
      end // else: !if(~reset_n)
      end // else: !if(~reset_n)
 
 
   assign xfr_ok[0] = (xfr_ba == 2'b00) ? 1'b1 : 1'b0;
   assign xfr_ok[0] = (xfr_ba == 2'b00) ? 1'b1 : 1'b0;
   assign xfr_ok[1] = (xfr_ba == 2'b01) ? 1'b1 : 1'b0;
   assign xfr_ok[1] = (xfr_ba == 2'b01) ? 1'b1 : 1'b0;

powered by: WebSVN 2.1.0

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