diff --git a/applications/compaan/designs/compaan_io_test_fn/hdllib.cfg b/applications/compaan/designs/compaan_io_test_fn/hdllib.cfg new file mode 100644 index 0000000000000000000000000000000000000000..8287132848ef8003a95bdba875ad3acd4d6b7da3 --- /dev/null +++ b/applications/compaan/designs/compaan_io_test_fn/hdllib.cfg @@ -0,0 +1,36 @@ +hdl_lib_name = compaan_io_test_fn +hdl_library_clause_name = compaan_io_test_fn_lib +hdl_lib_uses_synth = common unb1_board dp eth tech_tse diag tr_10GbE mm io_test compaan_io_test_bn +hdl_lib_technology = ip_stratixiv + +synth_files = + src/vhdl/mmm_compaan_io_test_fn.vhd + src/vhdl/compaan_wrapper.vhd + src/vhdl/compaan_io_test_fn.vhd + + $RADIOHDL/applications/compaan/designs/compaan_unb1_10g_bg_db/src/vhdl/mmm_compaan_unb1_10g_bg_db.vhd + $RADIOHDL/applications/compaan/designs/compaan_unb1_10g_bg_db/src/vhdl/compaan_unb1_10g_bg_db.vhd + + +test_bench_files = + tb/vhdl/tb_io_test_fn.vhd + +[modelsim_project_file] + + +[quartus_project_file] +synth_top_level_entity = + +quartus_copy_files = quartus/qsys_compaan_io_test_fn.qsys . + +quartus_qsf_files = + $RADIOHDL/boards/uniboard1/libraries/unb1_board/quartus/unb1_board.qsf + +quartus_tcl_files = + quartus/compaan_io_test_fn_pins.tcl + +quartus_qip_files = $HDL_BUILD_DIR/unb1/quartus/compaan_io_test_fn/qsys_compaan_io_test_fn/synthesis/qsys_compaan_io_test_fn.qip + +quartus_sdc_files = + $RADIOHDL/boards/uniboard1/libraries/unb1_board/quartus/unb1_board.sdc + diff --git a/applications/compaan/designs/compaan_io_test_fn/mmm.cfg b/applications/compaan/designs/compaan_io_test_fn/mmm.cfg new file mode 100644 index 0000000000000000000000000000000000000000..7a9272ffc7cc58ae0cf031534104dbf685212fe1 --- /dev/null +++ b/applications/compaan/designs/compaan_io_test_fn/mmm.cfg @@ -0,0 +1,25 @@ +mmm_name = compaan_io_test_fn + +board_select = unb1 + +custom_peripherals = + reg_dp_offload_tx 1 1 + reg_dp_offload_tx_hdr_dat 1 6 + reg_dp_offload_tx_hdr_ovr 1 5 + reg_dp_offload_rx_hdr_dat 1 7 + reg_mdio_0 1 3 + reg_mdio_1 1 3 + reg_mdio_2 1 3 + reg_tr_10gbe 1 15 + reg_tr_xaui 1 11 + reg_diagnostics 1 6 + reg_tr_nonbonded 1 4 + reg_compaan 1 19 + +input_clks = mm_clk + +synth_master = qsys + +vhdl_output_path = src/vhdl/ + + diff --git a/applications/compaan/designs/compaan_io_test_fn/quartus/compaan_io_test_fn_pins.tcl b/applications/compaan/designs/compaan_io_test_fn/quartus/compaan_io_test_fn_pins.tcl new file mode 100644 index 0000000000000000000000000000000000000000..3f7525ef7f1abbcc92e19575497bc440a10d471d --- /dev/null +++ b/applications/compaan/designs/compaan_io_test_fn/quartus/compaan_io_test_fn_pins.tcl @@ -0,0 +1,31 @@ +############################################################################### +# +# Copyright (C) 2014 +# ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.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/>. +# +############################################################################### + +source $::env(UNB)/Firmware/designs/unb_common/src/tcl/COMMON_NODE_general_pins.tcl +source $::env(UNB)/Firmware/designs/unb_common/src/tcl/COMMON_NODE_other_pins.tcl +source $::env(UNB)/Firmware/designs/unb_common/src/tcl/COMMON_NODE_1Gbe_pins.tcl +source $::env(UNB)/Firmware/designs/unb_common/src/tcl/COMMON_NODE_sensor_pins.tcl +source $::env(UNB)/Firmware/designs/unb_common/src/tcl/COMMON_NODE_mesh_tr_clk_pin.tcl +source $::env(UNB)/Firmware/designs/unb_common/src/tcl/COMMON_NODE_mesh_tr_nocmu_pins.tcl +source $::env(UNB)/Firmware/designs/unb_common/src/tcl/pins_tr_front_pcs_clk.tcl +source $::env(UNB)/Firmware/designs/unb_common/src/tcl/pins_tr_front_pcs_0.tcl + + diff --git a/applications/compaan/designs/compaan_io_test_fn/quartus/qsys_compaan_io_test_fn.qsys b/applications/compaan/designs/compaan_io_test_fn/quartus/qsys_compaan_io_test_fn.qsys new file mode 100644 index 0000000000000000000000000000000000000000..bb32e7a0e8abd2e7f082949a7c6a268bd5ff0e0c --- /dev/null +++ b/applications/compaan/designs/compaan_io_test_fn/quartus/qsys_compaan_io_test_fn.qsys @@ -0,0 +1,2209 @@ +<?xml version="1.0" encoding="UTF-8"?> +<system name="$${FILENAME}"> + <component + name="$${FILENAME}" + displayName="$${FILENAME}" + version="1.0" + description="" + tags="" + categories="System" /> + <parameter name="bonusData"><![CDATA[bonusData +{ + element $${FILENAME} + { + } + element jtag_uart_0.avalon_jtag_slave + { + datum baseAddress + { + value = "1600"; + type = "long"; + } + } + element avs_eth_0 + { + datum _sortIndex + { + value = "0"; + type = "int"; + } + datum sopceditor_expanded + { + value = "0"; + type = "boolean"; + } + } + element clk_input + { + datum _sortIndex + { + value = "18"; + type = "int"; + } + datum sopceditor_expanded + { + value = "0"; + type = "boolean"; + } + } + element cpu_0 + { + datum _sortIndex + { + value = "2"; + type = "int"; + } + datum sopceditor_expanded + { + value = "0"; + type = "boolean"; + } + } + element cpu_0.jtag_debug_module + { + datum baseAddress + { + value = "14336"; + type = "long"; + } + } + element jtag_uart_0 + { + datum _sortIndex + { + value = "5"; + type = "int"; + } + datum megawizard_uipreferences + { + value = "{}"; + type = "String"; + } + datum sopceditor_expanded + { + value = "0"; + type = "boolean"; + } + } + element reg_tr_10GbE.mem + { + datum _tags + { + value = ""; + type = "String"; + } + datum baseAddress + { + value = "262144"; + type = "long"; + } + } + element reg_dp_offload_tx_hdr_dat.mem + { + datum baseAddress + { + value = "256"; + type = "long"; + } + } + element pio_pps.mem + { + datum baseAddress + { + value = "1608"; + type = "long"; + } + } + element reg_unb_sens.mem + { + datum baseAddress + { + value = "1536"; + type = "long"; + } + } + element pio_system_info.mem + { + datum _lockedAddress + { + value = "1"; + type = "boolean"; + } + datum baseAddress + { + value = "0"; + type = "long"; + } + } + element reg_diagnostics.mem + { + datum baseAddress + { + value = "1024"; + type = "long"; + } + } + element reg_tr_nonbonded.mem + { + datum baseAddress + { + value = "1344"; + type = "long"; + } + } + element reg_mdio_0.mem + { + datum baseAddress + { + value = "1504"; + type = "long"; + } + } + element reg_tr_xaui.mem + { + datum baseAddress + { + value = "16384"; + type = "long"; + } + } + element reg_mdio_2.mem + { + datum baseAddress + { + value = "1472"; + type = "long"; + } + } + element reg_dp_offload_tx_hdr_ovr.mem + { + datum baseAddress + { + value = "128"; + type = "long"; + } + } + element reg_mdio_1.mem + { + datum baseAddress + { + value = "1440"; + type = "long"; + } + } + element reg_compaan.mem + { + datum baseAddress + { + value = "2097152"; + type = "long"; + } + } + element rom_system_info.mem + { + datum _lockedAddress + { + value = "1"; + type = "boolean"; + } + datum baseAddress + { + value = "4096"; + type = "long"; + } + } + element reg_dp_offload_tx.mem + { + datum baseAddress + { + value = "1616"; + type = "long"; + } + } + element reg_dp_offload_rx_hdr_dat.mem + { + datum baseAddress + { + value = "512"; + type = "long"; + } + } + element reg_wdi.mem + { + datum _lockedAddress + { + value = "1"; + type = "boolean"; + } + datum baseAddress + { + value = "12288"; + type = "long"; + } + } + element avs_eth_0.mms_ram + { + datum baseAddress + { + value = "24576"; + type = "long"; + } + } + element avs_eth_0.mms_reg + { + datum baseAddress + { + value = "1280"; + type = "long"; + } + } + element avs_eth_0.mms_tse + { + datum baseAddress + { + value = "8192"; + type = "long"; + } + } + element onchip_memory2_0 + { + datum _sortIndex + { + value = "4"; + type = "int"; + } + datum megawizard_uipreferences + { + value = "{output_language=VHDL, output_directory=D:\\svnroot\\UniBoard_FP7\\UniBoard\\trunk\\Firmware\\designs\\unb_unb1_minimal\\build\\synth\\quartus}"; + type = "String"; + } + datum sopceditor_expanded + { + value = "0"; + type = "boolean"; + } + } + element pio_debug_wave + { + datum _sortIndex + { + value = "3"; + type = "int"; + } + datum sopceditor_expanded + { + value = "0"; + type = "boolean"; + } + } + element pio_pps + { + datum _sortIndex + { + value = "13"; + type = "int"; + } + datum sopceditor_expanded + { + value = "0"; + type = "boolean"; + } + } + element pio_system_info + { + datum _sortIndex + { + value = "1"; + type = "int"; + } + datum sopceditor_expanded + { + value = "0"; + type = "boolean"; + } + } + element pio_wdi + { + datum _sortIndex + { + value = "6"; + type = "int"; + } + datum megawizard_uipreferences + { + value = "{}"; + type = "String"; + } + datum sopceditor_expanded + { + value = "0"; + type = "boolean"; + } + } + element avs_eth_0.ram_write + { + datum _tags + { + value = ""; + type = "String"; + } + } + element reg_compaan + { + datum _sortIndex + { + value = "24"; + type = "int"; + } + datum sopceditor_expanded + { + value = "0"; + type = "boolean"; + } + } + element reg_diagnostics + { + datum _sortIndex + { + value = "21"; + type = "int"; + } + datum sopceditor_expanded + { + value = "0"; + type = "boolean"; + } + } + element reg_dp_offload_rx_hdr_dat + { + datum _sortIndex + { + value = "11"; + type = "int"; + } + datum sopceditor_expanded + { + value = "0"; + type = "boolean"; + } + } + element reg_dp_offload_tx + { + datum _sortIndex + { + value = "20"; + type = "int"; + } + datum sopceditor_expanded + { + value = "0"; + type = "boolean"; + } + } + element reg_dp_offload_tx_hdr_dat + { + datum _sortIndex + { + value = "19"; + type = "int"; + } + datum sopceditor_expanded + { + value = "0"; + type = "boolean"; + } + } + element reg_dp_offload_tx_hdr_ovr + { + datum _sortIndex + { + value = "22"; + type = "int"; + } + datum sopceditor_expanded + { + value = "0"; + type = "boolean"; + } + } + element reg_mdio_0 + { + datum _sortIndex + { + value = "8"; + type = "int"; + } + datum sopceditor_expanded + { + value = "0"; + type = "boolean"; + } + } + element reg_mdio_1 + { + datum _sortIndex + { + value = "9"; + type = "int"; + } + datum sopceditor_expanded + { + value = "0"; + type = "boolean"; + } + } + element reg_mdio_2 + { + datum _sortIndex + { + value = "10"; + type = "int"; + } + datum sopceditor_expanded + { + value = "0"; + type = "boolean"; + } + } + element reg_tr_10GbE + { + datum _sortIndex + { + value = "16"; + type = "int"; + } + datum sopceditor_expanded + { + value = "0"; + type = "boolean"; + } + } + element reg_tr_nonbonded + { + datum _sortIndex + { + value = "23"; + type = "int"; + } + datum sopceditor_expanded + { + value = "0"; + type = "boolean"; + } + } + element reg_tr_xaui + { + datum _sortIndex + { + value = "17"; + type = "int"; + } + datum sopceditor_expanded + { + value = "0"; + type = "boolean"; + } + } + element reg_unb_sens + { + datum _sortIndex + { + value = "12"; + type = "int"; + } + datum sopceditor_expanded + { + value = "0"; + type = "boolean"; + } + } + element reg_wdi + { + datum _sortIndex + { + value = "14"; + type = "int"; + } + datum sopceditor_expanded + { + value = "0"; + type = "boolean"; + } + } + element rom_system_info + { + datum _sortIndex + { + value = "15"; + type = "int"; + } + datum sopceditor_expanded + { + value = "0"; + type = "boolean"; + } + } + element onchip_memory2_0.s1 + { + datum _lockedAddress + { + value = "1"; + type = "boolean"; + } + datum baseAddress + { + value = "131072"; + type = "long"; + } + } + element pio_wdi.s1 + { + datum baseAddress + { + value = "1584"; + type = "long"; + } + } + element pio_debug_wave.s1 + { + datum baseAddress + { + value = "1568"; + type = "long"; + } + } + element timer_0.s1 + { + datum baseAddress + { + value = "1408"; + type = "long"; + } + } + element reg_wdi.system_reset + { + datum _tags + { + value = ""; + type = "String"; + } + } + element timer_0 + { + datum _sortIndex + { + value = "7"; + type = "int"; + } + datum sopceditor_expanded + { + value = "0"; + type = "boolean"; + } + } + element reg_wdi.writedata + { + datum _tags + { + value = ""; + type = "String"; + } + } +} +]]></parameter> + <parameter name="clockCrossingAdapter" value="HANDSHAKE" /> + <parameter name="device" value="EP4SGX230KF40C2" /> + <parameter name="deviceFamily" value="STRATIXIV" /> + <parameter name="deviceSpeedGrade" value="" /> + <parameter name="fabricMode" value="QSYS" /> + <parameter name="generateLegacySim" value="false" /> + <parameter name="generationId" value="0" /> + <parameter name="globalResetBus" value="false" /> + <parameter name="hdlLanguage" value="VHDL" /> + <parameter name="maxAdditionalLatency" value="0" /> + <parameter name="projectName" value="" /> + <parameter name="sopcBorderPoints" value="false" /> + <parameter name="systemHash" value="1" /> + <parameter name="timeStamp" value="1475832231911" /> + <parameter name="useTestBenchNamingPattern" value="false" /> + <instanceScript></instanceScript> + <interface + name="pio_debug_wave_external_connection" + internal="pio_debug_wave.external_connection" + type="conduit" + dir="end"> + <port name="out_port_from_the_pio_debug_wave" internal="out_port" /> + </interface> + <interface + name="pio_wdi_external_connection" + internal="pio_wdi.external_connection" + type="conduit" + dir="end"> + <port name="out_port_from_the_pio_wdi" internal="out_port" /> + </interface> + <interface + name="reg_mdio_0_reset" + internal="reg_mdio_0.reset" + type="conduit" + dir="end" /> + <interface + name="reg_mdio_0_clk" + internal="reg_mdio_0.clk" + type="conduit" + dir="end" /> + <interface + name="reg_mdio_0_address" + internal="reg_mdio_0.address" + type="conduit" + dir="end" /> + <interface + name="reg_mdio_0_write" + internal="reg_mdio_0.write" + type="conduit" + dir="end" /> + <interface + name="reg_mdio_0_read" + internal="reg_mdio_0.read" + type="conduit" + dir="end" /> + <interface + name="reg_mdio_0_writedata" + internal="reg_mdio_0.writedata" + type="conduit" + dir="end" /> + <interface + name="reg_mdio_0_readdata" + internal="reg_mdio_0.readdata" + type="conduit" + dir="end" /> + <interface + name="reg_mdio_1_reset" + internal="reg_mdio_1.reset" + type="conduit" + dir="end" /> + <interface + name="reg_mdio_1_readdata" + internal="reg_mdio_1.readdata" + type="conduit" + dir="end" /> + <interface + name="reg_mdio_1_clk" + internal="reg_mdio_1.clk" + type="conduit" + dir="end" /> + <interface + name="reg_mdio_1_address" + internal="reg_mdio_1.address" + type="conduit" + dir="end" /> + <interface + name="reg_mdio_1_write" + internal="reg_mdio_1.write" + type="conduit" + dir="end" /> + <interface + name="reg_mdio_1_writedata" + internal="reg_mdio_1.writedata" + type="conduit" + dir="end" /> + <interface + name="reg_mdio_1_read" + internal="reg_mdio_1.read" + type="conduit" + dir="end" /> + <interface + name="reg_mdio_2_reset" + internal="reg_mdio_2.reset" + type="conduit" + dir="end" /> + <interface + name="reg_mdio_2_clk" + internal="reg_mdio_2.clk" + type="conduit" + dir="end" /> + <interface + name="reg_mdio_2_address" + internal="reg_mdio_2.address" + type="conduit" + dir="end" /> + <interface + name="reg_mdio_2_write" + internal="reg_mdio_2.write" + type="conduit" + dir="end" /> + <interface + name="reg_mdio_2_writedata" + internal="reg_mdio_2.writedata" + type="conduit" + dir="end" /> + <interface + name="reg_mdio_2_read" + internal="reg_mdio_2.read" + type="conduit" + dir="end" /> + <interface + name="reg_mdio_2_readdata" + internal="reg_mdio_2.readdata" + type="conduit" + dir="end" /> + <interface + name="reg_dp_offload_rx_hdr_dat_reset" + internal="reg_dp_offload_rx_hdr_dat.reset" + type="conduit" + dir="end" /> + <interface + name="reg_dp_offload_rx_hdr_dat_clk" + internal="reg_dp_offload_rx_hdr_dat.clk" + type="conduit" + dir="end" /> + <interface + name="reg_dp_offload_rx_hdr_dat_address" + internal="reg_dp_offload_rx_hdr_dat.address" + type="conduit" + dir="end" /> + <interface + name="reg_dp_offload_rx_hdr_dat_write" + internal="reg_dp_offload_rx_hdr_dat.write" + type="conduit" + dir="end" /> + <interface + name="reg_dp_offload_rx_hdr_dat_writedata" + internal="reg_dp_offload_rx_hdr_dat.writedata" + type="conduit" + dir="end" /> + <interface + name="reg_dp_offload_rx_hdr_dat_read" + internal="reg_dp_offload_rx_hdr_dat.read" + type="conduit" + dir="end" /> + <interface + name="reg_dp_offload_rx_hdr_dat_readdata" + internal="reg_dp_offload_rx_hdr_dat.readdata" + type="conduit" + dir="end" /> + <interface + name="eth1g_mm_rst" + internal="avs_eth_0.reset" + type="conduit" + dir="end" /> + <interface name="eth1g_mm_clk" internal="avs_eth_0.clk" type="conduit" dir="end" /> + <interface + name="eth1g_tse_address" + internal="avs_eth_0.tse_address" + type="conduit" + dir="end" /> + <interface + name="eth1g_tse_write" + internal="avs_eth_0.tse_write" + type="conduit" + dir="end" /> + <interface + name="eth1g_tse_read" + internal="avs_eth_0.tse_read" + type="conduit" + dir="end" /> + <interface + name="eth1g_tse_writedata" + internal="avs_eth_0.tse_writedata" + type="conduit" + dir="end" /> + <interface + name="eth1g_tse_readdata" + internal="avs_eth_0.tse_readdata" + type="conduit" + dir="end" /> + <interface + name="eth1g_tse_waitrequest" + internal="avs_eth_0.tse_waitrequest" + type="conduit" + dir="end" /> + <interface + name="eth1g_reg_address" + internal="avs_eth_0.reg_address" + type="conduit" + dir="end" /> + <interface + name="eth1g_reg_write" + internal="avs_eth_0.reg_write" + type="conduit" + dir="end" /> + <interface + name="eth1g_reg_read" + internal="avs_eth_0.reg_read" + type="conduit" + dir="end" /> + <interface + name="eth1g_reg_writedata" + internal="avs_eth_0.reg_writedata" + type="conduit" + dir="end" /> + <interface + name="eth1g_reg_readdata" + internal="avs_eth_0.reg_readdata" + type="conduit" + dir="end" /> + <interface + name="eth1g_ram_address" + internal="avs_eth_0.ram_address" + type="conduit" + dir="end" /> + <interface + name="eth1g_ram_write" + internal="avs_eth_0.ram_write" + type="conduit" + dir="end" /> + <interface + name="eth1g_ram_read" + internal="avs_eth_0.ram_read" + type="conduit" + dir="end" /> + <interface + name="eth1g_ram_writedata" + internal="avs_eth_0.ram_writedata" + type="conduit" + dir="end" /> + <interface + name="eth1g_ram_readdata" + internal="avs_eth_0.ram_readdata" + type="conduit" + dir="end" /> + <interface name="eth1g_irq" internal="avs_eth_0.irq" type="conduit" dir="end" /> + <interface + name="reg_unb_sens_reset" + internal="reg_unb_sens.reset" + type="conduit" + dir="end" /> + <interface + name="reg_unb_sens_clk" + internal="reg_unb_sens.clk" + type="conduit" + dir="end" /> + <interface + name="reg_unb_sens_address" + internal="reg_unb_sens.address" + type="conduit" + dir="end" /> + <interface + name="reg_unb_sens_write" + internal="reg_unb_sens.write" + type="conduit" + dir="end" /> + <interface + name="reg_unb_sens_writedata" + internal="reg_unb_sens.writedata" + type="conduit" + dir="end" /> + <interface + name="reg_unb_sens_read" + internal="reg_unb_sens.read" + type="conduit" + dir="end" /> + <interface + name="reg_unb_sens_readdata" + internal="reg_unb_sens.readdata" + type="conduit" + dir="end" /> + <interface + name="pio_system_info_reset" + internal="pio_system_info.reset" + type="conduit" + dir="end" /> + <interface + name="pio_system_info_clk" + internal="pio_system_info.clk" + type="conduit" + dir="end" /> + <interface + name="pio_system_info_address" + internal="pio_system_info.address" + type="conduit" + dir="end" /> + <interface + name="pio_system_info_write" + internal="pio_system_info.write" + type="conduit" + dir="end" /> + <interface + name="pio_system_info_writedata" + internal="pio_system_info.writedata" + type="conduit" + dir="end" /> + <interface + name="pio_system_info_read" + internal="pio_system_info.read" + type="conduit" + dir="end" /> + <interface + name="pio_system_info_readdata" + internal="pio_system_info.readdata" + type="conduit" + dir="end" /> + <interface + name="pio_pps_reset" + internal="pio_pps.reset" + type="conduit" + dir="end" /> + <interface name="pio_pps_clk" internal="pio_pps.clk" type="conduit" dir="end" /> + <interface + name="pio_pps_address" + internal="pio_pps.address" + type="conduit" + dir="end" /> + <interface + name="pio_pps_write" + internal="pio_pps.write" + type="conduit" + dir="end" /> + <interface + name="pio_pps_writedata" + internal="pio_pps.writedata" + type="conduit" + dir="end" /> + <interface name="pio_pps_read" internal="pio_pps.read" type="conduit" dir="end" /> + <interface + name="pio_pps_readdata" + internal="pio_pps.readdata" + type="conduit" + dir="end" /> + <interface + name="reg_wdi_reset" + internal="reg_wdi.reset" + type="conduit" + dir="end" /> + <interface name="reg_wdi_clk" internal="reg_wdi.clk" type="conduit" dir="end" /> + <interface + name="reg_wdi_address" + internal="reg_wdi.address" + type="conduit" + dir="end" /> + <interface + name="reg_wdi_write" + internal="reg_wdi.write" + type="conduit" + dir="end" /> + <interface + name="reg_wdi_writedata" + internal="reg_wdi.writedata" + type="conduit" + dir="end" /> + <interface name="reg_wdi_read" internal="reg_wdi.read" type="conduit" dir="end" /> + <interface + name="reg_wdi_readdata" + internal="reg_wdi.readdata" + type="conduit" + dir="end" /> + <interface + name="rom_system_info_reset" + internal="rom_system_info.reset" + type="conduit" + dir="end" /> + <interface + name="rom_system_info_clk" + internal="rom_system_info.clk" + type="conduit" + dir="end" /> + <interface + name="rom_system_info_address" + internal="rom_system_info.address" + type="conduit" + dir="end" /> + <interface + name="rom_system_info_write" + internal="rom_system_info.write" + type="conduit" + dir="end" /> + <interface + name="rom_system_info_writedata" + internal="rom_system_info.writedata" + type="conduit" + dir="end" /> + <interface + name="rom_system_info_read" + internal="rom_system_info.read" + type="conduit" + dir="end" /> + <interface + name="rom_system_info_readdata" + internal="rom_system_info.readdata" + type="conduit" + dir="end" /> + <interface + name="reg_tr_10gbe_reset" + internal="reg_tr_10GbE.reset" + type="conduit" + dir="end" /> + <interface + name="reg_tr_10gbe_clk" + internal="reg_tr_10GbE.clk" + type="conduit" + dir="end" /> + <interface + name="reg_tr_10gbe_address" + internal="reg_tr_10GbE.address" + type="conduit" + dir="end" /> + <interface + name="reg_tr_10gbe_write" + internal="reg_tr_10GbE.write" + type="conduit" + dir="end" /> + <interface + name="reg_tr_10gbe_writedata" + internal="reg_tr_10GbE.writedata" + type="conduit" + dir="end" /> + <interface + name="reg_tr_10gbe_read" + internal="reg_tr_10GbE.read" + type="conduit" + dir="end" /> + <interface + name="reg_tr_10gbe_readdata" + internal="reg_tr_10GbE.readdata" + type="conduit" + dir="end" /> + <interface + name="reg_tr_10gbe_waitrequest" + internal="reg_tr_10GbE.waitrequest" + type="conduit" + dir="end" /> + <interface + name="reg_tr_xaui_reset" + internal="reg_tr_xaui.reset" + type="conduit" + dir="end" /> + <interface + name="reg_tr_xaui_clk" + internal="reg_tr_xaui.clk" + type="conduit" + dir="end" /> + <interface + name="reg_tr_xaui_address" + internal="reg_tr_xaui.address" + type="conduit" + dir="end" /> + <interface + name="reg_tr_xaui_write" + internal="reg_tr_xaui.write" + type="conduit" + dir="end" /> + <interface + name="reg_tr_xaui_read" + internal="reg_tr_xaui.read" + type="conduit" + dir="end" /> + <interface + name="reg_tr_xaui_writedata" + internal="reg_tr_xaui.writedata" + type="conduit" + dir="end" /> + <interface + name="reg_tr_xaui_readdata" + internal="reg_tr_xaui.readdata" + type="conduit" + dir="end" /> + <interface + name="reg_tr_xaui_waitrequest" + internal="reg_tr_xaui.waitrequest" + type="conduit" + dir="end" /> + <interface name="clk_in" internal="clk_input.clk_in" type="clock" dir="end" /> + <interface + name="reset_in" + internal="clk_input.clk_in_reset" + type="reset" + dir="end" /> + <interface + name="reg_dp_offload_tx_hdr_dat_reset" + internal="reg_dp_offload_tx_hdr_dat.reset" + type="conduit" + dir="end" /> + <interface + name="reg_dp_offload_tx_hdr_dat_clk" + internal="reg_dp_offload_tx_hdr_dat.clk" + type="conduit" + dir="end" /> + <interface + name="reg_dp_offload_tx_hdr_dat_address" + internal="reg_dp_offload_tx_hdr_dat.address" + type="conduit" + dir="end" /> + <interface + name="reg_dp_offload_tx_hdr_dat_write" + internal="reg_dp_offload_tx_hdr_dat.write" + type="conduit" + dir="end" /> + <interface + name="reg_dp_offload_tx_hdr_dat_writedata" + internal="reg_dp_offload_tx_hdr_dat.writedata" + type="conduit" + dir="end" /> + <interface + name="reg_dp_offload_tx_hdr_dat_read" + internal="reg_dp_offload_tx_hdr_dat.read" + type="conduit" + dir="end" /> + <interface + name="reg_dp_offload_tx_hdr_dat_readdata" + internal="reg_dp_offload_tx_hdr_dat.readdata" + type="conduit" + dir="end" /> + <interface + name="reg_dp_offload_tx_reset" + internal="reg_dp_offload_tx.reset" + type="conduit" + dir="end" /> + <interface + name="reg_dp_offload_tx_clk" + internal="reg_dp_offload_tx.clk" + type="conduit" + dir="end" /> + <interface + name="reg_dp_offload_tx_address" + internal="reg_dp_offload_tx.address" + type="conduit" + dir="end" /> + <interface + name="reg_dp_offload_tx_write" + internal="reg_dp_offload_tx.write" + type="conduit" + dir="end" /> + <interface + name="reg_dp_offload_tx_writedata" + internal="reg_dp_offload_tx.writedata" + type="conduit" + dir="end" /> + <interface + name="reg_dp_offload_tx_read" + internal="reg_dp_offload_tx.read" + type="conduit" + dir="end" /> + <interface + name="reg_dp_offload_tx_readdata" + internal="reg_dp_offload_tx.readdata" + type="conduit" + dir="end" /> + <interface + name="reg_dp_offload_tx_hdr_ovr_reset" + internal="reg_dp_offload_tx_hdr_ovr.reset" + type="conduit" + dir="end" /> + <interface + name="reg_dp_offload_tx_hdr_ovr_clk" + internal="reg_dp_offload_tx_hdr_ovr.clk" + type="conduit" + dir="end" /> + <interface + name="reg_dp_offload_tx_hdr_ovr_address" + internal="reg_dp_offload_tx_hdr_ovr.address" + type="conduit" + dir="end" /> + <interface + name="reg_dp_offload_tx_hdr_ovr_write" + internal="reg_dp_offload_tx_hdr_ovr.write" + type="conduit" + dir="end" /> + <interface + name="reg_dp_offload_tx_hdr_ovr_writedata" + internal="reg_dp_offload_tx_hdr_ovr.writedata" + type="conduit" + dir="end" /> + <interface + name="reg_dp_offload_tx_hdr_ovr_read" + internal="reg_dp_offload_tx_hdr_ovr.read" + type="conduit" + dir="end" /> + <interface + name="reg_dp_offload_tx_hdr_ovr_readdata" + internal="reg_dp_offload_tx_hdr_ovr.readdata" + type="conduit" + dir="end" /> + <interface + name="reg_compaan_reset" + internal="reg_compaan.reset" + type="conduit" + dir="end" /> + <interface + name="reg_compaan_clk" + internal="reg_compaan.clk" + type="conduit" + dir="end" /> + <interface + name="reg_compaan_address" + internal="reg_compaan.address" + type="conduit" + dir="end" /> + <interface + name="reg_compaan_write" + internal="reg_compaan.write" + type="conduit" + dir="end" /> + <interface + name="reg_compaan_writedata" + internal="reg_compaan.writedata" + type="conduit" + dir="end" /> + <interface + name="reg_compaan_read" + internal="reg_compaan.read" + type="conduit" + dir="end" /> + <interface + name="reg_compaan_readdata" + internal="reg_compaan.readdata" + type="conduit" + dir="end" /> + <interface + name="reg_diagnostics_reset" + internal="reg_diagnostics.reset" + type="conduit" + dir="end" /> + <interface + name="reg_diagnostics_clk" + internal="reg_diagnostics.clk" + type="conduit" + dir="end" /> + <interface + name="reg_diagnostics_address" + internal="reg_diagnostics.address" + type="conduit" + dir="end" /> + <interface + name="reg_diagnostics_write" + internal="reg_diagnostics.write" + type="conduit" + dir="end" /> + <interface + name="reg_diagnostics_writedata" + internal="reg_diagnostics.writedata" + type="conduit" + dir="end" /> + <interface + name="reg_diagnostics_read" + internal="reg_diagnostics.read" + type="conduit" + dir="end" /> + <interface + name="reg_diagnostics_readdata" + internal="reg_diagnostics.readdata" + type="conduit" + dir="end" /> + <interface + name="reg_tr_nonbonded_reset" + internal="reg_tr_nonbonded.reset" + type="conduit" + dir="end" /> + <interface + name="reg_tr_nonbonded_clk" + internal="reg_tr_nonbonded.clk" + type="conduit" + dir="end" /> + <interface + name="reg_tr_nonbonded_address" + internal="reg_tr_nonbonded.address" + type="conduit" + dir="end" /> + <interface + name="reg_tr_nonbonded_write" + internal="reg_tr_nonbonded.write" + type="conduit" + dir="end" /> + <interface + name="reg_tr_nonbonded_writedata" + internal="reg_tr_nonbonded.writedata" + type="conduit" + dir="end" /> + <interface + name="reg_tr_nonbonded_read" + internal="reg_tr_nonbonded.read" + type="conduit" + dir="end" /> + <interface + name="reg_tr_nonbonded_readdata" + internal="reg_tr_nonbonded.readdata" + type="conduit" + dir="end" /> + <module + kind="altera_avalon_onchip_memory2" + version="11.1" + enabled="1" + name="onchip_memory2_0"> + <parameter name="allowInSystemMemoryContentEditor" value="false" /> + <parameter name="autoInitializationFileName">qsys_compaan_io_test_onchip_memory2_0</parameter> + <parameter name="blockType" value="M144K" /> + <parameter name="dataWidth" value="32" /> + <parameter name="deviceFamily" value="Stratix IV" /> + <parameter name="dualPort" value="false" /> + <parameter name="initMemContent" value="true" /> + <parameter name="initializationFileName" value="onchip_memory2_0" /> + <parameter name="instanceID" value="NONE" /> + <parameter name="memorySize" value="131072" /> + <parameter name="readDuringWriteMode" value="DONT_CARE" /> + <parameter name="simAllowMRAMContentsFile" value="false" /> + <parameter name="simMemInitOnlyFilename" value="0" /> + <parameter name="singleClockOperation" value="false" /> + <parameter name="slave1Latency" value="1" /> + <parameter name="slave2Latency" value="1" /> + <parameter name="useNonDefaultInitFile" value="true" /> + <parameter name="useShallowMemBlocks" value="false" /> + <parameter name="writable" value="true" /> + </module> + <module + kind="altera_avalon_jtag_uart" + version="11.1" + enabled="1" + name="jtag_uart_0"> + <parameter name="allowMultipleConnections" value="false" /> + <parameter name="hubInstanceID" value="0" /> + <parameter name="readBufferDepth" value="64" /> + <parameter name="readIRQThreshold" value="8" /> + <parameter name="simInputCharacterStream"><![CDATA[a +q]]></parameter> + <parameter name="simInteractiveOptions">INTERACTIVE_ASCII_OUTPUT</parameter> + <parameter name="useRegistersForReadBuffer" value="false" /> + <parameter name="useRegistersForWriteBuffer" value="false" /> + <parameter name="useRelativePathForSimFile" value="false" /> + <parameter name="writeBufferDepth" value="64" /> + <parameter name="writeIRQThreshold" value="8" /> + </module> + <module + kind="altera_avalon_pio" + version="11.1" + enabled="1" + name="pio_debug_wave"> + <parameter name="bitClearingEdgeCapReg" value="false" /> + <parameter name="bitModifyingOutReg" value="false" /> + <parameter name="captureEdge" value="false" /> + <parameter name="clockRate" value="25000000" /> + <parameter name="direction" value="Output" /> + <parameter name="edgeType" value="RISING" /> + <parameter name="generateIRQ" value="false" /> + <parameter name="irqType" value="LEVEL" /> + <parameter name="resetValue" value="0" /> + <parameter name="simDoTestBenchWiring" value="false" /> + <parameter name="simDrivenValue" value="0" /> + <parameter name="width" value="32" /> + </module> + <module kind="altera_avalon_pio" version="11.1" enabled="1" name="pio_wdi"> + <parameter name="bitClearingEdgeCapReg" value="false" /> + <parameter name="bitModifyingOutReg" value="false" /> + <parameter name="captureEdge" value="false" /> + <parameter name="clockRate" value="25000000" /> + <parameter name="direction" value="Output" /> + <parameter name="edgeType" value="RISING" /> + <parameter name="generateIRQ" value="false" /> + <parameter name="irqType" value="LEVEL" /> + <parameter name="resetValue" value="0" /> + <parameter name="simDoTestBenchWiring" value="false" /> + <parameter name="simDrivenValue" value="0" /> + <parameter name="width" value="1" /> + </module> + <module kind="altera_avalon_timer" version="11.1" enabled="1" name="timer_0"> + <parameter name="alwaysRun" value="true" /> + <parameter name="counterSize" value="32" /> + <parameter name="fixedPeriod" value="true" /> + <parameter name="period" value="1" /> + <parameter name="periodUnits" value="MSEC" /> + <parameter name="resetOutput" value="false" /> + <parameter name="snapshot" value="false" /> + <parameter name="systemFrequency" value="25000000" /> + <parameter name="timeoutPulseOutput" value="false" /> + <parameter name="timerPreset">SIMPLE_PERIODIC_INTERRUPT</parameter> + </module> + <module kind="altera_nios2_qsys" version="11.1" enabled="1" name="cpu_0"> + <parameter name="setting_showUnpublishedSettings" value="false" /> + <parameter name="setting_showInternalSettings" value="false" /> + <parameter name="setting_preciseSlaveAccessErrorException" value="false" /> + <parameter name="setting_preciseIllegalMemAccessException" value="false" /> + <parameter name="setting_preciseDivisionErrorException" value="false" /> + <parameter name="setting_performanceCounter" value="false" /> + <parameter name="setting_illegalMemAccessDetection" value="false" /> + <parameter name="setting_illegalInstructionsTrap" value="false" /> + <parameter name="setting_fullWaveformSignals" value="false" /> + <parameter name="setting_extraExceptionInfo" value="false" /> + <parameter name="setting_exportPCB" value="false" /> + <parameter name="setting_debugSimGen" value="false" /> + <parameter name="setting_clearXBitsLDNonBypass" value="true" /> + <parameter name="setting_bit31BypassDCache" value="true" /> + <parameter name="setting_bigEndian" value="false" /> + <parameter name="setting_bhtIndexPcOnly" value="false" /> + <parameter name="setting_avalonDebugPortPresent" value="false" /> + <parameter name="setting_alwaysEncrypt" value="true" /> + <parameter name="setting_allowFullAddressRange" value="false" /> + <parameter name="setting_activateTrace" value="true" /> + <parameter name="setting_activateTestEndChecker" value="false" /> + <parameter name="setting_activateMonitors" value="true" /> + <parameter name="setting_activateModelChecker" value="false" /> + <parameter name="setting_HDLSimCachesCleared" value="true" /> + <parameter name="setting_HBreakTest" value="false" /> + <parameter name="muldiv_divider" value="false" /> + <parameter name="mpu_useLimit" value="false" /> + <parameter name="mpu_enabled" value="false" /> + <parameter name="mmu_enabled" value="false" /> + <parameter name="mmu_autoAssignTlbPtrSz" value="true" /> + <parameter name="manuallyAssignCpuID" value="false" /> + <parameter name="debug_triggerArming" value="true" /> + <parameter name="debug_embeddedPLL" value="true" /> + <parameter name="debug_debugReqSignals" value="false" /> + <parameter name="debug_assignJtagInstanceID" value="false" /> + <parameter name="dcache_omitDataMaster" value="false" /> + <parameter name="cpuReset" value="false" /> + <parameter name="is_hardcopy_compatible" value="false" /> + <parameter name="setting_shadowRegisterSets" value="0" /> + <parameter name="mpu_numOfInstRegion" value="8" /> + <parameter name="mpu_numOfDataRegion" value="8" /> + <parameter name="mmu_TLBMissExcOffset" value="0" /> + <parameter name="debug_jtagInstanceID" value="0" /> + <parameter name="resetOffset" value="0" /> + <parameter name="exceptionOffset" value="32" /> + <parameter name="cpuID" value="0" /> + <parameter name="cpuID_stored" value="0" /> + <parameter name="breakOffset" value="32" /> + <parameter name="userDefinedSettings" value="" /> + <parameter name="resetSlave" value="onchip_memory2_0.s1" /> + <parameter name="mmu_TLBMissExcSlave" value="" /> + <parameter name="exceptionSlave" value="onchip_memory2_0.s1" /> + <parameter name="breakSlave">cpu_0.jtag_debug_module</parameter> + <parameter name="setting_perfCounterWidth" value="32" /> + <parameter name="setting_interruptControllerType" value="Internal" /> + <parameter name="setting_branchPredictionType" value="Automatic" /> + <parameter name="setting_bhtPtrSz" value="8" /> + <parameter name="muldiv_multiplierType" value="DSPBlock" /> + <parameter name="mpu_minInstRegionSize" value="12" /> + <parameter name="mpu_minDataRegionSize" value="12" /> + <parameter name="mmu_uitlbNumEntries" value="4" /> + <parameter name="mmu_udtlbNumEntries" value="6" /> + <parameter name="mmu_tlbPtrSz" value="7" /> + <parameter name="mmu_tlbNumWays" value="16" /> + <parameter name="mmu_processIDNumBits" value="8" /> + <parameter name="impl" value="Small" /> + <parameter name="icache_size" value="4096" /> + <parameter name="icache_ramBlockType" value="Automatic" /> + <parameter name="icache_numTCIM" value="0" /> + <parameter name="icache_burstType" value="None" /> + <parameter name="dcache_bursts" value="false" /> + <parameter name="debug_level" value="Level1" /> + <parameter name="debug_OCIOnchipTrace" value="_128" /> + <parameter name="dcache_size" value="2048" /> + <parameter name="dcache_ramBlockType" value="Automatic" /> + <parameter name="dcache_numTCDM" value="0" /> + <parameter name="dcache_lineSize" value="32" /> + <parameter name="instAddrWidth" value="18" /> + <parameter name="dataAddrWidth" value="22" /> + <parameter name="tightlyCoupledDataMaster0AddrWidth" value="1" /> + <parameter name="tightlyCoupledDataMaster1AddrWidth" value="1" /> + <parameter name="tightlyCoupledDataMaster2AddrWidth" value="1" /> + <parameter name="tightlyCoupledDataMaster3AddrWidth" value="1" /> + <parameter name="tightlyCoupledInstructionMaster0AddrWidth" value="1" /> + <parameter name="tightlyCoupledInstructionMaster1AddrWidth" value="1" /> + <parameter name="tightlyCoupledInstructionMaster2AddrWidth" value="1" /> + <parameter name="tightlyCoupledInstructionMaster3AddrWidth" value="1" /> + <parameter name="instSlaveMapParam"><![CDATA[<address-map><slave name='cpu_0.jtag_debug_module' start='0x3800' end='0x4000' /><slave name='onchip_memory2_0.s1' start='0x20000' end='0x40000' /></address-map>]]></parameter> + <parameter name="dataSlaveMapParam"><![CDATA[<address-map><slave name='pio_system_info.mem' start='0x0' end='0x80' /><slave name='reg_dp_offload_tx_hdr_ovr.mem' start='0x80' end='0x100' /><slave name='reg_dp_offload_tx_hdr_dat.mem' start='0x100' end='0x200' /><slave name='reg_dp_offload_rx_hdr_dat.mem' start='0x200' end='0x400' /><slave name='reg_diagnostics.mem' start='0x400' end='0x500' /><slave name='avs_eth_0.mms_reg' start='0x500' end='0x540' /><slave name='reg_tr_nonbonded.mem' start='0x540' end='0x580' /><slave name='timer_0.s1' start='0x580' end='0x5A0' /><slave name='reg_mdio_1.mem' start='0x5A0' end='0x5C0' /><slave name='reg_mdio_2.mem' start='0x5C0' end='0x5E0' /><slave name='reg_mdio_0.mem' start='0x5E0' end='0x600' /><slave name='reg_unb_sens.mem' start='0x600' end='0x620' /><slave name='pio_debug_wave.s1' start='0x620' end='0x630' /><slave name='pio_wdi.s1' start='0x630' end='0x640' /><slave name='jtag_uart_0.avalon_jtag_slave' start='0x640' end='0x648' /><slave name='pio_pps.mem' start='0x648' end='0x650' /><slave name='reg_dp_offload_tx.mem' start='0x650' end='0x658' /><slave name='rom_system_info.mem' start='0x1000' end='0x2000' /><slave name='avs_eth_0.mms_tse' start='0x2000' end='0x3000' /><slave name='reg_wdi.mem' start='0x3000' end='0x3008' /><slave name='cpu_0.jtag_debug_module' start='0x3800' end='0x4000' /><slave name='reg_tr_xaui.mem' start='0x4000' end='0x6000' /><slave name='avs_eth_0.mms_ram' start='0x6000' end='0x7000' /><slave name='onchip_memory2_0.s1' start='0x20000' end='0x40000' /><slave name='reg_tr_10GbE.mem' start='0x40000' end='0x60000' /><slave name='reg_compaan.mem' start='0x200000' end='0x400000' /></address-map>]]></parameter> + <parameter name="clockFrequency" value="25000000" /> + <parameter name="deviceFamilyName" value="Stratix IV" /> + <parameter name="internalIrqMaskSystemInfo" value="7" /> + <parameter name="customInstSlavesSystemInfo" value="<info/>" /> + <parameter name="deviceFeaturesSystemInfo">ADDRESS_STALL 1 CELL_LEVEL_BACK_ANNOTATION_DISABLED 0 COMPILER_SUPPORT 1 DSP 1 DSP_SHIFTER_BLOCK 1 DUMP_ASM_LAB_BITS_FOR_POWER 1 EMUL 0 ENABLE_ADVANCED_IO_ANALYSIS_GUI_FEATURES 1 EPCS 1 ESB 0 FAKE1 0 FAKE2 0 FAKE3 0 FITTER_USE_FALLING_EDGE_DELAY 1 GENERATE_DC_ON_CURRENT_WARNING_FOR_INTERNAL_CLAMPING_DIODE 1 HARDCOPY 0 HAS_18_BIT_MULTS 1 HAS_ACE_SUPPORT 1 HAS_ADJUSTABLE_OUTPUT_IO_TIMING_MEAS_POINT 1 HAS_ADVANCED_IO_INVERTED_CORNER 1 HAS_ADVANCED_IO_POWER_SUPPORT 1 HAS_ADVANCED_IO_TIMING_SUPPORT 1 HAS_ALM_SUPPORT 1 HAS_ATOM_AND_ROUTING_POWER_MODELED_TOGETHER 0 HAS_AUTO_DERIVE_CLOCK_UNCERTAINTY_SUPPORT 1 HAS_AUTO_FIT_SUPPORT 1 HAS_BALANCED_OPT_TECHNIQUE_SUPPORT 1 HAS_BENEFICIAL_SKEW_SUPPORT 1 HAS_BITLEVEL_DRIVE_STRENGTH_CONTROL 1 HAS_BSDL_FILE_GENERATION 1 HAS_CGA_SUPPORT 1 HAS_CHECK_NETLIST_SUPPORT 1 HAS_CLOCK_REGION_CHECKER_ENABLED 1 HAS_CORE_JUNCTION_TEMP_DERATING 0 HAS_CROSSTALK_SUPPORT 0 HAS_CUSTOM_REGION_SUPPORT 1 HAS_DATA_DRIVEN_ACVQ_HSSI_SUPPORT 0 HAS_DDB_FDI_SUPPORT 0 HAS_DESIGN_ANALYZER_SUPPORT 1 HAS_DETAILED_IO_RAIL_POWER_MODEL 1 HAS_DETAILED_LEIM_STATIC_POWER_MODEL 0 HAS_DETAILED_LE_POWER_MODEL 1 HAS_DETAILED_ROUTING_MUX_STATIC_POWER_MODEL 0 HAS_DETAILED_THERMAL_CIRCUIT_PARAMETER_SUPPORT 1 HAS_DEVICE_MIGRATION_SUPPORT 1 HAS_DIAGONAL_MIGRATION_SUPPORT 0 HAS_EMIF_TOOLKIT_SUPPORT 1 HAS_FAMILY_VARIANT_MIGRATION_SUPPORT 0 HAS_FANOUT_FREE_NODE_SUPPORT 1 HAS_FAST_FIT_SUPPORT 1 HAS_FITTER_EARLY_TIMING_ESTIMATE_SUPPORT 1 HAS_FITTER_ECO_SUPPORT 1 HAS_FIT_NETLIST_OPT_RETIME_SUPPORT 1 HAS_FIT_NETLIST_OPT_SUPPORT 1 HAS_FORMAL_VERIFICATION_SUPPORT 1 HAS_FPGA_XCHANGE_SUPPORT 1 HAS_FSAC_LUTRAM_REGISTER_PACKING_SUPPORT 0 HAS_FULL_DAT_MIN_TIMING_SUPPORT 1 HAS_FULL_INCREMENTAL_DESIGN_SUPPORT 1 HAS_FUNCTIONAL_SIMULATION_SUPPORT 1 HAS_GLITCH_FILTERING_SUPPORT 1 HAS_HC_READY_SUPPORT 1 HAS_HIGH_SPEED_LOW_POWER_TILE_SUPPORT 1 HAS_HOLD_TIME_AVOIDANCE_ACROSS_CLOCK_SPINE_SUPPORT 1 HAS_HSPICE_WRITER_SUPPORT 1 HAS_HSSI_POWER_CALCULATOR 1 HAS_IBISO_WRITER_SUPPORT 0 HAS_INCREMENTAL_DAT_SUPPORT 1 HAS_INCREMENTAL_SYNTHESIS_SUPPORT 1 HAS_IO_ASSIGNMENT_ANALYSIS_SUPPORT 1 HAS_IO_DECODER 1 HAS_IO_PLACEMENT_OPTIMIZATION_SUPPORT 1 HAS_IO_SMART_RECOMPILE_SUPPORT 0 HAS_JITTER_SUPPORT 1 HAS_JTAG_SLD_HUB_SUPPORT 1 HAS_LOGIC_LOCK_SUPPORT 1 HAS_MICROPROCESSOR 0 HAS_MIF_SMART_COMPILE_SUPPORT 1 HAS_MINMAX_TIMING_MODELING_SUPPORT 1 HAS_MIN_TIMING_ANALYSIS_SUPPORT 1 HAS_MUX_RESTRUCTURE_SUPPORT 1 HAS_NEW_HC_FLOW_SUPPORT 0 HAS_NEW_SERDES_MAX_RESOURCE_COUNT_REPORTING_SUPPORT 1 HAS_NEW_VPR_SUPPORT 1 HAS_NONSOCKET_TECHNOLOGY_MIGRATION_SUPPORT 1 HAS_NO_JTAG_USERCODE_SUPPORT 0 HAS_OPERATING_SETTINGS_AND_CONDITIONS_REPORTING_SUPPORT 1 HAS_PAD_LOCATION_ASSIGNMENT_SUPPORT 0 HAS_PARTIAL_RECONFIG_SUPPORT 0 HAS_PHYSICAL_NETLIST_OUTPUT 0 HAS_PHYSICAL_ROUTING_SUPPORT 1 HAS_PIN_SPECIFIC_VOLTAGE_SUPPORT 1 HAS_PLDM_REF_SUPPORT 1 HAS_POWER_ESTIMATION_SUPPORT 1 HAS_PRELIMINARY_CLOCK_UNCERTAINTY_NUMBERS 0 HAS_PRE_FITTER_FPP_SUPPORT 0 HAS_PRE_FITTER_LUTRAM_NETLIST_CHECKER_ENABLED 1 HAS_PVA_SUPPORT 1 HAS_RCF_SUPPORT 1 HAS_RCF_SUPPORT_FOR_DEBUGGING 0 HAS_RED_BLACK_SEPARATION_SUPPORT 0 HAS_RE_LEVEL_TIMING_GRAPH_SUPPORT 1 HAS_RISEFALL_DELAY_SUPPORT 1 HAS_SIGNAL_PROBE_SUPPORT 1 HAS_SIGNAL_TAP_SUPPORT 1 HAS_SIMULATOR_SUPPORT 0 HAS_SPLIT_IO_SUPPORT 1 HAS_SPLIT_LC_SUPPORT 1 HAS_SYNTH_FSYN_NETLIST_OPT_SUPPORT 1 HAS_SYNTH_NETLIST_OPT_RETIME_SUPPORT 1 HAS_SYNTH_NETLIST_OPT_SUPPORT 1 HAS_TECHNOLOGY_MIGRATION_SUPPORT 1 HAS_TEMPLATED_REGISTER_PACKING_SUPPORT 1 HAS_TIME_BORROWING_SUPPORT 0 HAS_TIMING_DRIVEN_SYNTHESIS_SUPPORT 1 HAS_TIMING_INFO_SUPPORT 1 HAS_TIMING_OPERATING_CONDITIONS 1 HAS_TIMING_SIMULATION_SUPPORT 1 HAS_TITAN_BASED_MAC_REGISTER_PACKER_SUPPORT 1 HAS_USER_HIGH_SPEED_LOW_POWER_TILE_SUPPORT 1 HAS_USE_FITTER_INFO_SUPPORT 0 HAS_VCCPD_POWER_RAIL 1 HAS_VERTICAL_MIGRATION_SUPPORT 1 HAS_VIEWDRAW_SYMBOL_SUPPORT 0 HAS_VIO_SUPPORT 1 HAS_VIRTUAL_DEVICES 0 HAS_WYSIWYG_DFFEAS_SUPPORT 1 HAS_XIBISO_WRITER_SUPPORT 1 INCREMENTAL_DESIGN_SUPPORTS_COMPATIBLE_CONSTRAINTS 1 INSTALLED 0 IS_CONFIG_ROM 0 IS_DEFAULT_FAMILY 0 IS_HARDCOPY_FAMILY 0 LVDS_IO 1 M10K_MEMORY 0 M144K_MEMORY 1 M20K_MEMORY 0 M4K_MEMORY 0 M512_MEMORY 0 M9K_MEMORY 1 MLAB_MEMORY 1 MRAM_MEMORY 0 NOT_LISTED 0 NO_RPE_SUPPORT 0 NO_SUPPORT_FOR_LOGICLOCK_CONTENT_BACK_ANNOTATION 1 NO_SUPPORT_FOR_STA_CLOCK_UNCERTAINTY_CHECK 0 NO_TDC_SUPPORT 0 POSTFIT_BAK_DATABASE_EXPORT_ENABLED 1 POSTMAP_BAK_DATABASE_EXPORT_ENABLED 1 PROGRAMMER_SUPPORT 1 QFIT_IN_DEVELOPMENT 0 QMAP_IN_DEVELOPMENT 0 RAM_LOGICAL_NAME_CHECKING_IN_CUT_ENABLED 1 REPORTS_METASTABILITY_MTBF 1 REQUIRES_INSTALLATION_PATCH 0 REQUIRES_LIST_OF_TEMPERATURE_AND_VOLTAGE_OPERATING_CONDITIONS 1 RESERVES_SIGNAL_PROBE_PINS 0 RESOLVE_MAX_FANOUT_EARLY 1 RESOLVE_MAX_FANOUT_LATE 0 RESPECTS_FIXED_SIZED_LOCKED_LOCATION_LOGICLOCK 1 RESTRICTED_USER_SELECTION 0 RISEFALL_SUPPORT_IS_HIDDEN 0 SUPPORTS_ADDITIONAL_OPTIONS_FOR_UNUSED_IO 1 SUPPORTS_CRC 1 SUPPORTS_DIFFERENTIAL_AIOT_BOARD_TRACE_MODEL 1 SUPPORTS_DSP_BALANCING_BACK_ANNOTATION 0 SUPPORTS_GENERATION_OF_EARLY_POWER_ESTIMATOR_FILE 1 SUPPORTS_GLOBAL_SIGNAL_BACK_ANNOTATION 1 SUPPORTS_MAC_CHAIN_OUT_ADDER 1 SUPPORTS_RAM_PACKING_BACK_ANNOTATION 0 SUPPORTS_REG_PACKING_BACK_ANNOTATION 0 SUPPORTS_SIGNALPROBE_REGISTER_PIPELINING 1 SUPPORTS_SINGLE_ENDED_AIOT_BOARD_TRACE_MODEL 1 SUPPORTS_USER_MANUAL_LOGIC_DUPLICATION 1 TMV_RUN_CUSTOMIZABLE_VIEWER 1 TMV_RUN_INTERNAL_DETAILS 1 TMV_RUN_INTERNAL_DETAILS_ON_IO 0 TMV_RUN_INTERNAL_DETAILS_ON_IOBUF 1 TMV_RUN_INTERNAL_DETAILS_ON_LCELL 0 TMV_RUN_INTERNAL_DETAILS_ON_LRAM 0 TRANSCEIVER_3G_BLOCK 1 TRANSCEIVER_6G_BLOCK 1 USES_ACV_FOR_FLED 1 USES_ADB_FOR_BACK_ANNOTATION 1 USES_ASIC_ROUTING_POWER_CALCULATOR 0 USES_DATA_DRIVEN_PLL_COMPUTATION_UTIL 1 USES_DEV 1 USES_ICP_FOR_ECO_FITTER 0 USES_LIBERTY_TIMING 0 USES_POWER_SIGNAL_ACTIVITIES 1 USES_THIRD_GENERATION_TIMING_MODELS_TIS 1 USE_ADVANCED_IO_POWER_BY_DEFAULT 1 USE_ADVANCED_IO_TIMING_BY_DEFAULT 1 USE_BASE_FAMILY_DDB_PATH 0 USE_OCT_AUTO_CALIBRATION 0 USE_RISEFALL_ONLY 1 USE_SEPARATE_LIST_FOR_TECH_MIGRATION 1 USE_SINGLE_COMPILER_PASS_PLL_MIF_FILE_WRITER 1 USE_TITAN_IO_BASED_IO_REGISTER_PACKER_UTIL 1 WYSIWYG_BUS_WIDTH_CHECKING_IN_CUT_ENABLED 1</parameter> + <parameter name="tightlyCoupledDataMaster0MapParam" value="" /> + <parameter name="tightlyCoupledDataMaster1MapParam" value="" /> + <parameter name="tightlyCoupledDataMaster2MapParam" value="" /> + <parameter name="tightlyCoupledDataMaster3MapParam" value="" /> + <parameter name="tightlyCoupledInstructionMaster0MapParam" value="" /> + <parameter name="tightlyCoupledInstructionMaster1MapParam" value="" /> + <parameter name="tightlyCoupledInstructionMaster2MapParam" value="" /> + <parameter name="tightlyCoupledInstructionMaster3MapParam" value="" /> + </module> + <module kind="avs_common_mm" version="1.0" enabled="1" name="reg_mdio_0"> + <parameter name="g_adr_w" value="3" /> + <parameter name="g_dat_w" value="32" /> + <parameter name="AUTO_SYSTEM_CLOCK_RATE" value="25000000" /> + </module> + <module kind="avs_common_mm" version="1.0" enabled="1" name="reg_mdio_1"> + <parameter name="g_adr_w" value="3" /> + <parameter name="g_dat_w" value="32" /> + <parameter name="AUTO_SYSTEM_CLOCK_RATE" value="25000000" /> + </module> + <module kind="avs_common_mm" version="1.0" enabled="1" name="reg_mdio_2"> + <parameter name="g_adr_w" value="3" /> + <parameter name="g_dat_w" value="32" /> + <parameter name="AUTO_SYSTEM_CLOCK_RATE" value="25000000" /> + </module> + <module + kind="avs_common_mm" + version="1.0" + enabled="1" + name="reg_dp_offload_rx_hdr_dat"> + <parameter name="g_adr_w" value="7" /> + <parameter name="g_dat_w" value="32" /> + <parameter name="AUTO_SYSTEM_CLOCK_RATE" value="25000000" /> + </module> + <module kind="avs2_eth_coe" version="1.0" enabled="1" name="avs_eth_0"> + <parameter name="AUTO_MM_CLOCK_RATE" value="25000000" /> + </module> + <module kind="avs_common_mm" version="1.0" enabled="1" name="reg_unb_sens"> + <parameter name="g_adr_w" value="3" /> + <parameter name="g_dat_w" value="32" /> + <parameter name="AUTO_SYSTEM_CLOCK_RATE" value="25000000" /> + </module> + <module kind="avs_common_mm" version="1.0" enabled="1" name="pio_system_info"> + <parameter name="g_adr_w" value="5" /> + <parameter name="g_dat_w" value="32" /> + <parameter name="AUTO_SYSTEM_CLOCK_RATE" value="25000000" /> + </module> + <module kind="avs_common_mm" version="1.0" enabled="1" name="pio_pps"> + <parameter name="g_adr_w" value="1" /> + <parameter name="g_dat_w" value="32" /> + <parameter name="AUTO_SYSTEM_CLOCK_RATE" value="25000000" /> + </module> + <module kind="avs_common_mm" version="1.0" enabled="1" name="reg_wdi"> + <parameter name="g_adr_w" value="1" /> + <parameter name="g_dat_w" value="32" /> + <parameter name="AUTO_SYSTEM_CLOCK_RATE" value="25000000" /> + </module> + <module kind="avs_common_mm" version="1.0" enabled="1" name="rom_system_info"> + <parameter name="g_adr_w" value="10" /> + <parameter name="g_dat_w" value="32" /> + <parameter name="AUTO_SYSTEM_CLOCK_RATE" value="25000000" /> + </module> + <module + kind="avs_common_mm_readlatency0" + version="1.0" + enabled="1" + name="reg_tr_10GbE"> + <parameter name="g_adr_w" value="15" /> + <parameter name="g_dat_w" value="32" /> + <parameter name="AUTO_SYSTEM_CLOCK_RATE" value="25000000" /> + </module> + <module + kind="avs_common_mm_readlatency0" + version="1.0" + enabled="1" + name="reg_tr_xaui"> + <parameter name="g_adr_w" value="11" /> + <parameter name="g_dat_w" value="32" /> + <parameter name="AUTO_SYSTEM_CLOCK_RATE" value="25000000" /> + </module> + <module kind="clock_source" version="11.1" enabled="1" name="clk_input"> + <parameter name="clockFrequency" value="25000000" /> + <parameter name="clockFrequencyKnown" value="true" /> + <parameter name="inputClockFrequency" value="0" /> + <parameter name="resetSynchronousEdges" value="NONE" /> + </module> + <module + kind="avs_common_mm" + version="1.0" + enabled="1" + name="reg_dp_offload_tx_hdr_dat"> + <parameter name="g_adr_w" value="6" /> + <parameter name="g_dat_w" value="32" /> + <parameter name="AUTO_SYSTEM_CLOCK_RATE" value="25000000" /> + </module> + <module + kind="avs_common_mm" + version="1.0" + enabled="1" + name="reg_dp_offload_tx"> + <parameter name="g_adr_w" value="1" /> + <parameter name="g_dat_w" value="32" /> + <parameter name="AUTO_SYSTEM_CLOCK_RATE" value="25000000" /> + </module> + <module + kind="avs_common_mm" + version="1.0" + enabled="1" + name="reg_dp_offload_tx_hdr_ovr"> + <parameter name="g_adr_w" value="5" /> + <parameter name="g_dat_w" value="32" /> + <parameter name="AUTO_SYSTEM_CLOCK_RATE" value="25000000" /> + </module> + <module kind="avs_common_mm" version="1.0" enabled="1" name="reg_compaan"> + <parameter name="g_adr_w" value="19" /> + <parameter name="g_dat_w" value="32" /> + <parameter name="AUTO_SYSTEM_CLOCK_RATE" value="25000000" /> + </module> + <module kind="avs_common_mm" version="1.0" enabled="1" name="reg_diagnostics"> + <parameter name="g_adr_w" value="6" /> + <parameter name="g_dat_w" value="32" /> + <parameter name="AUTO_SYSTEM_CLOCK_RATE" value="25000000" /> + </module> + <module + kind="avs_common_mm" + version="1.0" + enabled="1" + name="reg_tr_nonbonded"> + <parameter name="g_adr_w" value="4" /> + <parameter name="g_dat_w" value="32" /> + <parameter name="AUTO_SYSTEM_CLOCK_RATE" value="25000000" /> + </module> + <connection + kind="avalon" + version="11.1" + start="cpu_0.instruction_master" + end="cpu_0.jtag_debug_module"> + <parameter name="arbitrationPriority" value="1" /> + <parameter name="baseAddress" value="0x3800" /> + </connection> + <connection + kind="avalon" + version="11.1" + start="cpu_0.data_master" + end="cpu_0.jtag_debug_module"> + <parameter name="arbitrationPriority" value="1" /> + <parameter name="baseAddress" value="0x3800" /> + </connection> + <connection + kind="avalon" + version="11.1" + start="cpu_0.instruction_master" + end="onchip_memory2_0.s1"> + <parameter name="arbitrationPriority" value="1" /> + <parameter name="baseAddress" value="0x00020000" /> + </connection> + <connection + kind="avalon" + version="11.1" + start="cpu_0.data_master" + end="onchip_memory2_0.s1"> + <parameter name="arbitrationPriority" value="1" /> + <parameter name="baseAddress" value="0x00020000" /> + </connection> + <connection + kind="avalon" + version="11.1" + start="cpu_0.data_master" + end="jtag_uart_0.avalon_jtag_slave"> + <parameter name="arbitrationPriority" value="1" /> + <parameter name="baseAddress" value="0x0640" /> + </connection> + <connection + kind="interrupt" + version="11.1" + start="cpu_0.d_irq" + end="jtag_uart_0.irq"> + <parameter name="irqNumber" value="0" /> + </connection> + <connection + kind="avalon" + version="11.1" + start="cpu_0.data_master" + end="pio_debug_wave.s1"> + <parameter name="arbitrationPriority" value="1" /> + <parameter name="baseAddress" value="0x0620" /> + </connection> + <connection + kind="avalon" + version="11.1" + start="cpu_0.data_master" + end="pio_wdi.s1"> + <parameter name="arbitrationPriority" value="1" /> + <parameter name="baseAddress" value="0x0630" /> + </connection> + <connection + kind="avalon" + version="11.1" + start="cpu_0.data_master" + end="timer_0.s1"> + <parameter name="arbitrationPriority" value="1" /> + <parameter name="baseAddress" value="0x0580" /> + </connection> + <connection kind="interrupt" version="11.1" start="cpu_0.d_irq" end="timer_0.irq"> + <parameter name="irqNumber" value="1" /> + </connection> + <connection + kind="reset" + version="11.1" + start="cpu_0.jtag_debug_module_reset" + end="onchip_memory2_0.reset1" /> + <connection + kind="reset" + version="11.1" + start="cpu_0.jtag_debug_module_reset" + end="jtag_uart_0.reset" /> + <connection + kind="reset" + version="11.1" + start="cpu_0.jtag_debug_module_reset" + end="pio_debug_wave.reset" /> + <connection + kind="reset" + version="11.1" + start="cpu_0.jtag_debug_module_reset" + end="pio_wdi.reset" /> + <connection + kind="reset" + version="11.1" + start="cpu_0.jtag_debug_module_reset" + end="timer_0.reset" /> + <connection + kind="reset" + version="11.1" + start="cpu_0.jtag_debug_module_reset" + end="cpu_0.reset_n" /> + <connection + kind="reset" + version="11.1" + start="cpu_0.jtag_debug_module_reset" + end="reg_mdio_0.system_reset" /> + <connection + kind="avalon" + version="11.1" + start="cpu_0.data_master" + end="reg_mdio_1.mem"> + <parameter name="arbitrationPriority" value="1" /> + <parameter name="baseAddress" value="0x05a0" /> + </connection> + <connection + kind="reset" + version="11.1" + start="cpu_0.jtag_debug_module_reset" + end="reg_mdio_1.system_reset" /> + <connection + kind="reset" + version="11.1" + start="cpu_0.jtag_debug_module_reset" + end="reg_mdio_2.system_reset" /> + <connection + kind="avalon" + version="11.1" + start="cpu_0.data_master" + end="reg_mdio_2.mem"> + <parameter name="arbitrationPriority" value="1" /> + <parameter name="baseAddress" value="0x05c0" /> + </connection> + <connection + kind="reset" + version="11.1" + start="cpu_0.jtag_debug_module_reset" + end="reg_dp_offload_rx_hdr_dat.system_reset" /> + <connection + kind="avalon" + version="11.1" + start="cpu_0.data_master" + end="reg_dp_offload_rx_hdr_dat.mem"> + <parameter name="arbitrationPriority" value="1" /> + <parameter name="baseAddress" value="0x0200" /> + </connection> + <connection + kind="avalon" + version="11.1" + start="cpu_0.data_master" + end="reg_mdio_0.mem"> + <parameter name="arbitrationPriority" value="1" /> + <parameter name="baseAddress" value="0x05e0" /> + </connection> + <connection + kind="avalon" + version="11.1" + start="cpu_0.data_master" + end="avs_eth_0.mms_tse"> + <parameter name="arbitrationPriority" value="1" /> + <parameter name="baseAddress" value="0x2000" /> + </connection> + <connection + kind="avalon" + version="11.1" + start="cpu_0.data_master" + end="avs_eth_0.mms_reg"> + <parameter name="arbitrationPriority" value="1" /> + <parameter name="baseAddress" value="0x0500" /> + </connection> + <connection + kind="avalon" + version="11.1" + start="cpu_0.data_master" + end="avs_eth_0.mms_ram"> + <parameter name="arbitrationPriority" value="1" /> + <parameter name="baseAddress" value="0x6000" /> + </connection> + <connection + kind="reset" + version="11.1" + start="cpu_0.jtag_debug_module_reset" + end="reg_unb_sens.system_reset" /> + <connection + kind="avalon" + version="11.1" + start="cpu_0.data_master" + end="reg_unb_sens.mem"> + <parameter name="arbitrationPriority" value="1" /> + <parameter name="baseAddress" value="0x0600" /> + </connection> + <connection + kind="reset" + version="11.1" + start="cpu_0.jtag_debug_module_reset" + end="pio_system_info.system_reset" /> + <connection + kind="avalon" + version="11.1" + start="cpu_0.data_master" + end="pio_system_info.mem"> + <parameter name="arbitrationPriority" value="1" /> + <parameter name="baseAddress" value="0x0000" /> + </connection> + <connection + kind="reset" + version="11.1" + start="cpu_0.jtag_debug_module_reset" + end="pio_pps.system_reset" /> + <connection + kind="avalon" + version="11.1" + start="cpu_0.data_master" + end="pio_pps.mem"> + <parameter name="arbitrationPriority" value="1" /> + <parameter name="baseAddress" value="0x0648" /> + </connection> + <connection + kind="reset" + version="11.1" + start="cpu_0.jtag_debug_module_reset" + end="reg_wdi.system_reset" /> + <connection + kind="avalon" + version="11.1" + start="cpu_0.data_master" + end="reg_wdi.mem"> + <parameter name="arbitrationPriority" value="1" /> + <parameter name="baseAddress" value="0x3000" /> + </connection> + <connection + kind="reset" + version="11.1" + start="cpu_0.jtag_debug_module_reset" + end="rom_system_info.system_reset" /> + <connection + kind="avalon" + version="11.1" + start="cpu_0.data_master" + end="rom_system_info.mem"> + <parameter name="arbitrationPriority" value="1" /> + <parameter name="baseAddress" value="0x1000" /> + </connection> + <connection + kind="interrupt" + version="11.1" + start="cpu_0.d_irq" + end="avs_eth_0.interrupt"> + <parameter name="irqNumber" value="2" /> + </connection> + <connection + kind="reset" + version="11.1" + start="cpu_0.jtag_debug_module_reset" + end="reg_tr_10GbE.system_reset" /> + <connection + kind="avalon" + version="11.1" + start="cpu_0.data_master" + end="reg_tr_10GbE.mem"> + <parameter name="arbitrationPriority" value="1" /> + <parameter name="baseAddress" value="0x00040000" /> + </connection> + <connection + kind="reset" + version="11.1" + start="cpu_0.jtag_debug_module_reset" + end="reg_tr_xaui.system_reset" /> + <connection + kind="avalon" + version="11.1" + start="cpu_0.data_master" + end="reg_tr_xaui.mem"> + <parameter name="arbitrationPriority" value="1" /> + <parameter name="baseAddress" value="0x4000" /> + </connection> + <connection + kind="reset" + version="11.1" + start="cpu_0.jtag_debug_module_reset" + end="avs_eth_0.mm_reset" /> + <connection + kind="reset" + version="11.1" + start="clk_input.clk_reset" + end="reg_mdio_0.system_reset" /> + <connection + kind="reset" + version="11.1" + start="clk_input.clk_reset" + end="reg_mdio_1.system_reset" /> + <connection + kind="reset" + version="11.1" + start="clk_input.clk_reset" + end="reg_mdio_2.system_reset" /> + <connection + kind="reset" + version="11.1" + start="clk_input.clk_reset" + end="reg_dp_offload_rx_hdr_dat.system_reset" /> + <connection + kind="reset" + version="11.1" + start="clk_input.clk_reset" + end="reg_unb_sens.system_reset" /> + <connection + kind="reset" + version="11.1" + start="clk_input.clk_reset" + end="pio_pps.system_reset" /> + <connection + kind="reset" + version="11.1" + start="clk_input.clk_reset" + end="reg_wdi.system_reset" /> + <connection + kind="reset" + version="11.1" + start="clk_input.clk_reset" + end="rom_system_info.system_reset" /> + <connection + kind="reset" + version="11.1" + start="clk_input.clk_reset" + end="reg_tr_10GbE.system_reset" /> + <connection + kind="reset" + version="11.1" + start="clk_input.clk_reset" + end="reg_tr_xaui.system_reset" /> + <connection + kind="reset" + version="11.1" + start="clk_input.clk_reset" + end="timer_0.reset" /> + <connection + kind="reset" + version="11.1" + start="clk_input.clk_reset" + end="pio_wdi.reset" /> + <connection + kind="reset" + version="11.1" + start="clk_input.clk_reset" + end="jtag_uart_0.reset" /> + <connection + kind="reset" + version="11.1" + start="clk_input.clk_reset" + end="onchip_memory2_0.reset1" /> + <connection + kind="reset" + version="11.1" + start="clk_input.clk_reset" + end="pio_debug_wave.reset" /> + <connection + kind="reset" + version="11.1" + start="clk_input.clk_reset" + end="cpu_0.reset_n" /> + <connection + kind="reset" + version="11.1" + start="clk_input.clk_reset" + end="pio_system_info.system_reset" /> + <connection + kind="reset" + version="11.1" + start="clk_input.clk_reset" + end="avs_eth_0.mm_reset" /> + <connection + kind="reset" + version="11.1" + start="clk_input.clk_reset" + end="reg_dp_offload_tx_hdr_dat.system_reset" /> + <connection + kind="reset" + version="11.1" + start="cpu_0.jtag_debug_module_reset" + end="reg_dp_offload_tx_hdr_dat.system_reset" /> + <connection + kind="avalon" + version="11.1" + start="cpu_0.data_master" + end="reg_dp_offload_tx_hdr_dat.mem"> + <parameter name="arbitrationPriority" value="1" /> + <parameter name="baseAddress" value="0x0100" /> + </connection> + <connection + kind="clock" + version="11.1" + start="clk_input.clk" + end="reg_dp_offload_tx_hdr_dat.system" /> + <connection + kind="clock" + version="11.1" + start="clk_input.clk" + end="reg_mdio_2.system" /> + <connection + kind="clock" + version="11.1" + start="clk_input.clk" + end="reg_tr_xaui.system" /> + <connection + kind="clock" + version="11.1" + start="clk_input.clk" + end="reg_tr_10GbE.system" /> + <connection + kind="clock" + version="11.1" + start="clk_input.clk" + end="rom_system_info.system" /> + <connection + kind="clock" + version="11.1" + start="clk_input.clk" + end="reg_wdi.system" /> + <connection + kind="clock" + version="11.1" + start="clk_input.clk" + end="pio_pps.system" /> + <connection + kind="clock" + version="11.1" + start="clk_input.clk" + end="reg_unb_sens.system" /> + <connection + kind="clock" + version="11.1" + start="clk_input.clk" + end="reg_dp_offload_rx_hdr_dat.system" /> + <connection + kind="clock" + version="11.1" + start="clk_input.clk" + end="reg_mdio_1.system" /> + <connection + kind="clock" + version="11.1" + start="clk_input.clk" + end="reg_mdio_0.system" /> + <connection kind="clock" version="11.1" start="clk_input.clk" end="timer_0.clk" /> + <connection kind="clock" version="11.1" start="clk_input.clk" end="pio_wdi.clk" /> + <connection + kind="clock" + version="11.1" + start="clk_input.clk" + end="jtag_uart_0.clk" /> + <connection + kind="clock" + version="11.1" + start="clk_input.clk" + end="onchip_memory2_0.clk1" /> + <connection + kind="clock" + version="11.1" + start="clk_input.clk" + end="pio_debug_wave.clk" /> + <connection kind="clock" version="11.1" start="clk_input.clk" end="cpu_0.clk" /> + <connection + kind="clock" + version="11.1" + start="clk_input.clk" + end="pio_system_info.system" /> + <connection kind="clock" version="11.1" start="clk_input.clk" end="avs_eth_0.mm" /> + <connection + kind="clock" + version="11.1" + start="clk_input.clk" + end="reg_dp_offload_tx.system" /> + <connection + kind="clock" + version="11.1" + start="clk_input.clk" + end="reg_dp_offload_tx_hdr_ovr.system" /> + <connection + kind="reset" + version="11.1" + start="clk_input.clk_reset" + end="reg_dp_offload_tx.system_reset" /> + <connection + kind="reset" + version="11.1" + start="cpu_0.jtag_debug_module_reset" + end="reg_dp_offload_tx.system_reset" /> + <connection + kind="reset" + version="11.1" + start="clk_input.clk_reset" + end="reg_dp_offload_tx_hdr_ovr.system_reset" /> + <connection + kind="avalon" + version="11.1" + start="cpu_0.data_master" + end="reg_dp_offload_tx_hdr_ovr.mem"> + <parameter name="arbitrationPriority" value="1" /> + <parameter name="baseAddress" value="0x0080" /> + </connection> + <connection + kind="avalon" + version="11.1" + start="cpu_0.data_master" + end="reg_dp_offload_tx.mem"> + <parameter name="arbitrationPriority" value="1" /> + <parameter name="baseAddress" value="0x0650" /> + </connection> + <connection + kind="reset" + version="11.1" + start="cpu_0.jtag_debug_module_reset" + end="reg_dp_offload_tx_hdr_ovr.system_reset" /> + <connection + kind="clock" + version="11.1" + start="clk_input.clk" + end="reg_compaan.system" /> + <connection + kind="reset" + version="11.1" + start="clk_input.clk_reset" + end="reg_compaan.system_reset" /> + <connection + kind="avalon" + version="11.1" + start="cpu_0.data_master" + end="reg_compaan.mem"> + <parameter name="arbitrationPriority" value="1" /> + <parameter name="baseAddress" value="0x00200000" /> + </connection> + <connection + kind="clock" + version="11.1" + start="clk_input.clk" + end="reg_diagnostics.system" /> + <connection + kind="reset" + version="11.1" + start="clk_input.clk_reset" + end="reg_diagnostics.system_reset" /> + <connection + kind="avalon" + version="11.1" + start="cpu_0.data_master" + end="reg_diagnostics.mem"> + <parameter name="arbitrationPriority" value="1" /> + <parameter name="baseAddress" value="0x0400" /> + </connection> + <connection + kind="clock" + version="11.1" + start="clk_input.clk" + end="reg_tr_nonbonded.system" /> + <connection + kind="reset" + version="11.1" + start="clk_input.clk_reset" + end="reg_tr_nonbonded.system_reset" /> + <connection + kind="avalon" + version="11.1" + start="cpu_0.data_master" + end="reg_tr_nonbonded.mem"> + <parameter name="arbitrationPriority" value="1" /> + <parameter name="baseAddress" value="0x0540" /> + </connection> +</system> diff --git a/applications/compaan/designs/compaan_io_test_fn/src/vhdl/compaan_io_test_fn.vhd b/applications/compaan/designs/compaan_io_test_fn/src/vhdl/compaan_io_test_fn.vhd new file mode 100644 index 0000000000000000000000000000000000000000..5a07acb3672b64c8a0fb77b5c2e3514ca9eb43cd --- /dev/null +++ b/applications/compaan/designs/compaan_io_test_fn/src/vhdl/compaan_io_test_fn.vhd @@ -0,0 +1,789 @@ +------------------------------------------------------------------------------- +-- +-- Copyright (C) 2013 +-- 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: +-- . Test Compaan's capability of inter-FPGA communication + +LIBRARY IEEE, common_lib, unb1_board_lib, dp_lib, eth_lib, tech_tse_lib, diag_lib, tr_10GbE_lib, technology_lib; +use IEEE.STD_LOGIC_1164.ALL; +USE IEEE.NUMERIC_STD.ALL; +USE common_lib.common_pkg.ALL; +USE common_lib.common_str_pkg.ALL; +USE common_lib.common_mem_pkg.ALL; +USE common_lib.common_network_layers_pkg.ALL; +USE common_lib.common_interface_layers_pkg.ALL; +USE unb1_board_lib.unb1_board_pkg.ALL; +USE unb1_board_lib.unb1_board_peripherals_pkg.ALL; +USE dp_lib.dp_stream_pkg.ALL; +USE tech_tse_lib.tech_tse_pkg.ALL; +USE eth_lib.eth_pkg.ALL; +USE common_lib.common_network_layers_pkg.ALL; +USE diag_lib.diag_pkg.ALL; +USE common_lib.common_field_pkg.ALL; +USE technology_lib.technology_pkg.ALL; + +ENTITY compaan_io_test_fn IS + GENERIC ( + g_design_name : STRING := "compaan_unb1_10g_plus_one"; + g_design_note : STRING := "revision info"; + g_technology : NATURAL := c_tech_stratixiv; + g_sim : BOOLEAN := FALSE; -- set by ModelSim + g_sim_unb_nr : NATURAL := 0; -- set by ModelSim + g_sim_node_nr : NATURAL := 0; -- set by ModelSim + g_stamp_date : NATURAL := 0; -- Date (YYYYMMDD) -- set by QSF + g_stamp_time : NATURAL := 0; -- Time (HHMMSS) -- set by QSF + g_stamp_svn : NATURAL := 0 -- SVN revision -- set by QSF + ); + PORT ( + -- GENERAL + CLK : IN STD_LOGIC; -- dp_clk is generated by SOPC altpll + PPS : IN STD_LOGIC; + WDI : OUT STD_LOGIC; + INTA : INOUT STD_LOGIC; + INTB : INOUT STD_LOGIC; + + -- Others + VERSION : IN STD_LOGIC_VECTOR(c_unb1_board_aux.version_w-1 DOWNTO 0); + ID : IN STD_LOGIC_VECTOR(c_unb1_board_aux.id_w-1 DOWNTO 0); + TESTIO : INOUT STD_LOGIC_VECTOR(c_unb1_board_aux.testio_w-1 DOWNTO 0); + + -- I2C Interface to Sensors + sens_sc : INOUT STD_LOGIC; + sens_sd : INOUT STD_LOGIC; + + -- 1GbE Control Interface + ETH_clk : IN STD_LOGIC; + ETH_SGIN : IN STD_LOGIC; + ETH_SGOUT : OUT STD_LOGIC; + + -- Transceiver clocks + SA_CLK : IN STD_LOGIC := '0'; -- SerDes Clock BN-BI / SI_FN + SB_CLK : IN STD_LOGIC := '0'; + + -- Serial I/O: Terminal + FN_BN_0_TX : OUT STD_LOGIC_VECTOR(c_unb1_board_tr_mesh.bus_w-1 DOWNTO 0); + FN_BN_0_RX : IN STD_LOGIC_VECTOR(c_unb1_board_tr_mesh.bus_w-1 DOWNTO 0); + FN_BN_1_TX : OUT STD_LOGIC_VECTOR(c_unb1_board_tr_mesh.bus_w-1 DOWNTO 0); + FN_BN_1_RX : IN STD_LOGIC_VECTOR(c_unb1_board_tr_mesh.bus_w-1 DOWNTO 0); + FN_BN_2_TX : OUT STD_LOGIC_VECTOR(c_unb1_board_tr_mesh.bus_w-1 DOWNTO 0); + FN_BN_2_RX : IN STD_LOGIC_VECTOR(c_unb1_board_tr_mesh.bus_w-1 DOWNTO 0); + FN_BN_3_TX : OUT STD_LOGIC_VECTOR(c_unb1_board_tr_mesh.bus_w-1 DOWNTO 0); + FN_BN_3_RX : IN STD_LOGIC_VECTOR(c_unb1_board_tr_mesh.bus_w-1 DOWNTO 0); + + -- Serial I/O: 10GbE receivers + SI_FN_0_TX : OUT STD_LOGIC_VECTOR(c_unb1_board_ci.tr.bus_w-1 DOWNTO 0); + SI_FN_0_RX : IN STD_LOGIC_VECTOR(c_unb1_board_ci.tr.bus_w-1 DOWNTO 0); + SI_FN_1_TX : OUT STD_LOGIC_VECTOR(c_unb1_board_ci.tr.bus_w-1 DOWNTO 0); + SI_FN_1_RX : IN STD_LOGIC_VECTOR(c_unb1_board_ci.tr.bus_w-1 DOWNTO 0); + SI_FN_2_TX : OUT STD_LOGIC_VECTOR(c_unb1_board_ci.tr.bus_w-1 DOWNTO 0); + SI_FN_2_RX : IN STD_LOGIC_VECTOR(c_unb1_board_ci.tr.bus_w-1 DOWNTO 0); + SI_FN_3_TX : OUT STD_LOGIC_VECTOR(c_unb1_board_ci.tr.bus_w-1 DOWNTO 0); + SI_FN_3_RX : IN STD_LOGIC_VECTOR(c_unb1_board_ci.tr.bus_w-1 DOWNTO 0); + + SI_FN_0_CNTRL : INOUT STD_LOGIC_VECTOR(c_unb1_board_ci.tr.cntrl_w-1 DOWNTO 0); + SI_FN_1_CNTRL : INOUT STD_LOGIC_VECTOR(c_unb1_board_ci.tr.cntrl_w-1 DOWNTO 0); + SI_FN_2_CNTRL : INOUT STD_LOGIC_VECTOR(c_unb1_board_ci.tr.cntrl_w-1 DOWNTO 0); + SI_FN_3_CNTRL : INOUT STD_LOGIC_VECTOR(c_unb1_board_ci.tr.cntrl_w-1 DOWNTO 0); + SI_FN_RSTN : OUT STD_LOGIC := '1' -- ResetN is pulled up in the Vitesse chip, but pulled down again by external 1k resistor. + -- So we need to assign a '1' to it. + ); +END compaan_io_test_fn; + + +ARCHITECTURE str OF compaan_io_test_fn IS + + ----------------------------------------------------------------------------- + -- CONSTANTS + ----------------------------------------------------------------------------- + -- General + CONSTANT c_fw_version : t_unb1_board_fw_version := (1, 0); + CONSTANT c_block_size : NATURAL := 8; + CONSTANT c_use_1GbE : BOOLEAN := TRUE; + CONSTANT c_use_phy : t_c_unb1_board_use_phy := (sel_a_b(g_sim, 0, 1), 0, 0, 0, 0, 0, 0, 1); + -- Terminal + CONSTANT c_nof_bus : NATURAL := 4; + CONSTANT c_term_data_w : NATURAL := 32; + CONSTANT c_nof_streams : NATURAL := 1; + + CONSTANT c_phy_nof_serial : NATURAL := 3; + CONSTANT c_phy_gx_mbps : NATURAL := 6250; + CONSTANT c_phy_rx_fifo_size : NATURAL := c_bram_m9k_fifo_depth; + CONSTANT c_phy_ena_reorder : BOOLEAN := NOT g_sim; + + CONSTANT c_term_use_tx : BOOLEAN := TRUE; + CONSTANT c_term_tx_use_fifo : BOOLEAN := TRUE; + CONSTANT c_term_tx_fifo_size : NATURAL := c_bram_m9k_fifo_depth; + CONSTANT c_term_tx_fifo_fill : NATURAL := 0; + + CONSTANT c_term_use_rx : BOOLEAN := TRUE; + CONSTANT c_term_rx_use_fifo : BOOLEAN := TRUE; + CONSTANT c_term_rx_fifo_size : NATURAL := c_bram_m9k_fifo_depth; + CONSTANT c_term_rx_fifo_fill : NATURAL := 0; + CONSTANT c_term_rx_timeout_w : NATURAL := 0; + -- 10GbE + CONSTANT c_nof_10G_streams : NATURAL := 1; + CONSTANT c_10G_data_w : NATURAL := 64; + CONSTANT c_nof_crc_words : NATURAL := 0; + CONSTANT c_nof_blocks_per_packet : NATURAL := 1; + -- Offloads + CONSTANT c_ip_length : NATURAL := c_block_size*8 + 50; + CONSTANT c_udp_length : NATURAL := c_block_size*8 + 30; + CONSTANT c_nof_hdr_fields : NATURAL := 3+12+4+10; + CONSTANT c_hdr_field_ovr_init : STD_LOGIC_VECTOR(c_nof_hdr_fields-1 DOWNTO 0) := "111"&"111111111111"&"0011"&"101111111"&"0"; + CONSTANT c_hdr_field_arr : t_common_field_arr(c_nof_hdr_fields-1 DOWNTO 0) := ( ( field_name_pad("eth_dst_mac" ), " ", 48, field_default(0) ), + ( field_name_pad("eth_src_mac" ), " ", 48, field_default(0) ), + ( field_name_pad("eth_type" ), " ", 16, field_default(x"0800") ), + ( field_name_pad("ip_version" ), " ", 4, field_default(4) ), + ( field_name_pad("ip_header_length" ), " ", 4, field_default(5) ), + ( field_name_pad("ip_services" ), " ", 8, field_default(0) ), + ( field_name_pad("ip_total_length" ), " ", 16, field_default(c_ip_length) ), --1508) ), + ( field_name_pad("ip_identification" ), " ", 16, field_default(0) ), + ( field_name_pad("ip_flags" ), " ", 3, field_default(2) ), + ( field_name_pad("ip_fragment_offset" ), " ", 13, field_default(0) ), + ( field_name_pad("ip_time_to_live" ), " ", 8, field_default(127) ), + ( field_name_pad("ip_protocol" ), " ", 8, field_default(17) ), + ( field_name_pad("ip_header_checksum" ), " ", 16, field_default(0) ), + ( field_name_pad("ip_src_addr" ), " ", 32, field_default(0) ), + ( field_name_pad("ip_dst_addr" ), " ", 32, field_default(0) ), + ( field_name_pad("udp_src_port" ), " ", 16, field_default(0) ), + ( field_name_pad("udp_dst_port" ), " ", 16, field_default(0) ), + ( field_name_pad("udp_total_length" ), " ", 16, field_default(c_udp_length) ), --1488) ), + ( field_name_pad("udp_checksum" ), " ", 16, field_default(0) ), + ( field_name_pad("usr_sync" ), " ", 1, field_default(1) ), + ( field_name_pad("usr_bsn" ), " ", 60, field_default(0) ), + ( field_name_pad("usr_hdr_field_0" ), " ", 7, field_default(0) ), + ( field_name_pad("usr_hdr_field_1" ), " ", 9, field_default(0) ), + ( field_name_pad("usr_hdr_field_2" ), " ", 10, field_default(0) ), + ( field_name_pad("usr_hdr_field_3" ), " ", 33, field_default(0) ), + ( field_name_pad("usr_hdr_field_4" ), " ", 5, field_default(0) ), + ( field_name_pad("usr_hdr_field_5" ), " ", 8, field_default(0) ), + ( field_name_pad("usr_hdr_field_6" ), " ", 27, field_default(0) ), + ( field_name_pad("usr_hdr_word_align" ), " ", 16, field_default(0) ) ); + + + ----------------------------------------------------------------------------- + -- SIGNALS + ----------------------------------------------------------------------------- + + SIGNAL block_gen_src_out_arr : t_dp_sosi_arr(c_nof_streams-1 DOWNTO 0); + + -- System + -- . Clocks and resets + SIGNAL mm_clk : STD_LOGIC; + SIGNAL mm_rst : STD_LOGIC; + SIGNAL dp_clk : STD_LOGIC; + SIGNAL dp_rst : STD_LOGIC; + SIGNAL dp_pps : STD_LOGIC; + SIGNAL tr_clk : STD_LOGIC; + SIGNAL cal_clk : STD_LOGIC; + SIGNAL sa_rst : STD_LOGIC := '0'; + + SIGNAL mm_locked : STD_LOGIC; + SIGNAL epcs_clk : STD_LOGIC; + -- . Others + SIGNAL this_chip_id : STD_LOGIC_VECTOR( c_unb1_board_nof_chip_w-1 DOWNTO 0); + SIGNAL pout_wdi : STD_LOGIC; + SIGNAL eth1g_tse_clk : STD_LOGIC; + SIGNAL eth1g_mm_rst : STD_LOGIC; + SIGNAL eth1g_reg_interrupt : STD_LOGIC; + + -- 10GbE + -- . FIFO + SIGNAL dp_fifo_sc_snk_in_arr : t_dp_sosi_arr(c_nof_10G_streams-1 DOWNTO 0); + SIGNAL dp_fifo_sc_snk_out_arr : t_dp_siso_arr(c_nof_10G_streams-1 DOWNTO 0); + -- . Header + SIGNAL hdr_fields_out_arr : t_slv_1024_arr(c_nof_10G_streams-1 DOWNTO 0); + SIGNAL hdr_fields_in_arr : t_slv_1024_arr(c_nof_10G_streams-1 DOWNTO 0); + -- . XAUI + SIGNAL xaui_tx_arr : t_xaui_arr(c_nof_10G_streams-1 DOWNTO 0); + SIGNAL xaui_rx_arr : t_xaui_arr(c_nof_10G_streams-1 DOWNTO 0); + SIGNAL front_xaui_tx_arr : t_unb1_board_xaui_sl_2arr(c_nof_10G_streams-1 DOWNTO 0); + SIGNAL front_xaui_rx_arr : t_unb1_board_xaui_sl_2arr(c_nof_10G_streams-1 DOWNTO 0); + -- . MDIO + SIGNAL mdio_mdc_arr : STD_LOGIC_VECTOR(c_nof_10G_streams-1 DOWNTO 0); + SIGNAL mdio_mdat_in_arr : STD_LOGIC_VECTOR(c_nof_10G_streams-1 DOWNTO 0); + SIGNAL mdio_mdat_oen_arr : STD_LOGIC_VECTOR(c_nof_10G_streams-1 DOWNTO 0); + -- . Offload: RX + SIGNAL dp_offload_rx_snk_in_arr : t_dp_sosi_arr(c_nof_10G_streams-1 DOWNTO 0); + SIGNAL dp_offload_rx_snk_out_arr : t_dp_siso_arr(c_nof_10G_streams-1 DOWNTO 0); + SIGNAL dp_offload_rx_src_in_arr : t_dp_siso_arr(c_nof_10G_streams-1 DOWNTO 0); + SIGNAL dp_offload_rx_src_out_arr : t_dp_sosi_arr(c_nof_10G_streams-1 DOWNTO 0); + -- . Offload: TX + SIGNAL dp_offload_tx_snk_in_arr : t_dp_sosi_arr(c_nof_10G_streams-1 DOWNTO 0); + SIGNAL dp_offload_tx_snk_out_arr : t_dp_siso_arr(c_nof_10G_streams-1 DOWNTO 0); + SIGNAL dp_offload_tx_src_in_arr : t_dp_siso_arr(c_nof_10G_streams-1 DOWNTO 0); + SIGNAL dp_offload_tx_src_out_arr : t_dp_sosi_arr(c_nof_10G_streams-1 DOWNTO 0); + + -- Terminal + SIGNAL term_tx_usr_siso_2arr : t_unb1_board_mesh_siso_2arr; + SIGNAL term_tx_usr_sosi_2arr : t_unb1_board_mesh_sosi_2arr; + SIGNAL term_rx_usr_siso_2arr : t_unb1_board_mesh_siso_2arr; + SIGNAL term_rx_usr_sosi_2arr : t_unb1_board_mesh_sosi_2arr; + SIGNAL term_tx_serial_2arr : t_unb1_board_mesh_sl_2arr; + SIGNAL term_rx_serial_2arr : t_unb1_board_mesh_sl_2arr; + + -- Compaan + SIGNAL compaan_snk_out_arr : t_dp_siso_arr(14 DOWNTO 0) := (OTHERS=> c_dp_siso_rdy); + SIGNAL compaan_snk_in_arr : t_dp_sosi_arr(14 DOWNTO 0); + SIGNAL compaan_src_in_arr : t_dp_siso_arr(14 DOWNTO 0) := (OTHERS=> c_dp_siso_rdy); + SIGNAL compaan_src_out_arr : t_dp_sosi_arr(14 DOWNTO 0); + SIGNAL TEST_STOP : STD_LOGIC_VECTOR(2 DOWNTO 0); + SIGNAL TEST_ERROR : STD_LOGIC_VECTOR(2 DOWNTO 0); + SIGNAL TEST_FIFO_FULL : STD_LOGIC_VECTOR(1 DOWNTO 0); + SIGNAL TEST_BLOCK_RD : STD_LOGIC_VECTOR(2 DOWNTO 0); + + -- MM interface + -- . 10GbE + SIGNAL reg_tr_10GbE_mosi : t_mem_mosi; + SIGNAL reg_tr_10GbE_miso : t_mem_miso; + SIGNAL reg_tr_xaui_mosi : t_mem_mosi; + SIGNAL reg_tr_xaui_miso : t_mem_miso; + SIGNAL reg_mdio_mosi_arr : t_mem_mosi_arr(c_unb1_board_nof_mdio-1 DOWNTO 0); + SIGNAL reg_mdio_miso_arr : t_mem_miso_arr(c_unb1_board_nof_mdio-1 DOWNTO 0); + SIGNAL reg_mdio_0_mosi : t_mem_mosi; + SIGNAL reg_mdio_0_miso : t_mem_miso; + SIGNAL reg_mdio_1_mosi : t_mem_mosi; + SIGNAL reg_mdio_1_miso : t_mem_miso; + SIGNAL reg_mdio_2_mosi : t_mem_mosi; + SIGNAL reg_mdio_2_miso : t_mem_miso; + -- . Terminal + SIGNAL reg_tr_nonbonded_mosi : t_mem_mosi; + SIGNAL reg_tr_nonbonded_miso : t_mem_miso; + SIGNAL reg_diagnostics_mosi : t_mem_mosi; + SIGNAL reg_diagnostics_miso : t_mem_miso; + -- . Compaan + SIGNAL reg_compaan_mosi : t_mem_mosi; + SIGNAL reg_compaan_miso : t_mem_miso; + -- . UNB1 Cntrl + SIGNAL reg_wdi_mosi : t_mem_mosi; + SIGNAL reg_wdi_miso : t_mem_miso; + SIGNAL reg_ppsh_mosi : t_mem_mosi; + SIGNAL reg_ppsh_miso : t_mem_miso; + SIGNAL eth1g_tse_mosi : t_mem_mosi; + SIGNAL eth1g_tse_miso : t_mem_miso; + SIGNAL eth1g_reg_mosi : t_mem_mosi; + SIGNAL eth1g_reg_miso : t_mem_miso; + SIGNAL eth1g_ram_mosi : t_mem_mosi; + SIGNAL eth1g_ram_miso : t_mem_miso; + SIGNAL reg_unb_system_info_mosi : t_mem_mosi; + SIGNAL reg_unb_system_info_miso : t_mem_miso; + SIGNAL rom_unb_system_info_mosi : t_mem_mosi; + SIGNAL rom_unb_system_info_miso : t_mem_miso; + SIGNAL reg_unb_sens_mosi : t_mem_mosi; + SIGNAL reg_unb_sens_miso : t_mem_miso; + SIGNAL reg_epcs_mosi : t_mem_mosi; + SIGNAL reg_epcs_miso : t_mem_miso; + SIGNAL reg_remu_mosi : t_mem_mosi; + SIGNAL reg_remu_miso : t_mem_miso; + SIGNAL reg_dp_offload_tx_mosi : t_mem_mosi; + SIGNAL reg_dp_offload_tx_miso : t_mem_miso; + SIGNAL reg_dp_offload_tx_hdr_ovr_mosi : t_mem_mosi; + SIGNAL reg_dp_offload_tx_hdr_ovr_miso : t_mem_miso; + -- . Offload: RX + SIGNAL reg_dp_offload_rx_hdr_dat_mosi : t_mem_mosi; + SIGNAL reg_dp_offload_rx_hdr_dat_miso : t_mem_miso; + -- . Offload: TX + SIGNAL reg_dp_offload_tx_hdr_dat_mosi : t_mem_mosi; + SIGNAL reg_dp_offload_tx_hdr_dat_miso : t_mem_miso; + +BEGIN + + ----------------------------------------------------------------------------- + -- Interface: 10GbE + ----------------------------------------------------------------------------- + -- Wire together different types + gen_wire: FOR i IN 0 TO c_nof_10G_streams-1 GENERATE + front_xaui_tx_arr(i) <= xaui_tx_arr(i); + xaui_rx_arr(i) <= front_xaui_rx_arr(i); + END GENERATE; + + u_front_io: ENTITY unb1_board_lib.unb1_board_front_io + GENERIC MAP( + g_nof_xaui => c_nof_10G_streams + ) + PORT MAP( + xaui_tx_arr => front_xaui_tx_arr, + xaui_rx_arr => front_xaui_rx_arr, + + mdio_mdc_arr => mdio_mdc_arr, + mdio_mdat_in_arr => mdio_mdat_in_arr, + mdio_mdat_oen_arr => mdio_mdat_oen_arr, + + -- Serial I/O + SI_FN_0_TX => SI_FN_0_TX, + SI_FN_0_RX => SI_FN_0_RX, + SI_FN_1_TX => SI_FN_1_TX, + SI_FN_1_RX => SI_FN_1_RX, + SI_FN_2_TX => SI_FN_2_TX, + SI_FN_2_RX => SI_FN_2_RX, + + SI_FN_0_CNTRL => SI_FN_0_CNTRL, + SI_FN_1_CNTRL => SI_FN_1_CNTRL, + SI_FN_2_CNTRL => SI_FN_2_CNTRL, + SI_FN_3_CNTRL => SI_FN_3_CNTRL + ); + + u_areset_sa_rst: ENTITY common_lib.common_areset + GENERIC MAP( + g_rst_level => '1', + g_delay_len => 4 + ) + PORT MAP( + clk => SA_CLK, + in_rst => '0', + out_rst => sa_rst + ); + + u_tr_10GbE: ENTITY tr_10GbE_lib.tr_10GbE + GENERIC MAP( + g_sim => g_sim, + g_sim_level => 1, + g_nof_macs => c_nof_10G_streams, + g_use_mdio => TRUE + ) + PORT MAP( + -- Transceiver PLL reference clock + tr_ref_clk_156 => SA_CLK, + tr_ref_rst_156 => sa_rst, + -- Calibration & reconfig clock + cal_rec_clk => mm_clk, + -- MM Interface + mm_rst => mm_rst, + mm_clk => mm_clk, + + reg_mac_mosi => reg_tr_10GbE_mosi, + reg_mac_miso => reg_tr_10GbE_miso, + + xaui_mosi => reg_tr_xaui_mosi, + xaui_miso => reg_tr_xaui_miso, + + mdio_mosi_arr => reg_mdio_mosi_arr(c_nof_10G_streams-1 DOWNTO 0), + mdio_miso_arr => reg_mdio_miso_arr(c_nof_10G_streams-1 DOWNTO 0), + -- DP Interface + dp_rst => dp_rst, + dp_clk => dp_clk, + -- Data received by 10G + src_out_arr => dp_offload_rx_snk_in_arr, + src_in_arr => dp_offload_rx_snk_out_arr, + -- Data to be send by 10G + snk_out_arr => dp_offload_tx_src_in_arr, + snk_in_arr => dp_offload_tx_src_out_arr, + -- Serial XAUI I/O + xaui_tx_arr => xaui_tx_arr, + xaui_rx_arr => xaui_rx_arr, + -- MDIO Interface + mdio_rst => SI_FN_RSTN, + mdio_mdc_arr => mdio_mdc_arr, + mdio_mdat_in_arr => mdio_mdat_in_arr, + mdio_mdat_oen_arr => mdio_mdat_oen_arr + ); + + gen_dp_fifo_sc: FOR i IN 0 TO c_nof_10G_streams-1 GENERATE + u_dp_fifo_sc: ENTITY dp_lib.dp_fifo_sc + GENERIC MAP( + g_data_w => c_10G_data_w, + g_fifo_size => 3*c_block_size + ) + PORT MAP( + rst => dp_rst, + clk => dp_clk, + + snk_out => dp_fifo_sc_snk_out_arr(i), + snk_in => dp_fifo_sc_snk_in_arr(i), + + src_in => dp_offload_tx_snk_out_arr(i), + src_out => dp_offload_tx_snk_in_arr(i) + ); + END GENERATE; + + ----------------------------------------------------------------------------- + -- Offload: RX + ----------------------------------------------------------------------------- + u_dp_offload_rx: ENTITY dp_lib.dp_offload_rx + GENERIC MAP( + g_nof_streams => c_nof_10G_streams, + g_data_w => c_10G_data_w, + g_hdr_field_arr => c_hdr_field_arr, + g_remove_crc => c_use_1GbE, + g_crc_nof_words => c_nof_crc_words + ) + PORT MAP( + mm_rst => mm_rst, + mm_clk => mm_clk, + dp_rst => dp_rst, + dp_clk => dp_clk, + + reg_hdr_dat_mosi => reg_dp_offload_rx_hdr_dat_mosi, + reg_hdr_dat_miso => reg_dp_offload_rx_hdr_dat_miso, + + snk_in_arr => dp_offload_rx_snk_in_arr, + snk_out_arr => dp_offload_rx_snk_out_arr, + + src_out_arr => dp_offload_rx_src_out_arr, + src_in_arr => dp_offload_rx_src_in_arr, + + hdr_fields_out_arr => hdr_fields_out_arr + ); + + ----------------------------------------------------------------------------- + -- Terminal + ----------------------------------------------------------------------------- + u_unb1_board_terminals_mesh: ENTITY unb1_board_lib.unb1_board_terminals_mesh + GENERIC MAP( + g_sim => g_sim, + g_sim_level => 1, + -- System + g_node_type => e_any, + g_nof_bus => c_nof_bus, + -- User + g_usr_use_complex => FALSE, + g_usr_data_w => c_term_data_w, + g_usr_frame_len => c_block_size, + g_usr_nof_streams => c_nof_streams, + -- Phy + g_phy_nof_serial => c_phy_nof_serial, + g_phy_gx_mbps => c_phy_gx_mbps, + g_phy_rx_fifo_size => c_phy_rx_fifo_size, + g_phy_ena_reorder => NOT g_sim, + -- Tx + g_use_tx => c_term_use_tx, + g_tx_input_use_fifo => c_term_tx_use_fifo, + g_tx_input_fifo_size => c_term_tx_fifo_size, + g_tx_input_fifo_fill => c_term_tx_fifo_fill, + -- Rx + g_use_rx => c_term_use_rx, + g_rx_output_use_fifo => c_term_rx_use_fifo, + g_rx_output_fifo_size => c_term_rx_fifo_size, + g_rx_output_fifo_fill => c_term_rx_fifo_fill, + g_rx_timeout_w => c_term_rx_timeout_w + ) + PORT MAP( + chip_id => this_chip_id, + -- Clocks + mm_rst => mm_rst, + mm_clk => mm_clk, + dp_rst => dp_rst, + dp_clk => dp_clk, + dp_sync => dp_pps, + tr_clk => SB_CLK, + cal_clk => cal_clk, + -- User Interface (4 nodes)(4 lanes) + tx_usr_siso_2arr => term_tx_usr_siso_2arr, + tx_usr_sosi_2arr => term_tx_usr_sosi_2arr, + rx_usr_siso_2arr => term_rx_usr_siso_2arr, + rx_usr_sosi_2arr => term_rx_usr_sosi_2arr, + -- Serial (tr_nonbonded) + tx_serial_2arr => term_tx_serial_2arr, + rx_serial_2arr => term_rx_serial_2arr, + -- MM Control + -- . tr_nonbonded + reg_tr_nonbonded_mosi => reg_tr_nonbonded_mosi, + reg_tr_nonbonded_miso => reg_tr_nonbonded_miso, + reg_diagnostics_mosi => reg_diagnostics_mosi, + reg_diagnostics_miso => reg_diagnostics_miso, + -- . Monitor databuffer + ram_diag_data_buf_mosi => open, + ram_diag_data_buf_miso => open + ); + + u_unb1_board_mesh_io: ENTITY unb1_board_lib.unb1_board_mesh_io + PORT MAP( + tx_serial_2arr => term_tx_serial_2arr, + rx_serial_2arr => term_rx_serial_2arr, + -- Serial I/O + FN_BN_0_TX => FN_BN_0_TX, + FN_BN_0_RX => FN_BN_0_RX, + FN_BN_1_TX => FN_BN_1_TX, + FN_BN_1_RX => FN_BN_1_RX, + FN_BN_2_TX => FN_BN_2_TX, + FN_BN_2_RX => FN_BN_2_RX, + FN_BN_3_TX => FN_BN_3_TX, + FN_BN_3_RX => FN_BN_3_RX + ); + + ----------------------------------------------------------------------------- + -- Compaan + ----------------------------------------------------------------------------- + u_compaan_design: ENTITY work.compaan_wrapper + GENERIC MAP( + g_blocks_per_sync => c_block_size + ) + PORT MAP( + -- Streaming sink + snk_out_arr => compaan_snk_out_arr, + snk_in_arr => compaan_snk_in_arr, + -- Streaming source + src_in_arr => compaan_src_in_arr, + src_out_arr => compaan_src_out_arr, + -- Compaan: Other + TEST_STOP => TEST_STOP, + TEST_ERROR => TEST_ERROR, + TEST_FIFO_FULL => TEST_FIFO_FULL, + TEST_BLOCK_RD => TEST_BLOCK_RD, + address => reg_compaan_mosi.address(18 DOWNTO 0), + read_data => reg_compaan_miso.rddata(c_word_w-1 DOWNTO 0), + read_en => reg_compaan_mosi.rd, + write_en => reg_compaan_mosi.wr, + write_data => reg_compaan_mosi.wrdata(c_word_w-1 DOWNTO 0), + -- Compaan: Clocks + MM_CLK => mm_clk, + KPN_CLK => dp_clk, + KPN_RST => dp_rst + ); + + -- Connect the compaan streaming sink and source to ASTRON + wire_compaan_10G: FOR i IN 0 TO c_nof_10G_streams-1 GENERATE + compaan_src_in_arr(i) <= dp_fifo_sc_snk_out_arr(i); + dp_fifo_sc_snk_in_arr(i) <= compaan_src_out_arr(i); + + compaan_snk_in_arr(i) <= dp_offload_rx_src_out_arr(i); + dp_offload_rx_src_in_arr(i) <= compaan_snk_out_arr(i); + END GENERATE; + + wire_compaan_term_node: FOR i IN 0 TO 3 GENERATE + wire_compaan_term_lane: FOR j IN 0 TO 2 GENERATE + term_tx_usr_sosi_2arr(i)(j) <= compaan_src_out_arr(3+(i*3)+j); + compaan_src_in_arr(3+(i*3)+j) <= term_tx_usr_siso_2arr(i)(j); + + term_rx_usr_siso_2arr(i)(j) <= compaan_snk_out_arr(3+(i*3)+j); + compaan_snk_in_arr(3+(i*3)+j) <= term_rx_usr_sosi_2arr(i)(j); + END GENERATE; + END GENERATE; + + ----------------------------------------------------------------------------- + -- Offload: TX + ----------------------------------------------------------------------------- + u_dp_offload_tx: ENTITY dp_lib.dp_offload_tx + GENERIC MAP( + g_nof_streams => c_nof_10G_streams, + g_data_w => c_10G_data_w, + g_use_complex => FALSE, + g_nof_words_per_block => c_block_size, + g_nof_blocks_per_packet => c_nof_blocks_per_packet, + g_hdr_field_arr => c_hdr_field_arr, + g_hdr_field_sel => c_hdr_field_ovr_init, + g_use_post_split_fifo => FALSE + ) + PORT MAP( + mm_rst => mm_rst, + mm_clk => mm_clk, + dp_rst => dp_rst, + dp_clk => dp_clk, + + reg_hdr_dat_mosi => reg_dp_offload_tx_hdr_dat_mosi, + reg_hdr_dat_miso => reg_dp_offload_tx_hdr_dat_miso, + + snk_in_arr => dp_offload_tx_snk_in_arr, + snk_out_arr => dp_offload_tx_snk_out_arr, + + src_out_arr => dp_offload_tx_src_out_arr, + src_in_arr => dp_offload_tx_src_in_arr, + + hdr_fields_in_arr => hdr_fields_in_arr + ); + + gen_hdr_in_fields: FOR i IN 0 TO c_nof_10G_streams-1 GENERATE + -- dst = src + hdr_fields_in_arr(i)(field_hi(c_hdr_field_arr, "eth_src_mac" ) DOWNTO field_lo(c_hdr_field_arr, "eth_src_mac" )) <= x"00228608" & B"000"&ID(7 DOWNTO 3) & RESIZE_UVEC(ID(2 DOWNTO 0), c_byte_w); + hdr_fields_in_arr(i)(field_hi(c_hdr_field_arr, "eth_dst_mac" ) DOWNTO field_lo(c_hdr_field_arr, "eth_dst_mac" )) <= x"00228608" & B"000"&ID(7 DOWNTO 3) & RESIZE_UVEC(ID(2 DOWNTO 0), c_byte_w); + + hdr_fields_in_arr(i)(field_hi(c_hdr_field_arr, "ip_src_addr" ) DOWNTO field_lo(c_hdr_field_arr, "ip_src_addr" )) <= x"0A63" & B"000"&ID(7 DOWNTO 3) & INCR_UVEC(RESIZE_UVEC(ID(2 DOWNTO 0), c_byte_w), 1); + hdr_fields_in_arr(i)(field_hi(c_hdr_field_arr, "ip_dst_addr" ) DOWNTO field_lo(c_hdr_field_arr, "ip_dst_addr" )) <= x"0A63" & B"000"&ID(7 DOWNTO 3) & INCR_UVEC(RESIZE_UVEC(ID(2 DOWNTO 0), c_byte_w), 1); + + -- dst port goes through 4000,4001,4002 + hdr_fields_in_arr(i)(field_hi(c_hdr_field_arr, "udp_src_port" ) DOWNTO field_lo(c_hdr_field_arr, "udp_src_port" )) <= TO_UVEC(4000+i, 16); + hdr_fields_in_arr(i)(field_hi(c_hdr_field_arr, "udp_dst_port" ) DOWNTO field_lo(c_hdr_field_arr, "udp_dst_port" )) <= TO_UVEC(4000+i, 16); + + hdr_fields_in_arr(i)(field_hi(c_hdr_field_arr, "usr_sync" ) DOWNTO field_lo(c_hdr_field_arr, "usr_sync" )) <= slv(block_gen_src_out_arr(i).sync); + hdr_fields_in_arr(i)(field_hi(c_hdr_field_arr, "usr_bsn" ) DOWNTO field_lo(c_hdr_field_arr, "usr_bsn" )) <= block_gen_src_out_arr(i).bsn(59 DOWNTO 0); + + hdr_fields_in_arr(i)(field_hi(c_hdr_field_arr, "usr_hdr_word_align") DOWNTO field_lo(c_hdr_field_arr, "usr_hdr_word_align" )) <= TO_UVEC(0, 16); + hdr_fields_in_arr(i)(field_hi(c_hdr_field_arr, "ip_total_length" ) DOWNTO field_lo(c_hdr_field_arr, "ip_total_length" )) <= TO_UVEC(c_ip_length, 16); + END GENERATE; + + ----------------------------------------------------------------------------- + -- UNB1 Control + ----------------------------------------------------------------------------- + u_ctrl_unb1_board: ENTITY unb1_board_lib.ctrl_unb1_board + GENERIC MAP( + g_sim => g_sim, + g_sim_flash_model => FALSE, + g_design_name => g_design_name, + g_design_note => g_design_note, + g_fw_version => c_fw_version, + g_stamp_date => g_stamp_date, + g_stamp_time => g_stamp_time, + g_stamp_svn => g_stamp_svn, + g_use_phy => c_use_phy, + g_aux => c_unb1_board_aux, + g_mm_clk_freq => c_unb1_board_mm_clk_freq_50M, + g_udp_offload => FALSE, + g_udp_offload_nof_streams => c_nof_10G_streams, + g_dp_clk_use_pll => TRUE, + g_xo_clk_use_pll => TRUE + ) + PORT MAP( + mm_clk_out => mm_clk, + mm_clk => mm_clk, + mm_rst => mm_rst, + + mm_locked => mm_locked, + mm_locked_out => mm_locked, + + epcs_clk => epcs_clk, + epcs_clk_out => epcs_clk, + + dp_rst => dp_rst, + dp_clk => dp_clk, + dp_pps => OPEN, + dp_rst_in => dp_rst, + dp_clk_in => dp_clk, + + cal_rec_clk => cal_clk, + + this_chip_id => this_chip_id, + + -- PIOs + pout_wdi => pout_wdi, + + -- Manual WDI override + reg_wdi_mosi => reg_wdi_mosi, + reg_wdi_miso => reg_wdi_miso, + + -- PPSH + reg_ppsh_mosi => reg_ppsh_mosi, + reg_ppsh_miso => reg_ppsh_miso, + + -- eth1g + eth1g_tse_clk_out => eth1g_tse_clk, + eth1g_tse_clk => eth1g_tse_clk, + eth1g_mm_rst => eth1g_mm_rst, + eth1g_tse_mosi => eth1g_tse_mosi, + eth1g_tse_miso => eth1g_tse_miso, + eth1g_reg_mosi => eth1g_reg_mosi, + eth1g_reg_miso => eth1g_reg_miso, + eth1g_reg_interrupt => eth1g_reg_interrupt, + eth1g_ram_mosi => eth1g_ram_mosi, + eth1g_ram_miso => eth1g_ram_miso, + + -- System Info + reg_unb_system_info_mosi => reg_unb_system_info_mosi, + reg_unb_system_info_miso => reg_unb_system_info_miso, + rom_unb_system_info_mosi => rom_unb_system_info_mosi, + rom_unb_system_info_miso => rom_unb_system_info_miso, + + -- Uniboard I2C sensors + reg_unb_sens_mosi => reg_unb_sens_mosi, + reg_unb_sens_miso => reg_unb_sens_miso, + + -- UniBoard FPGA pins + -- . General + CLK => CLK, + PPS => PPS, + WDI => WDI, + INTA => INTA, + INTB => INTB, + -- . Others + VERSION => VERSION, + ID => ID, + TESTIO => TESTIO, + -- . I2C Interface to Sensors + sens_sc => sens_sc, + sens_sd => sens_sd, + -- . 1GbE Control Interface + ETH_clk => ETH_clk, + ETH_SGIN => ETH_SGIN, + ETH_SGOUT => ETH_SGOUT + ); + + ----------------------------------------------------------------------------- + -- MM master + ----------------------------------------------------------------------------- + u_inst_mmm_compaan_io_test_fn : ENTITY work.mmm_compaan_io_test_fn + GENERIC MAP( + g_sim => g_sim, + g_sim_unb_nr => g_sim_unb_nr, + g_sim_node_nr => g_sim_node_nr + ) + PORT MAP( + mm_clk => mm_clk, + mm_rst => mm_rst, + pout_wdi => pout_wdi, + reg_wdi_mosi => reg_wdi_mosi, + reg_wdi_miso => reg_wdi_miso, + reg_unb_system_info_mosi => reg_unb_system_info_mosi, + reg_unb_system_info_miso => reg_unb_system_info_miso, + rom_unb_system_info_mosi => rom_unb_system_info_mosi, + rom_unb_system_info_miso => rom_unb_system_info_miso, + reg_unb_sens_mosi => reg_unb_sens_mosi, + reg_unb_sens_miso => reg_unb_sens_miso, + reg_ppsh_mosi => reg_ppsh_mosi, + reg_ppsh_miso => reg_ppsh_miso, + eth1g_mm_rst => eth1g_mm_rst, + eth1g_reg_interrupt => eth1g_reg_interrupt, + eth1g_ram_mosi => eth1g_ram_mosi, + eth1g_ram_miso => eth1g_ram_miso, + eth1g_reg_mosi => eth1g_reg_mosi, + eth1g_reg_miso => eth1g_reg_miso, + eth1g_tse_mosi => eth1g_tse_mosi, + eth1g_tse_miso => eth1g_tse_miso, + reg_epcs_mosi => reg_epcs_mosi, + reg_epcs_miso => reg_epcs_miso, + reg_remu_mosi => reg_remu_mosi, + reg_remu_miso => reg_remu_miso, + reg_dp_offload_tx_mosi => reg_dp_offload_tx_mosi, + reg_dp_offload_tx_miso => reg_dp_offload_tx_miso, + reg_dp_offload_tx_hdr_dat_mosi => reg_dp_offload_tx_hdr_dat_mosi, + reg_dp_offload_tx_hdr_dat_miso => reg_dp_offload_tx_hdr_dat_miso, + reg_dp_offload_tx_hdr_ovr_mosi => reg_dp_offload_tx_hdr_ovr_mosi, + reg_dp_offload_tx_hdr_ovr_miso => reg_dp_offload_tx_hdr_ovr_miso, + reg_dp_offload_rx_hdr_dat_mosi => reg_dp_offload_rx_hdr_dat_mosi, + reg_dp_offload_rx_hdr_dat_miso => reg_dp_offload_rx_hdr_dat_miso, + reg_mdio_0_mosi => reg_mdio_0_mosi, + reg_mdio_0_miso => reg_mdio_0_miso, + reg_mdio_1_mosi => reg_mdio_1_mosi, + reg_mdio_1_miso => reg_mdio_1_miso, + reg_mdio_2_mosi => reg_mdio_2_mosi, + reg_mdio_2_miso => reg_mdio_2_miso, + reg_tr_10gbe_mosi => reg_tr_10gbe_mosi, + reg_tr_10gbe_miso => reg_tr_10gbe_miso, + reg_tr_xaui_mosi => reg_tr_xaui_mosi, + reg_tr_xaui_miso => reg_tr_xaui_miso, + reg_diagnostics_mosi => reg_diagnostics_mosi, + reg_diagnostics_miso => reg_diagnostics_miso, + reg_tr_nonbonded_mosi => reg_tr_nonbonded_mosi, + reg_tr_nonbonded_miso => reg_tr_nonbonded_miso, + reg_compaan_mosi => reg_compaan_mosi, + reg_compaan_miso => reg_compaan_miso + ); + + reg_mdio_mosi_arr(0) <= reg_mdio_0_mosi; + reg_mdio_mosi_arr(1) <= reg_mdio_1_mosi; + reg_mdio_mosi_arr(2) <= reg_mdio_2_mosi; + + reg_mdio_0_miso <= reg_mdio_miso_arr(0); + reg_mdio_1_miso <= reg_mdio_miso_arr(1); + reg_mdio_2_miso <= reg_mdio_miso_arr(2); + +END str; + + diff --git a/applications/compaan/designs/compaan_io_test_fn/src/vhdl/compaan_wrapper.vhd b/applications/compaan/designs/compaan_io_test_fn/src/vhdl/compaan_wrapper.vhd new file mode 100644 index 0000000000000000000000000000000000000000..4ec85c47e29ba87cce4ed734f31b11a78cc7d13b --- /dev/null +++ b/applications/compaan/designs/compaan_io_test_fn/src/vhdl/compaan_wrapper.vhd @@ -0,0 +1,212 @@ +------------------------------------------------------------------ +-- Wrapper between ASTRON and Compaan +------------------------------------------------------------------ +LIBRARY IEEE, dp_lib, unb1_board_lib, io_test_lib; +USE IEEE.STD_LOGIC_1164.ALL; +USE dp_lib.dp_stream_pkg.ALL; +USE unb1_board_lib.unb1_board_pkg.ALL; + +ENTITY compaan_wrapper IS + GENERIC ( + g_blocks_per_sync : NATURAL := 10 + ); + PORT ( + -- Streaming sink (RX: ASTRON -> Compaan) + snk_out_arr : OUT t_dp_siso_arr(14 DOWNTO 0) := (OTHERS => c_dp_siso_rdy); + snk_in_arr : IN t_dp_sosi_arr(14 DOWNTO 0); + + -- Streaming src (TX: Compaan -> ASTRON) + src_in_arr : IN t_dp_siso_arr(14 DOWNTO 0); + src_out_arr : OUT t_dp_sosi_arr(14 DOWNTO 0); + + -- Compaan: Other + TEST_STOP : OUT STD_LOGIC_VECTOR(2 DOWNTO 0 ); + TEST_ERROR : OUT STD_LOGIC_VECTOR(2 DOWNTO 0 ); + TEST_FIFO_FULL : OUT STD_LOGIC_VECTOR(1 DOWNTO 0 ); + TEST_BLOCK_RD : OUT STD_LOGIC_VECTOR(2 DOWNTO 0 ); + address : IN STD_LOGIC_VECTOR(18 DOWNTO 0 ); + read_data : OUT STD_LOGIC_VECTOR(31 DOWNTO 0 ); + read_en : IN STD_LOGIC; + write_en : IN STD_LOGIC; + write_data : IN STD_LOGIC_VECTOR(31 DOWNTO 0 ); + + MM_CLK : IN STD_LOGIC; + + KPN_CLK : IN STD_LOGIC; + KPN_RST : IN STD_LOGIC + ); +END compaan_wrapper; + +ARCHITECTURE STRUCTURE OF compaan_wrapper IS + -- Array without SOP and EOP to be send to a dp_block_gen + SIGNAL src_out_arr_nop : t_dp_sosi_arr(14 DOWNTO 0) := (OTHERS=>c_dp_sosi_rst); + + SIGNAL compaan_snk_out_arr : t_dp_siso_arr(14 DOWNTO 0) := (OTHERS => c_dp_siso_rdy); + SIGNAL compaan_snk_in_arr : t_dp_sosi_arr(14 DOWNTO 0) := (OTHERS => c_dp_sosi_rst); + SIGNAL compaan_src_in_arr : t_dp_siso_arr(14 DOWNTO 0) := (OTHERS => c_dp_siso_rdy); + SIGNAL compaan_src_out_arr : t_dp_sosi_arr(14 DOWNTO 0) := (OTHERS => c_dp_sosi_rst); + + SIGNAL control_vector_in : STD_LOGIC_VECTOR(14 DOWNTO 0); + SIGNAL control_vector_out : STD_LOGIC_VECTOR(14 DOWNTO 0); + + SIGNAL i_compaan_src_in_rdy: STD_LOGIC_VECTOR(14 DOWNTO 0); + +BEGIN + gen_i_src_in_ready: FOR i IN 0 TO 14 GENERATE + i_compaan_src_in_rdy(i) <= NOT compaan_src_in_arr(i).ready; + END GENERATE; + + -- Compaan ipcore + u_compaan_design: ENTITY io_test_lib.times_two_fn0 + PORT MAP ( + -- 10G XAUI 0 + -- . RX + port0_in_Data => compaan_snk_in_arr(0).data(63 DOWNTO 0), + port0_in_Control => control_vector_in(0), + port0_in_Read => compaan_snk_out_arr(0).ready, + port0_in_Exists => compaan_snk_in_arr(0).valid, + -- . TX + port0_out_Data => compaan_src_out_arr(0).data(63 DOWNTO 0), + port0_out_Control => control_vector_out(0), + port0_out_Full => i_compaan_src_in_rdy(0), + port0_out_Write => compaan_src_out_arr(0).valid, + + -- Terminal FN/BN0 Lane 0 + -- . RX + port3_in_Data => compaan_snk_in_arr(3).data(63 DOWNTO 0), + port3_in_Control => control_vector_in(3), + port3_in_Read => compaan_snk_out_arr(3).ready, + port3_in_Exists => compaan_snk_in_arr(3).valid, + -- . TX + port3_out_Data => compaan_src_out_arr(3).data(63 DOWNTO 0), + port3_out_Control => control_vector_out(3), + port3_out_Full => i_compaan_src_in_rdy(3), + port3_out_Write => compaan_src_out_arr(3).valid, + + -- Terminal FN/BN1 Lane 0 + -- . RX + port6_in_Data => compaan_snk_in_arr(6).data(63 DOWNTO 0), + port6_in_Control => control_vector_in(6), + port6_in_Read => compaan_snk_out_arr(6).ready, + port6_in_Exists => compaan_snk_in_arr(6).valid, + -- . TX + port6_out_Data => compaan_src_out_arr(6).data(63 DOWNTO 0), + port6_out_Control => control_vector_out(6), + port6_out_Full => i_compaan_src_in_rdy(6), + port6_out_Write => compaan_src_out_arr(6).valid, + + -- Compaan other + TEST_STOP => open, + TEST_ERROR => open, + TEST_FIFO_FULL => open, + TEST_BLOCK_RD => open, + address => address, + read_data => read_data, + read_en => read_en, + write_en => write_en, + write_data => write_data, + + -- Compaan clocks + pci_clk => MM_CLK, + KPN_CLK => KPN_CLK, + KPN_RST => KPN_RST + ); + + ----------------------------------------------------------------------------- + -- FIFO IN (ASTRON -> Compaan) + ----------------------------------------------------------------------------- + gen_fifo_in: FOR i IN 0 TO 14 GENERATE + g_fifo_in: ENTITY dp_lib.dp_fifo_sc + GENERIC MAP( + g_data_w => 64, + g_bsn_w => 1, + g_empty_w => 1, + g_channel_w => 1, + g_error_w => 1, + g_use_bsn => FALSE, + g_use_empty => FALSE, + g_use_channel => FALSE, + g_use_error => FALSE, + g_use_sync => FALSE, + g_use_ctrl => TRUE, + g_use_complex => FALSE, + g_fifo_size => 4*g_blocks_per_sync, + g_fifo_af_margin => 4, + g_fifo_rl => 0 + ) + PORT MAP( + rst => KPN_RST, + clk => KPN_CLK, + -- Monitor FIFO filling + wr_ful => open, + usedw => open, + rd_emp => open, + -- ST Sink + snk_out => snk_out_arr(i), + snk_in => snk_in_arr(i), + -- ST Source + src_in => compaan_snk_out_arr(i), + src_out => compaan_snk_in_arr(i) + ); + END GENERATE; + + ----------------------------------------------------------------------------- + -- FIFO OUT (Compaan -> ASTRON) + ----------------------------------------------------------------------------- + gen_fifo_out: FOR i IN 0 TO 14 GENERATE + g_fifo_out: ENTITY dp_lib.dp_fifo_sc + GENERIC MAP( + g_data_w => 64, + g_bsn_w => 1, + g_empty_w => 1, + g_channel_w => 1, + g_error_w => 1, + g_use_bsn => FALSE, + g_use_empty => FALSE, + g_use_channel => FALSE, + g_use_error => FALSE, + g_use_sync => FALSE, + g_use_ctrl => TRUE, + g_use_complex => FALSE, + g_fifo_size => 4*g_blocks_per_sync, + g_fifo_af_margin => 4, + g_fifo_rl => 0 + ) + PORT MAP( + rst => KPN_RST, + clk => KPN_CLK, + -- Monitor FIFO filling + wr_ful => open, + usedw => open, + rd_emp => open, + -- ST Sink + snk_out => compaan_src_in_arr(i), + snk_in => compaan_src_out_arr(i), + -- ST Source + src_in => c_dp_siso_rdy, + src_out => src_out_arr_nop(i) + ); + END GENERATE; + + -- Generate SOP, EOP for ASTRON + gen_pkg_signals: FOR i IN 0 TO 14 GENERATE + u_gen_signals : ENTITY dp_lib.dp_block_gen + GENERIC MAP( + g_use_src_in => FALSE, + g_nof_data => g_blocks_per_sync + ) + PORT MAP( + rst => KPN_RST, + clk => KPN_CLK, + -- Streaming sink + snk_in => src_out_arr_nop(i), + -- Streaming source + src_in => src_in_arr(i), + src_out => src_out_arr(i), + -- MM control + en => '1' + ); + END GENERATE; + +END ARCHITECTURE STRUCTURE; + diff --git a/applications/compaan/designs/compaan_io_test_fn/src/vhdl/mmm_compaan_io_test_fn.vhd b/applications/compaan/designs/compaan_io_test_fn/src/vhdl/mmm_compaan_io_test_fn.vhd new file mode 100644 index 0000000000000000000000000000000000000000..99e2f11de878e4844bb9946d97a94e85d7dd803a --- /dev/null +++ b/applications/compaan/designs/compaan_io_test_fn/src/vhdl/mmm_compaan_io_test_fn.vhd @@ -0,0 +1,621 @@ +-------------------------------------------------------------------------------- +-- +-- Copyright (C) 2014 +-- ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.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/>. +-- +-------------------------------------------------------------------------------- + +-- u_inst_mmm_compaan_io_test_fn : ENTITY work.mmm_compaan_io_test_fn +-- GENERIC MAP( +-- g_sim => g_sim, +-- g_sim_unb_nr => g_sim_unb_nr, +-- g_sim_node_nr => g_sim_node_nr +-- ) +-- PORT MAP( +-- mm_clk => mm_clk, +-- mm_rst => mm_rst, +-- pout_wdi => pout_wdi, +-- reg_wdi_mosi => reg_wdi_mosi, +-- reg_wdi_miso => reg_wdi_miso, +-- reg_unb_system_info_mosi => reg_unb_system_info_mosi, +-- reg_unb_system_info_miso => reg_unb_system_info_miso, +-- rom_unb_system_info_mosi => rom_unb_system_info_mosi, +-- rom_unb_system_info_miso => rom_unb_system_info_miso, +-- reg_unb_sens_mosi => reg_unb_sens_mosi, +-- reg_unb_sens_miso => reg_unb_sens_miso, +-- reg_ppsh_mosi => reg_ppsh_mosi, +-- reg_ppsh_miso => reg_ppsh_miso, +-- eth1g_mm_rst => eth1g_mm_rst, +-- eth1g_reg_interrupt => eth1g_reg_interrupt, +-- eth1g_ram_mosi => eth1g_ram_mosi, +-- eth1g_ram_miso => eth1g_ram_miso, +-- eth1g_reg_mosi => eth1g_reg_mosi, +-- eth1g_reg_miso => eth1g_reg_miso, +-- eth1g_tse_mosi => eth1g_tse_mosi, +-- eth1g_tse_miso => eth1g_tse_miso, +-- reg_epcs_mosi => reg_epcs_mosi, +-- reg_epcs_miso => reg_epcs_miso, +-- reg_remu_mosi => reg_remu_mosi, +-- reg_remu_miso => reg_remu_miso, +-- reg_dp_offload_tx_mosi => reg_dp_offload_tx_mosi, +-- reg_dp_offload_tx_miso => reg_dp_offload_tx_miso, +-- reg_dp_offload_tx_hdr_dat_mosi => reg_dp_offload_tx_hdr_dat_mosi, +-- reg_dp_offload_tx_hdr_dat_miso => reg_dp_offload_tx_hdr_dat_miso, +-- reg_dp_offload_tx_hdr_ovr_mosi => reg_dp_offload_tx_hdr_ovr_mosi, +-- reg_dp_offload_tx_hdr_ovr_miso => reg_dp_offload_tx_hdr_ovr_miso, +-- reg_dp_offload_rx_hdr_dat_mosi => reg_dp_offload_rx_hdr_dat_mosi, +-- reg_dp_offload_rx_hdr_dat_miso => reg_dp_offload_rx_hdr_dat_miso, +-- reg_mdio_0_mosi => reg_mdio_0_mosi, +-- reg_mdio_0_miso => reg_mdio_0_miso, +-- reg_mdio_1_mosi => reg_mdio_1_mosi, +-- reg_mdio_1_miso => reg_mdio_1_miso, +-- reg_mdio_2_mosi => reg_mdio_2_mosi, +-- reg_mdio_2_miso => reg_mdio_2_miso, +-- reg_tr_10gbe_mosi => reg_tr_10gbe_mosi, +-- reg_tr_10gbe_miso => reg_tr_10gbe_miso, +-- reg_tr_xaui_mosi => reg_tr_xaui_mosi, +-- reg_tr_xaui_miso => reg_tr_xaui_miso, +-- reg_diagnostics_mosi => reg_diagnostics_mosi, +-- reg_diagnostics_miso => reg_diagnostics_miso, +-- reg_tr_nonbonded_mosi => reg_tr_nonbonded_mosi, +-- reg_tr_nonbonded_miso => reg_tr_nonbonded_miso, +-- reg_compaan_mosi => reg_compaan_mosi, +-- reg_compaan_miso => reg_compaan_miso +-- ); +-- +-- SIGNAL reg_wdi_mosi : t_mem_mosi; +-- SIGNAL reg_wdi_miso : t_mem_miso; +-- SIGNAL reg_unb_system_info_mosi : t_mem_mosi; +-- SIGNAL reg_unb_system_info_miso : t_mem_miso; +-- SIGNAL rom_unb_system_info_mosi : t_mem_mosi; +-- SIGNAL rom_unb_system_info_miso : t_mem_miso; +-- SIGNAL reg_unb_sens_mosi : t_mem_mosi; +-- SIGNAL reg_unb_sens_miso : t_mem_miso; +-- SIGNAL reg_ppsh_mosi : t_mem_mosi; +-- SIGNAL reg_ppsh_miso : t_mem_miso; +-- SIGNAL eth1g_ram_mosi : t_mem_mosi; +-- SIGNAL eth1g_ram_miso : t_mem_miso; +-- SIGNAL eth1g_reg_mosi : t_mem_mosi; +-- SIGNAL eth1g_reg_miso : t_mem_miso; +-- SIGNAL eth1g_tse_mosi : t_mem_mosi; +-- SIGNAL eth1g_tse_miso : t_mem_miso; +-- SIGNAL reg_epcs_mosi : t_mem_mosi; +-- SIGNAL reg_epcs_miso : t_mem_miso; +-- SIGNAL reg_remu_mosi : t_mem_mosi; +-- SIGNAL reg_remu_miso : t_mem_miso; +-- SIGNAL reg_dp_offload_tx_mosi : t_mem_mosi; +-- SIGNAL reg_dp_offload_tx_miso : t_mem_miso; +-- SIGNAL reg_dp_offload_tx_hdr_dat_mosi : t_mem_mosi; +-- SIGNAL reg_dp_offload_tx_hdr_dat_miso : t_mem_miso; +-- SIGNAL reg_dp_offload_tx_hdr_ovr_mosi : t_mem_mosi; +-- SIGNAL reg_dp_offload_tx_hdr_ovr_miso : t_mem_miso; +-- SIGNAL reg_dp_offload_rx_hdr_dat_mosi : t_mem_mosi; +-- SIGNAL reg_dp_offload_rx_hdr_dat_miso : t_mem_miso; +-- SIGNAL reg_mdio_0_mosi : t_mem_mosi; +-- SIGNAL reg_mdio_0_miso : t_mem_miso; +-- SIGNAL reg_mdio_1_mosi : t_mem_mosi; +-- SIGNAL reg_mdio_1_miso : t_mem_miso; +-- SIGNAL reg_mdio_2_mosi : t_mem_mosi; +-- SIGNAL reg_mdio_2_miso : t_mem_miso; +-- SIGNAL reg_tr_10gbe_mosi : t_mem_mosi; +-- SIGNAL reg_tr_10gbe_miso : t_mem_miso; +-- SIGNAL reg_tr_xaui_mosi : t_mem_mosi; +-- SIGNAL reg_tr_xaui_miso : t_mem_miso; +-- SIGNAL reg_diagnostics_mosi : t_mem_mosi; +-- SIGNAL reg_diagnostics_miso : t_mem_miso; +-- SIGNAL reg_tr_nonbonded_mosi : t_mem_mosi; +-- SIGNAL reg_tr_nonbonded_miso : t_mem_miso; +-- SIGNAL reg_compaan_mosi : t_mem_mosi; +-- SIGNAL reg_compaan_miso : t_mem_miso; +-- +LIBRARY IEEE, common_lib, unb1_board_lib, mm_lib, eth_lib, technology_lib, tech_tse_lib; +USE IEEE.STD_LOGIC_1164.ALL; +USE IEEE.NUMERIC_STD.ALL; +USE common_lib.common_pkg.ALL; +USE common_lib.common_mem_pkg.ALL; +USE common_lib.tb_common_mem_pkg.ALL; +USE common_lib.common_field_pkg.ALL; +USE common_lib.common_network_total_header_pkg.ALL; +USE common_lib.common_network_layers_pkg.ALL; +USE common_lib.common_mem_pkg.ALL; +USE unb1_board_lib.unb1_board_pkg.ALL; +USE unb1_board_lib.unb1_board_peripherals_pkg.ALL; +USE mm_lib.mm_file_pkg.ALL; +USE mm_lib.mm_file_unb_pkg.ALL; +USE eth_lib.eth_pkg.ALL; +USE technology_lib.technology_pkg.ALL; +USE tech_tse_lib.tech_tse_pkg.ALL; +USE tech_tse_lib.tb_tech_tse_pkg.ALL; + +ENTITY mmm_compaan_io_test_fn IS + GENERIC ( + g_sim : BOOLEAN := FALSE; + g_sim_unb_nr : NATURAL := 0; + g_sim_node_nr : NATURAL := 0 + ); + PORT ( + mm_clk : IN STD_LOGIC := '1'; + mm_rst : IN STD_LOGIC := '1'; + pout_wdi : OUT STD_LOGIC := '1'; + reg_wdi_mosi : OUT t_mem_mosi; + reg_wdi_miso : IN t_mem_miso := c_mem_miso_rst; + reg_unb_system_info_mosi : OUT t_mem_mosi; + reg_unb_system_info_miso : IN t_mem_miso := c_mem_miso_rst; + rom_unb_system_info_mosi : OUT t_mem_mosi; + rom_unb_system_info_miso : IN t_mem_miso := c_mem_miso_rst; + reg_unb_sens_mosi : OUT t_mem_mosi; + reg_unb_sens_miso : IN t_mem_miso := c_mem_miso_rst; + reg_ppsh_mosi : OUT t_mem_mosi; + reg_ppsh_miso : IN t_mem_miso := c_mem_miso_rst; + eth1g_mm_rst : OUT STD_LOGIC; + eth1g_reg_interrupt : IN STD_LOGIC; + eth1g_ram_mosi : OUT t_mem_mosi; + eth1g_ram_miso : IN t_mem_miso := c_mem_miso_rst; + eth1g_reg_mosi : OUT t_mem_mosi; + eth1g_reg_miso : IN t_mem_miso := c_mem_miso_rst; + eth1g_tse_mosi : OUT t_mem_mosi; + eth1g_tse_miso : IN t_mem_miso := c_mem_miso_rst; + reg_epcs_mosi : OUT t_mem_mosi; + reg_epcs_miso : IN t_mem_miso := c_mem_miso_rst; + reg_remu_mosi : OUT t_mem_mosi; + reg_remu_miso : IN t_mem_miso := c_mem_miso_rst; + reg_dp_offload_tx_mosi : OUT t_mem_mosi; + reg_dp_offload_tx_miso : IN t_mem_miso := c_mem_miso_rst; + reg_dp_offload_tx_hdr_dat_mosi : OUT t_mem_mosi; + reg_dp_offload_tx_hdr_dat_miso : IN t_mem_miso := c_mem_miso_rst; + reg_dp_offload_tx_hdr_ovr_mosi : OUT t_mem_mosi; + reg_dp_offload_tx_hdr_ovr_miso : IN t_mem_miso := c_mem_miso_rst; + reg_dp_offload_rx_hdr_dat_mosi : OUT t_mem_mosi; + reg_dp_offload_rx_hdr_dat_miso : IN t_mem_miso := c_mem_miso_rst; + reg_mdio_0_mosi : OUT t_mem_mosi; + reg_mdio_0_miso : IN t_mem_miso := c_mem_miso_rst; + reg_mdio_1_mosi : OUT t_mem_mosi; + reg_mdio_1_miso : IN t_mem_miso := c_mem_miso_rst; + reg_mdio_2_mosi : OUT t_mem_mosi; + reg_mdio_2_miso : IN t_mem_miso := c_mem_miso_rst; + reg_tr_10gbe_mosi : OUT t_mem_mosi; + reg_tr_10gbe_miso : IN t_mem_miso := c_mem_miso_rst; + reg_tr_xaui_mosi : OUT t_mem_mosi; + reg_tr_xaui_miso : IN t_mem_miso := c_mem_miso_rst; + reg_diagnostics_mosi : OUT t_mem_mosi; + reg_diagnostics_miso : IN t_mem_miso := c_mem_miso_rst; + reg_tr_nonbonded_mosi : OUT t_mem_mosi; + reg_tr_nonbonded_miso : IN t_mem_miso := c_mem_miso_rst; + reg_compaan_mosi : OUT t_mem_mosi; + reg_compaan_miso : IN t_mem_miso := c_mem_miso_rst + ); +END ENTITY mmm_compaan_io_test_fn; + +ARCHITECTURE str OF mmm_compaan_io_test_fn IS + + CONSTANT c_sim_node_type : STRING(1 TO 2) := sel_a_b(g_sim_node_nr<4, "FN", "BN"); + CONSTANT c_sim_node_nr : NATURAL := sel_a_b(c_sim_node_type="BN", g_sim_node_nr-4, g_sim_node_nr); + CONSTANT c_sim_eth_src_mac : STD_LOGIC_VECTOR(c_network_eth_mac_slv'RANGE) := X"00228608" & TO_UVEC(g_sim_unb_nr, c_byte_w) & TO_UVEC(g_sim_node_nr, c_byte_w); + CONSTANT c_sim_eth_control_rx_en : NATURAL := 2**c_eth_mm_reg_control_bi.rx_en; + + SIGNAL sim_eth_mm_bus_switch : STD_LOGIC ; + SIGNAL sim_eth_psc_access : STD_LOGIC ; + SIGNAL i_eth1g_reg_mosi : t_mem_mosi; + SIGNAL i_eth1g_reg_miso : t_mem_miso; + SIGNAL mm_rst_n : STD_LOGIC ; + SIGNAL sim_eth1g_reg_mosi : t_mem_mosi; + + COMPONENT mm_file IS + GENERIC ( + g_file_prefix : STRING ; + g_mm_clk_period : TIME := 8 ns; + g_update_on_change : BOOLEAN := FALSE; + g_mm_rd_latency : NATURAL := 1 + ); + PORT ( + mm_rst : IN STD_LOGIC; + mm_clk : IN STD_LOGIC; + mm_master_out : OUT t_mem_mosi := c_mem_mosi_rst; + mm_master_in : IN t_mem_miso := c_mem_miso_rst + ); + END COMPONENT mm_file; + + COMPONENT qsys_compaan_io_test_fn IS + PORT ( + reg_dp_offload_tx_hdr_dat_write_export : out std_logic; + reg_dp_offload_tx_hdr_ovr_reset_export : out std_logic; + eth1g_reg_readdata_export : in std_logic_vector(31 downto 0) := (others => '0'); + reg_dp_offload_tx_reset_export : out std_logic; + reset_in_reset_n : in std_logic := '0'; + reg_diagnostics_write_export : out std_logic; + pio_pps_address_export : out std_logic; + pio_system_info_address_export : out std_logic_vector(4 downto 0); + pio_pps_reset_export : out std_logic; + eth1g_tse_writedata_export : out std_logic_vector(31 downto 0); + reg_mdio_1_clk_export : out std_logic; + reg_tr_10gbe_write_export : out std_logic; + eth1g_ram_readdata_export : in std_logic_vector(31 downto 0) := (others => '0'); + eth1g_ram_address_export : out std_logic_vector(9 downto 0); + reg_mdio_0_readdata_export : in std_logic_vector(31 downto 0) := (others => '0'); + pio_pps_readdata_export : in std_logic_vector(31 downto 0) := (others => '0'); + reg_dp_offload_rx_hdr_dat_clk_export : out std_logic; + eth1g_reg_writedata_export : out std_logic_vector(31 downto 0); + pio_system_info_writedata_export : out std_logic_vector(31 downto 0); + reg_unb_sens_reset_export : out std_logic; + reg_tr_xaui_write_export : out std_logic; + eth1g_tse_address_export : out std_logic_vector(9 downto 0); + clk_in_clk : in std_logic := '0'; + reg_tr_xaui_writedata_export : out std_logic_vector(31 downto 0); + reg_wdi_reset_export : out std_logic; + reg_dp_offload_tx_readdata_export : in std_logic_vector(31 downto 0) := (others => '0'); + reg_dp_offload_tx_read_export : out std_logic; + rom_system_info_clk_export : out std_logic; + reg_unb_sens_read_export : out std_logic; + reg_compaan_readdata_export : in std_logic_vector(31 downto 0) := (others => '0'); + reg_unb_sens_write_export : out std_logic; + reg_dp_offload_rx_hdr_dat_readdata_export : in std_logic_vector(31 downto 0) := (others => '0'); + reg_mdio_0_clk_export : out std_logic; + eth1g_tse_readdata_export : in std_logic_vector(31 downto 0) := (others => '0'); + eth1g_ram_write_export : out std_logic; + reg_dp_offload_tx_write_export : out std_logic; + reg_diagnostics_writedata_export : out std_logic_vector(31 downto 0); + reg_dp_offload_tx_hdr_ovr_read_export : out std_logic; + reg_tr_xaui_address_export : out std_logic_vector(10 downto 0); + reg_unb_sens_clk_export : out std_logic; + reg_tr_nonbonded_clk_export : out std_logic; + reg_compaan_writedata_export : out std_logic_vector(31 downto 0); + reg_dp_offload_tx_hdr_dat_writedata_export : out std_logic_vector(31 downto 0); + reg_mdio_0_write_export : out std_logic; + reg_wdi_read_export : out std_logic; + reg_dp_offload_rx_hdr_dat_write_export : out std_logic; + eth1g_ram_read_export : out std_logic; + reg_dp_offload_rx_hdr_dat_read_export : out std_logic; + eth1g_reg_read_export : out std_logic; + reg_tr_10gbe_read_export : out std_logic; + reg_dp_offload_rx_hdr_dat_reset_export : out std_logic; + eth1g_tse_write_export : out std_logic; + reg_unb_sens_readdata_export : in std_logic_vector(31 downto 0) := (others => '0'); + reg_dp_offload_tx_writedata_export : out std_logic_vector(31 downto 0); + reg_mdio_2_readdata_export : in std_logic_vector(31 downto 0) := (others => '0'); + reg_tr_xaui_waitrequest_export : in std_logic := '0'; + pio_pps_clk_export : out std_logic; + eth1g_reg_address_export : out std_logic_vector(3 downto 0); + pio_system_info_readdata_export : in std_logic_vector(31 downto 0) := (others => '0'); + reg_dp_offload_tx_hdr_ovr_address_export : out std_logic_vector(4 downto 0); + rom_system_info_writedata_export : out std_logic_vector(31 downto 0); + reg_tr_xaui_reset_export : out std_logic; + reg_compaan_clk_export : out std_logic; + reg_dp_offload_tx_hdr_dat_reset_export : out std_logic; + reg_dp_offload_tx_hdr_dat_address_export : out std_logic_vector(5 downto 0); + reg_tr_nonbonded_reset_export : out std_logic; + reg_mdio_2_read_export : out std_logic; + reg_mdio_1_writedata_export : out std_logic_vector(31 downto 0); + reg_dp_offload_tx_hdr_ovr_writedata_export : out std_logic_vector(31 downto 0); + reg_dp_offload_tx_hdr_ovr_readdata_export : in std_logic_vector(31 downto 0) := (others => '0'); + reg_mdio_2_reset_export : out std_logic; + reg_tr_nonbonded_address_export : out std_logic_vector(3 downto 0); + reg_tr_10gbe_writedata_export : out std_logic_vector(31 downto 0); + reg_wdi_address_export : out std_logic; + pio_system_info_write_export : out std_logic; + reg_tr_10gbe_readdata_export : in std_logic_vector(31 downto 0) := (others => '0'); + reg_tr_nonbonded_writedata_export : out std_logic_vector(31 downto 0); + reg_tr_nonbonded_write_export : out std_logic; + pio_pps_write_export : out std_logic; + rom_system_info_write_export : out std_logic; + rom_system_info_read_export : out std_logic; + reg_dp_offload_tx_hdr_dat_clk_export : out std_logic; + reg_diagnostics_address_export : out std_logic_vector(5 downto 0); + reg_dp_offload_rx_hdr_dat_address_export : out std_logic_vector(6 downto 0); + reg_dp_offload_rx_hdr_dat_writedata_export : out std_logic_vector(31 downto 0); + reg_mdio_2_clk_export : out std_logic; + reg_tr_nonbonded_readdata_export : in std_logic_vector(31 downto 0) := (others => '0'); + reg_mdio_1_readdata_export : in std_logic_vector(31 downto 0) := (others => '0'); + reg_mdio_2_address_export : out std_logic_vector(2 downto 0); + eth1g_tse_read_export : out std_logic; + reg_tr_xaui_readdata_export : in std_logic_vector(31 downto 0) := (others => '0'); + reg_mdio_1_read_export : out std_logic; + reg_unb_sens_writedata_export : out std_logic_vector(31 downto 0); + eth1g_ram_writedata_export : out std_logic_vector(31 downto 0); + reg_compaan_address_export : out std_logic_vector(18 downto 0); + reg_dp_offload_tx_address_export : out std_logic; + reg_mdio_2_writedata_export : out std_logic_vector(31 downto 0); + reg_tr_nonbonded_read_export : out std_logic; + out_port_from_the_pio_debug_wave : out std_logic_vector(31 downto 0); + reg_mdio_1_address_export : out std_logic_vector(2 downto 0); + reg_tr_xaui_read_export : out std_logic; + reg_wdi_writedata_export : out std_logic_vector(31 downto 0); + pio_system_info_reset_export : out std_logic; + pio_system_info_read_export : out std_logic; + reg_mdio_1_reset_export : out std_logic; + reg_wdi_clk_export : out std_logic; + reg_dp_offload_tx_hdr_dat_readdata_export : in std_logic_vector(31 downto 0) := (others => '0'); + eth1g_mm_rst_export : out std_logic; + reg_diagnostics_read_export : out std_logic; + reg_tr_10gbe_reset_export : out std_logic; + reg_compaan_read_export : out std_logic; + reg_diagnostics_reset_export : out std_logic; + reg_tr_10gbe_clk_export : out std_logic; + reg_dp_offload_tx_hdr_ovr_clk_export : out std_logic; + out_port_from_the_pio_wdi : out std_logic; + eth1g_reg_write_export : out std_logic; + reg_mdio_1_write_export : out std_logic; + reg_compaan_reset_export : out std_logic; + reg_dp_offload_tx_hdr_dat_read_export : out std_logic; + rom_system_info_readdata_export : in std_logic_vector(31 downto 0) := (others => '0'); + reg_tr_xaui_clk_export : out std_logic; + reg_wdi_write_export : out std_logic; + reg_wdi_readdata_export : in std_logic_vector(31 downto 0) := (others => '0'); + reg_compaan_write_export : out std_logic; + pio_pps_read_export : out std_logic; + reg_mdio_2_write_export : out std_logic; + reg_dp_offload_tx_clk_export : out std_logic; + pio_system_info_clk_export : out std_logic; + reg_tr_10gbe_address_export : out std_logic_vector(14 downto 0); + pio_pps_writedata_export : out std_logic_vector(31 downto 0); + reg_mdio_0_writedata_export : out std_logic_vector(31 downto 0); + eth1g_tse_waitrequest_export : in std_logic := '0'; + reg_tr_10gbe_waitrequest_export : in std_logic := '0'; + eth1g_mm_clk_export : out std_logic; + rom_system_info_reset_export : out std_logic; + reg_unb_sens_address_export : out std_logic_vector(2 downto 0); + reg_mdio_0_reset_export : out std_logic; + rom_system_info_address_export : out std_logic_vector(9 downto 0); + eth1g_irq_export : in std_logic := '0'; + reg_mdio_0_address_export : out std_logic_vector(2 downto 0); + reg_diagnostics_readdata_export : in std_logic_vector(31 downto 0) := (others => '0'); + reg_dp_offload_tx_hdr_ovr_write_export : out std_logic; + reg_diagnostics_clk_export : out std_logic; + reg_mdio_0_read_export : out std_logic + ); + END COMPONENT qsys_compaan_io_test_fn; + + +BEGIN + + ---------------------------------------------------------------------------- + -- MM <-> file I/O for simulation. The files are created in $UPE/sim. + ---------------------------------------------------------------------------- + gen_mm_file_io : IF g_sim = TRUE GENERATE + u_mm_file_reg_wdi : mm_file GENERIC MAP(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_WDI") + PORT MAP(mm_rst, mm_clk, reg_wdi_mosi, reg_wdi_miso ); + u_mm_file_reg_unb_system_info : mm_file GENERIC MAP(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "PIO_SYSTEM_INFO") + PORT MAP(mm_rst, mm_clk, reg_unb_system_info_mosi, reg_unb_system_info_miso ); + u_mm_file_rom_unb_system_info : mm_file GENERIC MAP(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "ROM_SYSTEM_INFO") + PORT MAP(mm_rst, mm_clk, rom_unb_system_info_mosi, rom_unb_system_info_miso ); + u_mm_file_reg_unb_sens : mm_file GENERIC MAP(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_UNB_SENS") + PORT MAP(mm_rst, mm_clk, reg_unb_sens_mosi, reg_unb_sens_miso ); + u_mm_file_reg_ppsh : mm_file GENERIC MAP(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "PIO_PPS") + PORT MAP(mm_rst, mm_clk, reg_ppsh_mosi, reg_ppsh_miso ); + u_mm_file_eth1g_ram : mm_file GENERIC MAP(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "ETH1G_RAM") + PORT MAP(mm_rst, mm_clk, eth1g_ram_mosi, eth1g_ram_miso ); + u_mm_file_eth1g_reg : mm_file GENERIC MAP(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "AVS_ETH_0_MMS_REG") + PORT MAP(mm_rst, mm_clk, eth1g_reg_mosi, eth1g_reg_miso ); + u_mm_file_eth1g_tse : mm_file GENERIC MAP(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "ETH1G_TSE") + PORT MAP(mm_rst, mm_clk, eth1g_tse_mosi, eth1g_tse_miso ); + u_mm_file_reg_epcs : mm_file GENERIC MAP(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_EPCS") + PORT MAP(mm_rst, mm_clk, reg_epcs_mosi, reg_epcs_miso ); + u_mm_file_reg_remu : mm_file GENERIC MAP(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_REMU") + PORT MAP(mm_rst, mm_clk, reg_remu_mosi, reg_remu_miso ); + u_mm_file_reg_dp_offload_tx : mm_file GENERIC MAP(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_DP_OFFLOAD_TX") + PORT MAP(mm_rst, mm_clk, reg_dp_offload_tx_mosi, reg_dp_offload_tx_miso ); + u_mm_file_reg_dp_offload_tx_hdr_dat : mm_file GENERIC MAP(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_DP_OFFLOAD_TX_HDR_DAT") + PORT MAP(mm_rst, mm_clk, reg_dp_offload_tx_hdr_dat_mosi, reg_dp_offload_tx_hdr_dat_miso ); + u_mm_file_reg_dp_offload_tx_hdr_ovr : mm_file GENERIC MAP(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_DP_OFFLOAD_TX_HDR_OVR") + PORT MAP(mm_rst, mm_clk, reg_dp_offload_tx_hdr_ovr_mosi, reg_dp_offload_tx_hdr_ovr_miso ); + u_mm_file_reg_dp_offload_rx_hdr_dat : mm_file GENERIC MAP(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_DP_OFFLOAD_RX_HDR_DAT") + PORT MAP(mm_rst, mm_clk, reg_dp_offload_rx_hdr_dat_mosi, reg_dp_offload_rx_hdr_dat_miso ); + u_mm_file_reg_mdio_0 : mm_file GENERIC MAP(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_MDIO_0") + PORT MAP(mm_rst, mm_clk, reg_mdio_0_mosi, reg_mdio_0_miso ); + u_mm_file_reg_mdio_1 : mm_file GENERIC MAP(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_MDIO_1") + PORT MAP(mm_rst, mm_clk, reg_mdio_1_mosi, reg_mdio_1_miso ); + u_mm_file_reg_mdio_2 : mm_file GENERIC MAP(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_MDIO_2") + PORT MAP(mm_rst, mm_clk, reg_mdio_2_mosi, reg_mdio_2_miso ); + u_mm_file_reg_tr_10gbe : mm_file GENERIC MAP(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_TR_10GBE") + PORT MAP(mm_rst, mm_clk, reg_tr_10gbe_mosi, reg_tr_10gbe_miso ); + u_mm_file_reg_tr_xaui : mm_file GENERIC MAP(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_TR_XAUI") + PORT MAP(mm_rst, mm_clk, reg_tr_xaui_mosi, reg_tr_xaui_miso ); + u_mm_file_reg_diagnostics : mm_file GENERIC MAP(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_DIAGNOSTICS") + PORT MAP(mm_rst, mm_clk, reg_diagnostics_mosi, reg_diagnostics_miso ); + u_mm_file_reg_tr_nonbonded : mm_file GENERIC MAP(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_TR_NONBONDED") + PORT MAP(mm_rst, mm_clk, reg_tr_nonbonded_mosi, reg_tr_nonbonded_miso ); + u_mm_file_reg_compaan : mm_file GENERIC MAP(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_COMPAAN") + PORT MAP(mm_rst, mm_clk, reg_compaan_mosi, reg_compaan_miso ); + ---------------------------------------------------------------------------- + -- 1GbE setup sequence normally performed by unb_os@NIOS + ---------------------------------------------------------------------------- + eth1g_mm_rst <= '1', '0' AFTER 40 ns; + p_eth_setup : PROCESS + BEGIN + sim_eth_mm_bus_switch <= '1'; + eth1g_tse_mosi.wr <= '0'; + eth1g_tse_mosi.rd <= '0'; + WAIT FOR 400 ns; + WAIT UNTIL rising_edge(mm_clk); + proc_tech_tse_setup(c_tech_stratixiv, FALSE, c_tech_tse_tx_fifo_depth, c_tech_tse_rx_fifo_depth, c_tech_tse_tx_ready_latency, c_sim_eth_src_mac, sim_eth_psc_access, mm_clk, eth1g_tse_miso, eth1g_tse_mosi); + -- Enable RX + proc_mem_mm_bus_wr(c_eth_reg_control_wi+0, c_sim_eth_control_rx_en, mm_clk, eth1g_reg_miso, sim_eth1g_reg_mosi); -- control rx en + sim_eth_mm_bus_switch <= '0'; + WAIT; + END PROCESS; + + p_switch : PROCESS(sim_eth_mm_bus_switch, sim_eth1g_reg_mosi, i_eth1g_reg_mosi) + BEGIN + IF sim_eth_mm_bus_switch = '1' THEN + eth1g_reg_mosi <= sim_eth1g_reg_mosi; + ELSE + eth1g_reg_mosi <= i_eth1g_reg_mosi; + END IF; + END PROCESS; + ---------------------------------------------------------------------------- + -- Procedure that polls a sim control file that can be used to e.g. get + -- the simulation time in ns + ---------------------------------------------------------------------------- + mmf_poll_sim_ctrl_file(c_mmf_unb_file_path & "sim.ctrl", c_mmf_unb_file_path & "sim.stat"); + + END GENERATE; + ---------------------------------------------------------------------------- + -- SOPC or QSYS for synthesis + ---------------------------------------------------------------------------- + gen_qsys_compaan_io_test_fn : IF g_sim = FALSE GENERATE + + mm_rst_n <= NOT(mm_rst); + + u_qsys_compaan_io_test_fn : qsys_compaan_io_test_fn + PORT MAP( + clk_in_clk => mm_clk, + eth1g_irq_export => eth1g_reg_interrupt, + eth1g_mm_clk_export => OPEN, + eth1g_mm_rst_export => eth1g_mm_rst, + eth1g_ram_address_export => eth1g_ram_mosi.address(9 DOWNTO 0), + eth1g_ram_read_export => eth1g_ram_mosi.rd, + eth1g_ram_readdata_export => eth1g_ram_miso.rddata(c_word_w-1 DOWNTO 0), + eth1g_ram_write_export => eth1g_ram_mosi.wr, + eth1g_ram_writedata_export => eth1g_ram_mosi.wrdata(c_word_w-1 DOWNTO 0), + eth1g_reg_address_export => eth1g_reg_mosi.address(3 DOWNTO 0), + eth1g_reg_read_export => eth1g_reg_mosi.rd, + eth1g_reg_readdata_export => eth1g_reg_miso.rddata(c_word_w-1 DOWNTO 0), + eth1g_reg_write_export => eth1g_reg_mosi.wr, + eth1g_reg_writedata_export => eth1g_reg_mosi.wrdata(c_word_w-1 DOWNTO 0), + eth1g_tse_address_export => eth1g_tse_mosi.address(9 DOWNTO 0), + eth1g_tse_read_export => eth1g_tse_mosi.rd, + eth1g_tse_readdata_export => eth1g_tse_miso.rddata(c_word_w-1 DOWNTO 0), + eth1g_tse_waitrequest_export => eth1g_tse_miso.waitrequest, + eth1g_tse_write_export => eth1g_tse_mosi.wr, + eth1g_tse_writedata_export => eth1g_tse_mosi.wrdata(c_word_w-1 DOWNTO 0), + out_port_from_the_pio_debug_wave => OPEN, + out_port_from_the_pio_wdi => pout_wdi, + pio_pps_address_export => reg_ppsh_mosi.address(0), + pio_pps_clk_export => OPEN, + pio_pps_read_export => reg_ppsh_mosi.rd, + pio_pps_readdata_export => reg_ppsh_miso.rddata(c_word_w-1 DOWNTO 0), + pio_pps_reset_export => OPEN, + pio_pps_write_export => reg_ppsh_mosi.wr, + pio_pps_writedata_export => reg_ppsh_mosi.wrdata(c_word_w-1 DOWNTO 0), + pio_system_info_address_export => reg_unb_system_info_mosi.address(4 DOWNTO 0), + pio_system_info_clk_export => OPEN, + pio_system_info_read_export => reg_unb_system_info_mosi.rd, + pio_system_info_readdata_export => reg_unb_system_info_miso.rddata(c_word_w-1 DOWNTO 0), + pio_system_info_reset_export => OPEN, + pio_system_info_write_export => reg_unb_system_info_mosi.wr, + pio_system_info_writedata_export => reg_unb_system_info_mosi.wrdata(c_word_w-1 DOWNTO 0), + reg_compaan_address_export => reg_compaan_mosi.address(18 DOWNTO 0), + reg_compaan_clk_export => OPEN, + reg_compaan_read_export => reg_compaan_mosi.rd, + reg_compaan_readdata_export => reg_compaan_miso.rddata(c_word_w-1 DOWNTO 0), + reg_compaan_reset_export => OPEN, + reg_compaan_write_export => reg_compaan_mosi.wr, + reg_compaan_writedata_export => reg_compaan_mosi.wrdata(c_word_w-1 DOWNTO 0), + reg_diagnostics_address_export => reg_diagnostics_mosi.address(5 DOWNTO 0), + reg_diagnostics_clk_export => OPEN, + reg_diagnostics_read_export => reg_diagnostics_mosi.rd, + reg_diagnostics_readdata_export => reg_diagnostics_miso.rddata(c_word_w-1 DOWNTO 0), + reg_diagnostics_reset_export => OPEN, + reg_diagnostics_write_export => reg_diagnostics_mosi.wr, + reg_diagnostics_writedata_export => reg_diagnostics_mosi.wrdata(c_word_w-1 DOWNTO 0), + reg_dp_offload_rx_hdr_dat_address_export => reg_dp_offload_rx_hdr_dat_mosi.address(6 DOWNTO 0), + reg_dp_offload_rx_hdr_dat_clk_export => OPEN, + reg_dp_offload_rx_hdr_dat_read_export => reg_dp_offload_rx_hdr_dat_mosi.rd, + reg_dp_offload_rx_hdr_dat_readdata_export => reg_dp_offload_rx_hdr_dat_miso.rddata(c_word_w-1 DOWNTO 0), + reg_dp_offload_rx_hdr_dat_reset_export => OPEN, + reg_dp_offload_rx_hdr_dat_write_export => reg_dp_offload_rx_hdr_dat_mosi.wr, + reg_dp_offload_rx_hdr_dat_writedata_export => reg_dp_offload_rx_hdr_dat_mosi.wrdata(c_word_w-1 DOWNTO 0), + reg_dp_offload_tx_address_export => reg_dp_offload_tx_mosi.address(0), + reg_dp_offload_tx_clk_export => OPEN, + reg_dp_offload_tx_hdr_dat_address_export => reg_dp_offload_tx_hdr_dat_mosi.address(5 DOWNTO 0), + reg_dp_offload_tx_hdr_dat_clk_export => OPEN, + reg_dp_offload_tx_hdr_dat_read_export => reg_dp_offload_tx_hdr_dat_mosi.rd, + reg_dp_offload_tx_hdr_dat_readdata_export => reg_dp_offload_tx_hdr_dat_miso.rddata(c_word_w-1 DOWNTO 0), + reg_dp_offload_tx_hdr_dat_reset_export => OPEN, + reg_dp_offload_tx_hdr_dat_write_export => reg_dp_offload_tx_hdr_dat_mosi.wr, + reg_dp_offload_tx_hdr_dat_writedata_export => reg_dp_offload_tx_hdr_dat_mosi.wrdata(c_word_w-1 DOWNTO 0), + reg_dp_offload_tx_hdr_ovr_address_export => reg_dp_offload_tx_hdr_ovr_mosi.address(4 DOWNTO 0), + reg_dp_offload_tx_hdr_ovr_clk_export => OPEN, + reg_dp_offload_tx_hdr_ovr_read_export => reg_dp_offload_tx_hdr_ovr_mosi.rd, + reg_dp_offload_tx_hdr_ovr_readdata_export => reg_dp_offload_tx_hdr_ovr_miso.rddata(c_word_w-1 DOWNTO 0), + reg_dp_offload_tx_hdr_ovr_reset_export => OPEN, + reg_dp_offload_tx_hdr_ovr_write_export => reg_dp_offload_tx_hdr_ovr_mosi.wr, + reg_dp_offload_tx_hdr_ovr_writedata_export => reg_dp_offload_tx_hdr_ovr_mosi.wrdata(c_word_w-1 DOWNTO 0), + reg_dp_offload_tx_read_export => reg_dp_offload_tx_mosi.rd, + reg_dp_offload_tx_readdata_export => reg_dp_offload_tx_miso.rddata(c_word_w-1 DOWNTO 0), + reg_dp_offload_tx_reset_export => OPEN, + reg_dp_offload_tx_write_export => reg_dp_offload_tx_mosi.wr, + reg_dp_offload_tx_writedata_export => reg_dp_offload_tx_mosi.wrdata(c_word_w-1 DOWNTO 0), + reg_mdio_0_address_export => reg_mdio_0_mosi.address(2 DOWNTO 0), + reg_mdio_0_clk_export => OPEN, + reg_mdio_0_read_export => reg_mdio_0_mosi.rd, + reg_mdio_0_readdata_export => reg_mdio_0_miso.rddata(c_word_w-1 DOWNTO 0), + reg_mdio_0_reset_export => OPEN, + reg_mdio_0_write_export => reg_mdio_0_mosi.wr, + reg_mdio_0_writedata_export => reg_mdio_0_mosi.wrdata(c_word_w-1 DOWNTO 0), + reg_mdio_1_address_export => reg_mdio_1_mosi.address(2 DOWNTO 0), + reg_mdio_1_clk_export => OPEN, + reg_mdio_1_read_export => reg_mdio_1_mosi.rd, + reg_mdio_1_readdata_export => reg_mdio_1_miso.rddata(c_word_w-1 DOWNTO 0), + reg_mdio_1_reset_export => OPEN, + reg_mdio_1_write_export => reg_mdio_1_mosi.wr, + reg_mdio_1_writedata_export => reg_mdio_1_mosi.wrdata(c_word_w-1 DOWNTO 0), + reg_mdio_2_address_export => reg_mdio_2_mosi.address(2 DOWNTO 0), + reg_mdio_2_clk_export => OPEN, + reg_mdio_2_read_export => reg_mdio_2_mosi.rd, + reg_mdio_2_readdata_export => reg_mdio_2_miso.rddata(c_word_w-1 DOWNTO 0), + reg_mdio_2_reset_export => OPEN, + reg_mdio_2_write_export => reg_mdio_2_mosi.wr, + reg_mdio_2_writedata_export => reg_mdio_2_mosi.wrdata(c_word_w-1 DOWNTO 0), + reg_tr_10gbe_address_export => reg_tr_10gbe_mosi.address(14 DOWNTO 0), + reg_tr_10gbe_clk_export => OPEN, + reg_tr_10gbe_read_export => reg_tr_10gbe_mosi.rd, + reg_tr_10gbe_readdata_export => reg_tr_10gbe_miso.rddata(c_word_w-1 DOWNTO 0), + reg_tr_10gbe_reset_export => OPEN, + reg_tr_10gbe_waitrequest_export => reg_tr_10gbe_miso.waitrequest, + reg_tr_10gbe_write_export => reg_tr_10gbe_mosi.wr, + reg_tr_10gbe_writedata_export => reg_tr_10gbe_mosi.wrdata(c_word_w-1 DOWNTO 0), + reg_tr_nonbonded_address_export => reg_tr_nonbonded_mosi.address(3 DOWNTO 0), + reg_tr_nonbonded_clk_export => OPEN, + reg_tr_nonbonded_read_export => reg_tr_nonbonded_mosi.rd, + reg_tr_nonbonded_readdata_export => reg_tr_nonbonded_miso.rddata(c_word_w-1 DOWNTO 0), + reg_tr_nonbonded_reset_export => OPEN, + reg_tr_nonbonded_write_export => reg_tr_nonbonded_mosi.wr, + reg_tr_nonbonded_writedata_export => reg_tr_nonbonded_mosi.wrdata(c_word_w-1 DOWNTO 0), + reg_tr_xaui_address_export => reg_tr_xaui_mosi.address(10 DOWNTO 0), + reg_tr_xaui_clk_export => OPEN, + reg_tr_xaui_read_export => reg_tr_xaui_mosi.rd, + reg_tr_xaui_readdata_export => reg_tr_xaui_miso.rddata(c_word_w-1 DOWNTO 0), + reg_tr_xaui_reset_export => OPEN, + reg_tr_xaui_waitrequest_export => reg_tr_xaui_miso.waitrequest, + reg_tr_xaui_write_export => reg_tr_xaui_mosi.wr, + reg_tr_xaui_writedata_export => reg_tr_xaui_mosi.wrdata(c_word_w-1 DOWNTO 0), + reg_unb_sens_address_export => reg_unb_sens_mosi.address(2 DOWNTO 0), + reg_unb_sens_clk_export => OPEN, + reg_unb_sens_read_export => reg_unb_sens_mosi.rd, + reg_unb_sens_readdata_export => reg_unb_sens_miso.rddata(c_word_w-1 DOWNTO 0), + reg_unb_sens_reset_export => OPEN, + reg_unb_sens_write_export => reg_unb_sens_mosi.wr, + reg_unb_sens_writedata_export => reg_unb_sens_mosi.wrdata(c_word_w-1 DOWNTO 0), + reg_wdi_address_export => reg_wdi_mosi.address(0), + reg_wdi_clk_export => OPEN, + reg_wdi_read_export => reg_wdi_mosi.rd, + reg_wdi_readdata_export => reg_wdi_miso.rddata(c_word_w-1 DOWNTO 0), + reg_wdi_reset_export => OPEN, + reg_wdi_write_export => reg_wdi_mosi.wr, + reg_wdi_writedata_export => reg_wdi_mosi.wrdata(c_word_w-1 DOWNTO 0), + reset_in_reset_n => mm_rst_n, + rom_system_info_address_export => rom_unb_system_info_mosi.address(9 DOWNTO 0), + rom_system_info_clk_export => OPEN, + rom_system_info_read_export => rom_unb_system_info_mosi.rd, + rom_system_info_readdata_export => rom_unb_system_info_miso.rddata(c_word_w-1 DOWNTO 0), + rom_system_info_reset_export => OPEN, + rom_system_info_write_export => rom_unb_system_info_mosi.wr, + rom_system_info_writedata_export => rom_unb_system_info_mosi.wrdata(c_word_w-1 DOWNTO 0) + ); + END GENERATE; + +END str; diff --git a/applications/compaan/designs/compaan_io_test_fn/tb/python/tc_compaan_io_test.py b/applications/compaan/designs/compaan_io_test_fn/tb/python/tc_compaan_io_test.py new file mode 100644 index 0000000000000000000000000000000000000000..e98e15df780d9385115a23b919ab47618f6963d4 --- /dev/null +++ b/applications/compaan/designs/compaan_io_test_fn/tb/python/tc_compaan_io_test.py @@ -0,0 +1,174 @@ +#! /usr/bin/env python +############################################################################### +# +# Copyright (dC) 2015 +# ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.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: +# . Test Compaan's capability to send data to a terminal + + +from common import * +import sys +import test_case +import node_io +import pi_diag_block_gen +import pi_diag_data_buffer +import pi_dp_offload_tx_hdr_dat_compaan_unb1_10g_terminal +import pi_eth +import pi_compaan +from eth import * + +################################################################################ +## Constants and variables +################################################################################ +# System definitions +c_10g_data_w = 32 # <= 32 for terminal +c_blocksize = 8 # = frame_len +c_nof_blocks_per_sync = 8 +c_test_loopback = True +c_only_set_dpotx = False + +# Block gen definitions +c_bg_ram_size = 32 +c_bg_nof_streams = 1 +c_bg_gap_size = 3000 +c_write_block_gen = True + +# UDP header definitions +eth_src_mac = 0x2286080008 # 10G MAC base address for UniBoard +eth_dst_mac = 0x074306C700 #0x00074306C700 # 10G MAC address DOP36 +ip_src_addr_fn0 = 0xc0a80164 # 0xc0a80164 = 192.168.1.100 +ip_src_addr_fn1 = 0xc0a80165 # 0xc0a80165 = 192.168.1.101 +ip_src_addr_fn2 = 0xc0a80166 # 0xc0a80164 = 192.168.1.102 +ip_src_addr_fn3 = 0xc0a80167 # 0xc0a80165 = 192.168.1.103 +ip_dst_addr = 0xc0a80102 # 0xc0a80102 = 192.168.1.2 = IP-address 10G in DOP36 + +# Instantiate testcase and IO +tc = test_case.Testcase('TB -', '') +io = node_io.NodeIO(tc.nodeImages, tc.base_ip) + +# Instantiate compaan +ca = pi_compaan.PiCompaan(tc, io, nof_inst=1) + +# Create block generator/data buffer instance +bg = pi_diag_block_gen.PiDiagBlockGen(tc, io, c_bg_nof_streams, c_bg_ram_size, tc.nodeFn1Nrs ) +db = pi_diag_data_buffer.PiDiagDataBuffer(tc, io, instanceName = '', nofStreams=c_bg_nof_streams, ramSizePerStream=c_bg_ram_size, nodeNr = tc.nodeFn1Nrs ) + +# Create dp_offload_tx instance +dpotx_hdr_dat = pi_dp_offload_tx_hdr_dat_compaan_unb1_10g_terminal.PiDpOffloadTxHdrDatCompaanUnb110GTerminal(tc, io, nof_inst=1, node_nrs=tc.nodeFn0Nrs) + +############################################################################### +# Calculate and print the IP header checksum for FN0 +############################################################################### +# Fixed header constants +IP_HEADER_LENGTH = 20 +UDP_HEADER_LENGTH = 8 +USR_HEADER_LENGTH = 20 +USR_HDR_WORD_ALIGN = 2 +NOF_PAYLOAD_BYTES = c_blocksize * 8 + +ip_version = 4 +ip_header_length = 5 # 5 32b words +ip_services = 0 +ip_total_length = IP_HEADER_LENGTH+UDP_HEADER_LENGTH+USR_HEADER_LENGTH+USR_HDR_WORD_ALIGN+NOF_PAYLOAD_BYTES - 7 # 6196B +ip_identification = 0 +ip_flags = 2 +ip_fragment_offset = 0 +ip_time_to_live = 127 +ip_protocol = 17 +ip_header_checksum = 0 # to be calculated +hdr_bits_common = CommonBits(ip_version ,4) & \ + CommonBits(ip_header_length ,4) & \ + CommonBits(ip_services ,8) & \ + CommonBits(ip_total_length ,16) & \ + CommonBits(ip_identification ,16) & \ + CommonBits(ip_flags ,3) & \ + CommonBits(ip_fragment_offset ,13) & \ + CommonBits(ip_time_to_live ,8) & \ + CommonBits(ip_protocol ,8) & \ + CommonBits(ip_header_checksum ,16) + +hdr_bits_fn0 = hdr_bits_common & \ + CommonBits(ip_src_addr_fn0 ,32) & \ + CommonBits(ip_dst_addr ,32) + +hdr_bits_fn1 = hdr_bits_common & \ + CommonBits(ip_src_addr_fn1 ,32) & \ + CommonBits(ip_dst_addr ,32) + +hdr_bits_fn2 = hdr_bits_common & \ + CommonBits(ip_src_addr_fn2 ,32) & \ + CommonBits(ip_dst_addr ,32) + +hdr_bits_fn3 = hdr_bits_common & \ + CommonBits(ip_src_addr_fn3 ,32) & \ + CommonBits(ip_dst_addr ,32) + +hdr_bytes_fn0 = CommonBytes(hdr_bits_fn0.data, IP_HEADER_LENGTH) +hdr_bytes_fn1 = CommonBytes(hdr_bits_fn1.data, IP_HEADER_LENGTH) +hdr_bytes_fn2 = CommonBytes(hdr_bits_fn2.data, IP_HEADER_LENGTH) +hdr_bytes_fn3 = CommonBytes(hdr_bits_fn3.data, IP_HEADER_LENGTH) + +tc.append_log(3, 'IP header checksum FN0: %d' % ip_hdr_checksum(hdr_bytes_fn0)) +tc.append_log(3, 'IP header checksum FN1: %d' % ip_hdr_checksum(hdr_bytes_fn1)) +tc.append_log(3, 'IP header checksum FN2: %d' % ip_hdr_checksum(hdr_bytes_fn2)) +tc.append_log(3, 'IP header checksum FN3: %d' % ip_hdr_checksum(hdr_bytes_fn3)) + +################################################################################ +## Write settings +################################################################################ +tc.append_log(3, 'Setting DPOTX for node FN0') + +dpotx_hdr_dat.write(node_nrs=tc.nodeFn0Nrs, inst_nrs=tc.gpNumbers, registers=[('eth_src_mac', eth_src_mac + 0)], regmap=dpotx_hdr_dat.regmap) +dpotx_hdr_dat.write(node_nrs=tc.nodeFn0Nrs, inst_nrs=tc.gpNumbers, registers=[('eth_dst_mac', eth_dst_mac)], regmap=dpotx_hdr_dat.regmap) +dpotx_hdr_dat.write(node_nrs=tc.nodeFn0Nrs, inst_nrs=tc.gpNumbers, registers=[('ip_src_addr', ip_src_addr_fn0)], regmap=dpotx_hdr_dat.regmap) +dpotx_hdr_dat.write(node_nrs=tc.nodeFn0Nrs, inst_nrs=tc.gpNumbers, registers=[('ip_dst_addr', ip_dst_addr)], regmap=dpotx_hdr_dat.regmap) +dpotx_hdr_dat.write(node_nrs=tc.nodeFn0Nrs, inst_nrs=tc.gpNumbers, registers=[('ip_header_checksum', ip_hdr_checksum(hdr_bytes_fn0))], regmap=dpotx_hdr_dat.regmap) + +dpotx_hdr_dat.read(node_nrs=tc.nodeFn0Nrs, inst_nrs=tc.gpNumbers, regmap=dpotx_hdr_dat.regmap) + +tc.append_log(3, 'Setting BG for node BN0') +bg.write_block_gen_settings(samplesPerPacket=c_blocksize, blocksPerSync=c_nof_blocks_per_sync, gapSize=c_bg_gap_size, memLowAddr=0, memHighAddr=c_bg_ram_size-1, BSNInit=10) + + +################################################################################ +## Write data to the block generator +################################################################################ +bg_data=[] +tc.append_log(3, 'Writing data to BG RAM') +for i in range(c_bg_ram_size): + bg_data.append(i) + +if c_write_block_gen: + for i in range(c_bg_nof_streams): + bg.write_waveform_ram(data=bg_data, channelNr=i) + +bg.write_enable() + +################################################################################ +## Read data from the databuffer +################################################################################ +db_out = [] +do_until_ge(db.read_nof_words, ms_retry=1000, val=c_blocksize, s_timeout=3600) +bg.write_disable() +for i in range(1): + db_out.append(flatten(db.read_data_buffer(streamNr=i, n=c_blocksize*3, radix='uns', width=c_10g_data_w, nofColumns=1))) + +print db_out \ No newline at end of file diff --git a/applications/compaan/designs/compaan_io_test_fn/tb/vhdl/tb_io_test_fn.vhd b/applications/compaan/designs/compaan_io_test_fn/tb/vhdl/tb_io_test_fn.vhd new file mode 100644 index 0000000000000000000000000000000000000000..7a065d65cbf66a10d88c7360c9859fbacf178056 --- /dev/null +++ b/applications/compaan/designs/compaan_io_test_fn/tb/vhdl/tb_io_test_fn.vhd @@ -0,0 +1,278 @@ + +------------------------------------------------------------------------------- +-- +-- Copyright (C) 2012 +-- 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, unb1_board_lib, i2c_lib, compaan_io_test_bn_lib; +USE IEEE.STD_LOGIC_1164.ALL; +USE IEEE.NUMERIC_STD.ALL; +USE common_lib.common_pkg.ALL; +USE unb1_board_lib.unb1_board_pkg.ALL; +USE common_lib.tb_common_pkg.ALL; + +ENTITY tb_io_test_fn IS +END tb_io_test_fn; + +ARCHITECTURE tb OF tb_io_test_fn IS + + ----------------------------------------------------------------------------- + -- CONSTANTS + ----------------------------------------------------------------------------- + -- System + CONSTANT c_sim : BOOLEAN := TRUE; + CONSTANT c_unb1_board_nr : NATURAL := 0; + CONSTANT c_node_nr_dut_fn : NATURAL := 0; + CONSTANT c_node_nr_dut_bn : NATURAL := 4; + CONSTANT c_node_nr_10G_lcu : NATURAL := 1; + CONSTANT c_id_dut_fn : STD_LOGIC_VECTOR(7 DOWNTO 0) := TO_UVEC(c_unb1_board_nr, c_unb1_board_nof_uniboard_w) & TO_UVEC(c_node_nr_dut_fn, c_unb1_board_nof_chip_w); + CONSTANT c_id_dut_bn : STD_LOGIC_VECTOR(7 DOWNTO 0) := TO_UVEC(c_unb1_board_nr, c_unb1_board_nof_uniboard_w) & TO_UVEC(c_node_nr_dut_bn, c_unb1_board_nof_chip_w); + CONSTANT c_id_10g_lcu : STD_LOGIC_VECTOR(7 DOWNTO 0) := TO_UVEC(c_unb1_board_nr, c_unb1_board_nof_uniboard_w) & TO_UVEC(c_node_nr_10g_lcu, c_unb1_board_nof_chip_w); + CONSTANT c_version : STD_LOGIC_VECTOR(1 DOWNTO 0) := "00"; + + -- Clock periods + CONSTANT c_eth_clk_period : TIME := 40 ns; + CONSTANT c_sa_clk_period : TIME := 6.4 ns; + CONSTANT c_clk_period : TIME := 5 ns; + CONSTANT c_cable_delay : TIME := 12 ns; + CONSTANT c_pps_period : NATURAL := 1000; + + -- UNB1 Sensors + CONSTANT c_fpga_temp_address : STD_LOGIC_VECTOR(6 DOWNTO 0) := "0011000"; -- MAX1618 address LOW LOW + CONSTANT c_eth_temp_address : STD_LOGIC_VECTOR(6 DOWNTO 0) := "0101001"; -- MAX1618 address MID LOW + CONSTANT c_hot_swap_address : STD_LOGIC_VECTOR(6 DOWNTO 0) := "1000100"; -- LTC4260 address L L L + CONSTANT c_fpga_temp : INTEGER := 60; + CONSTANT c_eth_temp : INTEGER := 40; + CONSTANT c_hot_swap_R_sense : REAL := 0.01; + + CONSTANT c_uniboard_current : REAL := 5.0; -- = assume 5.0 A on UniBoard + CONSTANT c_uniboard_supply : REAL := 48.0; -- = assume 48.0 V on UniBoard + CONSTANT c_uniboard_adin : REAL := -1.0; -- = NC on UniBoard + + ------------------------------------------------------------------------------ + -- SIGNALS + ------------------------------------------------------------------------------ + -- System + SIGNAL VERSION : STD_LOGIC_VECTOR(c_unb1_board_aux.version_w-1 DOWNTO 0) := c_version; + SIGNAL ID_DUT_FN : STD_LOGIC_VECTOR(c_unb1_board_aux.id_w-1 DOWNTO 0) := c_id_dut_fn; + SIGNAL ID_DUT_BN : STD_LOGIC_VECTOR(c_unb1_board_aux.id_w-1 DOWNTO 0) := c_id_dut_bn; + SIGNAL ID_10G_LCU : STD_LOGIC_VECTOR(c_unb1_board_aux.id_w-1 DOWNTO 0) := c_id_10g_lcu; + SIGNAL TESTIO : STD_LOGIC_VECTOR(c_unb1_board_aux.testio_w-1 DOWNTO 0); + + -- Clocks + SIGNAL clk : STD_LOGIC := '0'; + SIGNAL sa_clk : STD_LOGIC := '1'; + SIGNAL eth_clk : STD_LOGIC := '0'; + SIGNAL pps : STD_LOGIC := '0'; + SIGNAL pps_rst : STD_LOGIC := '0'; + SIGNAL eth_rxp : STD_LOGIC; + SIGNAL eth_txp : STD_LOGIC; + SIGNAL sens_scl : STD_LOGIC; + SIGNAL sens_sda : STD_LOGIC; + SIGNAL WDI : STD_LOGIC; + SIGNAL INTA : STD_LOGIC; + SIGNAL INTB : STD_LOGIC; + + -- Serial I/O: Terminal + SIGNAL FN_BN_0_TX : STD_LOGIC_VECTOR(c_unb1_board_tr_mesh.bus_w-1 DOWNTO 0); + SIGNAL FN_BN_0_RX : STD_LOGIC_VECTOR(c_unb1_board_tr_mesh.bus_w-1 DOWNTO 0); + SIGNAL FN_BN_1_TX : STD_LOGIC_VECTOR(c_unb1_board_tr_mesh.bus_w-1 DOWNTO 0); + SIGNAL FN_BN_1_RX : STD_LOGIC_VECTOR(c_unb1_board_tr_mesh.bus_w-1 DOWNTO 0); + SIGNAL FN_BN_2_TX : STD_LOGIC_VECTOR(c_unb1_board_tr_mesh.bus_w-1 DOWNTO 0); + SIGNAL FN_BN_2_RX : STD_LOGIC_VECTOR(c_unb1_board_tr_mesh.bus_w-1 DOWNTO 0); + SIGNAL FN_BN_3_TX : STD_LOGIC_VECTOR(c_unb1_board_tr_mesh.bus_w-1 DOWNTO 0); + SIGNAL FN_BN_3_RX : STD_LOGIC_VECTOR(c_unb1_board_tr_mesh.bus_w-1 DOWNTO 0); + + -- Serial I/O: 10GbE Interface + SIGNAL SI_FN_0_TX : STD_LOGIC_VECTOR(c_unb1_board_ci.tr.bus_w-1 DOWNTO 0); + SIGNAL SI_FN_0_RX : STD_LOGIC_VECTOR(c_unb1_board_ci.tr.bus_w-1 DOWNTO 0); + SIGNAL SI_FN_1_TX : STD_LOGIC_VECTOR(c_unb1_board_ci.tr.bus_w-1 DOWNTO 0); + SIGNAL SI_FN_1_RX : STD_LOGIC_VECTOR(c_unb1_board_ci.tr.bus_w-1 DOWNTO 0); + SIGNAL SI_FN_2_TX : STD_LOGIC_VECTOR(c_unb1_board_ci.tr.bus_w-1 DOWNTO 0); + SIGNAL SI_FN_2_RX : STD_LOGIC_VECTOR(c_unb1_board_ci.tr.bus_w-1 DOWNTO 0); + SIGNAL SI_FN_3_TX : STD_LOGIC_VECTOR(c_unb1_board_ci.tr.bus_w-1 DOWNTO 0); + SIGNAL SI_FN_3_RX : STD_LOGIC_VECTOR(c_unb1_board_ci.tr.bus_w-1 DOWNTO 0); + +BEGIN + ---------------------------------------------------------------------------- + -- Externally generated clocks + ---------------------------------------------------------------------------- + clk <= NOT clk AFTER c_clk_period/2; + eth_clk <= NOT eth_clk AFTER c_eth_clk_period/2; + sa_clk <= NOT sa_clk AFTER c_sa_clk_period/2; + + INTA <= 'H'; -- pull up + INTB <= 'H'; -- pull up + + sens_scl <= 'H'; -- pull up + sens_sda <= 'H'; -- pull up + + ------------------------------------------------------------------------------ + -- External PPS + ------------------------------------------------------------------------------ + proc_common_gen_pulse(1, c_pps_period, '1', pps_rst, clk, pps); + + ------------------------------------------------------------------------------ + -- 1GbE Loopback model + ------------------------------------------------------------------------------ + eth_rxp <= TRANSPORT eth_txp AFTER c_cable_delay; + + ------------------------------------------------------------------------------ + -- DUT Fn + ------------------------------------------------------------------------------ + u_dut_fn: ENTITY work.compaan_io_test_fn + GENERIC MAP( + g_sim => c_sim, + g_sim_unb_nr => c_unb1_board_nr, + g_sim_node_nr => c_node_nr_dut_fn + ) + PORT MAP( + CLK => clk, + PPS => pps, + VERSION => VERSION, + ID => ID_DUT_FN, + + ETH_clk => eth_clk, + ETH_SGIN => eth_rxp, + ETH_SGOUT => eth_txp, + + SA_CLK => sa_clk, + SB_CLK => sa_clk, + + FN_BN_0_TX => FN_BN_0_TX, + FN_BN_0_RX => FN_BN_0_RX, + FN_BN_1_TX => FN_BN_1_TX, + FN_BN_1_RX => FN_BN_1_RX, + FN_BN_2_TX => FN_BN_2_TX, + FN_BN_2_RX => FN_BN_2_RX, + FN_BN_3_TX => FN_BN_3_TX, + FN_BN_3_RX => FN_BN_3_RX, + + SI_FN_0_TX => SI_FN_0_TX, + SI_FN_0_RX => SI_FN_0_RX, + SI_FN_1_TX => SI_FN_1_TX, + SI_FN_1_RX => SI_FN_1_RX, + SI_FN_2_TX => SI_FN_2_TX, + SI_FN_2_RX => SI_FN_2_RX, + SI_FN_3_TX => SI_FN_3_TX, + SI_FN_3_RX => SI_FN_3_RX + ); + + ----------------------------------------------------------------------------- + -- DUT Bn + ----------------------------------------------------------------------------- + u_dut_bn: ENTITY compaan_io_test_bn_lib.compaan_io_test_bn + GENERIC MAP( + g_sim => c_sim, + g_sim_unb_nr => c_unb1_board_nr, + g_sim_node_nr => c_node_nr_dut_bn + ) + PORT MAP( + CLK => clk, + PPS => pps, + VERSION => VERSION, + ID => ID_DUT_BN, + + ETH_clk => eth_clk, + ETH_SGIN => eth_rxp, + ETH_SGOUT => eth_txp, + + SB_CLK => sa_clk, + + FN_BN_0_TX => FN_BN_0_RX, + FN_BN_0_RX => FN_BN_0_TX, + FN_BN_1_TX => FN_BN_1_RX, + FN_BN_1_RX => FN_BN_1_TX, + FN_BN_2_TX => FN_BN_2_RX, + FN_BN_2_RX => FN_BN_2_TX, + FN_BN_3_TX => FN_BN_3_RX, + FN_BN_3_RX => FN_BN_3_TX + ); + + ----------------------------------------------------------------------------- + -- 10G LCU + ----------------------------------------------------------------------------- + u_10g_lcu: ENTITY work.compaan_unb1_10g_bg_db + GENERIC MAP( + g_sim => c_sim, + g_sim_unb_nr => c_unb1_board_nr, + g_sim_node_nr => c_node_nr_10g_lcu + ) + PORT MAP( + CLK => clk, + PPS => pps, + VERSION => VERSION, + ID => ID_10G_LCU, + + ETH_clk => eth_clk, + ETH_SGIN => eth_rxp, + ETH_SGOUT => eth_txp, + + SA_CLK => sa_clk, + + SI_FN_0_TX => SI_FN_0_RX, + SI_FN_0_RX => SI_FN_0_TX, + SI_FN_1_TX => SI_FN_1_RX, + SI_FN_1_RX => SI_FN_1_TX, + SI_FN_2_TX => SI_FN_2_RX, + SI_FN_2_RX => SI_FN_2_TX, + SI_FN_3_TX => SI_FN_3_RX, + SI_FN_3_RX => SI_FN_3_TX + ); + + ------------------------------------------------------------------------------ + -- UniBoard sensors + ------------------------------------------------------------------------------ + -- I2C slaves that are available for each FPGA + u_fpga_temp : ENTITY i2c_lib.dev_max1618 + GENERIC MAP ( + g_address => c_fpga_temp_address + ) + PORT MAP ( + scl => sens_scl, + sda => sens_sda, + temp => c_fpga_temp + ); + + -- I2C slaves that are available only via FPGA back node 3 + u_eth_temp : ENTITY i2c_lib.dev_max1618 + GENERIC MAP ( + g_address => c_eth_temp_address + ) + PORT MAP ( + scl => sens_scl, + sda => sens_sda, + temp => c_eth_temp + ); + + u_power : ENTITY i2c_lib.dev_ltc4260 + GENERIC MAP ( + g_address => c_hot_swap_address, + g_R_sense => c_hot_swap_R_sense + ) + PORT MAP ( + scl => sens_scl, + sda => sens_sda, + ana_current_sense => c_uniboard_current, + ana_volt_source => c_uniboard_supply, + ana_volt_adin => c_uniboard_adin + ); + +END tb;