00001 --**************************************************************
00002 --* *
00003 --* The source code for the ATLAS BCM "AAA" FPGA is made *
00004 --* available via the GNU General Public License (GPL) *
00005 --* unless otherwise stated below. *
00006 --* *
00007 --* In case of problems/questions/bug reports etc. please *
00008 --* contact michael.niegl@cern.ch *
00009 --* *
00010 --**************************************************************
00011
00012 --**************************************************************
00013 --* *
00014 --* $Source: /local/reps/bcmfpga/bcm_aaa/bcm_aaa/eth/temac.vhd,v $
00015 --* $Revision: 2.2.2.3 $ *
00016 --* $Name: dev $ *
00017 --* $Author: mniegl $ *
00018 --* $Date: 2008/11/03 17:57:46 $ *
00019
00020
00021 --* *
00022 --**************************************************************
00023 --------------------------------------------------------------------------------
00024 -- Project: Virtex-4 FX Ethernet MAC Wrappers
00025 --
00026 -- Date: $Date: 2008/11/03 17:57:46 $
00027 -- Tag: $Name: dev $
00028 -- File: $RCSfile: temac.vhd,v $
00029 -- Rev: $Revision: 2.2.2.3 $
00030 --
00031 -- Company: Xilinx
00032 -- Contributors: M. Low
00033 --
00034 -- Disclaimer: XILINX IS PROVIDING THIS DESIGN, CODE, OR
00035 -- INFORMATION "AS IS" SOLELY FOR USE IN DEVELOPING
00036 -- PROGRAMS AND SOLUTIONS FOR XILINX DEVICES. BY
00037 -- PROVIDING THIS DESIGN, CODE, OR INFORMATION AS
00038 -- ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE,
00039 -- APPLICATION OR STANDARD, XILINX IS MAKING NO
00040 -- REPRESENTATION THAT THIS IMPLEMENTATION IS FREE
00041 -- FROM ANY CLAIMS OF INFRINGEMENT, AND YOU ARE
00042 -- RESPONSIBLE FOR OBTAINING ANY RIGHTS YOU MAY
00043 -- REQUIRE FOR YOUR IMPLEMENTATION. XILINX
00044 -- EXPRESSLY DISCLAIMS ANY WARRANTY WHATSOEVER WITH
00045 -- RESPECT TO THE ADEQUACY OF THE IMPLEMENTATION,
00046 -- INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OR
00047 -- REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE
00048 -- FROM CLAIMS OF INFRINGEMENT, IMPLIED WARRANTIES
00049 -- OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
00050 -- PURPOSE.
00051 --
00052 -- (c) Copyright 2004 Xilinx, Inc.
00053 -- All rights reserved.
00054 --
00055 --------------------------------------------------------------------------------
00056 --
00057 -- temac
00058 --
00059 -- Author: Mary Low
00060 -- Xilinx - Embedded Networking System Engineering Group
00061 --
00062 -- Description: This is the top level VHDL wrapper for the Virtex-4 FX
00063 -- Ethernet MAC.
00064 --
00065
00066
00067 library unisim;
00068
00069 use unisim.vcomponents.all;
00070
00071
00072 library ieee;
00073
00074 use ieee.std_logic_1164.all;
00075
00076 --------------------------------------------------------------------------------
00077 -- The entity declaration for the top level wrapper.
00078 --------------------------------------------------------------------------------
00079
00080
00081 entity xtemac is
00082 port(
00083 -- Client Receiver Interface - EMAC0
00084 EMAC0CLIENTRXCLIENTCLKOUT : out ;
00085 CLIENTEMAC0RXCLIENTCLKIN : in ;
00086 EMAC0CLIENTRXD : out (7 downto 0);
00087 EMAC0CLIENTRXDVLD : out ;
00088 EMAC0CLIENTRXDVLDMSW : out ;
00089 EMAC0CLIENTRXGOODFRAME : out ;
00090 EMAC0CLIENTRXBADFRAME : out ;
00091 EMAC0CLIENTRXFRAMEDROP : out ;
00092 EMAC0CLIENTRXDVREG6 : out ;
00093 EMAC0CLIENTRXSTATS : out (6 downto 0);
00094 EMAC0CLIENTRXSTATSVLD : out ;
00095 EMAC0CLIENTRXSTATSBYTEVLD : out ;
00096
00097 -- Client Transmitter Interface - EMAC0
00098 EMAC0CLIENTTXCLIENTCLKOUT : out ;
00099 CLIENTEMAC0TXCLIENTCLKIN : in ;
00100 CLIENTEMAC0TXD : in (7 downto 0);
00101 CLIENTEMAC0TXDVLD : in ;
00102 CLIENTEMAC0TXDVLDMSW : in ;
00103 EMAC0CLIENTTXACK : out ;
00104 CLIENTEMAC0TXFIRSTBYTE : in ;
00105 CLIENTEMAC0TXUNDERRUN : in ;
00106 EMAC0CLIENTTXCOLLISION : out ;
00107 EMAC0CLIENTTXRETRANSMIT : out ;
00108 CLIENTEMAC0TXIFGDELAY : in (7 downto 0);
00109 EMAC0CLIENTTXSTATS : out ;
00110 EMAC0CLIENTTXSTATSVLD : out ;
00111 EMAC0CLIENTTXSTATSBYTEVLD : out ;
00112
00113 -- MAC Control Interface - EMAC0
00114 CLIENTEMAC0PAUSEREQ : in ;
00115 CLIENTEMAC0PAUSEVAL : in (15 downto 0);
00116
00117 -- Clock Signal - EMAC0
00118 GTX_CLK_0 : in ;
00119 EMAC0CLIENTTXGMIIMIICLKOUT : out ;
00120 CLIENTEMAC0TXGMIIMIICLKIN : in ;
00121
00122 -- GMII Interface - EMAC0
00123 GMII_TXD_0 : out (7 downto 0);
00124 GMII_TX_EN_0 : out ;
00125 GMII_TX_ER_0 : out ;
00126 GMII_TX_CLK_0 : out ;
00127 GMII_RXD_0 : in (7 downto 0);
00128 GMII_RX_DV_0 : in ;
00129 GMII_RX_ER_0 : in ;
00130 GMII_RX_CLK_0 : in ;
00131 MII_TX_CLK_0 : in ;
00132 GMII_COL_0 : in ;
00133 GMII_CRS_0 : in ;
00134
00135 -- MDIO Interface - EMAC0
00136 MDC_0 : out ;
00137 MDIO_IN_0 : in ;
00138 MDIO_OUT_0 : out ;
00139 MDIO_TRI_0 : out ;
00140
00141 HOSTCLK : in ;
00142
00143 -- Asynchronous Reset
00144 RESET : in
00145 );
00146
00147 end xtemac;
00148
00149
00150 architecture WRAPPER of xtemac is
00151
00152 --************************** Signals Declarations **************************
00153 signal gnd_i : ;
00154 signal gnd_v48_i : (47 downto 0);
00155 signal vcc_i : ;
00156
00157 signal client_rx_data_0_i : (15 downto 0);
00158 signal client_tx_data_0_i : (15 downto 0);
00159
00160 signal tieemac0configvector_i : (79 downto 0);
00161 signal phy_config_vector_0_i : (4 downto 0);
00162 signal has_mdio_0_i : ;
00163 signal speed_0_i : (1 downto 0);
00164 signal has_rgmii_0_i : ;
00165 signal has_sgmii_0_i : ;
00166 signal has_gpcs_0_i : ;
00167 signal has_host_0_i : ;
00168 signal tx_client_16_0_i : ;
00169 signal rx_client_16_0_i : ;
00170 signal addr_filter_enable_0_i : ;
00171 signal rx_lt_check_dis_0_i : ;
00172 signal flow_control_config_vector_0_i : (1 downto 0);
00173 signal tx_config_vector_0_i : (6 downto 0);
00174 signal rx_config_vector_0_i : (5 downto 0);
00175 signal pause_address_0_i : (47 downto 0);
00176
00177 signal hostreq : := '0';
00178 constant host_MIIM_sel : := '0';
00179 signal host_MIIM_rdy : := '0';
00180 constant hostOpCode : (1 downto 0) := "11";
00181 signal hostaddr : (9 downto 0) := (others => '0');
00182 signal hostdata_in : (31 downto 0) := (others => '0');
00183 signal hostdata_out : (31 downto 0) := (others => '0');
00184
00185 begin
00186
00187 --**************************** Main Body of Code ***************************
00188 gnd_i <= '0';
00189 gnd_v48_i <= "000000000000000000000000000000000000000000000000";
00190 vcc_i <= '1';
00191
00192 -- 8-bit client data on EMAC0
00193 EMAC0CLIENTRXD <= client_rx_data_0_i(7 downto 0);
00194 client_tx_data_0_i <= "00000000" & CLIENTEMAC0TXD;
00195
00196
00197 ----------------------------------------------------------------------------
00198 -- Construct the tie-off vector
00199 -- tieemac#conficvector_i[79]: Reserved - Tie to "1"
00200 -- tieemac#configvector_i[78:74]: phy_configuration_vector[4:0] that is used
00201 -- to configure the PCS/PMA either when the MDIO is not present or as
00202 -- initial values loaded upon reset that can be modified through the
00203 -- MDIO.
00204 -- tieemac#configvector_i[73:65]: tie_off_vector[8:0] that is used to
00205 -- configure the mode of the EMAC.
00206 -- tieemac#configvector_i[64:0] mac_configuration_vector[64:0] that is used
00207 -- to configure the EMAC either when the Host interface is not present
00208 -- or as initial values loaded upon reset that can be modified through
00209 -- the Host interface.
00210 ----------------------------------------------------------------------------
00211 -- EMAC0
00212 tieemac0configvector_i <= vcc_i & phy_config_vector_0_i &
00213 has_mdio_0_i &
00214 speed_0_i &
00215 has_rgmii_0_i &
00216 has_sgmii_0_i &
00217 has_gpcs_0_i &
00218 has_host_0_i &
00219 tx_client_16_0_i &
00220 rx_client_16_0_i &
00221 addr_filter_enable_0_i &
00222 rx_lt_check_dis_0_i &
00223 flow_control_config_vector_0_i &
00224 tx_config_vector_0_i &
00225 rx_config_vector_0_i &
00226 pause_address_0_i;
00227
00228 phy_config_vector_0_i <= "00000";
00229
00230 has_mdio_0_i <= vcc_i;
00231 speed_0_i <= "01";
00232 has_rgmii_0_i <= gnd_i;
00233 has_sgmii_0_i <= gnd_i;
00234 has_gpcs_0_i <= gnd_i;
00235 has_host_0_i <= '0';
00236 tx_client_16_0_i <= gnd_i;
00237 rx_client_16_0_i <= gnd_i;
00238 addr_filter_enable_0_i <= gnd_i;
00239 rx_lt_check_dis_0_i <= gnd_i;
00240 flow_control_config_vector_0_i(1) <= gnd_i;
00241 flow_control_config_vector_0_i(0) <= gnd_i;
00242 tx_config_vector_0_i(6) <= gnd_i;
00243 tx_config_vector_0_i(5) <= gnd_i;
00244 tx_config_vector_0_i(4) <= gnd_i;
00245 tx_config_vector_0_i(3) <= vcc_i;
00246 tx_config_vector_0_i(2) <= gnd_i;
00247 tx_config_vector_0_i(1) <= gnd_i;
00248 tx_config_vector_0_i(0) <= gnd_i;
00249 rx_config_vector_0_i(5) <= gnd_i;
00250 rx_config_vector_0_i(4) <= gnd_i;
00251 rx_config_vector_0_i(3) <= gnd_i;
00252 rx_config_vector_0_i(2) <= vcc_i;
00253 rx_config_vector_0_i(1) <= gnd_i;
00254 rx_config_vector_0_i(0) <= gnd_i;
00255 pause_address_0_i <= gnd_v48_i;
00256 hostreq <= '0';
00257 hostdata_out <= (others => '0');
00258
00259
00260 ----------------------------------------------------------------------------
00261 -- Instantiate V4 EMAC
00262 ----------------------------------------------------------------------------
00263
00264 v4_emac : EMAC
00265 port map (
00266 RESET => RESET,
00267
00268 -- EMAC0
00269 EMAC0CLIENTRXCLIENTCLKOUT => EMAC0CLIENTRXCLIENTCLKOUT,
00270 CLIENTEMAC0RXCLIENTCLKIN => CLIENTEMAC0RXCLIENTCLKIN,
00271 EMAC0CLIENTRXD => client_rx_data_0_i,
00272 EMAC0CLIENTRXDVLD => EMAC0CLIENTRXDVLD,
00273 EMAC0CLIENTRXDVLDMSW => EMAC0CLIENTRXDVLDMSW,
00274 EMAC0CLIENTRXGOODFRAME => EMAC0CLIENTRXGOODFRAME,
00275 EMAC0CLIENTRXBADFRAME => EMAC0CLIENTRXBADFRAME,
00276 EMAC0CLIENTRXFRAMEDROP => EMAC0CLIENTRXFRAMEDROP,
00277 EMAC0CLIENTRXDVREG6 => EMAC0CLIENTRXDVREG6,
00278 EMAC0CLIENTRXSTATS => EMAC0CLIENTRXSTATS,
00279 EMAC0CLIENTRXSTATSVLD => EMAC0CLIENTRXSTATSVLD,
00280 EMAC0CLIENTRXSTATSBYTEVLD => EMAC0CLIENTRXSTATSBYTEVLD,
00281
00282 EMAC0CLIENTTXCLIENTCLKOUT => EMAC0CLIENTTXCLIENTCLKOUT,
00283 CLIENTEMAC0TXCLIENTCLKIN => CLIENTEMAC0TXCLIENTCLKIN,
00284 CLIENTEMAC0TXD => client_tx_data_0_i,
00285 CLIENTEMAC0TXDVLD => CLIENTEMAC0TXDVLD,
00286 CLIENTEMAC0TXDVLDMSW => CLIENTEMAC0TXDVLDMSW,
00287 EMAC0CLIENTTXACK => EMAC0CLIENTTXACK,
00288 CLIENTEMAC0TXFIRSTBYTE => CLIENTEMAC0TXFIRSTBYTE,
00289 CLIENTEMAC0TXUNDERRUN => CLIENTEMAC0TXUNDERRUN,
00290 EMAC0CLIENTTXCOLLISION => EMAC0CLIENTTXCOLLISION,
00291 EMAC0CLIENTTXRETRANSMIT => EMAC0CLIENTTXRETRANSMIT,
00292 CLIENTEMAC0TXIFGDELAY => CLIENTEMAC0TXIFGDELAY,
00293 EMAC0CLIENTTXSTATS => EMAC0CLIENTTXSTATS,
00294 EMAC0CLIENTTXSTATSVLD => EMAC0CLIENTTXSTATSVLD,
00295 EMAC0CLIENTTXSTATSBYTEVLD => EMAC0CLIENTTXSTATSBYTEVLD,
00296
00297 CLIENTEMAC0PAUSEREQ => CLIENTEMAC0PAUSEREQ,
00298 CLIENTEMAC0PAUSEVAL => CLIENTEMAC0PAUSEVAL,
00299
00300 PHYEMAC0GTXCLK => GTX_CLK_0,
00301 EMAC0CLIENTTXGMIIMIICLKOUT => EMAC0CLIENTTXGMIIMIICLKOUT,
00302 CLIENTEMAC0TXGMIIMIICLKIN => CLIENTEMAC0TXGMIIMIICLKIN,
00303
00304 PHYEMAC0RXCLK => GMII_RX_CLK_0,
00305 PHYEMAC0RXD => GMII_RXD_0,
00306 PHYEMAC0RXDV => GMII_RX_DV_0,
00307 PHYEMAC0RXER => GMII_RX_ER_0,
00308 EMAC0PHYTXCLK => GMII_TX_CLK_0,
00309 EMAC0PHYTXD => GMII_TXD_0,
00310 EMAC0PHYTXEN => GMII_TX_EN_0,
00311 EMAC0PHYTXER => GMII_TX_ER_0,
00312 PHYEMAC0MIITXCLK => MII_TX_CLK_0,
00313 PHYEMAC0COL => GMII_COL_0,
00314 PHYEMAC0CRS => GMII_CRS_0,
00315
00316 CLIENTEMAC0DCMLOCKED => vcc_i,
00317 EMAC0CLIENTANINTERRUPT => open,
00318 PHYEMAC0SIGNALDET => gnd_i,
00319 PHYEMAC0PHYAD => "00000",
00320 EMAC0PHYENCOMMAALIGN => open,
00321 EMAC0PHYLOOPBACKMSB => open,
00322 EMAC0PHYMGTRXRESET => open,
00323 EMAC0PHYMGTTXRESET => open,
00324 EMAC0PHYPOWERDOWN => open,
00325 EMAC0PHYSYNCACQSTATUS => open,
00326 PHYEMAC0RXCLKCORCNT => gnd_v48_i (2 downto 0),
00327 PHYEMAC0RXBUFSTATUS => gnd_v48_i(1 downto 0),
00328 PHYEMAC0RXBUFERR => gnd_i,
00329 PHYEMAC0RXCHARISCOMMA => gnd_i,
00330 PHYEMAC0RXCHARISK => gnd_i,
00331 PHYEMAC0RXCHECKINGCRC => gnd_i,
00332 PHYEMAC0RXCOMMADET => gnd_i,
00333 PHYEMAC0RXDISPERR => gnd_i,
00334 PHYEMAC0RXLOSSOFSYNC => gnd_v48_i (1 downto 0),
00335 PHYEMAC0RXNOTINTABLE => gnd_i,
00336 PHYEMAC0RXRUNDISP => gnd_i,
00337 PHYEMAC0TXBUFERR => gnd_i,
00338 EMAC0PHYTXCHARDISPMODE => open,
00339 EMAC0PHYTXCHARDISPVAL => open,
00340 EMAC0PHYTXCHARISK => open,
00341
00342 EMAC0PHYMCLKOUT => MDC_0,
00343 PHYEMAC0MCLKIN => gnd_i,
00344 PHYEMAC0MDIN => MDIO_IN_0,
00345 EMAC0PHYMDOUT => MDIO_OUT_0,
00346 EMAC0PHYMDTRI => MDIO_TRI_0,
00347
00348 TIEEMAC0CONFIGVEC => tieemac0configvector_i ,
00349 TIEEMAC0UNICASTADDR => gnd_v48_i,
00350
00351 -- EMAC1
00352 EMAC1CLIENTRXCLIENTCLKOUT => open,
00353 CLIENTEMAC1RXCLIENTCLKIN => gnd_i,
00354 EMAC1CLIENTRXD => open,
00355 EMAC1CLIENTRXDVLD => open,
00356 EMAC1CLIENTRXDVLDMSW => open,
00357 EMAC1CLIENTRXGOODFRAME => open,
00358 EMAC1CLIENTRXBADFRAME => open,
00359 EMAC1CLIENTRXFRAMEDROP => open,
00360 EMAC1CLIENTRXDVREG6 => open,
00361 EMAC1CLIENTRXSTATS => open,
00362 EMAC1CLIENTRXSTATSVLD => open,
00363 EMAC1CLIENTRXSTATSBYTEVLD => open,
00364
00365 EMAC1CLIENTTXCLIENTCLKOUT => open,
00366 CLIENTEMAC1TXCLIENTCLKIN => gnd_i,
00367 CLIENTEMAC1TXD => gnd_v48_i(15 downto 0),
00368 CLIENTEMAC1TXDVLD => gnd_i,
00369 CLIENTEMAC1TXDVLDMSW => gnd_i,
00370 EMAC1CLIENTTXACK => open,
00371 CLIENTEMAC1TXFIRSTBYTE => gnd_i,
00372 CLIENTEMAC1TXUNDERRUN => gnd_i,
00373 EMAC1CLIENTTXCOLLISION => open,
00374 EMAC1CLIENTTXRETRANSMIT => open,
00375 CLIENTEMAC1TXIFGDELAY => gnd_v48_i(7 downto 0),
00376 EMAC1CLIENTTXSTATS => open,
00377 EMAC1CLIENTTXSTATSVLD => open,
00378 EMAC1CLIENTTXSTATSBYTEVLD => open,
00379
00380 CLIENTEMAC1PAUSEREQ => gnd_i,
00381 CLIENTEMAC1PAUSEVAL => gnd_v48_i(15 downto 0),
00382
00383 PHYEMAC1GTXCLK => gnd_i,
00384 EMAC1CLIENTTXGMIIMIICLKOUT => open,
00385 CLIENTEMAC1TXGMIIMIICLKIN => gnd_i,
00386
00387 PHYEMAC1RXCLK => gnd_i,
00388 PHYEMAC1RXD => gnd_v48_i(7 downto 0),
00389 PHYEMAC1RXDV => gnd_i,
00390 PHYEMAC1RXER => gnd_i,
00391 PHYEMAC1MIITXCLK => gnd_i,
00392 EMAC1PHYTXCLK => open,
00393 EMAC1PHYTXD => open,
00394 EMAC1PHYTXEN => open,
00395 EMAC1PHYTXER => open,
00396 PHYEMAC1COL => gnd_i,
00397 PHYEMAC1CRS => gnd_i,
00398
00399 CLIENTEMAC1DCMLOCKED => vcc_i,
00400 EMAC1CLIENTANINTERRUPT => open,
00401
00402 PHYEMAC1SIGNALDET => gnd_i,
00403 PHYEMAC1PHYAD => "00010",
00404 EMAC1PHYENCOMMAALIGN => open,
00405 EMAC1PHYLOOPBACKMSB => open,
00406 EMAC1PHYMGTRXRESET => open,
00407 EMAC1PHYMGTTXRESET => open,
00408 EMAC1PHYPOWERDOWN => open,
00409 EMAC1PHYSYNCACQSTATUS => open,
00410 PHYEMAC1RXCLKCORCNT => gnd_v48_i (2 downto 0),
00411 PHYEMAC1RXBUFSTATUS => gnd_v48_i(1 downto 0),
00412 PHYEMAC1RXBUFERR => gnd_i,
00413 PHYEMAC1RXCHARISCOMMA => gnd_i,
00414 PHYEMAC1RXCHARISK => gnd_i,
00415 PHYEMAC1RXCHECKINGCRC => gnd_i,
00416 PHYEMAC1RXCOMMADET => gnd_i,
00417 PHYEMAC1RXDISPERR => gnd_i,
00418 PHYEMAC1RXLOSSOFSYNC => gnd_v48_i (1 downto 0),
00419 PHYEMAC1RXNOTINTABLE => gnd_i,
00420 PHYEMAC1RXRUNDISP => gnd_i,
00421 PHYEMAC1TXBUFERR => gnd_i,
00422 EMAC1PHYTXCHARDISPMODE => open,
00423 EMAC1PHYTXCHARDISPVAL => open,
00424 EMAC1PHYTXCHARISK => open,
00425
00426 EMAC1PHYMCLKOUT => open,
00427 PHYEMAC1MCLKIN => gnd_i,
00428 PHYEMAC1MDIN => gnd_i,
00429 EMAC1PHYMDOUT => open,
00430 EMAC1PHYMDTRI => open,
00431
00432 TIEEMAC1CONFIGVEC => (others => '0'),
00433 TIEEMAC1UNICASTADDR => gnd_v48_i,
00434
00435 -- Host Interface
00436 HOSTCLK => HOSTCLK,
00437 HOSTOPCODE => hostOpCode,
00438 HOSTREQ => hostreq,
00439 HOSTMIIMSEL => host_MIIM_sel,
00440 HOSTADDR => hostaddr,
00441 HOSTWRDATA => hostdata_out,
00442 HOSTMIIMRDY => host_MIIM_rdy,
00443 HOSTRDDATA => hostdata_in,
00444 HOSTEMAC1SEL => '0', -- EMAC 0 only
00445
00446 -- DCR Interface
00447 DCREMACCLK => gnd_i,
00448 DCREMACABUS => gnd_v48_i(1 downto 0),
00449 DCREMACREAD => gnd_i,
00450 DCREMACWRITE => gnd_i,
00451 DCREMACDBUS => gnd_v48_i(31 downto 0),
00452 EMACDCRACK => open,
00453 EMACDCRDBUS => open,
00454 DCREMACENABLE => gnd_i, -- do not use
00455 DCRHOSTDONEIR => open
00456 );
00457
00458 end WRAPPER;