AMC13
Firmwares for the different applications of the AMC13 uTCA board made at Boston University
 All Classes Variables
mig_7series_v1_9_rank_mach.v
1  //*****************************************************************************
2 // (c) Copyright 2008 - 2013 Xilinx, Inc. All rights reserved.
3 //
4 // This file contains confidential and proprietary information
5 // of Xilinx, Inc. and is protected under U.S. and
6 // international copyright and other intellectual property
7 // laws.
8 //
9 // DISCLAIMER
10 // This disclaimer is not a license and does not grant any
11 // rights to the materials distributed herewith. Except as
12 // otherwise provided in a valid license issued to you by
13 // Xilinx, and to the maximum extent permitted by applicable
14 // law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND
15 // WITH ALL FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES
16 // AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING
17 // BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, NON-
18 // INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and
19 // (2) Xilinx shall not be liable (whether in contract or tort,
20 // including negligence, or under any other theory of
21 // liability) for any loss or damage of any kind or nature
22 // related to, arising under or in connection with these
23 // materials, including for any direct, or any indirect,
24 // special, incidental, or consequential loss or damage
25 // (including loss of data, profits, goodwill, or any type of
26 // loss or damage suffered as a result of any action brought
27 // by a third party) even if such damage or loss was
28 // reasonably foreseeable or Xilinx had been advised of the
29 // possibility of the same.
30 //
31 // CRITICAL APPLICATIONS
32 // Xilinx products are not designed or intended to be fail-
33 // safe, or for use in any application requiring fail-safe
34 // performance, such as life-support or safety devices or
35 // systems, Class III medical devices, nuclear facilities,
36 // applications related to the deployment of airbags, or any
37 // other applications that could lead to death, personal
38 // injury, or severe property or environmental damage
39 // (individually and collectively, "Critical
40 // Applications"). Customer assumes the sole risk and
41 // liability of any use of Xilinx products in Critical
42 // Applications, subject only to applicable laws and
43 // regulations governing limitations on product liability.
44 //
45 // THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS
46 // PART OF THIS FILE AT ALL TIMES.
47 //
48 //*****************************************************************************
49 // ____ ____
50 // / /\/ /
51 // /___/ \ / Vendor : Xilinx
52 // \ \ \/ Version : %version
53 // \ \ Application : MIG
54 // / / Filename : rank_mach.v
55 // /___/ /\ Date Last Modified : $date$
56 // \ \ / \ Date Created : Tue Jun 30 2009
57 // \___\/\___\
58 //
59 //Device : 7-Series
60 //Design Name : DDR3 SDRAM
61 //Purpose :
62 //Reference :
63 //Revision History :
64 //*****************************************************************************
65 
66 // Top level rank machine structural block. This block
67 // instantiates a configurable number of rank controller blocks.
68 
69 `timescale 1ps/1ps
70 
72  (
73  parameter BURST_MODE = "8",
74  parameter CS_WIDTH = 4,
75  parameter DRAM_TYPE = "DDR3",
76  parameter MAINT_PRESCALER_DIV = 40,
77  parameter nBANK_MACHS = 4,
78  parameter nCKESR = 4,
79  parameter nCK_PER_CLK = 2,
80  parameter CL = 5,
81  parameter CWL = 5,
82  parameter DQRD2DQWR_DLY = 2,
83  parameter nFAW = 30,
84  parameter nREFRESH_BANK = 8,
85  parameter nRRD = 4,
86  parameter nWTR = 4,
87  parameter PERIODIC_RD_TIMER_DIV = 20,
88  parameter RANK_BM_BV_WIDTH = 16,
89  parameter RANK_WIDTH = 2,
90  parameter RANKS = 4,
91  parameter REFRESH_TIMER_DIV = 39,
92  parameter ZQ_TIMER_DIV = 640000
93  )
94  (/*AUTOARG**/
95  // Outputs
96  periodic_rd_rank_r, periodic_rd_r, maint_req_r, inhbt_act_faw_r, inhbt_rd,
97  inhbt_wr, maint_rank_r, maint_zq_r, maint_sre_r, maint_srx_r, app_sr_active,
98  app_ref_ack, app_zq_ack, col_rd_wr, maint_ref_zq_wip,
99  // Inputs
100  wr_this_rank_r, slot_1_present, slot_0_present, sending_row,
101  sending_col, rst, rd_this_rank_r, rank_busy_r, periodic_rd_ack_r,
102  maint_wip_r, insert_maint_r1, init_calib_complete, clk, app_zq_req,
103  app_sr_req, app_ref_req, app_periodic_rd_req, act_this_rank_r
104  );
105 
106  /*AUTOINPUT**/
107  // Beginning of automatic inputs (from unused autoinst inputs)
108  input [RANK_BM_BV_WIDTH-1:0] act_this_rank_r; // To rank_cntrl0 of rank_cntrl.v
109  input app_periodic_rd_req; // To rank_cntrl0 of rank_cntrl.v
110  input app_ref_req; // To rank_cntrl0 of rank_cntrl.v
111  input app_zq_req; // To rank_common0 of rank_common.v
112  input app_sr_req; // To rank_common0 of rank_common.v
113  input clk; // To rank_cntrl0 of rank_cntrl.v, ...
114  input col_rd_wr; // To rank_cntrl0 of rank_cntrl.v, ...
115  input init_calib_complete; // To rank_cntrl0 of rank_cntrl.v, ...
116  input insert_maint_r1; // To rank_cntrl0 of rank_cntrl.v, ...
117  input maint_wip_r; // To rank_common0 of rank_common.v
118  input periodic_rd_ack_r; // To rank_common0 of rank_common.v
119  input [(RANKS*nBANK_MACHS)-1:0] rank_busy_r; // To rank_cntrl0 of rank_cntrl.v
120  input [RANK_BM_BV_WIDTH-1:0] rd_this_rank_r; // To rank_cntrl0 of rank_cntrl.v
121  input rst; // To rank_cntrl0 of rank_cntrl.v, ...
122  input [nBANK_MACHS-1:0] sending_col; // To rank_cntrl0 of rank_cntrl.v
123  input [nBANK_MACHS-1:0] sending_row; // To rank_cntrl0 of rank_cntrl.v
124  input [7:0] slot_0_present; // To rank_common0 of rank_common.v
125  input [7:0] slot_1_present; // To rank_common0 of rank_common.v
126  input [RANK_BM_BV_WIDTH-1:0] wr_this_rank_r; // To rank_cntrl0 of rank_cntrl.v
127  // End of automatics
128 
129  /*AUTOOUTPUT**/
130  // Beginning of automatic outputs (from unused autoinst outputs)
131  output maint_req_r; // From rank_common0 of rank_common.v
132  output periodic_rd_r; // From rank_common0 of rank_common.v
133  output [RANK_WIDTH-1:0] periodic_rd_rank_r; // From rank_common0 of rank_common.v
134  // End of automatics
135 
136  /*AUTOWIRE**/
137  // Beginning of automatic wires (for undeclared instantiated-module outputs)
138  wire maint_prescaler_tick_r; // From rank_common0 of rank_common.v
139  wire refresh_tick; // From rank_common0 of rank_common.v
140  // End of automatics
141 
142 
143  output [RANKS-1:0] inhbt_act_faw_r;
144  output [RANKS-1:0] inhbt_rd;
145  output [RANKS-1:0] inhbt_wr;
146  output [RANK_WIDTH-1:0] maint_rank_r;
147  output maint_zq_r;
148  output maint_sre_r;
149  output maint_srx_r;
150  output app_sr_active;
151  output app_ref_ack;
152  output app_zq_ack;
153  output maint_ref_zq_wip;
154 
155  wire [RANKS-1:0] refresh_request;
156  wire [RANKS-1:0] periodic_rd_request;
157  wire [RANKS-1:0] clear_periodic_rd_request;
158 
159  genvar ID;
160  generate
161  for (ID=0; ID<RANKS; ID=ID+1) begin:rank_cntrl
163  (/*AUTOINSTPARAM**/
164  // Parameters
165  .BURST_MODE (BURST_MODE),
166  .ID (ID),
167  .nBANK_MACHS (nBANK_MACHS),
168  .nCK_PER_CLK (nCK_PER_CLK),
169  .CL (CL),
170  .CWL (CWL),
171  .DQRD2DQWR_DLY (DQRD2DQWR_DLY),
172  .nFAW (nFAW),
173  .nREFRESH_BANK (nREFRESH_BANK),
174  .nRRD (nRRD),
175  .nWTR (nWTR),
176  .PERIODIC_RD_TIMER_DIV (PERIODIC_RD_TIMER_DIV),
177  .RANK_BM_BV_WIDTH (RANK_BM_BV_WIDTH),
178  .RANK_WIDTH (RANK_WIDTH),
179  .RANKS (RANKS),
180  .REFRESH_TIMER_DIV (REFRESH_TIMER_DIV))
181  rank_cntrl0
182  (.clear_periodic_rd_request (clear_periodic_rd_request[ID]),
183  .inhbt_act_faw_r (inhbt_act_faw_r[ID]),
184  .inhbt_rd (inhbt_rd[ID]),
185  .inhbt_wr (inhbt_wr[ID]),
186  .periodic_rd_request (periodic_rd_request[ID]),
187  .refresh_request (refresh_request[ID]),
188  /*AUTOINST**/
189  // Inputs
190  .clk (clk),
191  .rst (rst),
192  .col_rd_wr (col_rd_wr),
193  .sending_row (sending_row[nBANK_MACHS-1:0]),
194  .act_this_rank_r (act_this_rank_r[RANK_BM_BV_WIDTH-1:0]),
195  .sending_col (sending_col[nBANK_MACHS-1:0]),
196  .wr_this_rank_r (wr_this_rank_r[RANK_BM_BV_WIDTH-1:0]),
197  .app_ref_req (app_ref_req),
198  .init_calib_complete (init_calib_complete),
199  .rank_busy_r (rank_busy_r[(RANKS*nBANK_MACHS)-1:0]),
200  .refresh_tick (refresh_tick),
201  .insert_maint_r1 (insert_maint_r1),
202  .maint_zq_r (maint_zq_r),
203  .maint_sre_r (maint_sre_r),
204  .maint_srx_r (maint_srx_r),
205  .maint_rank_r (maint_rank_r[RANK_WIDTH-1:0]),
206  .app_periodic_rd_req (app_periodic_rd_req),
207  .maint_prescaler_tick_r (maint_prescaler_tick_r),
208  .rd_this_rank_r (rd_this_rank_r[RANK_BM_BV_WIDTH-1:0]));
209  end
210  endgenerate
211 
213  (/*AUTOINSTPARAM**/
214  // Parameters
215  .DRAM_TYPE (DRAM_TYPE),
216  .MAINT_PRESCALER_DIV (MAINT_PRESCALER_DIV),
217  .nBANK_MACHS (nBANK_MACHS),
218  .nCKESR (nCKESR),
219  .nCK_PER_CLK (nCK_PER_CLK),
220  .PERIODIC_RD_TIMER_DIV (PERIODIC_RD_TIMER_DIV),
221  .RANK_WIDTH (RANK_WIDTH),
222  .RANKS (RANKS),
223  .REFRESH_TIMER_DIV (REFRESH_TIMER_DIV),
224  .ZQ_TIMER_DIV (ZQ_TIMER_DIV))
225  rank_common0
226  (.clear_periodic_rd_request (clear_periodic_rd_request[RANKS-1:0]),
227  /*AUTOINST**/
228  // Outputs
229  .maint_prescaler_tick_r (maint_prescaler_tick_r),
230  .refresh_tick (refresh_tick),
231  .maint_zq_r (maint_zq_r),
232  .maint_sre_r (maint_sre_r),
233  .maint_srx_r (maint_srx_r),
234  .maint_req_r (maint_req_r),
235  .maint_rank_r (maint_rank_r[RANK_WIDTH-1:0]),
236  .maint_ref_zq_wip (maint_ref_zq_wip),
237  .periodic_rd_r (periodic_rd_r),
238  .periodic_rd_rank_r (periodic_rd_rank_r[RANK_WIDTH-1:0]),
239  // Inputs
240  .clk (clk),
241  .rst (rst),
242  .init_calib_complete (init_calib_complete),
243  .app_ref_req (app_ref_req),
244  .app_ref_ack (app_ref_ack),
245  .app_zq_req (app_zq_req),
246  .app_zq_ack (app_zq_ack),
247  .app_sr_req (app_sr_req),
248  .app_sr_active (app_sr_active),
249  .insert_maint_r1 (insert_maint_r1),
250  .refresh_request (refresh_request[RANKS-1:0]),
251  .maint_wip_r (maint_wip_r),
252  .slot_0_present (slot_0_present[7:0]),
253  .slot_1_present (slot_1_present[7:0]),
254  .periodic_rd_request (periodic_rd_request[RANKS-1:0]),
255  .periodic_rd_ack_r (periodic_rd_ack_r));
256 
257 
258 endmodule