1 |
35 |
pjf |
CONFIG PART = xc6vlx240tff1156-1;
|
2 |
|
|
|
3 |
|
|
|
4 |
|
|
########## ML605 Board ##########
|
5 |
|
|
NET clk_in_p LOC = J9 |IOSTANDARD = LVDS_25 |DIFF_TERM = TRUE;
|
6 |
|
|
NET clk_in_n LOC = H9 |IOSTANDARD = LVDS_25 |DIFF_TERM = TRUE;
|
7 |
|
|
|
8 |
|
|
Net reset LOC = H10 |IOSTANDARD = LVCMOS15 |TIG;
|
9 |
|
|
|
10 |
|
|
# downgrade the Place:1153 error in the mapper
|
11 |
|
|
NET "reset" CLOCK_DEDICATED_ROUTE = FALSE;
|
12 |
|
|
|
13 |
|
|
#### Module LEDs_8Bit constraints
|
14 |
|
|
NET "display[0]" LOC = AC22;
|
15 |
|
|
NET "display[1]" LOC = AC24;
|
16 |
|
|
NET "display[2]" LOC = AE22;
|
17 |
|
|
NET "display[3]" LOC = AE23;
|
18 |
|
|
NET "display[4]" LOC = AB23;
|
19 |
|
|
NET "display[5]" LOC = AG23;
|
20 |
|
|
NET "display[6]" LOC = AE24;
|
21 |
|
|
NET "display[7]" LOC = AD24;
|
22 |
|
|
|
23 |
|
|
NET PBTX_LED LOC = AD21;
|
24 |
|
|
NET UDP_RX LOC = AH27;
|
25 |
|
|
NET DO_SECOND_TX_LED LOC = AH28;
|
26 |
|
|
NET TX_RSLT_0 LOC = AE21;
|
27 |
|
|
NET TX_RSLT_1 LOC = AP24;
|
28 |
|
|
|
29 |
|
|
|
30 |
|
|
|
31 |
|
|
#### Module Push_Buttons_4Bit constraints
|
32 |
|
|
NET PBTX LOC = H17;
|
33 |
|
|
NET PB_DO_SECOND_TX LOC = A18;
|
34 |
|
|
NET reset_leds LOC = G26;
|
35 |
|
|
|
36 |
|
|
#### Module DIP_Switches_4Bit constraints
|
37 |
|
|
|
38 |
|
|
|
39 |
|
|
Net phy_resetn LOC = AH13 |IOSTANDARD = LVCMOS25 |TIG;
|
40 |
|
|
|
41 |
|
|
Net gmii_rxd<7> LOC = AC13 |IOSTANDARD = LVCMOS25;
|
42 |
|
|
Net gmii_rxd<6> LOC = AC12 |IOSTANDARD = LVCMOS25;
|
43 |
|
|
Net gmii_rxd<5> LOC = AD11 |IOSTANDARD = LVCMOS25;
|
44 |
|
|
Net gmii_rxd<4> LOC = AM12 |IOSTANDARD = LVCMOS25;
|
45 |
|
|
Net gmii_rxd<3> LOC = AN12 |IOSTANDARD = LVCMOS25;
|
46 |
|
|
Net gmii_rxd<2> LOC = AE14 |IOSTANDARD = LVCMOS25;
|
47 |
|
|
Net gmii_rxd<1> LOC = AF14 |IOSTANDARD = LVCMOS25;
|
48 |
|
|
Net gmii_rxd<0> LOC = AN13 |IOSTANDARD = LVCMOS25;
|
49 |
|
|
|
50 |
|
|
Net gmii_txd<7> LOC = AF11 |IOSTANDARD = LVCMOS25;
|
51 |
|
|
Net gmii_txd<6> LOC = AE11 |IOSTANDARD = LVCMOS25;
|
52 |
|
|
Net gmii_txd<5> LOC = AM10 |IOSTANDARD = LVCMOS25;
|
53 |
|
|
Net gmii_txd<4> LOC = AL10 |IOSTANDARD = LVCMOS25;
|
54 |
|
|
Net gmii_txd<3> LOC = AG11 |IOSTANDARD = LVCMOS25;
|
55 |
|
|
Net gmii_txd<2> LOC = AG10 |IOSTANDARD = LVCMOS25;
|
56 |
|
|
Net gmii_txd<1> LOC = AL11 |IOSTANDARD = LVCMOS25;
|
57 |
|
|
Net gmii_txd<0> LOC = AM11 |IOSTANDARD = LVCMOS25;
|
58 |
|
|
|
59 |
|
|
Net gmii_col LOC = AK13 |IOSTANDARD = LVCMOS25;
|
60 |
|
|
Net gmii_crs LOC = AL13 |IOSTANDARD = LVCMOS25;
|
61 |
|
|
Net mii_tx_clk LOC = AD12 |IOSTANDARD = LVCMOS25;
|
62 |
|
|
|
63 |
|
|
Net gmii_tx_en LOC = AJ10 |IOSTANDARD = LVCMOS25;
|
64 |
|
|
Net gmii_tx_er LOC = AH10 |IOSTANDARD = LVCMOS25;
|
65 |
|
|
Net gmii_tx_clk LOC = AH12 |IOSTANDARD = LVCMOS25;
|
66 |
|
|
|
67 |
|
|
Net gmii_rx_dv LOC = AM13 |IOSTANDARD = LVCMOS25;
|
68 |
|
|
Net gmii_rx_er LOC = AG12 |IOSTANDARD = LVCMOS25;
|
69 |
|
|
# P20 - GCLK7
|
70 |
|
|
Net gmii_rx_clk LOC = AP11 |IOSTANDARD = LVCMOS25;
|
71 |
|
|
|
72 |
|
|
|
73 |
|
|
|
74 |
|
|
NET "clk_in_p" TNM_NET = "clk_in_p";
|
75 |
|
|
TIMESPEC "TS_emac1_clk_in_p" = PERIOD "clk_in_p" 5.000 ns HIGH 50% INPUT_JITTER 50.0ps;
|
76 |
|
|
|
77 |
|
|
|
78 |
|
|
# Ethernet GTX_CLK high quality 125 MHz reference clock
|
79 |
|
|
NET "*mac_block/gtx_clk_bufg" TNM_NET = "ref_gtx_clk";
|
80 |
|
|
TIMEGRP "v6_emac_v2_1_clk_ref_gtx" = "ref_gtx_clk";
|
81 |
|
|
TIMESPEC "TS_v6_emac_v2_1_clk_ref_gtx" = PERIOD "v6_emac_v2_1_clk_ref_gtx" 8 ns HIGH 50 %;
|
82 |
|
|
|
83 |
|
|
# Multiplexed 1 Gbps, 10/100 Mbps output inherits constraint from GTX_CLK
|
84 |
|
|
NET "*tx_mac_aclk*" TNM_NET = "clk_tx_mac";
|
85 |
|
|
TIMEGRP "v6_emac_v2_1_clk_ref_mux" = "clk_tx_mac";
|
86 |
|
|
TIMESPEC "TS_v6_emac_v2_1_clk_ref_mux" = PERIOD "v6_emac_v2_1_clk_ref_mux" TS_v6_emac_v2_1_clk_ref_gtx HIGH 50%;
|
87 |
|
|
|
88 |
|
|
# Ethernet GMII PHY-side receive clock
|
89 |
|
|
NET "gmii_rx_clk" TNM_NET = "phy_clk_rx";
|
90 |
|
|
TIMEGRP "v6_emac_v2_1_clk_phy_rx" = "phy_clk_rx";
|
91 |
|
|
TIMESPEC "TS_v6_emac_v2_1_clk_phy_rx" = PERIOD "v6_emac_v2_1_clk_phy_rx" 7.5 ns HIGH 50 %;
|
92 |
|
|
|
93 |
|
|
# define TIGs between unrelated clock domains
|
94 |
|
|
TIMESPEC "TS_clock_path_gtx2ref" = FROM "clock_generator_clkout0" TO "clock_generator_clkout2" TIG;
|
95 |
|
|
PIN "*bufgmux_speed_clk.I1" TIG;
|
96 |
|
|
PIN "*bufgmux_speed_clk.CE0" TIG;
|
97 |
|
|
|
98 |
|
|
#
|
99 |
|
|
####
|
100 |
|
|
#######
|
101 |
|
|
##########
|
102 |
|
|
#############
|
103 |
|
|
#################
|
104 |
|
|
#FIFO BLOCK CONSTRAINTS
|
105 |
|
|
|
106 |
|
|
# Group design elements around the Ethernet MAC to assist with timing
|
107 |
|
|
# closure in this example design. These values may be modified or
|
108 |
|
|
# removed to best suit your design.
|
109 |
|
|
#INST "*user_side_FIFO?tx_fifo_i?ramgen_l?bram18_tdp_bl?bram18_tdp_bl" LOC = "RAMB36_X6Y34";
|
110 |
|
|
#INST "*user_side_FIFO?rx_fifo_i?ramgen_l?bram18_tdp_bl?bram18_tdp_bl" LOC = "RAMB36_X6Y35";
|
111 |
|
|
#INST "*user_side_FIFO?tx_fifo_i?ramgen_u?bram18_tdp_bl?bram18_tdp_bl" LOC = "RAMB36_X6Y36";
|
112 |
|
|
#INST "*user_side_FIFO?rx_fifo_i?ramgen_u?bram18_tdp_bl?bram18_tdp_bl" LOC = "RAMB36_X6Y37";
|
113 |
|
|
|
114 |
|
|
###############################################################################
|
115 |
|
|
# AXI FIFO CONSTRAINTS
|
116 |
|
|
# The following constraints are necessary for proper operation of the AXI
|
117 |
|
|
# FIFO. If you choose to not use the FIFO Block level of wrapper hierarchy,
|
118 |
|
|
# these constraints should be removed.
|
119 |
|
|
###############################################################################
|
120 |
|
|
|
121 |
|
|
# AXI FIFO transmit-side constraints
|
122 |
|
|
# -----------------------------------------------------------------------------
|
123 |
|
|
|
124 |
|
|
# Group the clock crossing signals into timing groups
|
125 |
|
|
INST "*user_side_FIFO?tx_fifo_i?rd_tran_frame_tog" TNM = "tx_fifo_rd_to_wr";
|
126 |
|
|
INST "*user_side_FIFO?tx_fifo_i?rd_retran_frame_tog" TNM = "tx_fifo_rd_to_wr";
|
127 |
|
|
INST "*user_side_FIFO?tx_fifo_i?rd_col_window_pipe_1" TNM = "tx_fifo_rd_to_wr";
|
128 |
|
|
INST "*user_side_FIFO?tx_fifo_i?rd_addr_txfer*" TNM = "tx_fifo_rd_to_wr";
|
129 |
|
|
INST "*user_side_FIFO?tx_fifo_i?rd_txfer_tog" TNM = "tx_fifo_rd_to_wr";
|
130 |
|
|
INST "*user_side_FIFO?tx_fifo_i?wr_frame_in_fifo" TNM = "tx_fifo_wr_to_rd";
|
131 |
|
|
|
132 |
|
|
TIMESPEC "TS_tx_fifo_rd_to_wr" = FROM "tx_fifo_rd_to_wr" TO "v6_emac_v2_1_clk_ref_mux" 8 ns DATAPATHONLY;
|
133 |
|
|
TIMESPEC "TS_tx_fifo_wr_to_rd" = FROM "tx_fifo_wr_to_rd" TO "v6_emac_v2_1_clk_ref_mux" 8 ns DATAPATHONLY;
|
134 |
|
|
|
135 |
|
|
# Reduce clock period to allow for metastability settling time
|
136 |
|
|
INST "*user_side_FIFO?tx_fifo_i?wr_rd_addr*" TNM = "tx_metastable";
|
137 |
|
|
INST "*user_side_FIFO?tx_fifo_i?wr_col_window_pipe_0" TNM = "tx_metastable";
|
138 |
|
|
TIMESPEC "TS_tx_meta_protect" = FROM "tx_metastable" 5 ns DATAPATHONLY;
|
139 |
|
|
|
140 |
|
|
# Transmit-side AXI FIFO address bus timing
|
141 |
|
|
INST "*user_side_FIFO?tx_fifo_i?rd_addr_txfer*" TNM = "tx_addr_rd";
|
142 |
|
|
INST "*user_side_FIFO?tx_fifo_i?wr_rd_addr*" TNM = "tx_addr_wr";
|
143 |
|
|
TIMESPEC "TS_tx_fifo_addr" = FROM "tx_addr_rd" TO "tx_addr_wr" 10 ns;
|
144 |
|
|
|
145 |
|
|
# AXI FIFO receive-side constraints
|
146 |
|
|
# -----------------------------------------------------------------------------
|
147 |
|
|
|
148 |
|
|
# Group the clock crossing signals into timing groups
|
149 |
|
|
INST "*user_side_FIFO?rx_fifo_i?wr_store_frame_tog" TNM = "rx_fifo_wr_to_rd";
|
150 |
|
|
INST "*user_side_FIFO?rx_fifo_i?rd_addr*" TNM = "rx_fifo_rd_to_wr";
|
151 |
|
|
|
152 |
|
|
TIMESPEC "TS_rx_fifo_wr_to_rd" = FROM "rx_fifo_wr_to_rd" TO "v6_emac_v2_1_clk_ref_mux" 8 ns DATAPATHONLY;
|
153 |
|
|
TIMESPEC "TS_rx_fifo_rd_to_wr" = FROM "rx_fifo_rd_to_wr" TO "v6_emac_v2_1_clk_phy_rx" 8 ns DATAPATHONLY;
|
154 |
|
|
|
155 |
|
|
|
156 |
|
|
|
157 |
|
|
#
|
158 |
|
|
####
|
159 |
|
|
#######
|
160 |
|
|
##########
|
161 |
|
|
#############
|
162 |
|
|
#################
|
163 |
|
|
#BLOCK CONSTRAINTS
|
164 |
|
|
|
165 |
|
|
# Locate the Tri-Mode Ethernet MAC instance
|
166 |
|
|
INST "*v6_emac" LOC = "TEMAC_X0Y0";
|
167 |
|
|
|
168 |
|
|
|
169 |
|
|
###############################################################################
|
170 |
|
|
# PHYSICAL INTERFACE CONSTRAINTS
|
171 |
|
|
# The following constraints are necessary for proper operation, and are tuned
|
172 |
|
|
# for this example design. They should be modified to suit your design.
|
173 |
|
|
###############################################################################
|
174 |
|
|
|
175 |
|
|
# GMII physical interface constraints
|
176 |
|
|
# -----------------------------------------------------------------------------
|
177 |
|
|
|
178 |
|
|
# Set the IDELAY values on the PHY inputs, tuned for this example design.
|
179 |
|
|
# These values should be modified to suit your design.
|
180 |
|
|
INST "*v6emac_block*gmii_interface*delay_gmii_rx_dv" IDELAY_VALUE = 22;
|
181 |
|
|
INST "*v6emac_block*gmii_interface*delay_gmii_rx_er" IDELAY_VALUE = 22;
|
182 |
|
|
INST "*v6emac_block*gmii_interface*delay_gmii_rxd" IDELAY_VALUE = 22;
|
183 |
|
|
|
184 |
|
|
# Group all IDELAY-related blocks to use a single IDELAYCTRL
|
185 |
|
|
INST "*dlyctrl" IODELAY_GROUP = gmii_idelay;
|
186 |
|
|
INST "*v6emac_block*gmii_interface*delay_gmii_rx_dv" IODELAY_GROUP = gmii_idelay;
|
187 |
|
|
INST "*v6emac_block*gmii_interface*delay_gmii_rx_er" IODELAY_GROUP = gmii_idelay;
|
188 |
|
|
INST "*v6emac_block*gmii_interface*delay_gmii_rxd" IODELAY_GROUP = gmii_idelay;
|
189 |
|
|
|
190 |
|
|
# The following constraints work in conjunction with IDELAY_VALUE settings to
|
191 |
|
|
# check that the GMII receive bus remains in alignment with the rising edge of
|
192 |
|
|
# GMII_RX_CLK, to within 2 ns setup time and 750 ps hold time.
|
193 |
|
|
# In addition to adjusting IDELAY_VALUE settings for your system's timing
|
194 |
|
|
# characteristics, you may wish to refine these constraints to match the GMII specification;
|
195 |
|
|
# see Answer Record 33195 on xilinx.com for details.
|
196 |
|
|
INST "gmii_rxd>" TNM = "gmii_rx";
|
197 |
|
|
INST "gmii_rx_dv" TNM = "gmii_rx";
|
198 |
|
|
INST "gmii_rx_er" TNM = "gmii_rx";
|
199 |
|
|
TIMEGRP "gmii_rx" OFFSET = IN 2 ns VALID 2.75 ns BEFORE "gmii_rx_clk" RISING;
|
200 |
|
|
|
201 |
|
|
# Constrain the GMII physical interface flip-flops to IOBs
|
202 |
|
|
INST "*v6emac_block*gmii_interface*rxd_to_mac*" IOB = force;
|
203 |
|
|
INST "*v6emac_block*gmii_interface*rx_dv_to_mac" IOB = force;
|
204 |
|
|
INST "*v6emac_block*gmii_interface*rx_er_to_mac" IOB = force;
|
205 |
|
|
INST "*v6emac_block*gmii_interface*gmii_txd_?" IOB = force;
|
206 |
|
|
INST "*v6emac_block*gmii_interface*gmii_tx_en" IOB = force;
|
207 |
|
|
INST "*v6emac_block*gmii_interface*gmii_tx_er" IOB = force;
|
208 |
|
|
|
209 |
|
|
# Location constraints are chosen for this example design.
|
210 |
|
|
# These values should be modified to suit your design.
|
211 |
|
|
# * Note that regional clocking imposes certain requirements
|
212 |
|
|
# on the location of the physical interface pins and the TEMAC instance.
|
213 |
|
|
# Please refer to the Virtex-6 FPGA Embedded Tri-Mode Ethernet MAC
|
214 |
|
|
# User Guide for additional details. *
|
215 |
|
|
|
216 |
|
|
# Locate the GMII physical interface pins
|
217 |
|
|
INST "gmii_txd>" LOC = "BANK36";
|
218 |
|
|
INST "gmii_tx_en" LOC = "BANK36";
|
219 |
|
|
INST "gmii_tx_er" LOC = "BANK36";
|
220 |
|
|
INST "gmii_tx_clk" LOC = "BANK36";
|
221 |
|
|
INST "gmii_rxd>" LOC = "BANK36";
|
222 |
|
|
INST "gmii_rx_dv" LOC = "BANK36";
|
223 |
|
|
INST "gmii_rx_er" LOC = "BANK36";
|
224 |
|
|
INST "gmii_rx_clk" LOC = "BANK36";
|
225 |
|
|
|
226 |
|
|
# Locate the 125 MHz reference clock buffer
|
227 |
|
|
#INST "*BUFGMUX_SPEED_CLK" LOC = "BUFGCTRL_X0Y24";
|