diff --git a/boards/uniboard2/libraries/unb2_board/src/vhdl/ctrl_unb2_board.vhd b/boards/uniboard2/libraries/unb2_board/src/vhdl/ctrl_unb2_board.vhd index 2c1c88c6447b0b1b01516ffec8e4f0e0c57544bf..c38ea595e3e6775f694d6eff6d135540cbc93661 100644 --- a/boards/uniboard2/libraries/unb2_board/src/vhdl/ctrl_unb2_board.vhd +++ b/boards/uniboard2/libraries/unb2_board/src/vhdl/ctrl_unb2_board.vhd @@ -49,7 +49,8 @@ ENTITY ctrl_unb2_board IS g_stamp_time : NATURAL := 0; g_stamp_svn : NATURAL := 0; g_design_note : STRING := "UNUSED"; - g_mm_clk_freq : NATURAL := c_unb2_board_mm_clk_freq_125M; -- default use same MM clock as for TSE clock + g_mm_clk_freq : NATURAL := c_unb2_board_mm_clk_freq_125M; + g_eth_clk_freq : NATURAL := c_unb2_board_eth_clk_freq_125M; ---------------------------------------------------------------------------- -- External CLK @@ -115,12 +116,11 @@ ENTITY ctrl_unb2_board IS -- -- System cs_sim : OUT STD_LOGIC; - xo_clk25 : OUT STD_LOGIC; -- 25 MHz ETH_clk - xo_rst25 : OUT STD_LOGIC; - xo_rst25_n : OUT STD_LOGIC; + xo_ethclk : OUT STD_LOGIC; -- 25 MHz ETH_clk + xo_rst : OUT STD_LOGIC; + xo_rst_n : OUT STD_LOGIC; - mm_clk : OUT STD_LOGIC; -- 50 MHz from xo_clk25 PLL in QSYS system - mm_locked : OUT STD_LOGIC; + mm_clk : OUT STD_LOGIC; -- 50 MHz from xo_ethclk PLL mm_rst : OUT STD_LOGIC; dp_rst : OUT STD_LOGIC; @@ -149,9 +149,6 @@ ENTITY ctrl_unb2_board IS reg_remu_mosi : IN t_mem_mosi := c_mem_mosi_rst; reg_remu_miso : OUT t_mem_miso; - -- EPCS - epcs_clk : OUT STD_LOGIC; - -- EPCS read reg_dpmm_data_mosi : IN t_mem_mosi := c_mem_mosi_rst; reg_dpmm_data_miso : OUT t_mem_miso; @@ -228,9 +225,9 @@ END ctrl_unb2_board; ARCHITECTURE str OF ctrl_unb2_board IS -- Clock and reset - SIGNAL i_xo_clk25 : STD_LOGIC; - SIGNAL i_xo_rst25 : STD_LOGIC; - SIGNAL i_xo_rst25_n : STD_LOGIC; + SIGNAL i_xo_ethclk : STD_LOGIC; + SIGNAL i_xo_rst : STD_LOGIC; + SIGNAL i_xo_rst_n : STD_LOGIC; SIGNAL i_mm_rst : STD_LOGIC; SIGNAL i_mm_clk : STD_LOGIC; SIGNAL i_mm_locked : STD_LOGIC; @@ -272,19 +269,17 @@ ARCHITECTURE str OF ctrl_unb2_board IS BEGIN - xo_clk25 <= i_xo_clk25; - xo_rst25 <= i_xo_rst25; - xo_rst25_n <= i_xo_rst25_n; - mm_clk <= i_mm_clk; - mm_rst <= i_mm_rst; - mm_locked <= i_mm_locked; - epcs_clk <= i_epcs_clk; + xo_ethclk <= i_xo_ethclk; + xo_rst <= i_xo_rst; + xo_rst_n <= i_xo_rst_n; + mm_clk <= i_mm_clk; + mm_rst <= i_mm_rst; ----------------------------------------------------------------------------- -- Node set up ----------------------------------------------------------------------------- - i_xo_rst25 <= NOT i_xo_rst25_n; + i_xo_rst <= NOT i_xo_rst_n; -- Default leave unused INOUT tri-state INTA <= 'Z'; @@ -293,9 +288,9 @@ BEGIN TESTIO <= (OTHERS=>'Z'); -- Leave unused INOUT tri-state -- Clock and reset - i_xo_clk25 <= ETH_clk; -- use the 25 MHz from the ETH_clk pin as xo_clk - ext_clk200 <= CLK; -- use the external 200 MHz CLK as ext_clk - ext_pps <= PPS; -- use more special name for PPS pin signal to ease searching for it in editor + i_xo_ethclk <= ETH_clk; -- use the ETH_clk pin as xo_clk + ext_clk200 <= CLK; -- use the external 200 MHz CLK as ext_clk + ext_pps <= PPS; -- use more special name for PPS pin signal to ease searching for it in editor dp_dis <= i_mm_rst; -- could use software control for this instead @@ -319,19 +314,38 @@ BEGIN END GENERATE; - u_unb2_board_clk25_pll : ENTITY work.unb2_board_clk25_pll - GENERIC MAP ( - g_technology => g_technology - ) - PORT MAP ( - arst => i_xo_rst25, - clk25 => i_xo_clk25, - c0_clk20 => i_epcs_clk, - c1_clk50 => i_mm_clk, - c2_clk100 => OPEN, - c3_clk125 => i_tse_clk, - pll_locked => i_mm_locked - ); + gen_eth_clk_25: IF g_eth_clk_freq = c_unb2_board_eth_clk_freq_25M GENERATE + u_unb2_board_clk25_pll : ENTITY work.unb2_board_clk25_pll + GENERIC MAP ( + g_technology => g_technology + ) + PORT MAP ( + arst => i_xo_rst, + clk25 => i_xo_ethclk, + c0_clk20 => i_epcs_clk, + c1_clk50 => i_mm_clk, + c2_clk100 => OPEN, + c3_clk125 => i_tse_clk, + pll_locked => i_mm_locked + ); + END GENERATE; + + gen_eth_clk_125: IF g_eth_clk_freq = c_unb2_board_eth_clk_freq_125M GENERATE + u_unb2_board_clk125_pll : ENTITY work.unb2_board_clk125_pll + GENERIC MAP ( + g_technology => g_technology + ) + PORT MAP ( + arst => i_xo_rst, + clk125 => i_xo_ethclk, + c0_clk20 => i_epcs_clk, + c1_clk50 => i_mm_clk, + c2_clk100 => OPEN, + c3_clk125 => OPEN, + pll_locked => i_mm_locked + ); + i_tse_clk <= i_xo_ethclk; + END GENERATE; u_unb2_board_node_ctrl : ENTITY work.unb2_board_node_ctrl @@ -339,8 +353,8 @@ BEGIN g_pulse_us => g_mm_clk_freq / (10**6) -- nof system clock cycles to get us period, equal to system clock frequency / 10**6 ) PORT MAP ( - xo_clk => i_xo_clk25, - xo_rst_n => i_xo_rst25_n, + xo_clk => i_xo_ethclk, + xo_rst_n => i_xo_rst_n, sys_clk => i_mm_clk, sys_locked => i_mm_locked, sys_rst => i_mm_rst, @@ -604,7 +618,7 @@ BEGIN -- Clocks and reset mm_rst => i_mm_rst, mm_clk => i_mm_clk, -- use mm_clk direct - eth_clk => i_tse_clk, -- use the dedicated 125 MHz tse_clock, independent of the mm_clk + eth_clk => i_tse_clk, -- 125 MHz clock st_rst => eth1g_st_rst, st_clk => eth1g_st_clk, diff --git a/boards/uniboard2/libraries/unb2_board/src/vhdl/unb2_board_clk125_pll.vhd b/boards/uniboard2/libraries/unb2_board/src/vhdl/unb2_board_clk125_pll.vhd new file mode 100644 index 0000000000000000000000000000000000000000..52ad1fa2196ca6637b431963b6a0007c8ad2f651 --- /dev/null +++ b/boards/uniboard2/libraries/unb2_board/src/vhdl/unb2_board_clk125_pll.vhd @@ -0,0 +1,69 @@ +------------------------------------------------------------------------------- +-- +-- Copyright (C) 2014 +-- 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, common_lib, technology_lib, tech_pll_lib; +USE IEEE.STD_LOGIC_1164.ALL; +USE common_lib.common_pkg.ALL; +USE technology_lib.technology_pkg.ALL; + +-- Purpose: PLL for UniBoard node CLK input @ 125 MHz +-- Description: +-- c0 = 20 MHz +-- c1 = 50 MHz +-- c2 = 100 MHz +-- c3 = 125 MHz +-- + +ENTITY unb2_board_clk125_pll IS + GENERIC ( + g_technology : NATURAL := c_tech_arria10 + ); + PORT ( + arst : IN STD_LOGIC := '0'; + clk125 : IN STD_LOGIC := '0'; -- connect to UniBoard ETH_clk pin (125 MHz) + + c0_clk20 : OUT STD_LOGIC; -- PLL c0 + c1_clk50 : OUT STD_LOGIC; -- PLL c1 + c2_clk100 : OUT STD_LOGIC; -- PLL c2 + c3_clk125 : OUT STD_LOGIC; -- PLL c3 + pll_locked : OUT STD_LOGIC + ); +END unb2_board_clk125_pll; + + +ARCHITECTURE arria10 OF unb2_board_clk125_pll IS +BEGIN + + u_pll : ENTITY tech_pll_lib.tech_pll_clk125 + GENERIC MAP ( + g_technology => g_technology + ) + PORT MAP ( + areset => arst, + inclk0 => clk125, + c0 => c0_clk20, + c1 => c1_clk50, + c2 => c2_clk100, + c3 => c3_clk125, + locked => pll_locked + ); +END arria10; diff --git a/boards/uniboard2/libraries/unb2_board/src/vhdl/unb2_board_pkg.vhd b/boards/uniboard2/libraries/unb2_board/src/vhdl/unb2_board_pkg.vhd index ef1ec11fd955b209fe5cd0e86569f93c9c223a90..adc18e48bb357962c9a12fa684b164c7f6c7842a 100644 --- a/boards/uniboard2/libraries/unb2_board/src/vhdl/unb2_board_pkg.vhd +++ b/boards/uniboard2/libraries/unb2_board/src/vhdl/unb2_board_pkg.vhd @@ -41,12 +41,13 @@ PACKAGE unb2_board_pkg IS -- Clock frequencies CONSTANT c_unb2_board_ext_clk_freq_200M : NATURAL := 200 * 10**6; -- external clock, SMA clock - CONSTANT c_unb2_board_eth_clk_freq : NATURAL := 25 * 10**6; -- fixed 25 MHz ETH XO clock used as reference clock for the PLL in QSYS - CONSTANT c_unb2_board_tse_clk_freq : NATURAL := 125 * 10**6; -- fixed 125 MHz TSE reference clock derived from ETH_clk by PLL in QSYS - CONSTANT c_unb2_board_cal_clk_freq : NATURAL := 40 * 10**6; -- fixed 40 MHz IO calibration clock derived from ETH_clk by PLL in QSYS - CONSTANT c_unb2_board_mm_clk_freq_50M : NATURAL := 50 * 10**6; -- QSYS memory mapped bus clock derived from ETH_clk by PLL in QSYS - CONSTANT c_unb2_board_mm_clk_freq_100M : NATURAL := 100 * 10**6; -- QSYS memory mapped bus clock derived from ETH_clk by PLL in QSYS - CONSTANT c_unb2_board_mm_clk_freq_125M : NATURAL := 125 * 10**6; -- QSYS memory mapped bus clock derived from ETH_clk by PLL in QSYS + CONSTANT c_unb2_board_eth_clk_freq_25M : NATURAL := 25 * 10**6; -- fixed 25 MHz ETH XO clock used as reference clock for the PLL + CONSTANT c_unb2_board_eth_clk_freq_125M : NATURAL := 125 * 10**6; -- fixed 125 MHz ETH XO clock used as direct clock for TSE + CONSTANT c_unb2_board_tse_clk_freq : NATURAL := 125 * 10**6; -- fixed 125 MHz TSE reference clock derived from ETH_clk by PLL + CONSTANT c_unb2_board_cal_clk_freq : NATURAL := 40 * 10**6; -- fixed 40 MHz IO calibration clock derived from ETH_clk by PLL + CONSTANT c_unb2_board_mm_clk_freq_50M : NATURAL := 50 * 10**6; -- clock derived from ETH_clk by PLL + CONSTANT c_unb2_board_mm_clk_freq_100M : NATURAL := 100 * 10**6; -- clock derived from ETH_clk by PLL + CONSTANT c_unb2_board_mm_clk_freq_125M : NATURAL := 125 * 10**6; -- clock derived from ETH_clk by PLL -- I2C CONSTANT c_unb2_board_reg_sens_adr_w : NATURAL := 3; -- must match ceil_log2(c_mm_nof_dat) in unb2_board_sens_reg.vhd