diff --git a/boards/uniboard2/designs/unb2_singlemac/build/quartus/unb2_singlemac.qpf b/boards/uniboard2/designs/unb2_singlemac/build/quartus/unb2_singlemac.qpf new file mode 100644 index 0000000000000000000000000000000000000000..11488b07036de2f7d14ce05fa381b16a14647a27 --- /dev/null +++ b/boards/uniboard2/designs/unb2_singlemac/build/quartus/unb2_singlemac.qpf @@ -0,0 +1,31 @@ +# -------------------------------------------------------------------------- # +# +# Copyright (C) 1991-2014 Altera Corporation. All rights reserved. +# Your use of Altera Corporation's design tools, logic functions +# and other software and tools, and its AMPP partner logic +# functions, and any output files from any of the foregoing +# (including device programming or simulation files), and any +# associated documentation or information are expressly subject +# to the terms and conditions of the Altera Program License +# Subscription Agreement, the Altera Quartus II License Agreement, +# the Altera MegaCore Function License Agreement, or other +# applicable license agreement, including, without limitation, +# that your use is for the sole purpose of programming logic +# devices manufactured by Altera and sold by Altera or its +# authorized distributors. Please refer to the applicable +# agreement for further details. +# +# -------------------------------------------------------------------------- # +# +# Quartus II 64-Bit +# Version 14.0a10.1 Build 374 09/02/2014 SJ Full Version +# Date created = 13:59:19 November 14, 2014 +# +# -------------------------------------------------------------------------- # + +QUARTUS_VERSION = "14.0" +DATE = "13:59:19 November 14, 2014" + +# Revisions + +PROJECT_REVISION = "unb2_singlemac" diff --git a/boards/uniboard2/designs/unb2_singlemac/build/quartus/unb2_singlemac.qsf b/boards/uniboard2/designs/unb2_singlemac/build/quartus/unb2_singlemac.qsf new file mode 100644 index 0000000000000000000000000000000000000000..9a122c4f78c301ababc8a3c00cbc63be13c3ad8f --- /dev/null +++ b/boards/uniboard2/designs/unb2_singlemac/build/quartus/unb2_singlemac.qsf @@ -0,0 +1,75 @@ +# -------------------------------------------------------------------------- # +# +# Copyright (C) 1991-2014 Altera Corporation. All rights reserved. +# Your use of Altera Corporation's design tools, logic functions +# and other software and tools, and its AMPP partner logic +# functions, and any output files from any of the foregoing +# (including device programming or simulation files), and any +# associated documentation or information are expressly subject +# to the terms and conditions of the Altera Program License +# Subscription Agreement, the Altera Quartus II License Agreement, +# the Altera MegaCore Function License Agreement, or other +# applicable license agreement, including, without limitation, +# that your use is for the sole purpose of programming logic +# devices manufactured by Altera and sold by Altera or its +# authorized distributors. Please refer to the applicable +# agreement for further details. +# +# -------------------------------------------------------------------------- # +# +# Quartus II 64-Bit +# Version 14.0a10.1 Build 374 09/02/2014 SJ Full Version +# Date created = 13:59:19 November 14, 2014 +# +# -------------------------------------------------------------------------- # +# +# Notes: +# +# 1) The default values for assignments are stored in the file: +# unb2_singlemac_assignment_defaults.qdf +# If this file doesn't exist, see file: +# assignment_defaults.qdf +# +# 2) Altera recommends that you do not modify this file. This +# file is updated automatically by the Quartus II software +# and any changes you make may be lost or overwritten. +# +# -------------------------------------------------------------------------- # + + +set_global_assignment -name FAMILY "Arria 10" +set_global_assignment -name DEVICE 10AX115R2F40I2LG +set_global_assignment -name TOP_LEVEL_ENTITY unb2_singlemac +set_global_assignment -name ORIGINAL_QUARTUS_VERSION 14.0 +set_global_assignment -name PROJECT_CREATION_TIME_DATE "13:59:19 NOVEMBER 14, 2014" +set_global_assignment -name LAST_QUARTUS_VERSION 14.0 +set_global_assignment -name PROJECT_OUTPUT_DIRECTORY output_files +set_global_assignment -name ERROR_CHECK_FREQUENCY_DIVISOR 256 +set_global_assignment -name PARTITION_NETLIST_TYPE SOURCE -section_id Top +set_global_assignment -name PARTITION_FITTER_PRESERVATION_LEVEL PLACEMENT_AND_ROUTING -section_id Top +set_global_assignment -name PARTITION_COLOR 16764057 -section_id Top +set_global_assignment -name MIN_CORE_JUNCTION_TEMP "-40" +set_global_assignment -name MAX_CORE_JUNCTION_TEMP 100 +set_global_assignment -name POWER_PRESET_COOLING_SOLUTION "23 MM HEAT SINK WITH 200 LFPM AIRFLOW" +set_global_assignment -name POWER_BOARD_THERMAL_MODEL "NONE (CONSERVATIVE)" +set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top +set_global_assignment -name QSYS_FILE ../../../unb2_test/src/ip/system_pll.qsys +set_global_assignment -name VHDL_FILE ../../../../../../../../UniBoard/trunk/Firmware/modules/common/src/vhdl/common_evt.vhd +set_global_assignment -name VHDL_FILE ../../../../../../../../UniBoard/trunk/Firmware/designs/unb_common/src/vhdl/unb_wdi_extend.vhd +set_global_assignment -name VHDL_FILE ../../../../../../../../UniBoard/trunk/Firmware/modules/common/src/vhdl/common_counter.vhd +set_global_assignment -name VHDL_FILE ../../../../../../../../UniBoard/trunk/Firmware/modules/common/src/vhdl/common_pulser.vhd +set_global_assignment -name VHDL_FILE ../../../../../../../../UniBoard/trunk/Firmware/designs/unb_common/src/vhdl/unb_pulser.vhd +set_global_assignment -name VHDL_FILE ../../../../../../../../UniBoard/trunk/Firmware/modules/common/src/vhdl/common_async.vhd +set_global_assignment -name VHDL_FILE ../../../../../../../../UniBoard/trunk/Firmware/modules/common/src/vhdl/common_areset.vhd +set_global_assignment -name VHDL_FILE ../../../../../../../../UniBoard/trunk/Firmware/designs/unb_common/src/vhdl/unb_clk_rst.vhd +set_global_assignment -name VHDL_FILE ../../../../../../../../UniBoard/trunk/Firmware/designs/unb_common/src/vhdl/unb_node_ctrl.vhd +set_global_assignment -name VHDL_FILE ../../../../../../../../UniBoard/trunk/Firmware/modules/dp/src/vhdl/dp_stream_pkg.vhd +set_global_assignment -name VHDL_FILE ../../../../../../../../UniBoard/trunk/Firmware/modules/common/src/vhdl/common_pkg.vhd +set_global_assignment -name VHDL_FILE ../../../../../../../../UniBoard/trunk/Firmware/designs/unb_common/src/vhdl/unb_common_pkg.vhd +set_global_assignment -name QSYS_FILE ../../../../../../libraries/technology/ip_arria10/mac_10g/ip_arria10_mac_10g.qsys +set_global_assignment -name VHDL_FILE ../../../../../../libraries/technology/transceiver/tech_transceiver_arria10_1.vhd +set_global_assignment -name QSYS_FILE ../../../../../../libraries/technology/ip_arria10/transceiver_pll/transceiver_pll.qsys +set_global_assignment -name QSYS_FILE ../../../../../../libraries/technology/ip_arria10/transceiver_reset_controller_1/transceiver_reset_controller_1.qsys +set_global_assignment -name QSYS_FILE ../../../../../../libraries/technology/ip_arria10/transceiver_phy_1/transceiver_phy_1.qsys +set_global_assignment -name VHDL_FILE ../../src/vhdl/unb2_singlemac.vhd +set_global_assignment -name SDC_FILE ../../src/sdc/unb2_singlemac.sdc \ No newline at end of file diff --git a/boards/uniboard2/designs/unb2_singlemac/src/sdc/unb2_singlemac.sdc b/boards/uniboard2/designs/unb2_singlemac/src/sdc/unb2_singlemac.sdc new file mode 100644 index 0000000000000000000000000000000000000000..66a5daa09055c4a43f4c8d826551f6d170b367ae --- /dev/null +++ b/boards/uniboard2/designs/unb2_singlemac/src/sdc/unb2_singlemac.sdc @@ -0,0 +1,11 @@ +create_clock -period 5.000 -name {CLK} { CLK } +create_clock -period 1.552 -name {SA_CLK} { SA_CLK } +create_clock -period 1.552 -name {SB_CLK} { SB_CLK } +#create_clock -period 40.000 -name {ETH_clk} { ETH_clk } + +derive_pll_clocks + +set_clock_groups -asynchronous -group [get_clocks {u_system_pll|system_pll_inst|altera_pll_i|outclk_wire[0]}] +set_clock_groups -asynchronous -group [get_clocks {u_system_pll|system_pll_inst|altera_pll_i|outclk_wire[1]}] +set_false_path -from [get_clocks {*cpulse_out_bus[0]}] -to [get_clocks {*wys|clk_divtx_user}] +set_false_path -from [get_clocks {*wys|clk_divtx_user}] -to [get_clocks {*cpulse_out_bus[0]}] diff --git a/boards/uniboard2/designs/unb2_singlemac/src/vhdl/unb2_singlemac.vhd b/boards/uniboard2/designs/unb2_singlemac/src/vhdl/unb2_singlemac.vhd new file mode 100644 index 0000000000000000000000000000000000000000..1b2d33fe4f2bdc0121ee5d0fd3b8ffbbc8545e88 --- /dev/null +++ b/boards/uniboard2/designs/unb2_singlemac/src/vhdl/unb2_singlemac.vhd @@ -0,0 +1,385 @@ +------------------------------------------------------------------------------- +-- +-- Copyright (C) 2009 +-- ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/> +-- JIVE (Joint Institute for VLBI in Europe) <http://www.jive.nl/> +-- P.O.Box 2, 7990 AA Dwingeloo, The Netherlands +-- +-- This program is free software: you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation, either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see <http://www.gnu.org/licenses/>. +-- +------------------------------------------------------------------------------- + +LIBRARY IEEE, unb_common_lib; +use unb_common_lib.unb_common_pkg.all; +USE IEEE.STD_LOGIC_1164.ALL; +use ieee.std_logic_arith.all; +use ieee.std_logic_unsigned.all; + + +ENTITY unb2_singlemac IS + port ( + + -- GENERAL + CLK : IN STD_LOGIC; -- External system clock + PPS : IN STD_LOGIC; -- External system sync + WDI : OUT STD_LOGIC; -- Watchdog Clear + INTA : INOUT STD_LOGIC; -- FPGA interconnect line + INTB : INOUT STD_LOGIC; -- FPGA interconnect line + + -- 1GbE Control Interfaces + ETH_CLK : in std_logic; + ETH_SGIN : in std_logic_vector (1 downto 0); + ETH_SGOUT : out std_logic_vector (1 downto 0); + + -- Transceiver clocks + SA_CLK : IN STD_LOGIC; -- SerDes reference clock front + SB_CLK : IN STD_LOGIC; -- SerDes reference clock back + BCK_REF_CLK : IN STD_LOGIC; -- SerDes reference clock back + + -- SO-DIMM DDR4 Memory Bank i2c (common) + MB_SCL : inout std_logic; + MB_SDA : inout std_logic; + -- SO-DIMM DDR4 Memory Bank I + MB_I_RZQ : in STD_LOGIC; + MB_I_REF_CLK : in STD_LOGIC; -- External reference clock + MB_I_A : out std_logic_vector (13 downto 0); + MB_I_ACT_N : out std_logic_vector(0 downto 0); + MB_I_BA : out std_logic_vector (1 downto 0); + MB_I_BG : out std_logic_vector (1 downto 0); + MB_I_CAS_A15 : out std_logic; + MB_I_CB : inout std_logic_vector (7 downto 0); + MB_I_CK : out std_logic_vector (1 downto 0); + MB_I_CK_n : out std_logic_vector (1 downto 0); + MB_I_CKE : out std_logic_vector (1 downto 0); + MB_I_CS : out std_logic_vector (1 downto 0); + MB_I_DM : inout std_logic_vector (8 downto 0); + MB_I_DQ : inout std_logic_vector (63 downto 0); + MB_I_DQS : inout std_logic_vector (8 downto 0); + MB_I_DQS_n : inout std_logic_vector (8 downto 0); + MB_I_ODT : out std_logic_vector (1 downto 0); + MB_I_PARITY : out std_logic_vector(0 downto 0); + MB_I_RAS_A16 : out std_logic; + MB_I_WE_A14 : out std_logic; + MB_I_RESET_N : out std_logic_vector(0 downto 0); + MB_I_ALERT_N : in std_logic_vector(0 downto 0); + -- SO-DIMM DDR4 Memory Bank II + MB_II_RZQ : in STD_LOGIC; + MB_II_REF_CLK : in STD_LOGIC; -- External reference clock + MB_II_A : out std_logic_vector (13 downto 0); + MB_II_ACT_N : out std_logic_vector(0 downto 0); + MB_II_BA : out std_logic_vector (1 downto 0); + MB_II_BG : out std_logic_vector (1 downto 0); + MB_II_CAS_A15 : out std_logic; + MB_II_CB : inout std_logic_vector (7 downto 0); + MB_II_CK : out std_logic_vector (1 downto 0); + MB_II_CK_n : out std_logic_vector (1 downto 0); + MB_II_CKE : out std_logic_vector (1 downto 0); + MB_II_CS : out std_logic_vector (1 downto 0); + MB_II_DM : inout std_logic_vector (8 downto 0); + MB_II_DQ : inout std_logic_vector (63 downto 0); + MB_II_DQS : inout std_logic_vector (8 downto 0); + MB_II_DQS_n : inout std_logic_vector (8 downto 0); + MB_II_ODT : out std_logic_vector (1 downto 0); + MB_II_PARITY : out std_logic_vector(0 downto 0); + MB_II_RAS_A16 : out std_logic; + MB_II_WE_A14 : out std_logic; + MB_II_RESET_N : out std_logic_vector(0 downto 0); + MB_II_ALERT_N : in std_logic_vector(0 downto 0); + + -- back transceivers + BCK_SDA : inout std_logic_vector (2 downto 0); + BCK_SCL : inout std_logic_vector (2 downto 0); + BCK_ERR : inout std_logic_vector (2 downto 0); + -- pmbus + PMBUS_SC : inout std_logic; + PMBUS_SD : inout std_logic; + PMBUS_ALERT : in std_logic; + -- front transceivers + QSFP_0_RX : in std_logic_vector (0 downto 0); + QSFP_0_TX : out std_logic_vector (0 downto 0); + QSFP_SDA : inout std_logic_vector (5 downto 0); + QSFP_SCL : inout std_logic_vector (5 downto 0); + QSFP_RST : inout std_logic; + -- I2C Interface to Sensors + SENS_SC : inOUT STD_LOGIC; + SENS_SD : INOUT STD_LOGIC; + -- Others +-- CFG_DATA : inout std_logic_vector (3 downto 0); + VERSION : IN STD_LOGIC_VECTOR(1 DOWNTO 0); + ID : IN STD_LOGIC_VECTOR(7 DOWNTO 0); + TESTIO : INOUT STD_LOGIC_VECTOR(7 DOWNTO 0) + ); + +end unb2_singlemac; + + +architecture str of unb2_singlemac is + + + + component system_pll is + port ( + refclk : in std_logic := 'X'; -- clk + rst : in std_logic := 'X'; + locked : out std_logic; + outclk_0 : out std_logic; -- outclk0 + outclk_1 : out std_logic; -- outclk1 + outclk_2 : out std_logic -- outclk2 + ); + end component system_pll; + + component tech_transceiver_arria10_1 is + generic ( + g_nof_channels : natural := 1 + ); + port ( + clk : in std_logic; + reset_p : in std_logic; + refclk : in std_logic; + clk_156_arr : out std_logic_vector(0 DOWNTO 0); + clk_312_arr : out std_logic_vector(0 DOWNTO 0); + tx_serial_data : out std_logic_vector(0 downto 0); + rx_serial_data : in std_logic_vector(0 downto 0); + tx_parallel_data : in std_logic_vector(63 downto 0); + rx_parallel_data : out std_logic_vector(63 downto 0); + tx_control : in std_logic_vector(7 downto 0); + rx_control : out std_logic_vector(7 downto 0) + ); + end component; + + + component ip_arria10_mac_10g is + port ( + csr_read : in std_logic := 'X'; -- read + csr_write : in std_logic := 'X'; -- write + csr_writedata : in std_logic_vector(31 downto 0) := (others => 'X'); -- writedata + csr_readdata : out std_logic_vector(31 downto 0); -- readdata + csr_waitrequest : out std_logic; -- waitrequest + csr_address : in std_logic_vector(12 downto 0) := (others => 'X'); -- address + tx_312_5_clk : in std_logic := 'X'; -- clk + tx_156_25_clk : in std_logic := 'X'; -- clk + rx_312_5_clk : in std_logic := 'X'; -- clk + rx_156_25_clk : in std_logic := 'X'; -- clk + csr_clk : in std_logic := 'X'; -- clk + csr_rst_n : in std_logic := 'X'; -- reset_n + tx_rst_n : in std_logic := 'X'; -- reset_n + rx_rst_n : in std_logic := 'X'; -- reset_n + avalon_st_tx_startofpacket : in std_logic := 'X'; -- startofpacket + avalon_st_tx_endofpacket : in std_logic := 'X'; -- endofpacket + avalon_st_tx_valid : in std_logic := 'X'; -- valid + avalon_st_tx_data : in std_logic_vector(63 downto 0) := (others => 'X'); -- data + avalon_st_tx_empty : in std_logic_vector(2 downto 0) := (others => 'X'); -- empty + avalon_st_tx_error : in std_logic := 'X'; -- error + avalon_st_tx_ready : out std_logic; -- ready + avalon_st_pause_data : in std_logic_vector(1 downto 0) := (others => 'X'); -- data + xgmii_tx : out std_logic_vector(71 downto 0); -- data + avalon_st_txstatus_valid : out std_logic; -- valid + avalon_st_txstatus_data : out std_logic_vector(39 downto 0); -- data + avalon_st_txstatus_error : out std_logic_vector(6 downto 0); -- error + xgmii_rx : in std_logic_vector(71 downto 0) := (others => 'X'); -- data + link_fault_status_xgmii_rx_data : out std_logic_vector(1 downto 0); -- data + avalon_st_rx_data : out std_logic_vector(63 downto 0); -- data + avalon_st_rx_startofpacket : out std_logic; -- startofpacket + avalon_st_rx_valid : out std_logic; -- valid + avalon_st_rx_empty : out std_logic_vector(2 downto 0); -- empty + avalon_st_rx_error : out std_logic_vector(5 downto 0); -- error + avalon_st_rx_ready : in std_logic := 'X'; -- ready + avalon_st_rx_endofpacket : out std_logic; -- endofpacket + avalon_st_rxstatus_valid : out std_logic; -- valid + avalon_st_rxstatus_data : out std_logic_vector(39 downto 0); -- data + avalon_st_rxstatus_error : out std_logic_vector(6 downto 0) -- error + ); + end component ip_arria10_mac_10g; + + -- constants + constant cs_sim : std_logic := '0'; + constant cs_sync : std_logic := '1'; + --CONSTANT c_block_len : NATURAL := 180; -- = 1440 user bytes. Including packetizing: 1508 bytes. + CONSTANT c_block_len : NATURAL := 1118;-- = 8944 user bytes. Including packetizing: 9012 bytes. + + -- general reset and clock signals + signal reset_n : std_logic := '0'; + signal reset_p : std_logic := '0'; + signal pout_wdi : std_logic := '0'; + signal sys_clk : std_logic := '0'; + signal sys_locked : std_logic := '0'; + signal mm_clk : std_logic := '0'; + signal clk_125 : std_logic := '0'; + + + -- signals for the transceivers + signal tx_serial_data_front : std_logic_vector(0 downto 0); + signal rx_serial_data_front : std_logic_vector(0 downto 0); + signal xgmii_tx : std_logic_vector(71 downto 0); + signal xgmii_rx : std_logic_vector(71 downto 0); + signal clk_156 : std_logic_vector(0 downto 0); + signal clk_312 : std_logic_vector(0 downto 0); + + -- signals for the MAC + signal mac_10g_loopback_sop : std_logic; + signal mac_10g_loopback_eop : std_logic; + signal mac_10g_loopback_valid : std_logic; + signal mac_10g_loopback_ready : std_logic; + signal mac_10g_loopback_data : std_logic_vector(63 downto 0); + signal mac_10g_loopback_empty : std_logic_vector(2 downto 0); + signal mac_10g_loopback_err : std_logic_vector(5 downto 0); + + signal reg_mac_rd : std_logic; + signal reg_mac_wr : std_logic; + signal reg_mac_waitrequest : std_logic; + signal reg_mac_rddata : std_logic_vector(31 downto 0); + signal reg_mac_wrdata : std_logic_vector(31 downto 0); + signal reg_mac_address : std_logic_vector(12 downto 0); + + + -- signals for the bidirectional and misc ios + signal inta_in : std_logic; + signal intb_in : std_logic; + signal testio_in : std_logic_vector(7 downto 0); + signal bck_err_in : std_logic_vector(2 downto 0); + signal inta_out : std_logic; + signal intb_out : std_logic; + signal testio_out : std_logic_vector(7 downto 0); + signal bck_err_out : std_logic_vector(2 downto 0); + signal ver_id_pmbusalert : std_logic_vector(10 downto 0); + +begin + + WDI <= 'Z'; + +-- -- ****** Front side transceivers and MAC ****** +-- + QSFP_0_TX <= tx_serial_data_front; + rx_serial_data_front <= QSFP_0_RX; + + u_transceiver: tech_transceiver_arria10_1 + generic map ( + g_nof_channels => 1 + ) + port map( + clk => mm_clk, + reset_p => reset_p, + refclk => SA_CLK, + clk_156_arr => clk_156, + clk_312_arr => clk_312, + tx_serial_data => tx_serial_data_front, + rx_serial_data => rx_serial_data_front, + tx_parallel_data => xgmii_tx(63 downto 0), + rx_parallel_data => xgmii_rx(63 downto 0), + tx_control => xgmii_tx(71 downto 64), + rx_control => xgmii_rx(71 downto 64) + ); + + u0 : ip_arria10_mac_10g + port map ( + csr_read => reg_mac_rd, + csr_write => reg_mac_wr, + csr_writedata => reg_mac_wrdata(31 downto 0), + csr_readdata => reg_mac_rddata(31 downto 0), + csr_waitrequest => reg_mac_waitrequest, + csr_address => reg_mac_address(12 downto 0), + tx_312_5_clk => clk_312(0), + tx_156_25_clk => clk_156(0), + rx_312_5_clk => clk_312(0), + rx_156_25_clk => clk_156(0), + csr_clk => mm_clk, + csr_rst_n => reset_n, + tx_rst_n => reset_n, + rx_rst_n => reset_n, + avalon_st_tx_startofpacket => mac_10g_loopback_sop, + avalon_st_tx_endofpacket => mac_10g_loopback_eop, + avalon_st_tx_valid => mac_10g_loopback_valid, + avalon_st_tx_data => mac_10g_loopback_data, + avalon_st_tx_empty => mac_10g_loopback_empty, + avalon_st_tx_error => mac_10g_loopback_err(0), + avalon_st_tx_ready => mac_10g_loopback_ready, + avalon_st_pause_data => (others => '0'), + xgmii_tx => xgmii_tx, + avalon_st_txstatus_valid => open, + avalon_st_txstatus_data => open, + avalon_st_txstatus_error => open, + xgmii_rx => xgmii_rx, + link_fault_status_xgmii_rx_data => open, + avalon_st_rx_data => mac_10g_loopback_data, + avalon_st_rx_startofpacket => mac_10g_loopback_sop, + avalon_st_rx_valid => mac_10g_loopback_valid, + avalon_st_rx_empty => mac_10g_loopback_empty(2 downto 0), + avalon_st_rx_error => mac_10g_loopback_err(5 downto 0), + avalon_st_rx_ready => mac_10g_loopback_ready, + avalon_st_rx_endofpacket => mac_10g_loopback_eop, + avalon_st_rxstatus_valid => open, + avalon_st_rxstatus_data => open, + avalon_st_rxstatus_error => open + ); + + + -- ****** node control for resets and wdi + + u_node_ctrl : entity unb_common_lib.unb_node_ctrl + generic map ( + g_pulse_us => c_unb_tse_clk_freq / (10**6) -- nof system clock cycles to get us period, equal to system clock frequency / 10**6 + ) + port map ( + xo_clk => ETH_clk, + xo_rst_n => reset_n, + sys_clk => sys_clk, + sys_locked => sys_locked, + sys_rst => open, + st_clk => clk, + st_rst => open, + wdi_in => pout_wdi, + wdi_out => WDI, -- overrule default WDI = 'Z' and let SW toggle WDI via pout_wdi to enable the watchdog + pulse_us => open, + pulse_ms => open, + pulse_s => open -- could be used to toggle a LED + ); + + reset_p <= not reset_n; + + u_system_pll : system_pll + port map( + refclk => ETH_CLK, + rst => reset_p, + locked => sys_locked, + outclk_0 => mm_clk, -- 100MHz + outclk_1 => sys_clk, -- 300MHz + outclk_2 => clk_125 -- 125MHz for 1ge + ); + + +-- bidirectional and misc +-- use PPS as output enable + + INTA <= inta_out when PPS = '1' else 'Z'; + INTB <= intb_out when PPS = '1' else 'Z'; + TESTIO <= testio_out when PPS = '1' else "ZZZZZZZZ"; + BCK_ERR <= bck_err_out when PPS = '1' else "ZZZ"; + + inta_in <= INTA; + intb_in <= INTB; + testio_in <= TESTIO; + bck_err_in <= BCK_ERR; + + inta_out <= intb_in; + intb_out <= inta_in; + testio_out(7 downto 4) <= testio_in(3 downto 0); + testio_out(3 downto 0) <= testio_in(7 downto 4); + bck_err_out(2) <= bck_err_in(1); + bck_err_out(1) <= bck_err_in(0); + bck_err_out(0) <= bck_err_in(2); + + + ver_id_pmbusalert <= version & id & pmbus_alert; + +end str;