diff --git a/libraries/technology/ip_arria10_e3sge3/ddio/compile_ip.tcl b/libraries/technology/ip_arria10_e3sge3/ddio/compile_ip.tcl index a211be7af742b38f7a3d00928c13626e634c6ea8..effc6fdee45f3be59d313cc0c8b881c0a0797397 100644 --- a/libraries/technology/ip_arria10_e3sge3/ddio/compile_ip.tcl +++ b/libraries/technology/ip_arria10_e3sge3/ddio/compile_ip.tcl @@ -26,8 +26,7 @@ set IPMODEL "SIM"; if {$IPMODEL=="PHY"} { # This file is based on Qsys-generated file msim_setup.tcl. - set IP_DIR_IN "$env(RADIOHDL)/libraries/technology/ip_arria10_e3sge3/ddio/generated_in/" - set IP_DIR_OUT "$env(RADIOHDL)/libraries/technology/ip_arria10_e3sge3/ddio/generated_out/" + set IP_DIR "$env(RADIOHDL)/libraries/technology/ip_arria10_e3sge3/ddio/generated/" #vlib ./work/ ;# Assume library work already exists vmap ip_arria10_e3sge3_ddio_in_1_altera_gpio_core_151 ./work/ @@ -41,14 +40,14 @@ if {$IPMODEL=="PHY"} { #vmap ip_arria10_e3sge3_ddio_in_1 ./work/ #vmap ip_arria10_e3sge3_ddio_out_1 ./work/ - vlog -sv "$IP_DIR_IN/../altera_gpio_core20_151/sim/mentor/altera_gpio.sv" -work ip_arria10_e3sge3_ddio_in_1_altera_gpio_core_151 - vlog -sv "$IP_DIR_OUT/../altera_gpio_core20_151/sim/mentor/altera_gpio.sv" -work ip_arria10_e3sge3_ddio_out_1_altera_gpio_core_151 + vlog -sv "$IP_DIR/../altera_gpio_core20_151/sim/mentor/altera_gpio.sv" -work ip_arria10_e3sge3_ddio_in_1_altera_gpio_core_151 + vlog -sv "$IP_DIR/../altera_gpio_core20_151/sim/mentor/altera_gpio.sv" -work ip_arria10_e3sge3_ddio_out_1_altera_gpio_core_151 - vcom "$IP_DIR_IN/../altera_gpio_151/sim/ip_arria10_e3sge3_ddio_in_1_altera_gpio_151_ia6gnqq.vhd" -work ip_arria10_e3sge3_ddio_in_1_altera_gpio_151 - vcom "$IP_DIR_IN/ip_arria10_e3sge3_ddio_in_1.vhd" + vcom "$IP_DIR/../altera_gpio_151/sim/ip_arria10_e3sge3_ddio_in_1_altera_gpio_151_ia6gnqq.vhd" -work ip_arria10_e3sge3_ddio_in_1_altera_gpio_151 + vcom "$IP_DIR/ip_arria10_e3sge3_ddio_in_1.vhd" - vcom "$IP_DIR_OUT/../altera_gpio_151/sim/ip_arria10_e3sge3_ddio_out_1_altera_gpio_151_pqwimxi.vhd" -work ip_arria10_e3sge3_ddio_out_1_altera_gpio_151 - vcom "$IP_DIR_OUT/ip_arria10_e3sge3_ddio_out_1.vhd" + vcom "$IP_DIR/../altera_gpio_151/sim/ip_arria10_e3sge3_ddio_out_1_altera_gpio_151_pqwimxi.vhd" -work ip_arria10_e3sge3_ddio_out_1_altera_gpio_151 + vcom "$IP_DIR/ip_arria10_e3sge3_ddio_out_1.vhd" } else { @@ -60,3 +59,5 @@ if {$IPMODEL=="PHY"} { vcom "$SIM_DIR/tb_ip_arria10_e3sge3_ddio_1.vhd" } + + diff --git a/libraries/technology/ip_arria10_e3sge3/ddio/generate_ip.sh b/libraries/technology/ip_arria10_e3sge3/ddio/generate_ip.sh index 361db703aa0f36e8d302cc30bb31b039ff3c8102..03a3952849ec9bceb03b4d36233664baa97de349 100755 --- a/libraries/technology/ip_arria10_e3sge3/ddio/generate_ip.sh +++ b/libraries/technology/ip_arria10_e3sge3/ddio/generate_ip.sh @@ -39,5 +39,5 @@ #qsys-generate --help # Only generate the source IP -qsys-generate ip_arria10_e3sge3_ddio_in_1.qsys --synthesis=VHDL --simulation=VHDL --output-directory=generated_in -qsys-generate ip_arria10_e3sge3_ddio_out_1.qsys --synthesis=VHDL --simulation=VHDL --output-directory=generated_out +qsys-generate ip_arria10_e3sge3_ddio_in_1.qsys --synthesis=VHDL --simulation=VHDL --output-directory=generated +qsys-generate ip_arria10_e3sge3_ddio_out_1.qsys --synthesis=VHDL --simulation=VHDL --output-directory=generated diff --git a/libraries/technology/ip_arria10_e3sge3/tse_sgmii_gx/compile_ip.tcl b/libraries/technology/ip_arria10_e3sge3/tse_sgmii_gx/compile_ip.tcl index 39992bea6f8b17ce89f0ff2dc2e09fd412c06edb..7cd200e2a02739befc8219e71717431d7e9f912c 100644 --- a/libraries/technology/ip_arria10_e3sge3/tse_sgmii_gx/compile_ip.tcl +++ b/libraries/technology/ip_arria10_e3sge3/tse_sgmii_gx/compile_ip.tcl @@ -60,8 +60,8 @@ vmap ip_arria10_e3sge3_tse_sgmii_gx_altera_eth_tse_151 ./wor vlog -sv "$IP_DIR/../altera_xcvr_native_a10_151/sim/alt_xcvr_native_prbs_accum.sv" -L altera_common_sv_packages -work ip_arria10_e3sge3_tse_sgmii_gx_altera_xcvr_native_a10_151 vlog -sv "$IP_DIR/../altera_xcvr_native_a10_151/sim/alt_xcvr_native_odi_accel.sv" -L altera_common_sv_packages -work ip_arria10_e3sge3_tse_sgmii_gx_altera_xcvr_native_a10_151 vlog -sv "$IP_DIR/../altera_xcvr_native_a10_151/sim/alt_xcvr_native_rcfg_arb.sv" -L altera_common_sv_packages -work ip_arria10_e3sge3_tse_sgmii_gx_altera_xcvr_native_a10_151 - vlog -sv "$IP_DIR/../altera_xcvr_native_a10_151/sim/ip_arria10_e3sge3_tse_sgmii_gx_altera_xcvr_native_a10_151_htqgx4q.sv" -L altera_common_sv_packages -work ip_arria10_e3sge3_tse_sgmii_gx_altera_xcvr_native_a10_151 - vlog -sv "$IP_DIR/../altera_xcvr_native_a10_151/sim/alt_xcvr_native_rcfg_opt_logic_htqgx4q.sv" -L altera_common_sv_packages -work ip_arria10_e3sge3_tse_sgmii_gx_altera_xcvr_native_a10_151 + vlog -sv "$IP_DIR/../altera_xcvr_native_a10_151/sim/ip_arria10_e3sge3_tse_sgmii_gx_altera_xcvr_native_a10_151_iy2mgzi.sv" -L altera_common_sv_packages -work ip_arria10_e3sge3_tse_sgmii_gx_altera_xcvr_native_a10_151 + vlog -sv "$IP_DIR/../altera_xcvr_native_a10_151/sim/alt_xcvr_native_rcfg_opt_logic_iy2mgzi.sv" -L altera_common_sv_packages -work ip_arria10_e3sge3_tse_sgmii_gx_altera_xcvr_native_a10_151 vlog "$IP_DIR/../altera_eth_tse_pcs_pma_nf_phyip_151/sim/mentor/altera_eth_tse_pcs_pma_nf_phyip.v" -work ip_arria10_e3sge3_tse_sgmii_gx_altera_eth_tse_pcs_pma_nf_phyip_151 vlog "$IP_DIR/../altera_eth_tse_pcs_pma_nf_phyip_151/sim/mentor/altera_tse_align_sync.v" -work ip_arria10_e3sge3_tse_sgmii_gx_altera_eth_tse_pcs_pma_nf_phyip_151 vlog "$IP_DIR/../altera_eth_tse_pcs_pma_nf_phyip_151/sim/mentor/altera_tse_dec10b8b.v" -work ip_arria10_e3sge3_tse_sgmii_gx_altera_eth_tse_pcs_pma_nf_phyip_151 @@ -249,5 +249,5 @@ vmap ip_arria10_e3sge3_tse_sgmii_gx_altera_eth_tse_151 ./wor vlog "$IP_DIR/../altera_eth_tse_mac_151/sim/mentor/altera_tse_ecc_enc_x30.v" -work ip_arria10_e3sge3_tse_sgmii_gx_altera_eth_tse_mac_151 vlog "$IP_DIR/../altera_eth_tse_mac_151/sim/mentor/altera_tse_ecc_enc_x30_wrapper.v" -work ip_arria10_e3sge3_tse_sgmii_gx_altera_eth_tse_mac_151 vlog "$IP_DIR/../altera_eth_tse_mac_151/sim/mentor/altera_tse_ecc_status_crosser.v" -work ip_arria10_e3sge3_tse_sgmii_gx_altera_eth_tse_mac_151 - vlog "$IP_DIR/../altera_eth_tse_151/sim/ip_arria10_e3sge3_tse_sgmii_gx_altera_eth_tse_151_ixscpxa.v" -work ip_arria10_e3sge3_tse_sgmii_gx_altera_eth_tse_151 + vlog "$IP_DIR/../altera_eth_tse_151/sim/ip_arria10_e3sge3_tse_sgmii_gx_altera_eth_tse_151_w6pypty.v" -work ip_arria10_e3sge3_tse_sgmii_gx_altera_eth_tse_151 vcom "$IP_DIR/ip_arria10_e3sge3_tse_sgmii_gx.vhd" diff --git a/libraries/technology/ip_arria10_e3sge3/tse_sgmii_gx/hdllib.cfg b/libraries/technology/ip_arria10_e3sge3/tse_sgmii_gx/hdllib.cfg index 6bae35fba1f0e3f6fea4c57259b2e46dee679c48..08b93719dc0476c7c07404d2e49af4de685e5daf 100644 --- a/libraries/technology/ip_arria10_e3sge3/tse_sgmii_gx/hdllib.cfg +++ b/libraries/technology/ip_arria10_e3sge3/tse_sgmii_gx/hdllib.cfg @@ -1,5 +1,5 @@ hdl_lib_name = ip_arria10_e3sge3_tse_sgmii_gx -hdl_library_clause_name = ip_arria10_e3sge3_tse_sgmii_gx_altera_eth_tse_150 +hdl_library_clause_name = ip_arria10_e3sge3_tse_sgmii_gx_altera_eth_tse_151 hdl_lib_uses_synth = common hdl_lib_uses_sim = diff --git a/libraries/technology/ip_arria10_e3sge3/tse_sgmii_lvds/compile_ip.tcl b/libraries/technology/ip_arria10_e3sge3/tse_sgmii_lvds/compile_ip.tcl index 587e93ec3e9c43caac6daf722f1ab1479a02b95c..e87dac9068b20dd85899eef7ec96310ee4803226 100644 --- a/libraries/technology/ip_arria10_e3sge3/tse_sgmii_lvds/compile_ip.tcl +++ b/libraries/technology/ip_arria10_e3sge3/tse_sgmii_lvds/compile_ip.tcl @@ -39,10 +39,11 @@ vmap ip_arria10_e3sge3_tse_sgmii_lvds_altera_eth_tse_avalon_arbiter_151 ./wo vmap ip_arria10_e3sge3_tse_sgmii_lvds_altera_eth_tse_mac_151 ./work/ vmap ip_arria10_e3sge3_tse_sgmii_lvds_altera_eth_tse_151 ./work/ - vlog -sv "$IP_DIR/../altera_lvds_core20_151/sim/ip_arria10_e3sge3_tse_sgmii_lvds_altera_lvds_core20_151_lnpe55i.sv" -work ip_arria10_e3sge3_tse_sgmii_lvds_altera_lvds_core20_151 + + vlog -sv "$IP_DIR/../altera_lvds_core20_151/sim/ip_arria10_e3sge3_tse_sgmii_lvds_altera_lvds_core20_151_56nfjoq.sv" -work ip_arria10_e3sge3_tse_sgmii_lvds_altera_lvds_core20_151 vlog -sv "$IP_DIR/../altera_lvds_core20_151/sim/altera_lvds_core20.sv" -work ip_arria10_e3sge3_tse_sgmii_lvds_altera_lvds_core20_151 vlog "$IP_DIR/../altera_lvds_core20_151/sim/altera_lvds_core20_pll.v" -work ip_arria10_e3sge3_tse_sgmii_lvds_altera_lvds_core20_151 - vlog -sv "$IP_DIR/../altera_lvds_core20_151/sim/ip_arria10_e3sge3_tse_sgmii_lvds_altera_lvds_core20_151_gpbqs4y.sv" -work ip_arria10_e3sge3_tse_sgmii_lvds_altera_lvds_core20_151 + vlog -sv "$IP_DIR/../altera_lvds_core20_151/sim/ip_arria10_e3sge3_tse_sgmii_lvds_altera_lvds_core20_151_lgv7ceq.sv" -work ip_arria10_e3sge3_tse_sgmii_lvds_altera_lvds_core20_151 vlog -sv "$IP_DIR/../altera_lvds_core20_151/sim/altera_lvds_core20.sv" -work ip_arria10_e3sge3_tse_sgmii_lvds_altera_lvds_core20_151 vlog "$IP_DIR/../altera_lvds_core20_151/sim/altera_lvds_core20_pll.v" -work ip_arria10_e3sge3_tse_sgmii_lvds_altera_lvds_core20_151 vlog "$IP_DIR/../altera_reset_controller_151/sim/altera_reset_controller.v" -work ip_arria10_e3sge3_tse_sgmii_lvds_altera_reset_controller_151 @@ -51,8 +52,8 @@ vmap ip_arria10_e3sge3_tse_sgmii_lvds_altera_eth_tse_151 ./wo vlog "$IP_DIR/../altera_eth_tse_nf_lvds_terminator_151/sim/mentor/altera_tse_reset_synchronizer.v" -work ip_arria10_e3sge3_tse_sgmii_lvds_altera_eth_tse_nf_lvds_terminator_151 vlog "$IP_DIR/../altera_eth_tse_nf_lvds_terminator_151/sim/mentor/altera_tse_nf_lvds_channel_reset_sequencer.v" -work ip_arria10_e3sge3_tse_sgmii_lvds_altera_eth_tse_nf_lvds_terminator_151 vlog "$IP_DIR/../altera_eth_tse_nf_lvds_terminator_151/sim/mentor/altera_tse_nf_lvds_common_reset_sequencer.v" -work ip_arria10_e3sge3_tse_sgmii_lvds_altera_eth_tse_nf_lvds_terminator_151 - vlog "$IP_DIR/../altera_lvds_151/sim/ip_arria10_e3sge3_tse_sgmii_lvds_altera_lvds_151_c7jevba.v" -work ip_arria10_e3sge3_tse_sgmii_lvds_altera_lvds_151 - vlog "$IP_DIR/../altera_lvds_151/sim/ip_arria10_e3sge3_tse_sgmii_lvds_altera_lvds_151_lae6doy.v" -work ip_arria10_e3sge3_tse_sgmii_lvds_altera_lvds_151 + vlog "$IP_DIR/../altera_lvds_151/sim/ip_arria10_e3sge3_tse_sgmii_lvds_altera_lvds_151_4n7sgkq.v" -work ip_arria10_e3sge3_tse_sgmii_lvds_altera_lvds_151 + vlog "$IP_DIR/../altera_lvds_151/sim/ip_arria10_e3sge3_tse_sgmii_lvds_altera_lvds_151_6qqk7py.v" -work ip_arria10_e3sge3_tse_sgmii_lvds_altera_lvds_151 vlog "$IP_DIR/../altera_eth_tse_pcs_pma_nf_lvds_151/sim/mentor/altera_eth_tse_pcs_pma_nf_lvds.v" -work ip_arria10_e3sge3_tse_sgmii_lvds_altera_eth_tse_pcs_pma_nf_lvds_151 vlog "$IP_DIR/../altera_eth_tse_pcs_pma_nf_lvds_151/sim/mentor/altera_tse_align_sync.v" -work ip_arria10_e3sge3_tse_sgmii_lvds_altera_eth_tse_pcs_pma_nf_lvds_151 vlog "$IP_DIR/../altera_eth_tse_pcs_pma_nf_lvds_151/sim/mentor/altera_tse_dec10b8b.v" -work ip_arria10_e3sge3_tse_sgmii_lvds_altera_eth_tse_pcs_pma_nf_lvds_151 @@ -241,5 +242,5 @@ vmap ip_arria10_e3sge3_tse_sgmii_lvds_altera_eth_tse_151 ./wo vlog "$IP_DIR/../altera_eth_tse_mac_151/sim/mentor/altera_tse_ecc_enc_x30.v" -work ip_arria10_e3sge3_tse_sgmii_lvds_altera_eth_tse_mac_151 vlog "$IP_DIR/../altera_eth_tse_mac_151/sim/mentor/altera_tse_ecc_enc_x30_wrapper.v" -work ip_arria10_e3sge3_tse_sgmii_lvds_altera_eth_tse_mac_151 vlog "$IP_DIR/../altera_eth_tse_mac_151/sim/mentor/altera_tse_ecc_status_crosser.v" -work ip_arria10_e3sge3_tse_sgmii_lvds_altera_eth_tse_mac_151 - vlog "$IP_DIR/../altera_eth_tse_151/sim/ip_arria10_e3sge3_tse_sgmii_lvds_altera_eth_tse_151_jjd52za.v" -work ip_arria10_e3sge3_tse_sgmii_lvds_altera_eth_tse_151 + vlog "$IP_DIR/../altera_eth_tse_151/sim/ip_arria10_e3sge3_tse_sgmii_lvds_altera_eth_tse_151_6kz2wlq.v" -work ip_arria10_e3sge3_tse_sgmii_lvds_altera_eth_tse_151 vcom "$IP_DIR/ip_arria10_e3sge3_tse_sgmii_lvds.vhd" diff --git a/libraries/technology/ip_arria10_e3sge3/tse_sgmii_lvds/hdllib.cfg b/libraries/technology/ip_arria10_e3sge3/tse_sgmii_lvds/hdllib.cfg index 25c96095a0b279937690a462cb7a7e943d45ced5..e8b3d4351add0c8fd7b030a896d9ee64a79eabdf 100644 --- a/libraries/technology/ip_arria10_e3sge3/tse_sgmii_lvds/hdllib.cfg +++ b/libraries/technology/ip_arria10_e3sge3/tse_sgmii_lvds/hdllib.cfg @@ -1,5 +1,5 @@ hdl_lib_name = ip_arria10_e3sge3_tse_sgmii_lvds -hdl_library_clause_name = ip_arria10_e3sge3_tse_sgmii_lvds_altera_eth_tse_150 +hdl_library_clause_name = ip_arria10_e3sge3_tse_sgmii_lvds_altera_eth_tse_151 hdl_lib_uses_synth = common hdl_lib_uses_sim = diff --git a/libraries/technology/memory/hdllib.cfg b/libraries/technology/memory/hdllib.cfg index 5a499a051328fb15579076ab5732a31f740309b5..5795b280e8a92747ba4fee5345162ff33c01d52b 100644 --- a/libraries/technology/memory/hdllib.cfg +++ b/libraries/technology/memory/hdllib.cfg @@ -1,6 +1,6 @@ hdl_lib_name = tech_memory hdl_library_clause_name = tech_memory_lib -hdl_lib_uses_synth = technology ip_stratixiv_ram ip_arria10_ram +hdl_lib_uses_synth = technology ip_stratixiv_ram ip_arria10_ram ip_arria10_e3sge3_ram hdl_lib_uses_sim = hdl_lib_technology = diff --git a/libraries/technology/memory/tech_memory_component_pkg.vhd b/libraries/technology/memory/tech_memory_component_pkg.vhd index ba20fd2824ad181920e61841115628bf8effd9c9..c256264184796041d180a79632bf4d224a4a62c7 100644 --- a/libraries/technology/memory/tech_memory_component_pkg.vhd +++ b/libraries/technology/memory/tech_memory_component_pkg.vhd @@ -234,4 +234,98 @@ PACKAGE tech_memory_component_pkg IS ); END COMPONENT; + ----------------------------------------------------------------------------- + -- ip_arria10_e3sge3 + ----------------------------------------------------------------------------- + + COMPONENT ip_arria10_e3sge3_ram_crwk_crw IS + GENERIC ( + g_adr_a_w : NATURAL := 5; + g_dat_a_w : NATURAL := 32; + g_adr_b_w : NATURAL := 4; + g_dat_b_w : NATURAL := 64; + g_nof_words_a : NATURAL := 2**5; + g_nof_words_b : NATURAL := 2**4; + g_rd_latency : NATURAL := 1; -- choose 1 or 2 + g_init_file : STRING := "UNUSED" + ); + PORT + ( + address_a : IN STD_LOGIC_VECTOR (g_adr_a_w-1 DOWNTO 0); + address_b : IN STD_LOGIC_VECTOR (g_adr_b_w-1 DOWNTO 0); + clk_a : IN STD_LOGIC := '1'; + clk_b : IN STD_LOGIC ; + data_a : IN STD_LOGIC_VECTOR (g_dat_a_w-1 DOWNTO 0); + data_b : IN STD_LOGIC_VECTOR (g_dat_b_w-1 DOWNTO 0); + wren_a : IN STD_LOGIC := '0'; + wren_b : IN STD_LOGIC := '0'; + q_a : OUT STD_LOGIC_VECTOR (g_dat_a_w-1 DOWNTO 0); + q_b : OUT STD_LOGIC_VECTOR (g_dat_b_w-1 DOWNTO 0) + ); + END COMPONENT; + + COMPONENT ip_arria10_e3sge3_ram_crw_crw IS + GENERIC ( + g_inferred : BOOLEAN := FALSE; + g_adr_w : NATURAL := 5; + g_dat_w : NATURAL := 8; + g_nof_words : NATURAL := 2**5; + g_rd_latency : NATURAL := 1; -- choose 1 or 2 + g_init_file : STRING := "UNUSED" + ); + PORT + ( + address_a : IN STD_LOGIC_VECTOR (g_adr_w-1 DOWNTO 0); + address_b : IN STD_LOGIC_VECTOR (g_adr_w-1 DOWNTO 0); + clk_a : IN STD_LOGIC := '1'; + clk_b : IN STD_LOGIC ; + data_a : IN STD_LOGIC_VECTOR (g_dat_w-1 DOWNTO 0); + data_b : IN STD_LOGIC_VECTOR (g_dat_w-1 DOWNTO 0); + wren_a : IN STD_LOGIC := '0'; + wren_b : IN STD_LOGIC := '0'; + q_a : OUT STD_LOGIC_VECTOR (g_dat_w-1 DOWNTO 0); + q_b : OUT STD_LOGIC_VECTOR (g_dat_w-1 DOWNTO 0) + ); + END COMPONENT; + + COMPONENT ip_arria10_e3sge3_ram_cr_cw IS + GENERIC ( + g_inferred : BOOLEAN := FALSE; + g_adr_w : NATURAL := 5; + g_dat_w : NATURAL := 8; + g_nof_words : NATURAL := 2**5; + g_rd_latency : NATURAL := 1; -- choose 1 or 2 + g_init_file : STRING := "UNUSED" + ); + PORT + ( + data : IN STD_LOGIC_VECTOR (g_dat_w-1 DOWNTO 0); + rdaddress : IN STD_LOGIC_VECTOR (g_adr_w-1 DOWNTO 0); + rdclk : IN STD_LOGIC ; + wraddress : IN STD_LOGIC_VECTOR (g_adr_w-1 DOWNTO 0); + wrclk : IN STD_LOGIC := '1'; + wren : IN STD_LOGIC := '0'; + q : OUT STD_LOGIC_VECTOR (g_dat_w-1 DOWNTO 0) + ); + END COMPONENT; + + COMPONENT ip_arria10_e3sge3_ram_r_w IS + GENERIC ( + g_inferred : BOOLEAN := FALSE; + g_adr_w : NATURAL := 5; + g_dat_w : NATURAL := 8; + g_nof_words : NATURAL := 2**5; + g_rd_latency : NATURAL := 1; -- choose 1 or 2 + g_init_file : STRING := "UNUSED" + ); + PORT ( + clk : IN STD_LOGIC := '1'; + data : IN STD_LOGIC_VECTOR(g_dat_w-1 DOWNTO 0) := (OTHERS=>'0'); + rdaddress : IN STD_LOGIC_VECTOR(g_adr_w-1 DOWNTO 0) := (OTHERS=>'0'); + wraddress : IN STD_LOGIC_VECTOR(g_adr_w-1 DOWNTO 0) := (OTHERS=>'0'); + wren : IN STD_LOGIC := '0'; + q : OUT STD_LOGIC_VECTOR(g_dat_w-1 DOWNTO 0) + ); + END COMPONENT; + END tech_memory_component_pkg; diff --git a/libraries/technology/memory/tech_memory_ram_cr_cw.vhd b/libraries/technology/memory/tech_memory_ram_cr_cw.vhd index 9b8ed180c25c4a65092235fbf4e0788ce63ac246..b29ac59a5f18abfb91f756120df0e4184a8b9edf 100644 --- a/libraries/technology/memory/tech_memory_ram_cr_cw.vhd +++ b/libraries/technology/memory/tech_memory_ram_cr_cw.vhd @@ -68,10 +68,10 @@ BEGIN PORT MAP (data, rdaddress, rdclock, wraddress, wrclock, wren, q); END GENERATE; --- gen_ip_arria10_e3sge3 : IF g_technology=c_tech_arria10_e3sge3 GENERATE --- u0 : ip_arria10_e3sge3_ram_cr_cw --- GENERIC MAP (FALSE, g_adr_w, g_dat_w, g_nof_words, g_rd_latency, g_init_file) --- PORT MAP (data, rdaddress, rdclock, wraddress, wrclock, wren, q); --- END GENERATE; + gen_ip_arria10_e3sge3 : IF g_technology=c_tech_arria10_e3sge3 GENERATE + u0 : ip_arria10_e3sge3_ram_cr_cw + GENERIC MAP (FALSE, g_adr_w, g_dat_w, g_nof_words, g_rd_latency, g_init_file) + PORT MAP (data, rdaddress, rdclock, wraddress, wrclock, wren, q); + END GENERATE; END ARCHITECTURE; diff --git a/libraries/technology/memory/tech_memory_ram_crw_crw.vhd b/libraries/technology/memory/tech_memory_ram_crw_crw.vhd index f41db436d04ec5570163b0b8f4cee07cb4631ef0..097ccb328963f92ca96c45e7e7565a5b3d0fa55c 100644 --- a/libraries/technology/memory/tech_memory_ram_crw_crw.vhd +++ b/libraries/technology/memory/tech_memory_ram_crw_crw.vhd @@ -75,10 +75,10 @@ BEGIN PORT MAP (address_a, address_b, clock_a, clock_b, data_a, data_b, wren_a, wren_b, q_a, q_b); END GENERATE; --- gen_ip_arria10_e3sge3 : IF g_technology=c_tech_arria10_e3sge3 GENERATE --- u0 : ip_arria10_e3sge3_ram_crw_crw --- GENERIC MAP (FALSE, g_adr_w, g_dat_w, g_nof_words, g_rd_latency, g_init_file) --- PORT MAP (address_a, address_b, clock_a, clock_b, data_a, data_b, wren_a, wren_b, q_a, q_b); --- END GENERATE; + gen_ip_arria10_e3sge3 : IF g_technology=c_tech_arria10_e3sge3 GENERATE + u0 : ip_arria10_e3sge3_ram_crw_crw + GENERIC MAP (FALSE, g_adr_w, g_dat_w, g_nof_words, g_rd_latency, g_init_file) + PORT MAP (address_a, address_b, clock_a, clock_b, data_a, data_b, wren_a, wren_b, q_a, q_b); + END GENERATE; END ARCHITECTURE; diff --git a/libraries/technology/memory/tech_memory_ram_crwk_crw.vhd b/libraries/technology/memory/tech_memory_ram_crwk_crw.vhd index b76b5635f2d8b561bd70000a62b595dfa25974ef..33cff6d845eb84c7cbd712e7549df4bae429785a 100644 --- a/libraries/technology/memory/tech_memory_ram_crwk_crw.vhd +++ b/libraries/technology/memory/tech_memory_ram_crwk_crw.vhd @@ -77,10 +77,10 @@ BEGIN PORT MAP (address_a, address_b, clock_a, clock_b, data_a, data_b, wren_a, wren_b, q_a, q_b); END GENERATE; --- gen_ip_arria10_e3sge3 : IF g_technology=c_tech_arria10_e3sge3 GENERATE --- u0 : ip_arria10_e3sge3_ram_crwk_crw --- GENERIC MAP (g_adr_a_w, g_dat_a_w, g_adr_b_w, g_dat_b_w, g_nof_words_a, g_nof_words_b, g_rd_latency, g_init_file) --- PORT MAP (address_a, address_b, clock_a, clock_b, data_a, data_b, wren_a, wren_b, q_a, q_b); --- END GENERATE; + gen_ip_arria10_e3sge3 : IF g_technology=c_tech_arria10_e3sge3 GENERATE + u0 : ip_arria10_e3sge3_ram_crwk_crw + GENERIC MAP (g_adr_a_w, g_dat_a_w, g_adr_b_w, g_dat_b_w, g_nof_words_a, g_nof_words_b, g_rd_latency, g_init_file) + PORT MAP (address_a, address_b, clock_a, clock_b, data_a, data_b, wren_a, wren_b, q_a, q_b); + END GENERATE; END ARCHITECTURE; diff --git a/libraries/technology/memory/tech_memory_ram_r_w.vhd b/libraries/technology/memory/tech_memory_ram_r_w.vhd index 5d57f377e18e85117209e2c94932aa2774c295ee..088235bcbaf441e55edf0a71c6f8e014f60ebc90 100644 --- a/libraries/technology/memory/tech_memory_ram_r_w.vhd +++ b/libraries/technology/memory/tech_memory_ram_r_w.vhd @@ -65,10 +65,10 @@ BEGIN PORT MAP (clock, data, rdaddress, wraddress, wren, q); END GENERATE; --- gen_ip_arria10_e3sge3 : IF g_technology=c_tech_arria10_e3sge3 GENERATE --- u0 : ip_arria10_e3sge3_ram_r_w --- GENERIC MAP (FALSE, g_adr_w, g_dat_w, g_nof_words, 1, g_init_file) --- PORT MAP (clock, data, rdaddress, wraddress, wren, q); --- END GENERATE; + gen_ip_arria10_e3sge3 : IF g_technology=c_tech_arria10_e3sge3 GENERATE + u0 : ip_arria10_e3sge3_ram_r_w + GENERIC MAP (FALSE, g_adr_w, g_dat_w, g_nof_words, 1, g_init_file) + PORT MAP (clock, data, rdaddress, wraddress, wren, q); + END GENERATE; END ARCHITECTURE; diff --git a/libraries/technology/memory/tech_memory_rom_r.vhd b/libraries/technology/memory/tech_memory_rom_r.vhd index 998e0ad2d00dad0b9345404af94c50c865d3615a..4a9d4ffc5da853ab3416942a45f03e54b673daa3 100644 --- a/libraries/technology/memory/tech_memory_rom_r.vhd +++ b/libraries/technology/memory/tech_memory_rom_r.vhd @@ -69,18 +69,18 @@ BEGIN ); END GENERATE; --- gen_ip_arria10_e3sge3 : IF g_technology=c_tech_arria10_e3sge3 GENERATE --- -- use ip_arria10_e3sge3_ram_r_w as ROM --- u0 : ip_arria10_e3sge3_ram_r_w --- GENERIC MAP (FALSE, g_adr_w, g_dat_w, g_nof_words, 1, g_init_file) --- PORT MAP ( --- clk => clock, --- --data => , --- rdaddress => address, --- --wraddress => , --- --wren => , --- q => q --- ); --- END GENERATE; + gen_ip_arria10_e3sge3 : IF g_technology=c_tech_arria10_e3sge3 GENERATE + -- use ip_arria10_e3sge3_ram_r_w as ROM + u0 : ip_arria10_e3sge3_ram_r_w + GENERIC MAP (FALSE, g_adr_w, g_dat_w, g_nof_words, 1, g_init_file) + PORT MAP ( + clk => clock, + --data => , + rdaddress => address, + --wraddress => , + --wren => , + q => q + ); + END GENERATE; END ARCHITECTURE; diff --git a/libraries/technology/tse/hdllib.cfg b/libraries/technology/tse/hdllib.cfg index 4ddb613a83f1db2a3cd11bebf65c5841f251aa0c..6f10a65cf0c14be5d70a1c6ff6de618c6dd3882f 100644 --- a/libraries/technology/tse/hdllib.cfg +++ b/libraries/technology/tse/hdllib.cfg @@ -14,6 +14,7 @@ synth_files = tech_tse_pkg.vhd tech_tse_stratixiv.vhd tech_tse_arria10.vhd + tech_tse_arria10_e3sge3.vhd tech_tse.vhd tb_tech_tse_pkg.vhd diff --git a/libraries/technology/tse/tech_tse.vhd b/libraries/technology/tse/tech_tse.vhd index 9678f33b4953d0a6bfcfa02e14f8436da176e1fd..f91fa4c3690d2d3dfce1b2a8bc72bf280c209267 100644 --- a/libraries/technology/tse/tech_tse.vhd +++ b/libraries/technology/tse/tech_tse.vhd @@ -102,5 +102,18 @@ BEGIN eth_txp, eth_rxp, tse_led); END GENERATE; + + gen_ip_arria10_e3sge3 : IF g_technology=c_tech_arria10_e3sge3 GENERATE + u0 : ENTITY work.tech_tse_arria10_e3sge3 + GENERIC MAP (g_ETH_PHY) + PORT MAP (mm_rst, mm_clk, eth_clk, tx_snk_clk, rx_src_clk, + mm_sla_in, mm_sla_out, + tx_snk_in, tx_snk_out, + tx_mac_in, tx_mac_out, + rx_src_in, rx_src_out, + rx_mac_out, + eth_txp, eth_rxp, + tse_led); + END GENERATE; END ARCHITECTURE; diff --git a/libraries/technology/tse/tech_tse_arria10_e3sge3.vhd b/libraries/technology/tse/tech_tse_arria10_e3sge3.vhd new file mode 100644 index 0000000000000000000000000000000000000000..ed5297387bfbddf8f28a4fca964b7349bff04d5b --- /dev/null +++ b/libraries/technology/tse/tech_tse_arria10_e3sge3.vhd @@ -0,0 +1,256 @@ +------------------------------------------------------------------------------- +-- +-- 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, dp_lib; +USE IEEE.std_logic_1164.ALL; +USE work.tech_tse_component_pkg.ALL; +USE work.tech_tse_pkg.ALL; +USE common_lib.common_mem_pkg.ALL; +USE dp_lib.dp_stream_pkg.ALL; + +-- Declare IP libraries to ensure default binding in simulation. The IP library clause is ignored by synthesis. +LIBRARY ip_arria10_e3sge3_tse_sgmii_lvds_altera_eth_tse_151; +LIBRARY ip_arria10_e3sge3_tse_sgmii_gx_altera_eth_tse_151; + +ENTITY tech_tse_arria10_e3sge3 IS + GENERIC ( + g_ETH_PHY : STRING := "LVDS" -- "LVDS" (default): uses LVDS IOs for ctrl_unb2_board, "XCVR": uses tranceiver PHY + ); + PORT ( + -- Clocks and reset + mm_rst : IN STD_LOGIC; + mm_clk : IN STD_LOGIC; + eth_clk : IN STD_LOGIC; + tx_snk_clk : IN STD_LOGIC; + rx_src_clk : IN STD_LOGIC; + + -- Memory Mapped Slave + mm_sla_in : IN t_mem_mosi; + mm_sla_out : OUT t_mem_miso; + + -- MAC transmit interface + -- . ST sink + tx_snk_in : IN t_dp_sosi; + tx_snk_out : OUT t_dp_siso; + -- . MAC specific + tx_mac_in : IN t_tech_tse_tx_mac; + tx_mac_out : OUT t_tech_tse_tx_mac; + + -- MAC receive interface + -- . ST Source + rx_src_in : IN t_dp_siso; + rx_src_out : OUT t_dp_sosi; + -- . MAC specific + rx_mac_out : OUT t_tech_tse_rx_mac; + + -- PHY interface + eth_txp : OUT STD_LOGIC; + eth_rxp : IN STD_LOGIC; + + tse_led : OUT t_tech_tse_led + ); +END tech_tse_arria10_e3sge3; + +ARCHITECTURE str OF tech_tse_arria10_e3sge3 IS + + SIGNAL ff_tx_mod : STD_LOGIC_VECTOR(c_tech_tse_empty_w-1 DOWNTO 0); + + SIGNAL ff_rx_out : t_dp_sosi := c_dp_sosi_rst; + +BEGIN + + -- Default frame level flow control + tx_snk_out.xon <= '1'; + + -- Force empty = 0 when eop = '0' to avoid TSE MAC bug of missing two bytes when empty = 2 (observed with v9.1) + ff_tx_mod <= tx_snk_in.empty(c_tech_tse_empty_w-1 DOWNTO 0) WHEN tx_snk_in.eop='1' ELSE (OTHERS=>'0'); + + -- Force unused bits and fields in rx_src_out to c_dp_sosi_rst to avoid confusing 'X' in wave window + rx_src_out <= ff_rx_out; + + u_LVDS_tse: IF g_ETH_PHY = "LVDS" GENERATE + + u_tse : ip_arria10_e3sge3_tse_sgmii_lvds + -- The tse_sgmii_lvds needs to be regenerated if its parameters are changed. + -- . ENABLE_SHIFT16 = 1 : Align packet headers to 32 bit, useful for Nios data handling + -- . ENABLE_SUP_ADDR = 0 : An extra MAC addresses can e.g. be used as service MAC for tests + -- . ENA_HASH = 0 : A multi cast hash table can be used to address all nodes at once + -- . STAT_CNT_ENA = 0 : PHY statistics counts are useful for monitoring, but not realy needed + -- . EG_FIFO = 256 : Tx FIFO depth in nof 32 bit words (256 --> 1 M9K) + -- . ING_FIFO = 256 : Rx FIFO depth in nof 32 bit words (256 --> 1 M9K) + -- . ENABLE_SGMII = 0 : PHY access 1000BASE-X + PORT MAP ( + -- MAC transmit interface + -- . Avalon ST + ff_tx_clk => tx_snk_clk, + ff_tx_rdy => tx_snk_out.ready, + ff_tx_data => tx_snk_in.data(c_tech_tse_data_w-1 DOWNTO 0), + ff_tx_wren => tx_snk_in.valid, + ff_tx_sop => tx_snk_in.sop, + ff_tx_eop => tx_snk_in.eop, + ff_tx_mod => ff_tx_mod, + ff_tx_err => tx_snk_in.err(0), + -- . MAC specific + ff_tx_crc_fwd => tx_mac_in.crc_fwd, -- when '0' MAC inserts CRC32 after eop + ff_tx_septy => tx_mac_out.septy, -- when '0' then tx FIFO goes above section-empty threshold + ff_tx_a_full => tx_mac_out.a_full, -- when '1' then tx FIFO goes above almost-full threshold + ff_tx_a_empty => tx_mac_out.a_empty, -- when '1' then tx FIFO goes below almost-empty threshold + tx_ff_uflow => tx_mac_out.uflow, -- when '1' then tx FIFO underflow + -- MAC receive interface + -- . Avalon ST + ff_rx_clk => rx_src_clk, + ff_rx_rdy => rx_src_in.ready, + ff_rx_data => ff_rx_out.data(c_tech_tse_data_w-1 DOWNTO 0), + ff_rx_dval => ff_rx_out.valid, + ff_rx_sop => ff_rx_out.sop, + ff_rx_eop => ff_rx_out.eop, + ff_rx_mod => ff_rx_out.empty(c_tech_tse_empty_w-1 DOWNTO 0), + rx_err => ff_rx_out.err(c_tech_tse_error_w-1 DOWNTO 0), -- [5] collision error (can only occur in half duplex mode) + -- [4] PHY error on GMII + -- [3] receive frame truncated due to FIFO overflow + -- [2] CRC-32 error + -- [1] invalid length + -- [0] = OR of [1:5] + -- . MAC specific + rx_err_stat => rx_mac_out.ethertype, -- [17,16] VLAN info, [15:0] Ethernet lentgh/type field + rx_frm_type => rx_mac_out.frm_type, -- [3]=VLAN, [2]=Broadcast, [1]=Multicast, [0]=Unicast + ff_rx_dsav => rx_mac_out.dsav, -- rx frame available, but not necessarily a complete frame + ff_rx_a_full => rx_mac_out.a_full, -- when '1' then rx FIFO goes above almost-full threshold + ff_rx_a_empty => rx_mac_out.a_empty, -- when '1' then rx FIFO goes below almost-empty threshold + -- Reset + reset => mm_rst, -- asynchronous reset (choose synchronous to mm_clk) + -- MM control interface + clk => mm_clk, + reg_addr => mm_sla_in.address(c_tech_tse_byte_addr_w-1 DOWNTO 2), + reg_data_out => mm_sla_out.rddata(c_tech_tse_data_w-1 DOWNTO 0), + reg_rd => mm_sla_in.rd, + reg_data_in => mm_sla_in.wrdata(c_tech_tse_data_w-1 DOWNTO 0), + reg_wr => mm_sla_in.wr, + reg_busy => mm_sla_out.waitrequest, + -- Status LEDs + led_an => tse_led.an, -- '1' = autonegation completed + led_link => tse_led.link, -- '1' = successful link synchronisation + led_disp_err => tse_led.disp_err, -- TBI character error + led_char_err => tse_led.char_err, -- TBI disparity error + -- crs and col are only available with the SGMII bridge + led_crs => tse_led.crs, -- carrier sense '1' when there is tx/rx activity on the line + led_col => tse_led.col, -- tx collision detected (always '0' for full duplex) + -- Serial 1.25 Gbps + rx_recovclkout => OPEN, + ref_clk => eth_clk, + txp => eth_txp, + rxp => eth_rxp + ); + + END GENERATE; + + u_XCVR_tse: IF g_ETH_PHY = "XCVR" GENERATE + + u_tse : ip_arria10_e3sge3_tse_sgmii_gx + -- The tse_sgmii_xcvr needs to be regenerated if its parameters are changed. + -- . ENABLE_SHIFT16 = 1 : Align packet headers to 32 bit, useful for Nios data handling + -- . ENABLE_SUP_ADDR = 0 : An extra MAC addresses can e.g. be used as service MAC for tests + -- . ENA_HASH = 0 : A multi cast hash table can be used to address all nodes at once + -- . STAT_CNT_ENA = 0 : PHY statistics counts are useful for monitoring, but not realy needed + -- . EG_FIFO = 2048 : Tx FIFO depth in nof 32 bit words (2048 --> 4 M9K) + -- . ING_FIFO = 2048 : Rx FIFO depth in nof 32 bit words (2048 --> 4 M9K) + -- . ENABLE_SGMII = 0 : PHY access 1000BASE-X + PORT MAP ( + -- MAC transmit interface + -- . Avalon ST + ff_tx_clk => tx_snk_clk, + ff_tx_rdy => tx_snk_out.ready, + ff_tx_data => tx_snk_in.data(c_tech_tse_data_w-1 DOWNTO 0), + ff_tx_wren => tx_snk_in.valid, + ff_tx_sop => tx_snk_in.sop, + ff_tx_eop => tx_snk_in.eop, + ff_tx_mod => ff_tx_mod, + ff_tx_err => tx_snk_in.err(0), + -- . MAC specific + ff_tx_crc_fwd => tx_mac_in.crc_fwd, -- when '0' MAC inserts CRC32 after eop + ff_tx_septy => tx_mac_out.septy, -- when '0' then tx FIFO goes above section-empty threshold + ff_tx_a_full => tx_mac_out.a_full, -- when '1' then tx FIFO goes above almost-full threshold + ff_tx_a_empty => tx_mac_out.a_empty, -- when '1' then tx FIFO goes below almost-empty threshold + tx_ff_uflow => tx_mac_out.uflow, -- when '1' then tx FIFO underflow + -- MAC receive interface + -- . Avalon ST + ff_rx_clk => rx_src_clk, + ff_rx_rdy => rx_src_in.ready, + ff_rx_data => ff_rx_out.data(c_tech_tse_data_w-1 DOWNTO 0), + ff_rx_dval => ff_rx_out.valid, + ff_rx_sop => ff_rx_out.sop, + ff_rx_eop => ff_rx_out.eop, + ff_rx_mod => ff_rx_out.empty(c_tech_tse_empty_w-1 DOWNTO 0), + rx_err => ff_rx_out.err(c_tech_tse_error_w-1 DOWNTO 0), -- [5] collision error (can only occur in half duplex mode) + -- [4] PHY error on GMII + -- [3] receive frame truncated due to FIFO overflow + -- [2] CRC-32 error + -- [1] invalid length + -- [0] = OR of [1:5] + -- . MAC specific + rx_err_stat => rx_mac_out.ethertype, -- [17,16] VLAN info, [15:0] Ethernet lentgh/type field + rx_frm_type => rx_mac_out.frm_type, -- [3]=VLAN, [2]=Broadcast, [1]=Multicast, [0]=Unicast + ff_rx_dsav => rx_mac_out.dsav, -- rx frame available, but not necessarily a complete frame + ff_rx_a_full => rx_mac_out.a_full, -- when '1' then rx FIFO goes above almost-full threshold + ff_rx_a_empty => rx_mac_out.a_empty, -- when '1' then rx FIFO goes below almost-empty threshold + -- Reset + reset => mm_rst, -- asynchronous reset (choose synchronous to mm_clk) + -- MM control interface + clk => mm_clk, + reg_addr => mm_sla_in.address(c_tech_tse_byte_addr_w-1 DOWNTO 2), + reg_data_out => mm_sla_out.rddata(c_tech_tse_data_w-1 DOWNTO 0), + reg_rd => mm_sla_in.rd, + reg_data_in => mm_sla_in.wrdata(c_tech_tse_data_w-1 DOWNTO 0), + reg_wr => mm_sla_in.wr, + reg_busy => mm_sla_out.waitrequest, + -- Status LEDs + led_an => tse_led.an, -- '1' = autonegation completed + led_link => tse_led.link, -- '1' = successful link synchronisation + led_disp_err => tse_led.disp_err, -- TBI character error + led_char_err => tse_led.char_err, -- TBI disparity error + -- crs and col are only available with the SGMII bridge + led_crs => tse_led.crs, -- carrier sense '1' when there is tx/rx activity on the line + led_col => tse_led.col, -- tx collision detected (always '0' for full duplex) + -- Serial 1.25 Gbps + rx_recovclkout => OPEN, + ref_clk => eth_clk, + txp => eth_txp, + rxp => eth_rxp, + + -- GX connections ???? + tx_serial_clk => (others => '0'), -- : in std_logic_vector(0 downto 0) := (others => '0'); -- tx_serial_clk.clk + rx_cdr_refclk => '0', -- : in std_logic := '0'; -- rx_cdr_refclk.clk + tx_analogreset => (others => '0'), -- : in std_logic_vector(0 downto 0) := (others => '0'); -- tx_analogreset.tx_analogreset + tx_digitalreset => (others => '0'), -- : in std_logic_vector(0 downto 0) := (others => '0'); -- tx_digitalreset.tx_digitalreset + rx_analogreset => (others => '0'), -- : in std_logic_vector(0 downto 0) := (others => '0'); -- rx_analogreset.rx_analogreset + rx_digitalreset => (others => '0'), -- : in std_logic_vector(0 downto 0) := (others => '0'); -- rx_digitalreset.rx_digitalreset + tx_cal_busy => OPEN, -- : out std_logic_vector(0 downto 0); -- tx_cal_busy.tx_cal_busy + rx_cal_busy => OPEN, -- : out std_logic_vector(0 downto 0); -- rx_cal_busy.rx_cal_busy + rx_set_locktodata => (others => '0'), -- : in std_logic_vector(0 downto 0) := (others => '0'); -- rx_set_locktodata.rx_set_locktodata + rx_set_locktoref => (others => '0'), -- : in std_logic_vector(0 downto 0) := (others => '0'); -- rx_set_locktoref.rx_set_locktoref + rx_is_lockedtoref => OPEN, -- : out std_logic_vector(0 downto 0); -- rx_is_lockedtoref.rx_is_lockedtoref + rx_is_lockedtodata => OPEN -- : out std_logic_vector(0 downto 0) -- rx_is_lockedtodata.rx_is_lockedtodata + ); + + END GENERATE; + +END str; diff --git a/libraries/technology/tse/tech_tse_component_pkg.vhd b/libraries/technology/tse/tech_tse_component_pkg.vhd index 459beec99fffc3ca8e580e558dd082d974442614..f01da8f8fc86d9e2a948d7fd41cfdc0d8290c0d4 100644 --- a/libraries/technology/tse/tech_tse_component_pkg.vhd +++ b/libraries/technology/tse/tech_tse_component_pkg.vhd @@ -260,4 +260,124 @@ PACKAGE tech_tse_component_pkg IS ); END COMPONENT; + + ------------------------------------------------------------------------------ + -- ip_arria10 + ------------------------------------------------------------------------------ + + -- Copied from $RADIOHDL/libraries/technology/ip_arria10_e3sge3/tse_sgmii_lvds/generated/sim/ip_arria10_e3sge3_tse_sgmii_lvds.vhd + COMPONENT ip_arria10_e3sge3_tse_sgmii_lvds IS + PORT ( + reg_data_out : out std_logic_vector(31 downto 0); -- control_port.readdata + reg_rd : in std_logic := '0'; -- .read + reg_data_in : in std_logic_vector(31 downto 0) := (others => '0'); -- .writedata + reg_wr : in std_logic := '0'; -- .write + reg_busy : out std_logic; -- .waitrequest + reg_addr : in std_logic_vector(7 downto 0) := (others => '0'); -- .address + clk : in std_logic := '0'; -- control_port_clock_connection.clk + ff_tx_crc_fwd : in std_logic := '0'; -- mac_misc_connection.ff_tx_crc_fwd + ff_tx_septy : out std_logic; -- .ff_tx_septy + tx_ff_uflow : out std_logic; -- .tx_ff_uflow + ff_tx_a_full : out std_logic; -- .ff_tx_a_full + ff_tx_a_empty : out std_logic; -- .ff_tx_a_empty + rx_err_stat : out std_logic_vector(17 downto 0); -- .rx_err_stat + rx_frm_type : out std_logic_vector(3 downto 0); -- .rx_frm_type + ff_rx_dsav : out std_logic; -- .ff_rx_dsav + ff_rx_a_full : out std_logic; -- .ff_rx_a_full + ff_rx_a_empty : out std_logic; -- .ff_rx_a_empty + ref_clk : in std_logic := '0'; -- pcs_ref_clk_clock_connection.clk + ff_rx_data : out std_logic_vector(31 downto 0); -- receive.data + ff_rx_eop : out std_logic; -- .endofpacket + rx_err : out std_logic_vector(5 downto 0); -- .error + ff_rx_mod : out std_logic_vector(1 downto 0); -- .empty + ff_rx_rdy : in std_logic := '0'; -- .ready + ff_rx_sop : out std_logic; -- .startofpacket + ff_rx_dval : out std_logic; -- .valid + ff_rx_clk : in std_logic := '0'; -- receive_clock_connection.clk + reset : in std_logic := '0'; -- reset_connection.reset + rx_recovclkout : out std_logic; -- serdes_control_connection.export + rxp : in std_logic := '0'; -- serial_connection.rxp_0 + txp : out std_logic; -- .txp_0 + led_crs : out std_logic; -- status_led_connection.crs + led_link : out std_logic; -- .link + led_col : out std_logic; -- .col + led_an : out std_logic; -- .an + led_char_err : out std_logic; -- .char_err + led_disp_err : out std_logic; -- .disp_err + ff_tx_data : in std_logic_vector(31 downto 0) := (others => '0'); -- transmit.data + ff_tx_eop : in std_logic := '0'; -- .endofpacket + ff_tx_err : in std_logic := '0'; -- .error + ff_tx_mod : in std_logic_vector(1 downto 0) := (others => '0'); -- .empty + ff_tx_rdy : out std_logic; -- .ready + ff_tx_sop : in std_logic := '0'; -- .startofpacket + ff_tx_wren : in std_logic := '0'; -- .valid + ff_tx_clk : in std_logic := '0' -- transmit_clock_connection.clk + ); + END COMPONENT; + + + -- Copied from $RADIOHDL/libraries/technology/ip_arria10_e3sge3/tse_sgmii_gx/generated/sim/ip_arria10_e3sge3_tse_sgmii_gx.vhd + COMPONENT ip_arria10_e3sge3_tse_sgmii_gx IS + PORT ( + reg_data_out : out std_logic_vector(31 downto 0); -- control_port.readdata + reg_rd : in std_logic := '0'; -- .read + reg_data_in : in std_logic_vector(31 downto 0) := (others => '0'); -- .writedata + reg_wr : in std_logic := '0'; -- .write + reg_busy : out std_logic; -- .waitrequest + reg_addr : in std_logic_vector(7 downto 0) := (others => '0'); -- .address + clk : in std_logic := '0'; -- control_port_clock_connection.clk + ff_tx_crc_fwd : in std_logic := '0'; -- mac_misc_connection.ff_tx_crc_fwd + ff_tx_septy : out std_logic; -- .ff_tx_septy + tx_ff_uflow : out std_logic; -- .tx_ff_uflow + ff_tx_a_full : out std_logic; -- .ff_tx_a_full + ff_tx_a_empty : out std_logic; -- .ff_tx_a_empty + rx_err_stat : out std_logic_vector(17 downto 0); -- .rx_err_stat + rx_frm_type : out std_logic_vector(3 downto 0); -- .rx_frm_type + ff_rx_dsav : out std_logic; -- .ff_rx_dsav + ff_rx_a_full : out std_logic; -- .ff_rx_a_full + ff_rx_a_empty : out std_logic; -- .ff_rx_a_empty + ref_clk : in std_logic := '0'; -- pcs_ref_clk_clock_connection.clk + ff_rx_data : out std_logic_vector(31 downto 0); -- receive.data + ff_rx_eop : out std_logic; -- .endofpacket + rx_err : out std_logic_vector(5 downto 0); -- .error + ff_rx_mod : out std_logic_vector(1 downto 0); -- .empty + ff_rx_rdy : in std_logic := '0'; -- .ready + ff_rx_sop : out std_logic; -- .startofpacket + ff_rx_dval : out std_logic; -- .valid + ff_rx_clk : in std_logic := '0'; -- receive_clock_connection.clk + reset : in std_logic := '0'; -- reset_connection.reset + rx_analogreset : in std_logic_vector(0 downto 0) := (others => '0'); -- rx_analogreset.rx_analogreset + rx_cal_busy : out std_logic_vector(0 downto 0); -- rx_cal_busy.rx_cal_busy + rx_cdr_refclk : in std_logic := '0'; -- rx_cdr_refclk.clk + rx_digitalreset : in std_logic_vector(0 downto 0) := (others => '0'); -- rx_digitalreset.rx_digitalreset + rx_is_lockedtodata : out std_logic_vector(0 downto 0); -- rx_is_lockedtodata.rx_is_lockedtodata + rx_is_lockedtoref : out std_logic_vector(0 downto 0); -- rx_is_lockedtoref.rx_is_lockedtoref + rx_set_locktodata : in std_logic_vector(0 downto 0) := (others => '0'); -- rx_set_locktodata.rx_set_locktodata + rx_set_locktoref : in std_logic_vector(0 downto 0) := (others => '0'); -- rx_set_locktoref.rx_set_locktoref + rx_recovclkout : out std_logic; -- serdes_control_connection.export + rxp : in std_logic := '0'; -- serial_connection.rxp + txp : out std_logic; -- .txp + led_crs : out std_logic; -- status_led_connection.crs + led_link : out std_logic; -- .link + led_panel_link : out std_logic; -- .panel_link + led_col : out std_logic; -- .col + led_an : out std_logic; -- .an + led_char_err : out std_logic; -- .char_err + led_disp_err : out std_logic; -- .disp_err + ff_tx_data : in std_logic_vector(31 downto 0) := (others => '0'); -- transmit.data + ff_tx_eop : in std_logic := '0'; -- .endofpacket + ff_tx_err : in std_logic := '0'; -- .error + ff_tx_mod : in std_logic_vector(1 downto 0) := (others => '0'); -- .empty + ff_tx_rdy : out std_logic; -- .ready + ff_tx_sop : in std_logic := '0'; -- .startofpacket + ff_tx_wren : in std_logic := '0'; -- .valid + ff_tx_clk : in std_logic := '0'; -- transmit_clock_connection.clk + tx_analogreset : in std_logic_vector(0 downto 0) := (others => '0'); -- tx_analogreset.tx_analogreset + tx_cal_busy : out std_logic_vector(0 downto 0); -- tx_cal_busy.tx_cal_busy + tx_digitalreset : in std_logic_vector(0 downto 0) := (others => '0'); -- tx_digitalreset.tx_digitalreset + tx_serial_clk : in std_logic_vector(0 downto 0) := (others => '0') -- tx_serial_clk.clk + ); + END COMPONENT; + + END tech_tse_component_pkg;