diff --git a/libraries/technology/10gbase_r/hdllib.cfg b/libraries/technology/10gbase_r/hdllib.cfg index 0719e8404138c42d00ad7cc7ef89945d4140fc11..b3b2306413b6652255d06b9cfb92a12b78115698 100644 --- a/libraries/technology/10gbase_r/hdllib.cfg +++ b/libraries/technology/10gbase_r/hdllib.cfg @@ -1,6 +1,6 @@ hdl_lib_name = tech_10gbase_r hdl_library_clause_name = tech_10gbase_r_lib -hdl_lib_uses = technology ip_arria10_phy_10gbase_r ip_arria10_transceiver_pll_156_312 ip_arria10_transceiver_pll_10g ip_arria10_transceiver_reset_controller_1 common +hdl_lib_uses = technology tech_pll ip_arria10_phy_10gbase_r ip_arria10_transceiver_pll_10g ip_arria10_transceiver_reset_controller_1 common hdl_lib_technology = build_dir_sim = $HDL_BUILD_DIR diff --git a/libraries/technology/10gbase_r/tb_tech_10gbase_r.vhd b/libraries/technology/10gbase_r/tb_tech_10gbase_r.vhd index 06cd8bed09babc292e894495c3474772f35cfc50..04b4bfa1ef31b9ca09be2378d5ec748aee7497e5 100644 --- a/libraries/technology/10gbase_r/tb_tech_10gbase_r.vhd +++ b/libraries/technology/10gbase_r/tb_tech_10gbase_r.vhd @@ -27,14 +27,14 @@ -- > as 10 -- > run 100 us -LIBRARY IEEE, technology_lib, common_lib; +LIBRARY IEEE, technology_lib, tech_pll_lib, common_lib; USE IEEE.std_logic_1164.ALL; USE common_lib.common_pkg.ALL; USE common_lib.common_interface_layers_pkg.ALL; USE common_lib.tb_common_pkg.ALL; USE technology_lib.technology_pkg.ALL; USE technology_lib.technology_select_pkg.ALL; -USE work.tech_10gbase_r_component_pkg.ALL; +USE tech_pll_lib.tech_pll_component_pkg.ALL; ENTITY tb_tech_10gbase_r IS @@ -51,10 +51,9 @@ ARCHITECTURE tb OF tb_tech_10gbase_r IS CONSTANT c_sim : BOOLEAN:= TRUE; CONSTANT phy_loopback_delay : TIME := 1 ns; - SIGNAL tr_ref_clk : STD_LOGIC := '0'; - SIGNAL clk_312 : STD_LOGIC; -- 312.5 MHz - SIGNAL clk_156 : STD_LOGIC; -- 156.25 MHz - SIGNAL rst_156 : STD_LOGIC; -- reset for clk_156 clock domain + SIGNAL tr_ref_clk_644 : STD_LOGIC := '0'; + SIGNAL clk_156 : STD_LOGIC; + SIGNAL rst_156 : STD_LOGIC; -- XGMII interface SIGNAL xgmii_tx_dc_arr : t_xgmii_dc_arr(g_nof_channels-1 DOWNTO 0); @@ -66,7 +65,19 @@ ARCHITECTURE tb OF tb_tech_10gbase_r IS BEGIN - tr_ref_clk <= NOT tr_ref_clk AFTER tech_10gbase_r_ref_clk_period/2; + tr_ref_clk_644 <= NOT tr_ref_clk_644 AFTER tech_pll_clk_644_period/2; + + pll : ENTITY tech_pll_lib.tech_pll_xgmii_mac_clocks + GENERIC MAP ( + g_technology => g_technology + ) + PORT MAP ( + refclk_644 => tr_ref_clk_644, + clk_156 => clk_156, + clk_312 => OPEN, + rst_156 => rst_156, + rst_312 => OPEN + ); dut : ENTITY work.tech_10gbase_r GENERIC MAP ( @@ -75,11 +86,10 @@ BEGIN g_nof_channels => g_nof_channels ) PORT MAP ( - -- Transceiver PLL reference clock - tr_ref_clk => tr_ref_clk, -- 644.531250 MHz + -- Transceiver ATX PLL reference clock + tr_ref_clk_644 => tr_ref_clk_644, - -- Derived clocks - clk_312 => clk_312, + -- XGMII clocks clk_156 => clk_156, rst_156 => rst_156, diff --git a/libraries/technology/10gbase_r/tech_10gbase_r.vhd b/libraries/technology/10gbase_r/tech_10gbase_r.vhd index fc5bb64c2da910fe00a6b1110555ca56c1784b57..76d1f601a6827f9ab1bf24aa1a958ddc72f869b1 100644 --- a/libraries/technology/10gbase_r/tech_10gbase_r.vhd +++ b/libraries/technology/10gbase_r/tech_10gbase_r.vhd @@ -34,13 +34,12 @@ ENTITY tech_10gbase_r IS g_nof_channels : NATURAL := 1 ); PORT ( - -- Transceiver PLL reference clock - tr_ref_clk : IN STD_LOGIC; -- 644.531250 MHz + -- Transceiver ATX PLL reference clock + tr_ref_clk_644 : IN STD_LOGIC; -- 644.531250 MHz - -- Derived clocks - clk_312 : OUT STD_LOGIC; -- 312.5 MHz - clk_156 : OUT STD_LOGIC; -- 156.25 MHz - rst_156 : OUT STD_LOGIC; -- reset for clk_156_in clock domain + -- XGMII clocks + clk_156 : IN STD_LOGIC; -- 156.25 MHz + rst_156 : IN STD_LOGIC; -- XGMII interface xgmii_tx_dc_arr : IN t_xgmii_dc_arr(g_nof_channels-1 DOWNTO 0); -- 72 bit @@ -54,18 +53,14 @@ END tech_10gbase_r; ARCHITECTURE str OF tech_10gbase_r IS - - SIGNAL clk_156_out : STD_LOGIC; -- connect to clk_156_out to clk_156_in to avoid delta-cycle differences in simulation BEGIN - clk_156 <= clk_156_out; - gen_ip_arria10 : IF g_technology=c_tech_arria10 GENERATE u0 : ENTITY work.tech_10gbase_r_arria10 GENERIC MAP (g_sim, g_nof_channels) - PORT MAP (tr_ref_clk, - clk_312, clk_156_out, clk_156_out, rst_156, + PORT MAP (tr_ref_clk_644, + clk_156, rst_156, xgmii_tx_dc_arr, xgmii_rx_dc_arr, tx_serial_arr, rx_serial_arr); END GENERATE; diff --git a/libraries/technology/10gbase_r/tech_10gbase_r_arria10.vhd b/libraries/technology/10gbase_r/tech_10gbase_r_arria10.vhd index d9298514b5a59a44aa1cf0d250bd730811e6366f..babe8d791870b57c9bd619fb36c25ec3a918deeb 100644 --- a/libraries/technology/10gbase_r/tech_10gbase_r_arria10.vhd +++ b/libraries/technology/10gbase_r/tech_10gbase_r_arria10.vhd @@ -22,14 +22,14 @@ -- Declare IP libraries to ensure default binding in simulation. The IP library clause is ignored by synthesis. LIBRARY ip_arria10_phy_10gbase_r_lib; -LIBRARY ip_arria10_transceiver_pll_156_312_lib; LIBRARY ip_arria10_transceiver_pll_10g_lib; LIBRARY ip_arria10_transceiver_reset_controller_1_lib; -LIBRARY IEEE, common_lib; +LIBRARY IEEE, tech_pll_lib, common_lib; USE IEEE.STD_LOGIC_1164.ALL; USE common_lib.common_pkg.ALL; USE common_lib.common_interface_layers_pkg.ALL; +USE tech_pll_lib.tech_pll_component_pkg.ALL; USE work.tech_10gbase_r_component_pkg.ALL; ENTITY tech_10gbase_r_arria10 IS @@ -38,14 +38,12 @@ ENTITY tech_10gbase_r_arria10 IS g_nof_channels : NATURAL := 1 ); PORT ( - -- Transceiver PLL reference clock - tr_ref_clk : IN STD_LOGIC; -- 644.531250 MHz + -- Transceiver ATX PLL reference clock + tr_ref_clk_644 : IN STD_LOGIC; -- 644.531250 MHz - -- Derived clocks - clk_312_out : OUT STD_LOGIC; -- 312.5 MHz - clk_156_out : OUT STD_LOGIC; -- 156.25 MHz - clk_156_in : IN STD_LOGIC; -- externally connect to clk_156_out to avoid delta-cycle differences in simulation - rst_156 : OUT STD_LOGIC; -- reset for clk_156_in clock domain + -- XGMII clocks + clk_156 : IN STD_LOGIC; -- 156.25 MHz + rst_156 : IN STD_LOGIC; -- XGMII interface xgmii_tx_dc_arr : IN t_xgmii_dc_arr(g_nof_channels-1 DOWNTO 0); -- 72 bit @@ -62,8 +60,7 @@ ARCHITECTURE str OF tech_10gbase_r_arria10 IS SIGNAL tx_serial_clk : STD_LOGIC_VECTOR(0 DOWNTO 0); - SIGNAL tx_coreclkin : STD_LOGIC_VECTOR(0 DOWNTO 0); - SIGNAL rx_coreclkin : STD_LOGIC_VECTOR(0 DOWNTO 0); + SIGNAL tr_coreclkin : STD_LOGIC_VECTOR(0 DOWNTO 0); SIGNAL tx_parallel_data_arr : t_xgmii_d_arr(g_nof_channels-1 DOWNTO 0); -- 64 bit SIGNAL rx_parallel_data_arr : t_xgmii_d_arr(g_nof_channels-1 DOWNTO 0); -- 64 bit @@ -87,28 +84,21 @@ ARCHITECTURE str OF tech_10gbase_r_arria10 IS SIGNAL atx_pll_locked : STD_LOGIC; SIGNAL atx_pll_cal_busy : STD_LOGIC; - -- transceiver fractional PLL for 156.25 MHz and 312.5 MHz from tr_ref_clk = 644.53125 MHz - SIGNAL fpll_cal_busy : STD_LOGIC; - SIGNAL fpll_locked : STD_LOGIC; - SIGNAL fpll_locked_n : STD_LOGIC; - SIGNAL i_rst_156 : STD_LOGIC; - BEGIN -- Clocks - tx_coreclkin(0) <= clk_156_in; - rx_coreclkin(0) <= clk_156_in; + tr_coreclkin(0) <= clk_156; gen_phy : FOR I IN 0 TO g_nof_channels-1 GENERATE -- Reset controller cal_busy_arr(I) <= tx_cal_busy_arr(I) OR atx_pll_cal_busy; -- On hardware use atx_pll_locked for all channels, in simulation model some timing difference between the channels - on_hw : IF g_sim=FALSE GENERATE + gen_hw : IF g_sim=FALSE GENERATE atx_pll_locked_arr(I) <= atx_pll_locked; END GENERATE; - in_sim : IF g_sim=TRUE GENERATE - atx_pll_locked_arr(I) <= TRANSPORT atx_pll_locked AFTER tech_10gbase_r_clk_156_period*I; + gen_sim : IF g_sim=TRUE GENERATE + atx_pll_locked_arr(I) <= TRANSPORT atx_pll_locked AFTER tech_pll_clk_156_period*I; END GENERATE; -- XGMII @@ -127,15 +117,15 @@ BEGIN rx_cal_busy => rx_cal_busy_arr(I DOWNTO I), tx_serial_clk0 => tx_serial_clk, - rx_cdr_refclk0 => tr_ref_clk, + rx_cdr_refclk0 => tr_ref_clk_644, tx_serial_data => tx_serial_arr(I DOWNTO I), rx_serial_data => rx_serial_arr(I DOWNTO I), rx_is_lockedtoref => OPEN, rx_is_lockedtodata => rx_is_lockedtodata_arr(I DOWNTO I), - tx_coreclkin => tx_coreclkin, -- 156.25 MHz - rx_coreclkin => rx_coreclkin, -- 156.25 MHz + tx_coreclkin => tr_coreclkin, -- 156.25 MHz + rx_coreclkin => tr_coreclkin, -- 156.25 MHz tx_parallel_data => tx_parallel_data_arr(I), rx_parallel_data => rx_parallel_data_arr(I), @@ -165,8 +155,8 @@ BEGIN u_ip_arria10_transceiver_reset_controller_1_top : ip_arria10_transceiver_reset_controller_1_top PORT MAP ( - clock => clk_156_in, - reset => i_rst_156, + clock => clk_156, + reset => rst_156, pll_powerdown => atx_pll_powerdown(I DOWNTO I), tx_analogreset => tx_analogreset_arr(I DOWNTO I), tx_digitalreset => tx_digitalreset_arr(I DOWNTO I), @@ -186,36 +176,10 @@ BEGIN u_ip_arria10_transceiver_pll_10g_top : ip_arria10_transceiver_pll_10g_top PORT MAP ( pll_powerdown => atx_pll_powerdown(0), - pll_refclk0 => tr_ref_clk, + pll_refclk0 => tr_ref_clk_644, tx_serial_clk => tx_serial_clk(0), pll_locked => atx_pll_locked, pll_cal_busy => atx_pll_cal_busy ); - - -- fractional PLL - u_ip_arria10_transceiver_pll_156_312_top : ip_arria10_transceiver_pll_156_312_top - PORT MAP ( - pll_refclk0 => tr_ref_clk, - pll_powerdown => '0', - pll_locked => fpll_locked, - outclk0 => clk_156_out, - pll_cal_busy => fpll_cal_busy, - outclk1 => clk_312_out - ); - - fpll_locked_n <= NOT fpll_locked; - - u_common_areset : ENTITY common_lib.common_areset - GENERIC MAP ( - g_rst_level => '1', - g_delay_len => c_meta_delay_len - ) - PORT MAP ( - in_rst => fpll_locked_n, - clk => clk_156_in, - out_rst => i_rst_156 - ); - - rst_156 <= i_rst_156; - + END str; diff --git a/libraries/technology/10gbase_r/tech_10gbase_r_component_pkg.vhd b/libraries/technology/10gbase_r/tech_10gbase_r_component_pkg.vhd index c2d0125d337150c17912a0ed64946d9c6efd640b..c56ac341aaf6b56d09d91087256e2aae1448ce7d 100644 --- a/libraries/technology/10gbase_r/tech_10gbase_r_component_pkg.vhd +++ b/libraries/technology/10gbase_r/tech_10gbase_r_component_pkg.vhd @@ -27,10 +27,6 @@ USE technology_lib.technology_pkg.ALL; PACKAGE tech_10gbase_r_component_pkg IS - CONSTANT tech_10gbase_r_ref_clk_period : TIME := 1551520 fs; -- = 1.551520 ns ~= 644.53125 MHz - CONSTANT tech_10gbase_r_clk_156_period : TIME := (tech_10gbase_r_ref_clk_period*33)/8; -- = 6.400020 ns ~= 156.25 MHz - CONSTANT tech_10gbase_r_clk_312_period : TIME := (tech_10gbase_r_ref_clk_period*33)/16; -- = 3.200010 ns ~= 312.5 MHz - ------------------------------------------------------------------------------ -- ip_arria10 ------------------------------------------------------------------------------ @@ -79,18 +75,6 @@ PACKAGE tech_10gbase_r_component_pkg IS ); END COMPONENT; - -- Copied from entity $RADIOHDL/libraries/technology/ip_arria10/transceiver_pll_156_312/ip_arria10_transceiver_pll_156_312_top.vhd - COMPONENT ip_arria10_transceiver_pll_156_312_top IS - PORT ( - pll_refclk0 : in std_logic := '0'; -- pll_refclk0.clk - pll_powerdown : in std_logic := '0'; -- pll_powerdown.pll_powerdown - pll_locked : out std_logic; -- pll_locked.pll_locked - outclk0 : out std_logic; -- outclk0.clk - pll_cal_busy : out std_logic; -- pll_cal_busy.pll_cal_busy - outclk1 : out std_logic -- outclk1.clk - ); - END COMPONENT; - -- Copied from entity $RADIOHDL/libraries/technology/ip_arria10/transceiver_pll_10g/ip_arria10_transceiver_pll_10g_top.vhd COMPONENT ip_arria10_transceiver_pll_10g_top IS PORT (