From dacfe8def2a3b3f4e9fff85eaa62f8918c88b2cf Mon Sep 17 00:00:00 2001 From: Jonathan Hargreaves <hargreaves@jive.eu> Date: Tue, 23 Jun 2020 12:05:42 +0200 Subject: [PATCH] Export jesd clock, reset and sysref signals from IP --- .../jesd204b/ip_arria10_e1sg_jesd204b.vhd | 33 +++++++++++++++++-- .../technology/jesd204b/tech_jesd204b.vhd | 13 ++++++-- .../jesd204b/tech_jesd204b_arria10_e1sg.vhd | 8 +++-- .../jesd204b/tech_jesd204b_arria10_e2sg.vhd | 8 +++-- .../jesd204b/tech_jesd204b_component_pkg.vhd | 8 +++-- 5 files changed, 58 insertions(+), 12 deletions(-) diff --git a/libraries/technology/ip_arria10_e1sg/jesd204b/ip_arria10_e1sg_jesd204b.vhd b/libraries/technology/ip_arria10_e1sg/jesd204b/ip_arria10_e1sg_jesd204b.vhd index 8f51551b8d..5d4ad88b14 100644 --- a/libraries/technology/ip_arria10_e1sg/jesd204b/ip_arria10_e1sg_jesd204b.vhd +++ b/libraries/technology/ip_arria10_e1sg/jesd204b/ip_arria10_e1sg_jesd204b.vhd @@ -50,7 +50,9 @@ ENTITY ip_arria10_e1sg_jesd204b IS -- Data to fabric rx_src_out_arr : OUT t_dp_sosi_arr(g_nof_channels-1 DOWNTO 0); -- Parallel data out to fabric - jesd204b_frame_clk : OUT STD_LOGIC := '0'; -- Regenerated data clock to fabric + rx_clk : OUT STD_LOGIC := '0'; -- Exported data clock (frame clock) to fabric + rx_rst : OUT STD_LOGIC := '0'; -- Exported reset on rx_clk domain + rx_sysref : OUT STD_LOGIC := '0'; -- Exported copy of sysref -- MM Control mm_clk : IN STD_LOGIC; @@ -109,6 +111,8 @@ ARCHITECTURE str OF ip_arria10_e1sg_jesd204b IS SIGNAL core_pll_locked_reg : STD_LOGIC; SIGNAL jesd204b_sysref_1 : STD_LOGIC; SIGNAL jesd204b_sysref_2 : STD_LOGIC; + SIGNAL jesd204b_sysref_frameclk_1 : STD_LOGIC; + SIGNAL jesd204b_sysref_frameclk_2 : STD_LOGIC; -- Data path SIGNAL jesd204b_rx_link_data_arr : STD_LOGIC_VECTOR(c_jesd204b_rx_data_w*g_nof_channels-1 DOWNTO 0); @@ -221,7 +225,8 @@ ARCHITECTURE str OF ip_arria10_e1sg_jesd204b IS BEGIN - jesd204b_frame_clk <= rxframe_clk; + rx_clk <= rxframe_clk; + rx_rst <= not core_pll_locked; -- The avs clock is driven by the rxlink_clk for simulation. This is a workaround for a bug -- in the Q18.0 IP where the jesd receiver fails to recognize the SYSREF pulse @@ -260,7 +265,7 @@ BEGIN csr_s => OPEN, dev_lane_aligned => dev_lane_aligned_arr(i), dev_sync_n => jesd204b_sync_n_arr(i), - jesd204_rx_avs_chipselect => '0', --jesd204b_mosi_arr(i).chipselect, + jesd204_rx_avs_chipselect => '1', --jesd204b_mosi_arr(i).chipselect, jesd204_rx_avs_address => jesd204b_mosi_arr(i).address(c_jesd204b_mm_addr_w-1 downto 0), jesd204_rx_avs_read => jesd204b_mosi_arr(i).rd, jesd204_rx_avs_readdata => jesd204b_miso_arr(i).rddata(31 downto 0), @@ -377,6 +382,28 @@ BEGIN END IF; END PROCESS; + ----------------------------------------------------------------------------- + -- Capture sysref on the frame clock for export + ----------------------------------------------------------------------------- + p_rx_sysref : PROCESS (rxframe_clk, core_pll_locked) + BEGIN + IF core_pll_locked = '0' THEN + jesd204b_sysref_frameclk_1 <= '0'; + jesd204b_sysref_frameclk_2 <= '0'; + rx_sysref <= '0'; + ELSE + IF rising_edge(rxframe_clk) THEN + jesd204b_sysref_frameclk_1 <= jesd204b_sysref; + jesd204b_sysref_frameclk_2 <= jesd204b_sysref_frameclk_1; + IF jesd204b_sysref_frameclk_1 = '1' and jesd204b_sysref_frameclk_2 = '0' THEN + rx_sysref <= '1'; + ELSE + rx_sysref <= '0'; + END IF; + END IF; + END IF; + END PROCESS; + -- IOPLL in source synchronous or normal mode. (Intel JESD204B-UG p66) u_ip_arria10_e1sg_jesd204b_rx_corepll : ip_arria10_e1sg_jesd204b_rx_core_pll diff --git a/libraries/technology/jesd204b/tech_jesd204b.vhd b/libraries/technology/jesd204b/tech_jesd204b.vhd index 23c308cfe0..bcb89a298a 100644 --- a/libraries/technology/jesd204b/tech_jesd204b.vhd +++ b/libraries/technology/jesd204b/tech_jesd204b.vhd @@ -58,6 +58,7 @@ ENTITY tech_jesd204b IS g_sim : BOOLEAN := FALSE; g_technology : NATURAL := c_tech_arria10_e1sg; g_nof_channels : NATURAL := 12; + g_nof_syncs : NATURAL := 12; g_direction : STRING := "RX_ONLY" -- "TX_RX", "TX_ONLY", "RX_ONLY" ); PORT ( @@ -68,7 +69,9 @@ ENTITY tech_jesd204b IS -- Data to fabric rx_src_out_arr : OUT t_dp_sosi_arr(g_nof_channels-1 DOWNTO 0); -- Parallel data out to fabric - jesd204b_frame_clk : OUT STD_LOGIC := '0'; -- Regenerated data clock to fabric + rx_clk : OUT STD_LOGIC := '0'; -- Exported data clock (frame clock) to fabric + rx_rst : OUT STD_LOGIC := '0'; -- Exported reset on rx_clk domain + rx_sysref : OUT STD_LOGIC := '0'; -- Exported copy of sysref -- MM Control mm_clk : IN STD_LOGIC; @@ -100,7 +103,9 @@ BEGIN jesd204b_sync_n_arr => jesd204b_sync_n_arr, rx_src_out_arr => rx_src_out_arr, - jesd204b_frame_clk => jesd204b_frame_clk, + rx_clk => rx_clk, + rx_rst => rx_rst, + rx_sysref => rx_sysref, -- MM mm_clk => mm_clk, @@ -128,7 +133,9 @@ BEGIN jesd204b_sync_n_arr => jesd204b_sync_n_arr, rx_src_out_arr => rx_src_out_arr, - jesd204b_frame_clk => jesd204b_frame_clk, + rx_clk => rx_clk, + rx_rst => rx_rst, + rx_sysref => rx_sysref, -- MM mm_clk => mm_clk, diff --git a/libraries/technology/jesd204b/tech_jesd204b_arria10_e1sg.vhd b/libraries/technology/jesd204b/tech_jesd204b_arria10_e1sg.vhd index c61ec365e8..dff76d852d 100644 --- a/libraries/technology/jesd204b/tech_jesd204b_arria10_e1sg.vhd +++ b/libraries/technology/jesd204b/tech_jesd204b_arria10_e1sg.vhd @@ -49,7 +49,9 @@ ENTITY tech_jesd204b_arria10_e1sg IS -- Data to fabric rx_src_out_arr : OUT t_dp_sosi_arr(g_nof_channels-1 DOWNTO 0); -- Parallel data out to fabric - jesd204b_frame_clk : OUT STD_LOGIC := '0'; -- Regenerated data clock to fabric + rx_clk : OUT STD_LOGIC := '0'; -- Exported data clock (frame clock) to fabric + rx_rst : OUT STD_LOGIC := '0'; -- Exported reset on rx_clk domain + rx_sysref : OUT STD_LOGIC := '0'; -- Exported copy of sysref -- MM Control mm_clk : IN STD_LOGIC; @@ -80,7 +82,9 @@ BEGIN jesd204b_sync_n_arr => jesd204b_sync_n_arr, rx_src_out_arr => rx_src_out_arr, - jesd204b_frame_clk => jesd204b_frame_clk, + rx_clk => rx_clk, + rx_rst => rx_rst, + rx_sysref => rx_sysref, -- MM mm_clk => mm_clk, diff --git a/libraries/technology/jesd204b/tech_jesd204b_arria10_e2sg.vhd b/libraries/technology/jesd204b/tech_jesd204b_arria10_e2sg.vhd index e92e465237..438689ed6d 100644 --- a/libraries/technology/jesd204b/tech_jesd204b_arria10_e2sg.vhd +++ b/libraries/technology/jesd204b/tech_jesd204b_arria10_e2sg.vhd @@ -49,7 +49,9 @@ ENTITY tech_jesd204b_arria10_e2sg IS -- Data to fabric rx_src_out_arr : OUT t_dp_sosi_arr(g_nof_channels-1 DOWNTO 0); -- Parallel data out to fabric - jesd204b_frame_clk : OUT STD_LOGIC := '0'; -- Regenerated data clock to fabric + rx_clk : OUT STD_LOGIC := '0'; -- Exported data clock (frame clock) to fabric + rx_rst : OUT STD_LOGIC := '0'; -- Exported reset on rx_clk domain + rx_sysref : OUT STD_LOGIC := '0'; -- Exported copy of sysref -- MM Control mm_clk : IN STD_LOGIC; @@ -80,7 +82,9 @@ BEGIN jesd204b_sync_n_arr => jesd204b_sync_n_arr, rx_src_out_arr => rx_src_out_arr, - jesd204b_frame_clk => jesd204b_frame_clk, + rx_clk => rx_clk, + rx_rst => rx_rst, + rx_sysref => rx_sysref, -- MM mm_clk => mm_clk, diff --git a/libraries/technology/jesd204b/tech_jesd204b_component_pkg.vhd b/libraries/technology/jesd204b/tech_jesd204b_component_pkg.vhd index eb6077a694..7576ecc81f 100644 --- a/libraries/technology/jesd204b/tech_jesd204b_component_pkg.vhd +++ b/libraries/technology/jesd204b/tech_jesd204b_component_pkg.vhd @@ -49,7 +49,9 @@ PACKAGE tech_jesd204b_component_pkg IS -- Data to fabric rx_src_out_arr : OUT t_dp_sosi_arr(g_nof_channels-1 DOWNTO 0); -- Parallel data out to fabric - jesd204b_frame_clk : OUT STD_LOGIC := '0'; -- Regenerated data clock to fabric + rx_clk : OUT STD_LOGIC := '0'; -- Exported data clock (frame clock) to fabric + rx_rst : OUT STD_LOGIC := '0'; -- Exported reset on rx_clk domain + rx_sysref : OUT STD_LOGIC := '0'; -- Exported copy of sysref -- MM Control mm_clk : IN STD_LOGIC; @@ -82,7 +84,9 @@ PACKAGE tech_jesd204b_component_pkg IS -- Data to fabric rx_src_out_arr : OUT t_dp_sosi_arr(g_nof_channels-1 DOWNTO 0); -- Parallel data out to fabric - jesd204b_frame_clk : OUT STD_LOGIC := '0'; -- Regenerated data clock to fabric + rx_clk : OUT STD_LOGIC := '0'; -- Exported data clock (frame clock) to fabric + rx_rst : OUT STD_LOGIC := '0'; -- Exported reset on rx_clk domain + rx_sysref : OUT STD_LOGIC := '0'; -- Exported copy of sysref -- MM Control mm_clk : IN STD_LOGIC; -- GitLab