OpenCores
URL https://opencores.org/ocsvn/xenie/xenie/trunk

Subversion Repositories xenie

[/] [xenie/] [trunk/] [examples/] [Eth_example/] [src/] [hdl/] [xenie_eth_example.vhd] - Blame information for rev 4

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 4 DFC
-------------------------------------------------------------------------------
2
--
3
-- (C) Copyright 2017 DFC Design, s.r.o., Brno, Czech Republic
4
-- Author: Marek Kvas (m.kvas@dspfpga.com)
5
--
6
-------------------------------------------------------------------------------
7
-- This file is part of Xenia Ethernet Example project.
8
-- 
9
-- Xenia Ethernet Example project is free software: you can 
10
-- redistribute it and/or modify it under the terms of 
11
-- the GNU Lesser General Public License as published by the Free 
12
-- Software Foundation, either version 3 of the License, or
13
-- (at your option) any later version.
14
-- 
15
-- Xenia Ethernet Example project is distributed in the hope that 
16
-- it will be useful, but WITHOUT ANY WARRANTY; without even 
17
-- the implied warranty of MERCHANTABILITY or FITNESS FOR A 
18
-- PARTICULAR PURPOSE.  See the GNU Lesser General Public License 
19
-- for more details.
20
-- 
21
-- You should have received a copy of the GNU Lesser General Public 
22
-- License along with Xenia Ethernet Example project.  If not, 
23
-- see <http://www.gnu.org/licenses/>.
24
-------------------------------------------------------------------------------
25
--
26
-- This is a top-level entity of Xenie Ethernet test and demo design.
27
--
28
--
29
-------------------------------------------------------------------------------
30
 
31
 
32
library ieee;
33
use ieee.std_logic_1164.all;
34
use ieee.numeric_std.all;
35
 
36
library UNISIM;
37
use UNISIM.Vcomponents.all;
38
 
39
entity xenie_eth_example is
40
   generic (
41
      -- Arbitrary constant defined here
42
      -- 15 downto 12 - reserved; 7 downto 4 major; 3 downto 0 minor
43
      -- 11 downto 8 - target board :
44
      --    1 - Xenie 1.0
45
      -- !! careful board version may be used in generate statements anywhere!!
46
      g_version            : std_logic_vector(15 downto 0) := x"0110";
47
      -- Date and time is passed from synthesis
48
      g_compilation_date   : std_logic_vector(47 downto 0) := x"000000000000"
49
           );
50
   port (
51
      -- Free running clock
52
      CLK_200M_IN_P              : in  std_logic;
53
      CLK_200M_IN_N              : in  std_logic;
54
 
55
      -- UART for debugging
56
      MB_UART_TX                 : out std_logic;
57
      MB_UART_RX                 : in  std_logic;
58
 
59
      -- MDIO towards 10G ETH PHY
60
      ETH_MDIO_MDC               : out std_logic;
61
      ETH_MDIO_MDIO              : inout std_logic;
62
 
63
      -- RXAUI - Reference clock and transceivers
64
      ETH_RXAUI_REFCLK_P         : in  std_logic;
65
      ETH_RXAUI_REFCLK_N         : in  std_logic;
66
      ETH_RXAUI_TX_P             : out std_logic_vector(1 downto 0);
67
      ETH_RXAUI_TX_N             : out std_logic_vector(1 downto 0);
68
      ETH_RXAUI_RX_P             : in  std_logic_vector(1 downto 0);
69
      ETH_RXAUI_RX_N             : in  std_logic_vector(1 downto 0);
70
 
71
      ETH_PHY_RESETN             : out std_logic;
72
      ETH_PHY_RCLK1              : in  std_logic;
73
      ETH_PHY_INTN               : in  std_logic;
74
      ETH_PHY_GPIO               : in  std_logic_vector(5 downto 0);
75
 
76
      -- select between on-board oscillator 156.25 MHz('1')or external clock('0')
77
      ETH_PHY_CLK_SRC_SEL        : out std_logic;
78
 
79
 
80
      -- I2C towards both on-board(UID EEPROM) and off-board peripherals
81
      I2C_SCL                    : inout std_logic;
82
      I2C_SDA                    : inout std_logic;
83
 
84
      -- QSPI to on-board configuration SPI flash
85
      -- As flash is connected to cfg interface, SPI clock is connected
86
      -- to dedicated CCLK pin. It is driven using STARTUP primitive
87
      -- that is instantiated somewhere else (e.g. in AXI_QSPI core).
88
      CFG_QSPI_IO                : inout std_logic_vector(3 downto 0);
89
      CFG_QSPI_SS                : inout std_logic;
90
 
91
      -- Xenia LEDs
92
      LEDS                       : out std_logic_vector(1 downto 0);
93
      -- Power good signal
94
      ALL_SRC_PG                 : in  std_logic;
95
 
96
      ddr3_addr                  : out std_logic_vector ( 14 downto 0 );
97
      ddr3_ba                    : out std_logic_vector ( 2 downto 0 );
98
      ddr3_cas_n                 : out std_logic;
99
      ddr3_ck_n                  : out std_logic_vector ( 0 to 0 );
100
      ddr3_ck_p                  : out std_logic_vector ( 0 to 0 );
101
      ddr3_cke                   : out std_logic_vector ( 0 to 0 );
102
      ddr3_cs_n                  : out std_logic_vector ( 0 to 0 );
103
      ddr3_dm                    : out std_logic_vector ( 3 downto 0 );
104
      ddr3_dq                    : inout std_logic_vector ( 31 downto 0 );
105
      ddr3_dqs_n                 : inout std_logic_vector ( 3 downto 0 );
106
      ddr3_dqs_p                 : inout std_logic_vector ( 3 downto 0 );
107
      ddr3_odt                   : out std_logic_vector ( 0 to 0 );
108
      ddr3_ras_n                 : out std_logic;
109
      ddr3_reset_n               : out std_logic;
110
      ddr3_we_n                  : out std_logic;
111
 
112
      DBG_PORT                   : out std_logic_vector(12 downto 0)
113
 
114
        );
115
end entity;
116
 
117
 
118
 
119
 
120
 
121
architecture synthesis of xenie_eth_example is
122
 
123
  component main_bd is
124
  port (
125
      MB_MDIO_mdio_t : out STD_LOGIC;
126
      MB_MDIO_mdio_o : out STD_LOGIC;
127
      MB_MDIO_mdc : out STD_LOGIC;
128
      MB_MDIO_mdio_i : in STD_LOGIC;
129
      SPI_RTL_io0_i : in STD_LOGIC;
130
      SPI_RTL_io0_o : out STD_LOGIC;
131
      SPI_RTL_io0_t : out STD_LOGIC;
132
      SPI_RTL_io1_i : in STD_LOGIC;
133
      SPI_RTL_io1_o : out STD_LOGIC;
134
      SPI_RTL_io1_t : out STD_LOGIC;
135
      SPI_RTL_io2_i : in STD_LOGIC;
136
      SPI_RTL_io2_o : out STD_LOGIC;
137
      SPI_RTL_io2_t : out STD_LOGIC;
138
      SPI_RTL_io3_i : in STD_LOGIC;
139
      SPI_RTL_io3_o : out STD_LOGIC;
140
      SPI_RTL_io3_t : out STD_LOGIC;
141
      SPI_RTL_ss_i : in STD_LOGIC_VECTOR ( 0 to 0 );
142
      SPI_RTL_ss_o : out STD_LOGIC_VECTOR ( 0 to 0 );
143
      SPI_RTL_ss_t : out STD_LOGIC;
144
      MB_UART_rxd : in STD_LOGIC;
145
      MB_UART_txd : out STD_LOGIC;
146
      IIC_RTL_scl_i : in STD_LOGIC;
147
      IIC_RTL_scl_o : out STD_LOGIC;
148
      IIC_RTL_scl_t : out STD_LOGIC;
149
      IIC_RTL_sda_i : in STD_LOGIC;
150
      IIC_RTL_sda_o : out STD_LOGIC;
151
      IIC_RTL_sda_t : out STD_LOGIC;
152
      DDR3_dq : inout STD_LOGIC_VECTOR ( 31 downto 0 );
153
      DDR3_dqs_p : inout STD_LOGIC_VECTOR ( 3 downto 0 );
154
      DDR3_dqs_n : inout STD_LOGIC_VECTOR ( 3 downto 0 );
155
      DDR3_addr : out STD_LOGIC_VECTOR ( 14 downto 0 );
156
      DDR3_ba : out STD_LOGIC_VECTOR ( 2 downto 0 );
157
      DDR3_ras_n : out STD_LOGIC;
158
      DDR3_cas_n : out STD_LOGIC;
159
      DDR3_we_n : out STD_LOGIC;
160
      DDR3_reset_n : out STD_LOGIC;
161
      DDR3_ck_p : out STD_LOGIC_VECTOR ( 0 to 0 );
162
      DDR3_ck_n : out STD_LOGIC_VECTOR ( 0 to 0 );
163
      DDR3_cke : out STD_LOGIC_VECTOR ( 0 to 0 );
164
      DDR3_cs_n : out STD_LOGIC_VECTOR ( 0 to 0 );
165
      DDR3_dm : out STD_LOGIC_VECTOR ( 3 downto 0 );
166
      DDR3_odt : out STD_LOGIC_VECTOR ( 0 to 0 );
167
      GPIO_IO_I : in STD_LOGIC_VECTOR ( 31 downto 0 );
168
      GPIO_IO_O : out STD_LOGIC_VECTOR ( 31 downto 0 );
169
      GPIO_IO_T : out STD_LOGIC_VECTOR ( 31 downto 0 );
170
      GPIO2_IO_I : in STD_LOGIC_VECTOR ( 31 downto 0 );
171
      GPIO2_IO_O : out STD_LOGIC_VECTOR ( 31 downto 0 );
172
      GPIO2_IO_T : out STD_LOGIC_VECTOR ( 31 downto 0 );
173
      VERSION_GPIO : in STD_LOGIC_VECTOR ( 63 downto 0 );
174
      AXI_CLK : out STD_LOGIC;
175
      SYS_CLK_I : in STD_LOGIC;
176
      HOST_MAC0 : out STD_LOGIC_VECTOR ( 31 downto 0 );
177
      HOST_MAC1 : out STD_LOGIC_VECTOR ( 31 downto 0 );
178
      HOST_IP : out STD_LOGIC_VECTOR ( 31 downto 0 );
179
      HOST_IP_NETMASK : out STD_LOGIC_VECTOR ( 31 downto 0 )
180
  );
181
  end component main_bd;
182
 
183
  component rxaui_0 is
184
  port (
185
      reset : IN STD_LOGIC;
186
      dclk : IN STD_LOGIC;
187
      clk156_out : OUT STD_LOGIC;
188
      clk156_lock : OUT STD_LOGIC;
189
      refclk_out : OUT STD_LOGIC;
190
      refclk_p : IN STD_LOGIC;
191
      refclk_n : IN STD_LOGIC;
192
      qplloutclk_out : OUT STD_LOGIC;
193
      qplllock_out : OUT STD_LOGIC;
194
      qplloutrefclk_out : OUT STD_LOGIC;
195
      xgmii_txd : IN STD_LOGIC_VECTOR(63 DOWNTO 0);
196
      xgmii_txc : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
197
      xgmii_rxd : OUT STD_LOGIC_VECTOR(63 DOWNTO 0);
198
      xgmii_rxc : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
199
      rxaui_tx_l0_p : OUT STD_LOGIC;
200
      rxaui_tx_l0_n : OUT STD_LOGIC;
201
      rxaui_tx_l1_p : OUT STD_LOGIC;
202
      rxaui_tx_l1_n : OUT STD_LOGIC;
203
      rxaui_rx_l0_p : IN STD_LOGIC;
204
      rxaui_rx_l0_n : IN STD_LOGIC;
205
      rxaui_rx_l1_p : IN STD_LOGIC;
206
      rxaui_rx_l1_n : IN STD_LOGIC;
207
      signal_detect : IN STD_LOGIC_VECTOR(1 DOWNTO 0);
208
      debug : OUT STD_LOGIC_VECTOR(5 DOWNTO 0);
209
      mdc : IN STD_LOGIC;
210
      mdio_in : IN STD_LOGIC;
211
      mdio_out : OUT STD_LOGIC;
212
      mdio_tri : OUT STD_LOGIC;
213
      prtad : IN STD_LOGIC_VECTOR(4 DOWNTO 0);
214
      type_sel : IN STD_LOGIC_VECTOR(1 DOWNTO 0)
215
   );
216
   end component;
217
 
218
   component udp_ip_10g_0 is
219
   port (
220
      RST : IN STD_LOGIC;
221
      CLK : IN STD_LOGIC;
222
      LINK_SPEED : IN STD_LOGIC_VECTOR(2 DOWNTO 0);
223
      HOST_MAC : IN STD_LOGIC_VECTOR(47 DOWNTO 0);
224
      HOST_IP : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
225
      HOST_IP_NETMASK : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
226
      TX_DST_MAC : IN STD_LOGIC_VECTOR(47 DOWNTO 0);
227
      TX_DST_IP : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
228
      TX_SRC_UDP : IN STD_LOGIC_VECTOR(15 DOWNTO 0);
229
      TX_DST_UDP : IN STD_LOGIC_VECTOR(15 DOWNTO 0);
230
      TX_FRAME_VALID : IN STD_LOGIC;
231
      TX_FRAME_RDY : OUT STD_LOGIC;
232
      TX_FRAME_LAST : IN STD_LOGIC;
233
      TX_FRAME_BE : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
234
      TX_FRAME_DATA : IN STD_LOGIC_VECTOR(63 DOWNTO 0);
235
      RX_SRC_MAC : OUT STD_LOGIC_VECTOR(47 DOWNTO 0);
236
      RX_SRC_IP : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
237
      RX_SRC_UDP : OUT STD_LOGIC_VECTOR(15 DOWNTO 0);
238
      RX_DST_UDP : OUT STD_LOGIC_VECTOR(15 DOWNTO 0);
239
      RX_FRAME_VALID : OUT STD_LOGIC;
240
      RX_FRAME_RDY : IN STD_LOGIC;
241
      RX_FRAME_LAST : OUT STD_LOGIC;
242
      RX_FRAME_BE : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
243
      RX_FRAME_DATA : OUT STD_LOGIC_VECTOR(63 DOWNTO 0);
244
      RX_FRAME_LENGTH : OUT STD_LOGIC_VECTOR(15 DOWNTO 0);
245
      XGMII_TXC : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
246
      XGMII_TXD : OUT STD_LOGIC_VECTOR(63 DOWNTO 0);
247
      XGMII_RXC : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
248
      XGMII_RXD : IN STD_LOGIC_VECTOR(63 DOWNTO 0)
249
   );
250
   end component;
251
 
252
 
253
   signal sys_clk                   : std_logic;
254
 
255
   signal clk_200_mhz_in_clk_n      : std_logic;
256
   signal clk_200_mhz_in_clk_p      : std_logic;
257
   signal mb_mdio_mdc               : std_logic;
258
   signal mb_mdio_mdio_i            : std_logic;
259
   signal mb_mdio_mdio_o            : std_logic;
260
   signal mb_mdio_mdio_t            : std_logic;
261
   signal mb_uart_rxd               : std_logic;
262
   signal mb_uart_txd               : std_logic;
263
   signal rxaui_clk156_lock         : std_logic;
264
   signal rxaui_clk156_out          : std_logic;
265
   signal rxaui_debug               : std_logic_vector ( 5 downto 0 );
266
   signal rxaui_mdio_mdc            : std_logic;
267
   signal rxaui_mdio_mdio_i         : std_logic;
268
   signal rxaui_mdio_mdio_o         : std_logic;
269
   signal rxaui_mdio_mdio_t         : std_logic;
270
   signal rxaui_qplllock_out        : std_logic;
271
   signal rxaui_refclk_clk_n        : std_logic;
272
   signal rxaui_refclk_clk_p        : std_logic;
273
   signal rxaui_rst                 : std_logic;
274
   signal rxaui_xgmii_rxc           : std_logic_vector ( 7 downto 0 );
275
   signal rxaui_xgmii_rxd           : std_logic_vector ( 63 downto 0 );
276
   signal rxaui_xgmii_txc           : std_logic_vector ( 7 downto 0 );
277
   signal rxaui_xgmii_txd           : std_logic_vector ( 63 downto 0 );
278
   signal version_gpio              : std_logic_vector ( 63 downto 0 );
279
   signal gpio2_io_i                : std_logic_vector ( 31 downto 0 );
280
   signal gpio2_io_o                : std_logic_vector ( 31 downto 0 );
281
   signal gpio2_io_t                : std_logic_vector ( 31 downto 0 );
282
   signal gpio_io_i                 : std_logic_vector ( 31 downto 0 );
283
   signal gpio_io_o                 : std_logic_vector ( 31 downto 0 );
284
   signal gpio_io_t                 : std_logic_vector ( 31 downto 0 );
285
   signal iic_rtl_scl_i             : std_logic;
286
   signal iic_rtl_scl_o             : std_logic;
287
   signal iic_rtl_scl_t             : std_logic;
288
   signal iic_rtl_sda_i             : std_logic;
289
   signal iic_rtl_sda_o             : std_logic;
290
   signal iic_rtl_sda_t             : std_logic;
291
   signal rxaui_rx_l0_n             : std_logic;
292
   signal rxaui_rx_l0_p             : std_logic;
293
   signal rxaui_rx_l1_n             : std_logic;
294
   signal rxaui_rx_l1_p             : std_logic;
295
   signal rxaui_tx_l0_n             : std_logic;
296
   signal rxaui_tx_l0_p             : std_logic;
297
   signal rxaui_tx_l1_n             : std_logic;
298
   signal rxaui_tx_l1_p             : std_logic;
299
   signal spi_rtl_io0_i             : std_logic;
300
   signal spi_rtl_io0_o             : std_logic;
301
   signal spi_rtl_io0_t             : std_logic;
302
   signal spi_rtl_io1_i             : std_logic;
303
   signal spi_rtl_io1_o             : std_logic;
304
   signal spi_rtl_io1_t             : std_logic;
305
   signal spi_rtl_io2_i             : std_logic;
306
   signal spi_rtl_io2_o             : std_logic;
307
   signal spi_rtl_io2_t             : std_logic;
308
   signal spi_rtl_io3_i             : std_logic;
309
   signal spi_rtl_io3_o             : std_logic;
310
   signal spi_rtl_io3_t             : std_logic;
311
   signal spi_rtl_ss_i              : std_logic_vector ( 0 to 0 );
312
   signal spi_rtl_ss_o              : std_logic_vector ( 0 to 0 );
313
   signal spi_rtl_ss_t              : std_logic;
314
 
315
   -- Alive counter 
316
   signal alive_cnt_sys_clk         : std_logic_vector(25 downto 0);
317
   signal alive_cnt_rxaui_clk       : std_logic_vector(25 downto 0);
318
 
319
   signal clk_200m_buffered         : std_logic;
320
 
321
   -- Frame generator signals
322
   signal fg_reset_mb               : std_logic;
323
   signal fg_reset_meta             : std_logic;
324
   signal fg_reset_sync             : std_logic;
325
 
326
   signal xgmii_loopback_mb         : std_logic;
327
   signal xgmii_loopback_meta       : std_logic;
328
   signal xgmii_loopback_sync       : std_logic;
329
 
330
   signal rxaui_xgmii_txc_fg        : std_logic_vector(7 downto 0);
331
   signal rxaui_xgmii_txd_fg        : std_logic_vector(63 downto 0);
332
 
333
   signal mb_host_mac1              : std_logic_vector(31 downto 0);
334
 
335
   -- General control signals
336
   signal udp_link_speed            : std_logic_vector(2 downto 0);
337
 
338
   signal udp_host_mac              : std_logic_vector(47 downto 0);
339
   signal udp_host_ip               : std_logic_vector(31 downto 0);
340
   signal udp_host_ip_netmask       : std_logic_vector(31 downto 0);
341
 
342
   signal udp_tx_dst_mac            : std_logic_vector(47 downto 0);
343
   signal udp_tx_dst_ip             : std_logic_vector(31 downto 0);
344
   signal udp_tx_src_udp            : std_logic_vector(15 downto 0);
345
   signal udp_tx_dst_udp            : std_logic_vector(15 downto 0);
346
 
347
   signal udp_tx_frame_valid        : std_logic;
348
   signal udp_tx_frame_rdy          : std_logic;
349
   signal udp_tx_frame_last         : std_logic;
350
   signal udp_tx_frame_be           : std_logic_vector(7 downto 0);
351
   signal udp_tx_frame_data         : std_logic_vector(63 downto 0);
352
 
353
   signal udp_rx_src_mac            : std_logic_vector(47 downto 0);
354
   signal udp_rx_src_ip             : std_logic_vector(31 downto 0);
355
   signal udp_rx_src_udp            : std_logic_vector(15 downto 0);
356
   signal udp_rx_dst_udp            : std_logic_vector(15 downto 0);
357
 
358
   signal udp_rx_frame_valid        : std_logic;
359
   signal udp_rx_frame_rdy          : std_logic;
360
   signal udp_rx_frame_last         : std_logic;
361
   signal udp_rx_frame_be           : std_logic_vector(7 downto 0);
362
   signal udp_rx_frame_data         : std_logic_vector(63 downto 0);
363
   signal udp_rx_frame_length       : std_logic_vector(15 downto 0);
364
 
365
 
366
   -- Helpers
367
   signal gpio_io_t_1_d             : std_logic;
368
   signal eth_phy_resetn_i          : std_logic := '0';
369
 
370
 
371
   attribute ASYNC_REG     : string;
372
   attribute ASYNC_REG of fg_reset_meta: signal is "TRUE";
373
   attribute ASYNC_REG of xgmii_loopback_meta: signal is "TRUE";
374
 
375
begin
376
 
377
   -- Synchronize control signals to XGMII domain
378
   xgmii_sync_proc : process(rxaui_clk156_out)
379
   begin
380
      if rising_edge(rxaui_clk156_out) then
381
         xgmii_loopback_meta <= xgmii_loopback_mb;
382
         xgmii_loopback_sync <= xgmii_loopback_meta;
383
 
384
         fg_reset_meta <= fg_reset_mb;
385
         fg_reset_sync <= fg_reset_meta;
386
      end if;
387
   end process;
388
 
389
   -- Loopback on XGMII
390
   xgmii_loopback_proc : process(rxaui_clk156_out)
391
   begin
392
      if rising_edge(rxaui_clk156_out) then
393
         if xgmii_loopback_sync = '1' then
394
            rxaui_xgmii_txc <= rxaui_xgmii_rxc;
395
            rxaui_xgmii_txd <= rxaui_xgmii_rxd;
396
         else
397
            rxaui_xgmii_txc <= rxaui_xgmii_txc_fg;
398
            rxaui_xgmii_txd <= rxaui_xgmii_txd_fg;
399
         end if;
400
      end if;
401
   end process;
402
 
403
 
404
 
405
   udp_ip_10g_0_inst : udp_ip_10g_0
406
   port map (
407
      RST               => fg_reset_sync,
408
      CLK               => rxaui_clk156_out,
409
 
410
      LINK_SPEED        => udp_link_speed,
411
 
412
      HOST_MAC          => udp_host_mac,
413
      HOST_IP           => udp_host_ip,
414
      HOST_IP_NETMASK   => udp_host_ip_netmask,
415
 
416
      TX_DST_MAC        => udp_tx_dst_mac,
417
      TX_DST_IP         => udp_tx_dst_ip,
418
      TX_SRC_UDP        => udp_tx_src_udp,
419
      TX_DST_UDP        => udp_tx_dst_udp,
420
 
421
      TX_FRAME_VALID    => udp_tx_frame_valid,
422
      TX_FRAME_RDY      => udp_tx_frame_rdy,
423
      TX_FRAME_LAST     => udp_tx_frame_last,
424
      TX_FRAME_BE       => udp_tx_frame_be,
425
      TX_FRAME_DATA     => udp_tx_frame_data,
426
 
427
      RX_SRC_MAC        => udp_rx_src_mac,
428
      RX_SRC_IP         => udp_rx_src_ip,
429
      RX_SRC_UDP        => udp_rx_src_udp,
430
      RX_DST_UDP        => udp_rx_dst_udp,
431
 
432
      RX_FRAME_VALID    => udp_rx_frame_valid,
433
      RX_FRAME_RDY      => udp_rx_frame_rdy,
434
      RX_FRAME_LAST     => udp_rx_frame_last,
435
      RX_FRAME_BE       => udp_rx_frame_be,
436
      RX_FRAME_DATA     => udp_rx_frame_data,
437
      RX_FRAME_LENGTH   => udp_rx_frame_length,
438
 
439
      XGMII_TXC         => rxaui_xgmii_txc_fg,
440
      XGMII_TXD         => rxaui_xgmii_txd_fg,
441
      XGMII_RXC         => rxaui_xgmii_rxc,
442
      XGMII_RXD         => rxaui_xgmii_rxd
443
 
444
 
445
        );
446
 
447
   udp_ip_10g_test_app_inst : entity work.udp_ip_10g_test_app
448
   port map (
449
      RST               => fg_reset_sync,
450
      CLK               => rxaui_clk156_out,
451
 
452
      HOST_MAC          => udp_host_mac,
453
      HOST_IP           => udp_host_ip,
454
      HOST_IP_NETMASK   => udp_host_ip_netmask,
455
 
456
      TX_DST_MAC        => udp_tx_dst_mac,
457
      TX_DST_IP         => udp_tx_dst_ip,
458
      TX_SRC_UDP        => udp_tx_src_udp,
459
      TX_DST_UDP        => udp_tx_dst_udp,
460
 
461
      TX_FRAME_VALID    => udp_tx_frame_valid,
462
      TX_FRAME_RDY      => udp_tx_frame_rdy,
463
      TX_FRAME_LAST     => udp_tx_frame_last,
464
      TX_FRAME_BE       => udp_tx_frame_be,
465
      TX_FRAME_DATA     => udp_tx_frame_data,
466
 
467
      RX_SRC_MAC        => udp_rx_src_mac,
468
      RX_SRC_IP         => udp_rx_src_ip,
469
      RX_SRC_UDP        => udp_rx_src_udp,
470
      RX_DST_UDP        => udp_rx_dst_udp,
471
 
472
      RX_FRAME_VALID    => udp_rx_frame_valid,
473
      RX_FRAME_RDY      => udp_rx_frame_rdy,
474
      RX_FRAME_LAST     => udp_rx_frame_last,
475
      RX_FRAME_BE       => udp_rx_frame_be,
476
      RX_FRAME_DATA     => udp_rx_frame_data,
477
      RX_FRAME_LENGTH   => udp_rx_frame_length
478
        );
479
 
480
 
481
 
482
 
483
 
484
   -- Map GPIO signals
485
   -- False path should be applied on rxaui reset even though it is internally
486
   -- synchronized
487
   rxaui_rst <= gpio_io_o(0);
488
   gpio_io_i(0) <= gpio_io_o(0);
489
 
490
   -- Change PHY reset state only when direction register falling edge
491
   phy_rst_proc : process(sys_clk)
492
   begin
493
      if rising_edge(sys_clk) then
494
         gpio_io_t_1_d <= gpio_io_t(1);
495
         if gpio_io_t(1) = '0' and gpio_io_t_1_d = '1' then
496
            eth_phy_resetn_i <= gpio_io_o(1);
497
         end if;
498
      end if;
499
   end process;
500
   ETH_PHY_RESETN <= eth_phy_resetn_i;
501
   gpio_io_i(1) <= eth_phy_resetn_i;
502
 
503
   gpio_io_i(2) <= rxaui_clk156_lock;
504
   gpio_io_i(3) <= rxaui_qplllock_out;
505
 
506
   gpio_io_i(9 downto 4) <= rxaui_debug;
507
 
508
   ETH_PHY_CLK_SRC_SEL <= gpio_io_o(10) when gpio_io_t(10) = '0' else 'Z';
509
   gpio_io_i(10) <= gpio_io_o(10);
510
 
511
   gpio_io_i(11) <= ALL_SRC_PG;
512
 
513
   gpio_io_i(12) <= '0';
514
   fg_reset_mb <= not gpio_io_o(13);
515
 
516
   xgmii_loopback_mb <= gpio_io_o(14);
517
 
518
   gpio_io_i(31 downto 13) <= gpio_io_o(31 downto 13);
519
   gpio2_io_i <= gpio2_io_o;
520
 
521
 
522
 
523
   -- Alive counter demonstrating free running clocks are operational
524
   -- with connection to LED
525
   free_clk_alive_proc : process(sys_clk)
526
   begin
527
      if rising_edge(sys_clk) then
528
         alive_cnt_sys_clk <= std_logic_vector(unsigned(alive_cnt_sys_clk) + 1);
529
      end if;
530
   end process;
531
   LEDS(0) <= alive_cnt_sys_clk(alive_cnt_sys_clk'left);
532
 
533
 
534
   -- Alive counter demonstrating PHY clocks are operational
535
   -- with connection to LED
536
   rxaui_clk_alive_proc : process(rxaui_clk156_out)
537
   begin
538
      if rising_edge(rxaui_clk156_out) then
539
         alive_cnt_rxaui_clk <= std_logic_vector(unsigned(alive_cnt_rxaui_clk) + 1);
540
      end if;
541
   end process;
542
   LEDS(1) <= alive_cnt_rxaui_clk(alive_cnt_rxaui_clk'left);
543
 
544
   -- Version GPIO is combination of generics
545
   version_gpio <= g_version & g_compilation_date;
546
 
547
 
548
 
549
   -- Create internal connection of external MDIO and
550
   -- RXAUI core control mdio
551
   ETH_MDIO_MDC <= mb_mdio_mdc;
552
   ETH_MDIO_MDIO <= 'Z' when mb_mdio_mdio_t = '1' else mb_mdio_mdio_o;
553
   mb_mdio_mdio_i <= ETH_MDIO_MDIO and (rxaui_mdio_mdio_o or rxaui_mdio_mdio_t);
554
   rxaui_mdio_mdio_i <= mb_mdio_mdio_o;
555
   rxaui_mdio_mdc <= mb_mdio_mdc;
556
 
557
 
558
   DBG_PORT <= "0000000" &
559
               udp_rx_frame_last & udp_rx_frame_rdy & udp_rx_frame_valid &
560
               udp_tx_frame_last & udp_tx_frame_rdy & udp_tx_frame_valid;
561
 
562
   -- Buffer input clock
563
   IBUFGDS_inst : IBUFGDS
564
   generic map (
565
      DIFF_TERM      => FALSE, -- Differential Termination
566
      IBUF_LOW_PWR   => FALSE, -- Low power (TRUE) vs. performance (FALSE) setting for referenced I/O standards
567
      IOSTANDARD     => "DEFAULT"
568
               )
569
   port map (
570
      O  => clk_200m_buffered,
571
      I  => CLK_200M_IN_P,
572
      IB => CLK_200M_IN_N
573
   );
574
 
575
   main_bd_inst : main_bd
576
   port map (
577
      sys_clk_i                 => clk_200m_buffered,
578
      AXI_CLK                   => sys_clk,
579
      MB_MDIO_MDC               => mb_mdio_mdc,
580
      MB_MDIO_MDIO_I            => mb_mdio_mdio_i,
581
      MB_MDIO_MDIO_O            => mb_mdio_mdio_o,
582
      MB_MDIO_MDIO_T            => mb_mdio_mdio_t,
583
      MB_UART_RXD               => MB_UART_RX,
584
      MB_UART_TXD               => MB_UART_TX,
585
      VERSION_GPIO              => version_gpio,
586
      GPIO2_IO_I                => gpio2_io_i,
587
      GPIO2_IO_O                => gpio2_io_o,
588
      GPIO2_IO_T                => gpio2_io_t,
589
      GPIO_IO_I                 => gpio_io_i,
590
      GPIO_IO_O                 => gpio_io_o,
591
      GPIO_IO_T                 => gpio_io_t,
592
      IIC_RTL_SCL_I             => iic_rtl_scl_i,
593
      IIC_RTL_SCL_O             => iic_rtl_scl_o,
594
      IIC_RTL_SCL_T             => iic_rtl_scl_t,
595
      IIC_RTL_SDA_I             => iic_rtl_sda_i,
596
      IIC_RTL_SDA_O             => iic_rtl_sda_o,
597
      IIC_RTL_SDA_T             => iic_rtl_sda_t,
598
      SPI_RTL_IO0_I             => spi_rtl_io0_i,
599
      SPI_RTL_IO0_O             => spi_rtl_io0_o,
600
      SPI_RTL_IO0_T             => spi_rtl_io0_t,
601
      SPI_RTL_IO1_I             => spi_rtl_io1_i,
602
      SPI_RTL_IO1_O             => spi_rtl_io1_o,
603
      SPI_RTL_IO1_T             => spi_rtl_io1_t,
604
      SPI_RTL_IO2_I             => spi_rtl_io2_i,
605
      SPI_RTL_IO2_O             => spi_rtl_io2_o,
606
      SPI_RTL_IO2_T             => spi_rtl_io2_t,
607
      SPI_RTL_IO3_I             => spi_rtl_io3_i,
608
      SPI_RTL_IO3_O             => spi_rtl_io3_o,
609
      SPI_RTL_IO3_T             => spi_rtl_io3_t,
610
      SPI_RTL_SS_I              => spi_rtl_ss_i,
611
      SPI_RTL_SS_O              => spi_rtl_ss_o,
612
      SPI_RTL_SS_T              => spi_rtl_ss_t,
613
 
614
      HOST_IP                   => udp_host_ip,
615
      HOST_IP_NETMASK           => udp_host_ip_netmask,
616
      HOST_MAC0                 => udp_host_mac(31 downto 0),
617
      HOST_MAC1                 => mb_host_mac1,
618
 
619
      DDR3_dq                   => ddr3_dq,
620
      DDR3_dqs_p                => ddr3_dqs_p,
621
      DDR3_dqs_n                => ddr3_dqs_n,
622
      DDR3_addr                 => ddr3_addr,
623
      DDR3_ba                   => ddr3_ba,
624
      DDR3_ras_n                => ddr3_ras_n,
625
      DDR3_cas_n                => ddr3_cas_n,
626
      DDR3_we_n                 => ddr3_we_n,
627
      DDR3_reset_n              => ddr3_reset_n,
628
      DDR3_ck_p                 => ddr3_ck_p,
629
      DDR3_ck_n                 => ddr3_ck_n,
630
      DDR3_cke                  => ddr3_cke,
631
      DDR3_cs_n                 => ddr3_cs_n,
632
      DDR3_dm                   => ddr3_dm,
633
      DDR3_odt                  => ddr3_odt
634
 
635
   );
636
   udp_host_mac(47 downto 32) <= mb_host_mac1(15 downto 0);
637
   udp_link_speed <= mb_host_mac1(18 downto 16);
638
 
639
 
640
 
641
  rxaui_inst : rxaui_0
642
  port map (
643
    reset               => rxaui_rst,
644
    dclk                => sys_clk,
645
    clk156_out          => rxaui_clk156_out,
646
    clk156_lock         => rxaui_clk156_lock,
647
    refclk_out          => open,
648
    refclk_p            => ETH_RXAUI_REFCLK_P,
649
    refclk_n            => ETH_RXAUI_REFCLK_N,
650
    qplloutclk_out      => open,
651
    qplllock_out        => rxaui_qplllock_out,
652
    qplloutrefclk_out   => open,
653
    xgmii_txd           => rxaui_xgmii_txd,
654
    xgmii_txc           => rxaui_xgmii_txc,
655
    xgmii_rxd           => rxaui_xgmii_rxd,
656
    xgmii_rxc           => rxaui_xgmii_rxc,
657
    rxaui_tx_l0_p       => ETH_RXAUI_TX_P(0),
658
    rxaui_tx_l0_n       => ETH_RXAUI_TX_N(0),
659
    rxaui_tx_l1_p       => ETH_RXAUI_TX_P(1),
660
    rxaui_tx_l1_n       => ETH_RXAUI_TX_N(1),
661
    rxaui_rx_l0_p       => ETH_RXAUI_RX_P(0),
662
    rxaui_rx_l0_n       => ETH_RXAUI_RX_N(0),
663
    rxaui_rx_l1_p       => ETH_RXAUI_RX_P(1),
664
    rxaui_rx_l1_n       => ETH_RXAUI_RX_N(1),
665
    signal_detect       => "11", -- signal always present
666
    debug               => rxaui_debug,
667
    mdc                 => rxaui_mdio_mdc,
668
    mdio_in             => rxaui_mdio_mdio_i,
669
    mdio_out            => rxaui_mdio_mdio_o,
670
    mdio_tri            => rxaui_mdio_mdio_t,
671
    prtad               => "01000",
672
    type_sel            => "11" -- PHY XGXS
673
  );
674
 
675
   -- IO Bufs for bidirectional signals
676
   -- I2C bus
677
   iic_rtl_scl_iobuf: component IOBUF
678
   port map (
679
      I => iic_rtl_scl_o,
680
      IO => I2C_SCL,
681
      O => iic_rtl_scl_i,
682
      T => iic_rtl_scl_t
683
   );
684
   iic_rtl_sda_iobuf: component IOBUF
685
   port map (
686
      I => iic_rtl_sda_o,
687
      IO => I2C_SDA,
688
      O => iic_rtl_sda_i,
689
      T => iic_rtl_sda_t
690
   );
691
 
692
   -- QSPI for configuration flash
693
   spi_rtl_io0_iobuf: component IOBUF
694
   port map (
695
      I => spi_rtl_io0_o,
696
      IO => CFG_QSPI_IO(0),
697
      O => spi_rtl_io0_i,
698
      T => spi_rtl_io0_t
699
   );
700
   spi_rtl_io1_iobuf: component IOBUF
701
   port map (
702
      I => spi_rtl_io1_o,
703
      IO => CFG_QSPI_IO(1),
704
      O => spi_rtl_io1_i,
705
      T => spi_rtl_io1_t
706
   );
707
   spi_rtl_io2_iobuf: component IOBUF
708
   port map (
709
      I => spi_rtl_io2_o,
710
      IO => CFG_QSPI_IO(2),
711
      O => spi_rtl_io2_i,
712
      T => spi_rtl_io2_t
713
   );
714
   spi_rtl_io3_iobuf: component IOBUF
715
   port map (
716
      I => spi_rtl_io3_o,
717
      IO => CFG_QSPI_IO(3),
718
      O => spi_rtl_io3_i,
719
      T => spi_rtl_io3_t
720
   );
721
   spi_rtl_ss_iobuf_0: component IOBUF
722
   port map (
723
      I => spi_rtl_ss_o(0),
724
      IO => CFG_QSPI_SS,
725
      O => spi_rtl_ss_i(0),
726
      T => spi_rtl_ss_t
727
   );
728
 
729
end architecture;
730
 
731
 
732
 
733
 
734
 
735
 
736
 
737
 
738
 

powered by: WebSVN 2.1.0

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