From e05e39801c9d47b48ca8e2b3591e6acb1d417629 Mon Sep 17 00:00:00 2001 From: Leon Hiemstra <hiemstra@astron.nl> Date: Tue, 6 Oct 2015 07:17:22 +0000 Subject: [PATCH] added the 10G transceivers for 48 channels per ATXPLL --- libraries/technology/10gbase_r/hdllib.cfg | 1 + .../10gbase_r/tech_10gbase_r_arria10.vhd | 85 +++ .../tech_10gbase_r_component_pkg.vhd | 73 +++ .../phy_10gbase_r_48/compile_ip.tcl | 56 ++ .../phy_10gbase_r_48/generate_ip.sh | 44 ++ .../ip_arria10/phy_10gbase_r_48/hdllib.cfg | 16 + .../ip_arria10_phy_10gbase_r_48.qsys | 584 ++++++++++++++++++ .../compile_ip.tcl | 43 ++ .../generate_ip.sh | 44 ++ .../hdllib.cfg | 16 + ...ria10_transceiver_reset_controller_48.qsys | 178 ++++++ 11 files changed, 1140 insertions(+) create mode 100644 libraries/technology/ip_arria10/phy_10gbase_r_48/compile_ip.tcl create mode 100755 libraries/technology/ip_arria10/phy_10gbase_r_48/generate_ip.sh create mode 100644 libraries/technology/ip_arria10/phy_10gbase_r_48/hdllib.cfg create mode 100644 libraries/technology/ip_arria10/phy_10gbase_r_48/ip_arria10_phy_10gbase_r_48.qsys create mode 100644 libraries/technology/ip_arria10/transceiver_reset_controller_48/compile_ip.tcl create mode 100755 libraries/technology/ip_arria10/transceiver_reset_controller_48/generate_ip.sh create mode 100644 libraries/technology/ip_arria10/transceiver_reset_controller_48/hdllib.cfg create mode 100644 libraries/technology/ip_arria10/transceiver_reset_controller_48/ip_arria10_transceiver_reset_controller_48.qsys diff --git a/libraries/technology/10gbase_r/hdllib.cfg b/libraries/technology/10gbase_r/hdllib.cfg index 6d4a55865b..fccf3cf22c 100644 --- a/libraries/technology/10gbase_r/hdllib.cfg +++ b/libraries/technology/10gbase_r/hdllib.cfg @@ -11,6 +11,7 @@ hdl_lib_uses_synth = technology ip_arria10_transceiver_reset_controller_4 ip_arria10_transceiver_reset_controller_12 ip_arria10_transceiver_reset_controller_24 + ip_arria10_transceiver_reset_controller_48 tech_transceiver common hdl_lib_uses_sim = diff --git a/libraries/technology/10gbase_r/tech_10gbase_r_arria10.vhd b/libraries/technology/10gbase_r/tech_10gbase_r_arria10.vhd index b4dddbf550..d791318ecd 100644 --- a/libraries/technology/10gbase_r/tech_10gbase_r_arria10.vhd +++ b/libraries/technology/10gbase_r/tech_10gbase_r_arria10.vhd @@ -25,11 +25,13 @@ LIBRARY ip_arria10_phy_10gbase_r_altera_xcvr_native_a10_150; LIBRARY ip_arria10_phy_10gbase_r_4_altera_xcvr_native_a10_150; LIBRARY ip_arria10_phy_10gbase_r_12_altera_xcvr_native_a10_150; LIBRARY ip_arria10_phy_10gbase_r_24_altera_xcvr_native_a10_150; +LIBRARY ip_arria10_phy_10gbase_r_48_altera_xcvr_native_a10_150; LIBRARY ip_arria10_transceiver_pll_10g_altera_xcvr_atx_pll_a10_150; LIBRARY ip_arria10_transceiver_reset_controller_1_altera_xcvr_reset_control_150; LIBRARY ip_arria10_transceiver_reset_controller_4_altera_xcvr_reset_control_150; LIBRARY ip_arria10_transceiver_reset_controller_12_altera_xcvr_reset_control_150; LIBRARY ip_arria10_transceiver_reset_controller_24_altera_xcvr_reset_control_150; +LIBRARY ip_arria10_transceiver_reset_controller_48_altera_xcvr_reset_control_150; LIBRARY IEEE, tech_pll_lib, common_lib; USE IEEE.STD_LOGIC_1164.ALL; @@ -456,6 +458,89 @@ BEGIN END GENERATE; + + + gen_phy_48 : IF c_nof_channels_per_ip=48 GENERATE + tx_serial_clk_slv <= (OTHERS=>tx_serial_clk(0)); + tr_coreclkin_slv <= (OTHERS=>tr_coreclkin(0)); + + gen_channels : FOR I IN 0 TO g_nof_channels-1 GENERATE + tx_parallel_data_arr_slv((I+1)*c_xgmii_data_w-1 DOWNTO I*c_xgmii_data_w) <= tx_parallel_data_arr(I); + tx_control_arr_slv((I+1)*c_xgmii_nof_lanes-1 DOWNTO I*c_xgmii_nof_lanes) <= tx_control_arr(I); + + rx_parallel_data_arr(I) <= rx_parallel_data_arr_slv((I+1)*c_xgmii_data_w-1 DOWNTO I*c_xgmii_data_w); + rx_control_arr(I) <= rx_control_arr_slv((I+1)*c_xgmii_nof_lanes-1 DOWNTO I*c_xgmii_nof_lanes); + END GENERATE; + + u_ip_arria10_phy_10gbase_r_48 : ip_arria10_phy_10gbase_r_48 + PORT MAP ( + tx_analogreset => tx_analogreset_arr(IP_SIZE-1 DOWNTO 0), -- in std_logic_vector(11 downto 0) := (others => '0'); -- tx_analogreset.tx_analogreset + tx_digitalreset => tx_digitalreset_arr(IP_SIZE-1 DOWNTO 0), -- in std_logic_vector(11 downto 0) := (others => '0'); -- tx_digitalreset.tx_digitalreset + rx_analogreset => rx_analogreset_arr(IP_SIZE-1 DOWNTO 0), -- in std_logic_vector(11 downto 0) := (others => '0'); -- rx_analogreset.rx_analogreset + rx_digitalreset => rx_digitalreset_arr(IP_SIZE-1 DOWNTO 0), -- in std_logic_vector(11 downto 0) := (others => '0'); -- rx_digitalreset.rx_digitalreset + tx_cal_busy => tx_cal_busy_arr(IP_SIZE-1 DOWNTO 0), -- out std_logic_vector(11 downto 0); -- tx_cal_busy.tx_cal_busy + rx_cal_busy => rx_cal_busy_arr(IP_SIZE-1 DOWNTO 0), -- out std_logic_vector(11 downto 0); -- rx_cal_busy.rx_cal_busy + + tx_serial_clk0 => tx_serial_clk_slv(IP_SIZE-1 DOWNTO 0), -- in std_logic_vector(11 downto 0) := (others => '0'); -- tx_serial_clk0.clk + rx_cdr_refclk0 => tr_ref_clk_644, -- in std_logic := '0'; -- rx_cdr_refclk0.clk + tx_serial_data => tx_serial_arr(IP_SIZE-1 DOWNTO 0), -- out std_logic_vector(11 downto 0); -- tx_serial_data.tx_serial_data + rx_serial_data => rx_serial_arr(IP_SIZE-1 DOWNTO 0), -- in std_logic_vector(11 downto 0) := (others => '0'); -- rx_serial_data.rx_serial_data + + --rx_is_lockedtoref : out std_logic_vector(11 downto 0); -- rx_is_lockedtoref.rx_is_lockedtoref + rx_is_lockedtodata => rx_is_lockedtodata_arr(IP_SIZE-1 DOWNTO 0), -- out std_logic_vector(11 downto 0); -- rx_is_lockedtodata.rx_is_lockedtodata + + tx_coreclkin => tr_coreclkin_slv(IP_SIZE-1 DOWNTO 0), -- in std_logic_vector(11 downto 0) := (others => '0'); -- tx_coreclkin.clk + rx_coreclkin => tr_coreclkin_slv(IP_SIZE-1 DOWNTO 0), -- in std_logic_vector(11 downto 0) := (others => '0'); -- rx_coreclkin.clk + + tx_parallel_data => tx_parallel_data_arr_slv(IP_SIZE_DATA-1 DOWNTO 0), -- in std_logic_vector(1535 downto 0) := (others => '0'); -- tx_parallel_data.tx_parallel_data + rx_parallel_data => rx_parallel_data_arr_slv(IP_SIZE_DATA-1 DOWNTO 0), -- out std_logic_vector(1535 downto 0); -- rx_parallel_data.rx_parallel_data + tx_control => tx_control_arr_slv(IP_SIZE_CONTROL-1 DOWNTO 0), -- in std_logic_vector(191 downto 0) := (others => '0'); -- tx_control.tx_control + rx_control => rx_control_arr_slv(IP_SIZE_CONTROL-1 DOWNTO 0) -- out std_logic_vector(191 downto 0); -- rx_control.rx_control + + --tx_clkout : out std_logic_vector(11 downto 0); -- tx_clkout.clk + --rx_clkout : out std_logic_vector(11 downto 0); -- rx_clkout.clk + + --tx_err_ins : in std_logic_vector(11 downto 0) := (others => '0'); -- tx_err_ins.tx_err_ins + --tx_enh_data_valid : in std_logic_vector(11 downto 0) := (others => '0'); -- tx_enh_data_valid.tx_enh_data_valid + --tx_enh_fifo_empty : out std_logic_vector(11 downto 0); -- tx_enh_fifo_empty.tx_enh_fifo_empty + --tx_enh_fifo_full : out std_logic_vector(11 downto 0); -- tx_enh_fifo_full.tx_enh_fifo_full + --tx_enh_fifo_pempty : out std_logic_vector(11 downto 0); -- tx_enh_fifo_pempty.tx_enh_fifo_pempty + --tx_enh_fifo_pfull : out std_logic_vector(11 downto 0); -- tx_enh_fifo_pfull.tx_enh_fifo_pfull + --tx_pma_div_clkout : out std_logic_vector(11 downto 0); -- tx_pma_div_clkout.clk + + --rx_enh_blk_lock : out std_logic_vector(11 downto 0); -- rx_enh_blk_lock.rx_enh_blk_lock + --rx_enh_data_valid : out std_logic_vector(11 downto 0); -- rx_enh_data_valid.rx_enh_data_valid + --rx_enh_fifo_del : out std_logic_vector(11 downto 0); -- rx_enh_fifo_del.rx_enh_fifo_del + --rx_enh_fifo_empty : out std_logic_vector(11 downto 0); -- rx_enh_fifo_empty.rx_enh_fifo_empty + --rx_enh_fifo_full : out std_logic_vector(11 downto 0); -- rx_enh_fifo_full.rx_enh_fifo_full + --rx_enh_fifo_insert : out std_logic_vector(11 downto 0); -- rx_enh_fifo_insert.rx_enh_fifo_insert + --rx_enh_highber : out std_logic_vector(11 downto 0); -- rx_enh_highber.rx_enh_highber + + --unused_rx_control : out std_logic_vector(287 downto 0); -- unused_rx_control.unused_rx_control + --unused_rx_parallel_data : out std_logic_vector(1535 downto 0); -- unused_rx_parallel_data.unused_rx_parallel_data + --unused_tx_control : in std_logic_vector(215 downto 0) := (others => '0'); -- unused_tx_control.unused_tx_control + --unused_tx_parallel_data : in std_logic_vector(1535 downto 0) := (others => '0') -- unused_tx_parallel_data.unused_tx_parallel_data + ); + + u_ip_arria10_transceiver_reset_controller_48 : ip_arria10_transceiver_reset_controller_48 + PORT MAP ( + clock => clk_156, -- : in std_logic := '0'; -- clock.clk + pll_locked => atx_pll_locked_arr(0 DOWNTO 0), -- : in std_logic_vector(0 downto 0) := (others => '0'); -- pll_locked.pll_locked + pll_powerdown => atx_pll_powerdown_arr(0 DOWNTO 0), -- : out std_logic_vector(0 downto 0); -- pll_powerdown.pll_powerdown + pll_select => "0", -- : in std_logic_vector(0 downto 0) := (others => '0'); -- pll_select.pll_select + reset => rst_156, -- : in std_logic := '0'; -- reset.reset + rx_analogreset => rx_analogreset_arr(IP_SIZE-1 DOWNTO 0), -- : out std_logic_vector(11 downto 0); -- rx_analogreset.rx_analogreset + rx_cal_busy => rx_cal_busy_arr(IP_SIZE-1 DOWNTO 0), -- : in std_logic_vector(11 downto 0) := (others => '0'); -- rx_cal_busy.rx_cal_busy + rx_digitalreset => rx_digitalreset_arr(IP_SIZE-1 DOWNTO 0), -- : out std_logic_vector(11 downto 0); -- rx_digitalreset.rx_digitalreset + rx_is_lockedtodata => rx_is_lockedtodata_arr(IP_SIZE-1 DOWNTO 0), -- : in std_logic_vector(11 downto 0) := (others => '0'); -- rx_is_lockedtodata.rx_is_lockedtodata + rx_ready => xgmii_rx_ready_arr(IP_SIZE-1 DOWNTO 0), -- : out std_logic_vector(11 downto 0); -- rx_ready.rx_ready + tx_analogreset => tx_analogreset_arr(IP_SIZE-1 DOWNTO 0), -- : out std_logic_vector(11 downto 0); -- tx_analogreset.tx_analogreset + tx_cal_busy => cal_busy_arr(IP_SIZE-1 DOWNTO 0), -- : in std_logic_vector(11 downto 0) := (others => '0'); -- tx_cal_busy.tx_cal_busy + tx_digitalreset => tx_digitalreset_arr(IP_SIZE-1 DOWNTO 0), -- : out std_logic_vector(11 downto 0); -- tx_digitalreset.tx_digitalreset + tx_ready => xgmii_tx_ready_arr(IP_SIZE-1 DOWNTO 0) -- : out std_logic_vector(11 downto 0) -- tx_ready.tx_ready + ); + END GENERATE; + -- ATX PLL u_ip_arria10_transceiver_pll_10g : ip_arria10_transceiver_pll_10g 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 3c2d873a06..409468f6f8 100644 --- a/libraries/technology/10gbase_r/tech_10gbase_r_component_pkg.vhd +++ b/libraries/technology/10gbase_r/tech_10gbase_r_component_pkg.vhd @@ -235,6 +235,60 @@ PACKAGE tech_10gbase_r_component_pkg IS ); END COMPONENT; + COMPONENT ip_arria10_phy_10gbase_r_48 + PORT ( + reconfig_write : in std_logic_vector(0 downto 0) := (others => '0'); -- reconfig_avmm.write + reconfig_read : in std_logic_vector(0 downto 0) := (others => '0'); -- .read + reconfig_address : in std_logic_vector(15 downto 0) := (others => '0'); -- .address + reconfig_writedata : in std_logic_vector(31 downto 0) := (others => '0'); -- .writedata + reconfig_readdata : out std_logic_vector(31 downto 0); -- .readdata + reconfig_waitrequest : out std_logic_vector(0 downto 0); -- .waitrequest + reconfig_clk : in std_logic_vector(0 downto 0) := (others => '0'); -- reconfig_clk.clk + reconfig_reset : in std_logic_vector(0 downto 0) := (others => '0'); -- reconfig_reset.reset + rx_analogreset : in std_logic_vector(47 downto 0) := (others => '0'); -- rx_analogreset.rx_analogreset + rx_cal_busy : out std_logic_vector(47 downto 0); -- rx_cal_busy.rx_cal_busy + rx_cdr_refclk0 : in std_logic := '0'; -- rx_cdr_refclk0.clk + rx_clkout : out std_logic_vector(47 downto 0); -- rx_clkout.clk + rx_control : out std_logic_vector(383 downto 0); -- rx_control.rx_control + rx_coreclkin : in std_logic_vector(47 downto 0) := (others => '0'); -- rx_coreclkin.clk + rx_digitalreset : in std_logic_vector(47 downto 0) := (others => '0'); -- rx_digitalreset.rx_digitalreset + rx_enh_blk_lock : out std_logic_vector(47 downto 0); -- rx_enh_blk_lock.rx_enh_blk_lock + rx_enh_data_valid : out std_logic_vector(47 downto 0); -- rx_enh_data_valid.rx_enh_data_valid + rx_enh_fifo_del : out std_logic_vector(47 downto 0); -- rx_enh_fifo_del.rx_enh_fifo_del + rx_enh_fifo_empty : out std_logic_vector(47 downto 0); -- rx_enh_fifo_empty.rx_enh_fifo_empty + rx_enh_fifo_full : out std_logic_vector(47 downto 0); -- rx_enh_fifo_full.rx_enh_fifo_full + rx_enh_fifo_insert : out std_logic_vector(47 downto 0); -- rx_enh_fifo_insert.rx_enh_fifo_insert + rx_enh_highber : out std_logic_vector(47 downto 0); -- rx_enh_highber.rx_enh_highber + rx_is_lockedtodata : out std_logic_vector(47 downto 0); -- rx_is_lockedtodata.rx_is_lockedtodata + rx_is_lockedtoref : out std_logic_vector(47 downto 0); -- rx_is_lockedtoref.rx_is_lockedtoref + rx_parallel_data : out std_logic_vector(3071 downto 0); -- rx_parallel_data.rx_parallel_data + rx_prbs_done : out std_logic_vector(47 downto 0); -- rx_prbs_done.rx_prbs_done + rx_prbs_err : out std_logic_vector(47 downto 0); -- rx_prbs_err.rx_prbs_err + rx_prbs_err_clr : in std_logic_vector(47 downto 0) := (others => '0'); -- rx_prbs_err_clr.rx_prbs_err_clr + rx_serial_data : in std_logic_vector(47 downto 0) := (others => '0'); -- rx_serial_data.rx_serial_data + rx_seriallpbken : in std_logic_vector(47 downto 0) := (others => '0'); -- rx_seriallpbken.rx_seriallpbken + tx_analogreset : in std_logic_vector(47 downto 0) := (others => '0'); -- tx_analogreset.tx_analogreset + tx_cal_busy : out std_logic_vector(47 downto 0); -- tx_cal_busy.tx_cal_busy + tx_clkout : out std_logic_vector(47 downto 0); -- tx_clkout.clk + tx_control : in std_logic_vector(383 downto 0) := (others => '0'); -- tx_control.tx_control + tx_coreclkin : in std_logic_vector(47 downto 0) := (others => '0'); -- tx_coreclkin.clk + tx_digitalreset : in std_logic_vector(47 downto 0) := (others => '0'); -- tx_digitalreset.tx_digitalreset + tx_enh_data_valid : in std_logic_vector(47 downto 0) := (others => '0'); -- tx_enh_data_valid.tx_enh_data_valid + tx_enh_fifo_empty : out std_logic_vector(47 downto 0); -- tx_enh_fifo_empty.tx_enh_fifo_empty + tx_enh_fifo_full : out std_logic_vector(47 downto 0); -- tx_enh_fifo_full.tx_enh_fifo_full + tx_enh_fifo_pempty : out std_logic_vector(47 downto 0); -- tx_enh_fifo_pempty.tx_enh_fifo_pempty + tx_enh_fifo_pfull : out std_logic_vector(47 downto 0); -- tx_enh_fifo_pfull.tx_enh_fifo_pfull + tx_err_ins : in std_logic_vector(47 downto 0) := (others => '0'); -- tx_err_ins.tx_err_ins + tx_parallel_data : in std_logic_vector(3071 downto 0) := (others => '0'); -- tx_parallel_data.tx_parallel_data + tx_serial_clk0 : in std_logic_vector(47 downto 0) := (others => '0'); -- tx_serial_clk0.clk + tx_serial_data : out std_logic_vector(47 downto 0); -- tx_serial_data.tx_serial_data + unused_rx_control : out std_logic_vector(575 downto 0); -- unused_rx_control.unused_rx_control + unused_rx_parallel_data : out std_logic_vector(3071 downto 0); -- unused_rx_parallel_data.unused_rx_parallel_data + unused_tx_control : in std_logic_vector(431 downto 0) := (others => '0'); -- unused_tx_control.unused_tx_control + unused_tx_parallel_data : in std_logic_vector(3071 downto 0) := (others => '0') -- unused_tx_parallel_data.unused_tx_parallel_data + ); + END COMPONENT; + COMPONENT ip_arria10_transceiver_pll_10g IS PORT ( mcgb_rst : in std_logic := '0'; -- mcgb_rst.mcgb_rst @@ -337,4 +391,23 @@ PACKAGE tech_10gbase_r_component_pkg IS ); END COMPONENT; + COMPONENT ip_arria10_transceiver_reset_controller_48 + PORT ( + clock : in std_logic := '0'; -- clock.clk + pll_locked : in std_logic_vector(0 downto 0) := (others => '0'); -- pll_locked.pll_locked + pll_powerdown : out std_logic_vector(0 downto 0); -- pll_powerdown.pll_powerdown + pll_select : in std_logic_vector(0 downto 0) := (others => '0'); -- pll_select.pll_select + reset : in std_logic := '0'; -- reset.reset + rx_analogreset : out std_logic_vector(47 downto 0); -- rx_analogreset.rx_analogreset + rx_cal_busy : in std_logic_vector(47 downto 0) := (others => '0'); -- rx_cal_busy.rx_cal_busy + rx_digitalreset : out std_logic_vector(47 downto 0); -- rx_digitalreset.rx_digitalreset + rx_is_lockedtodata : in std_logic_vector(47 downto 0) := (others => '0'); -- rx_is_lockedtodata.rx_is_lockedtodata + rx_ready : out std_logic_vector(47 downto 0); -- rx_ready.rx_ready + tx_analogreset : out std_logic_vector(47 downto 0); -- tx_analogreset.tx_analogreset + tx_cal_busy : in std_logic_vector(47 downto 0) := (others => '0'); -- tx_cal_busy.tx_cal_busy + tx_digitalreset : out std_logic_vector(47 downto 0); -- tx_digitalreset.tx_digitalreset + tx_ready : out std_logic_vector(47 downto 0) -- tx_ready.tx_ready + ); + END COMPONENT; + END tech_10gbase_r_component_pkg; diff --git a/libraries/technology/ip_arria10/phy_10gbase_r_48/compile_ip.tcl b/libraries/technology/ip_arria10/phy_10gbase_r_48/compile_ip.tcl new file mode 100644 index 0000000000..51a15947a3 --- /dev/null +++ b/libraries/technology/ip_arria10/phy_10gbase_r_48/compile_ip.tcl @@ -0,0 +1,56 @@ +#------------------------------------------------------------------------------ +# +# 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/>. +# +#------------------------------------------------------------------------------ + +# This file is based on generated file mentor/msim_setup.tcl. +# - the values for modelsim_search_libraries key in the hdllib.cfg follow from altera libraries vmap section in the msim_setup.tcl +# - vmap for the IP specific libraries and compile all IP source files into those libraries similar as in the msim_setup.tcl +# - replace QSYS_SIMDIR by IP_DIR +# - if the testbench is also generated with QSYS then only the IP_TBDIR files are needed, because these also contain the source files. + +set IP_DIR "$env(RADIOHDL)/libraries/technology/ip_arria10/phy_10gbase_r_48/generated/sim" + +#vlib ./work/ ;# Assume library work already exists + +vmap altera_common_sv_packages ./work/ +vmap ip_arria10_phy_10gbase_r_48_altera_xcvr_native_a10_150 ./work/ + + vlog -sv "$IP_DIR/../altera_xcvr_native_a10_150/sim/altera_xcvr_native_a10_functions_h.sv" -work altera_common_sv_packages + vlog -sv "$IP_DIR/../altera_xcvr_native_a10_150/sim/alt_xcvr_resync.sv" -L altera_common_sv_packages -work ip_arria10_phy_10gbase_r_48_altera_xcvr_native_a10_150 + vlog -sv "$IP_DIR/../altera_xcvr_native_a10_150/sim/alt_xcvr_arbiter.sv" -L altera_common_sv_packages -work ip_arria10_phy_10gbase_r_48_altera_xcvr_native_a10_150 + vlog -sv "$IP_DIR/../altera_xcvr_native_a10_150/sim/mentor/alt_xcvr_resync.sv" -L altera_common_sv_packages -work ip_arria10_phy_10gbase_r_48_altera_xcvr_native_a10_150 + vlog -sv "$IP_DIR/../altera_xcvr_native_a10_150/sim/mentor/alt_xcvr_arbiter.sv" -L altera_common_sv_packages -work ip_arria10_phy_10gbase_r_48_altera_xcvr_native_a10_150 + vlog -sv "$IP_DIR/../altera_xcvr_native_a10_150/sim/twentynm_pcs.sv" -L altera_common_sv_packages -work ip_arria10_phy_10gbase_r_48_altera_xcvr_native_a10_150 + vlog -sv "$IP_DIR/../altera_xcvr_native_a10_150/sim/twentynm_pma.sv" -L altera_common_sv_packages -work ip_arria10_phy_10gbase_r_48_altera_xcvr_native_a10_150 + vlog -sv "$IP_DIR/../altera_xcvr_native_a10_150/sim/twentynm_xcvr_avmm.sv" -L altera_common_sv_packages -work ip_arria10_phy_10gbase_r_48_altera_xcvr_native_a10_150 + vlog -sv "$IP_DIR/../altera_xcvr_native_a10_150/sim/twentynm_xcvr_native.sv" -L altera_common_sv_packages -work ip_arria10_phy_10gbase_r_48_altera_xcvr_native_a10_150 + vlog -sv "$IP_DIR/../altera_xcvr_native_a10_150/sim/mentor/twentynm_pcs.sv" -L altera_common_sv_packages -work ip_arria10_phy_10gbase_r_48_altera_xcvr_native_a10_150 + vlog -sv "$IP_DIR/../altera_xcvr_native_a10_150/sim/mentor/twentynm_pma.sv" -L altera_common_sv_packages -work ip_arria10_phy_10gbase_r_48_altera_xcvr_native_a10_150 + vlog -sv "$IP_DIR/../altera_xcvr_native_a10_150/sim/mentor/twentynm_xcvr_avmm.sv" -L altera_common_sv_packages -work ip_arria10_phy_10gbase_r_48_altera_xcvr_native_a10_150 + vlog -sv "$IP_DIR/../altera_xcvr_native_a10_150/sim/mentor/twentynm_xcvr_native.sv" -L altera_common_sv_packages -work ip_arria10_phy_10gbase_r_48_altera_xcvr_native_a10_150 + vlog -sv "$IP_DIR/../altera_xcvr_native_a10_150/sim/a10_avmm_h.sv" -L altera_common_sv_packages -work ip_arria10_phy_10gbase_r_48_altera_xcvr_native_a10_150 + vlog -sv "$IP_DIR/../altera_xcvr_native_a10_150/sim/alt_xcvr_native_avmm_csr.sv" -L altera_common_sv_packages -work ip_arria10_phy_10gbase_r_48_altera_xcvr_native_a10_150 + vlog -sv "$IP_DIR/../altera_xcvr_native_a10_150/sim/alt_xcvr_native_prbs_accum.sv" -L altera_common_sv_packages -work ip_arria10_phy_10gbase_r_48_altera_xcvr_native_a10_150 + vlog -sv "$IP_DIR/../altera_xcvr_native_a10_150/sim/alt_xcvr_native_odi_accel.sv" -L altera_common_sv_packages -work ip_arria10_phy_10gbase_r_48_altera_xcvr_native_a10_150 + vlog -sv "$IP_DIR/../altera_xcvr_native_a10_150/sim/alt_xcvr_native_rcfg_arb.sv" -L altera_common_sv_packages -work ip_arria10_phy_10gbase_r_48_altera_xcvr_native_a10_150 + vlog -sv "$IP_DIR/../altera_xcvr_native_a10_150/sim/ip_arria10_phy_10gbase_r_48_altera_xcvr_native_a10_150_d3cq3by.sv" -L altera_common_sv_packages -work ip_arria10_phy_10gbase_r_48_altera_xcvr_native_a10_150 + vlog -sv "$IP_DIR/../altera_xcvr_native_a10_150/sim/alt_xcvr_native_rcfg_opt_logic_d3cq3by.sv" -L altera_common_sv_packages -work ip_arria10_phy_10gbase_r_48_altera_xcvr_native_a10_150 + vcom "$IP_DIR/ip_arria10_phy_10gbase_r_48.vhd" diff --git a/libraries/technology/ip_arria10/phy_10gbase_r_48/generate_ip.sh b/libraries/technology/ip_arria10/phy_10gbase_r_48/generate_ip.sh new file mode 100755 index 0000000000..658a300732 --- /dev/null +++ b/libraries/technology/ip_arria10/phy_10gbase_r_48/generate_ip.sh @@ -0,0 +1,44 @@ +#!/bin/bash +# -------------------------------------------------------------------------- # +# +# 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/>. +# +# -------------------------------------------------------------------------- # +# +# Purpose: Generate IP with Qsys +# Description: +# Generate the IP in a separate generated/ subdirectory. +# +# Usage: +# +# ./generate_ip.sh +# + +# Tool settings for selected target "unb2" with arria10 +. ${RADIOHDL}/tools/quartus/set_quartus unb2 + +#qsys-generate --help + +# Only generate the source IP +# - use --synthesis=VHDL to have top level in VHDL similar as with MegaWizard +qsys-generate ip_arria10_phy_10gbase_r_48.qsys \ + --synthesis=VHDL \ + --simulation=VHDL \ + --output-directory=generated \ + --allow-mixed-language-simulation diff --git a/libraries/technology/ip_arria10/phy_10gbase_r_48/hdllib.cfg b/libraries/technology/ip_arria10/phy_10gbase_r_48/hdllib.cfg new file mode 100644 index 0000000000..03e0ff49ad --- /dev/null +++ b/libraries/technology/ip_arria10/phy_10gbase_r_48/hdllib.cfg @@ -0,0 +1,16 @@ +hdl_lib_name = ip_arria10_phy_10gbase_r_48 +hdl_library_clause_name = ip_arria10_phy_10gbase_r_48_altera_xcvr_native_a10_150 +hdl_lib_uses_synth = +hdl_lib_uses_sim = + +hdl_lib_technology = ip_arria10 + +modelsim_compile_ip_files = + $RADIOHDL/libraries/technology/ip_arria10/phy_10gbase_r_48/compile_ip.tcl + +synth_files = + +test_bench_files = + +quartus_qip_files = + generated/ip_arria10_phy_10gbase_r_48.qip diff --git a/libraries/technology/ip_arria10/phy_10gbase_r_48/ip_arria10_phy_10gbase_r_48.qsys b/libraries/technology/ip_arria10/phy_10gbase_r_48/ip_arria10_phy_10gbase_r_48.qsys new file mode 100644 index 0000000000..52a98fdbef --- /dev/null +++ b/libraries/technology/ip_arria10/phy_10gbase_r_48/ip_arria10_phy_10gbase_r_48.qsys @@ -0,0 +1,584 @@ +<?xml version="1.0" encoding="UTF-8"?> +<system name="$${FILENAME}"> + <component + name="$${FILENAME}" + displayName="$${FILENAME}" + version="1.0" + description="" + tags="INTERNAL_COMPONENT=true" + categories="System" /> + <parameter name="bonusData"><![CDATA[bonusData +{ + element $${FILENAME} + { + datum _originalDeviceFamily + { + value = "Arria 10"; + type = "String"; + } + } + element xcvr_native_a10_0 + { + datum _sortIndex + { + value = "0"; + type = "int"; + } + } +} +]]></parameter> + <parameter name="clockCrossingAdapter" value="HANDSHAKE" /> + <parameter name="device" value="10AX115U4F45I3SGES" /> + <parameter name="deviceFamily" value="Arria 10" /> + <parameter name="deviceSpeedGrade" value="3" /> + <parameter name="fabricMode" value="QSYS" /> + <parameter name="generateLegacySim" value="false" /> + <parameter name="generationId" value="0" /> + <parameter name="globalResetBus" value="false" /> + <parameter name="hdlLanguage" value="VERILOG" /> + <parameter name="hideFromIPCatalog" value="true" /> + <parameter name="lockedInterfaceDefinition" value="" /> + <parameter name="maxAdditionalLatency" value="1" /> + <parameter name="projectName" value="" /> + <parameter name="sopcBorderPoints" value="false" /> + <parameter name="systemHash" value="0" /> + <parameter name="testBenchDutName" value="" /> + <parameter name="timeStamp" value="0" /> + <parameter name="useTestBenchNamingPattern" value="false" /> + <instanceScript></instanceScript> + <interface + name="reconfig_avmm" + internal="xcvr_native_a10_0.reconfig_avmm" + type="conduit" + dir="end"> + <port name="reconfig_write" internal="reconfig_write" /> + <port name="reconfig_read" internal="reconfig_read" /> + <port name="reconfig_address" internal="reconfig_address" /> + <port name="reconfig_writedata" internal="reconfig_writedata" /> + <port name="reconfig_readdata" internal="reconfig_readdata" /> + <port name="reconfig_waitrequest" internal="reconfig_waitrequest" /> + </interface> + <interface + name="reconfig_clk" + internal="xcvr_native_a10_0.reconfig_clk" + type="conduit" + dir="end"> + <port name="reconfig_clk" internal="reconfig_clk" /> + </interface> + <interface + name="reconfig_reset" + internal="xcvr_native_a10_0.reconfig_reset" + type="conduit" + dir="end"> + <port name="reconfig_reset" internal="reconfig_reset" /> + </interface> + <interface + name="rx_analogreset" + internal="xcvr_native_a10_0.rx_analogreset" + type="conduit" + dir="end"> + <port name="rx_analogreset" internal="rx_analogreset" /> + </interface> + <interface + name="rx_cal_busy" + internal="xcvr_native_a10_0.rx_cal_busy" + type="conduit" + dir="end"> + <port name="rx_cal_busy" internal="rx_cal_busy" /> + </interface> + <interface + name="rx_cdr_refclk0" + internal="xcvr_native_a10_0.rx_cdr_refclk0" + type="conduit" + dir="end"> + <port name="rx_cdr_refclk0" internal="rx_cdr_refclk0" /> + </interface> + <interface + name="rx_clkout" + internal="xcvr_native_a10_0.rx_clkout" + type="conduit" + dir="end"> + <port name="rx_clkout" internal="rx_clkout" /> + </interface> + <interface + name="rx_control" + internal="xcvr_native_a10_0.rx_control" + type="conduit" + dir="end"> + <port name="rx_control" internal="rx_control" /> + </interface> + <interface + name="rx_coreclkin" + internal="xcvr_native_a10_0.rx_coreclkin" + type="conduit" + dir="end"> + <port name="rx_coreclkin" internal="rx_coreclkin" /> + </interface> + <interface + name="rx_digitalreset" + internal="xcvr_native_a10_0.rx_digitalreset" + type="conduit" + dir="end"> + <port name="rx_digitalreset" internal="rx_digitalreset" /> + </interface> + <interface + name="rx_enh_blk_lock" + internal="xcvr_native_a10_0.rx_enh_blk_lock" + type="conduit" + dir="end"> + <port name="rx_enh_blk_lock" internal="rx_enh_blk_lock" /> + </interface> + <interface + name="rx_enh_data_valid" + internal="xcvr_native_a10_0.rx_enh_data_valid" + type="conduit" + dir="end"> + <port name="rx_enh_data_valid" internal="rx_enh_data_valid" /> + </interface> + <interface + name="rx_enh_fifo_del" + internal="xcvr_native_a10_0.rx_enh_fifo_del" + type="conduit" + dir="end"> + <port name="rx_enh_fifo_del" internal="rx_enh_fifo_del" /> + </interface> + <interface + name="rx_enh_fifo_empty" + internal="xcvr_native_a10_0.rx_enh_fifo_empty" + type="conduit" + dir="end"> + <port name="rx_enh_fifo_empty" internal="rx_enh_fifo_empty" /> + </interface> + <interface + name="rx_enh_fifo_full" + internal="xcvr_native_a10_0.rx_enh_fifo_full" + type="conduit" + dir="end"> + <port name="rx_enh_fifo_full" internal="rx_enh_fifo_full" /> + </interface> + <interface + name="rx_enh_fifo_insert" + internal="xcvr_native_a10_0.rx_enh_fifo_insert" + type="conduit" + dir="end"> + <port name="rx_enh_fifo_insert" internal="rx_enh_fifo_insert" /> + </interface> + <interface + name="rx_enh_highber" + internal="xcvr_native_a10_0.rx_enh_highber" + type="conduit" + dir="end"> + <port name="rx_enh_highber" internal="rx_enh_highber" /> + </interface> + <interface + name="rx_is_lockedtodata" + internal="xcvr_native_a10_0.rx_is_lockedtodata" + type="conduit" + dir="end"> + <port name="rx_is_lockedtodata" internal="rx_is_lockedtodata" /> + </interface> + <interface + name="rx_is_lockedtoref" + internal="xcvr_native_a10_0.rx_is_lockedtoref" + type="conduit" + dir="end"> + <port name="rx_is_lockedtoref" internal="rx_is_lockedtoref" /> + </interface> + <interface + name="rx_parallel_data" + internal="xcvr_native_a10_0.rx_parallel_data" + type="conduit" + dir="end"> + <port name="rx_parallel_data" internal="rx_parallel_data" /> + </interface> + <interface + name="rx_prbs_done" + internal="xcvr_native_a10_0.rx_prbs_done" + type="conduit" + dir="end"> + <port name="rx_prbs_done" internal="rx_prbs_done" /> + </interface> + <interface + name="rx_prbs_err" + internal="xcvr_native_a10_0.rx_prbs_err" + type="conduit" + dir="end"> + <port name="rx_prbs_err" internal="rx_prbs_err" /> + </interface> + <interface + name="rx_prbs_err_clr" + internal="xcvr_native_a10_0.rx_prbs_err_clr" + type="conduit" + dir="end"> + <port name="rx_prbs_err_clr" internal="rx_prbs_err_clr" /> + </interface> + <interface + name="rx_serial_data" + internal="xcvr_native_a10_0.rx_serial_data" + type="conduit" + dir="end"> + <port name="rx_serial_data" internal="rx_serial_data" /> + </interface> + <interface + name="rx_seriallpbken" + internal="xcvr_native_a10_0.rx_seriallpbken" + type="conduit" + dir="end"> + <port name="rx_seriallpbken" internal="rx_seriallpbken" /> + </interface> + <interface + name="tx_analogreset" + internal="xcvr_native_a10_0.tx_analogreset" + type="conduit" + dir="end"> + <port name="tx_analogreset" internal="tx_analogreset" /> + </interface> + <interface + name="tx_cal_busy" + internal="xcvr_native_a10_0.tx_cal_busy" + type="conduit" + dir="end"> + <port name="tx_cal_busy" internal="tx_cal_busy" /> + </interface> + <interface + name="tx_clkout" + internal="xcvr_native_a10_0.tx_clkout" + type="conduit" + dir="end"> + <port name="tx_clkout" internal="tx_clkout" /> + </interface> + <interface + name="tx_control" + internal="xcvr_native_a10_0.tx_control" + type="conduit" + dir="end"> + <port name="tx_control" internal="tx_control" /> + </interface> + <interface + name="tx_coreclkin" + internal="xcvr_native_a10_0.tx_coreclkin" + type="conduit" + dir="end"> + <port name="tx_coreclkin" internal="tx_coreclkin" /> + </interface> + <interface + name="tx_digitalreset" + internal="xcvr_native_a10_0.tx_digitalreset" + type="conduit" + dir="end"> + <port name="tx_digitalreset" internal="tx_digitalreset" /> + </interface> + <interface + name="tx_enh_data_valid" + internal="xcvr_native_a10_0.tx_enh_data_valid" + type="conduit" + dir="end"> + <port name="tx_enh_data_valid" internal="tx_enh_data_valid" /> + </interface> + <interface + name="tx_enh_fifo_empty" + internal="xcvr_native_a10_0.tx_enh_fifo_empty" + type="conduit" + dir="end"> + <port name="tx_enh_fifo_empty" internal="tx_enh_fifo_empty" /> + </interface> + <interface + name="tx_enh_fifo_full" + internal="xcvr_native_a10_0.tx_enh_fifo_full" + type="conduit" + dir="end"> + <port name="tx_enh_fifo_full" internal="tx_enh_fifo_full" /> + </interface> + <interface + name="tx_enh_fifo_pempty" + internal="xcvr_native_a10_0.tx_enh_fifo_pempty" + type="conduit" + dir="end"> + <port name="tx_enh_fifo_pempty" internal="tx_enh_fifo_pempty" /> + </interface> + <interface + name="tx_enh_fifo_pfull" + internal="xcvr_native_a10_0.tx_enh_fifo_pfull" + type="conduit" + dir="end"> + <port name="tx_enh_fifo_pfull" internal="tx_enh_fifo_pfull" /> + </interface> + <interface + name="tx_err_ins" + internal="xcvr_native_a10_0.tx_err_ins" + type="conduit" + dir="end"> + <port name="tx_err_ins" internal="tx_err_ins" /> + </interface> + <interface + name="tx_parallel_data" + internal="xcvr_native_a10_0.tx_parallel_data" + type="conduit" + dir="end"> + <port name="tx_parallel_data" internal="tx_parallel_data" /> + </interface> + <interface name="tx_pma_clkout" internal="xcvr_native_a10_0.tx_pma_clkout" /> + <interface + name="tx_pma_div_clkout" + internal="xcvr_native_a10_0.tx_pma_div_clkout" /> + <interface + name="tx_serial_clk0" + internal="xcvr_native_a10_0.tx_serial_clk0" + type="conduit" + dir="end"> + <port name="tx_serial_clk0" internal="tx_serial_clk0" /> + </interface> + <interface + name="tx_serial_data" + internal="xcvr_native_a10_0.tx_serial_data" + type="conduit" + dir="end"> + <port name="tx_serial_data" internal="tx_serial_data" /> + </interface> + <interface + name="unused_rx_control" + internal="xcvr_native_a10_0.unused_rx_control" + type="conduit" + dir="end"> + <port name="unused_rx_control" internal="unused_rx_control" /> + </interface> + <interface + name="unused_rx_parallel_data" + internal="xcvr_native_a10_0.unused_rx_parallel_data" + type="conduit" + dir="end"> + <port name="unused_rx_parallel_data" internal="unused_rx_parallel_data" /> + </interface> + <interface + name="unused_tx_control" + internal="xcvr_native_a10_0.unused_tx_control" + type="conduit" + dir="end"> + <port name="unused_tx_control" internal="unused_tx_control" /> + </interface> + <interface + name="unused_tx_parallel_data" + internal="xcvr_native_a10_0.unused_tx_parallel_data" + type="conduit" + dir="end"> + <port name="unused_tx_parallel_data" internal="unused_tx_parallel_data" /> + </interface> + <module + name="xcvr_native_a10_0" + kind="altera_xcvr_native_a10" + version="15.0" + enabled="1" + autoexport="1"> + <parameter name="base_device" value="NIGHTFURY5ES" /> + <parameter name="bonded_mode" value="not_bonded" /> + <parameter name="cdr_refclk_cnt" value="1" /> + <parameter name="cdr_refclk_select" value="0" /> + <parameter name="channels" value="48" /> + <parameter name="design_environment" value="NATIVE" /> + <parameter name="device" value="10AX115U4F45I3SGES" /> + <parameter name="device_family" value="Arria 10" /> + <parameter name="duplex_mode" value="duplex" /> + <parameter name="enable_hard_reset" value="0" /> + <parameter name="enable_hip" value="0" /> + <parameter name="enable_parallel_loopback" value="0" /> + <parameter name="enable_port_krfec_rx_enh_frame" value="0" /> + <parameter name="enable_port_krfec_rx_enh_frame_diag_status" value="0" /> + <parameter name="enable_port_krfec_tx_enh_frame" value="0" /> + <parameter name="enable_port_pipe_rx_polarity" value="0" /> + <parameter name="enable_port_rx_enh_bitslip" value="0" /> + <parameter name="enable_port_rx_enh_blk_lock" value="1" /> + <parameter name="enable_port_rx_enh_clr_errblk_count" value="0" /> + <parameter name="enable_port_rx_enh_crc32_err" value="0" /> + <parameter name="enable_port_rx_enh_data_valid" value="1" /> + <parameter name="enable_port_rx_enh_fifo_align_clr" value="0" /> + <parameter name="enable_port_rx_enh_fifo_align_val" value="0" /> + <parameter name="enable_port_rx_enh_fifo_cnt" value="0" /> + <parameter name="enable_port_rx_enh_fifo_del" value="1" /> + <parameter name="enable_port_rx_enh_fifo_empty" value="1" /> + <parameter name="enable_port_rx_enh_fifo_full" value="1" /> + <parameter name="enable_port_rx_enh_fifo_insert" value="1" /> + <parameter name="enable_port_rx_enh_fifo_pempty" value="0" /> + <parameter name="enable_port_rx_enh_fifo_pfull" value="0" /> + <parameter name="enable_port_rx_enh_fifo_rd_en" value="0" /> + <parameter name="enable_port_rx_enh_frame" value="0" /> + <parameter name="enable_port_rx_enh_frame_diag_status" value="0" /> + <parameter name="enable_port_rx_enh_frame_lock" value="0" /> + <parameter name="enable_port_rx_enh_highber" value="1" /> + <parameter name="enable_port_rx_enh_highber_clr_cnt" value="0" /> + <parameter name="enable_port_rx_is_lockedtodata" value="1" /> + <parameter name="enable_port_rx_is_lockedtoref" value="1" /> + <parameter name="enable_port_rx_pma_clkout" value="0" /> + <parameter name="enable_port_rx_pma_clkslip" value="0" /> + <parameter name="enable_port_rx_pma_div_clkout" value="0" /> + <parameter name="enable_port_rx_pma_iqtxrx_clkout" value="0" /> + <parameter name="enable_port_rx_pma_qpipulldn" value="0" /> + <parameter name="enable_port_rx_polinv" value="0" /> + <parameter name="enable_port_rx_seriallpbken" value="1" /> + <parameter name="enable_port_rx_seriallpbken_tx" value="1" /> + <parameter name="enable_port_rx_signaldetect" value="0" /> + <parameter name="enable_port_rx_std_bitrev_ena" value="0" /> + <parameter name="enable_port_rx_std_bitslip" value="0" /> + <parameter name="enable_port_rx_std_bitslipboundarysel" value="0" /> + <parameter name="enable_port_rx_std_byterev_ena" value="0" /> + <parameter name="enable_port_rx_std_pcfifo_empty" value="0" /> + <parameter name="enable_port_rx_std_pcfifo_full" value="0" /> + <parameter name="enable_port_rx_std_rmfifo_empty" value="0" /> + <parameter name="enable_port_rx_std_rmfifo_full" value="0" /> + <parameter name="enable_port_rx_std_signaldetect" value="0" /> + <parameter name="enable_port_rx_std_wa_a1a2size" value="0" /> + <parameter name="enable_port_rx_std_wa_patternalign" value="0" /> + <parameter name="enable_port_tx_enh_bitslip" value="0" /> + <parameter name="enable_port_tx_enh_fifo_cnt" value="0" /> + <parameter name="enable_port_tx_enh_fifo_empty" value="1" /> + <parameter name="enable_port_tx_enh_fifo_full" value="1" /> + <parameter name="enable_port_tx_enh_fifo_pempty" value="1" /> + <parameter name="enable_port_tx_enh_fifo_pfull" value="1" /> + <parameter name="enable_port_tx_enh_frame" value="0" /> + <parameter name="enable_port_tx_enh_frame_burst_en" value="0" /> + <parameter name="enable_port_tx_enh_frame_diag_status" value="0" /> + <parameter name="enable_port_tx_pma_clkout" value="0" /> + <parameter name="enable_port_tx_pma_div_clkout" value="0" /> + <parameter name="enable_port_tx_pma_elecidle" value="0" /> + <parameter name="enable_port_tx_pma_iqtxrx_clkout" value="0" /> + <parameter name="enable_port_tx_pma_qpipulldn" value="0" /> + <parameter name="enable_port_tx_pma_qpipullup" value="0" /> + <parameter name="enable_port_tx_pma_rxfound" value="0" /> + <parameter name="enable_port_tx_pma_txdetectrx" value="0" /> + <parameter name="enable_port_tx_polinv" value="0" /> + <parameter name="enable_port_tx_std_bitslipboundarysel" value="0" /> + <parameter name="enable_port_tx_std_pcfifo_empty" value="0" /> + <parameter name="enable_port_tx_std_pcfifo_full" value="0" /> + <parameter name="enable_ports_adaptation" value="0" /> + <parameter name="enable_ports_pipe_g3_analog" value="0" /> + <parameter name="enable_ports_pipe_hclk" value="0" /> + <parameter name="enable_ports_pipe_rx_elecidle" value="0" /> + <parameter name="enable_ports_pipe_sw" value="0" /> + <parameter name="enable_ports_rx_manual_cdr_mode" value="0" /> + <parameter name="enable_ports_rx_manual_ppm" value="0" /> + <parameter name="enable_ports_rx_prbs" value="1" /> + <parameter name="enable_rx_pma_floatingtap" value="0" /> + <parameter name="enable_simple_interface" value="1" /> + <parameter name="enable_split_interface" value="0" /> + <parameter name="enable_transparent_pcs" value="0" /> + <parameter name="enh_low_latency_enable" value="0" /> + <parameter name="enh_pcs_pma_width" value="32" /> + <parameter name="enh_pld_pcs_width" value="66" /> + <parameter name="enh_rx_64b66b_enable" value="1" /> + <parameter name="enh_rx_bitslip_enable" value="0" /> + <parameter name="enh_rx_blksync_enable" value="1" /> + <parameter name="enh_rx_crcchk_enable" value="0" /> + <parameter name="enh_rx_descram_enable" value="1" /> + <parameter name="enh_rx_dispchk_enable" value="0" /> + <parameter name="enh_rx_frmsync_enable" value="0" /> + <parameter name="enh_rx_frmsync_mfrm_length" value="2048" /> + <parameter name="enh_rx_krfec_err_mark_enable" value="0" /> + <parameter name="enh_rx_krfec_err_mark_type" value="10G" /> + <parameter name="enh_rx_polinv_enable" value="0" /> + <parameter name="enh_rxfifo_align_del" value="0" /> + <parameter name="enh_rxfifo_control_del" value="0" /> + <parameter name="enh_rxfifo_mode" value="10GBase-R" /> + <parameter name="enh_rxfifo_pempty" value="2" /> + <parameter name="enh_rxfifo_pfull" value="23" /> + <parameter name="enh_rxtxfifo_double_width" value="0" /> + <parameter name="enh_tx_64b66b_enable" value="1" /> + <parameter name="enh_tx_bitslip_enable" value="0" /> + <parameter name="enh_tx_crcerr_enable" value="0" /> + <parameter name="enh_tx_crcgen_enable" value="0" /> + <parameter name="enh_tx_dispgen_enable" value="0" /> + <parameter name="enh_tx_frmgen_burst_enable" value="0" /> + <parameter name="enh_tx_frmgen_enable" value="0" /> + <parameter name="enh_tx_frmgen_mfrm_length" value="2048" /> + <parameter name="enh_tx_krfec_burst_err_enable" value="0" /> + <parameter name="enh_tx_krfec_burst_err_len" value="1" /> + <parameter name="enh_tx_polinv_enable" value="0" /> + <parameter name="enh_tx_randomdispbit_enable" value="0" /> + <parameter name="enh_tx_scram_enable" value="1" /> + <parameter name="enh_tx_scram_seed" value="288230376151711743" /> + <parameter name="enh_tx_sh_err" value="0" /> + <parameter name="enh_txfifo_mode" value="Phase compensation" /> + <parameter name="enh_txfifo_pempty" value="2" /> + <parameter name="enh_txfifo_pfull" value="11" /> + <parameter name="generate_add_hdl_instance_example" value="0" /> + <parameter name="generate_docs" value="1" /> + <parameter name="message_level" value="error" /> + <parameter name="number_physical_bonding_clocks" value="1" /> + <parameter name="pcie_rate_match" value="Bypass" /> + <parameter name="pcs_direct_width" value="8" /> + <parameter name="pll_select" value="0" /> + <parameter name="plls" value="1" /> + <parameter name="pma_mode" value="basic" /> + <parameter name="protocol_mode" value="teng_baser_mode" /> + <parameter name="rapid_validate" value="0" /> + <parameter name="rcfg_enable" value="1" /> + <parameter name="rcfg_file_prefix">altera_xcvr_native_a10</parameter> + <parameter name="rcfg_h_file_enable" value="1" /> + <parameter name="rcfg_iface_enable" value="0" /> + <parameter name="rcfg_jtag_enable" value="1" /> + <parameter name="rcfg_mif_file_enable" value="1" /> + <parameter name="rcfg_multi_enable" value="0" /> + <parameter name="rcfg_profile_cnt" value="2" /> + <parameter name="rcfg_profile_data0" value="" /> + <parameter name="rcfg_profile_data1" value="" /> + <parameter name="rcfg_profile_data2" value="" /> + <parameter name="rcfg_profile_data3" value="" /> + <parameter name="rcfg_profile_data4" value="" /> + <parameter name="rcfg_profile_data5" value="" /> + <parameter name="rcfg_profile_data6" value="" /> + <parameter name="rcfg_profile_data7" value="" /> + <parameter name="rcfg_profile_select" value="1" /> + <parameter name="rcfg_reduced_files_enable" value="0" /> + <parameter name="rcfg_shared" value="1" /> + <parameter name="rcfg_sv_file_enable" value="1" /> + <parameter name="rx_pma_ctle_adaptation_mode" value="manual" /> + <parameter name="rx_pma_dfe_adaptation_mode" value="disabled" /> + <parameter name="rx_pma_dfe_fixed_taps" value="3" /> + <parameter name="rx_pma_div_clkout_divider" value="0" /> + <parameter name="rx_ppm_detect_threshold" value="1000" /> + <parameter name="set_capability_reg_enable" value="1" /> + <parameter name="set_cdr_refclk_freq" value="644.531250" /> + <parameter name="set_csr_soft_logic_enable" value="1" /> + <parameter name="set_data_rate" value="10312.5" /> + <parameter name="set_embedded_debug_enable" value="0" /> + <parameter name="set_enable_calibration" value="0" /> + <parameter name="set_hip_cal_en" value="0" /> + <parameter name="set_odi_soft_logic_enable" value="0" /> + <parameter name="set_pcs_bonding_master" value="Auto" /> + <parameter name="set_prbs_soft_logic_enable" value="1" /> + <parameter name="set_rcfg_emb_strm_enable" value="0" /> + <parameter name="set_user_identifier" value="0" /> + <parameter name="std_low_latency_bypass_enable" value="0" /> + <parameter name="std_pcs_pma_width" value="10" /> + <parameter name="std_rx_8b10b_enable" value="0" /> + <parameter name="std_rx_bitrev_enable" value="0" /> + <parameter name="std_rx_byte_deser_mode" value="Disabled" /> + <parameter name="std_rx_byterev_enable" value="0" /> + <parameter name="std_rx_pcfifo_mode" value="low_latency" /> + <parameter name="std_rx_polinv_enable" value="0" /> + <parameter name="std_rx_rmfifo_mode" value="disabled" /> + <parameter name="std_rx_rmfifo_pattern_n" value="0" /> + <parameter name="std_rx_rmfifo_pattern_p" value="0" /> + <parameter name="std_rx_word_aligner_fast_sync_status_enable" value="0" /> + <parameter name="std_rx_word_aligner_mode" value="bitslip" /> + <parameter name="std_rx_word_aligner_pattern" value="0" /> + <parameter name="std_rx_word_aligner_pattern_len" value="7" /> + <parameter name="std_rx_word_aligner_renumber" value="3" /> + <parameter name="std_rx_word_aligner_rgnumber" value="3" /> + <parameter name="std_rx_word_aligner_rknumber" value="3" /> + <parameter name="std_rx_word_aligner_rvnumber" value="0" /> + <parameter name="std_tx_8b10b_disp_ctrl_enable" value="0" /> + <parameter name="std_tx_8b10b_enable" value="0" /> + <parameter name="std_tx_bitrev_enable" value="0" /> + <parameter name="std_tx_bitslip_enable" value="0" /> + <parameter name="std_tx_byte_ser_mode" value="Disabled" /> + <parameter name="std_tx_byterev_enable" value="0" /> + <parameter name="std_tx_pcfifo_mode" value="low_latency" /> + <parameter name="std_tx_polinv_enable" value="0" /> + <parameter name="support_mode" value="user_mode" /> + <parameter name="tx_pma_clk_div" value="1" /> + <parameter name="tx_pma_div_clkout_divider" value="33" /> + <parameter name="validation_rule_select" value="" /> + </module> + <interconnectRequirement for="$system" name="qsys_mm.clockCrossingAdapter" value="HANDSHAKE" /> + <interconnectRequirement for="$system" name="qsys_mm.insertDefaultSlave" value="FALSE" /> + <interconnectRequirement for="$system" name="qsys_mm.maxAdditionalLatency" value="1" /> +</system> diff --git a/libraries/technology/ip_arria10/transceiver_reset_controller_48/compile_ip.tcl b/libraries/technology/ip_arria10/transceiver_reset_controller_48/compile_ip.tcl new file mode 100644 index 0000000000..23d218e509 --- /dev/null +++ b/libraries/technology/ip_arria10/transceiver_reset_controller_48/compile_ip.tcl @@ -0,0 +1,43 @@ +#------------------------------------------------------------------------------ +# +# Copyright (C) 2015 +# 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/>. +# +#------------------------------------------------------------------------------ + +# This file is based on generated file mentor/msim_setup.tcl. +# - the values for modelsim_search_libraries key in the hdllib.cfg follow from altera libraries vmap section in the msim_setup.tcl +# - vmap for the IP specific libraries and compile all IP source files into those libraries similar as in the msim_setup.tcl +# - replace QSYS_SIMDIR by IP_DIR +# - if the testbench is also generated with QSYS then only the IP_TBDIR files are needed, because these also contain the source files. + +set IP_DIR "$env(RADIOHDL)/libraries/technology/ip_arria10/transceiver_reset_controller_48/generated/sim" + +#vlib ./work/ ;# Assume library work already exists + +vmap ip_arria10_transceiver_reset_controller_48_altera_xcvr_reset_control_150 ./work/ + + vlog -sv "$IP_DIR/../altera_xcvr_reset_control_150/sim/altera_xcvr_functions.sv" -work ip_arria10_transceiver_reset_controller_48_altera_xcvr_reset_control_150 + vlog -sv "$IP_DIR/../altera_xcvr_reset_control_150/sim/mentor/altera_xcvr_functions.sv" -work ip_arria10_transceiver_reset_controller_48_altera_xcvr_reset_control_150 + vlog -sv "$IP_DIR/../altera_xcvr_reset_control_150/sim/alt_xcvr_resync.sv" -work ip_arria10_transceiver_reset_controller_48_altera_xcvr_reset_control_150 + vlog -sv "$IP_DIR/../altera_xcvr_reset_control_150/sim/mentor/alt_xcvr_resync.sv" -work ip_arria10_transceiver_reset_controller_48_altera_xcvr_reset_control_150 + vlog -sv "$IP_DIR/../altera_xcvr_reset_control_150/sim/altera_xcvr_reset_control.sv" -work ip_arria10_transceiver_reset_controller_48_altera_xcvr_reset_control_150 + vlog -sv "$IP_DIR/../altera_xcvr_reset_control_150/sim/alt_xcvr_reset_counter.sv" -work ip_arria10_transceiver_reset_controller_48_altera_xcvr_reset_control_150 + vlog -sv "$IP_DIR/../altera_xcvr_reset_control_150/sim/mentor/altera_xcvr_reset_control.sv" -work ip_arria10_transceiver_reset_controller_48_altera_xcvr_reset_control_150 + vlog -sv "$IP_DIR/../altera_xcvr_reset_control_150/sim/mentor/alt_xcvr_reset_counter.sv" -work ip_arria10_transceiver_reset_controller_48_altera_xcvr_reset_control_150 + vcom "$IP_DIR/ip_arria10_transceiver_reset_controller_48.vhd" diff --git a/libraries/technology/ip_arria10/transceiver_reset_controller_48/generate_ip.sh b/libraries/technology/ip_arria10/transceiver_reset_controller_48/generate_ip.sh new file mode 100755 index 0000000000..0f94b206ad --- /dev/null +++ b/libraries/technology/ip_arria10/transceiver_reset_controller_48/generate_ip.sh @@ -0,0 +1,44 @@ +#!/bin/bash +# -------------------------------------------------------------------------- # +# +# Copyright (C) 2015 +# 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/>. +# +# -------------------------------------------------------------------------- # +# +# Purpose: Generate IP with Qsys +# Description: +# Generate the IP in a separate generated/ subdirectory. +# +# Usage: +# +# ./generate_ip.sh +# + +# Tool settings for selected target "unb2" with arria10 +. ${RADIOHDL}/tools/quartus/set_quartus unb2 + +#qsys-generate --help + +# Only generate the source IP +# - use --synthesis=VHDL to have top level in VHDL similar as with MegaWizard +qsys-generate ip_arria10_transceiver_reset_controller_48.qsys \ + --synthesis=VHDL \ + --simulation=VHDL \ + --output-directory=generated \ + --allow-mixed-language-simulation diff --git a/libraries/technology/ip_arria10/transceiver_reset_controller_48/hdllib.cfg b/libraries/technology/ip_arria10/transceiver_reset_controller_48/hdllib.cfg new file mode 100644 index 0000000000..36a3cea679 --- /dev/null +++ b/libraries/technology/ip_arria10/transceiver_reset_controller_48/hdllib.cfg @@ -0,0 +1,16 @@ +hdl_lib_name = ip_arria10_transceiver_reset_controller_48 +hdl_library_clause_name = ip_arria10_transceiver_reset_controller_48_altera_xcvr_reset_control_150 +hdl_lib_uses_synth = +hdl_lib_uses_sim = + +hdl_lib_technology = ip_arria10 + +modelsim_compile_ip_files = + $RADIOHDL/libraries/technology/ip_arria10/transceiver_reset_controller_48/compile_ip.tcl + +synth_files = + +test_bench_files = + +quartus_qip_files = + generated/ip_arria10_transceiver_reset_controller_48.qip diff --git a/libraries/technology/ip_arria10/transceiver_reset_controller_48/ip_arria10_transceiver_reset_controller_48.qsys b/libraries/technology/ip_arria10/transceiver_reset_controller_48/ip_arria10_transceiver_reset_controller_48.qsys new file mode 100644 index 0000000000..afa515724e --- /dev/null +++ b/libraries/technology/ip_arria10/transceiver_reset_controller_48/ip_arria10_transceiver_reset_controller_48.qsys @@ -0,0 +1,178 @@ +<?xml version="1.0" encoding="UTF-8"?> +<system name="$${FILENAME}"> + <component + name="$${FILENAME}" + displayName="$${FILENAME}" + version="1.0" + description="" + tags="INTERNAL_COMPONENT=true" + categories="System" /> + <parameter name="bonusData"><![CDATA[bonusData +{ + element $${FILENAME} + { + datum _originalDeviceFamily + { + value = "Arria 10"; + type = "String"; + } + } + element transceiver_reset_controller_inst + { + datum _sortIndex + { + value = "0"; + type = "int"; + } + } +} +]]></parameter> + <parameter name="clockCrossingAdapter" value="HANDSHAKE" /> + <parameter name="device" value="10AX115U4F45I3SGES" /> + <parameter name="deviceFamily" value="Arria 10" /> + <parameter name="deviceSpeedGrade" value="3" /> + <parameter name="fabricMode" value="QSYS" /> + <parameter name="generateLegacySim" value="false" /> + <parameter name="generationId" value="0" /> + <parameter name="globalResetBus" value="false" /> + <parameter name="hdlLanguage" value="VERILOG" /> + <parameter name="hideFromIPCatalog" value="true" /> + <parameter name="lockedInterfaceDefinition" value="" /> + <parameter name="maxAdditionalLatency" value="1" /> + <parameter name="projectName" value="" /> + <parameter name="sopcBorderPoints" value="false" /> + <parameter name="systemHash" value="0" /> + <parameter name="testBenchDutName" value="" /> + <parameter name="timeStamp" value="0" /> + <parameter name="useTestBenchNamingPattern" value="false" /> + <instanceScript></instanceScript> + <interface + name="clock" + internal="transceiver_reset_controller_inst.clock" + type="clock" + dir="end"> + <port name="clock" internal="clock" /> + </interface> + <interface + name="pll_locked" + internal="transceiver_reset_controller_inst.pll_locked" + type="conduit" + dir="end"> + <port name="pll_locked" internal="pll_locked" /> + </interface> + <interface + name="pll_powerdown" + internal="transceiver_reset_controller_inst.pll_powerdown" + type="conduit" + dir="end"> + <port name="pll_powerdown" internal="pll_powerdown" /> + </interface> + <interface + name="pll_select" + internal="transceiver_reset_controller_inst.pll_select" + type="conduit" + dir="end"> + <port name="pll_select" internal="pll_select" /> + </interface> + <interface + name="reset" + internal="transceiver_reset_controller_inst.reset" + type="reset" + dir="end"> + <port name="reset" internal="reset" /> + </interface> + <interface + name="rx_analogreset" + internal="transceiver_reset_controller_inst.rx_analogreset" + type="conduit" + dir="end"> + <port name="rx_analogreset" internal="rx_analogreset" /> + </interface> + <interface + name="rx_cal_busy" + internal="transceiver_reset_controller_inst.rx_cal_busy" + type="conduit" + dir="end"> + <port name="rx_cal_busy" internal="rx_cal_busy" /> + </interface> + <interface + name="rx_digitalreset" + internal="transceiver_reset_controller_inst.rx_digitalreset" + type="conduit" + dir="end"> + <port name="rx_digitalreset" internal="rx_digitalreset" /> + </interface> + <interface + name="rx_is_lockedtodata" + internal="transceiver_reset_controller_inst.rx_is_lockedtodata" + type="conduit" + dir="end"> + <port name="rx_is_lockedtodata" internal="rx_is_lockedtodata" /> + </interface> + <interface + name="rx_ready" + internal="transceiver_reset_controller_inst.rx_ready" + type="conduit" + dir="end"> + <port name="rx_ready" internal="rx_ready" /> + </interface> + <interface + name="tx_analogreset" + internal="transceiver_reset_controller_inst.tx_analogreset" + type="conduit" + dir="end"> + <port name="tx_analogreset" internal="tx_analogreset" /> + </interface> + <interface + name="tx_cal_busy" + internal="transceiver_reset_controller_inst.tx_cal_busy" + type="conduit" + dir="end"> + <port name="tx_cal_busy" internal="tx_cal_busy" /> + </interface> + <interface + name="tx_digitalreset" + internal="transceiver_reset_controller_inst.tx_digitalreset" + type="conduit" + dir="end"> + <port name="tx_digitalreset" internal="tx_digitalreset" /> + </interface> + <interface + name="tx_ready" + internal="transceiver_reset_controller_inst.tx_ready" + type="conduit" + dir="end"> + <port name="tx_ready" internal="tx_ready" /> + </interface> + <module + name="transceiver_reset_controller_inst" + kind="altera_xcvr_reset_control" + version="15.0" + enabled="1" + autoexport="1"> + <parameter name="CHANNELS" value="48" /> + <parameter name="PLLS" value="1" /> + <parameter name="REDUCED_SIM_TIME" value="1" /> + <parameter name="RX_ENABLE" value="1" /> + <parameter name="RX_PER_CHANNEL" value="1" /> + <parameter name="SYNCHRONIZE_PLL_RESET" value="0" /> + <parameter name="SYNCHRONIZE_RESET" value="1" /> + <parameter name="SYS_CLK_IN_MHZ" value="156" /> + <parameter name="TX_ENABLE" value="1" /> + <parameter name="TX_PER_CHANNEL" value="0" /> + <parameter name="TX_PLL_ENABLE" value="1" /> + <parameter name="T_PLL_LOCK_HYST" value="100" /> + <parameter name="T_PLL_POWERDOWN" value="1000" /> + <parameter name="T_RX_ANALOGRESET" value="40" /> + <parameter name="T_RX_DIGITALRESET" value="400000" /> + <parameter name="T_TX_DIGITALRESET" value="20" /> + <parameter name="device_family" value="Arria 10" /> + <parameter name="gui_pll_cal_busy" value="0" /> + <parameter name="gui_rx_auto_reset" value="0" /> + <parameter name="gui_split_interfaces" value="0" /> + <parameter name="gui_tx_auto_reset" value="0" /> + </module> + <interconnectRequirement for="$system" name="qsys_mm.clockCrossingAdapter" value="HANDSHAKE" /> + <interconnectRequirement for="$system" name="qsys_mm.insertDefaultSlave" value="FALSE" /> + <interconnectRequirement for="$system" name="qsys_mm.maxAdditionalLatency" value="1" /> +</system> -- GitLab