add DDR2 controller, generated via MIG
[fleet.git] / src / edu / berkeley / fleet / fpga / main.ucf
1 ## Clock, Reset ##############################################################################
2
3 Net clk_pin LOC=AH17;
4
5 Net rst_pin LOC=E9;
6 Net rst_pin PULLUP;
7
8 Net clk_pin TNM_NET = clk_pin;
9 TIMESPEC TS_clk_pin = PERIOD clk_pin 30 ns HIGH 50%;  # 33Mhz
10
11 #Net clk_unbuffered TNM_NET = clk_unbuffered;
12 #TIMESPEC TS_clk_unbuffered = PERIOD clk_unbuffered 20 ns;
13
14 Net rst_pin TIG;
15
16 ## UART ##############################################################################
17
18 #Net uart_cts LOC=G6;
19 #Net uart_cts IOSTANDARD = LVCMOS33;
20 #Net uart_cts TIG;
21
22 #Net uart_rts LOC=F6;
23 #Net uart_rts IOSTANDARD = LVCMOS33;
24 #Net uart_rts TIG;
25
26 Net uart_in LOC=AG15;
27 #Net uart_in IOSTANDARD = LVCMOS33;
28 Net uart_in TIG;
29 Net uart_in PULLUP;
30
31 Net uart_out LOC=AG20;
32 #Net uart_out IOSTANDARD = LVCMOS33;
33 Net uart_out TIG;
34 Net uart_out PULLUP;
35
36 ## DVI ##############################################################################
37
38 NET  dvi_d0               LOC="AB8";   # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
39 NET  dvi_d1               LOC="AC8";   # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
40 NET  dvi_d2               LOC="AN12";  # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
41 NET  dvi_d3               LOC="AP12";  # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
42 NET  dvi_d4               LOC="AA9";   # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
43 NET  dvi_d5               LOC="AA8";   # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
44 NET  dvi_d6               LOC="AM13";  # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
45 NET  dvi_d7               LOC="AN13";  # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
46 NET  dvi_d8               LOC="AA10";  # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
47 NET  dvi_d9               LOC="AB10";  # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
48 NET  dvi_d10              LOC="AP14";  # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
49 NET  dvi_d11              LOC="AN14";  # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
50 NET  dvi_de               LOC="AE8";   # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
51 NET  dvi_h                LOC="AM12";  # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
52 NET  dvi_reset_b          LOC="AK6";   # Bank 18, Vcco=3.3V, No DCI
53 NET  dvi_v                LOC="AM11";  # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
54 NET  dvi_xclk_n           LOC="AL10";  # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
55 NET  dvi_xclk_p           LOC="AL11";  # Bank 22, Vcco=3.3V, DCI using 49.9 ohm resistors
56
57 #NET  dvi_gpio1            LOC="N30" | IOSTANDARD="LVCMOS18";   # Bank 15, Vcco=1.8V, DCI using 49.9 ohm resistors
58 #NET  dvi_iic_scl          LOC="U27" | IOSTANDARD="LVCMOS18";   # Bank 15, Vcco=1.8V, DCI using 49.9 ohm resistors
59 #NET  dvi_iic_sda          LOC="T29" | IOSTANDARD="LVCMOS18";   # Bank 15, Vcco=1.8V, DCI using 49.9 ohm resistors
60
61 NET  gpio_led_c           LOC="AJ6";   # Bank 18, Vcco=3.3V, No DCI
62 NET  gpio_led_e           LOC="AK7";   # Bank 18, Vcco=3.3V, No DCI
63 NET  gpio_led_n           LOC="U8";    # Bank 18, Vcco=3.3V, No DCI
64 NET  gpio_led_s           LOC="V8";    # Bank 18, Vcco=3.3V, No DCI
65 NET  gpio_led_w           LOC="AJ7";   # Bank 18, Vcco=3.3V, No DCI
66 NET  gpio_led_0           LOC="H18";   # Bank 3, Vcco=2.5V, No DCI
67 NET  gpio_led_1           LOC="L18";   # Bank 3, Vcco=2.5V, No DCI
68 NET  gpio_led_2           LOC="G15";   # Bank 3, Vcco=2.5V, No DCI
69 NET  gpio_led_3           LOC="AD26" | IOSTANDARD="LVCMOS18";  # Bank 21, Vcco=1.8V, DCI using 49.9 ohm resistors
70 NET  gpio_led_4           LOC="G16";   # Bank 3, Vcco=2.5V, No DCI
71 NET  gpio_led_5           LOC="AD25" | IOSTANDARD="LVCMOS18";  # Bank 21, Vcco=1.8V, DCI using 49.9 ohm resistors
72 NET  gpio_led_6           LOC="AD24" | IOSTANDARD="LVCMOS18";  # Bank 21, Vcco=1.8V, DCI using 49.9 ohm resistors
73 NET  gpio_led_7           LOC="AE24" | IOSTANDARD="LVCMOS18";  # Bank 21, Vcco=1.8V, DCI using 49.9 ohm resistors
74
75
76 ## VGA ##############################################################################
77
78 #net "vga_hsync" loc   = f9;
79 #net "vga_hsync" slew  = slow;
80 #net "vga_hsync" drive = 2;
81 #
82 #net "vga_vsync" loc   = h10;
83 #net "vga_vsync" slew  = slow;
84 #net "vga_vsync" drive = 2;
85 #
86 #net "vga_clkout"  loc ="c12";
87 #net "vga_clkout"  slew = fast;
88 #net "vga_clkout"  drive = 8;
89 #
90 #net "vga_r<7>" loc ="h8";
91 #net "vga_r<6>" loc ="c5";
92 #net "vga_r<5>" loc ="h9";
93 #net "vga_r<4>" loc ="g12";
94 #net "vga_r<3>" loc ="g11";
95 #net "vga_r<2>" loc ="g10";
96 #net "vga_r<1>" loc ="f11";
97 #net "vga_r<0>" loc ="f10";
98 #net "vga_r<*>" slew = slow;
99 #net "vga_r<*>" drive = 2;
100 #
101 #net "vga_g<7>" loc ="d5";
102 #net "vga_g<6>" loc ="d4";
103 #net "vga_g<5>" loc ="f8";
104 #net "vga_g<4>" loc ="e13";
105 #net "vga_g<3>" loc ="e12";
106 #net "vga_g<2>" loc ="e11";
107 #net "vga_g<1>" loc ="e9";
108 #net "vga_g<0>" loc ="e8";
109 #net "vga_g<*>" slew = slow;
110 #net "vga_g<*>" drive = 2;
111 #
112 #net "vga_b<7>" loc ="c4";
113 #net "vga_b<6>" loc ="c3";
114 #net "vga_b<5>" loc ="d12";
115 #net "vga_b<4>" loc ="d11";
116 #net "vga_b<3>" loc ="d10";
117 #net "vga_b<2>" loc ="d9";
118 #net "vga_b<1>" loc ="c13";
119 #net "vga_b<0>" loc ="g8";
120 #net "vga_b<*>" slew = slow;
121 #net "vga_b<*>" drive = 2;
122 #
123 #net "vga_*" iostandard = lvcmos33;
124 #
125
126 ##############################################################################
127 ##############################################################################
128 ##############################################################################
129 # DDR2
130
131 ############################################################################
132 ## 
133 ##  Xilinx, Inc. 2006            www.xilinx.com 
134 ##  ÐÇÆÚÒ» ¾ÅÔ 22 11:53:57 2008
135 ##  Generated by MIG Version 2.3
136 ##  
137 ############################################################################
138 ##  File name :       ddr2_sdram.ucf
139 ## 
140 ##  Details :     Constraints file
141 ##                    FPGA family:       virtex5
142 ##                    FPGA:              xc5vlx110t-ff1136
143 ##                    Speedgrade:        -1
144 ##                    Design Entry:      VERILOG
145 ##                    Frequency:         266.66 MHz
146 ##                    Design:            with Test bench
147 ##                    DCM Used:          Enable
148 ##                    Two Bytes per Bank:Disable
149 ##                    No.Of Controllers: 1
150 ##
151 ############################################################################ 
152
153 ############################################################################
154 # Clock constraints                                                        #
155 ############################################################################
156
157 NET "*/u_ddr2_infrastructure/sys_clk_ibufg" TNM_NET =  "SYS_CLK";
158 TIMESPEC "TS_SYS_CLK" = PERIOD "SYS_CLK" 5 ns HIGH 50 %;
159
160 NET "*/u_ddr2_infrastructure/clk200_ibufg" TNM_NET = "SYS_CLK_200";
161 TIMESPEC "TS_SYS_CLK_200" = PERIOD "SYS_CLK_200" 5 ns HIGH 50 %;
162
163 ############################################################################
164 ########################################################################
165 # Controller 0
166 # Memory Device: DDR2_SDRAM->SODIMMs->MT4HTF3264HY-53E #
167 # Data Width:     64 #
168 # Data Mask:     1 #
169 ########################################################################
170
171 ################################################################################
172 # I/O STANDARDS
173 ################################################################################
174
175 NET  "ddr2_dq[*]"                               IOSTANDARD = SSTL18_II_DCI;
176 NET  "ddr2_a[*]"                                IOSTANDARD = SSTL18_II;
177 NET  "ddr2_ba[*]"                               IOSTANDARD = SSTL18_II;
178 NET  "ddr2_ras_n"                               IOSTANDARD = SSTL18_II;
179 NET  "ddr2_cas_n"                               IOSTANDARD = SSTL18_II;
180 NET  "ddr2_we_n"                                IOSTANDARD = SSTL18_II;
181 NET  "ddr2_cs_n[*]"                             IOSTANDARD = SSTL18_II;
182 NET  "ddr2_odt[*]"                              IOSTANDARD = SSTL18_II;
183 NET  "ddr2_cke[*]"                              IOSTANDARD = SSTL18_II;
184 NET  "ddr2_dm[*]"                               IOSTANDARD = SSTL18_II;
185 #NET  "sys_clk_p"                                IOSTANDARD = LVDS_25 | DIFF_TERM = TRUE;
186 #NET  "sys_clk_n"                                IOSTANDARD = LVDS_25 | DIFF_TERM = TRUE;
187 #NET  "clk200_p"                                 IOSTANDARD = LVDS_25 | DIFF_TERM = TRUE;
188 #NET  "clk200_n"                                 IOSTANDARD = LVDS_25 | DIFF_TERM = TRUE;
189 #NET  "sys_rst_n"                                IOSTANDARD = LVCMOS18;
190 #NET  "phy_init_done"                           IOSTANDARD = LVCMOS18;
191 #NET  "error"                                   IOSTANDARD = LVCMOS18;
192 NET  "ddr2_dqs[*]"                              IOSTANDARD = DIFF_SSTL18_II_DCI;
193 NET  "ddr2_dqs_n[*]"                            IOSTANDARD = DIFF_SSTL18_II_DCI;
194 NET  "ddr2_ck[*]"                               IOSTANDARD = DIFF_SSTL18_II;
195 NET  "ddr2_ck_n[*]"                             IOSTANDARD = DIFF_SSTL18_II;
196
197 ################################################################################
198 # Location Constraints
199 ################################################################################
200
201 NET  "ddr2_dq[0]"                                LOC = "AF30" ;       #Bank 17
202 NET  "ddr2_dq[1]"                                LOC = "AK31" ;       #Bank 17
203 NET  "ddr2_dq[2]"                                LOC = "AF31" ;       #Bank 17
204 NET  "ddr2_dq[3]"                                LOC = "AD30" ;       #Bank 17
205 NET  "ddr2_dq[4]"                                LOC = "AJ30" ;       #Bank 17
206 NET  "ddr2_dq[5]"                                LOC = "AF29" ;       #Bank 17
207 NET  "ddr2_dq[6]"                                LOC = "AD29" ;       #Bank 17
208 NET  "ddr2_dq[7]"                                LOC = "AE29" ;       #Bank 17
209 NET  "ddr2_dq[8]"                                LOC = "AH27" ;       #Bank 21
210 NET  "ddr2_dq[9]"                                LOC = "AF28" ;       #Bank 21
211 NET  "ddr2_dq[10]"                               LOC = "AH28" ;       #Bank 21
212 NET  "ddr2_dq[11]"                               LOC = "AA28" ;       #Bank 21
213 NET  "ddr2_dq[12]"                               LOC = "AG25" ;       #Bank 21
214 NET  "ddr2_dq[13]"                               LOC = "AJ26" ;       #Bank 21
215 NET  "ddr2_dq[14]"                               LOC = "AG28" ;       #Bank 21
216 NET  "ddr2_dq[15]"                               LOC = "AB28" ;       #Bank 21
217 NET  "ddr2_dq[16]"                               LOC = "AC28" ;       #Bank 21
218 NET  "ddr2_dq[17]"                               LOC = "AB25" ;       #Bank 21
219 NET  "ddr2_dq[18]"                               LOC = "AC27" ;       #Bank 21
220 NET  "ddr2_dq[19]"                               LOC = "AA26" ;       #Bank 21
221 NET  "ddr2_dq[20]"                               LOC = "AB26" ;       #Bank 21
222 NET  "ddr2_dq[21]"                               LOC = "AA24" ;       #Bank 21
223 NET  "ddr2_dq[22]"                               LOC = "AB27" ;       #Bank 21
224 NET  "ddr2_dq[23]"                               LOC = "AA25" ;       #Bank 21
225 NET  "ddr2_dq[24]"                               LOC = "AC29" ;       #Bank 17
226 NET  "ddr2_dq[25]"                               LOC = "AB30" ;       #Bank 17
227 NET  "ddr2_dq[26]"                               LOC = "W31" ;        #Bank 17
228 NET  "ddr2_dq[27]"                               LOC = "V30" ;        #Bank 17
229 NET  "ddr2_dq[28]"                               LOC = "AC30" ;       #Bank 17
230 NET  "ddr2_dq[29]"                               LOC = "W29" ;        #Bank 17
231 NET  "ddr2_dq[30]"                               LOC = "V27" ;        #Bank 17
232 NET  "ddr2_dq[31]"                               LOC = "W27" ;        #Bank 17
233 NET  "ddr2_dq[32]"                               LOC = "V29" ;        #Bank 17
234 NET  "ddr2_dq[33]"                               LOC = "Y27" ;        #Bank 17
235 NET  "ddr2_dq[34]"                               LOC = "Y26" ;        #Bank 17
236 NET  "ddr2_dq[35]"                               LOC = "W24" ;        #Bank 17
237 NET  "ddr2_dq[36]"                               LOC = "V28" ;        #Bank 17
238 NET  "ddr2_dq[37]"                               LOC = "W25" ;        #Bank 17
239 NET  "ddr2_dq[38]"                               LOC = "W26" ;        #Bank 17
240 NET  "ddr2_dq[39]"                               LOC = "V24" ;        #Bank 17
241 NET  "ddr2_dq[40]"                               LOC = "R24" ;        #Bank 19
242 NET  "ddr2_dq[41]"                               LOC = "P25" ;        #Bank 19
243 NET  "ddr2_dq[42]"                               LOC = "N24" ;        #Bank 19
244 NET  "ddr2_dq[43]"                               LOC = "P26" ;        #Bank 19
245 NET  "ddr2_dq[44]"                               LOC = "T24" ;        #Bank 19
246 NET  "ddr2_dq[45]"                               LOC = "N25" ;        #Bank 19
247 NET  "ddr2_dq[46]"                               LOC = "P27" ;        #Bank 19
248 NET  "ddr2_dq[47]"                               LOC = "N28" ;        #Bank 19
249 NET  "ddr2_dq[48]"                               LOC = "M28" ;        #Bank 19
250 NET  "ddr2_dq[49]"                               LOC = "L28" ;        #Bank 19
251 NET  "ddr2_dq[50]"                               LOC = "F25" ;        #Bank 19
252 NET  "ddr2_dq[51]"                               LOC = "H25" ;        #Bank 19
253 NET  "ddr2_dq[52]"                               LOC = "K27" ;        #Bank 19
254 NET  "ddr2_dq[53]"                               LOC = "K28" ;        #Bank 19
255 NET  "ddr2_dq[54]"                               LOC = "H24" ;        #Bank 19
256 NET  "ddr2_dq[55]"                               LOC = "G26" ;        #Bank 19
257 NET  "ddr2_dq[56]"                               LOC = "G25" ;        #Bank 19
258 NET  "ddr2_dq[57]"                               LOC = "M26" ;        #Bank 19
259 NET  "ddr2_dq[58]"                               LOC = "J24" ;        #Bank 19
260 NET  "ddr2_dq[59]"                               LOC = "L26" ;        #Bank 19
261 NET  "ddr2_dq[60]"                               LOC = "J27" ;        #Bank 19
262 NET  "ddr2_dq[61]"                               LOC = "M25" ;        #Bank 19
263 NET  "ddr2_dq[62]"                               LOC = "L25" ;        #Bank 19
264 NET  "ddr2_dq[63]"                               LOC = "L24" ;        #Bank 19
265 NET  "ddr2_a[12]"                                LOC = "T31" ;        #Bank 15      
266 NET  "ddr2_a[11]"                                LOC = "R29" ;        #Bank 15      
267 NET  "ddr2_a[10]"                                LOC = "J31" ;        #Bank 15      
268 NET  "ddr2_a[9]"                                 LOC = "R28" ;        #Bank 15
269 NET  "ddr2_a[8]"                                 LOC = "M31" ;        #Bank 15
270 NET  "ddr2_a[7]"                                 LOC = "P30" ;        #Bank 15
271 NET  "ddr2_a[6]"                                 LOC = "P31" ;        #Bank 15
272 NET  "ddr2_a[5]"                                 LOC = "L31" ;        #Bank 15
273 NET  "ddr2_a[4]"                                 LOC = "K31" ;        #Bank 15
274 NET  "ddr2_a[3]"                                 LOC = "P29" ;        #Bank 15      
275 NET  "ddr2_a[2]"                                 LOC = "N29" ;        #Bank 15      
276 NET  "ddr2_a[1]"                                 LOC = "M30" ;        #Bank 15      
277 NET  "ddr2_a[0]"                                 LOC = "L30" ;        #Bank 15      
278 NET  "ddr2_ba[1]"                                LOC = "J30" ;        #Bank 15
279 NET  "ddr2_ba[0]"                                LOC = "G31" ;        #Bank 15
280 NET  "ddr2_ras_n"                                LOC = "H30" ;        #Bank 15
281 NET  "ddr2_cas_n"                                LOC = "E31" ;        #Bank 15
282 NET  "ddr2_we_n"                                 LOC = "K29" ;        #Bank 15
283 NET  "ddr2_cs_n[0]"                              LOC = "L29" ;        #Bank 15
284 NET  "ddr2_odt[0]"                               LOC = "F31" ;        #Bank 15
285 NET  "ddr2_cke[0]"                               LOC = "T28" ;        #Bank 15
286 NET  "ddr2_dm[0]"                                LOC = "AJ31" ;       #Bank 17
287 NET  "ddr2_dm[1]"                                LOC = "AE28" ;       #Bank 21
288 NET  "ddr2_dm[2]"                                LOC = "Y24" ;        #Bank 21
289 NET  "ddr2_dm[3]"                                LOC = "Y31" ;        #Bank 17
290 NET  "ddr2_dm[4]"                                LOC = "V25" ;        #Bank 17
291 NET  "ddr2_dm[5]"                                LOC = "P24" ;        #Bank 19
292 NET  "ddr2_dm[6]"                                LOC = "F26" ;        #Bank 19
293 NET  "ddr2_dm[7]"                                LOC = "J25" ;        #Bank 19
294 NET  "sys_clk_p"                                 LOC = "H14" ;        #Bank 3
295 NET  "sys_clk_n"                                 LOC = "H15" ;        #Bank 3
296 NET  "clk200_p"                                  LOC = "L19" ;        #Bank 3
297 NET  "clk200_n"                                  LOC = "K19" ;        #Bank 3
298 NET  "sys_rst_n"                                 LOC = "E9";            #Bank 20
299 #NET  "phy_init_done"                             LOC = "H18" ;       #Bank 3
300 NET  "error"                                     LOC = "F6";            #Bank 12
301 NET  "ddr2_dqs[0]"                               LOC = "AA29" ;       #Bank 17
302 NET  "ddr2_dqs_n[0]"                             LOC = "AA30" ;       #Bank 17
303 NET  "ddr2_dqs[1]"                               LOC = "AK28" ;       #Bank 21
304 NET  "ddr2_dqs_n[1]"                             LOC = "AK27" ;       #Bank 21
305 NET  "ddr2_dqs[2]"                               LOC = "AK26" ;       #Bank 21
306 NET  "ddr2_dqs_n[2]"                             LOC = "AJ27" ;       #Bank 21
307 NET  "ddr2_dqs[3]"                               LOC = "AB31" ;       #Bank 17
308 NET  "ddr2_dqs_n[3]"                             LOC = "AA31" ;       #Bank 17
309 NET  "ddr2_dqs[4]"                               LOC = "Y28" ;        #Bank 17
310 NET  "ddr2_dqs_n[4]"                             LOC = "Y29" ;        #Bank 17
311 NET  "ddr2_dqs[5]"                               LOC = "E26" ;        #Bank 19
312 NET  "ddr2_dqs_n[5]"                             LOC = "E27" ;        #Bank 19
313 NET  "ddr2_dqs[6]"                               LOC = "H28" ;        #Bank 19
314 NET  "ddr2_dqs_n[6]"                             LOC = "G28" ;        #Bank 19
315 NET  "ddr2_dqs[7]"                               LOC = "G27" ;        #Bank 19
316 NET  "ddr2_dqs_n[7]"                             LOC = "H27" ;        #Bank 19
317 NET  "ddr2_ck[0]"                                LOC = "AK29" ;       #Bank 21
318 NET  "ddr2_ck_n[0]"                              LOC = "AJ29" ;       #Bank 21
319 NET  "ddr2_ck[1]"                                LOC = "E28" ;        #Bank 19
320 NET  "ddr2_ck_n[1]"                              LOC = "F28" ;        #Bank 19
321
322 ################################################################################
323 #IDELAYCTRL Location Constraints
324 ################################################################################
325
326 INST "*/IDELAYCTRL_INST[0].u_idelayctrl" LOC=IDELAYCTRL_X0Y1;
327 INST "*/IDELAYCTRL_INST[1].u_idelayctrl" LOC=IDELAYCTRL_X0Y2;
328 INST "*/IDELAYCTRL_INST[2].u_idelayctrl" LOC=IDELAYCTRL_X0Y6;
329
330 ###############################################################################
331 # Define multicycle paths - these paths may take longer because additional
332 # time allowed for logic to settle in calibration/initialization FSM
333 ###############################################################################
334
335 # MIG 2.1: Eliminate Timegroup definitions for CLK0, and CLK90. Instead trace
336 #          multicycle paths from originating flip-flop to ANY destination
337 #          flip-flop (or in some cases, it can also be a BRAM)
338 # MUX Select for either rising/falling CLK0 for 2nd stage read capture
339 INST "*/u_phy_calib/gen_rd_data_sel*.u_ff_rd_data_sel" TNM = "TNM_RD_DATA_SEL";
340 TIMESPEC "TS_MC_RD_DATA_SEL" = FROM "TNM_RD_DATA_SEL" TO FFS
341 "TS_SYS_CLK" * 4;
342 # MUX select for read data - optional delay on data to account for byte skews
343 #INST "*/u_usr_rd/gen_rden_sel_mux*.u_ff_rden_sel_mux" TNM = "TNM_RDEN_SEL_MUX";
344 #TIMESPEC "TS_MC_RDEN_SEL_MUX" = FROM "TNM_RDEN_SEL_MUX" TO FFS
345 #"TS_SYS_CLK" * 4;
346 # Calibration/Initialization complete status flag (for PHY logic only) - can
347 # be used to drive both flip-flops and BRAMs
348 INST "*/u_phy_init/u_ff_phy_init_data_sel" TNM = "TNM_PHY_INIT_DATA_SEL";
349 TIMESPEC "TS_MC_PHY_INIT_DATA_SEL_0" = FROM "TNM_PHY_INIT_DATA_SEL" TO FFS
350 "TS_SYS_CLK" * 4;
351 TIMESPEC "TS_MC_PHY_INIT_DATA_SEL_90" = FROM "TNM_PHY_INIT_DATA_SEL" TO RAMS
352 "TS_SYS_CLK" * 4;
353 # Select (address) bits for SRL32 shift registers used in stage3/stage4
354 # calibration
355 INST "*/u_phy_calib/gen_gate_dly*.u_ff_gate_dly" TNM = "TNM_GATE_DLY";
356 TIMESPEC "TS_MC_GATE_DLY" = FROM "TNM_GATE_DLY" TO FFS "TS_SYS_CLK" * 4;
357 INST "*/u_phy_calib/gen_rden_dly*.u_ff_rden_dly" TNM = "TNM_RDEN_DLY";
358 TIMESPEC "TS_MC_RDEN_DLY" = FROM "TNM_RDEN_DLY" TO FFS "TS_SYS_CLK" * 4;
359 INST "*/u_phy_calib/gen_cal_rden_dly*.u_ff_cal_rden_dly"
360   TNM = "TNM_CAL_RDEN_DLY";
361 TIMESPEC "TS_MC_CAL_RDEN_DLY" = FROM "TNM_CAL_RDEN_DLY" TO FFS
362   "TS_SYS_CLK" * 4;
363
364 ###############################################################################
365 # DQS Read Post amble Glitch Squelch circuit related constraints
366 ###############################################################################
367
368 ###############################################################################
369 # LOC placement of DQS-squelch related IDDR and IDELAY elements
370 # Each circuit can be located at any of the following locations:
371 #  1. Unused "N"-side of DQS differential pair I/O
372 #  2. DM data mask (output only, input side is free for use)
373 #  3. Any output-only site
374 ###############################################################################
375
376 INST "*/gen_dqs[0].u_iob_dqs/u_iddr_dq_ce"  LOC = "ILOGIC_X0Y96";
377 INST "*/gen_dqs[0].u_iob_dqs/u_iodelay_dq_ce"  LOC = "IODELAY_X0Y96";
378 INST "*/gen_dqs[1].u_iob_dqs/u_iddr_dq_ce"  LOC = "ILOGIC_X0Y58";
379 INST "*/gen_dqs[1].u_iob_dqs/u_iodelay_dq_ce"  LOC = "IODELAY_X0Y58";
380 INST "*/gen_dqs[2].u_iob_dqs/u_iddr_dq_ce"  LOC = "ILOGIC_X0Y62";
381 INST "*/gen_dqs[2].u_iob_dqs/u_iodelay_dq_ce"  LOC = "IODELAY_X0Y62";
382 INST "*/gen_dqs[3].u_iob_dqs/u_iddr_dq_ce"  LOC = "ILOGIC_X0Y100";
383 INST "*/gen_dqs[3].u_iob_dqs/u_iodelay_dq_ce"  LOC = "IODELAY_X0Y100";
384 INST "*/gen_dqs[4].u_iob_dqs/u_iddr_dq_ce"  LOC = "ILOGIC_X0Y102";
385 INST "*/gen_dqs[4].u_iob_dqs/u_iodelay_dq_ce"  LOC = "IODELAY_X0Y102";
386 INST "*/gen_dqs[5].u_iob_dqs/u_iddr_dq_ce"  LOC = "ILOGIC_X0Y256";
387 INST "*/gen_dqs[5].u_iob_dqs/u_iodelay_dq_ce"  LOC = "IODELAY_X0Y256";
388 INST "*/gen_dqs[6].u_iob_dqs/u_iddr_dq_ce"  LOC = "ILOGIC_X0Y260";
389 INST "*/gen_dqs[6].u_iob_dqs/u_iodelay_dq_ce"  LOC = "IODELAY_X0Y260";
390 INST "*/gen_dqs[7].u_iob_dqs/u_iddr_dq_ce"  LOC = "ILOGIC_X0Y262";
391 INST "*/gen_dqs[7].u_iob_dqs/u_iodelay_dq_ce"  LOC = "IODELAY_X0Y262";
392
393 ###############################################################################
394 # LOC and timing constraints for flop driving DQS CE enable signal
395 # from fabric logic. Even though the absolute delay on this path is
396 # calibrated out (when synchronizing this output to DQS), the delay
397 # should still be kept as low as possible to reduce post-calibration
398 # voltage/temp variations - these are roughly proportional to the
399 # absolute delay of the path
400 ###############################################################################
401
402 INST "*/u_phy_calib/gen_gate[0].u_en_dqs_ff"  LOC = SLICE_X0Y48;
403 INST "*/u_phy_calib/gen_gate[1].u_en_dqs_ff"  LOC = SLICE_X0Y29;
404 INST "*/u_phy_calib/gen_gate[2].u_en_dqs_ff"  LOC = SLICE_X0Y31;
405 INST "*/u_phy_calib/gen_gate[3].u_en_dqs_ff"  LOC = SLICE_X0Y50;
406 INST "*/u_phy_calib/gen_gate[4].u_en_dqs_ff"  LOC = SLICE_X0Y51;
407 INST "*/u_phy_calib/gen_gate[5].u_en_dqs_ff"  LOC = SLICE_X0Y128;
408 INST "*/u_phy_calib/gen_gate[6].u_en_dqs_ff"  LOC = SLICE_X0Y130;
409 INST "*/u_phy_calib/gen_gate[7].u_en_dqs_ff"  LOC = SLICE_X0Y131;
410
411 # Control for DQS gate - from fabric flop. Prevent "runaway" delay -
412 # two parts to this path: (1) from fabric flop to IDELAY, (2) from
413 # IDELAY to asynchronous reset of IDDR that drives the DQ CE's
414 # This can be relaxed by the user for lower frequencies:
415 # 300MHz = 850ps, 267MHz = 900ps. At 200MHz = 950ps.
416 # In general PAR should be able to route this
417 # within 900ps over all speed grades.
418 NET "*/u_phy_io/en_dqs*" MAXDELAY = 600 ps;
419 NET "*/u_phy_io/gen_dqs*.u_iob_dqs/en_dqs_sync" MAXDELAY = 850 ps;
420
421 ###############################################################################
422 # "Half-cycle" path constraint from IDDR to CE pin for all DQ IDDR's
423 # for DQS Read Post amble Glitch Squelch circuit
424 ###############################################################################
425
426 # Max delay from output of IDDR to CE input of DQ IDDRs = tRPST + some slack
427 #  where slack account for rise-time of DQS on board. For now assume slack = 
428 #  0.400ns (based on initial SPICE simulations, assumes use of ODT), so 
429 #  time = 0.4*Tcyc + 0.40ns = 1.6ns @333MHz
430 INST "*/gen_dqs[*].u_iob_dqs/u_iddr_dq_ce" TNM = "TNM_DQ_CE_IDDR";
431 INST "*/gen_dq[*].u_iob_dq/gen_stg2_*.u_iddr_dq" TNM = "TNM_DQS_FLOPS";
432 TIMESPEC "TS_DQ_CE" = FROM "TNM_DQ_CE_IDDR" TO "TNM_DQS_FLOPS" 1.9 ns;
433
434 ###############################################################################
435 # MIG 2.2: Prevent unrelated logic from being packed into any slices used
436 #          by read data capture RPM's - if unrelated logic gets packed into
437 #          these slices, it could cause the DIRT strings that define the
438 #          IDDR -> fabric flop routing to become unroutable during PAR stage
439 #          (unrelated logic may require routing resources required by the
440 #          DIRT strings - MAP does not currently take into account DIRT
441 #          strings when placing logic
442 ###############################################################################
443
444 AREA_GROUP "DDR_CAPTURE_FFS" GROUP = CLOSED;
445
446 ###############################################################################
447 # Location constraints for DQ read-data capture flops in fabric (for 2nd
448 # stage capture)
449 ###############################################################################
450
451 INST "*/gen_dq[0].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y42;            #  AF30      X0Y22    *
452 INST "*/gen_dq[1].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y43;            #  AK31      X0Y23    
453 INST "*/gen_dq[2].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y45;            #  AF31      X0Y25    
454 INST "*/gen_dq[3].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y46;            #  AD30      X0Y26    
455 INST "*/gen_dq[4].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y41;            #  AJ30      X0Y21    
456 INST "*/gen_dq[5].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y42;            #  AF29      X0Y22    ***
457 INST "*/gen_dq[6].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y44;            #  AD29      X0Y24    
458 INST "*/gen_dq[7].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y44;            #  AE29      X0Y24    
459 INST "*/gen_dq[8].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y28;            #  AH27      X0Y8     ***
460 INST "*/gen_dq[9].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y32;            #  AF28      X0Y12    
461 INST "*/gen_dq[10].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y33;           #  AH28      X0Y13    
462 INST "*/gen_dq[11].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y34;           #  AA28      X0Y14    
463 INST "*/gen_dq[12].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y26;           #  AG25      X0Y6     
464 INST "*/gen_dq[13].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y28;           #  AJ26      X0Y8     *
465 INST "*/gen_dq[14].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y33;           #  AG28      X0Y13    
466 INST "*/gen_dq[15].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y34;           #  AB28      X0Y14    
467 INST "*/gen_dq[16].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y35;           #  AC28      X0Y15    
468 INST "*/gen_dq[17].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y36;           #  AB25      X0Y16    ***
469 INST "*/gen_dq[18].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y38;           #  AC27      X0Y18    
470 INST "*/gen_dq[19].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y39;           #  AA26      X0Y19    
471 INST "*/gen_dq[20].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y36;           #  AB26      X0Y16    *
472 INST "*/gen_dq[21].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y37;           #  AA24      X0Y17    
473 INST "*/gen_dq[22].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y38;           #  AB27      X0Y18    
474 INST "*/gen_dq[23].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y39;           #  AA25      X0Y19    
475 INST "*/gen_dq[24].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y46;           #  AC29      X0Y26    
476 INST "*/gen_dq[25].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y49;           #  AB30      X0Y29    ***
477 INST "*/gen_dq[26].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y53;           #  W31       X0Y33    
478 INST "*/gen_dq[27].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y55;           #  V30       X0Y35    
479 INST "*/gen_dq[28].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y49;           #  AC30      X0Y29    *
480 INST "*/gen_dq[29].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y52;           #  W29       X0Y32    
481 INST "*/gen_dq[30].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y54;           #  V27       X0Y34    ***
482 INST "*/gen_dq[31].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y56;           #  W27       X0Y36    
483 INST "*/gen_dq[32].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y52;           #  V29       X0Y32    
484 INST "*/gen_dq[33].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y56;           #  Y27       X0Y36    
485 INST "*/gen_dq[34].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y58;           #  Y26       X0Y38    
486 INST "*/gen_dq[35].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y59;           #  W24       X0Y39    
487 INST "*/gen_dq[36].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y54;           #  V28       X0Y34   * 
488 INST "*/gen_dq[37].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y57;           #  W25       X0Y37    
489 INST "*/gen_dq[38].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y58;           #  W26       X0Y38    
490 INST "*/gen_dq[39].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y59;           #  V24       X0Y39    
491 INST "*/gen_dq[40].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y120;          #  R24       X0Y100   
492 INST "*/gen_dq[41].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y121;          #  P25       X0Y101   
493 INST "*/gen_dq[42].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y122;          #  N24       X0Y102   
494 INST "*/gen_dq[43].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y123;          #  P26       X0Y103   
495 INST "*/gen_dq[44].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y120;          #  T24       X0Y100   
496 INST "*/gen_dq[45].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y121;          #  N25       X0Y101   
497 INST "*/gen_dq[46].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y123;          #  P27       X0Y103   
498 INST "*/gen_dq[47].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y124;          #  N28       X0Y104   
499 INST "*/gen_dq[48].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y124;          #  M28       X0Y104   
500 INST "*/gen_dq[49].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y126;          #  L28       X0Y106   
501 INST "*/gen_dq[50].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y132;          #  F25       X0Y112   
502 INST "*/gen_dq[51].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y133;          #  H25       X0Y113   
503 INST "*/gen_dq[52].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y125;          #  K27       X0Y105   
504 INST "*/gen_dq[53].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y126;          #  K28       X0Y106   
505 INST "*/gen_dq[54].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y133;          #  H24       X0Y113   
506 INST "*/gen_dq[55].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y134;          #  G26       X0Y114   
507 INST "*/gen_dq[56].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y134;          #  G25       X0Y114   
508 INST "*/gen_dq[57].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y136;          #  M26       X0Y116   
509 INST "*/gen_dq[58].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y137;          #  J24       X0Y117   
510 INST "*/gen_dq[59].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y138;          #  L26       X0Y118   
511 INST "*/gen_dq[60].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y135;          #  J27       X0Y115   
512 INST "*/gen_dq[61].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y136;          #  M25       X0Y116   
513 INST "*/gen_dq[62].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y138;          #  L25       X0Y118   
514 INST "*/gen_dq[63].u_iob_dq/gen_stg2_*.u_ff_stg2a_rise"  RLOC_ORIGIN = X0Y139;          #  L24       X0Y119   
515