From dc1b242ceb8dd2514ebe3e27eda11955c06da021 Mon Sep 17 00:00:00 2001
From: Daniel van der Schuur <schuur@astron.nl>
Date: Mon, 27 Feb 2017 12:35:39 +0000
Subject: [PATCH] -Added PPS delay generic.

---
 .../unb1_board/src/vhdl/ctrl_unb1_board.vhd   | 31 ++++++++++++++++---
 1 file changed, 26 insertions(+), 5 deletions(-)

diff --git a/boards/uniboard1/libraries/unb1_board/src/vhdl/ctrl_unb1_board.vhd b/boards/uniboard1/libraries/unb1_board/src/vhdl/ctrl_unb1_board.vhd
index 6f4d86c907..ebaf63731a 100644
--- a/boards/uniboard1/libraries/unb1_board/src/vhdl/ctrl_unb1_board.vhd
+++ b/boards/uniboard1/libraries/unb1_board/src/vhdl/ctrl_unb1_board.vhd
@@ -55,7 +55,8 @@ ENTITY ctrl_unb1_board IS
     g_design_note     : STRING  := "UNUSED";
     g_mm_clk_freq     : NATURAL := c_unb1_board_mm_clk_freq_125M;  -- default use same MM clock as for TSE clock
     g_xo_clk_use_pll  : BOOLEAN := FALSE;
-    
+    g_dp_clk_use_xo_pll : BOOLEAN := FALSE; -- Use the 200MHz XO PLL output (no external CLK)
+
     ----------------------------------------------------------------------------
     -- External CLK
     ----------------------------------------------------------------------------
@@ -98,7 +99,16 @@ ENTITY ctrl_unb1_board IS
     g_dp_clk_phase         : STRING := "0";      -- phase offset for PLL c0, typically any phase is fine, do not use 225 +-30 degrees because there the PPS edge occurs
     g_dp_phs_clk_vec_w     : NATURAL := 0;       -- >= 0 and <= 6, nof extra PLL output clocks dp_phs_clk_vec[5:0] = [c6, c5, c4, c3, c2, c1]
     g_dp_phs_clk_divide_by : NATURAL := 32;      -- divided by factor for dp_phs_clk_vec[5:0]
-    
+
+    ----------------------------------------------------------------------------
+    -- PPS delay
+    -- . Maximum number of dp_clk cycles that pps can be delayed. Actual number
+    --   is determined dynamically by MM register.
+    --   . 0  : Don't instantiate delay component. Does not add extra MM register.
+    --   . >0 : Instantiate delay component. Adds an extra MM register.
+    ----------------------------------------------------------------------------
+    g_pps_delay_max      : NATURAL := 0;
+
     ----------------------------------------------------------------------------
     -- Use PHY Interface
     ----------------------------------------------------------------------------
@@ -119,7 +129,7 @@ ENTITY ctrl_unb1_board IS
     ----------------------------------------------------------------------------
     g_udp_offload             : BOOLEAN := FALSE;
     g_udp_offload_nof_streams : NATURAL := c_eth_nof_udp_ports;
-    
+  
     ----------------------------------------------------------------------------
     -- Auxiliary Interface
     ----------------------------------------------------------------------------
@@ -276,6 +286,7 @@ ARCHITECTURE str OF ctrl_unb1_board IS
   SIGNAL i_xo_rst_n             : STD_LOGIC;
   SIGNAL i_mm_rst               : STD_LOGIC;
 
+  SIGNAL clk200M                : STD_LOGIC := '1';
   SIGNAL clk125M                : STD_LOGIC := '1';
   SIGNAL clk40M                 : STD_LOGIC := '1';
   SIGNAL clk50M                 : STD_LOGIC := '1';
@@ -376,7 +387,7 @@ BEGIN
     );
   END GENERATE;
 
-  no_pll: IF g_dp_clk_use_pll = FALSE GENERATE
+  no_pll: IF g_dp_clk_use_pll = FALSE AND g_dp_clk_use_xo_pll=FALSE GENERATE
     dp_clk              <= ext_clk;
 
     dp_rst              <= node_ctrl_dp_rst_out;
@@ -391,6 +402,14 @@ BEGIN
                   clk50M  WHEN g_mm_clk_freq = c_unb1_board_mm_clk_freq_50M  ELSE
                   clk50M;
 
+    gen_dp_clk : IF g_dp_clk_use_xo_pll = TRUE AND g_dp_clk_use_pll=FALSE GENERATE
+      dp_clk <= clk200M;
+
+      dp_rst              <= node_ctrl_dp_rst_out;
+      node_ctrl_dp_clk_in <= dp_clk_in;
+
+    END GENERATE;
+
     u_unb1_board_clk25_pll : ENTITY work.unb1_board_clk25_pll
     GENERIC MAP (
       g_technology => g_technology
@@ -402,6 +421,7 @@ BEGIN
       c1_clk40   => clk40M,
       c2_clk50   => clk50M,
       c3_clk125  => clk125M,
+      c4_clk200  => clk200M,
       pll_locked => mm_locked_out
     );
   END GENERATE;
@@ -578,7 +598,8 @@ BEGIN
   
   u_mms_ppsh : ENTITY ppsh_lib.mms_ppsh
   GENERIC MAP (
-    g_st_clk_freq     => g_dp_clk_freq
+    g_st_clk_freq     => g_dp_clk_freq,
+    g_pps_delay_max   => g_pps_delay_max
   )
   PORT MAP (
     -- Clocks and reset
-- 
GitLab