diff --git a/boards/uniboard2a/designs/unb2a_minimal/build/unb2a_minimal.jic b/boards/uniboard2a/designs/unb2a_minimal/build/unb2a_minimal.jic
new file mode 100644
index 0000000000000000000000000000000000000000..738840a8428ec654196e85cf02c934b6da682921
Binary files /dev/null and b/boards/uniboard2a/designs/unb2a_minimal/build/unb2a_minimal.jic differ
diff --git a/boards/uniboard2a/designs/unb2a_minimal/build/unb2a_minimal.sof b/boards/uniboard2a/designs/unb2a_minimal/build/unb2a_minimal.sof
new file mode 100644
index 0000000000000000000000000000000000000000..3776084da402a1f81a0f62c21c09e2ae3fff1623
Binary files /dev/null and b/boards/uniboard2a/designs/unb2a_minimal/build/unb2a_minimal.sof differ
diff --git a/boards/uniboard2a/designs/unb2a_minimal/doc/README b/boards/uniboard2a/designs/unb2a_minimal/doc/README
new file mode 100644
index 0000000000000000000000000000000000000000..e1f88cd968980457a9d2a5297f927d41ae5ec21c
--- /dev/null
+++ b/boards/uniboard2a/designs/unb2a_minimal/doc/README
@@ -0,0 +1,111 @@
+Quick steps to compile and use design [unb2a_minimal] in RadionHDL
+------------------------------------------------------------------
+
+-> In case of a new installation, the IP's have to be generated for Arria10.
+   In the: $RADIOHDL/libraries/technology/ip_arria10
+   directory; run the bash script: ./generate-all-ip.sh
+
+-> For compilation it might be necessary to check the .vhd file:
+   $RADIOHDL/libraries/technology/technology_select_pkg.vhd
+
+
+
+1. Start with the Oneclick Commands:
+    python $RADIOHDL/tools/oneclick/base/modelsim_config.py -t unb2a
+    python $RADIOHDL/tools/oneclick/base/quartus_config.py -t unb2a
+
+
+2. Generate MMM for QSYS:
+    run_qsys unb2a unb2a_minimal
+
+
+
+3. -> From here either continue to Modelsim (simulation) or Quartus (synthesis)
+
+Simulation
+----------
+Modelsim instructions:
+    # in bash do:
+    rm $UNB/Software/python/sim/* # (optional)
+    run_modelsim unb2a
+
+    # in Modelsim do:
+    lp unb2a_minimal
+    mk all
+    # now double click on testbench file
+    as 10
+    run 500us
+
+    # while the simulation runs... in another bash session do:
+    cd unb2a_minimal/tb/python
+    python tc_unb2a_minimal.py --sim --unb 0 --fn 3 --seq INFO,PPSH,SENSORS
+
+    # (sensor results only show up after 1000us of simulation runtime)
+
+    # to end simulation in Modelsim do:
+    quit -sim
+
+
+Synthesis
+---------
+Quartus instructions:
+    run_qcomp unb2a unb2a_minimal
+
+
+In case of needing the Quartus GUI for inspection:
+    run_quartus unb2a
+
+
+
+4. Load firmware
+----------------
+Using JTAG: Start the Quartus GUI and open: tools->programmer.
+            Then click auto-detect;
+            Use 'change file' to select the correct .sof file for each FPGA
+            Select the FPGA(s) which has to be programmed
+            Click 'start'
+Using EPCS: See step 6 below.
+
+
+
+
+5. Testing on hardware
+----------------------
+Assuming the firmware is loaded and running already in the FPGA, the firmware can be tested from the connected
+LCU computer.
+
+# (assume that the Uniboard is --unb 1)
+
+# To read out the design_name, ppsh and sensors; do:
+
+python tc_unb2_minimal.py --unb 1 --fn 0:3 --seq REGMAP,INFO,PPSH,SENSORS -v5
+
+
+
+6.
+Programming the EPCS flash.
+when the EPCS module works an RBF file can be generated to program the flash,
+then the .sof file file can be converted to .rbf with the 'run_rbf' script.
+
+But for now the only way to program the EPCS flash is via JTAG.
+Firstly a JIC file has to be generated from the SOF file.
+In Quartus GUI; open current project; File -> Convert Programming Files.
+Then setup:
+- Output programming file: JIC
+- Configuration device: EPCQL1024
+- Mode: Active Serial x4
+- Flash Loader: Add/Select Device Arria10/10AX115U4ES
+- SOF Data: add file (the generated .sof file)
+  - click the .sof file; Set property 'Compression' to ON
+- Press 'Generate'
+Then program the .JIC file (output_file.jic) to EPCS flash:
+- Make sure that the JTAG (on server connected to board) runs at 16MHz:
+  c:\altera\15.0\quartus\bin64\jtagconfig USB-BlasterII JtagClock 16M
+- open tools->programmer
+- make sure the 4 fpga icons have the device 10AX115U4F45ES
+- right-click each fpga icon and attach flash device EPCQL1024
+- right-click each fpga and change file from <none> to sfl_enhanced_01_02e360dd.sof
+  (in $RADIOHDL/boards/uniboard2/libraries/unb2a_board/quartus)
+- right-click each EPCQL1024 and change file from <none> to output_file.jic
+- select click each Program/Configure radiobutton
+- click start and wait for 'Successful'
diff --git a/boards/uniboard2a/designs/unb2a_minimal/hdllib.cfg b/boards/uniboard2a/designs/unb2a_minimal/hdllib.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..add9726620d4e01da3dfd0cb42d1e4e50c64100f
--- /dev/null
+++ b/boards/uniboard2a/designs/unb2a_minimal/hdllib.cfg
@@ -0,0 +1,35 @@
+hdl_lib_name = unb2a_minimal
+hdl_library_clause_name = unb2a_minimal_lib
+hdl_lib_uses_synth = common technology mm unb2a_board 
+hdl_lib_uses_sim = 
+hdl_lib_excludes = ip_arria10_e3sge3_mac_10g
+
+hdl_lib_technology = ip_arria10_e3sge3
+
+synth_files =
+    src/vhdl/qsys_unb2a_minimal_pkg.vhd
+    src/vhdl/mmm_unb2a_minimal.vhd
+    src/vhdl/unb2a_minimal.vhd
+    
+test_bench_files = 
+    tb/vhdl/tb_unb2a_minimal.vhd
+
+synth_top_level_entity =
+
+quartus_copy_files =
+    quartus/qsys_unb2a_minimal.qsys .
+
+quartus_qsf_files =
+    $RADIOHDL/boards/uniboard2a/libraries/unb2a_board/quartus/unb2a_board.qsf
+
+quartus_sdc_files =
+    $RADIOHDL/boards/uniboard2a/libraries/unb2a_board/quartus/unb2a_board.sdc
+
+quartus_tcl_files =
+    quartus/unb2a_minimal_pins.tcl
+
+quartus_vhdl_files = 
+
+quartus_qip_files =
+    $HDL_BUILD_DIR/unb2a/quartus/unb2a_minimal/qsys_unb2a_minimal/synthesis/qsys_unb2a_minimal.qip
+
diff --git a/boards/uniboard2a/designs/unb2a_minimal/quartus/qsys_unb2a_minimal.qsys b/boards/uniboard2a/designs/unb2a_minimal/quartus/qsys_unb2a_minimal.qsys
new file mode 100644
index 0000000000000000000000000000000000000000..4421237bcda179f164f30147b870764d27d943c9
--- /dev/null
+++ b/boards/uniboard2a/designs/unb2a_minimal/quartus/qsys_unb2a_minimal.qsys
@@ -0,0 +1,1857 @@
+<?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}
+   {
+      datum _originalDeviceFamily
+      {
+         value = "Arria 10";
+         type = "String";
+      }
+   }
+   element avs_eth_0
+   {
+      datum _sortIndex
+      {
+         value = "6";
+         type = "int";
+      }
+   }
+   element avs_eth_0.mms_ram
+   {
+      datum baseAddress
+      {
+         value = "16384";
+         type = "String";
+      }
+   }
+   element avs_eth_0.mms_reg
+   {
+      datum baseAddress
+      {
+         value = "128";
+         type = "String";
+      }
+   }
+   element avs_eth_0.mms_tse
+   {
+      datum baseAddress
+      {
+         value = "8192";
+         type = "String";
+      }
+   }
+   element clk_0
+   {
+      datum _sortIndex
+      {
+         value = "0";
+         type = "int";
+      }
+   }
+   element cpu_0
+   {
+      datum _sortIndex
+      {
+         value = "1";
+         type = "int";
+      }
+   }
+   element cpu_0.debug_mem_slave
+   {
+      datum baseAddress
+      {
+         value = "14336";
+         type = "String";
+      }
+   }
+   element jtag_uart_0
+   {
+      datum _sortIndex
+      {
+         value = "3";
+         type = "int";
+      }
+   }
+   element jtag_uart_0.avalon_jtag_slave
+   {
+      datum baseAddress
+      {
+         value = "440";
+         type = "String";
+      }
+   }
+   element jtag_uart_0.irq
+   {
+      datum _tags
+      {
+         value = "";
+         type = "String";
+      }
+   }
+   element onchip_memory2_0
+   {
+      datum _sortIndex
+      {
+         value = "2";
+         type = "int";
+      }
+   }
+   element onchip_memory2_0.s1
+   {
+      datum _lockedAddress
+      {
+         value = "1";
+         type = "boolean";
+      }
+      datum baseAddress
+      {
+         value = "131072";
+         type = "String";
+      }
+   }
+   element pio_pps
+   {
+      datum _sortIndex
+      {
+         value = "12";
+         type = "int";
+      }
+      datum sopceditor_expanded
+      {
+         value = "0";
+         type = "boolean";
+      }
+   }
+   element pio_pps.mem
+   {
+      datum baseAddress
+      {
+         value = "432";
+         type = "String";
+      }
+   }
+   element pio_system_info
+   {
+      datum _sortIndex
+      {
+         value = "11";
+         type = "int";
+      }
+      datum sopceditor_expanded
+      {
+         value = "0";
+         type = "boolean";
+      }
+   }
+   element pio_system_info.mem
+   {
+      datum _lockedAddress
+      {
+         value = "1";
+         type = "boolean";
+      }
+   }
+   element pio_wdi
+   {
+      datum _sortIndex
+      {
+         value = "4";
+         type = "int";
+      }
+   }
+   element pio_wdi.s1
+   {
+      datum baseAddress
+      {
+         value = "384";
+         type = "String";
+      }
+   }
+   element reg_dpmm_ctrl
+   {
+      datum _sortIndex
+      {
+         value = "16";
+         type = "int";
+      }
+      datum sopceditor_expanded
+      {
+         value = "0";
+         type = "boolean";
+      }
+   }
+   element reg_dpmm_ctrl.mem
+   {
+      datum baseAddress
+      {
+         value = "424";
+         type = "String";
+      }
+   }
+   element reg_dpmm_data
+   {
+      datum _sortIndex
+      {
+         value = "17";
+         type = "int";
+      }
+      datum sopceditor_expanded
+      {
+         value = "0";
+         type = "boolean";
+      }
+   }
+   element reg_dpmm_data.mem
+   {
+      datum baseAddress
+      {
+         value = "416";
+         type = "String";
+      }
+   }
+   element reg_epcs
+   {
+      datum _sortIndex
+      {
+         value = "15";
+         type = "int";
+      }
+      datum sopceditor_expanded
+      {
+         value = "0";
+         type = "boolean";
+      }
+   }
+   element reg_epcs.mem
+   {
+      datum baseAddress
+      {
+         value = "288";
+         type = "String";
+      }
+   }
+   element reg_fpga_temp_sens
+   {
+      datum _sortIndex
+      {
+         value = "9";
+         type = "int";
+      }
+   }
+   element reg_fpga_temp_sens.mem
+   {
+      datum baseAddress
+      {
+         value = "224";
+         type = "String";
+      }
+   }
+   element reg_fpga_voltage_sens
+   {
+      datum _sortIndex
+      {
+         value = "20";
+         type = "int";
+      }
+      datum sopceditor_expanded
+      {
+         value = "1";
+         type = "boolean";
+      }
+   }
+   element reg_fpga_voltage_sens.mem
+   {
+      datum baseAddress
+      {
+         value = "512";
+         type = "String";
+      }
+   }
+   element reg_mmdp_ctrl
+   {
+      datum _sortIndex
+      {
+         value = "18";
+         type = "int";
+      }
+      datum sopceditor_expanded
+      {
+         value = "0";
+         type = "boolean";
+      }
+   }
+   element reg_mmdp_ctrl.mem
+   {
+      datum baseAddress
+      {
+         value = "408";
+         type = "String";
+      }
+   }
+   element reg_mmdp_data
+   {
+      datum _sortIndex
+      {
+         value = "19";
+         type = "int";
+      }
+      datum sopceditor_expanded
+      {
+         value = "0";
+         type = "boolean";
+      }
+   }
+   element reg_mmdp_data.mem
+   {
+      datum baseAddress
+      {
+         value = "400";
+         type = "String";
+      }
+   }
+   element reg_remu
+   {
+      datum _sortIndex
+      {
+         value = "14";
+         type = "int";
+      }
+      datum sopceditor_expanded
+      {
+         value = "0";
+         type = "boolean";
+      }
+   }
+   element reg_remu.mem
+   {
+      datum baseAddress
+      {
+         value = "320";
+         type = "String";
+      }
+   }
+   element reg_unb_pmbus
+   {
+      datum _sortIndex
+      {
+         value = "8";
+         type = "int";
+      }
+   }
+   element reg_unb_pmbus.mem
+   {
+      datum baseAddress
+      {
+         value = "192";
+         type = "String";
+      }
+   }
+   element reg_unb_sens
+   {
+      datum _sortIndex
+      {
+         value = "7";
+         type = "int";
+      }
+   }
+   element reg_unb_sens.mem
+   {
+      datum baseAddress
+      {
+         value = "352";
+         type = "String";
+      }
+   }
+   element reg_wdi
+   {
+      datum _sortIndex
+      {
+         value = "13";
+         type = "int";
+      }
+      datum sopceditor_expanded
+      {
+         value = "0";
+         type = "boolean";
+      }
+   }
+   element reg_wdi.mem
+   {
+      datum _lockedAddress
+      {
+         value = "1";
+         type = "boolean";
+      }
+      datum baseAddress
+      {
+         value = "12288";
+         type = "String";
+      }
+   }
+   element rom_system_info
+   {
+      datum _sortIndex
+      {
+         value = "10";
+         type = "int";
+      }
+      datum sopceditor_expanded
+      {
+         value = "0";
+         type = "boolean";
+      }
+   }
+   element rom_system_info.mem
+   {
+      datum _lockedAddress
+      {
+         value = "1";
+         type = "boolean";
+      }
+      datum baseAddress
+      {
+         value = "4096";
+         type = "String";
+      }
+   }
+   element timer_0
+   {
+      datum _sortIndex
+      {
+         value = "5";
+         type = "int";
+      }
+   }
+   element timer_0.s1
+   {
+      datum baseAddress
+      {
+         value = "256";
+         type = "String";
+      }
+   }
+}
+]]></parameter>
+ <parameter name="clockCrossingAdapter" value="HANDSHAKE" />
+ <parameter name="device" value="10AX115U4F45I3SGES" />
+ <parameter name="deviceFamily" value="Arria 10" />
+ <parameter name="deviceSpeedGrade" value="3" />
+ <parameter name="fabricMode" value="QSYS" />
+ <parameter name="generateLegacySim" value="false" />
+ <parameter name="generationId" value="0" />
+ <parameter name="globalResetBus" value="false" />
+ <parameter name="hdlLanguage" value="VERILOG" />
+ <parameter name="hideFromIPCatalog" value="false" />
+ <parameter name="lockedInterfaceDefinition" value="" />
+ <parameter name="maxAdditionalLatency" value="1" />
+ <parameter name="projectName" value="" />
+ <parameter name="sopcBorderPoints" value="false" />
+ <parameter name="systemHash" value="0" />
+ <parameter name="testBenchDutName" value="" />
+ <parameter name="timeStamp" value="0" />
+ <parameter name="useTestBenchNamingPattern" value="false" />
+ <instanceScript></instanceScript>
+ <interface
+   name="avs_eth_0_clk"
+   internal="avs_eth_0.clk"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="avs_eth_0_irq"
+   internal="avs_eth_0.irq"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="avs_eth_0_ram_address"
+   internal="avs_eth_0.ram_address"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="avs_eth_0_ram_read"
+   internal="avs_eth_0.ram_read"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="avs_eth_0_ram_readdata"
+   internal="avs_eth_0.ram_readdata"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="avs_eth_0_ram_write"
+   internal="avs_eth_0.ram_write"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="avs_eth_0_ram_writedata"
+   internal="avs_eth_0.ram_writedata"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="avs_eth_0_reg_address"
+   internal="avs_eth_0.reg_address"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="avs_eth_0_reg_read"
+   internal="avs_eth_0.reg_read"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="avs_eth_0_reg_readdata"
+   internal="avs_eth_0.reg_readdata"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="avs_eth_0_reg_write"
+   internal="avs_eth_0.reg_write"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="avs_eth_0_reg_writedata"
+   internal="avs_eth_0.reg_writedata"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="avs_eth_0_reset"
+   internal="avs_eth_0.reset"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="avs_eth_0_tse_address"
+   internal="avs_eth_0.tse_address"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="avs_eth_0_tse_read"
+   internal="avs_eth_0.tse_read"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="avs_eth_0_tse_readdata"
+   internal="avs_eth_0.tse_readdata"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="avs_eth_0_tse_waitrequest"
+   internal="avs_eth_0.tse_waitrequest"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="avs_eth_0_tse_write"
+   internal="avs_eth_0.tse_write"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="avs_eth_0_tse_writedata"
+   internal="avs_eth_0.tse_writedata"
+   type="conduit"
+   dir="end" />
+ <interface name="clk" internal="clk_0.clk_in" type="clock" dir="end" />
+ <interface
+   name="pio_pps_address"
+   internal="pio_pps.address"
+   type="conduit"
+   dir="end" />
+ <interface name="pio_pps_clk" internal="pio_pps.clk" 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="pio_pps_reset"
+   internal="pio_pps.reset"
+   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_system_info_address"
+   internal="pio_system_info.address"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="pio_system_info_clk"
+   internal="pio_system_info.clk"
+   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_system_info_reset"
+   internal="pio_system_info.reset"
+   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_wdi_external_connection"
+   internal="pio_wdi.external_connection"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="reg_dpmm_ctrl_address"
+   internal="reg_dpmm_ctrl.address"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="reg_dpmm_ctrl_clk"
+   internal="reg_dpmm_ctrl.clk"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="reg_dpmm_ctrl_read"
+   internal="reg_dpmm_ctrl.read"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="reg_dpmm_ctrl_readdata"
+   internal="reg_dpmm_ctrl.readdata"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="reg_dpmm_ctrl_reset"
+   internal="reg_dpmm_ctrl.reset"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="reg_dpmm_ctrl_write"
+   internal="reg_dpmm_ctrl.write"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="reg_dpmm_ctrl_writedata"
+   internal="reg_dpmm_ctrl.writedata"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="reg_dpmm_data_address"
+   internal="reg_dpmm_data.address"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="reg_dpmm_data_clk"
+   internal="reg_dpmm_data.clk"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="reg_dpmm_data_read"
+   internal="reg_dpmm_data.read"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="reg_dpmm_data_readdata"
+   internal="reg_dpmm_data.readdata"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="reg_dpmm_data_reset"
+   internal="reg_dpmm_data.reset"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="reg_dpmm_data_write"
+   internal="reg_dpmm_data.write"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="reg_dpmm_data_writedata"
+   internal="reg_dpmm_data.writedata"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="reg_epcs_address"
+   internal="reg_epcs.address"
+   type="conduit"
+   dir="end" />
+ <interface name="reg_epcs_clk" internal="reg_epcs.clk" type="conduit" dir="end" />
+ <interface
+   name="reg_epcs_read"
+   internal="reg_epcs.read"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="reg_epcs_readdata"
+   internal="reg_epcs.readdata"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="reg_epcs_reset"
+   internal="reg_epcs.reset"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="reg_epcs_write"
+   internal="reg_epcs.write"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="reg_epcs_writedata"
+   internal="reg_epcs.writedata"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="reg_fpga_temp_sens_address"
+   internal="reg_fpga_temp_sens.address"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="reg_fpga_temp_sens_clk"
+   internal="reg_fpga_temp_sens.clk"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="reg_fpga_temp_sens_read"
+   internal="reg_fpga_temp_sens.read"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="reg_fpga_temp_sens_readdata"
+   internal="reg_fpga_temp_sens.readdata"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="reg_fpga_temp_sens_reset"
+   internal="reg_fpga_temp_sens.reset"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="reg_fpga_temp_sens_write"
+   internal="reg_fpga_temp_sens.write"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="reg_fpga_temp_sens_writedata"
+   internal="reg_fpga_temp_sens.writedata"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="reg_fpga_voltage_sens_address"
+   internal="reg_fpga_voltage_sens.address"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="reg_fpga_voltage_sens_clk"
+   internal="reg_fpga_voltage_sens.clk"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="reg_fpga_voltage_sens_read"
+   internal="reg_fpga_voltage_sens.read"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="reg_fpga_voltage_sens_readdata"
+   internal="reg_fpga_voltage_sens.readdata"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="reg_fpga_voltage_sens_reset"
+   internal="reg_fpga_voltage_sens.reset"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="reg_fpga_voltage_sens_write"
+   internal="reg_fpga_voltage_sens.write"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="reg_fpga_voltage_sens_writedata"
+   internal="reg_fpga_voltage_sens.writedata"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="reg_mmdp_ctrl_address"
+   internal="reg_mmdp_ctrl.address"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="reg_mmdp_ctrl_clk"
+   internal="reg_mmdp_ctrl.clk"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="reg_mmdp_ctrl_read"
+   internal="reg_mmdp_ctrl.read"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="reg_mmdp_ctrl_readdata"
+   internal="reg_mmdp_ctrl.readdata"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="reg_mmdp_ctrl_reset"
+   internal="reg_mmdp_ctrl.reset"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="reg_mmdp_ctrl_write"
+   internal="reg_mmdp_ctrl.write"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="reg_mmdp_ctrl_writedata"
+   internal="reg_mmdp_ctrl.writedata"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="reg_mmdp_data_address"
+   internal="reg_mmdp_data.address"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="reg_mmdp_data_clk"
+   internal="reg_mmdp_data.clk"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="reg_mmdp_data_read"
+   internal="reg_mmdp_data.read"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="reg_mmdp_data_readdata"
+   internal="reg_mmdp_data.readdata"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="reg_mmdp_data_reset"
+   internal="reg_mmdp_data.reset"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="reg_mmdp_data_write"
+   internal="reg_mmdp_data.write"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="reg_mmdp_data_writedata"
+   internal="reg_mmdp_data.writedata"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="reg_remu_address"
+   internal="reg_remu.address"
+   type="conduit"
+   dir="end" />
+ <interface name="reg_remu_clk" internal="reg_remu.clk" type="conduit" dir="end" />
+ <interface
+   name="reg_remu_read"
+   internal="reg_remu.read"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="reg_remu_readdata"
+   internal="reg_remu.readdata"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="reg_remu_reset"
+   internal="reg_remu.reset"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="reg_remu_write"
+   internal="reg_remu.write"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="reg_remu_writedata"
+   internal="reg_remu.writedata"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="reg_unb_pmbus_address"
+   internal="reg_unb_pmbus.address"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="reg_unb_pmbus_clk"
+   internal="reg_unb_pmbus.clk"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="reg_unb_pmbus_read"
+   internal="reg_unb_pmbus.read"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="reg_unb_pmbus_readdata"
+   internal="reg_unb_pmbus.readdata"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="reg_unb_pmbus_reset"
+   internal="reg_unb_pmbus.reset"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="reg_unb_pmbus_write"
+   internal="reg_unb_pmbus.write"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="reg_unb_pmbus_writedata"
+   internal="reg_unb_pmbus.writedata"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="reg_unb_sens_address"
+   internal="reg_unb_sens.address"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="reg_unb_sens_clk"
+   internal="reg_unb_sens.clk"
+   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="reg_unb_sens_reset"
+   internal="reg_unb_sens.reset"
+   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_wdi_address"
+   internal="reg_wdi.address"
+   type="conduit"
+   dir="end" />
+ <interface name="reg_wdi_clk" internal="reg_wdi.clk" 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="reg_wdi_reset"
+   internal="reg_wdi.reset"
+   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="reset" internal="clk_0.clk_in_reset" type="reset" dir="end" />
+ <interface
+   name="rom_system_info_address"
+   internal="rom_system_info.address"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="rom_system_info_clk"
+   internal="rom_system_info.clk"
+   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="rom_system_info_reset"
+   internal="rom_system_info.reset"
+   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" />
+ <module name="avs_eth_0" kind="avs2_eth_coe" version="1.0" enabled="1" />
+ <module name="clk_0" kind="clock_source" version="15.0" enabled="1">
+  <parameter name="clockFrequency" value="50000000" />
+  <parameter name="clockFrequencyKnown" value="true" />
+  <parameter name="inputClockFrequency" value="0" />
+  <parameter name="resetSynchronousEdges" value="NONE" />
+ </module>
+ <module name="cpu_0" kind="altera_nios2_gen2" version="15.0" enabled="1">
+  <parameter name="AUTO_CLK_CLOCK_DOMAIN" value="1" />
+  <parameter name="AUTO_CLK_RESET_DOMAIN" value="1" />
+  <parameter name="AUTO_DEVICE" value="10AX115U4F45I3SGES" />
+  <parameter name="AUTO_DEVICE_SPEEDGRADE" value="3" />
+  <parameter name="bht_ramBlockType" value="Automatic" />
+  <parameter name="breakOffset" value="32" />
+  <parameter name="breakSlave" value="None" />
+  <parameter name="cdx_enabled" value="false" />
+  <parameter name="clockFrequency" value="50000000" />
+  <parameter name="cpuArchRev" value="1" />
+  <parameter name="cpuID" value="0" />
+  <parameter name="cpuReset" value="false" />
+  <parameter name="customInstSlavesSystemInfo" value="&lt;info/&gt;" />
+  <parameter name="customInstSlavesSystemInfo_nios_a" value="&lt;info/&gt;" />
+  <parameter name="customInstSlavesSystemInfo_nios_b" value="&lt;info/&gt;" />
+  <parameter name="customInstSlavesSystemInfo_nios_c" value="&lt;info/&gt;" />
+  <parameter name="dataAddrWidth" value="18" />
+  <parameter name="dataMasterHighPerformanceAddrWidth" value="1" />
+  <parameter name="dataMasterHighPerformanceMapParam" value="" />
+  <parameter name="dataSlaveMapParam"><![CDATA[<address-map><slave name='pio_system_info.mem' start='0x0' end='0x80' /><slave name='avs_eth_0.mms_reg' start='0x80' end='0xC0' /><slave name='reg_unb_pmbus.mem' start='0xC0' end='0xE0' /><slave name='reg_fpga_temp_sens.mem' start='0xE0' end='0x100' /><slave name='timer_0.s1' start='0x100' end='0x120' /><slave name='reg_epcs.mem' start='0x120' end='0x140' /><slave name='reg_remu.mem' start='0x140' end='0x160' /><slave name='reg_unb_sens.mem' start='0x160' end='0x180' /><slave name='pio_wdi.s1' start='0x180' end='0x190' /><slave name='reg_mmdp_data.mem' start='0x190' end='0x198' /><slave name='reg_mmdp_ctrl.mem' start='0x198' end='0x1A0' /><slave name='reg_dpmm_data.mem' start='0x1A0' end='0x1A8' /><slave name='reg_dpmm_ctrl.mem' start='0x1A8' end='0x1B0' /><slave name='pio_pps.mem' start='0x1B0' end='0x1B8' /><slave name='jtag_uart_0.avalon_jtag_slave' start='0x1B8' end='0x1C0' /><slave name='reg_fpga_voltage_sens.mem' start='0x200' end='0x240' /><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.debug_mem_slave' start='0x3800' end='0x4000' /><slave name='avs_eth_0.mms_ram' start='0x4000' end='0x5000' /><slave name='onchip_memory2_0.s1' start='0x20000' end='0x40000' /></address-map>]]></parameter>
+  <parameter name="data_master_high_performance_paddr_base" value="0" />
+  <parameter name="data_master_high_performance_paddr_size" value="0" />
+  <parameter name="data_master_paddr_base" value="0" />
+  <parameter name="data_master_paddr_size" value="0" />
+  <parameter name="dcache_bursts" value="false" />
+  <parameter name="dcache_numTCDM" value="0" />
+  <parameter name="dcache_ramBlockType" value="Automatic" />
+  <parameter name="dcache_size" value="2048" />
+  <parameter name="dcache_tagramBlockType" value="Automatic" />
+  <parameter name="dcache_victim_buf_impl" value="ram" />
+  <parameter name="debug_OCIOnchipTrace" value="_128" />
+  <parameter name="debug_assignJtagInstanceID" value="false" />
+  <parameter name="debug_datatrigger" value="0" />
+  <parameter name="debug_debugReqSignals" value="false" />
+  <parameter name="debug_enabled" value="true" />
+  <parameter name="debug_hwbreakpoint" value="0" />
+  <parameter name="debug_jtagInstanceID" value="0" />
+  <parameter name="debug_traceStorage" value="onchip_trace" />
+  <parameter name="debug_traceType" value="none" />
+  <parameter name="debug_triggerArming" value="true" />
+  <parameter name="deviceFamilyName" value="Arria 10" />
+  <parameter name="deviceFeaturesSystemInfo">ADDRESS_STALL 0 ADVANCED_INFO 0 ALLOWS_COMPILING_OTHER_FAMILY_IP 0 ANY_QFP 0 CELL_LEVEL_BACK_ANNOTATION_DISABLED 0 COMPILER_SUPPORT 1 DSP 1 DSP_SHIFTER_BLOCK 0 DUMP_ASM_LAB_BITS_FOR_POWER 0 EMUL 0 ENABLE_ADVANCED_IO_ANALYSIS_GUI_FEATURES 1 ENABLE_PIN_PLANNER 0 ENGINEERING_SAMPLE 0 EPCS 0 ESB 0 FAKE1 0 FAKE2 0 FAKE3 0 FAMILY_LEVEL_INSTALLATION_ONLY 0 FASTEST 0 FINAL_TIMING_MODEL 0 FITTER_USE_FALLING_EDGE_DELAY 0 GENERATE_DC_ON_CURRENT_WARNING_FOR_INTERNAL_CLAMPING_DIODE 0 HARDCOPY 0 HAS_18_BIT_MULTS 0 HAS_ACE_SUPPORT 1 HAS_ACTIVE_PARALLEL_FLASH_SUPPORT 0 HAS_ADJUSTABLE_OUTPUT_IO_TIMING_MEAS_POINT 1 HAS_ADVANCED_IO_INVERTED_CORNER 0 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 0 HAS_BITLEVEL_DRIVE_STRENGTH_CONTROL 0 HAS_BSDL_FILE_GENERATION 0 HAS_CDB_RE_NETWORK_PRESERVATION_SUPPORT 1 HAS_CGA_SUPPORT 1 HAS_CHECK_NETLIST_SUPPORT 0 HAS_CLOCK_REGION_CHECKER_ENABLED 0 HAS_CORE_JUNCTION_TEMP_DERATING 0 HAS_CROSSTALK_SUPPORT 0 HAS_CUSTOM_REGION_SUPPORT 0 HAS_DAP_JTAG_FROM_HPS 0 HAS_DATA_DRIVEN_ACVQ_HSSI_SUPPORT 1 HAS_DDB_FDI_SUPPORT 1 HAS_DESIGN_ANALYZER_SUPPORT 0 HAS_DETAILED_IO_RAIL_POWER_MODEL 1 HAS_DETAILED_LEIM_STATIC_POWER_MODEL 0 HAS_DETAILED_LE_POWER_MODEL 0 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_ERROR_DETECTION_SUPPORT 1 HAS_FAMILY_VARIANT_MIGRATION_SUPPORT 0 HAS_FANOUT_FREE_NODE_SUPPORT 1 HAS_FAST_FIT_SUPPORT 0 HAS_FITTER_ECO_SUPPORT 0 HAS_FIT_NETLIST_OPT_RETIME_SUPPORT 1 HAS_FIT_NETLIST_OPT_SUPPORT 1 HAS_FORMAL_VERIFICATION_SUPPORT 0 HAS_FPGA_XCHANGE_SUPPORT 0 HAS_FSAC_LUTRAM_REGISTER_PACKING_SUPPORT 1 HAS_FULL_DAT_MIN_TIMING_SUPPORT 1 HAS_FULL_INCREMENTAL_DESIGN_SUPPORT 1 HAS_FUNCTIONAL_SIMULATION_SUPPORT 0 HAS_FUNCTIONAL_VERILOG_SIMULATION_SUPPORT 1 HAS_FUNCTIONAL_VHDL_SIMULATION_SUPPORT 1 HAS_GLITCH_FILTERING_SUPPORT 1 HAS_HARDCOPYII_SUPPORT 0 HAS_HC_READY_SUPPORT 0 HAS_HIGH_SPEED_LOW_POWER_TILE_SUPPORT 1 HAS_HOLD_TIME_AVOIDANCE_ACROSS_CLOCK_SPINE_SUPPORT 0 HAS_HSPICE_WRITER_SUPPORT 0 HAS_HSSI_POWER_CALCULATOR 1 HAS_IBISO_WRITER_SUPPORT 0 HAS_ICD_DATA_IP 1 HAS_IDB_SUPPORT 1 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 0 HAS_IO_PLACEMENT_USING_GEOMETRY_RULE 0 HAS_IO_PLACEMENT_USING_PHYSIC_RULE 0 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 0 HAS_MIN_TIMING_ANALYSIS_SUPPORT 0 HAS_MUX_RESTRUCTURE_SUPPORT 1 HAS_NEW_HC_FLOW_SUPPORT 0 HAS_NEW_SERDES_MAX_RESOURCE_COUNT_REPORTING_SUPPORT 0 HAS_NEW_VPR_SUPPORT 1 HAS_NONSOCKET_TECHNOLOGY_MIGRATION_SUPPORT 0 HAS_NO_HARDBLOCK_PARTITION_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 1 HAS_PASSIVE_PARALLEL_SUPPORT 0 HAS_PHYSICAL_DESIGN_PLANNER_SUPPORT 1 HAS_PHYSICAL_NETLIST_OUTPUT 0 HAS_PHYSICAL_ROUTING_SUPPORT 1 HAS_PIN_SPECIFIC_VOLTAGE_SUPPORT 1 HAS_PLDM_REF_SUPPORT 0 HAS_POWER_BINNING_LIMITS_DATA 1 HAS_POWER_ESTIMATION_SUPPORT 1 HAS_PRELIMINARY_CLOCK_UNCERTAINTY_NUMBERS 1 HAS_PRE_FITTER_FPP_SUPPORT 1 HAS_PRE_FITTER_LUTRAM_NETLIST_CHECKER_ENABLED 1 HAS_PVA_SUPPORT 1 HAS_QUARTUS_HIERARCHICAL_DESIGN_SUPPORT 1 HAS_RAPID_RECOMPILE_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 0 HAS_SIGNAL_TAP_SUPPORT 1 HAS_SIMULATOR_SUPPORT 0 HAS_SPLIT_IO_SUPPORT 1 HAS_SPLIT_LC_SUPPORT 1 HAS_STRICT_PRESERVATION_SUPPORT 0 HAS_SYNTHESIS_ON_ATOMS 1 HAS_SYNTH_FSYN_NETLIST_OPT_SUPPORT 1 HAS_SYNTH_NETLIST_OPT_RETIME_SUPPORT 0 HAS_SYNTH_NETLIST_OPT_SUPPORT 1 HAS_TCL_FITTER_SUPPORT 1 HAS_TECHNOLOGY_MIGRATION_SUPPORT 0 HAS_TEMPLATED_REGISTER_PACKING_SUPPORT 1 HAS_TIME_BORROWING_SUPPORT 1 HAS_TIMING_DRIVEN_SYNTHESIS_SUPPORT 1 HAS_TIMING_INFO_SUPPORT 1 HAS_TIMING_OPERATING_CONDITIONS 1 HAS_TIMING_SIMULATION_SUPPORT 0 HAS_TITAN_BASED_MAC_REGISTER_PACKER_SUPPORT 0 HAS_U2B2_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_XIBISO2_WRITER_SUPPORT 1 HAS_XIBISO_WRITER_SUPPORT 0 IFP_USE_LEGACY_IO_CHECKER 0 INCREMENTAL_DESIGN_SUPPORTS_COMPATIBLE_CONSTRAINTS 1 INSTALLED 0 INTERNAL_POF_SUPPORT_ENABLED 0 INTERNAL_USE_ONLY 0 ISSUE_MILITARY_TEMPERATURE_WARNING 0 IS_CONFIG_ROM 0 IS_DEFAULT_FAMILY 0 IS_FOR_INTERNAL_TESTING_ONLY 0 IS_HARDCOPY_FAMILY 0 IS_HBGA_PACKAGE 0 IS_HIGH_CURRENT_PART 0 IS_LOW_POWER_PART 0 IS_SDM_ONLY_PACKAGE 0 IS_SMI_PART 0 LOAD_BLK_TYPE_DATA_FROM_ATOM_WYS_INFO 0 LVDS_IO 1 M10K_MEMORY 0 M144K_MEMORY 0 M20K_MEMORY 1 M4K_MEMORY 0 M512_MEMORY 0 M9K_MEMORY 0 MLAB_MEMORY 1 MRAM_MEMORY 0 NOT_LISTED 0 NOT_MIGRATABLE 0 NO_FITTER_DELAY_CACHE_GENERATED 0 NO_PIN_OUT 0 NO_POF 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 0 POSTMAP_BAK_DATABASE_EXPORT_ENABLED 0 PROGRAMMER_ONLY 0 PROGRAMMER_SUPPORT 1 PVA_SUPPORTS_ONLY_SUBSET_OF_ATOMS 1 QFIT_IN_DEVELOPMENT 0 QMAP_IN_DEVELOPMENT 0 RAM_LOGICAL_NAME_CHECKING_IN_CUT_ENABLED 0 REPORTS_METASTABILITY_MTBF 1 REQUIRES_INSTALLATION_PATCH 0 REQUIRES_LIST_OF_TEMPERATURE_AND_VOLTAGE_OPERATING_CONDITIONS 1 REQUIRE_QUARTUS_HIERARCHICAL_DESIGN 0 REQUIRE_SPECIAL_HANDLING_FOR_LOCAL_LABLINE 0 RESERVES_SIGNAL_PROBE_PINS 0 RESOLVE_MAX_FANOUT_EARLY 1 RESOLVE_MAX_FANOUT_LATE 0 RESPECTS_FIXED_SIZED_LOCKED_LOCATION_LOGICLOCK 0 RESTRICTED_USER_SELECTION 0 RISEFALL_SUPPORT_IS_HIDDEN 0 SHOW_HIDDEN_FAMILY_IN_PROGRAMMER 0 STRICT_TIMING_DB_CHECKS 0 SUPPORTS_ADDITIONAL_OPTIONS_FOR_UNUSED_IO 0 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 0 SUPPORTS_HIPI_RETIMING 0 SUPPORTS_MAC_CHAIN_OUT_ADDER 0 SUPPORTS_RAM_PACKING_BACK_ANNOTATION 0 SUPPORTS_REG_PACKING_BACK_ANNOTATION 0 SUPPORTS_SIGNALPROBE_REGISTER_PIPELINING 0 SUPPORTS_SINGLE_ENDED_AIOT_BOARD_TRACE_MODEL 1 SUPPORTS_USER_MANUAL_LOGIC_DUPLICATION 1 SUPPORTS_VID 0 TMV_RUN_CUSTOMIZABLE_VIEWER 0 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 0 TRANSCEIVER_6G_BLOCK 0 USES_ACV_FOR_FLED 0 USES_ADB_FOR_BACK_ANNOTATION 1 USES_ALTERA_LNSIM 0 USES_ASIC_ROUTING_POWER_CALCULATOR 0 USES_DATA_DRIVEN_PLL_COMPUTATION_UTIL 0 USES_DEV 1 USES_ICP_FOR_ECO_FITTER 0 USES_LIBERTY_TIMING 0 USES_NETWORK_ROUTING_POWER_CALCULATOR 1 USES_PART_INFO_FOR_DISPLAYING_CORE_VOLTAGE_VALUE 1 USES_POWER_SIGNAL_ACTIVITIES 1 USES_PVAFAM2 1 USES_SECOND_GENERATION_PART_INFO 1 USES_SECOND_GENERATION_POWER_ANALYZER 1 USES_THIRD_GENERATION_TIMING_MODELS_TIS 1 USES_U2B2_TIMING_MODELS 1 USES_XML_FORMAT_FOR_EMIF_PIN_MAP_FILE 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 1 USE_RELAX_IO_ASSIGNMENT_RULES 0 USE_RISEFALL_ONLY 1 USE_SEPARATE_LIST_FOR_TECH_MIGRATION 0 USE_SINGLE_COMPILER_PASS_PLL_MIF_FILE_WRITER 0 USE_TITAN_IO_BASED_IO_REGISTER_PACKER_UTIL 1 USING_28NM_OR_OLDER_TIMING_METHODOLOGY 0 WYSIWYG_BUS_WIDTH_CHECKING_IN_CUT_ENABLED 0</parameter>
+  <parameter name="dividerType" value="no_div" />
+  <parameter name="exceptionOffset" value="32" />
+  <parameter name="exceptionSlave" value="onchip_memory2_0.s1" />
+  <parameter name="faAddrWidth" value="1" />
+  <parameter name="faSlaveMapParam" value="" />
+  <parameter name="fa_cache_line" value="2" />
+  <parameter name="fa_cache_linesize" value="0" />
+  <parameter name="flash_instruction_master_paddr_base" value="0" />
+  <parameter name="flash_instruction_master_paddr_size" value="0" />
+  <parameter name="icache_burstType" value="None" />
+  <parameter name="icache_numTCIM" value="0" />
+  <parameter name="icache_ramBlockType" value="Automatic" />
+  <parameter name="icache_size" value="4096" />
+  <parameter name="icache_tagramBlockType" value="Automatic" />
+  <parameter name="impl" value="Tiny" />
+  <parameter name="instAddrWidth" value="18" />
+  <parameter name="instSlaveMapParam"><![CDATA[<address-map><slave name='cpu_0.debug_mem_slave' start='0x3800' end='0x4000' /><slave name='onchip_memory2_0.s1' start='0x20000' end='0x40000' /></address-map>]]></parameter>
+  <parameter name="instructionMasterHighPerformanceAddrWidth" value="1" />
+  <parameter name="instructionMasterHighPerformanceMapParam" value="" />
+  <parameter name="instruction_master_high_performance_paddr_base" value="0" />
+  <parameter name="instruction_master_high_performance_paddr_size" value="0" />
+  <parameter name="instruction_master_paddr_base" value="0" />
+  <parameter name="instruction_master_paddr_size" value="0" />
+  <parameter name="internalIrqMaskSystemInfo" value="7" />
+  <parameter name="io_regionbase" value="0" />
+  <parameter name="io_regionsize" value="0" />
+  <parameter name="master_addr_map" value="false" />
+  <parameter name="mmu_TLBMissExcOffset" value="0" />
+  <parameter name="mmu_TLBMissExcSlave" value="None" />
+  <parameter name="mmu_autoAssignTlbPtrSz" value="true" />
+  <parameter name="mmu_enabled" value="false" />
+  <parameter name="mmu_processIDNumBits" value="8" />
+  <parameter name="mmu_ramBlockType" value="Automatic" />
+  <parameter name="mmu_tlbNumWays" value="16" />
+  <parameter name="mmu_tlbPtrSz" value="7" />
+  <parameter name="mmu_udtlbNumEntries" value="6" />
+  <parameter name="mmu_uitlbNumEntries" value="4" />
+  <parameter name="mpu_enabled" value="false" />
+  <parameter name="mpu_minDataRegionSize" value="12" />
+  <parameter name="mpu_minInstRegionSize" value="12" />
+  <parameter name="mpu_numOfDataRegion" value="8" />
+  <parameter name="mpu_numOfInstRegion" value="8" />
+  <parameter name="mpu_useLimit" value="false" />
+  <parameter name="mpx_enabled" value="false" />
+  <parameter name="mul_32_impl" value="2" />
+  <parameter name="mul_64_impl" value="0" />
+  <parameter name="mul_shift_choice" value="0" />
+  <parameter name="ocimem_ramBlockType" value="Automatic" />
+  <parameter name="ocimem_ramInit" value="false" />
+  <parameter name="regfile_ramBlockType" value="Automatic" />
+  <parameter name="resetOffset" value="0" />
+  <parameter name="resetSlave" value="onchip_memory2_0.s1" />
+  <parameter name="resetrequest_enabled" value="true" />
+  <parameter name="setting_HBreakTest" value="false" />
+  <parameter name="setting_HDLSimCachesCleared" value="true" />
+  <parameter name="setting_activateMonitors" value="true" />
+  <parameter name="setting_activateTestEndChecker" value="false" />
+  <parameter name="setting_activateTrace" value="false" />
+  <parameter name="setting_allow_break_inst" value="false" />
+  <parameter name="setting_alwaysEncrypt" value="true" />
+  <parameter name="setting_asic_add_scan_mode_input" value="false" />
+  <parameter name="setting_asic_enabled" value="false" />
+  <parameter name="setting_asic_synopsys_translate_on_off" value="false" />
+  <parameter name="setting_asic_third_party_synthesis" value="false" />
+  <parameter name="setting_avalonDebugPortPresent" value="false" />
+  <parameter name="setting_bhtPtrSz" value="8" />
+  <parameter name="setting_bigEndian" value="false" />
+  <parameter name="setting_branchpredictiontype" value="Dynamic" />
+  <parameter name="setting_breakslaveoveride" value="false" />
+  <parameter name="setting_clearXBitsLDNonBypass" value="true" />
+  <parameter name="setting_dc_ecc_present" value="true" />
+  <parameter name="setting_disable_tmr_inj" value="false" />
+  <parameter name="setting_disableocitrace" value="false" />
+  <parameter name="setting_dtcm_ecc_present" value="true" />
+  <parameter name="setting_ecc_present" value="false" />
+  <parameter name="setting_ecc_sim_test_ports" value="false" />
+  <parameter name="setting_exportHostDebugPort" value="false" />
+  <parameter name="setting_exportPCB" value="false" />
+  <parameter name="setting_export_large_RAMs" value="false" />
+  <parameter name="setting_exportdebuginfo" value="false" />
+  <parameter name="setting_exportvectors" value="false" />
+  <parameter name="setting_fast_register_read" value="false" />
+  <parameter name="setting_ic_ecc_present" value="true" />
+  <parameter name="setting_interruptControllerType" value="Internal" />
+  <parameter name="setting_itcm_ecc_present" value="true" />
+  <parameter name="setting_mmu_ecc_present" value="true" />
+  <parameter name="setting_oci_export_jtag_signals" value="false" />
+  <parameter name="setting_oci_version" value="1" />
+  <parameter name="setting_preciseIllegalMemAccessException" value="false" />
+  <parameter name="setting_removeRAMinit" value="false" />
+  <parameter name="setting_rf_ecc_present" value="true" />
+  <parameter name="setting_shadowRegisterSets" value="0" />
+  <parameter name="setting_showInternalSettings" value="false" />
+  <parameter name="setting_showUnpublishedSettings" value="false" />
+  <parameter name="setting_support31bitdcachebypass" value="true" />
+  <parameter name="setting_usedesignware" value="false" />
+  <parameter name="shift_rot_impl" value="1" />
+  <parameter name="tightlyCoupledDataMaster0AddrWidth" value="1" />
+  <parameter name="tightlyCoupledDataMaster0MapParam" value="" />
+  <parameter name="tightlyCoupledDataMaster1AddrWidth" value="1" />
+  <parameter name="tightlyCoupledDataMaster1MapParam" value="" />
+  <parameter name="tightlyCoupledDataMaster2AddrWidth" value="1" />
+  <parameter name="tightlyCoupledDataMaster2MapParam" value="" />
+  <parameter name="tightlyCoupledDataMaster3AddrWidth" value="1" />
+  <parameter name="tightlyCoupledDataMaster3MapParam" value="" />
+  <parameter name="tightlyCoupledInstructionMaster0AddrWidth" value="1" />
+  <parameter name="tightlyCoupledInstructionMaster0MapParam" value="" />
+  <parameter name="tightlyCoupledInstructionMaster1AddrWidth" value="1" />
+  <parameter name="tightlyCoupledInstructionMaster1MapParam" value="" />
+  <parameter name="tightlyCoupledInstructionMaster2AddrWidth" value="1" />
+  <parameter name="tightlyCoupledInstructionMaster2MapParam" value="" />
+  <parameter name="tightlyCoupledInstructionMaster3AddrWidth" value="1" />
+  <parameter name="tightlyCoupledInstructionMaster3MapParam" value="" />
+  <parameter name="tightly_coupled_data_master_0_paddr_base" value="0" />
+  <parameter name="tightly_coupled_data_master_0_paddr_size" value="0" />
+  <parameter name="tightly_coupled_data_master_1_paddr_base" value="0" />
+  <parameter name="tightly_coupled_data_master_1_paddr_size" value="0" />
+  <parameter name="tightly_coupled_data_master_2_paddr_base" value="0" />
+  <parameter name="tightly_coupled_data_master_2_paddr_size" value="0" />
+  <parameter name="tightly_coupled_data_master_3_paddr_base" value="0" />
+  <parameter name="tightly_coupled_data_master_3_paddr_size" value="0" />
+  <parameter name="tightly_coupled_instruction_master_0_paddr_base" value="0" />
+  <parameter name="tightly_coupled_instruction_master_0_paddr_size" value="0" />
+  <parameter name="tightly_coupled_instruction_master_1_paddr_base" value="0" />
+  <parameter name="tightly_coupled_instruction_master_1_paddr_size" value="0" />
+  <parameter name="tightly_coupled_instruction_master_2_paddr_base" value="0" />
+  <parameter name="tightly_coupled_instruction_master_2_paddr_size" value="0" />
+  <parameter name="tightly_coupled_instruction_master_3_paddr_base" value="0" />
+  <parameter name="tightly_coupled_instruction_master_3_paddr_size" value="0" />
+  <parameter name="tmr_enabled" value="false" />
+  <parameter name="tracefilename" value="" />
+  <parameter name="userDefinedSettings" value="" />
+ </module>
+ <module
+   name="jtag_uart_0"
+   kind="altera_avalon_jtag_uart"
+   version="15.0"
+   enabled="1">
+  <parameter name="allowMultipleConnections" value="false" />
+  <parameter name="avalonSpec" value="2.0" />
+  <parameter name="clkFreq" value="50000000" />
+  <parameter name="hubInstanceID" value="0" />
+  <parameter name="readBufferDepth" value="64" />
+  <parameter name="readIRQThreshold" value="8" />
+  <parameter name="simInputCharacterStream" value="" />
+  <parameter name="simInteractiveOptions">NO_INTERACTIVE_WINDOWS</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
+   name="onchip_memory2_0"
+   kind="altera_avalon_onchip_memory2"
+   version="15.0"
+   enabled="1">
+  <parameter name="allowInSystemMemoryContentEditor" value="false" />
+  <parameter name="autoInitializationFileName">$${FILENAME}_onchip_memory2_0</parameter>
+  <parameter name="blockType" value="AUTO" />
+  <parameter name="copyInitFile" value="false" />
+  <parameter name="dataWidth" value="32" />
+  <parameter name="deviceFamily" value="Arria 10" />
+  <parameter name="deviceFeatures">ADDRESS_STALL 0 ADVANCED_INFO 0 ALLOWS_COMPILING_OTHER_FAMILY_IP 0 ANY_QFP 0 CELL_LEVEL_BACK_ANNOTATION_DISABLED 0 COMPILER_SUPPORT 1 DSP 1 DSP_SHIFTER_BLOCK 0 DUMP_ASM_LAB_BITS_FOR_POWER 0 EMUL 0 ENABLE_ADVANCED_IO_ANALYSIS_GUI_FEATURES 1 ENABLE_PIN_PLANNER 0 ENGINEERING_SAMPLE 0 EPCS 0 ESB 0 FAKE1 0 FAKE2 0 FAKE3 0 FAMILY_LEVEL_INSTALLATION_ONLY 0 FASTEST 0 FINAL_TIMING_MODEL 0 FITTER_USE_FALLING_EDGE_DELAY 0 GENERATE_DC_ON_CURRENT_WARNING_FOR_INTERNAL_CLAMPING_DIODE 0 HARDCOPY 0 HAS_18_BIT_MULTS 0 HAS_ACE_SUPPORT 1 HAS_ACTIVE_PARALLEL_FLASH_SUPPORT 0 HAS_ADJUSTABLE_OUTPUT_IO_TIMING_MEAS_POINT 1 HAS_ADVANCED_IO_INVERTED_CORNER 0 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 0 HAS_BITLEVEL_DRIVE_STRENGTH_CONTROL 0 HAS_BSDL_FILE_GENERATION 0 HAS_CDB_RE_NETWORK_PRESERVATION_SUPPORT 1 HAS_CGA_SUPPORT 1 HAS_CHECK_NETLIST_SUPPORT 0 HAS_CLOCK_REGION_CHECKER_ENABLED 0 HAS_CORE_JUNCTION_TEMP_DERATING 0 HAS_CROSSTALK_SUPPORT 0 HAS_CUSTOM_REGION_SUPPORT 0 HAS_DAP_JTAG_FROM_HPS 0 HAS_DATA_DRIVEN_ACVQ_HSSI_SUPPORT 1 HAS_DDB_FDI_SUPPORT 1 HAS_DESIGN_ANALYZER_SUPPORT 0 HAS_DETAILED_IO_RAIL_POWER_MODEL 1 HAS_DETAILED_LEIM_STATIC_POWER_MODEL 0 HAS_DETAILED_LE_POWER_MODEL 0 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_ERROR_DETECTION_SUPPORT 1 HAS_FAMILY_VARIANT_MIGRATION_SUPPORT 0 HAS_FANOUT_FREE_NODE_SUPPORT 1 HAS_FAST_FIT_SUPPORT 0 HAS_FITTER_ECO_SUPPORT 0 HAS_FIT_NETLIST_OPT_RETIME_SUPPORT 1 HAS_FIT_NETLIST_OPT_SUPPORT 1 HAS_FORMAL_VERIFICATION_SUPPORT 0 HAS_FPGA_XCHANGE_SUPPORT 0 HAS_FSAC_LUTRAM_REGISTER_PACKING_SUPPORT 1 HAS_FULL_DAT_MIN_TIMING_SUPPORT 1 HAS_FULL_INCREMENTAL_DESIGN_SUPPORT 1 HAS_FUNCTIONAL_SIMULATION_SUPPORT 0 HAS_FUNCTIONAL_VERILOG_SIMULATION_SUPPORT 1 HAS_FUNCTIONAL_VHDL_SIMULATION_SUPPORT 1 HAS_GLITCH_FILTERING_SUPPORT 1 HAS_HARDCOPYII_SUPPORT 0 HAS_HC_READY_SUPPORT 0 HAS_HIGH_SPEED_LOW_POWER_TILE_SUPPORT 1 HAS_HOLD_TIME_AVOIDANCE_ACROSS_CLOCK_SPINE_SUPPORT 0 HAS_HSPICE_WRITER_SUPPORT 0 HAS_HSSI_POWER_CALCULATOR 1 HAS_IBISO_WRITER_SUPPORT 0 HAS_ICD_DATA_IP 1 HAS_IDB_SUPPORT 1 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 0 HAS_IO_PLACEMENT_USING_GEOMETRY_RULE 0 HAS_IO_PLACEMENT_USING_PHYSIC_RULE 0 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 0 HAS_MIN_TIMING_ANALYSIS_SUPPORT 0 HAS_MUX_RESTRUCTURE_SUPPORT 1 HAS_NEW_HC_FLOW_SUPPORT 0 HAS_NEW_SERDES_MAX_RESOURCE_COUNT_REPORTING_SUPPORT 0 HAS_NEW_VPR_SUPPORT 1 HAS_NONSOCKET_TECHNOLOGY_MIGRATION_SUPPORT 0 HAS_NO_HARDBLOCK_PARTITION_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 1 HAS_PASSIVE_PARALLEL_SUPPORT 0 HAS_PHYSICAL_DESIGN_PLANNER_SUPPORT 1 HAS_PHYSICAL_NETLIST_OUTPUT 0 HAS_PHYSICAL_ROUTING_SUPPORT 1 HAS_PIN_SPECIFIC_VOLTAGE_SUPPORT 1 HAS_PLDM_REF_SUPPORT 0 HAS_POWER_BINNING_LIMITS_DATA 1 HAS_POWER_ESTIMATION_SUPPORT 1 HAS_PRELIMINARY_CLOCK_UNCERTAINTY_NUMBERS 1 HAS_PRE_FITTER_FPP_SUPPORT 1 HAS_PRE_FITTER_LUTRAM_NETLIST_CHECKER_ENABLED 1 HAS_PVA_SUPPORT 1 HAS_QUARTUS_HIERARCHICAL_DESIGN_SUPPORT 1 HAS_RAPID_RECOMPILE_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 0 HAS_SIGNAL_TAP_SUPPORT 1 HAS_SIMULATOR_SUPPORT 0 HAS_SPLIT_IO_SUPPORT 1 HAS_SPLIT_LC_SUPPORT 1 HAS_STRICT_PRESERVATION_SUPPORT 0 HAS_SYNTHESIS_ON_ATOMS 1 HAS_SYNTH_FSYN_NETLIST_OPT_SUPPORT 1 HAS_SYNTH_NETLIST_OPT_RETIME_SUPPORT 0 HAS_SYNTH_NETLIST_OPT_SUPPORT 1 HAS_TCL_FITTER_SUPPORT 1 HAS_TECHNOLOGY_MIGRATION_SUPPORT 0 HAS_TEMPLATED_REGISTER_PACKING_SUPPORT 1 HAS_TIME_BORROWING_SUPPORT 1 HAS_TIMING_DRIVEN_SYNTHESIS_SUPPORT 1 HAS_TIMING_INFO_SUPPORT 1 HAS_TIMING_OPERATING_CONDITIONS 1 HAS_TIMING_SIMULATION_SUPPORT 0 HAS_TITAN_BASED_MAC_REGISTER_PACKER_SUPPORT 0 HAS_U2B2_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_XIBISO2_WRITER_SUPPORT 1 HAS_XIBISO_WRITER_SUPPORT 0 IFP_USE_LEGACY_IO_CHECKER 0 INCREMENTAL_DESIGN_SUPPORTS_COMPATIBLE_CONSTRAINTS 1 INSTALLED 0 INTERNAL_POF_SUPPORT_ENABLED 0 INTERNAL_USE_ONLY 0 ISSUE_MILITARY_TEMPERATURE_WARNING 0 IS_CONFIG_ROM 0 IS_DEFAULT_FAMILY 0 IS_FOR_INTERNAL_TESTING_ONLY 0 IS_HARDCOPY_FAMILY 0 IS_HBGA_PACKAGE 0 IS_HIGH_CURRENT_PART 0 IS_LOW_POWER_PART 0 IS_SDM_ONLY_PACKAGE 0 IS_SMI_PART 0 LOAD_BLK_TYPE_DATA_FROM_ATOM_WYS_INFO 0 LVDS_IO 1 M10K_MEMORY 0 M144K_MEMORY 0 M20K_MEMORY 1 M4K_MEMORY 0 M512_MEMORY 0 M9K_MEMORY 0 MLAB_MEMORY 1 MRAM_MEMORY 0 NOT_LISTED 0 NOT_MIGRATABLE 0 NO_FITTER_DELAY_CACHE_GENERATED 0 NO_PIN_OUT 0 NO_POF 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 0 POSTMAP_BAK_DATABASE_EXPORT_ENABLED 0 PROGRAMMER_ONLY 0 PROGRAMMER_SUPPORT 1 PVA_SUPPORTS_ONLY_SUBSET_OF_ATOMS 1 QFIT_IN_DEVELOPMENT 0 QMAP_IN_DEVELOPMENT 0 RAM_LOGICAL_NAME_CHECKING_IN_CUT_ENABLED 0 REPORTS_METASTABILITY_MTBF 1 REQUIRES_INSTALLATION_PATCH 0 REQUIRES_LIST_OF_TEMPERATURE_AND_VOLTAGE_OPERATING_CONDITIONS 1 REQUIRE_QUARTUS_HIERARCHICAL_DESIGN 0 REQUIRE_SPECIAL_HANDLING_FOR_LOCAL_LABLINE 0 RESERVES_SIGNAL_PROBE_PINS 0 RESOLVE_MAX_FANOUT_EARLY 1 RESOLVE_MAX_FANOUT_LATE 0 RESPECTS_FIXED_SIZED_LOCKED_LOCATION_LOGICLOCK 0 RESTRICTED_USER_SELECTION 0 RISEFALL_SUPPORT_IS_HIDDEN 0 SHOW_HIDDEN_FAMILY_IN_PROGRAMMER 0 STRICT_TIMING_DB_CHECKS 0 SUPPORTS_ADDITIONAL_OPTIONS_FOR_UNUSED_IO 0 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 0 SUPPORTS_HIPI_RETIMING 0 SUPPORTS_MAC_CHAIN_OUT_ADDER 0 SUPPORTS_RAM_PACKING_BACK_ANNOTATION 0 SUPPORTS_REG_PACKING_BACK_ANNOTATION 0 SUPPORTS_SIGNALPROBE_REGISTER_PIPELINING 0 SUPPORTS_SINGLE_ENDED_AIOT_BOARD_TRACE_MODEL 1 SUPPORTS_USER_MANUAL_LOGIC_DUPLICATION 1 SUPPORTS_VID 0 TMV_RUN_CUSTOMIZABLE_VIEWER 0 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 0 TRANSCEIVER_6G_BLOCK 0 USES_ACV_FOR_FLED 0 USES_ADB_FOR_BACK_ANNOTATION 1 USES_ALTERA_LNSIM 0 USES_ASIC_ROUTING_POWER_CALCULATOR 0 USES_DATA_DRIVEN_PLL_COMPUTATION_UTIL 0 USES_DEV 1 USES_ICP_FOR_ECO_FITTER 0 USES_LIBERTY_TIMING 0 USES_NETWORK_ROUTING_POWER_CALCULATOR 1 USES_PART_INFO_FOR_DISPLAYING_CORE_VOLTAGE_VALUE 1 USES_POWER_SIGNAL_ACTIVITIES 1 USES_PVAFAM2 1 USES_SECOND_GENERATION_PART_INFO 1 USES_SECOND_GENERATION_POWER_ANALYZER 1 USES_THIRD_GENERATION_TIMING_MODELS_TIS 1 USES_U2B2_TIMING_MODELS 1 USES_XML_FORMAT_FOR_EMIF_PIN_MAP_FILE 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 1 USE_RELAX_IO_ASSIGNMENT_RULES 0 USE_RISEFALL_ONLY 1 USE_SEPARATE_LIST_FOR_TECH_MIGRATION 0 USE_SINGLE_COMPILER_PASS_PLL_MIF_FILE_WRITER 0 USE_TITAN_IO_BASED_IO_REGISTER_PACKER_UTIL 1 USING_28NM_OR_OLDER_TIMING_METHODOLOGY 0 WYSIWYG_BUS_WIDTH_CHECKING_IN_CUT_ENABLED 0</parameter>
+  <parameter name="dualPort" value="false" />
+  <parameter name="ecc_enabled" value="false" />
+  <parameter name="initMemContent" value="true" />
+  <parameter name="initializationFileName">onchip_memory2_0.hex</parameter>
+  <parameter name="instanceID" value="NONE" />
+  <parameter name="memorySize" value="131072" />
+  <parameter name="readDuringWriteMode" value="DONT_CARE" />
+  <parameter name="resetrequest_enabled" value="true" />
+  <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 name="pio_pps" kind="avs_common_mm" version="1.0" enabled="1">
+  <parameter name="AUTO_SYSTEM_CLOCK_RATE" value="50000000" />
+  <parameter name="g_adr_w" value="1" />
+  <parameter name="g_dat_w" value="32" />
+ </module>
+ <module name="pio_system_info" kind="avs_common_mm" version="1.0" enabled="1">
+  <parameter name="AUTO_SYSTEM_CLOCK_RATE" value="50000000" />
+  <parameter name="g_adr_w" value="5" />
+  <parameter name="g_dat_w" value="32" />
+ </module>
+ <module name="pio_wdi" kind="altera_avalon_pio" version="15.0" enabled="1">
+  <parameter name="bitClearingEdgeCapReg" value="false" />
+  <parameter name="bitModifyingOutReg" value="false" />
+  <parameter name="captureEdge" value="false" />
+  <parameter name="clockRate" value="50000000" />
+  <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 name="reg_dpmm_ctrl" kind="avs_common_mm" version="1.0" enabled="1">
+  <parameter name="AUTO_SYSTEM_CLOCK_RATE" value="50000000" />
+  <parameter name="g_adr_w" value="1" />
+  <parameter name="g_dat_w" value="32" />
+ </module>
+ <module name="reg_dpmm_data" kind="avs_common_mm" version="1.0" enabled="1">
+  <parameter name="AUTO_SYSTEM_CLOCK_RATE" value="50000000" />
+  <parameter name="g_adr_w" value="1" />
+  <parameter name="g_dat_w" value="32" />
+ </module>
+ <module name="reg_epcs" kind="avs_common_mm" version="1.0" enabled="1">
+  <parameter name="AUTO_SYSTEM_CLOCK_RATE" value="50000000" />
+  <parameter name="g_adr_w" value="3" />
+  <parameter name="g_dat_w" value="32" />
+ </module>
+ <module
+   name="reg_fpga_temp_sens"
+   kind="avs_common_mm"
+   version="1.0"
+   enabled="1">
+  <parameter name="AUTO_SYSTEM_CLOCK_RATE" value="50000000" />
+  <parameter name="g_adr_w" value="3" />
+  <parameter name="g_dat_w" value="32" />
+ </module>
+ <module
+   name="reg_fpga_voltage_sens"
+   kind="avs_common_mm"
+   version="1.0"
+   enabled="1">
+  <parameter name="AUTO_SYSTEM_CLOCK_RATE" value="50000000" />
+  <parameter name="g_adr_w" value="4" />
+  <parameter name="g_dat_w" value="32" />
+ </module>
+ <module name="reg_mmdp_ctrl" kind="avs_common_mm" version="1.0" enabled="1">
+  <parameter name="AUTO_SYSTEM_CLOCK_RATE" value="50000000" />
+  <parameter name="g_adr_w" value="1" />
+  <parameter name="g_dat_w" value="32" />
+ </module>
+ <module name="reg_mmdp_data" kind="avs_common_mm" version="1.0" enabled="1">
+  <parameter name="AUTO_SYSTEM_CLOCK_RATE" value="50000000" />
+  <parameter name="g_adr_w" value="1" />
+  <parameter name="g_dat_w" value="32" />
+ </module>
+ <module name="reg_remu" kind="avs_common_mm" version="1.0" enabled="1">
+  <parameter name="AUTO_SYSTEM_CLOCK_RATE" value="50000000" />
+  <parameter name="g_adr_w" value="3" />
+  <parameter name="g_dat_w" value="32" />
+ </module>
+ <module name="reg_unb_pmbus" kind="avs_common_mm" version="1.0" enabled="1">
+  <parameter name="AUTO_SYSTEM_CLOCK_RATE" value="50000000" />
+  <parameter name="g_adr_w" value="3" />
+  <parameter name="g_dat_w" value="32" />
+ </module>
+ <module name="reg_unb_sens" kind="avs_common_mm" version="1.0" enabled="1">
+  <parameter name="AUTO_SYSTEM_CLOCK_RATE" value="50000000" />
+  <parameter name="g_adr_w" value="3" />
+  <parameter name="g_dat_w" value="32" />
+ </module>
+ <module name="reg_wdi" kind="avs_common_mm" version="1.0" enabled="1">
+  <parameter name="AUTO_SYSTEM_CLOCK_RATE" value="50000000" />
+  <parameter name="g_adr_w" value="1" />
+  <parameter name="g_dat_w" value="32" />
+ </module>
+ <module name="rom_system_info" kind="avs_common_mm" version="1.0" enabled="1">
+  <parameter name="AUTO_SYSTEM_CLOCK_RATE" value="50000000" />
+  <parameter name="g_adr_w" value="10" />
+  <parameter name="g_dat_w" value="32" />
+ </module>
+ <module name="timer_0" kind="altera_avalon_timer" version="15.0" enabled="1">
+  <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="50000000" />
+  <parameter name="timeoutPulseOutput" value="false" />
+  <parameter name="watchdogPulse" value="2" />
+ </module>
+ <connection
+   kind="avalon"
+   version="15.0"
+   start="cpu_0.data_master"
+   end="jtag_uart_0.avalon_jtag_slave">
+  <parameter name="arbitrationPriority" value="1" />
+  <parameter name="baseAddress" value="0x01b8" />
+  <parameter name="defaultConnection" value="false" />
+ </connection>
+ <connection
+   kind="avalon"
+   version="15.0"
+   start="cpu_0.data_master"
+   end="cpu_0.debug_mem_slave">
+  <parameter name="arbitrationPriority" value="1" />
+  <parameter name="baseAddress" value="0x3800" />
+  <parameter name="defaultConnection" value="false" />
+ </connection>
+ <connection
+   kind="avalon"
+   version="15.0"
+   start="cpu_0.data_master"
+   end="reg_unb_sens.mem">
+  <parameter name="arbitrationPriority" value="1" />
+  <parameter name="baseAddress" value="0x0160" />
+  <parameter name="defaultConnection" value="false" />
+ </connection>
+ <connection
+   kind="avalon"
+   version="15.0"
+   start="cpu_0.data_master"
+   end="rom_system_info.mem">
+  <parameter name="arbitrationPriority" value="1" />
+  <parameter name="baseAddress" value="0x1000" />
+  <parameter name="defaultConnection" value="false" />
+ </connection>
+ <connection
+   kind="avalon"
+   version="15.0"
+   start="cpu_0.data_master"
+   end="pio_system_info.mem">
+  <parameter name="arbitrationPriority" value="1" />
+  <parameter name="baseAddress" value="0x0000" />
+  <parameter name="defaultConnection" value="false" />
+ </connection>
+ <connection
+   kind="avalon"
+   version="15.0"
+   start="cpu_0.data_master"
+   end="pio_pps.mem">
+  <parameter name="arbitrationPriority" value="1" />
+  <parameter name="baseAddress" value="0x01b0" />
+  <parameter name="defaultConnection" value="false" />
+ </connection>
+ <connection
+   kind="avalon"
+   version="15.0"
+   start="cpu_0.data_master"
+   end="reg_wdi.mem">
+  <parameter name="arbitrationPriority" value="1" />
+  <parameter name="baseAddress" value="0x3000" />
+  <parameter name="defaultConnection" value="false" />
+ </connection>
+ <connection
+   kind="avalon"
+   version="15.0"
+   start="cpu_0.data_master"
+   end="reg_remu.mem">
+  <parameter name="arbitrationPriority" value="1" />
+  <parameter name="baseAddress" value="0x0140" />
+  <parameter name="defaultConnection" value="false" />
+ </connection>
+ <connection
+   kind="avalon"
+   version="15.0"
+   start="cpu_0.data_master"
+   end="reg_epcs.mem">
+  <parameter name="arbitrationPriority" value="1" />
+  <parameter name="baseAddress" value="0x0120" />
+  <parameter name="defaultConnection" value="false" />
+ </connection>
+ <connection
+   kind="avalon"
+   version="15.0"
+   start="cpu_0.data_master"
+   end="reg_dpmm_ctrl.mem">
+  <parameter name="arbitrationPriority" value="1" />
+  <parameter name="baseAddress" value="0x01a8" />
+  <parameter name="defaultConnection" value="false" />
+ </connection>
+ <connection
+   kind="avalon"
+   version="15.0"
+   start="cpu_0.data_master"
+   end="reg_dpmm_data.mem">
+  <parameter name="arbitrationPriority" value="1" />
+  <parameter name="baseAddress" value="0x01a0" />
+  <parameter name="defaultConnection" value="false" />
+ </connection>
+ <connection
+   kind="avalon"
+   version="15.0"
+   start="cpu_0.data_master"
+   end="reg_mmdp_ctrl.mem">
+  <parameter name="arbitrationPriority" value="1" />
+  <parameter name="baseAddress" value="0x0198" />
+  <parameter name="defaultConnection" value="false" />
+ </connection>
+ <connection
+   kind="avalon"
+   version="15.0"
+   start="cpu_0.data_master"
+   end="reg_mmdp_data.mem">
+  <parameter name="arbitrationPriority" value="1" />
+  <parameter name="baseAddress" value="0x0190" />
+  <parameter name="defaultConnection" value="false" />
+ </connection>
+ <connection
+   kind="avalon"
+   version="15.0"
+   start="cpu_0.data_master"
+   end="reg_fpga_temp_sens.mem">
+  <parameter name="arbitrationPriority" value="1" />
+  <parameter name="baseAddress" value="0x00e0" />
+  <parameter name="defaultConnection" value="false" />
+ </connection>
+ <connection
+   kind="avalon"
+   version="15.0"
+   start="cpu_0.data_master"
+   end="reg_unb_pmbus.mem">
+  <parameter name="arbitrationPriority" value="1" />
+  <parameter name="baseAddress" value="0x00c0" />
+  <parameter name="defaultConnection" value="false" />
+ </connection>
+ <connection
+   kind="avalon"
+   version="15.0"
+   start="cpu_0.data_master"
+   end="reg_fpga_voltage_sens.mem">
+  <parameter name="arbitrationPriority" value="1" />
+  <parameter name="baseAddress" value="0x0200" />
+  <parameter name="defaultConnection" value="false" />
+ </connection>
+ <connection
+   kind="avalon"
+   version="15.0"
+   start="cpu_0.data_master"
+   end="avs_eth_0.mms_ram">
+  <parameter name="arbitrationPriority" value="1" />
+  <parameter name="baseAddress" value="0x4000" />
+  <parameter name="defaultConnection" value="false" />
+ </connection>
+ <connection
+   kind="avalon"
+   version="15.0"
+   start="cpu_0.data_master"
+   end="avs_eth_0.mms_reg">
+  <parameter name="arbitrationPriority" value="1" />
+  <parameter name="baseAddress" value="0x0080" />
+  <parameter name="defaultConnection" value="false" />
+ </connection>
+ <connection
+   kind="avalon"
+   version="15.0"
+   start="cpu_0.data_master"
+   end="avs_eth_0.mms_tse">
+  <parameter name="arbitrationPriority" value="1" />
+  <parameter name="baseAddress" value="0x2000" />
+  <parameter name="defaultConnection" value="false" />
+ </connection>
+ <connection
+   kind="avalon"
+   version="15.0"
+   start="cpu_0.data_master"
+   end="onchip_memory2_0.s1">
+  <parameter name="arbitrationPriority" value="1" />
+  <parameter name="baseAddress" value="0x00020000" />
+  <parameter name="defaultConnection" value="false" />
+ </connection>
+ <connection
+   kind="avalon"
+   version="15.0"
+   start="cpu_0.data_master"
+   end="pio_wdi.s1">
+  <parameter name="arbitrationPriority" value="1" />
+  <parameter name="baseAddress" value="0x0180" />
+  <parameter name="defaultConnection" value="false" />
+ </connection>
+ <connection
+   kind="avalon"
+   version="15.0"
+   start="cpu_0.data_master"
+   end="timer_0.s1">
+  <parameter name="arbitrationPriority" value="1" />
+  <parameter name="baseAddress" value="0x0100" />
+  <parameter name="defaultConnection" value="false" />
+ </connection>
+ <connection
+   kind="avalon"
+   version="15.0"
+   start="cpu_0.instruction_master"
+   end="cpu_0.debug_mem_slave">
+  <parameter name="arbitrationPriority" value="1" />
+  <parameter name="baseAddress" value="0x3800" />
+  <parameter name="defaultConnection" value="false" />
+ </connection>
+ <connection
+   kind="avalon"
+   version="15.0"
+   start="cpu_0.instruction_master"
+   end="onchip_memory2_0.s1">
+  <parameter name="arbitrationPriority" value="1" />
+  <parameter name="baseAddress" value="0x00020000" />
+  <parameter name="defaultConnection" value="false" />
+ </connection>
+ <connection kind="clock" version="15.0" start="clk_0.clk" end="jtag_uart_0.clk" />
+ <connection kind="clock" version="15.0" start="clk_0.clk" end="pio_wdi.clk" />
+ <connection kind="clock" version="15.0" start="clk_0.clk" end="timer_0.clk" />
+ <connection kind="clock" version="15.0" start="clk_0.clk" end="cpu_0.clk" />
+ <connection
+   kind="clock"
+   version="15.0"
+   start="clk_0.clk"
+   end="onchip_memory2_0.clk1" />
+ <connection kind="clock" version="15.0" start="clk_0.clk" end="avs_eth_0.mm" />
+ <connection
+   kind="clock"
+   version="15.0"
+   start="clk_0.clk"
+   end="reg_unb_sens.system" />
+ <connection
+   kind="clock"
+   version="15.0"
+   start="clk_0.clk"
+   end="rom_system_info.system" />
+ <connection
+   kind="clock"
+   version="15.0"
+   start="clk_0.clk"
+   end="pio_system_info.system" />
+ <connection kind="clock" version="15.0" start="clk_0.clk" end="pio_pps.system" />
+ <connection kind="clock" version="15.0" start="clk_0.clk" end="reg_wdi.system" />
+ <connection kind="clock" version="15.0" start="clk_0.clk" end="reg_remu.system" />
+ <connection kind="clock" version="15.0" start="clk_0.clk" end="reg_epcs.system" />
+ <connection
+   kind="clock"
+   version="15.0"
+   start="clk_0.clk"
+   end="reg_dpmm_ctrl.system" />
+ <connection
+   kind="clock"
+   version="15.0"
+   start="clk_0.clk"
+   end="reg_mmdp_data.system" />
+ <connection
+   kind="clock"
+   version="15.0"
+   start="clk_0.clk"
+   end="reg_dpmm_data.system" />
+ <connection
+   kind="clock"
+   version="15.0"
+   start="clk_0.clk"
+   end="reg_mmdp_ctrl.system" />
+ <connection
+   kind="clock"
+   version="15.0"
+   start="clk_0.clk"
+   end="reg_fpga_temp_sens.system" />
+ <connection
+   kind="clock"
+   version="15.0"
+   start="clk_0.clk"
+   end="reg_unb_pmbus.system" />
+ <connection
+   kind="clock"
+   version="15.0"
+   start="clk_0.clk"
+   end="reg_fpga_voltage_sens.system" />
+ <connection
+   kind="interrupt"
+   version="15.0"
+   start="cpu_0.irq"
+   end="avs_eth_0.interrupt">
+  <parameter name="irqNumber" value="0" />
+ </connection>
+ <connection
+   kind="interrupt"
+   version="15.0"
+   start="cpu_0.irq"
+   end="jtag_uart_0.irq">
+  <parameter name="irqNumber" value="1" />
+ </connection>
+ <connection kind="interrupt" version="15.0" start="cpu_0.irq" end="timer_0.irq">
+  <parameter name="irqNumber" value="2" />
+ </connection>
+ <connection
+   kind="reset"
+   version="15.0"
+   start="clk_0.clk_reset"
+   end="avs_eth_0.mm_reset" />
+ <connection
+   kind="reset"
+   version="15.0"
+   start="clk_0.clk_reset"
+   end="jtag_uart_0.reset" />
+ <connection
+   kind="reset"
+   version="15.0"
+   start="clk_0.clk_reset"
+   end="pio_wdi.reset" />
+ <connection
+   kind="reset"
+   version="15.0"
+   start="clk_0.clk_reset"
+   end="timer_0.reset" />
+ <connection kind="reset" version="15.0" start="clk_0.clk_reset" end="cpu_0.reset" />
+ <connection
+   kind="reset"
+   version="15.0"
+   start="clk_0.clk_reset"
+   end="onchip_memory2_0.reset1" />
+ <connection
+   kind="reset"
+   version="15.0"
+   start="clk_0.clk_reset"
+   end="reg_unb_sens.system_reset" />
+ <connection
+   kind="reset"
+   version="15.0"
+   start="clk_0.clk_reset"
+   end="rom_system_info.system_reset" />
+ <connection
+   kind="reset"
+   version="15.0"
+   start="clk_0.clk_reset"
+   end="pio_system_info.system_reset" />
+ <connection
+   kind="reset"
+   version="15.0"
+   start="clk_0.clk_reset"
+   end="pio_pps.system_reset" />
+ <connection
+   kind="reset"
+   version="15.0"
+   start="clk_0.clk_reset"
+   end="reg_wdi.system_reset" />
+ <connection
+   kind="reset"
+   version="15.0"
+   start="clk_0.clk_reset"
+   end="reg_remu.system_reset" />
+ <connection
+   kind="reset"
+   version="15.0"
+   start="clk_0.clk_reset"
+   end="reg_epcs.system_reset" />
+ <connection
+   kind="reset"
+   version="15.0"
+   start="clk_0.clk_reset"
+   end="reg_dpmm_ctrl.system_reset" />
+ <connection
+   kind="reset"
+   version="15.0"
+   start="clk_0.clk_reset"
+   end="reg_mmdp_data.system_reset" />
+ <connection
+   kind="reset"
+   version="15.0"
+   start="clk_0.clk_reset"
+   end="reg_mmdp_ctrl.system_reset" />
+ <connection
+   kind="reset"
+   version="15.0"
+   start="clk_0.clk_reset"
+   end="reg_dpmm_data.system_reset" />
+ <connection
+   kind="reset"
+   version="15.0"
+   start="clk_0.clk_reset"
+   end="reg_fpga_temp_sens.system_reset" />
+ <connection
+   kind="reset"
+   version="15.0"
+   start="clk_0.clk_reset"
+   end="reg_unb_pmbus.system_reset" />
+ <connection
+   kind="reset"
+   version="15.0"
+   start="cpu_0.debug_reset_request"
+   end="avs_eth_0.mm_reset" />
+ <connection
+   kind="reset"
+   version="15.0"
+   start="cpu_0.debug_reset_request"
+   end="jtag_uart_0.reset" />
+ <connection
+   kind="reset"
+   version="15.0"
+   start="cpu_0.debug_reset_request"
+   end="pio_wdi.reset" />
+ <connection
+   kind="reset"
+   version="15.0"
+   start="cpu_0.debug_reset_request"
+   end="timer_0.reset" />
+ <connection
+   kind="reset"
+   version="15.0"
+   start="cpu_0.debug_reset_request"
+   end="cpu_0.reset" />
+ <connection
+   kind="reset"
+   version="15.0"
+   start="cpu_0.debug_reset_request"
+   end="onchip_memory2_0.reset1" />
+ <connection
+   kind="reset"
+   version="15.0"
+   start="cpu_0.debug_reset_request"
+   end="reg_unb_sens.system_reset" />
+ <connection
+   kind="reset"
+   version="15.0"
+   start="cpu_0.debug_reset_request"
+   end="rom_system_info.system_reset" />
+ <connection
+   kind="reset"
+   version="15.0"
+   start="cpu_0.debug_reset_request"
+   end="pio_system_info.system_reset" />
+ <connection
+   kind="reset"
+   version="15.0"
+   start="cpu_0.debug_reset_request"
+   end="pio_pps.system_reset" />
+ <connection
+   kind="reset"
+   version="15.0"
+   start="cpu_0.debug_reset_request"
+   end="reg_wdi.system_reset" />
+ <connection
+   kind="reset"
+   version="15.0"
+   start="cpu_0.debug_reset_request"
+   end="reg_remu.system_reset" />
+ <connection
+   kind="reset"
+   version="15.0"
+   start="cpu_0.debug_reset_request"
+   end="reg_epcs.system_reset" />
+ <connection
+   kind="reset"
+   version="15.0"
+   start="cpu_0.debug_reset_request"
+   end="reg_dpmm_ctrl.system_reset" />
+ <connection
+   kind="reset"
+   version="15.0"
+   start="cpu_0.debug_reset_request"
+   end="reg_mmdp_data.system_reset" />
+ <connection
+   kind="reset"
+   version="15.0"
+   start="cpu_0.debug_reset_request"
+   end="reg_dpmm_data.system_reset" />
+ <connection
+   kind="reset"
+   version="15.0"
+   start="cpu_0.debug_reset_request"
+   end="reg_mmdp_ctrl.system_reset" />
+ <connection
+   kind="reset"
+   version="15.0"
+   start="cpu_0.debug_reset_request"
+   end="reg_fpga_temp_sens.system_reset" />
+ <connection
+   kind="reset"
+   version="15.0"
+   start="cpu_0.debug_reset_request"
+   end="reg_unb_pmbus.system_reset" />
+ <connection
+   kind="reset"
+   version="15.0"
+   start="cpu_0.debug_reset_request"
+   end="reg_fpga_voltage_sens.system_reset" />
+ <interconnectRequirement for="$system" name="qsys_mm.clockCrossingAdapter" value="HANDSHAKE" />
+ <interconnectRequirement for="$system" name="qsys_mm.insertDefaultSlave" value="FALSE" />
+ <interconnectRequirement for="$system" name="qsys_mm.maxAdditionalLatency" value="1" />
+</system>
diff --git a/boards/uniboard2a/designs/unb2a_minimal/quartus/unb2a_minimal_pins.tcl b/boards/uniboard2a/designs/unb2a_minimal/quartus/unb2a_minimal_pins.tcl
new file mode 100644
index 0000000000000000000000000000000000000000..9437c56ae86a4a803878c98e96a95090aab15246
--- /dev/null
+++ b/boards/uniboard2a/designs/unb2a_minimal/quartus/unb2a_minimal_pins.tcl
@@ -0,0 +1,22 @@
+###############################################################################
+#
+# 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(RADIOHDL)/boards/uniboard2a/libraries/unb2a_board/quartus/pinning/unb2a_minimal_pins.tcl
diff --git a/boards/uniboard2a/designs/unb2a_minimal/src/vhdl/mmm_unb2a_minimal.vhd b/boards/uniboard2a/designs/unb2a_minimal/src/vhdl/mmm_unb2a_minimal.vhd
new file mode 100644
index 0000000000000000000000000000000000000000..2369223fb833489a6934a063855bdc34e8739306
--- /dev/null
+++ b/boards/uniboard2a/designs/unb2a_minimal/src/vhdl/mmm_unb2a_minimal.vhd
@@ -0,0 +1,320 @@
+-------------------------------------------------------------------------------
+--
+-- Copyright (C) 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/>.
+--
+-------------------------------------------------------------------------------
+
+LIBRARY IEEE, common_lib, unb2_board_lib, mm_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 unb2_board_lib.unb2_board_pkg.ALL;
+USE unb2_board_lib.unb2_board_peripherals_pkg.ALL;
+USE mm_lib.mm_file_pkg.ALL;
+USE mm_lib.mm_file_unb_pkg.ALL;
+USE work.qsys_unb2_minimal_pkg.ALL;
+
+
+ENTITY mmm_unb2_minimal IS
+  GENERIC (
+    g_sim         : BOOLEAN := FALSE; --FALSE: use QSYS; TRUE: use mm_file I/O
+    g_sim_unb_nr  : NATURAL := 0;
+    g_sim_node_nr : NATURAL := 0
+  );
+  PORT (
+    mm_rst                   : IN  STD_LOGIC;
+    mm_clk                   : IN  STD_LOGIC;
+
+    pout_wdi                 : OUT STD_LOGIC;
+                             
+    -- Manual WDI override
+    reg_wdi_mosi             : OUT t_mem_mosi;
+    reg_wdi_miso             : IN  t_mem_miso;
+                             
+    -- system_info
+    reg_unb_system_info_mosi : OUT t_mem_mosi;
+    reg_unb_system_info_miso : IN  t_mem_miso;
+    rom_unb_system_info_mosi : OUT t_mem_mosi;
+    rom_unb_system_info_miso : IN  t_mem_miso;
+                             
+    -- UniBoard I2C sensors
+    reg_unb_sens_mosi        : OUT t_mem_mosi; 
+    reg_unb_sens_miso        : IN  t_mem_miso; 
+                             
+    reg_fpga_temp_sens_mosi   : OUT t_mem_mosi;
+    reg_fpga_temp_sens_miso   : IN  t_mem_miso;
+    reg_fpga_voltage_sens_mosi: OUT t_mem_mosi;
+    reg_fpga_voltage_sens_miso: IN  t_mem_miso;
+
+    reg_unb_pmbus_mosi       : OUT t_mem_mosi;
+    reg_unb_pmbus_miso       : IN  t_mem_miso;
+
+    -- PPSH
+    reg_ppsh_mosi            : OUT t_mem_mosi; 
+    reg_ppsh_miso            : IN  t_mem_miso; 
+                             
+    -- eth1g
+    eth1g_mm_rst             : OUT STD_LOGIC;
+    eth1g_tse_mosi           : OUT t_mem_mosi;  
+    eth1g_tse_miso           : IN  t_mem_miso;  
+    eth1g_reg_mosi           : OUT t_mem_mosi;  
+    eth1g_reg_miso           : IN  t_mem_miso;  
+    eth1g_reg_interrupt      : IN  STD_LOGIC; 
+    eth1g_ram_mosi           : OUT t_mem_mosi;  
+    eth1g_ram_miso           : IN  t_mem_miso;
+
+    -- EPCS read
+    reg_dpmm_data_mosi       : OUT t_mem_mosi;
+    reg_dpmm_data_miso       : IN  t_mem_miso;
+    reg_dpmm_ctrl_mosi       : OUT t_mem_mosi;
+    reg_dpmm_ctrl_miso       : IN  t_mem_miso;
+
+    -- EPCS write
+    reg_mmdp_data_mosi       : OUT t_mem_mosi;
+    reg_mmdp_data_miso       : IN  t_mem_miso;
+    reg_mmdp_ctrl_mosi       : OUT t_mem_mosi;
+    reg_mmdp_ctrl_miso       : IN  t_mem_miso;
+
+    -- EPCS status/control
+    reg_epcs_mosi            : OUT t_mem_mosi;
+    reg_epcs_miso            : IN  t_mem_miso;
+
+    -- Remote Update
+    reg_remu_mosi            : OUT t_mem_mosi;
+    reg_remu_miso            : IN  t_mem_miso
+  );
+END mmm_unb2_minimal;
+
+ARCHITECTURE str OF mmm_unb2_minimal IS
+
+  CONSTANT c_sim_node_nr   : NATURAL := g_sim_node_nr;
+  CONSTANT c_sim_node_type : STRING(1 TO 2):= "FN";
+
+  SIGNAL i_reset_n         : STD_LOGIC;
+
+  ----------------------------------------------------------------------------
+  -- mm_file component
+  ----------------------------------------------------------------------------
+  COMPONENT mm_file
+  GENERIC(
+    g_file_prefix       : STRING;
+    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;
+    mm_master_in  : IN  t_mem_miso 
+  );
+  END COMPONENT;
+
+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_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_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_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_unb_pmbus       : mm_file GENERIC MAP(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_UNB_PMBUS")
+                                               PORT MAP(mm_rst, mm_clk, reg_unb_pmbus_mosi, reg_unb_pmbus_miso );
+
+    u_mm_file_reg_fpga_temp_sens  : mm_file GENERIC MAP(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_FPGA_TEMP_SENS")
+                                               PORT MAP(mm_rst, mm_clk, reg_fpga_temp_sens_mosi, reg_fpga_temp_sens_miso );
+
+    u_mm_file_reg_fpga_voltage_sens :  mm_file GENERIC MAP(mmf_unb_file_prefix(g_sim_unb_nr, c_sim_node_nr, c_sim_node_type) & "REG_FPGA_VOLTAGE_SENS")
+                                               PORT MAP(mm_rst, mm_clk, reg_fpga_voltage_sens_mosi, reg_fpga_voltage_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 );
+
+    -- Note: the eth1g RAM and TSE buses are only required by unb_osy on the NIOS as they provide the ethernet<->MM gateway.
+    u_mm_file_reg_eth             : 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 );
+
+    ----------------------------------------------------------------------------
+    -- 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(mm_clk, c_mmf_unb_file_path & "sim.ctrl", c_mmf_unb_file_path & "sim.stat");
+
+  END GENERATE;
+
+  i_reset_n <= NOT mm_rst;
+
+  ----------------------------------------------------------------------------
+  -- QSYS for synthesis
+  ----------------------------------------------------------------------------
+  gen_qsys : IF g_sim = FALSE GENERATE
+    u_qsys : qsys_unb2_minimal
+    PORT MAP (
+
+      clk_clk                                   => mm_clk,
+      reset_reset_n                             => i_reset_n,
+
+      -- the_pio_wdi: toggled by NIOS II application unb_osy. Connects to WDI via ctrl_unb2_board.
+      pio_wdi_external_connection_export        => pout_wdi,
+
+      avs_eth_0_reset_export                    => eth1g_mm_rst,
+      avs_eth_0_clk_export                      => OPEN,
+      avs_eth_0_tse_address_export              => eth1g_tse_mosi.address(c_unb2_board_peripherals_mm_reg_default.reg_tse_adr_w-1 DOWNTO 0),
+      avs_eth_0_tse_write_export                => eth1g_tse_mosi.wr,
+      avs_eth_0_tse_read_export                 => eth1g_tse_mosi.rd,
+      avs_eth_0_tse_writedata_export            => eth1g_tse_mosi.wrdata(c_word_w-1 DOWNTO 0),
+      avs_eth_0_tse_readdata_export             => eth1g_tse_miso.rddata(c_word_w-1 DOWNTO 0),
+      avs_eth_0_tse_waitrequest_export          => eth1g_tse_miso.waitrequest,
+      avs_eth_0_reg_address_export              => eth1g_reg_mosi.address(c_unb2_board_peripherals_mm_reg_default.reg_eth_adr_w-1 DOWNTO 0),
+      avs_eth_0_reg_write_export                => eth1g_reg_mosi.wr,
+      avs_eth_0_reg_read_export                 => eth1g_reg_mosi.rd,
+      avs_eth_0_reg_writedata_export            => eth1g_reg_mosi.wrdata(c_word_w-1 DOWNTO 0),
+      avs_eth_0_reg_readdata_export             => eth1g_reg_miso.rddata(c_word_w-1 DOWNTO 0),
+      avs_eth_0_ram_address_export              => eth1g_ram_mosi.address(c_unb2_board_peripherals_mm_reg_default.ram_eth_adr_w-1 DOWNTO 0),
+      avs_eth_0_ram_write_export                => eth1g_ram_mosi.wr,
+      avs_eth_0_ram_read_export                 => eth1g_ram_mosi.rd,
+      avs_eth_0_ram_writedata_export            => eth1g_ram_mosi.wrdata(c_word_w-1 DOWNTO 0),
+      avs_eth_0_ram_readdata_export             => eth1g_ram_miso.rddata(c_word_w-1 DOWNTO 0),
+      avs_eth_0_irq_export                      => eth1g_reg_interrupt,
+
+      reg_unb_sens_reset_export                 => OPEN,
+      reg_unb_sens_clk_export                   => OPEN,
+      reg_unb_sens_address_export               => reg_unb_sens_mosi.address(c_unb2_board_peripherals_mm_reg_default.reg_unb_sens_adr_w-1 DOWNTO 0),
+      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_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_pmbus_reset_export                => OPEN,
+      reg_unb_pmbus_clk_export                  => OPEN,
+      reg_unb_pmbus_address_export              => reg_unb_pmbus_mosi.address(c_unb2_board_peripherals_mm_reg_default.reg_unb_pmbus_adr_w-1 DOWNTO 0),
+      reg_unb_pmbus_write_export                => reg_unb_pmbus_mosi.wr,
+      reg_unb_pmbus_writedata_export            => reg_unb_pmbus_mosi.wrdata(c_word_w-1 DOWNTO 0),
+      reg_unb_pmbus_read_export                 => reg_unb_pmbus_mosi.rd,
+      reg_unb_pmbus_readdata_export             => reg_unb_pmbus_miso.rddata(c_word_w-1 DOWNTO 0),
+
+      reg_fpga_temp_sens_reset_export           => OPEN,
+      reg_fpga_temp_sens_clk_export             => OPEN,
+      reg_fpga_temp_sens_address_export         => reg_fpga_temp_sens_mosi.address(c_unb2_board_peripherals_mm_reg_default.reg_fpga_temp_sens_adr_w-1 DOWNTO 0),
+      reg_fpga_temp_sens_write_export           => reg_fpga_temp_sens_mosi.wr,
+      reg_fpga_temp_sens_writedata_export       => reg_fpga_temp_sens_mosi.wrdata(c_word_w-1 DOWNTO 0),
+      reg_fpga_temp_sens_read_export            => reg_fpga_temp_sens_mosi.rd,
+      reg_fpga_temp_sens_readdata_export        => reg_fpga_temp_sens_miso.rddata(c_word_w-1 DOWNTO 0),
+
+      reg_fpga_voltage_sens_reset_export        => OPEN,
+      reg_fpga_voltage_sens_clk_export          => OPEN,
+      reg_fpga_voltage_sens_address_export      => reg_fpga_voltage_sens_mosi.address(c_unb2_board_peripherals_mm_reg_default.reg_fpga_voltage_sens_adr_w-1 DOWNTO 0),
+      reg_fpga_voltage_sens_write_export        => reg_fpga_voltage_sens_mosi.wr,
+      reg_fpga_voltage_sens_writedata_export    => reg_fpga_voltage_sens_mosi.wrdata(c_word_w-1 DOWNTO 0),
+      reg_fpga_voltage_sens_read_export         => reg_fpga_voltage_sens_mosi.rd,
+      reg_fpga_voltage_sens_readdata_export     => reg_fpga_voltage_sens_miso.rddata(c_word_w-1 DOWNTO 0),
+
+      rom_system_info_reset_export              => OPEN,
+      rom_system_info_clk_export                => OPEN,
+      rom_system_info_address_export            => rom_unb_system_info_mosi.address(c_unb2_board_peripherals_mm_reg_default.rom_unb_system_info_adr_w-1 DOWNTO 0), 
+      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),
+      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),
+
+      pio_system_info_reset_export              => OPEN,
+      pio_system_info_clk_export                => OPEN,
+      pio_system_info_address_export            => reg_unb_system_info_mosi.address(c_unb2_board_peripherals_mm_reg_default.reg_unb_system_info_adr_w-1 DOWNTO 0), 
+      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),
+      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_pps_reset_export                      => OPEN,
+      pio_pps_clk_export                        => OPEN,
+      pio_pps_address_export                    => reg_ppsh_mosi.address(c_unb2_board_peripherals_mm_reg_default.reg_ppsh_adr_w-1 DOWNTO 0),
+      pio_pps_write_export                      => reg_ppsh_mosi.wr,
+      pio_pps_writedata_export                  => reg_ppsh_mosi.wrdata(c_word_w-1 DOWNTO 0),
+      pio_pps_read_export                       => reg_ppsh_mosi.rd,
+      pio_pps_readdata_export                   => reg_ppsh_miso.rddata(c_word_w-1 DOWNTO 0),
+
+      reg_wdi_reset_export                      => OPEN,
+      reg_wdi_clk_export                        => OPEN,
+      reg_wdi_address_export                    => reg_wdi_mosi.address(0 DOWNTO 0),
+      reg_wdi_write_export                      => reg_wdi_mosi.wr,
+      reg_wdi_writedata_export                  => reg_wdi_mosi.wrdata(c_word_w-1 DOWNTO 0),
+      reg_wdi_read_export                       => reg_wdi_mosi.rd,
+      reg_wdi_readdata_export                   => reg_wdi_miso.rddata(c_word_w-1 DOWNTO 0),
+
+      reg_remu_reset_export                     => OPEN,
+      reg_remu_clk_export                       => OPEN,
+      reg_remu_address_export                   => reg_remu_mosi.address(c_unb2_board_peripherals_mm_reg_default.reg_remu_adr_w-1 DOWNTO 0),
+      reg_remu_write_export                     => reg_remu_mosi.wr,
+      reg_remu_writedata_export                 => reg_remu_mosi.wrdata(c_word_w-1 DOWNTO 0),
+      reg_remu_read_export                      => reg_remu_mosi.rd,
+      reg_remu_readdata_export                  => reg_remu_miso.rddata(c_word_w-1 DOWNTO 0),
+
+      reg_epcs_reset_export                     => OPEN,
+      reg_epcs_clk_export                       => OPEN,
+      reg_epcs_address_export                   => reg_epcs_mosi.address(c_unb2_board_peripherals_mm_reg_default.reg_epcs_adr_w-1 DOWNTO 0),
+      reg_epcs_write_export                     => reg_epcs_mosi.wr,
+      reg_epcs_writedata_export                 => reg_epcs_mosi.wrdata(c_word_w-1 DOWNTO 0),
+      reg_epcs_read_export                      => reg_epcs_mosi.rd,
+      reg_epcs_readdata_export                  => reg_epcs_miso.rddata(c_word_w-1 DOWNTO 0),
+
+      reg_dpmm_ctrl_reset_export                => OPEN,
+      reg_dpmm_ctrl_clk_export                  => OPEN,
+      reg_dpmm_ctrl_address_export              => reg_dpmm_ctrl_mosi.address(0 DOWNTO 0),
+      reg_dpmm_ctrl_write_export                => reg_dpmm_ctrl_mosi.wr,
+      reg_dpmm_ctrl_writedata_export            => reg_dpmm_ctrl_mosi.wrdata(c_word_w-1 DOWNTO 0),
+      reg_dpmm_ctrl_read_export                 => reg_dpmm_ctrl_mosi.rd,
+      reg_dpmm_ctrl_readdata_export             => reg_dpmm_ctrl_miso.rddata(c_word_w-1 DOWNTO 0),
+
+      reg_mmdp_data_reset_export                => OPEN,
+      reg_mmdp_data_clk_export                  => OPEN,
+      reg_mmdp_data_address_export              => reg_mmdp_data_mosi.address(0 DOWNTO 0),
+      reg_mmdp_data_write_export                => reg_mmdp_data_mosi.wr,
+      reg_mmdp_data_writedata_export            => reg_mmdp_data_mosi.wrdata(c_word_w-1 DOWNTO 0),
+      reg_mmdp_data_read_export                 => reg_mmdp_data_mosi.rd,
+      reg_mmdp_data_readdata_export             => reg_mmdp_data_miso.rddata(c_word_w-1 DOWNTO 0),
+
+      reg_dpmm_data_reset_export                => OPEN,
+      reg_dpmm_data_clk_export                  => OPEN,
+      reg_dpmm_data_address_export              => reg_dpmm_data_mosi.address(0 DOWNTO 0),
+      reg_dpmm_data_read_export                 => reg_dpmm_data_mosi.rd,
+      reg_dpmm_data_readdata_export             => reg_dpmm_data_miso.rddata(c_word_w-1 DOWNTO 0),
+      reg_dpmm_data_write_export                => reg_dpmm_data_mosi.wr,
+      reg_dpmm_data_writedata_export            => reg_dpmm_data_mosi.wrdata(c_word_w-1 DOWNTO 0),
+
+      reg_mmdp_ctrl_reset_export                => OPEN,
+      reg_mmdp_ctrl_clk_export                  => OPEN,
+      reg_mmdp_ctrl_address_export              => reg_mmdp_ctrl_mosi.address(0 DOWNTO 0),
+      reg_mmdp_ctrl_read_export                 => reg_mmdp_ctrl_mosi.rd,
+      reg_mmdp_ctrl_readdata_export             => reg_mmdp_ctrl_miso.rddata(c_word_w-1 DOWNTO 0),
+      reg_mmdp_ctrl_write_export                => reg_mmdp_ctrl_mosi.wr,
+      reg_mmdp_ctrl_writedata_export            => reg_mmdp_ctrl_mosi.wrdata(c_word_w-1 DOWNTO 0)
+      );
+  END GENERATE;
+
+END str;
diff --git a/boards/uniboard2a/designs/unb2a_minimal/src/vhdl/qsys_unb2a_minimal_pkg.vhd b/boards/uniboard2a/designs/unb2a_minimal/src/vhdl/qsys_unb2a_minimal_pkg.vhd
new file mode 100644
index 0000000000000000000000000000000000000000..0c1cd8ba6d162512032ed19af47170c117615983
--- /dev/null
+++ b/boards/uniboard2a/designs/unb2a_minimal/src/vhdl/qsys_unb2a_minimal_pkg.vhd
@@ -0,0 +1,156 @@
+-------------------------------------------------------------------------------
+--
+-- Copyright (C) 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/>.
+--
+-------------------------------------------------------------------------------
+
+LIBRARY IEEE;
+USE IEEE.STD_LOGIC_1164.ALL;
+
+PACKAGE qsys_unb2_minimal_pkg IS
+
+    -----------------------------------------------------------------------------
+    -- this component declaration is copy-pasted from Quartus v14 QSYS builder
+    -----------------------------------------------------------------------------
+
+    component qsys_unb2_minimal is
+        port (
+            avs_eth_0_clk_export               : out std_logic;                                        -- export
+            avs_eth_0_irq_export               : in  std_logic                     := 'X';             -- export
+            avs_eth_0_ram_address_export       : out std_logic_vector(9 downto 0);                     -- export
+            avs_eth_0_ram_read_export          : out std_logic;                                        -- export
+            avs_eth_0_ram_readdata_export      : in  std_logic_vector(31 downto 0) := (others => 'X'); -- export
+            avs_eth_0_ram_write_export         : out std_logic;                                        -- export
+            avs_eth_0_ram_writedata_export     : out std_logic_vector(31 downto 0);                    -- export
+            avs_eth_0_reg_address_export       : out std_logic_vector(3 downto 0);                     -- export
+            avs_eth_0_reg_read_export          : out std_logic;                                        -- export
+            avs_eth_0_reg_readdata_export      : in  std_logic_vector(31 downto 0) := (others => 'X'); -- export
+            avs_eth_0_reg_write_export         : out std_logic;                                        -- export
+            avs_eth_0_reg_writedata_export     : out std_logic_vector(31 downto 0);                    -- export
+            avs_eth_0_reset_export             : out std_logic;                                        -- export
+            avs_eth_0_tse_address_export       : out std_logic_vector(9 downto 0);                     -- export
+            avs_eth_0_tse_read_export          : out std_logic;                                        -- export
+            avs_eth_0_tse_readdata_export      : in  std_logic_vector(31 downto 0) := (others => 'X'); -- export
+            avs_eth_0_tse_waitrequest_export   : in  std_logic                     := 'X';             -- export
+            avs_eth_0_tse_write_export         : out std_logic;                                        -- export
+            avs_eth_0_tse_writedata_export     : out std_logic_vector(31 downto 0);                    -- export
+            clk_clk                            : in  std_logic                     := 'X';             -- clk
+            pio_pps_address_export             : out std_logic_vector(0 downto 0);                     -- export
+            pio_pps_clk_export                 : out std_logic;                                        -- export
+            pio_pps_read_export                : out std_logic;                                        -- export
+            pio_pps_readdata_export            : in  std_logic_vector(31 downto 0) := (others => 'X'); -- export
+            pio_pps_reset_export               : out std_logic;                                        -- export
+            pio_pps_write_export               : out std_logic;                                        -- export
+            pio_pps_writedata_export           : out std_logic_vector(31 downto 0);                    -- export
+            pio_system_info_address_export     : out std_logic_vector(4 downto 0);                     -- export
+            pio_system_info_clk_export         : out std_logic;                                        -- export
+            pio_system_info_read_export        : out std_logic;                                        -- export
+            pio_system_info_readdata_export    : in  std_logic_vector(31 downto 0) := (others => 'X'); -- export
+            pio_system_info_reset_export       : out std_logic;                                        -- export
+            pio_system_info_write_export       : out std_logic;                                        -- export
+            pio_system_info_writedata_export   : out std_logic_vector(31 downto 0);                    -- export
+            pio_wdi_external_connection_export : out std_logic;                                        -- export
+            reg_dpmm_ctrl_address_export       : out std_logic_vector(0 downto 0);                     -- export
+            reg_dpmm_ctrl_clk_export           : out std_logic;                                        -- export
+            reg_dpmm_ctrl_read_export          : out std_logic;                                        -- export
+            reg_dpmm_ctrl_readdata_export      : in  std_logic_vector(31 downto 0) := (others => 'X'); -- export
+            reg_dpmm_ctrl_reset_export         : out std_logic;                                        -- export
+            reg_dpmm_ctrl_write_export         : out std_logic;                                        -- export
+            reg_dpmm_ctrl_writedata_export     : out std_logic_vector(31 downto 0);                    -- export
+            reg_dpmm_data_address_export       : out std_logic_vector(0 downto 0);                     -- export
+            reg_dpmm_data_clk_export           : out std_logic;                                        -- export
+            reg_dpmm_data_read_export          : out std_logic;                                        -- export
+            reg_dpmm_data_readdata_export      : in  std_logic_vector(31 downto 0) := (others => 'X'); -- export
+            reg_dpmm_data_reset_export         : out std_logic;                                        -- export
+            reg_dpmm_data_write_export         : out std_logic;                                        -- export
+            reg_dpmm_data_writedata_export     : out std_logic_vector(31 downto 0);                    -- export
+            reg_epcs_address_export            : out std_logic_vector(2 downto 0);                     -- export
+            reg_epcs_clk_export                : out std_logic;                                        -- export
+            reg_epcs_read_export               : out std_logic;                                        -- export
+            reg_epcs_readdata_export           : in  std_logic_vector(31 downto 0) := (others => 'X'); -- export
+            reg_epcs_reset_export              : out std_logic;                                        -- export
+            reg_epcs_write_export              : out std_logic;                                        -- export
+            reg_epcs_writedata_export          : out std_logic_vector(31 downto 0);                    -- export
+            reg_mmdp_ctrl_address_export       : out std_logic_vector(0 downto 0);                     -- export
+            reg_mmdp_ctrl_clk_export           : out std_logic;                                        -- export
+            reg_mmdp_ctrl_read_export          : out std_logic;                                        -- export
+            reg_mmdp_ctrl_readdata_export      : in  std_logic_vector(31 downto 0) := (others => 'X'); -- export
+            reg_mmdp_ctrl_reset_export         : out std_logic;                                        -- export
+            reg_mmdp_ctrl_write_export         : out std_logic;                                        -- export
+            reg_mmdp_ctrl_writedata_export     : out std_logic_vector(31 downto 0);                    -- export
+            reg_mmdp_data_address_export       : out std_logic_vector(0 downto 0);                     -- export
+            reg_mmdp_data_clk_export           : out std_logic;                                        -- export
+            reg_mmdp_data_read_export          : out std_logic;                                        -- export
+            reg_mmdp_data_readdata_export      : in  std_logic_vector(31 downto 0) := (others => 'X'); -- export
+            reg_mmdp_data_reset_export         : out std_logic;                                        -- export
+            reg_mmdp_data_write_export         : out std_logic;                                        -- export
+            reg_mmdp_data_writedata_export     : out std_logic_vector(31 downto 0);                    -- export
+            reg_remu_address_export            : out std_logic_vector(2 downto 0);                     -- export
+            reg_remu_clk_export                : out std_logic;                                        -- export
+            reg_remu_read_export               : out std_logic;                                        -- export
+            reg_remu_readdata_export           : in  std_logic_vector(31 downto 0) := (others => 'X'); -- export
+            reg_remu_reset_export              : out std_logic;                                        -- export
+            reg_remu_write_export              : out std_logic;                                        -- export
+            reg_remu_writedata_export          : out std_logic_vector(31 downto 0);                    -- export
+            reg_unb_sens_address_export        : out std_logic_vector(2 downto 0);                     -- export
+            reg_unb_sens_clk_export            : out std_logic;                                        -- export
+            reg_unb_sens_read_export           : out std_logic;                                        -- export
+            reg_unb_sens_readdata_export       : in  std_logic_vector(31 downto 0) := (others => 'X'); -- export
+            reg_unb_sens_reset_export          : out std_logic;                                        -- export
+            reg_unb_sens_write_export          : out std_logic;                                        -- export
+            reg_unb_sens_writedata_export      : out std_logic_vector(31 downto 0);                    -- export
+            reg_wdi_address_export             : out std_logic_vector(0 downto 0);                     -- export
+            reg_wdi_clk_export                 : out std_logic;                                        -- export
+            reg_wdi_read_export                : out std_logic;                                        -- export
+            reg_wdi_readdata_export            : in  std_logic_vector(31 downto 0) := (others => 'X'); -- export
+            reg_wdi_reset_export               : out std_logic;                                        -- export
+            reg_wdi_write_export               : out std_logic;                                        -- export
+            reg_wdi_writedata_export           : out std_logic_vector(31 downto 0);                    -- export
+            reset_reset_n                      : in  std_logic                     := 'X';             -- reset_n
+            rom_system_info_address_export     : out std_logic_vector(9 downto 0);                     -- export
+            rom_system_info_clk_export         : out std_logic;                                        -- export
+            rom_system_info_read_export        : out std_logic;                                        -- export
+            rom_system_info_readdata_export    : in  std_logic_vector(31 downto 0) := (others => 'X'); -- export
+            rom_system_info_reset_export       : out std_logic;                                        -- export
+            rom_system_info_write_export       : out std_logic;                                        -- export
+            rom_system_info_writedata_export   : out std_logic_vector(31 downto 0);                    -- export
+            reg_fpga_temp_sens_readdata_export : in  std_logic_vector(31 downto 0) := (others => 'X'); -- export
+            reg_fpga_temp_sens_read_export     : out std_logic;                                        -- export
+            reg_fpga_temp_sens_writedata_export: out std_logic_vector(31 downto 0);                    -- export
+            reg_fpga_temp_sens_write_export    : out std_logic;                                        -- export
+            reg_fpga_temp_sens_address_export  : out std_logic_vector(2 downto 0);                     -- export
+            reg_fpga_temp_sens_clk_export      : out std_logic;                                        -- export
+            reg_fpga_temp_sens_reset_export    : out std_logic;                                        -- export
+            reg_fpga_voltage_sens_readdata_export  : in  std_logic_vector(31 downto 0) := (others => 'X'); -- export
+            reg_fpga_voltage_sens_read_export      : out std_logic;                                        -- export
+            reg_fpga_voltage_sens_writedata_export : out std_logic_vector(31 downto 0);                    -- export
+            reg_fpga_voltage_sens_write_export     : out std_logic;                                        -- export
+            reg_fpga_voltage_sens_address_export   : out std_logic_vector(3 downto 0);                     -- export
+            reg_fpga_voltage_sens_clk_export       : out std_logic;                                        -- export
+            reg_fpga_voltage_sens_reset_export     : out std_logic;                                        -- export
+            reg_unb_pmbus_readdata_export      : in  std_logic_vector(31 downto 0) := (others => 'X'); -- export
+            reg_unb_pmbus_read_export          : out std_logic;                                        -- export
+            reg_unb_pmbus_writedata_export     : out std_logic_vector(31 downto 0);                    -- export
+            reg_unb_pmbus_write_export         : out std_logic;                                        -- export
+            reg_unb_pmbus_address_export       : out std_logic_vector(2 downto 0);                     -- export
+            reg_unb_pmbus_clk_export           : out std_logic;                                        -- export
+            reg_unb_pmbus_reset_export         : out std_logic                                         -- export
+        );
+    end component qsys_unb2_minimal;
+
+END qsys_unb2_minimal_pkg;
diff --git a/boards/uniboard2a/designs/unb2a_minimal/src/vhdl/unb2a_minimal.vhd b/boards/uniboard2a/designs/unb2a_minimal/src/vhdl/unb2a_minimal.vhd
new file mode 100644
index 0000000000000000000000000000000000000000..ea4cf89b162146551fd48e0d1c8c80394acf4c5c
--- /dev/null
+++ b/boards/uniboard2a/designs/unb2a_minimal/src/vhdl/unb2a_minimal.vhd
@@ -0,0 +1,379 @@
+-------------------------------------------------------------------------------
+--
+-- Copyright (C) 2015
+-- ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/>
+-- JIVE (Joint Institute for VLBI in Europe) <http://www.jive.nl/>
+-- P.O.Box 2, 7990 AA Dwingeloo, The Netherlands
+--
+-- This program is free software: you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation, either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program.  If not, see <http://www.gnu.org/licenses/>.
+--
+-------------------------------------------------------------------------------
+
+LIBRARY IEEE, common_lib, unb2_board_lib, technology_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 technology_lib.technology_pkg.ALL;
+USE unb2_board_lib.unb2_board_pkg.ALL;
+
+ENTITY unb2_minimal IS
+  GENERIC (
+    g_design_name   : STRING  := "unb2_minimal";
+    g_design_note   : STRING  := "UNUSED";
+    g_technology    : NATURAL := c_tech_arria10;
+    g_sim           : BOOLEAN := FALSE; --Overridden by TB
+    g_sim_unb_nr    : NATURAL := 0;
+    g_sim_node_nr   : NATURAL := 0;
+    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
+    g_factory_image : BOOLEAN := TRUE
+  );
+  PORT (
+    -- GENERAL
+    CLK          : IN    STD_LOGIC; -- System Clock
+    PPS          : IN    STD_LOGIC; -- System Sync
+    WDI          : OUT   STD_LOGIC; -- Watchdog Clear
+    INTA         : INOUT STD_LOGIC; -- FPGA interconnect line
+    INTB         : INOUT STD_LOGIC; -- FPGA interconnect line
+
+    -- Others
+    VERSION      : IN    STD_LOGIC_VECTOR(c_unb2_board_aux.version_w-1 DOWNTO 0);
+    ID           : IN    STD_LOGIC_VECTOR(c_unb2_board_aux.id_w-1 DOWNTO 0);
+    TESTIO       : INOUT STD_LOGIC_VECTOR(c_unb2_board_aux.testio_w-1 DOWNTO 0);
+    
+    -- I2C Interface to Sensors
+    SENS_SC      : INOUT STD_LOGIC;
+    SENS_SD      : INOUT STD_LOGIC;
+
+    PMBUS_SC     : INOUT STD_LOGIC;
+    PMBUS_SD     : INOUT STD_LOGIC;
+    PMBUS_ALERT  : IN    STD_LOGIC := '0';
+  
+    -- 1GbE Control Interface
+    ETH_CLK      : IN    STD_LOGIC;
+    ETH_SGIN     : IN    STD_LOGIC_VECTOR(c_unb2_board_nof_eth-1 DOWNTO 0);
+    ETH_SGOUT    : OUT   STD_LOGIC_VECTOR(c_unb2_board_nof_eth-1 DOWNTO 0);
+
+    QSFP_LED     : OUT   STD_LOGIC_VECTOR(c_unb2_board_tr_qsfp_nof_leds-1 DOWNTO 0)
+  );
+END unb2_minimal;
+
+
+ARCHITECTURE str OF unb2_minimal IS
+
+  -- Firmware version x.y
+  CONSTANT c_fw_version             : t_unb2_board_fw_version := (1, 1);
+  CONSTANT c_mm_clk_freq            : NATURAL := c_unb2_board_mm_clk_freq_50M;
+
+  -- System
+  SIGNAL cs_sim                     : STD_LOGIC;
+  SIGNAL xo_ethclk                  : STD_LOGIC;
+  SIGNAL xo_rst                     : STD_LOGIC;
+  SIGNAL xo_rst_n                   : STD_LOGIC;
+  SIGNAL mm_clk                     : STD_LOGIC;
+  SIGNAL mm_rst                     : STD_LOGIC;
+  
+  SIGNAL st_rst                     : STD_LOGIC;
+  SIGNAL st_clk                     : STD_LOGIC;
+
+  -- PIOs
+  SIGNAL pout_wdi                   : STD_LOGIC;
+
+  -- WDI override
+  SIGNAL reg_wdi_mosi               : t_mem_mosi;
+  SIGNAL reg_wdi_miso               : t_mem_miso;
+
+  -- PPSH
+  SIGNAL reg_ppsh_mosi              : t_mem_mosi;
+  SIGNAL reg_ppsh_miso              : t_mem_miso;
+  
+  -- UniBoard system info
+  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;
+
+  -- UniBoard I2C sens
+  SIGNAL reg_unb_sens_mosi          : t_mem_mosi;
+  SIGNAL reg_unb_sens_miso          : t_mem_miso;
+
+  -- pm bus
+  SIGNAL reg_unb_pmbus_mosi         : t_mem_mosi;
+  SIGNAL reg_unb_pmbus_miso         : t_mem_miso;
+
+  -- FPGA sensors
+  SIGNAL reg_fpga_temp_sens_mosi     : t_mem_mosi;
+  SIGNAL reg_fpga_temp_sens_miso     : t_mem_miso;
+  SIGNAL reg_fpga_voltage_sens_mosi  : t_mem_mosi;
+  SIGNAL reg_fpga_voltage_sens_miso  : t_mem_miso;
+
+  -- eth1g
+  SIGNAL eth1g_mm_rst               : STD_LOGIC;
+  SIGNAL eth1g_tse_mosi             : t_mem_mosi;  -- ETH TSE MAC registers
+  SIGNAL eth1g_tse_miso             : t_mem_miso;
+  SIGNAL eth1g_reg_mosi             : t_mem_mosi;  -- ETH control and status registers
+  SIGNAL eth1g_reg_miso             : t_mem_miso;
+  SIGNAL eth1g_reg_interrupt        : STD_LOGIC;   -- Interrupt
+  SIGNAL eth1g_ram_mosi             : t_mem_mosi;  -- ETH rx frame and tx frame memory
+  SIGNAL eth1g_ram_miso             : t_mem_miso;
+
+  -- EPCS read
+  SIGNAL reg_dpmm_data_mosi         : t_mem_mosi;
+  SIGNAL reg_dpmm_data_miso         : t_mem_miso;
+  SIGNAL reg_dpmm_ctrl_mosi         : t_mem_mosi;
+  SIGNAL reg_dpmm_ctrl_miso         : t_mem_miso;
+
+  -- EPCS write
+  SIGNAL reg_mmdp_data_mosi         : t_mem_mosi;
+  SIGNAL reg_mmdp_data_miso         : t_mem_miso;
+  SIGNAL reg_mmdp_ctrl_mosi         : t_mem_mosi;
+  SIGNAL reg_mmdp_ctrl_miso         : t_mem_miso;
+
+  -- EPCS status/control
+  SIGNAL reg_epcs_mosi              : t_mem_mosi;
+  SIGNAL reg_epcs_miso              : t_mem_miso;
+
+  -- Remote Update
+  SIGNAL reg_remu_mosi              : t_mem_mosi;
+  SIGNAL reg_remu_miso              : t_mem_miso;
+
+  -- QSFP leds
+  SIGNAL qsfp_green_led_arr         : STD_LOGIC_VECTOR(c_unb2_board_tr_qsfp.nof_bus-1 DOWNTO 0);
+  SIGNAL qsfp_red_led_arr           : STD_LOGIC_VECTOR(c_unb2_board_tr_qsfp.nof_bus-1 DOWNTO 0);
+
+BEGIN
+
+  -----------------------------------------------------------------------------
+  -- General control function
+  -----------------------------------------------------------------------------
+  u_ctrl : ENTITY unb2_board_lib.ctrl_unb2_board
+  GENERIC MAP (
+    g_sim           => g_sim,
+    g_technology    => g_technology,
+    g_design_name   => g_design_name,
+    g_design_note   => g_design_note,
+    g_stamp_date    => g_stamp_date,
+    g_stamp_time    => g_stamp_time, 
+    g_stamp_svn     => g_stamp_svn, 
+    g_fw_version    => c_fw_version,
+    g_mm_clk_freq   => c_mm_clk_freq,
+    g_eth_clk_freq  => c_unb2_board_eth_clk_freq_125M,
+    g_aux           => c_unb2_board_aux,
+    g_tse_clk_buf   => TRUE,
+    g_factory_image => g_factory_image
+  )
+  PORT MAP (
+    -- Clock an reset signals
+    cs_sim                   => cs_sim,
+    xo_ethclk                => xo_ethclk,
+    xo_rst                   => xo_rst,
+    xo_rst_n                 => xo_rst_n,
+
+    mm_clk                   => mm_clk,
+    mm_rst                   => mm_rst,
+
+    dp_rst                   => st_rst,
+    dp_clk                   => st_clk,
+    dp_pps                   => OPEN,
+    dp_rst_in                => st_rst,
+    dp_clk_in                => st_clk,
+    
+    -- Toggle WDI
+    pout_wdi                 => pout_wdi,
+
+    -- MM buses
+    -- REMU
+    reg_remu_mosi            => reg_remu_mosi,
+    reg_remu_miso            => reg_remu_miso,
+
+    -- EPCS read
+    reg_dpmm_data_mosi       => reg_dpmm_data_mosi,
+    reg_dpmm_data_miso       => reg_dpmm_data_miso,
+    reg_dpmm_ctrl_mosi       => reg_dpmm_ctrl_mosi,
+    reg_dpmm_ctrl_miso       => reg_dpmm_ctrl_miso,
+
+    -- EPCS write
+    reg_mmdp_data_mosi       => reg_mmdp_data_mosi,
+    reg_mmdp_data_miso       => reg_mmdp_data_miso,
+    reg_mmdp_ctrl_mosi       => reg_mmdp_ctrl_mosi,
+    reg_mmdp_ctrl_miso       => reg_mmdp_ctrl_miso,
+
+    -- EPCS status/control
+    reg_epcs_mosi            => reg_epcs_mosi,
+    reg_epcs_miso            => reg_epcs_miso,
+
+    -- . Manual WDI override
+    reg_wdi_mosi             => reg_wdi_mosi,
+    reg_wdi_miso             => reg_wdi_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,    
+    
+    -- . FPGA sensors
+    reg_fpga_temp_sens_mosi  => reg_fpga_temp_sens_mosi,
+    reg_fpga_temp_sens_miso  => reg_fpga_temp_sens_miso,
+    reg_fpga_voltage_sens_mosi  => reg_fpga_voltage_sens_mosi,
+    reg_fpga_voltage_sens_miso  => reg_fpga_voltage_sens_miso,
+
+    reg_unb_pmbus_mosi       => reg_unb_pmbus_mosi,
+    reg_unb_pmbus_miso       => reg_unb_pmbus_miso,
+
+    -- . PPSH
+    reg_ppsh_mosi            => reg_ppsh_mosi,
+    reg_ppsh_miso            => reg_ppsh_miso,
+    
+    -- eth1g
+    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,
+        
+    -- 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,
+    -- PM bus
+    PMBUS_SC                 => PMBUS_SC,
+    PMBUS_SD                 => PMBUS_SD,
+    PMBUS_ALERT              => PMBUS_ALERT,
+
+    -- . 1GbE Control Interface
+    ETH_clk                  => ETH_CLK,
+    ETH_SGIN                 => ETH_SGIN,
+    ETH_SGOUT                => ETH_SGOUT
+  );
+
+  -----------------------------------------------------------------------------
+  -- MM master
+  -----------------------------------------------------------------------------
+  u_mmm : ENTITY work.mmm_unb2_minimal
+  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_rst                   => mm_rst,
+    mm_clk                   => mm_clk,       
+
+    -- PIOs
+    pout_wdi                 => pout_wdi,
+
+    -- Manual WDI override
+    reg_wdi_mosi             => reg_wdi_mosi,
+    reg_wdi_miso             => reg_wdi_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, 
+
+    reg_unb_pmbus_mosi       => reg_unb_pmbus_mosi,
+    reg_unb_pmbus_miso       => reg_unb_pmbus_miso,
+ 
+    -- FPGA sensors
+    reg_fpga_temp_sens_mosi  => reg_fpga_temp_sens_mosi,
+    reg_fpga_temp_sens_miso  => reg_fpga_temp_sens_miso,
+    reg_fpga_voltage_sens_mosi  => reg_fpga_voltage_sens_mosi,
+    reg_fpga_voltage_sens_miso  => reg_fpga_voltage_sens_miso,
+
+    -- PPSH
+    reg_ppsh_mosi            => reg_ppsh_mosi,
+    reg_ppsh_miso            => reg_ppsh_miso, 
+  
+    -- eth1g
+    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,
+
+    -- EPCS read
+    reg_dpmm_data_mosi       => reg_dpmm_data_mosi,
+    reg_dpmm_data_miso       => reg_dpmm_data_miso,
+    reg_dpmm_ctrl_mosi       => reg_dpmm_ctrl_mosi,
+    reg_dpmm_ctrl_miso       => reg_dpmm_ctrl_miso,
+
+    -- EPCS write
+    reg_mmdp_data_mosi       => reg_mmdp_data_mosi,
+    reg_mmdp_data_miso       => reg_mmdp_data_miso,
+    reg_mmdp_ctrl_mosi       => reg_mmdp_ctrl_mosi,
+    reg_mmdp_ctrl_miso       => reg_mmdp_ctrl_miso,
+
+    -- EPCS status/control
+    reg_epcs_mosi            => reg_epcs_mosi,
+    reg_epcs_miso            => reg_epcs_miso,
+
+    -- Remote Update
+    reg_remu_mosi            => reg_remu_mosi,
+    reg_remu_miso            => reg_remu_miso
+  );
+
+  u_front_led : ENTITY unb2_board_lib.unb2_board_qsfp_leds
+  GENERIC MAP (
+    g_sim           => g_sim,
+    g_factory_image => g_factory_image,
+    g_nof_qsfp      => c_unb2_board_tr_qsfp.nof_bus,
+    g_pulse_us      => 1000 / (10**9 / c_mm_clk_freq) -- nof clk cycles to get us period
+  )
+  PORT MAP (
+    rst             => mm_rst,
+    clk             => mm_clk,
+    green_led_arr   => qsfp_green_led_arr,
+    red_led_arr     => qsfp_red_led_arr
+  );
+
+  u_front_io : ENTITY unb2_board_lib.unb2_board_front_io
+  GENERIC MAP (
+    g_nof_qsfp_bus => c_unb2_board_tr_qsfp.nof_bus
+  )
+  PORT MAP (
+    green_led_arr => qsfp_green_led_arr,
+    red_led_arr   => qsfp_red_led_arr,
+    QSFP_LED      => QSFP_LED
+  );
+
+END str;
+
diff --git a/boards/uniboard2a/designs/unb2a_minimal/tb/python/tc_unb2_minimal.py b/boards/uniboard2a/designs/unb2a_minimal/tb/python/tc_unb2_minimal.py
new file mode 100644
index 0000000000000000000000000000000000000000..2f28d76d12e9c5d336ad80348d0edefd520265d8
--- /dev/null
+++ b/boards/uniboard2a/designs/unb2a_minimal/tb/python/tc_unb2_minimal.py
@@ -0,0 +1,363 @@
+#! /usr/bin/env python
+###############################################################################
+#
+# 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/>.
+#
+###############################################################################
+
+"""Test case for unb1_minimal
+
+Usage:
+
+   --rep = number of intervals that diagnostics results are verified
+   --sim targets a running simulation.
+
+Description:
+   This test case tests:
+   - system info
+   - read sensors
+   - read ppsh
+   - write to wdi to force reload from bank 0
+   - flash access: write image to bank 1
+   - remote update: start image in bank 1
+
+"""
+
+###############################################################################
+# System imports
+import sys
+import signal
+import test_case
+import node_io
+import pi_system_info
+import pi_unb_sens
+import pi_unb_fpga_sens
+import pi_unb_fpga_voltage_sens
+import pi_ppsh
+import pi_wdi
+import pi_epcs
+import pi_remu
+import pi_eth
+import pi_debug_wave
+
+from tools import *
+from common import *
+from pi_common import *
+
+
+def test_info(tc,io,cmd):
+    tc.set_section_id('Read System Info - ')
+    tc.append_log(3, '>>>')
+    tc.append_log(1, '>>> %s' % help_text(tc,io,cmd))
+    tc.append_log(3, '>>>')
+
+    info = pi_system_info.PiSystemInfo(tc, io)
+    info.read_system_info()
+    tc.append_log(3, '')
+    info.read_use_phy()
+    tc.append_log(3, '')
+    design_name = info.read_design_name()
+    tc.append_log(1, '>>> design_name=%s' % design_name)
+    tc.append_log(3, '')
+    info.read_stamps()
+    tc.append_log(3, '')
+    info.read_design_note()
+    
+    expected_design_name = tc.gpString
+    if expected_design_name != '':
+        tc.set_section_id('Verify System Info - ')
+        compared=True
+        for name in design_name:
+            if (name != expected_design_name): 
+                tc.set_result('FAILED')
+                compared=False
+                tc.append_log(2, '>>> design_name mismatch!! (%s != %s)' % (name,expected_design_name))
+        tc.append_log(1, '>>> Verify design_name == %s: %s' % (expected_design_name,compared))
+
+
+
+def read_regmap(tc,io,cmd):
+    tc.set_section_id('Update REGMAP - ')
+    info = pi_system_info.PiSystemInfo(tc, io)
+    tc.append_log(1, '>>> reading REGMAPs')
+    info.make_register_info()
+    tc.append_log(1, '>>> reload NodeIO class')
+    return node_io.NodeIO(tc.nodeImages, tc.base_ip)
+
+
+    
+def test_sensors(tc,io,cmd):
+    tc.set_section_id('Read sensors - ')
+    tc.append_log(3, '>>>')
+    tc.append_log(1, '>>> %s' % help_text(tc,io,cmd))
+    tc.append_log(3, '>>>')
+    
+    sens = pi_unb_sens.PiUnbSens(tc, io)
+
+    sens.read_unb_sensors()
+    tc.append_log(3, '')
+    #sens.read_fpga_temperature()
+    tc.append_log(3, '')
+    sens.read_eth_temperature()
+    tc.append_log(3, '')
+    sens.read_unb_current()
+    sens.read_unb_voltage()
+    sens.read_unb_power()
+
+    # Read internal FPGA temp sensor:
+    tc.set_section_id('Read internal fpga sensors - ')
+    sens = pi_unb_fpga_sens.PiUnbFpgaSens(tc, io)
+    sens.read_fpga_temperature()
+    sens = pi_unb_fpga_voltage_sens.PiUnbFpgaVoltageSens(tc, io)
+    sens.read_fpga_voltage()
+
+
+def test_ppsh(tc,io,cmd):
+    tc.set_section_id('Read PPSH capture count - ')
+    tc.append_log(3, '>>>')
+    tc.append_log(1, '>>> %s' % help_text(tc,io,cmd))
+    tc.append_log(3, '>>>')
+    
+    Ppsh = pi_ppsh.PiPpsh(tc, io)
+    Ppsh.read_ppsh_capture_cnt()
+    tc.append_log(3, '')
+
+
+
+def test_wdi(tc,io,cmd):
+    tc.set_section_id('Reset to image in bank 0 using WDI - ')
+    tc.append_log(3, '>>>')
+    tc.append_log(1, '>>> %s' % help_text(tc,io,cmd))
+    tc.append_log(3, '>>>')
+
+    Wdi = pi_wdi.PiWdi(tc, io)
+    Wdi.write_wdi_override()
+    tc.append_log(3, '')
+    tc.append_log(3, '>>> Booting...')
+    tc.sleep(5.0)
+
+
+
+def test_remu(tc,io,cmd):
+    tc.set_section_id('REMU start image in bank 1 - ')
+    tc.append_log(3, '>>>')
+    tc.append_log(1, '>>> %s' % help_text(tc,io,cmd))
+    tc.append_log(3, '>>>')
+
+    dummy_tc = test_case.Testcase('Dummy TB - ', '',logfilename='REMU-log')
+    dummy_tc.set_result('PASSED')
+    
+    Remu = pi_remu.PiRemu(dummy_tc, io)
+    try:
+        Remu.write_user_reconfigure()
+    except:
+        pass # ignoring FAILED
+
+    if dummy_tc.get_result() == 'FAILED':
+        tc.append_log(1, 'Result=%s but ignoring this' % dummy_tc.get_result())
+
+    tc.append_log(3, '>>> Booting...')
+    tc.sleep(5.0)
+    tc.append_log(3, '')
+
+
+
+def test_eth(tc,io,cmd):
+    tc.set_section_id('ETH status - ')
+    tc.append_log(3, '>>>')
+    tc.append_log(1, '>>> %s' % help_text(tc,io,cmd))
+    tc.append_log(3, '>>>')
+    
+    eth = pi_eth.PiEth(tc, io)
+    hdr=eth.read_hdr(0)
+    eth.disassemble_hdr(hdr)
+    tc.append_log(3, '')
+
+
+
+def test_flash(tc,io,cmd):
+    tc.set_section_id('Flash write to bank 1 - ')
+    tc.append_log(3, '>>>')
+    tc.append_log(1, '>>> %s' % help_text(tc,io,cmd))
+    tc.append_log(3, '>>>')
+    
+    Epcs = pi_epcs.PiEpcs(tc, io)
+    path_to_rbf = instanceName = tc.gpString
+    Epcs.write_raw_binary_file("user", path_to_rbf)
+    tc.append_log(3, '')
+
+    tc.set_section_id('Flash read/verify bank 1 - ')
+    tc.append_log(3, '>>>')
+    tc.append_log(1, '>>> Read from flash (pi_epcs.py)')
+    tc.append_log(3, '>>>')
+    
+    path_to_rbf = instanceName = tc.gpString
+    Epcs.read_and_verify_raw_binary_file("user", path_to_rbf)
+    tc.append_log(3, '')
+
+
+def set_led(tc,dw,led,text):
+    tc.append_log(3, text)
+    dw.set_led(led)
+    tc.sleep(1.0)
+
+def test_leds(tc,io,cmd):
+    tc.set_section_id('LED test - ')
+    tc.append_log(3, '>>>')
+    tc.append_log(1, '>>> %s' % help_text(tc,io,cmd))
+    tc.append_log(3, '>>>')
+    dw =  pi_debug_wave.PiDebugWave(tc, io)
+    set_led(tc,dw,'off',   '')
+    set_led(tc,dw,'red',  'RED on')
+    set_led(tc,dw,'off',  'RED off')
+    set_led(tc,dw,'green','GREEN on')
+    set_led(tc,dw,'off',  'GREEN off')
+    set_led(tc,dw,'both', 'ORANGE (RED+GREEN) on')
+    set_led(tc,dw,'off',  'ORANGE (RED+GREEN) off')
+    tc.append_log(3, '')
+
+
+def sleep(tc,io,cmd):
+    tc.set_section_id('%s - ' % cmd)
+    tc.append_log(1, '>>> %s' % help_text(tc,io,cmd))
+    if cmd == 'sleep1':
+        tc.sleep(1.0)
+    elif cmd == 'sleep5':
+        tc.sleep(5.0)
+
+def show_help(tc,io,cmd):
+    tc.set_section_id('%s - ' % cmd)
+    tc.append_log(1, '>>> %s' % help_text(tc,io,cmd))
+
+
+# Avaliable commands
+Cmd = dict()
+Cmd['REGMAP']  = (read_regmap,  'using pi_system_info to read register info (access PIO_SYSTEM_INFO) and store REGMAPs','')
+Cmd['INFO']    = (test_info,    'using pi_system_info to read system info (access PIO_SYSTEM_INFO)','(-s for expected design_name)')
+Cmd['FLASH']   = (test_flash,   'using pi_epcs to program/verify flash','(-s for .rbf file)')
+Cmd['SENSORS'] = (test_sensors, 'using pi_unb_sens to readout sensors (access REG_UNB_SENS)','')
+Cmd['LED']     = (test_leds,    'using pi_debug_wave to set LEDs (access PIO_DEBUG_WAVE)','')
+Cmd['PPSH']    = (test_ppsh,    'using pi_ppsh to read PPSH capture count (access PIO_PPS)','')
+Cmd['ETH']     = (test_eth,     'using pi_eth to read eth status','')
+Cmd['REMU']    = (test_remu,    'using pi_remu to load user image (access REG_REMU)','')
+Cmd['WDI']     = (test_wdi,     'using pi_wdi to reset to image in bank 0 (access REG_WDI)','')
+Cmd['sleep1']  = (sleep,        'Sleep 1 second','')
+Cmd['sleep5']  = (sleep,        'Sleep 5 seconds','')
+Cmd['example'] = (show_help,    'show several example commands','')
+Cmd['help']    = (show_help,    'show help on commands','')
+
+
+def help_text(tc,io,cmd):
+    str=''
+    if cmd == 'help':
+        tc.append_log(0, '\n')
+        tc.append_log(0, '>>> Help:')
+        tc.append_log(0, 'Usage: %s <nodes> <command sequence> [-v..] [--rep ...]' % sys.argv[0])
+        tc.append_log(0, '')
+        tc.append_log(0, '    <nodes>: use: --unb N --fn N --bn N (N is a number or vector) or:')
+        tc.append_log(0, '    <nodes>: use: --gn N (N is a number or vector)')
+        tc.append_log(0, '    <command sequence>: use: --seq <command(s) separated by ",">:')
+        tc.append_log(0, '')
+        for cmd in sorted(Cmd):
+            tc.append_log(0, '    .  %s\t%s  %s' % (cmd,Cmd[cmd][1],Cmd[cmd][2]))
+        tc.append_log(0, '')
+        tc.append_log(0, '    [-vN]: verbose level N (default=5): %s' % tc.verbose_levels())
+        tc.append_log(0, '    [--rep N]: N=number of repeats, where -1 is forever, non-stop')
+        help_text(tc,io,'example')
+    elif cmd == 'example':
+        tc.append_log(0, '')
+        tc.append_log(0, '>>> Examples:')
+        tc.append_log(0, '')
+        tc.append_log(0, 'Getting INFO from all nodes on 1 Uniboard: %s --gn 0:7 --seq INFO' % sys.argv[0])
+        tc.append_log(0, '')
+        tc.append_log(0, '[reset, load user img] sequence: --seq REGMAP,WDI,REGMAP,REMU,REGMAP,INFO')
+        tc.append_log(0, '[flash+start user img] sequence: --seq FLASH,WDI,REGMAP,REMU,REGMAP,INFO -s file.rbf')
+        tc.append_log(0, '[re-read info,sensors] sequence: --seq INFO,PPSH,SENSORS --rep -1 -s expected_design_name')
+        tc.append_log(0, '[reset to factory]     sequence: --seq WDI,REGMAP')
+        tc.append_log(0, '[program user image]   sequence: --seq FLASH -s file.rbf')
+        tc.append_log(0, '[load user image]      sequence: --seq REMU,REGMAP')
+        tc.append_log(0, '[modelsim BG-DB test] arguments: --unb 0 --fn 0 --seq BGDB --sim -r 0:2')
+        tc.append_log(0, '\n')
+    else:
+        str = Cmd[cmd][1]
+    return str
+
+
+def signal_handler(signal, frame):
+    print('You pressed Ctrl+C!')
+    tc.repeat=0
+
+
+##################################################################################################################
+# Main
+#
+# Create a test case object
+tc = test_case.Testcase('TB - ', '')
+tc.set_result('PASSED')
+dgnName = tc.gpString
+tc.append_log(3, '>>>')
+tc.append_log(0, '>>> Title : Test bench (%s) on nodes %s, %s' % (sys.argv[0],tc.unb_nodes_string(''),dgnName))
+tc.append_log(0, '>>> Commandline : %s' % " ".join(sys.argv))
+tc.append_log(3, '>>>')
+
+
+# Create access object for nodes
+io = node_io.NodeIO(tc.nodeImages, tc.base_ip)
+
+signal.signal(signal.SIGINT, signal_handler)
+
+##################################################################################################################
+# Run tests
+while tc.repeat != 0: # -1 for non-stop
+    tc.repeat -= 1
+    tc.next_run()
+    tc.append_log(3, '')
+    
+    try:
+        for cmd in tc.sequence:
+            tc.set_section_id('Next command: %s ' % cmd)
+            tc.append_log(1, '>>> Testrun %d (@%.02fs) - ' % (tc.get_nof_runs(),tc.get_run_time()))
+
+            if cmd == 'REGMAP': # reload node_io:
+                io = Cmd[cmd][0](tc,io,cmd)
+            else:
+                Cmd[cmd][0](tc,io,cmd)
+
+
+    except KeyError:
+        print 'Unknown command:',cmd
+        cmd='help'
+        Cmd[cmd][0](tc,io,cmd)
+#    except:
+#        print 'Catched error:',sys.exc_info()[0]
+
+
+
+##################################################################################################################
+# End
+tc.set_section_id('')
+tc.append_log(3, '')
+tc.append_log(3, '>>>')
+tc.append_log(0, '>>> Test bench result: %s' % tc.get_result())
+tc.append_log(0, '>>> Number of runs=%d' % tc.get_nof_runs())
+tc.append_log(0, '>>> Number of errors=%d' % tc.get_nof_errors())
+tc.append_log(0, '>>> Runtime=%f seconds (%f hours)' % (tc.get_run_time(),tc.get_run_time()/3600))
+tc.append_log(3, '>>>')
+
+sys.exit(tc.get_result())
+
diff --git a/boards/uniboard2a/designs/unb2a_minimal/tb/vhdl/tb_unb2a_minimal.vhd b/boards/uniboard2a/designs/unb2a_minimal/tb/vhdl/tb_unb2a_minimal.vhd
new file mode 100644
index 0000000000000000000000000000000000000000..8bc8b42190fa6b3653504a57ec4533f1df9ea37a
--- /dev/null
+++ b/boards/uniboard2a/designs/unb2a_minimal/tb/vhdl/tb_unb2a_minimal.vhd
@@ -0,0 +1,220 @@
+-------------------------------------------------------------------------------
+--
+-- 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/>.
+--
+-------------------------------------------------------------------------------
+
+-- Purpose: Test bench for unb2_minimal.
+-- Description:
+--   The DUT can be targeted at unb 0, node 3 with the same Python scripts 
+--   that are used on hardware. 
+-- Usage:
+--   On command line do:
+--     > run_modelsim & (to start Modeslim)
+--
+--   In Modelsim do:
+--     > lp unb2_minimal
+--     > mk clean all (only first time to clean all libraries)
+--     > mk all (to compile all libraries that are needed for unb2_minimal)
+--     . load tb_unb1_minimal simulation by double clicking the tb_unb2_minimal icon
+--     > as 10 (to view signals in Wave Window)
+--     > run 100 us (or run -all)
+--
+--   On command line do:
+--     > python $UPE/peripherals/util_system_info.py --gn 3 -n 0 -v 5 --sim
+--     > python $UPE/peripherals/util_unb_sens.py --gn 3 -n 0 -v 5 --sim
+--     > python $UPE/peripherals/util_ppsh.py --gn 3 -n 1 -v 5 --sim
+--
+
+LIBRARY IEEE, common_lib, unb2_board_lib, i2c_lib;
+USE IEEE.std_logic_1164.ALL;
+USE IEEE.numeric_std.ALL;
+USE common_lib.common_pkg.ALL;
+USE unb2_board_lib.unb2_board_pkg.ALL;
+USE common_lib.tb_common_pkg.ALL;
+
+ENTITY tb_unb2_minimal IS
+    GENERIC (
+      g_design_name : STRING  := "unb2_minimal";
+      g_sim_unb_nr  : NATURAL := 0; -- UniBoard 0
+      g_sim_node_nr : NATURAL := 3  -- Node 3
+    );
+END tb_unb2_minimal;
+
+ARCHITECTURE tb OF tb_unb2_minimal IS
+
+  CONSTANT c_sim             : BOOLEAN := TRUE;
+
+  CONSTANT c_unb_nr          : NATURAL := 0; -- UniBoard 0
+  CONSTANT c_node_nr         : NATURAL := 3; -- Node 3
+  CONSTANT c_id              : STD_LOGIC_VECTOR(7 DOWNTO 0) := TO_UVEC(c_unb_nr, c_unb2_board_nof_uniboard_w) & TO_UVEC(c_node_nr, c_unb2_board_nof_chip_w);
+
+  CONSTANT c_version         : STD_LOGIC_VECTOR(1 DOWNTO 0) := "00";
+  CONSTANT c_fw_version      : t_unb2_board_fw_version := (1, 0);
+
+  CONSTANT c_cable_delay     : TIME := 12 ns;
+  CONSTANT c_eth_clk_period  : TIME := 8 ns;  -- 125 MHz XO on UniBoard
+  CONSTANT c_clk_period      : TIME := 5 ns; 
+  CONSTANT c_pps_period      : NATURAL := 1000; 
+
+  -- DUT
+  SIGNAL clk                 : STD_LOGIC := '0';
+  SIGNAL pps                 : STD_LOGIC := '0';
+  SIGNAL pps_rst             : STD_LOGIC := '0';
+
+  SIGNAL WDI                 : STD_LOGIC;
+  SIGNAL INTA                : STD_LOGIC;
+  SIGNAL INTB                : STD_LOGIC;
+
+  SIGNAL eth_clk             : STD_LOGIC := '0';
+  SIGNAL eth_txp             : STD_LOGIC_VECTOR(1 DOWNTO 0);
+  SIGNAL eth_rxp             : STD_LOGIC_VECTOR(1 DOWNTO 0);
+  
+  SIGNAL VERSION             : STD_LOGIC_VECTOR(c_unb2_board_aux.version_w-1 DOWNTO 0) := c_version; 
+  SIGNAL ID                  : STD_LOGIC_VECTOR(c_unb2_board_aux.id_w-1 DOWNTO 0)      := c_id;
+  SIGNAL TESTIO              : STD_LOGIC_VECTOR(c_unb2_board_aux.testio_w-1 DOWNTO 0);
+
+  SIGNAL sens_scl            : STD_LOGIC;
+  SIGNAL sens_sda            : STD_LOGIC;
+
+  SIGNAL PMBUS_SC            : STD_LOGIC;
+  SIGNAL PMBUS_SD            : STD_LOGIC;
+  SIGNAL PMBUS_ALERT         : STD_LOGIC := '0';
+  
+  SIGNAL qsfp_led            : STD_LOGIC_VECTOR(c_unb2_board_tr_qsfp_nof_leds-1 DOWNTO 0);
+
+  -- Model I2C sensor slaves as on the UniBoard
+  CONSTANT c_fpga_temp_address   : STD_LOGIC_VECTOR(6 DOWNTO 0) := "0011000";  -- MAX1618 address LOW LOW
+  CONSTANT c_fpga_temp           : INTEGER := 60;
+  CONSTANT c_eth_temp_address    : STD_LOGIC_VECTOR(6 DOWNTO 0) := "0101001";  -- MAX1618 address MID LOW
+  CONSTANT c_eth_temp            : INTEGER := 40;
+  CONSTANT c_hot_swap_address    : STD_LOGIC_VECTOR(6 DOWNTO 0) := "1000100";  -- LTC4260 address L L L
+  CONSTANT c_hot_swap_R_sense    : REAL := 0.01;                               -- = 10 mOhm on UniBoard
+  
+  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
+
+BEGIN
+
+  ----------------------------------------------------------------------------
+  -- System setup
+  ----------------------------------------------------------------------------
+  clk     <= NOT clk AFTER c_clk_period/2;        -- External clock (200 MHz)
+  eth_clk <= NOT eth_clk AFTER c_eth_clk_period/2;  -- Ethernet ref clock (25 MHz)
+  
+  INTA <= 'H';  -- pull up
+  INTB <= 'H';  -- pull up
+
+  sens_scl <= 'H';  -- pull up
+  sens_sda <= 'H';  -- pull up
+
+  PMBUS_SC <= 'H';  -- pull up
+  PMBUS_SD <= 'H';  -- pull up
+  
+  ------------------------------------------------------------------------------
+  -- External PPS
+  ------------------------------------------------------------------------------  
+  proc_common_gen_pulse(1, c_pps_period, '1', pps_rst, clk, pps);
+
+  ------------------------------------------------------------------------------
+  -- 1GbE Loopback model
+  ------------------------------------------------------------------------------  
+  eth_rxp(0) <= TRANSPORT eth_txp(0) AFTER c_cable_delay;
+  
+  eth_rxp(1) <= '0';
+  eth_txp(1) <= '0';
+
+  ------------------------------------------------------------------------------
+  -- DUT
+  ------------------------------------------------------------------------------
+  u_unb2_minimal : ENTITY work.unb2_minimal
+    GENERIC MAP (
+      g_sim         => c_sim,
+      g_sim_unb_nr  => c_unb_nr,
+      g_sim_node_nr => c_node_nr,
+      g_design_name => g_design_name
+    )
+    PORT MAP (
+      -- GENERAL
+      CLK         => clk,
+      PPS         => pps,
+      WDI         => WDI,
+      INTA        => INTA,
+      INTB        => INTB,
+
+      sens_sc     => sens_scl,
+      sens_sd     => sens_sda,
+      
+      PMBUS_SC    => PMBUS_SC,
+      PMBUS_SD    => PMBUS_SD,
+      PMBUS_ALERT => PMBUS_ALERT,
+
+      -- Others
+      VERSION     => VERSION,
+      ID          => ID,
+      TESTIO      => TESTIO,
+
+      -- 1GbE Control Interface
+      ETH_clk     => eth_clk,
+      ETH_SGIN    => eth_rxp,
+      ETH_SGOUT   => eth_txp,
+
+      QSFP_LED    => qsfp_led
+    );
+
+  ------------------------------------------------------------------------------
+  -- 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;
diff --git a/boards/uniboard2a/libraries/unb2a_board/hdllib.cfg b/boards/uniboard2a/libraries/unb2a_board/hdllib.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..68389f080ce4cf76f20db809c089e9a61518d4fb
--- /dev/null
+++ b/boards/uniboard2a/libraries/unb2a_board/hdllib.cfg
@@ -0,0 +1,39 @@
+hdl_lib_name = unb2_board
+hdl_library_clause_name = unb2_board_lib
+hdl_lib_uses_synth = common dp ppsh i2c eth remu technology tech_clkbuf tech_pll tech_fractional_pll epcs fpga_sense
+hdl_lib_uses_sim = 
+
+hdl_lib_technology = ip_arria10
+
+synth_files =
+    src/vhdl/unb2_board_pkg.vhd
+    src/vhdl/unb2_board_system_info.vhd
+    src/vhdl/unb2_board_system_info_reg.vhd
+    src/vhdl/mms_unb2_board_system_info.vhd
+    src/vhdl/unb2_board_clk200_pll.vhd
+    src/vhdl/unb2_board_clk25_pll.vhd
+    src/vhdl/unb2_board_clk125_pll.vhd
+#    src/vhdl/unb2_board_clk200mm_pll.vhd
+    src/vhdl/unb2_board_wdi_extend.vhd
+    src/vhdl/unb2_board_node_ctrl.vhd
+    src/vhdl/unb2_board_sens_ctrl.vhd
+    src/vhdl/unb2_board_sens.vhd
+    src/vhdl/unb2_board_sens_reg.vhd
+    src/vhdl/unb2_fpga_sens_reg.vhd
+    src/vhdl/mms_unb2_board_sens.vhd
+    src/vhdl/mms_unb2_fpga_sens.vhd
+    src/vhdl/unb2_board_wdi_reg.vhd
+    src/vhdl/unb2_board_qsfp_leds.vhd
+    src/vhdl/ctrl_unb2_board.vhd
+    src/vhdl/unb2_board_front_io.vhd
+    src/vhdl/unb2_board_back_io.vhd
+    src/vhdl/unb2_board_ring_io.vhd
+    src/vhdl/unb2_board_peripherals_pkg.vhd
+    
+test_bench_files = 
+    tb/vhdl/tb_mms_unb2_board_sens.vhd
+    tb/vhdl/tb_unb2_board_clk200_pll.vhd
+    tb/vhdl/tb_unb2_board_clk25_pll.vhd
+    tb/vhdl/tb_unb2_board_node_ctrl.vhd
+    tb/vhdl/tb_unb2_board_qsfp_leds.vhd
+    
diff --git a/boards/uniboard2a/libraries/unb2a_board/quartus/README b/boards/uniboard2a/libraries/unb2a_board/quartus/README
new file mode 100644
index 0000000000000000000000000000000000000000..2053e16965d1767ad0313b33e0d29f31f31ee3e9
--- /dev/null
+++ b/boards/uniboard2a/libraries/unb2a_board/quartus/README
@@ -0,0 +1,5 @@
+The file:
+
+    sfl_enhanced_01_02e360dd.sof
+
+needs to be loaded in the FPGA when a JIC file is programmed to the EPCS flash
diff --git a/boards/uniboard2a/libraries/unb2a_board/quartus/pinning/unb2_10GbE_pins.tcl b/boards/uniboard2a/libraries/unb2a_board/quartus/pinning/unb2_10GbE_pins.tcl
new file mode 100644
index 0000000000000000000000000000000000000000..3473f5172e5273b0c9dd68518e0a58ea6b87fc26
--- /dev/null
+++ b/boards/uniboard2a/libraries/unb2a_board/quartus/pinning/unb2_10GbE_pins.tcl
@@ -0,0 +1,672 @@
+
+set_location_assignment PIN_AL32 -to CLKUSR
+
+
+set_location_assignment PIN_Y36 -to SA_CLK
+set_instance_assignment -name IO_STANDARD LVDS -to SA_CLK
+# internal termination should be enabled.
+set_instance_assignment -name XCVR_A10_REFCLK_TERM_TRISTATE TRISTATE_OFF -to SA_CLK
+
+
+set_location_assignment PIN_AH9 -to SB_CLK
+set_instance_assignment -name IO_STANDARD LVDS -to SB_CLK
+# internal termination should be enabled.
+set_instance_assignment -name XCVR_A10_REFCLK_TERM_TRISTATE TRISTATE_OFF -to SB_CLK
+
+
+set_location_assignment PIN_V9 -to BCK_REF_CLK
+set_location_assignment PIN_V10 -to "BCK_REF_CLK(n)"
+set_instance_assignment -name IO_STANDARD LVDS -to BCK_REF_CLK
+set_instance_assignment -name IO_STANDARD LVDS -to "BCK_REF_CLK(n)"
+
+
+
+# QSFP_0_RX
+set_location_assignment PIN_AN38 -to QSFP_0_RX[0]
+set_location_assignment PIN_AM40 -to QSFP_0_RX[1]
+set_location_assignment PIN_AK40 -to QSFP_0_RX[2]
+set_location_assignment PIN_AJ38 -to QSFP_0_RX[3]
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O"                   -to QSFP_0_RX[0]
+set_instance_assignment -name XCVR_A10_RX_TERM_SEL R_R1                             -to QSFP_0_RX[0]
+set_instance_assignment -name XCVR_A10_RX_ONE_STAGE_ENABLE NON_S1_MODE              -to QSFP_0_RX[0]
+set_instance_assignment -name XCVR_A10_RX_ADP_CTLE_ACGAIN_4S RADP_CTLE_ACGAIN_4S_12 -to QSFP_0_RX[0]
+set_instance_assignment -name XCVR_A10_RX_EQ_DC_GAIN_TRIM NO_DC_GAIN                -to QSFP_0_RX[0]
+set_instance_assignment -name XCVR_A10_RX_ADP_VGA_SEL RADP_VGA_SEL_4                -to QSFP_0_RX[0]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V                           -to QSFP_0_RX[0]
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O"                   -to QSFP_0_RX[1]
+set_instance_assignment -name XCVR_A10_RX_TERM_SEL R_R1                             -to QSFP_0_RX[1]
+set_instance_assignment -name XCVR_A10_RX_ONE_STAGE_ENABLE NON_S1_MODE              -to QSFP_0_RX[1]
+set_instance_assignment -name XCVR_A10_RX_ADP_CTLE_ACGAIN_4S RADP_CTLE_ACGAIN_4S_12 -to QSFP_0_RX[1]
+set_instance_assignment -name XCVR_A10_RX_EQ_DC_GAIN_TRIM NO_DC_GAIN                -to QSFP_0_RX[1]
+set_instance_assignment -name XCVR_A10_RX_ADP_VGA_SEL RADP_VGA_SEL_4                -to QSFP_0_RX[1]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V                           -to QSFP_0_RX[1]
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O"                   -to QSFP_0_RX[2]
+set_instance_assignment -name XCVR_A10_RX_TERM_SEL R_R1                             -to QSFP_0_RX[2]
+set_instance_assignment -name XCVR_A10_RX_ONE_STAGE_ENABLE NON_S1_MODE              -to QSFP_0_RX[2]
+set_instance_assignment -name XCVR_A10_RX_ADP_CTLE_ACGAIN_4S RADP_CTLE_ACGAIN_4S_12 -to QSFP_0_RX[2]
+set_instance_assignment -name XCVR_A10_RX_EQ_DC_GAIN_TRIM NO_DC_GAIN                -to QSFP_0_RX[2]
+set_instance_assignment -name XCVR_A10_RX_ADP_VGA_SEL RADP_VGA_SEL_4                -to QSFP_0_RX[2]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V                           -to QSFP_0_RX[2]
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O"                   -to QSFP_0_RX[3]
+set_instance_assignment -name XCVR_A10_RX_TERM_SEL R_R1                             -to QSFP_0_RX[3]
+set_instance_assignment -name XCVR_A10_RX_ONE_STAGE_ENABLE NON_S1_MODE              -to QSFP_0_RX[3]
+set_instance_assignment -name XCVR_A10_RX_ADP_CTLE_ACGAIN_4S RADP_CTLE_ACGAIN_4S_12 -to QSFP_0_RX[3]
+set_instance_assignment -name XCVR_A10_RX_EQ_DC_GAIN_TRIM NO_DC_GAIN                -to QSFP_0_RX[3]
+set_instance_assignment -name XCVR_A10_RX_ADP_VGA_SEL RADP_VGA_SEL_4                -to QSFP_0_RX[3]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V                           -to QSFP_0_RX[3]
+
+# QSFP_0_TX
+set_location_assignment PIN_AN42 -to QSFP_0_TX[0]
+set_location_assignment PIN_AM44 -to QSFP_0_TX[1]
+set_location_assignment PIN_AK44 -to QSFP_0_TX[2]
+set_location_assignment PIN_AJ42 -to QSFP_0_TX[3]
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O"                   -to QSFP_0_TX[0]
+set_instance_assignment -name XCVR_A10_TX_VOD_OUTPUT_SWING_CTRL 30                  -to QSFP_0_TX[0]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V                           -to QSFP_0_TX[0]
+set_instance_assignment -name XCVR_A10_TX_COMPENSATION_EN ENABLE                    -to QSFP_0_TX[0]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SWITCHING_CTRL_1ST_POST_TAP 0     -to QSFP_0_TX[0]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SIGN_1ST_POST_TAP FIR_POST_1T_POS -to QSFP_0_TX[0]
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O"                   -to QSFP_0_TX[1]
+set_instance_assignment -name XCVR_A10_TX_VOD_OUTPUT_SWING_CTRL 30                  -to QSFP_0_TX[1]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V                           -to QSFP_0_TX[1]
+set_instance_assignment -name XCVR_A10_TX_COMPENSATION_EN ENABLE                    -to QSFP_0_TX[1]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SWITCHING_CTRL_1ST_POST_TAP 0     -to QSFP_0_TX[1]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SIGN_1ST_POST_TAP FIR_POST_1T_POS -to QSFP_0_TX[1]
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O"                   -to QSFP_0_TX[2]
+set_instance_assignment -name XCVR_A10_TX_VOD_OUTPUT_SWING_CTRL 30                  -to QSFP_0_TX[2]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V                           -to QSFP_0_TX[2]
+set_instance_assignment -name XCVR_A10_TX_COMPENSATION_EN ENABLE                    -to QSFP_0_TX[2]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SWITCHING_CTRL_1ST_POST_TAP 0     -to QSFP_0_TX[2]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SIGN_1ST_POST_TAP FIR_POST_1T_POS -to QSFP_0_TX[2]
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O"                   -to QSFP_0_TX[3]
+set_instance_assignment -name XCVR_A10_TX_VOD_OUTPUT_SWING_CTRL 30                  -to QSFP_0_TX[3]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V                           -to QSFP_0_TX[3]
+set_instance_assignment -name XCVR_A10_TX_COMPENSATION_EN ENABLE                    -to QSFP_0_TX[3]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SWITCHING_CTRL_1ST_POST_TAP 0     -to QSFP_0_TX[3]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SIGN_1ST_POST_TAP FIR_POST_1T_POS -to QSFP_0_TX[3]
+
+# QSFP_1_RX
+set_location_assignment PIN_AC38 -to QSFP_1_RX[0]
+set_location_assignment PIN_AD40 -to QSFP_1_RX[1]
+set_location_assignment PIN_AF40 -to QSFP_1_RX[2]
+set_location_assignment PIN_AG38 -to QSFP_1_RX[3]
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O"                   -to QSFP_1_RX[0]
+set_instance_assignment -name XCVR_A10_RX_TERM_SEL R_R1                             -to QSFP_1_RX[0]
+set_instance_assignment -name XCVR_A10_RX_ONE_STAGE_ENABLE NON_S1_MODE              -to QSFP_1_RX[0]
+set_instance_assignment -name XCVR_A10_RX_ADP_CTLE_ACGAIN_4S RADP_CTLE_ACGAIN_4S_12 -to QSFP_1_RX[0]
+set_instance_assignment -name XCVR_A10_RX_EQ_DC_GAIN_TRIM NO_DC_GAIN                -to QSFP_1_RX[0]
+set_instance_assignment -name XCVR_A10_RX_ADP_VGA_SEL RADP_VGA_SEL_4                -to QSFP_1_RX[0]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V                           -to QSFP_1_RX[0]
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O"                   -to QSFP_1_RX[1]
+set_instance_assignment -name XCVR_A10_RX_TERM_SEL R_R1                             -to QSFP_1_RX[1]
+set_instance_assignment -name XCVR_A10_RX_ONE_STAGE_ENABLE NON_S1_MODE              -to QSFP_1_RX[1]
+set_instance_assignment -name XCVR_A10_RX_ADP_CTLE_ACGAIN_4S RADP_CTLE_ACGAIN_4S_12 -to QSFP_1_RX[1]
+set_instance_assignment -name XCVR_A10_RX_EQ_DC_GAIN_TRIM NO_DC_GAIN                -to QSFP_1_RX[1]
+set_instance_assignment -name XCVR_A10_RX_ADP_VGA_SEL RADP_VGA_SEL_4                -to QSFP_1_RX[1]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V                           -to QSFP_1_RX[1]
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O"                   -to QSFP_1_RX[2]
+set_instance_assignment -name XCVR_A10_RX_TERM_SEL R_R1                             -to QSFP_1_RX[2]
+set_instance_assignment -name XCVR_A10_RX_ONE_STAGE_ENABLE NON_S1_MODE              -to QSFP_1_RX[2]
+set_instance_assignment -name XCVR_A10_RX_ADP_CTLE_ACGAIN_4S RADP_CTLE_ACGAIN_4S_12 -to QSFP_1_RX[2]
+set_instance_assignment -name XCVR_A10_RX_EQ_DC_GAIN_TRIM NO_DC_GAIN                -to QSFP_1_RX[2]
+set_instance_assignment -name XCVR_A10_RX_ADP_VGA_SEL RADP_VGA_SEL_4                -to QSFP_1_RX[2]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V                           -to QSFP_1_RX[2]
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O"                   -to QSFP_1_RX[3]
+set_instance_assignment -name XCVR_A10_RX_TERM_SEL R_R1                             -to QSFP_1_RX[3]
+set_instance_assignment -name XCVR_A10_RX_ONE_STAGE_ENABLE NON_S1_MODE              -to QSFP_1_RX[3]
+set_instance_assignment -name XCVR_A10_RX_ADP_CTLE_ACGAIN_4S RADP_CTLE_ACGAIN_4S_12 -to QSFP_1_RX[3]
+set_instance_assignment -name XCVR_A10_RX_EQ_DC_GAIN_TRIM NO_DC_GAIN                -to QSFP_1_RX[3]
+set_instance_assignment -name XCVR_A10_RX_ADP_VGA_SEL RADP_VGA_SEL_4                -to QSFP_1_RX[3]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V                           -to QSFP_1_RX[3]
+
+
+#
+# QSFP_1_TX
+set_location_assignment PIN_AC42 -to QSFP_1_TX[0]
+set_location_assignment PIN_AD44 -to QSFP_1_TX[1]
+set_location_assignment PIN_AF44 -to QSFP_1_TX[2]
+set_location_assignment PIN_AG42 -to QSFP_1_TX[3]
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O"                   -to QSFP_1_TX[0]
+set_instance_assignment -name XCVR_A10_TX_VOD_OUTPUT_SWING_CTRL 30                  -to QSFP_1_TX[0]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V                           -to QSFP_1_TX[0]
+set_instance_assignment -name XCVR_A10_TX_COMPENSATION_EN ENABLE                    -to QSFP_1_TX[0]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SWITCHING_CTRL_1ST_POST_TAP 0     -to QSFP_1_TX[0]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SIGN_1ST_POST_TAP FIR_POST_1T_POS -to QSFP_1_TX[0]
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O"                   -to QSFP_1_TX[1]
+set_instance_assignment -name XCVR_A10_TX_VOD_OUTPUT_SWING_CTRL 30                  -to QSFP_1_TX[1]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V                           -to QSFP_1_TX[1]
+set_instance_assignment -name XCVR_A10_TX_COMPENSATION_EN ENABLE                    -to QSFP_1_TX[1]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SWITCHING_CTRL_1ST_POST_TAP 0     -to QSFP_1_TX[1]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SIGN_1ST_POST_TAP FIR_POST_1T_POS -to QSFP_1_TX[1]
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O"                   -to QSFP_1_TX[2]
+set_instance_assignment -name XCVR_A10_TX_VOD_OUTPUT_SWING_CTRL 30                  -to QSFP_1_TX[2]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V                           -to QSFP_1_TX[2]
+set_instance_assignment -name XCVR_A10_TX_COMPENSATION_EN ENABLE                    -to QSFP_1_TX[2]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SWITCHING_CTRL_1ST_POST_TAP 0     -to QSFP_1_TX[2]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SIGN_1ST_POST_TAP FIR_POST_1T_POS -to QSFP_1_TX[2]
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O"                   -to QSFP_1_TX[3]
+set_instance_assignment -name XCVR_A10_TX_VOD_OUTPUT_SWING_CTRL 30                  -to QSFP_1_TX[3]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V                           -to QSFP_1_TX[3]
+set_instance_assignment -name XCVR_A10_TX_COMPENSATION_EN ENABLE                    -to QSFP_1_TX[3]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SWITCHING_CTRL_1ST_POST_TAP 0     -to QSFP_1_TX[3]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SIGN_1ST_POST_TAP FIR_POST_1T_POS -to QSFP_1_TX[3]
+
+# QSFP_2_RX
+set_location_assignment PIN_AL38 -to QSFP_2_RX[0]
+set_location_assignment PIN_AH40 -to QSFP_2_RX[1]
+set_location_assignment PIN_AE38 -to QSFP_2_RX[2]
+set_location_assignment PIN_AB40 -to QSFP_2_RX[3]
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O"                   -to QSFP_2_RX[0]
+set_instance_assignment -name XCVR_A10_RX_TERM_SEL R_R1                             -to QSFP_2_RX[0]
+set_instance_assignment -name XCVR_A10_RX_ONE_STAGE_ENABLE NON_S1_MODE              -to QSFP_2_RX[0]
+set_instance_assignment -name XCVR_A10_RX_ADP_CTLE_ACGAIN_4S RADP_CTLE_ACGAIN_4S_12 -to QSFP_2_RX[0]
+set_instance_assignment -name XCVR_A10_RX_EQ_DC_GAIN_TRIM NO_DC_GAIN                -to QSFP_2_RX[0]
+set_instance_assignment -name XCVR_A10_RX_ADP_VGA_SEL RADP_VGA_SEL_4                -to QSFP_2_RX[0]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V                           -to QSFP_2_RX[0]
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O"                   -to QSFP_2_RX[1]
+set_instance_assignment -name XCVR_A10_RX_TERM_SEL R_R1                             -to QSFP_2_RX[1]
+set_instance_assignment -name XCVR_A10_RX_ONE_STAGE_ENABLE NON_S1_MODE              -to QSFP_2_RX[1]
+set_instance_assignment -name XCVR_A10_RX_ADP_CTLE_ACGAIN_4S RADP_CTLE_ACGAIN_4S_12 -to QSFP_2_RX[1]
+set_instance_assignment -name XCVR_A10_RX_EQ_DC_GAIN_TRIM NO_DC_GAIN                -to QSFP_2_RX[1]
+set_instance_assignment -name XCVR_A10_RX_ADP_VGA_SEL RADP_VGA_SEL_4                -to QSFP_2_RX[1]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V                           -to QSFP_2_RX[1]
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O"                   -to QSFP_2_RX[2]
+set_instance_assignment -name XCVR_A10_RX_TERM_SEL R_R1                             -to QSFP_2_RX[2]
+set_instance_assignment -name XCVR_A10_RX_ONE_STAGE_ENABLE NON_S1_MODE              -to QSFP_2_RX[2]
+set_instance_assignment -name XCVR_A10_RX_ADP_CTLE_ACGAIN_4S RADP_CTLE_ACGAIN_4S_12 -to QSFP_2_RX[2]
+set_instance_assignment -name XCVR_A10_RX_EQ_DC_GAIN_TRIM NO_DC_GAIN                -to QSFP_2_RX[2]
+set_instance_assignment -name XCVR_A10_RX_ADP_VGA_SEL RADP_VGA_SEL_4                -to QSFP_2_RX[2]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V                           -to QSFP_2_RX[2]
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O"                   -to QSFP_2_RX[3]
+set_instance_assignment -name XCVR_A10_RX_TERM_SEL R_R1                             -to QSFP_2_RX[3]
+set_instance_assignment -name XCVR_A10_RX_ONE_STAGE_ENABLE NON_S1_MODE              -to QSFP_2_RX[3]
+set_instance_assignment -name XCVR_A10_RX_ADP_CTLE_ACGAIN_4S RADP_CTLE_ACGAIN_4S_12 -to QSFP_2_RX[3]
+set_instance_assignment -name XCVR_A10_RX_EQ_DC_GAIN_TRIM NO_DC_GAIN                -to QSFP_2_RX[3]
+set_instance_assignment -name XCVR_A10_RX_ADP_VGA_SEL RADP_VGA_SEL_4                -to QSFP_2_RX[3]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V                           -to QSFP_2_RX[3]
+
+
+# QSFP_2_TX
+set_location_assignment PIN_AL42 -to QSFP_2_TX[0]
+set_location_assignment PIN_AH44 -to QSFP_2_TX[1]
+set_location_assignment PIN_AE42 -to QSFP_2_TX[2]
+set_location_assignment PIN_AB44 -to QSFP_2_TX[3]
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O"                   -to QSFP_2_TX[0]
+set_instance_assignment -name XCVR_A10_TX_VOD_OUTPUT_SWING_CTRL 30                  -to QSFP_2_TX[0]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V                           -to QSFP_2_TX[0]
+set_instance_assignment -name XCVR_A10_TX_COMPENSATION_EN ENABLE                    -to QSFP_2_TX[0]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SWITCHING_CTRL_1ST_POST_TAP 0     -to QSFP_2_TX[0]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SIGN_1ST_POST_TAP FIR_POST_1T_POS -to QSFP_2_TX[0]
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O"                   -to QSFP_2_TX[1]
+set_instance_assignment -name XCVR_A10_TX_VOD_OUTPUT_SWING_CTRL 30                  -to QSFP_2_TX[1]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V                           -to QSFP_2_TX[1]
+set_instance_assignment -name XCVR_A10_TX_COMPENSATION_EN ENABLE                    -to QSFP_2_TX[1]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SWITCHING_CTRL_1ST_POST_TAP 0     -to QSFP_2_TX[1]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SIGN_1ST_POST_TAP FIR_POST_1T_POS -to QSFP_2_TX[1]
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O"                   -to QSFP_2_TX[2]
+set_instance_assignment -name XCVR_A10_TX_VOD_OUTPUT_SWING_CTRL 30                  -to QSFP_2_TX[2]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V                           -to QSFP_2_TX[2]
+set_instance_assignment -name XCVR_A10_TX_COMPENSATION_EN ENABLE                    -to QSFP_2_TX[2]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SWITCHING_CTRL_1ST_POST_TAP 0     -to QSFP_2_TX[2]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SIGN_1ST_POST_TAP FIR_POST_1T_POS -to QSFP_2_TX[2]
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O"                   -to QSFP_2_TX[3]
+set_instance_assignment -name XCVR_A10_TX_VOD_OUTPUT_SWING_CTRL 30                  -to QSFP_2_TX[3]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V                           -to QSFP_2_TX[3]
+set_instance_assignment -name XCVR_A10_TX_COMPENSATION_EN ENABLE                    -to QSFP_2_TX[3]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SWITCHING_CTRL_1ST_POST_TAP 0     -to QSFP_2_TX[3]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SIGN_1ST_POST_TAP FIR_POST_1T_POS -to QSFP_2_TX[3]
+
+# QSFP_3_RX
+set_location_assignment PIN_W38 -to QSFP_3_RX[0]
+set_location_assignment PIN_T40 -to QSFP_3_RX[1]
+set_location_assignment PIN_N38 -to QSFP_3_RX[2]
+set_location_assignment PIN_K40 -to QSFP_3_RX[3]
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O"                   -to QSFP_3_RX[0]
+set_instance_assignment -name XCVR_A10_RX_TERM_SEL R_R1                             -to QSFP_3_RX[0]
+set_instance_assignment -name XCVR_A10_RX_ONE_STAGE_ENABLE NON_S1_MODE              -to QSFP_3_RX[0]
+set_instance_assignment -name XCVR_A10_RX_ADP_CTLE_ACGAIN_4S RADP_CTLE_ACGAIN_4S_12 -to QSFP_3_RX[0]
+set_instance_assignment -name XCVR_A10_RX_EQ_DC_GAIN_TRIM NO_DC_GAIN                -to QSFP_3_RX[0]
+set_instance_assignment -name XCVR_A10_RX_ADP_VGA_SEL RADP_VGA_SEL_4                -to QSFP_3_RX[0]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V                           -to QSFP_3_RX[0]
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O"                   -to QSFP_3_RX[1]
+set_instance_assignment -name XCVR_A10_RX_TERM_SEL R_R1                             -to QSFP_3_RX[1]
+set_instance_assignment -name XCVR_A10_RX_ONE_STAGE_ENABLE NON_S1_MODE              -to QSFP_3_RX[1]
+set_instance_assignment -name XCVR_A10_RX_ADP_CTLE_ACGAIN_4S RADP_CTLE_ACGAIN_4S_12 -to QSFP_3_RX[1]
+set_instance_assignment -name XCVR_A10_RX_EQ_DC_GAIN_TRIM NO_DC_GAIN                -to QSFP_3_RX[1]
+set_instance_assignment -name XCVR_A10_RX_ADP_VGA_SEL RADP_VGA_SEL_4                -to QSFP_3_RX[1]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V                           -to QSFP_3_RX[1]
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O"                   -to QSFP_3_RX[2]
+set_instance_assignment -name XCVR_A10_RX_TERM_SEL R_R1                             -to QSFP_3_RX[2]
+set_instance_assignment -name XCVR_A10_RX_ONE_STAGE_ENABLE NON_S1_MODE              -to QSFP_3_RX[2]
+set_instance_assignment -name XCVR_A10_RX_ADP_CTLE_ACGAIN_4S RADP_CTLE_ACGAIN_4S_12 -to QSFP_3_RX[2]
+set_instance_assignment -name XCVR_A10_RX_EQ_DC_GAIN_TRIM NO_DC_GAIN                -to QSFP_3_RX[2]
+set_instance_assignment -name XCVR_A10_RX_ADP_VGA_SEL RADP_VGA_SEL_4                -to QSFP_3_RX[2]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V                           -to QSFP_3_RX[2]
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O"                   -to QSFP_3_RX[3]
+set_instance_assignment -name XCVR_A10_RX_TERM_SEL R_R1                             -to QSFP_3_RX[3]
+set_instance_assignment -name XCVR_A10_RX_ONE_STAGE_ENABLE NON_S1_MODE              -to QSFP_3_RX[3]
+set_instance_assignment -name XCVR_A10_RX_ADP_CTLE_ACGAIN_4S RADP_CTLE_ACGAIN_4S_12 -to QSFP_3_RX[3]
+set_instance_assignment -name XCVR_A10_RX_EQ_DC_GAIN_TRIM NO_DC_GAIN                -to QSFP_3_RX[3]
+set_instance_assignment -name XCVR_A10_RX_ADP_VGA_SEL RADP_VGA_SEL_4                -to QSFP_3_RX[3]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V                           -to QSFP_3_RX[3]
+
+
+# QSFP_3_TX
+set_location_assignment PIN_W42 -to QSFP_3_TX[0]
+set_location_assignment PIN_T44 -to QSFP_3_TX[1]
+set_location_assignment PIN_N42 -to QSFP_3_TX[2]
+set_location_assignment PIN_K44 -to QSFP_3_TX[3]
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O"                   -to QSFP_3_TX[0]
+set_instance_assignment -name XCVR_A10_TX_VOD_OUTPUT_SWING_CTRL 30                  -to QSFP_3_TX[0]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V                           -to QSFP_3_TX[0]
+set_instance_assignment -name XCVR_A10_TX_COMPENSATION_EN ENABLE                    -to QSFP_3_TX[0]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SWITCHING_CTRL_1ST_POST_TAP 0     -to QSFP_3_TX[0]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SIGN_1ST_POST_TAP FIR_POST_1T_POS -to QSFP_3_TX[0]
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O"                   -to QSFP_3_TX[1]
+set_instance_assignment -name XCVR_A10_TX_VOD_OUTPUT_SWING_CTRL 30                  -to QSFP_3_TX[1]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V                           -to QSFP_3_TX[1]
+set_instance_assignment -name XCVR_A10_TX_COMPENSATION_EN ENABLE                    -to QSFP_3_TX[1]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SWITCHING_CTRL_1ST_POST_TAP 0     -to QSFP_3_TX[1]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SIGN_1ST_POST_TAP FIR_POST_1T_POS -to QSFP_3_TX[1]
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O"                   -to QSFP_3_TX[2]
+set_instance_assignment -name XCVR_A10_TX_VOD_OUTPUT_SWING_CTRL 30                  -to QSFP_3_TX[2]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V                           -to QSFP_3_TX[2]
+set_instance_assignment -name XCVR_A10_TX_COMPENSATION_EN ENABLE                    -to QSFP_3_TX[2]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SWITCHING_CTRL_1ST_POST_TAP 0     -to QSFP_3_TX[2]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SIGN_1ST_POST_TAP FIR_POST_1T_POS -to QSFP_3_TX[2]
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O"                   -to QSFP_3_TX[3]
+set_instance_assignment -name XCVR_A10_TX_VOD_OUTPUT_SWING_CTRL 30                  -to QSFP_3_TX[3]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V                           -to QSFP_3_TX[3]
+set_instance_assignment -name XCVR_A10_TX_COMPENSATION_EN ENABLE                    -to QSFP_3_TX[3]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SWITCHING_CTRL_1ST_POST_TAP 0     -to QSFP_3_TX[3]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SIGN_1ST_POST_TAP FIR_POST_1T_POS -to QSFP_3_TX[3]
+
+# QSFP_4_RX
+set_location_assignment PIN_AA38 -to QSFP_4_RX[0]
+set_location_assignment PIN_Y40 -to QSFP_4_RX[1]
+set_location_assignment PIN_V40 -to QSFP_4_RX[2]
+set_location_assignment PIN_U38 -to QSFP_4_RX[3]
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O"                   -to QSFP_4_RX[0]
+set_instance_assignment -name XCVR_A10_RX_TERM_SEL R_R1                             -to QSFP_4_RX[0]
+set_instance_assignment -name XCVR_A10_RX_ONE_STAGE_ENABLE NON_S1_MODE              -to QSFP_4_RX[0]
+set_instance_assignment -name XCVR_A10_RX_ADP_CTLE_ACGAIN_4S RADP_CTLE_ACGAIN_4S_12 -to QSFP_4_RX[0]
+set_instance_assignment -name XCVR_A10_RX_EQ_DC_GAIN_TRIM NO_DC_GAIN                -to QSFP_4_RX[0]
+set_instance_assignment -name XCVR_A10_RX_ADP_VGA_SEL RADP_VGA_SEL_4                -to QSFP_4_RX[0]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V                           -to QSFP_4_RX[0]
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O"                   -to QSFP_4_RX[1]
+set_instance_assignment -name XCVR_A10_RX_TERM_SEL R_R1                             -to QSFP_4_RX[1]
+set_instance_assignment -name XCVR_A10_RX_ONE_STAGE_ENABLE NON_S1_MODE              -to QSFP_4_RX[1]
+set_instance_assignment -name XCVR_A10_RX_ADP_CTLE_ACGAIN_4S RADP_CTLE_ACGAIN_4S_12 -to QSFP_4_RX[1]
+set_instance_assignment -name XCVR_A10_RX_EQ_DC_GAIN_TRIM NO_DC_GAIN                -to QSFP_4_RX[1]
+set_instance_assignment -name XCVR_A10_RX_ADP_VGA_SEL RADP_VGA_SEL_4                -to QSFP_4_RX[1]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V                           -to QSFP_4_RX[1]
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O"                   -to QSFP_4_RX[2]
+set_instance_assignment -name XCVR_A10_RX_TERM_SEL R_R1                             -to QSFP_4_RX[2]
+set_instance_assignment -name XCVR_A10_RX_ONE_STAGE_ENABLE NON_S1_MODE              -to QSFP_4_RX[2]
+set_instance_assignment -name XCVR_A10_RX_ADP_CTLE_ACGAIN_4S RADP_CTLE_ACGAIN_4S_12 -to QSFP_4_RX[2]
+set_instance_assignment -name XCVR_A10_RX_EQ_DC_GAIN_TRIM NO_DC_GAIN                -to QSFP_4_RX[2]
+set_instance_assignment -name XCVR_A10_RX_ADP_VGA_SEL RADP_VGA_SEL_4                -to QSFP_4_RX[2]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V                           -to QSFP_4_RX[2]
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O"                   -to QSFP_4_RX[3]
+set_instance_assignment -name XCVR_A10_RX_TERM_SEL R_R1                             -to QSFP_4_RX[3]
+set_instance_assignment -name XCVR_A10_RX_ONE_STAGE_ENABLE NON_S1_MODE              -to QSFP_4_RX[3]
+set_instance_assignment -name XCVR_A10_RX_ADP_CTLE_ACGAIN_4S RADP_CTLE_ACGAIN_4S_12 -to QSFP_4_RX[3]
+set_instance_assignment -name XCVR_A10_RX_EQ_DC_GAIN_TRIM NO_DC_GAIN                -to QSFP_4_RX[3]
+set_instance_assignment -name XCVR_A10_RX_ADP_VGA_SEL RADP_VGA_SEL_4                -to QSFP_4_RX[3]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V                           -to QSFP_4_RX[3]
+
+
+# QSFP_4_TX
+set_location_assignment PIN_AA42 -to QSFP_4_TX[0]
+set_location_assignment PIN_Y44 -to QSFP_4_TX[1]
+set_location_assignment PIN_V44 -to QSFP_4_TX[2]
+set_location_assignment PIN_U42 -to QSFP_4_TX[3]
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O"                   -to QSFP_4_TX[0]
+set_instance_assignment -name XCVR_A10_TX_VOD_OUTPUT_SWING_CTRL 30                  -to QSFP_4_TX[0]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V                           -to QSFP_4_TX[0]
+set_instance_assignment -name XCVR_A10_TX_COMPENSATION_EN ENABLE                    -to QSFP_4_TX[0]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SWITCHING_CTRL_1ST_POST_TAP 0     -to QSFP_4_TX[0]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SIGN_1ST_POST_TAP FIR_POST_1T_POS -to QSFP_4_TX[0]
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O"                   -to QSFP_4_TX[1]
+set_instance_assignment -name XCVR_A10_TX_VOD_OUTPUT_SWING_CTRL 30                  -to QSFP_4_TX[1]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V                           -to QSFP_4_TX[1]
+set_instance_assignment -name XCVR_A10_TX_COMPENSATION_EN ENABLE                    -to QSFP_4_TX[1]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SWITCHING_CTRL_1ST_POST_TAP 0     -to QSFP_4_TX[1]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SIGN_1ST_POST_TAP FIR_POST_1T_POS -to QSFP_4_TX[1]
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O"                   -to QSFP_4_TX[2]
+set_instance_assignment -name XCVR_A10_TX_VOD_OUTPUT_SWING_CTRL 30                  -to QSFP_4_TX[2]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V                           -to QSFP_4_TX[2]
+set_instance_assignment -name XCVR_A10_TX_COMPENSATION_EN ENABLE                    -to QSFP_4_TX[2]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SWITCHING_CTRL_1ST_POST_TAP 0     -to QSFP_4_TX[2]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SIGN_1ST_POST_TAP FIR_POST_1T_POS -to QSFP_4_TX[2]
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O"                   -to QSFP_4_TX[3]
+set_instance_assignment -name XCVR_A10_TX_VOD_OUTPUT_SWING_CTRL 30                  -to QSFP_4_TX[3]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V                           -to QSFP_4_TX[3]
+set_instance_assignment -name XCVR_A10_TX_COMPENSATION_EN ENABLE                    -to QSFP_4_TX[3]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SWITCHING_CTRL_1ST_POST_TAP 0     -to QSFP_4_TX[3]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SIGN_1ST_POST_TAP FIR_POST_1T_POS -to QSFP_4_TX[3]
+
+# QSFP_5_RX
+set_location_assignment PIN_L38 -to QSFP_5_RX[0]
+set_location_assignment PIN_M40 -to QSFP_5_RX[1]
+set_location_assignment PIN_P40 -to QSFP_5_RX[2]
+set_location_assignment PIN_R38 -to QSFP_5_RX[3]
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O"                   -to QSFP_5_RX[0]
+set_instance_assignment -name XCVR_A10_RX_TERM_SEL R_R1                             -to QSFP_5_RX[0]
+set_instance_assignment -name XCVR_A10_RX_ONE_STAGE_ENABLE NON_S1_MODE              -to QSFP_5_RX[0]
+set_instance_assignment -name XCVR_A10_RX_ADP_CTLE_ACGAIN_4S RADP_CTLE_ACGAIN_4S_12 -to QSFP_5_RX[0]
+set_instance_assignment -name XCVR_A10_RX_EQ_DC_GAIN_TRIM NO_DC_GAIN                -to QSFP_5_RX[0]
+set_instance_assignment -name XCVR_A10_RX_ADP_VGA_SEL RADP_VGA_SEL_4                -to QSFP_5_RX[0]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V                           -to QSFP_5_RX[0]
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O"                   -to QSFP_5_RX[1]
+set_instance_assignment -name XCVR_A10_RX_TERM_SEL R_R1                             -to QSFP_5_RX[1]
+set_instance_assignment -name XCVR_A10_RX_ONE_STAGE_ENABLE NON_S1_MODE              -to QSFP_5_RX[1]
+set_instance_assignment -name XCVR_A10_RX_ADP_CTLE_ACGAIN_4S RADP_CTLE_ACGAIN_4S_12 -to QSFP_5_RX[1]
+set_instance_assignment -name XCVR_A10_RX_EQ_DC_GAIN_TRIM NO_DC_GAIN                -to QSFP_5_RX[1]
+set_instance_assignment -name XCVR_A10_RX_ADP_VGA_SEL RADP_VGA_SEL_4                -to QSFP_5_RX[1]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V                           -to QSFP_5_RX[1]
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O"                   -to QSFP_5_RX[2]
+set_instance_assignment -name XCVR_A10_RX_TERM_SEL R_R1                             -to QSFP_5_RX[2]
+set_instance_assignment -name XCVR_A10_RX_ONE_STAGE_ENABLE NON_S1_MODE              -to QSFP_5_RX[2]
+set_instance_assignment -name XCVR_A10_RX_ADP_CTLE_ACGAIN_4S RADP_CTLE_ACGAIN_4S_12 -to QSFP_5_RX[2]
+set_instance_assignment -name XCVR_A10_RX_EQ_DC_GAIN_TRIM NO_DC_GAIN                -to QSFP_5_RX[2]
+set_instance_assignment -name XCVR_A10_RX_ADP_VGA_SEL RADP_VGA_SEL_4                -to QSFP_5_RX[2]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V                           -to QSFP_5_RX[2]
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O"                   -to QSFP_5_RX[3]
+set_instance_assignment -name XCVR_A10_RX_TERM_SEL R_R1                             -to QSFP_5_RX[3]
+set_instance_assignment -name XCVR_A10_RX_ONE_STAGE_ENABLE NON_S1_MODE              -to QSFP_5_RX[3]
+set_instance_assignment -name XCVR_A10_RX_ADP_CTLE_ACGAIN_4S RADP_CTLE_ACGAIN_4S_12 -to QSFP_5_RX[3]
+set_instance_assignment -name XCVR_A10_RX_EQ_DC_GAIN_TRIM NO_DC_GAIN                -to QSFP_5_RX[3]
+set_instance_assignment -name XCVR_A10_RX_ADP_VGA_SEL RADP_VGA_SEL_4                -to QSFP_5_RX[3]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V                           -to QSFP_5_RX[3]
+
+
+# QSFP_5_TX
+set_location_assignment PIN_L42 -to QSFP_5_TX[0]
+set_location_assignment PIN_M44 -to QSFP_5_TX[1]
+set_location_assignment PIN_P44 -to QSFP_5_TX[2]
+set_location_assignment PIN_R42 -to QSFP_5_TX[3]
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O"                   -to QSFP_5_TX[0]
+set_instance_assignment -name XCVR_A10_TX_VOD_OUTPUT_SWING_CTRL 30                  -to QSFP_5_TX[0]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V                           -to QSFP_5_TX[0]
+set_instance_assignment -name XCVR_A10_TX_COMPENSATION_EN ENABLE                    -to QSFP_5_TX[0]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SWITCHING_CTRL_1ST_POST_TAP 0     -to QSFP_5_TX[0]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SIGN_1ST_POST_TAP FIR_POST_1T_POS -to QSFP_5_TX[0]
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O"                   -to QSFP_5_TX[1]
+set_instance_assignment -name XCVR_A10_TX_VOD_OUTPUT_SWING_CTRL 30                  -to QSFP_5_TX[1]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V                           -to QSFP_5_TX[1]
+set_instance_assignment -name XCVR_A10_TX_COMPENSATION_EN ENABLE                    -to QSFP_5_TX[1]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SWITCHING_CTRL_1ST_POST_TAP 0     -to QSFP_5_TX[1]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SIGN_1ST_POST_TAP FIR_POST_1T_POS -to QSFP_5_TX[1]
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O"                   -to QSFP_5_TX[2]
+set_instance_assignment -name XCVR_A10_TX_VOD_OUTPUT_SWING_CTRL 30                  -to QSFP_5_TX[2]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V                           -to QSFP_5_TX[2]
+set_instance_assignment -name XCVR_A10_TX_COMPENSATION_EN ENABLE                    -to QSFP_5_TX[2]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SWITCHING_CTRL_1ST_POST_TAP 0     -to QSFP_5_TX[2]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SIGN_1ST_POST_TAP FIR_POST_1T_POS -to QSFP_5_TX[2]
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O"                   -to QSFP_5_TX[3]
+set_instance_assignment -name XCVR_A10_TX_VOD_OUTPUT_SWING_CTRL 30                  -to QSFP_5_TX[3]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V                           -to QSFP_5_TX[3]
+set_instance_assignment -name XCVR_A10_TX_COMPENSATION_EN ENABLE                    -to QSFP_5_TX[3]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SWITCHING_CTRL_1ST_POST_TAP 0     -to QSFP_5_TX[3]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SIGN_1ST_POST_TAP FIR_POST_1T_POS -to QSFP_5_TX[3]
+
+
+
+set_location_assignment PIN_B9 -to BCK_RX[0]
+set_location_assignment PIN_D9 -to BCK_RX[1]
+set_location_assignment PIN_C11 -to BCK_RX[2]
+set_location_assignment PIN_F9 -to BCK_RX[3]
+set_location_assignment PIN_C7 -to BCK_RX[4]
+set_location_assignment PIN_E11 -to BCK_RX[5]
+set_location_assignment PIN_E7 -to BCK_RX[6]
+set_location_assignment PIN_D5 -to BCK_RX[7]
+set_location_assignment PIN_G7 -to BCK_RX[8]
+set_location_assignment PIN_F5 -to BCK_RX[9]
+set_location_assignment PIN_J7 -to BCK_RX[10]
+set_location_assignment PIN_H5 -to BCK_RX[11]
+set_location_assignment PIN_L7 -to BCK_RX[12]
+set_location_assignment PIN_K5 -to BCK_RX[13]
+set_location_assignment PIN_N7 -to BCK_RX[14]
+set_location_assignment PIN_M5 -to BCK_RX[15]
+set_location_assignment PIN_R7 -to BCK_RX[16]
+set_location_assignment PIN_P5 -to BCK_RX[17]
+set_location_assignment PIN_U7 -to BCK_RX[18]
+set_location_assignment PIN_T5 -to BCK_RX[19]
+set_location_assignment PIN_W7 -to BCK_RX[20]
+set_location_assignment PIN_V5 -to BCK_RX[21]
+set_location_assignment PIN_AA7 -to BCK_RX[22]
+set_location_assignment PIN_Y5 -to BCK_RX[23]
+set_location_assignment PIN_AC7 -to BCK_RX[24]
+set_location_assignment PIN_AB5 -to BCK_RX[25]
+set_location_assignment PIN_AE7 -to BCK_RX[26]
+set_location_assignment PIN_AD5 -to BCK_RX[27]
+set_location_assignment PIN_AG7 -to BCK_RX[28]
+set_location_assignment PIN_AF5 -to BCK_RX[29]
+set_location_assignment PIN_AJ7 -to BCK_RX[30]
+set_location_assignment PIN_AH5 -to BCK_RX[31]
+set_location_assignment PIN_AL7 -to BCK_RX[32]
+set_location_assignment PIN_AK5 -to BCK_RX[33]
+set_location_assignment PIN_AN7 -to BCK_RX[34]
+set_location_assignment PIN_AM5 -to BCK_RX[35]
+set_location_assignment PIN_AR7 -to BCK_RX[36]
+set_location_assignment PIN_AP5 -to BCK_RX[37]
+set_location_assignment PIN_AU7 -to BCK_RX[38]
+set_location_assignment PIN_AT5 -to BCK_RX[39]
+set_location_assignment PIN_AW7 -to BCK_RX[40]
+set_location_assignment PIN_AV5 -to BCK_RX[41]
+set_location_assignment PIN_BA7 -to BCK_RX[42]
+set_location_assignment PIN_AY5 -to BCK_RX[43]
+set_location_assignment PIN_BC7 -to BCK_RX[44]
+set_location_assignment PIN_BB5 -to BCK_RX[45]
+set_location_assignment PIN_AY9 -to BCK_RX[46]
+set_location_assignment PIN_BB9 -to BCK_RX[47]
+
+set_location_assignment PIN_B5 -to BCK_TX[0]
+set_location_assignment PIN_A3 -to BCK_TX[1]
+set_location_assignment PIN_A11 -to BCK_TX[2]
+set_location_assignment PIN_B1 -to BCK_TX[3]
+set_location_assignment PIN_C3 -to BCK_TX[4]
+set_location_assignment PIN_A7 -to BCK_TX[5]
+set_location_assignment PIN_D1 -to BCK_TX[6]
+set_location_assignment PIN_E3 -to BCK_TX[7]
+set_location_assignment PIN_F1 -to BCK_TX[8]
+set_location_assignment PIN_G3 -to BCK_TX[9]
+set_location_assignment PIN_J3 -to BCK_TX[10]
+set_location_assignment PIN_H1 -to BCK_TX[11]
+set_location_assignment PIN_L3 -to BCK_TX[12]
+set_location_assignment PIN_K1 -to BCK_TX[13]
+set_location_assignment PIN_N3 -to BCK_TX[14]
+set_location_assignment PIN_M1 -to BCK_TX[15]
+set_location_assignment PIN_R3 -to BCK_TX[16]
+set_location_assignment PIN_P1 -to BCK_TX[17]
+set_location_assignment PIN_U3 -to BCK_TX[18]
+set_location_assignment PIN_T1 -to BCK_TX[19]
+set_location_assignment PIN_W3 -to BCK_TX[20]
+set_location_assignment PIN_V1 -to BCK_TX[21]
+set_location_assignment PIN_AA3 -to BCK_TX[22]
+set_location_assignment PIN_Y1 -to BCK_TX[23]
+set_location_assignment PIN_AC3 -to BCK_TX[24]
+set_location_assignment PIN_AB1 -to BCK_TX[25]
+set_location_assignment PIN_AE3 -to BCK_TX[26]
+set_location_assignment PIN_AD1 -to BCK_TX[27]
+set_location_assignment PIN_AG3 -to BCK_TX[28]
+set_location_assignment PIN_AF1 -to BCK_TX[29]
+set_location_assignment PIN_AJ3 -to BCK_TX[30]
+set_location_assignment PIN_AH1 -to BCK_TX[31]
+set_location_assignment PIN_AL3 -to BCK_TX[32]
+set_location_assignment PIN_AK1 -to BCK_TX[33]
+set_location_assignment PIN_AN3 -to BCK_TX[34]
+set_location_assignment PIN_AM1 -to BCK_TX[35]
+set_location_assignment PIN_AR3 -to BCK_TX[36]
+set_location_assignment PIN_AP1 -to BCK_TX[37]
+set_location_assignment PIN_AU3 -to BCK_TX[38]
+set_location_assignment PIN_AT1 -to BCK_TX[39]
+set_location_assignment PIN_AW3 -to BCK_TX[40]
+set_location_assignment PIN_AV1 -to BCK_TX[41]
+set_location_assignment PIN_BB1 -to BCK_TX[42]
+set_location_assignment PIN_AY1 -to BCK_TX[43]
+set_location_assignment PIN_BD5 -to BCK_TX[44]
+set_location_assignment PIN_BA3 -to BCK_TX[45]
+set_location_assignment PIN_BC3 -to BCK_TX[46]
+set_location_assignment PIN_BD9 -to BCK_TX[47]
+
+set_location_assignment PIN_AP40 -to RING_0_RX[0]
+set_location_assignment PIN_AR38 -to RING_0_RX[1]
+set_location_assignment PIN_AT40 -to RING_0_RX[2]
+set_location_assignment PIN_AU38 -to RING_0_RX[3]
+set_location_assignment PIN_AP44 -to RING_0_TX[0]
+set_location_assignment PIN_AR42 -to RING_0_TX[1]
+set_location_assignment PIN_AT44 -to RING_0_TX[2]
+set_location_assignment PIN_AU42 -to RING_0_TX[3]
+set_location_assignment PIN_H40 -to RING_1_RX[0]
+set_location_assignment PIN_J38 -to RING_1_RX[1]
+set_location_assignment PIN_F40 -to RING_1_RX[2]
+set_location_assignment PIN_G38 -to RING_1_RX[3]
+set_location_assignment PIN_H44 -to RING_1_TX[0]
+set_location_assignment PIN_J42 -to RING_1_TX[1]
+set_location_assignment PIN_G42 -to RING_1_TX[2]
+set_location_assignment PIN_F44 -to RING_1_TX[3]
+
+set_location_assignment PIN_AV40 -to RING_0_RX[4]
+set_location_assignment PIN_AW38 -to RING_0_RX[5]
+set_location_assignment PIN_AY40 -to RING_0_RX[6]
+set_location_assignment PIN_BA38 -to RING_0_RX[7]
+set_location_assignment PIN_BB40 -to RING_0_RX[8]
+set_location_assignment PIN_BC38 -to RING_0_RX[9]
+set_location_assignment PIN_AY36 -to RING_0_RX[10]
+set_location_assignment PIN_BB36 -to RING_0_RX[11]
+set_location_assignment PIN_AV44 -to RING_0_TX[4]
+set_location_assignment PIN_AW42 -to RING_0_TX[5]
+set_location_assignment PIN_AY44 -to RING_0_TX[6]
+set_location_assignment PIN_BB44 -to RING_0_TX[7]
+set_location_assignment PIN_BA42 -to RING_0_TX[8]
+set_location_assignment PIN_BD40 -to RING_0_TX[9]
+set_location_assignment PIN_BC42 -to RING_0_TX[10]
+set_location_assignment PIN_BD36 -to RING_0_TX[11]
+set_location_assignment PIN_D40 -to RING_1_RX[4]
+set_location_assignment PIN_E38 -to RING_1_RX[5]
+set_location_assignment PIN_F36 -to RING_1_RX[6]
+set_location_assignment PIN_C38 -to RING_1_RX[7]
+set_location_assignment PIN_B36 -to RING_1_RX[8]
+set_location_assignment PIN_D36 -to RING_1_RX[9]
+set_location_assignment PIN_E34 -to RING_1_RX[10]
+set_location_assignment PIN_C34 -to RING_1_RX[11]
+set_location_assignment PIN_E42 -to RING_1_TX[4]
+set_location_assignment PIN_D44 -to RING_1_TX[5]
+set_location_assignment PIN_B44 -to RING_1_TX[6]
+set_location_assignment PIN_C42 -to RING_1_TX[7]
+set_location_assignment PIN_B40 -to RING_1_TX[8]
+set_location_assignment PIN_A42 -to RING_1_TX[9]
+set_location_assignment PIN_A38 -to RING_1_TX[10]
+set_location_assignment PIN_A34 -to RING_1_TX[11]
+
+
+
+
+#set_location_assignment PIN_BA25 -to PMBUS_SC
+#set_location_assignment PIN_BD25 -to PMBUS_SD
+#set_location_assignment PIN_BD26 -to PMBUS_ALERT
+#set_instance_assignment -name IO_STANDARD "1.2 V" -to PMBUS_SC
+#set_instance_assignment -name IO_STANDARD "1.2 V" -to PMBUS_SD
+#set_instance_assignment -name IO_STANDARD "1.2 V" -to PMBUS_ALERT
+
+
+
+
+set_location_assignment PIN_R14 -to BCK_SCL[0]
+set_location_assignment PIN_Y13 -to BCK_SCL[1]
+set_location_assignment PIN_U14 -to BCK_SCL[2]
+set_location_assignment PIN_P14 -to BCK_SDA[0]
+set_location_assignment PIN_T12 -to BCK_SDA[1]
+set_location_assignment PIN_V12 -to BCK_SDA[2]
+
+set_location_assignment PIN_AT31 -to QSFP_RST
+
+set_location_assignment PIN_AY33 -to QSFP_SCL[0]
+set_location_assignment PIN_AY32 -to QSFP_SCL[1]
+set_location_assignment PIN_AY30 -to QSFP_SCL[2]
+set_location_assignment PIN_AN33 -to QSFP_SCL[3]
+set_location_assignment PIN_AN31 -to QSFP_SCL[4]
+set_location_assignment PIN_AJ33 -to QSFP_SCL[5]
+set_location_assignment PIN_BA32 -to QSFP_SDA[0]
+set_location_assignment PIN_BA31 -to QSFP_SDA[1]
+set_location_assignment PIN_AP33 -to QSFP_SDA[2]
+set_location_assignment PIN_AM33 -to QSFP_SDA[3]
+set_location_assignment PIN_AK33 -to QSFP_SDA[4]
+set_location_assignment PIN_AH32 -to QSFP_SDA[5]
+set_location_assignment PIN_M13 -to BCK_ERR[0]
+set_location_assignment PIN_R13 -to BCK_ERR[1]
+set_location_assignment PIN_U12 -to BCK_ERR[2]
+
+set_instance_assignment -name IO_STANDARD "1.8 V" -to QSFP_SDA[5]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to QSFP_SCL[5]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to BCK_SDA[0]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to BCK_SCL[0]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to BCK_SDA[1]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to BCK_SCL[1]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to BCK_SDA[2]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to BCK_SCL[2]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to QSFP_SDA[0]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to QSFP_SDA[1]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to QSFP_SCL[0]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to QSFP_SCL[1]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to QSFP_SDA[2]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to QSFP_SDA[3]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to QSFP_SDA[4]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to QSFP_SCL[2]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to QSFP_SCL[3]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to QSFP_SCL[4]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to QSFP_RST
+set_instance_assignment -name IO_STANDARD "1.8 V" -to BCK_ERR[0]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to BCK_ERR[1]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to BCK_ERR[2]
+
diff --git a/boards/uniboard2a/libraries/unb2a_board/quartus/pinning/unb2_ddr_pins.tcl b/boards/uniboard2a/libraries/unb2a_board/quartus/pinning/unb2_ddr_pins.tcl
new file mode 100644
index 0000000000000000000000000000000000000000..cef7b7858770b1a9604b77770737eb1b4bfa2e08
--- /dev/null
+++ b/boards/uniboard2a/libraries/unb2a_board/quartus/pinning/unb2_ddr_pins.tcl
@@ -0,0 +1,561 @@
+# module I:
+set_location_assignment PIN_AP20 -to MB_I_OU.a[0]
+set_location_assignment PIN_AR20 -to MB_I_OU.a[1]
+set_location_assignment PIN_AP19 -to MB_I_OU.a[2]
+set_location_assignment PIN_AR19 -to MB_I_OU.a[3]
+set_location_assignment PIN_AR18 -to MB_I_OU.a[4]
+set_location_assignment PIN_AT17 -to MB_I_OU.a[5]
+set_location_assignment PIN_AU19 -to MB_I_OU.a[6]
+set_location_assignment PIN_AT18 -to MB_I_OU.a[7]
+set_location_assignment PIN_AL17 -to MB_I_OU.a[8]
+set_location_assignment PIN_AM18 -to MB_I_OU.a[9]
+set_location_assignment PIN_AM19 -to MB_I_OU.a[10]
+set_location_assignment PIN_AN19 -to MB_I_OU.a[11]
+set_location_assignment PIN_BA17 -to MB_I_OU.a[12]
+set_location_assignment PIN_BD17 -to MB_I_OU.a[13]
+set_location_assignment PIN_AY18 -to MB_I_OU.act_n
+set_location_assignment PIN_AV29 -to MB_I_IN.alert_n
+set_location_assignment PIN_BB16 -to MB_I_OU.ba[0]
+set_location_assignment PIN_BD16 -to MB_I_OU.ba[1]
+set_location_assignment PIN_BC16 -to MB_I_OU.bg[0]
+set_location_assignment PIN_AW19 -to MB_I_OU.bg[1]
+set_location_assignment PIN_BA15 -to MB_I_OU.a[15] 
+set_location_assignment PIN_BC21 -to MB_I_IO.dq[64]   
+set_location_assignment PIN_BA22 -to MB_I_IO.dq[65]   
+set_location_assignment PIN_BD21 -to MB_I_IO.dq[66]   
+set_location_assignment PIN_BB20 -to MB_I_IO.dq[67]   
+set_location_assignment PIN_BA20 -to MB_I_IO.dq[68]   
+set_location_assignment PIN_BD20 -to MB_I_IO.dq[69]   
+set_location_assignment PIN_AY20 -to MB_I_IO.dq[70]   
+set_location_assignment PIN_AY22 -to MB_I_IO.dq[71]   
+set_location_assignment PIN_AU18 -to MB_I_OU.ck[0]    
+#set_location_assignment PIN_AV18 -to MB_I_OU.ck_n[0]
+set_location_assignment PIN_AT16 -to MB_I_OU.ck[1]
+#set_location_assignment PIN_AU16 -to MB_I_OU.ck_n[1]
+set_location_assignment PIN_BB19 -to MB_I_OU.cke[0]
+set_location_assignment PIN_AP16 -to MB_I_OU.cke[1]
+set_location_assignment PIN_AY19 -to MB_I_OU.cs_n[0]
+set_location_assignment PIN_AN16 -to MB_I_OU.cs_n[1]
+set_location_assignment PIN_BC29 -to MB_I_IO.dbi_n[0] 
+set_location_assignment PIN_AR27 -to MB_I_IO.dbi_n[1] 
+set_location_assignment PIN_BD24 -to MB_I_IO.dbi_n[2] 
+set_location_assignment PIN_AM23 -to MB_I_IO.dbi_n[3] 
+set_location_assignment PIN_AU12 -to MB_I_IO.dbi_n[4] 
+set_location_assignment PIN_AU13 -to MB_I_IO.dbi_n[5] 
+set_location_assignment PIN_AM14 -to MB_I_IO.dbi_n[6] 
+set_location_assignment PIN_AM16 -to MB_I_IO.dbi_n[7] 
+set_location_assignment PIN_BA21 -to MB_I_IO.dbi_n[8] 
+set_location_assignment PIN_BA28 -to MB_I_IO.dqs[0]
+set_location_assignment PIN_AM28 -to MB_I_IO.dqs[1]
+set_location_assignment PIN_AV24 -to MB_I_IO.dqs[2]
+set_location_assignment PIN_AN24 -to MB_I_IO.dqs[3]
+set_location_assignment PIN_BC14 -to MB_I_IO.dqs[4]
+set_location_assignment PIN_AW14 -to MB_I_IO.dqs[5]
+set_location_assignment PIN_AN12 -to MB_I_IO.dqs[6]
+set_location_assignment PIN_AK15 -to MB_I_IO.dqs[7]
+set_location_assignment PIN_BC22 -to MB_I_IO.dqs[8]
+
+set_location_assignment PIN_BD19 -to MB_I_OU.odt[0]
+set_location_assignment PIN_AR17 -to MB_I_OU.odt[1]
+set_location_assignment PIN_BC18 -to MB_I_OU.par
+set_location_assignment PIN_BB15 -to MB_I_OU.a[16]
+
+set_location_assignment PIN_AW17 -to MB_I_REF_CLK
+
+set_location_assignment PIN_AV19 -to MB_I_OU.reset_n
+set_location_assignment PIN_AY17 -to MB_I_IN.oct_rzqin
+set_location_assignment PIN_BC17 -to MB_I_OU.a[14]   
+
+
+set_instance_assignment -name IO_STANDARD "SSTL-12" -to MB_I_OU.cke[1]
+set_instance_assignment -name IO_STANDARD "SSTL-12" -to MB_I_OU.cs_n[1]
+set_instance_assignment -name IO_STANDARD "SSTL-12" -to MB_I_OU.odt[1]
+set_instance_assignment -name IO_STANDARD "1.2 V" -to MB_I_REF_CLK
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IN.oct_rzqin
+
+set_instance_assignment -name IO_STANDARD "SSTL-12" -to MB_I_OU.a[0]
+set_instance_assignment -name IO_STANDARD "SSTL-12" -to MB_I_OU.a[1]
+set_instance_assignment -name IO_STANDARD "SSTL-12" -to MB_I_OU.a[2]
+set_instance_assignment -name IO_STANDARD "SSTL-12" -to MB_I_OU.a[3]
+set_instance_assignment -name IO_STANDARD "SSTL-12" -to MB_I_OU.a[4]
+set_instance_assignment -name IO_STANDARD "SSTL-12" -to MB_I_OU.a[5]
+set_instance_assignment -name IO_STANDARD "SSTL-12" -to MB_I_OU.a[6]
+set_instance_assignment -name IO_STANDARD "SSTL-12" -to MB_I_OU.a[7]
+set_instance_assignment -name IO_STANDARD "SSTL-12" -to MB_I_OU.a[8]
+set_instance_assignment -name IO_STANDARD "SSTL-12" -to MB_I_OU.a[9]
+set_instance_assignment -name IO_STANDARD "SSTL-12" -to MB_I_OU.a[10]
+set_instance_assignment -name IO_STANDARD "SSTL-12" -to MB_I_OU.a[11]
+set_instance_assignment -name IO_STANDARD "SSTL-12" -to MB_I_OU.a[12]
+set_instance_assignment -name IO_STANDARD "SSTL-12" -to MB_I_OU.a[13]
+set_instance_assignment -name IO_STANDARD "SSTL-12" -to MB_I_OU.act_n
+set_instance_assignment -name IO_STANDARD "SSTL-12" -to MB_I_OU.ba[0]
+set_instance_assignment -name IO_STANDARD "SSTL-12" -to MB_I_OU.ba[1]
+set_instance_assignment -name IO_STANDARD "SSTL-12" -to MB_I_OU.bg[0]
+set_instance_assignment -name IO_STANDARD "SSTL-12" -to MB_I_OU.bg[1]
+set_instance_assignment -name IO_STANDARD "SSTL-12" -to MB_I_OU.a[15]
+set_instance_assignment -name IO_STANDARD "DIFFERENTIAL 1.2-V SSTL" -to MB_I_OU.ck[0]
+set_instance_assignment -name IO_STANDARD "DIFFERENTIAL 1.2-V SSTL" -to MB_I_OU.ck[1]
+set_instance_assignment -name IO_STANDARD "SSTL-12" -to MB_I_OU.cke[0]
+set_instance_assignment -name IO_STANDARD "SSTL-12" -to MB_I_OU.cs_n[0]
+set_instance_assignment -name IO_STANDARD "SSTL-12" -to MB_I_OU.par
+set_instance_assignment -name IO_STANDARD "SSTL-12" -to MB_I_OU.a[16]
+set_instance_assignment -name IO_STANDARD "1.2 V" -to MB_I_OU.reset_n
+set_instance_assignment -name IO_STANDARD "SSTL-12" -to MB_I_OU.a[14]
+set_instance_assignment -name IO_STANDARD "SSTL-12" -to MB_I_OU.odt[0]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IN.alert_n
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[64]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[65]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[66]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[67]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[68]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[69]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[70]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[71]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dbi_n[0]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dbi_n[1]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dbi_n[2]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dbi_n[3]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dbi_n[4]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dbi_n[5]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dbi_n[6]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dbi_n[7]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dbi_n[8]
+
+set_instance_assignment -name IO_STANDARD "DIFFERENTIAL 1.2-V POD" -to MB_I_IO.dqs[0]
+set_instance_assignment -name IO_STANDARD "DIFFERENTIAL 1.2-V POD" -to MB_I_IO.dqs[1]
+set_instance_assignment -name IO_STANDARD "DIFFERENTIAL 1.2-V POD" -to MB_I_IO.dqs[2]
+set_instance_assignment -name IO_STANDARD "DIFFERENTIAL 1.2-V POD" -to MB_I_IO.dqs[3]
+set_instance_assignment -name IO_STANDARD "DIFFERENTIAL 1.2-V POD" -to MB_I_IO.dqs[4]
+set_instance_assignment -name IO_STANDARD "DIFFERENTIAL 1.2-V POD" -to MB_I_IO.dqs[5]
+set_instance_assignment -name IO_STANDARD "DIFFERENTIAL 1.2-V POD" -to MB_I_IO.dqs[6]
+set_instance_assignment -name IO_STANDARD "DIFFERENTIAL 1.2-V POD" -to MB_I_IO.dqs[7]
+set_instance_assignment -name IO_STANDARD "DIFFERENTIAL 1.2-V POD" -to MB_I_IO.dqs[8]
+
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[0]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[1]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[2]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[3]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[4]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[5]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[6]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[7]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[8]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[9]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[10]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[11]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[12]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[13]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[14]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[15]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[16]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[17]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[18]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[19]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[20]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[21]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[22]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[23]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[24]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[25]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[26]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[27]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[28]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[29]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[30]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[31]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[32]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[33]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[34]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[35]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[36]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[37]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[38]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[39]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[40]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[41]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[42]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[43]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[44]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[45]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[46]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[47]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[48]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[49]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[50]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[51]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[52]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[53]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[54]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[55]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[56]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[57]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[58]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[59]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[60]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[61]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[62]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_I_IO.dq[63]
+
+# locations changed 30 sept
+set_location_assignment PIN_Y12 -to MB_SCL
+set_location_assignment PIN_AA12 -to MB_SDA
+set_location_assignment PIN_M16 -to MB_I_IN.evt
+
+
+set_location_assignment PIN_AU29 -to MB_I_IO.dq[0]
+set_location_assignment PIN_BC28 -to MB_I_IO.dq[1]
+set_location_assignment PIN_AY29 -to MB_I_IO.dq[2]
+set_location_assignment PIN_BB28 -to MB_I_IO.dq[3]
+set_location_assignment PIN_BB29 -to MB_I_IO.dq[4]
+set_location_assignment PIN_AW29 -to MB_I_IO.dq[5]
+set_location_assignment PIN_BC27 -to MB_I_IO.dq[6]
+set_location_assignment PIN_BD29 -to MB_I_IO.dq[7]
+set_location_assignment PIN_AR28 -to MB_I_IO.dq[8]
+set_location_assignment PIN_AR29 -to MB_I_IO.dq[9]
+set_location_assignment PIN_AV27 -to MB_I_IO.dq[10]
+set_location_assignment PIN_AU28 -to MB_I_IO.dq[11]
+set_location_assignment PIN_AW27 -to MB_I_IO.dq[12]
+set_location_assignment PIN_AT28 -to MB_I_IO.dq[13]
+set_location_assignment PIN_AV28 -to MB_I_IO.dq[14]
+set_location_assignment PIN_AP27 -to MB_I_IO.dq[15]
+set_location_assignment PIN_BC24 -to MB_I_IO.dq[16]
+set_location_assignment PIN_BB24 -to MB_I_IO.dq[17]
+set_location_assignment PIN_BB23 -to MB_I_IO.dq[18]
+set_location_assignment PIN_AW22 -to MB_I_IO.dq[19]
+set_location_assignment PIN_BA23 -to MB_I_IO.dq[20]
+set_location_assignment PIN_BC23 -to MB_I_IO.dq[21]
+set_location_assignment PIN_AY23 -to MB_I_IO.dq[22]
+set_location_assignment PIN_AY24 -to MB_I_IO.dq[23]
+set_location_assignment PIN_AP22 -to MB_I_IO.dq[24]
+set_location_assignment PIN_AN23 -to MB_I_IO.dq[25]
+set_location_assignment PIN_AR23 -to MB_I_IO.dq[26]
+set_location_assignment PIN_AT23 -to MB_I_IO.dq[27]
+set_location_assignment PIN_AU23 -to MB_I_IO.dq[28]
+set_location_assignment PIN_AV23 -to MB_I_IO.dq[29]
+set_location_assignment PIN_AR24 -to MB_I_IO.dq[30]
+set_location_assignment PIN_AP24 -to MB_I_IO.dq[31]
+set_location_assignment PIN_AV12 -to MB_I_IO.dq[32]
+set_location_assignment PIN_AY13 -to MB_I_IO.dq[33]
+set_location_assignment PIN_BD14 -to MB_I_IO.dq[34]
+set_location_assignment PIN_AY12 -to MB_I_IO.dq[35]
+set_location_assignment PIN_BA13 -to MB_I_IO.dq[36]
+set_location_assignment PIN_BA12 -to MB_I_IO.dq[37]
+set_location_assignment PIN_AW12 -to MB_I_IO.dq[38]
+set_location_assignment PIN_BB13 -to MB_I_IO.dq[39]
+set_location_assignment PIN_AV13 -to MB_I_IO.dq[40]
+set_location_assignment PIN_AR13 -to MB_I_IO.dq[41]
+set_location_assignment PIN_AR15 -to MB_I_IO.dq[42]
+set_location_assignment PIN_AP15 -to MB_I_IO.dq[43]
+set_location_assignment PIN_AT15 -to MB_I_IO.dq[44]
+set_location_assignment PIN_AU14 -to MB_I_IO.dq[45]
+set_location_assignment PIN_AU15 -to MB_I_IO.dq[46]
+set_location_assignment PIN_AV14 -to MB_I_IO.dq[47]
+set_location_assignment PIN_AM13 -to MB_I_IO.dq[48]
+set_location_assignment PIN_AT13 -to MB_I_IO.dq[49]
+set_location_assignment PIN_AT12 -to MB_I_IO.dq[50]
+set_location_assignment PIN_AP14 -to MB_I_IO.dq[51]
+set_location_assignment PIN_AN13 -to MB_I_IO.dq[52]
+set_location_assignment PIN_AK13 -to MB_I_IO.dq[53]
+set_location_assignment PIN_AM12 -to MB_I_IO.dq[54]
+set_location_assignment PIN_AL13 -to MB_I_IO.dq[55]
+set_location_assignment PIN_AH13 -to MB_I_IO.dq[56]
+set_location_assignment PIN_AL15 -to MB_I_IO.dq[57]
+set_location_assignment PIN_AM15 -to MB_I_IO.dq[58]
+set_location_assignment PIN_AJ14 -to MB_I_IO.dq[59]
+set_location_assignment PIN_AJ12 -to MB_I_IO.dq[60]
+set_location_assignment PIN_AL16 -to MB_I_IO.dq[61]
+set_location_assignment PIN_AK12 -to MB_I_IO.dq[62]
+set_location_assignment PIN_AH14 -to MB_I_IO.dq[63]
+set_location_assignment PIN_AY28 -to MB_I_IO.dqs_n[0]
+set_location_assignment PIN_AN28 -to MB_I_IO.dqs_n[1]
+set_location_assignment PIN_AU24 -to MB_I_IO.dqs_n[2]
+set_location_assignment PIN_AM24 -to MB_I_IO.dqs_n[3]
+set_location_assignment PIN_BB14 -to MB_I_IO.dqs_n[4]
+set_location_assignment PIN_AY14 -to MB_I_IO.dqs_n[5]
+set_location_assignment PIN_AP12 -to MB_I_IO.dqs_n[6]
+set_location_assignment PIN_AK14 -to MB_I_IO.dqs_n[7]
+set_location_assignment PIN_BD22 -to MB_I_IO.dqs_n[8]
+
+
+
+
+
+# module II:
+set_location_assignment PIN_A29 -to MB_II_OU.a[0]
+set_location_assignment PIN_B29 -to MB_II_OU.a[1]
+set_location_assignment PIN_H29 -to MB_II_OU.a[2]
+set_location_assignment PIN_G29 -to MB_II_OU.a[3]
+set_location_assignment PIN_D29 -to MB_II_OU.a[4]
+set_location_assignment PIN_E29 -to MB_II_OU.a[5]
+set_location_assignment PIN_C29 -to MB_II_OU.a[6]
+set_location_assignment PIN_C28 -to MB_II_OU.a[7]
+set_location_assignment PIN_E30 -to MB_II_OU.a[8]
+set_location_assignment PIN_D30 -to MB_II_OU.a[9]
+set_location_assignment PIN_B28 -to MB_II_OU.a[10]
+set_location_assignment PIN_A28 -to MB_II_OU.a[11]
+set_location_assignment PIN_H27 -to MB_II_OU.a[12]
+set_location_assignment PIN_E28 -to MB_II_OU.a[13]
+set_location_assignment PIN_K28 -to MB_II_OU.act_n
+set_location_assignment PIN_C16 -to MB_II_IN.alert_n
+set_location_assignment PIN_C27 -to MB_II_OU.ba[0]
+set_location_assignment PIN_A27 -to MB_II_OU.ba[1]
+set_location_assignment PIN_B26 -to MB_II_OU.bg[0]
+set_location_assignment PIN_L27 -to MB_II_OU.bg[1]
+set_location_assignment PIN_F28 -to MB_II_OU.a[15]    
+set_location_assignment PIN_E24 -to MB_II_IO.dq[64]   
+set_location_assignment PIN_J25 -to MB_II_IO.dq[65]   
+set_location_assignment PIN_A25 -to MB_II_IO.dq[66]   
+set_location_assignment PIN_G25 -to MB_II_IO.dq[67]   
+set_location_assignment PIN_D25 -to MB_II_IO.dq[68]   
+set_location_assignment PIN_K25 -to MB_II_IO.dq[69]   
+set_location_assignment PIN_D24 -to MB_II_IO.dq[70]   
+set_location_assignment PIN_F25 -to MB_II_IO.dq[71]   
+set_location_assignment PIN_N27 -to MB_II_OU.ck[0]    
+#set_location_assignment PIN_M28 -to MB_II_OU.ck_n[0]  ;#
+set_location_assignment PIN_K27 -to MB_II_OU.ck[1]    
+#set_location_assignment PIN_J26 -to MB_II_OU.ck_n[1]  ;#
+set_location_assignment PIN_N28 -to MB_II_OU.cke[0]   
+set_location_assignment PIN_P26 -to MB_II_OU.cke[1]   
+set_location_assignment PIN_K29 -to MB_II_OU.cs_n[0]  
+set_location_assignment PIN_H26 -to MB_II_OU.cs_n[1]  
+set_location_assignment PIN_A16 -to MB_II_IO.dbi_n[0] 
+set_location_assignment PIN_M21 -to MB_II_IO.dbi_n[1] 
+set_location_assignment PIN_K22 -to MB_II_IO.dbi_n[2] 
+set_location_assignment PIN_D19 -to MB_II_IO.dbi_n[3] 
+set_location_assignment PIN_G30 -to MB_II_IO.dbi_n[4] 
+set_location_assignment PIN_R32 -to MB_II_IO.dbi_n[5] 
+set_location_assignment PIN_G32 -to MB_II_IO.dbi_n[6] 
+set_location_assignment PIN_AC32 -to MB_II_IO.dbi_n[7]
+set_location_assignment PIN_E25 -to MB_II_IO.dbi_n[8] 
+set_location_assignment PIN_F17 -to MB_II_IO.dqs[0]
+set_location_assignment PIN_L20 -to MB_II_IO.dqs[1]
+set_location_assignment PIN_J22 -to MB_II_IO.dqs[2]
+set_location_assignment PIN_B19 -to MB_II_IO.dqs[3]
+set_location_assignment PIN_L31 -to MB_II_IO.dqs[4]
+set_location_assignment PIN_P31 -to MB_II_IO.dqs[5]
+set_location_assignment PIN_N33 -to MB_II_IO.dqs[6]
+set_location_assignment PIN_T33 -to MB_II_IO.dqs[7]
+set_location_assignment PIN_A26 -to MB_II_IO.dqs[8]
+
+set_location_assignment PIN_K30 -to MB_II_OU.odt[0]
+set_location_assignment PIN_R27 -to MB_II_OU.odt[1]
+set_location_assignment PIN_R28 -to MB_II_OU.par
+set_location_assignment PIN_G28 -to MB_II_OU.a[16]
+
+set_location_assignment PIN_J29 -to MB_II_REF_CLK
+
+set_location_assignment PIN_L28 -to MB_II_OU.reset_n
+set_location_assignment PIN_J27 -to MB_II_IN.oct_rzqin
+set_location_assignment PIN_F27 -to MB_II_OU.a[14]
+
+
+set_instance_assignment -name IO_STANDARD "SSTL-12" -to MB_II_OU.cke[1]
+set_instance_assignment -name IO_STANDARD "SSTL-12" -to MB_II_OU.cs_n[1]
+set_instance_assignment -name IO_STANDARD "SSTL-12" -to MB_II_OU.odt[1]
+set_instance_assignment -name IO_STANDARD "1.2 V" -to MB_II_REF_CLK ;#
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IN.oct_rzqin ;#
+
+set_instance_assignment -name IO_STANDARD "SSTL-12" -to MB_II_OU.a[0]
+set_instance_assignment -name IO_STANDARD "SSTL-12" -to MB_II_OU.a[1]
+set_instance_assignment -name IO_STANDARD "SSTL-12" -to MB_II_OU.a[2]
+set_instance_assignment -name IO_STANDARD "SSTL-12" -to MB_II_OU.a[3]
+set_instance_assignment -name IO_STANDARD "SSTL-12" -to MB_II_OU.a[4]
+set_instance_assignment -name IO_STANDARD "SSTL-12" -to MB_II_OU.a[5]
+set_instance_assignment -name IO_STANDARD "SSTL-12" -to MB_II_OU.a[6]
+set_instance_assignment -name IO_STANDARD "SSTL-12" -to MB_II_OU.a[7]
+set_instance_assignment -name IO_STANDARD "SSTL-12" -to MB_II_OU.a[8]
+set_instance_assignment -name IO_STANDARD "SSTL-12" -to MB_II_OU.a[9]
+set_instance_assignment -name IO_STANDARD "SSTL-12" -to MB_II_OU.a[10]
+set_instance_assignment -name IO_STANDARD "SSTL-12" -to MB_II_OU.a[11]
+set_instance_assignment -name IO_STANDARD "SSTL-12" -to MB_II_OU.a[12]
+set_instance_assignment -name IO_STANDARD "SSTL-12" -to MB_II_OU.a[13]
+set_instance_assignment -name IO_STANDARD "SSTL-12" -to MB_II_OU.act_n
+set_instance_assignment -name IO_STANDARD "SSTL-12" -to MB_II_OU.ba[0]
+set_instance_assignment -name IO_STANDARD "SSTL-12" -to MB_II_OU.ba[1]
+set_instance_assignment -name IO_STANDARD "SSTL-12" -to MB_II_OU.bg[0]
+set_instance_assignment -name IO_STANDARD "SSTL-12" -to MB_II_OU.bg[1]
+set_instance_assignment -name IO_STANDARD "SSTL-12" -to MB_II_OU.a[15]
+set_instance_assignment -name IO_STANDARD "DIFFERENTIAL 1.2-V SSTL" -to MB_II_OU.ck[0]
+set_instance_assignment -name IO_STANDARD "DIFFERENTIAL 1.2-V SSTL" -to MB_II_OU.ck[1]
+set_instance_assignment -name IO_STANDARD "SSTL-12" -to MB_II_OU.cke[0]
+set_instance_assignment -name IO_STANDARD "SSTL-12" -to MB_II_OU.cs_n[0]
+set_instance_assignment -name IO_STANDARD "SSTL-12" -to MB_II_OU.par
+set_instance_assignment -name IO_STANDARD "SSTL-12" -to MB_II_OU.a[16]
+set_instance_assignment -name IO_STANDARD "1.2 V" -to MB_II_OU.reset_n ;#
+set_instance_assignment -name IO_STANDARD "SSTL-12" -to MB_II_OU.a[14]
+set_instance_assignment -name IO_STANDARD "SSTL-12" -to MB_II_OU.odt[0]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IN.alert_n ;#
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[64]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[65]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[66]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[67]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[68]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[69]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[70]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[71]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dbi_n[0]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dbi_n[1]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dbi_n[2]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dbi_n[3]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dbi_n[4]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dbi_n[5]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dbi_n[6]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dbi_n[7]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dbi_n[8]
+
+set_instance_assignment -name IO_STANDARD "DIFFERENTIAL 1.2-V POD" -to MB_II_IO.dqs[0]
+set_instance_assignment -name IO_STANDARD "DIFFERENTIAL 1.2-V POD" -to MB_II_IO.dqs[1]
+set_instance_assignment -name IO_STANDARD "DIFFERENTIAL 1.2-V POD" -to MB_II_IO.dqs[2]
+set_instance_assignment -name IO_STANDARD "DIFFERENTIAL 1.2-V POD" -to MB_II_IO.dqs[3]
+set_instance_assignment -name IO_STANDARD "DIFFERENTIAL 1.2-V POD" -to MB_II_IO.dqs[4]
+set_instance_assignment -name IO_STANDARD "DIFFERENTIAL 1.2-V POD" -to MB_II_IO.dqs[5]
+set_instance_assignment -name IO_STANDARD "DIFFERENTIAL 1.2-V POD" -to MB_II_IO.dqs[6]
+set_instance_assignment -name IO_STANDARD "DIFFERENTIAL 1.2-V POD" -to MB_II_IO.dqs[7]
+set_instance_assignment -name IO_STANDARD "DIFFERENTIAL 1.2-V POD" -to MB_II_IO.dqs[8]
+
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[0]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[1]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[2]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[3]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[4]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[5]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[6]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[7]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[8]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[9]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[10]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[11]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[12]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[13]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[14]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[15]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[16]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[17]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[18]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[19]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[20]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[21]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[22]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[23]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[24]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[25]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[26]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[27]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[28]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[29]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[30]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[31]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[32]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[33]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[34]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[35]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[36]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[37]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[38]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[39]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[40]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[41]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[42]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[43]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[44]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[45]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[46]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[47]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[48]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[49]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[50]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[51]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[52]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[53]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[54]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[55]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[56]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[57]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[58]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[59]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[60]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[61]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[62]
+set_instance_assignment -name IO_STANDARD "1.2-V POD" -to MB_II_IO.dq[63]
+
+
+
+
+set_location_assignment PIN_A17 -to MB_II_IO.dq[0]
+set_location_assignment PIN_B16 -to MB_II_IO.dq[1]
+set_location_assignment PIN_D16 -to MB_II_IO.dq[2]
+set_location_assignment PIN_A18 -to MB_II_IO.dq[3]
+set_location_assignment PIN_B18 -to MB_II_IO.dq[4]
+set_location_assignment PIN_C17 -to MB_II_IO.dq[5]
+set_location_assignment PIN_E18 -to MB_II_IO.dq[6]
+set_location_assignment PIN_F18 -to MB_II_IO.dq[7]
+set_location_assignment PIN_R22 -to MB_II_IO.dq[8]
+set_location_assignment PIN_J20 -to MB_II_IO.dq[9]
+set_location_assignment PIN_L21 -to MB_II_IO.dq[10]
+set_location_assignment PIN_M20 -to MB_II_IO.dq[11]
+set_location_assignment PIN_J21 -to MB_II_IO.dq[12]
+set_location_assignment PIN_P21 -to MB_II_IO.dq[13]
+set_location_assignment PIN_R20 -to MB_II_IO.dq[14]
+set_location_assignment PIN_N21 -to MB_II_IO.dq[15]
+set_location_assignment PIN_L22 -to MB_II_IO.dq[16]
+set_location_assignment PIN_G20 -to MB_II_IO.dq[17]
+set_location_assignment PIN_H21 -to MB_II_IO.dq[18]
+set_location_assignment PIN_N22 -to MB_II_IO.dq[19]
+set_location_assignment PIN_P22 -to MB_II_IO.dq[20]
+set_location_assignment PIN_F20 -to MB_II_IO.dq[21]
+set_location_assignment PIN_G21 -to MB_II_IO.dq[22]
+set_location_assignment PIN_F21 -to MB_II_IO.dq[23]
+set_location_assignment PIN_E19 -to MB_II_IO.dq[24]
+set_location_assignment PIN_B20 -to MB_II_IO.dq[25]
+set_location_assignment PIN_A20 -to MB_II_IO.dq[26]
+set_location_assignment PIN_G19 -to MB_II_IO.dq[27]
+set_location_assignment PIN_D20 -to MB_II_IO.dq[28]
+set_location_assignment PIN_E20 -to MB_II_IO.dq[29]
+set_location_assignment PIN_D17 -to MB_II_IO.dq[30]
+set_location_assignment PIN_C18 -to MB_II_IO.dq[31]
+set_location_assignment PIN_F30 -to MB_II_IO.dq[32]
+set_location_assignment PIN_L30 -to MB_II_IO.dq[33]
+set_location_assignment PIN_M30 -to MB_II_IO.dq[34]
+set_location_assignment PIN_C31 -to MB_II_IO.dq[35]
+set_location_assignment PIN_D31 -to MB_II_IO.dq[36]
+set_location_assignment PIN_H31 -to MB_II_IO.dq[37]
+set_location_assignment PIN_J31 -to MB_II_IO.dq[38]
+set_location_assignment PIN_F31 -to MB_II_IO.dq[39]
+set_location_assignment PIN_P32 -to MB_II_IO.dq[40]
+set_location_assignment PIN_R30 -to MB_II_IO.dq[41]
+set_location_assignment PIN_U31 -to MB_II_IO.dq[42]
+set_location_assignment PIN_W31 -to MB_II_IO.dq[43]
+set_location_assignment PIN_P29 -to MB_II_IO.dq[44]
+set_location_assignment PIN_P30 -to MB_II_IO.dq[45]
+set_location_assignment PIN_V31 -to MB_II_IO.dq[46]
+set_location_assignment PIN_R29 -to MB_II_IO.dq[47]
+set_location_assignment PIN_M33 -to MB_II_IO.dq[48]
+set_location_assignment PIN_J33 -to MB_II_IO.dq[49]
+set_location_assignment PIN_H33 -to MB_II_IO.dq[50]
+set_location_assignment PIN_H32 -to MB_II_IO.dq[51]
+set_location_assignment PIN_J32 -to MB_II_IO.dq[52]
+set_location_assignment PIN_K33 -to MB_II_IO.dq[53]
+set_location_assignment PIN_K32 -to MB_II_IO.dq[54]
+set_location_assignment PIN_L32 -to MB_II_IO.dq[55]
+set_location_assignment PIN_AB33 -to MB_II_IO.dq[56]
+set_location_assignment PIN_AA32 -to MB_II_IO.dq[57]
+set_location_assignment PIN_W32 -to MB_II_IO.dq[58]
+set_location_assignment PIN_U33 -to MB_II_IO.dq[59]
+set_location_assignment PIN_Y33 -to MB_II_IO.dq[60]
+set_location_assignment PIN_AA33 -to MB_II_IO.dq[61]
+set_location_assignment PIN_V33 -to MB_II_IO.dq[62]
+set_location_assignment PIN_Y32 -to MB_II_IO.dq[63]
+set_location_assignment PIN_E17 -to MB_II_IO.dqs_n[0]
+set_location_assignment PIN_K20 -to MB_II_IO.dqs_n[1]
+set_location_assignment PIN_H22 -to MB_II_IO.dqs_n[2]
+set_location_assignment PIN_C19 -to MB_II_IO.dqs_n[3]
+set_location_assignment PIN_M31 -to MB_II_IO.dqs_n[4]
+set_location_assignment PIN_N31 -to MB_II_IO.dqs_n[5]
+set_location_assignment PIN_P33 -to MB_II_IO.dqs_n[6]
+set_location_assignment PIN_T32 -to MB_II_IO.dqs_n[7]
+set_location_assignment PIN_B25 -to MB_II_IO.dqs_n[8]
+
+
+
+
+
diff --git a/boards/uniboard2a/libraries/unb2a_board/quartus/pinning/unb2_minimal_pins.tcl b/boards/uniboard2a/libraries/unb2a_board/quartus/pinning/unb2_minimal_pins.tcl
new file mode 100644
index 0000000000000000000000000000000000000000..2f6669160deb6400b7aac25904c4ea07415e7aba
--- /dev/null
+++ b/boards/uniboard2a/libraries/unb2a_board/quartus/pinning/unb2_minimal_pins.tcl
@@ -0,0 +1,129 @@
+
+set_location_assignment PIN_K15 -to CLK
+set_location_assignment PIN_J15 -to "CLK(n)"
+set_location_assignment PIN_N12 -to ETH_CLK
+set_location_assignment PIN_K14 -to PPS
+set_location_assignment PIN_J14 -to "PPS(n)"
+
+# enable 100 ohm termination:
+set_instance_assignment -name XCVR_A10_RX_TERM_SEL R_R1 -to CLK
+set_instance_assignment -name XCVR_A10_RX_TERM_SEL R_R1 -to PPS
+
+#set_location_assignment PIN_AT33 -to CFG_DATA[0]
+#set_location_assignment PIN_AT32 -to CFG_DATA[1]
+#set_location_assignment PIN_BB33 -to CFG_DATA[2]
+#set_location_assignment PIN_BA33 -to CFG_DATA[3]
+
+
+
+
+# IO Standard Assignments from Gijs (excluding memory)
+set_instance_assignment -name IO_STANDARD "1.8 V" -to ETH_CLK
+set_instance_assignment -name IO_STANDARD LVDS -to ETH_SGIN[0]
+set_instance_assignment -name IO_STANDARD LVDS -to "ETH_SGIN[0](n)"
+set_instance_assignment -name IO_STANDARD LVDS -to ETH_SGIN[1]
+set_instance_assignment -name IO_STANDARD LVDS -to "ETH_SGIN[1](n)"
+set_instance_assignment -name IO_STANDARD LVDS -to ETH_SGOUT[0]
+set_instance_assignment -name IO_STANDARD LVDS -to "ETH_SGOUT[0](n)"
+set_instance_assignment -name IO_STANDARD LVDS -to ETH_SGOUT[1]
+set_instance_assignment -name IO_STANDARD LVDS -to "ETH_SGOUT[1](n)"
+set_instance_assignment -name IO_STANDARD "1.8 V" -to ID[0]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to ID[1]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to ID[2]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to ID[3]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to ID[4]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to ID[5]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to ID[6]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to ID[7]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to INTA
+set_instance_assignment -name IO_STANDARD "1.8 V" -to INTB
+set_instance_assignment -name IO_STANDARD "1.8 V" -to SENS_SC
+set_instance_assignment -name IO_STANDARD "1.8 V" -to SENS_SD
+set_instance_assignment -name IO_STANDARD "1.8 V" -to TESTIO[0]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to TESTIO[1]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to TESTIO[2]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to TESTIO[3]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to TESTIO[4]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to TESTIO[5]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to VERSION[0]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to VERSION[1]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to WDI
+
+# locations changed 30 sept
+set_location_assignment PIN_P16 -to ID[0]
+set_location_assignment PIN_P15 -to ID[1]
+set_location_assignment PIN_K13 -to ID[2]
+set_location_assignment PIN_L13 -to ID[3]
+set_location_assignment PIN_N16 -to ID[4]
+set_location_assignment PIN_N14 -to ID[5]
+set_location_assignment PIN_U13 -to ID[6]
+
+set_location_assignment PIN_T13 -to ID[7]
+set_location_assignment PIN_AU31 -to INTA
+set_location_assignment PIN_AR30 -to INTB
+
+set_location_assignment PIN_BC31 -to SENS_SC
+set_location_assignment PIN_BB31 -to SENS_SD
+
+set_location_assignment PIN_BA25 -to PMBUS_SC
+set_location_assignment PIN_BD25 -to PMBUS_SD
+set_location_assignment PIN_BD26 -to PMBUS_ALERT
+set_instance_assignment -name IO_STANDARD "1.2 V" -to PMBUS_SC
+set_instance_assignment -name IO_STANDARD "1.2 V" -to PMBUS_SD
+set_instance_assignment -name IO_STANDARD "1.2 V" -to PMBUS_ALERT
+
+
+set_location_assignment PIN_AN32 -to TESTIO[0]
+set_location_assignment PIN_AP32 -to TESTIO[1]
+set_location_assignment PIN_AT30 -to TESTIO[2]
+set_location_assignment PIN_BD31 -to TESTIO[3]
+set_location_assignment PIN_AU30 -to TESTIO[4]
+set_location_assignment PIN_BD30 -to TESTIO[5]
+
+set_location_assignment PIN_AB12 -to VERSION[0]
+set_location_assignment PIN_AB13 -to VERSION[1]
+set_location_assignment PIN_BB30 -to WDI
+
+set_location_assignment PIN_K12 -to ETH_SGIN[0]
+set_location_assignment PIN_J12 -to "ETH_SGIN[0](n)"
+set_location_assignment PIN_AF33 -to ETH_SGIN[1]
+set_location_assignment PIN_AE33 -to "ETH_SGIN[1](n)"
+set_location_assignment PIN_H13 -to ETH_SGOUT[0]
+set_location_assignment PIN_H12 -to "ETH_SGOUT[0](n)"
+set_location_assignment PIN_AW31 -to ETH_SGOUT[1]
+set_location_assignment PIN_AV31 -to "ETH_SGOUT[1](n)"
+
+set_instance_assignment -name IO_STANDARD LVDS -to PPS
+set_instance_assignment -name IO_STANDARD LVDS -to "PPS(n)"
+set_instance_assignment -name IO_STANDARD LVDS -to CLK
+set_instance_assignment -name IO_STANDARD LVDS -to "CLK(n)"
+
+# Enable internal termination for LVDS inputs
+set_instance_assignment -name INPUT_TERMINATION DIFFERENTIAL -to PPS
+set_instance_assignment -name INPUT_TERMINATION DIFFERENTIAL -to CLK
+set_instance_assignment -name INPUT_TERMINATION DIFFERENTIAL -to ETH_SGIN[0]
+set_instance_assignment -name INPUT_TERMINATION DIFFERENTIAL -to ETH_SGIN[1]
+
+set_location_assignment PIN_AG31 -to altera_reserved_tms
+set_location_assignment PIN_AJ31 -to altera_reserved_tck
+set_location_assignment PIN_AK18 -to altera_reserved_tdi
+set_location_assignment PIN_AH31 -to altera_reserved_ntrst
+set_location_assignment PIN_AM29 -to altera_reserved_tdo
+#set_location_assignment PIN_AV33 -to ~ALTERA_DATA0~
+
+
+set_location_assignment PIN_BA33 -to QSFP_LED[0]
+set_location_assignment PIN_BA30 -to QSFP_LED[1]
+set_location_assignment PIN_BB33 -to QSFP_LED[2]
+set_location_assignment PIN_AU33 -to QSFP_LED[3]
+set_location_assignment PIN_AV32 -to QSFP_LED[4]
+set_location_assignment PIN_AW30 -to QSFP_LED[5]
+set_location_assignment PIN_AP31 -to QSFP_LED[6]
+set_location_assignment PIN_AP30 -to QSFP_LED[7]
+set_location_assignment PIN_AT33 -to QSFP_LED[8]
+set_location_assignment PIN_AG32 -to QSFP_LED[9]
+set_location_assignment PIN_AF32 -to QSFP_LED[10]
+set_location_assignment PIN_AE32 -to QSFP_LED[11]
+
+
+
diff --git a/boards/uniboard2a/libraries/unb2a_board/quartus/sfl_enhanced_01_02e360dd.sof b/boards/uniboard2a/libraries/unb2a_board/quartus/sfl_enhanced_01_02e360dd.sof
new file mode 100644
index 0000000000000000000000000000000000000000..a044a591af588213211d3da3002523f5ccdfa399
Binary files /dev/null and b/boards/uniboard2a/libraries/unb2a_board/quartus/sfl_enhanced_01_02e360dd.sof differ
diff --git a/boards/uniboard2a/libraries/unb2a_board/quartus/unb2_board.qsf b/boards/uniboard2a/libraries/unb2a_board/quartus/unb2_board.qsf
new file mode 100644
index 0000000000000000000000000000000000000000..577051cd04ca496483104ac833348cdca94c10c4
--- /dev/null
+++ b/boards/uniboard2a/libraries/unb2a_board/quartus/unb2_board.qsf
@@ -0,0 +1,113 @@
+###############################################################################
+#
+# 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/>.
+#
+###############################################################################
+
+# This QSF is sourced by other design QSF files.
+# ==============================================
+# Note: This file can ONLY BE SOURCED (use SOURCE_TCL_SCRIPT_FILE so it will be TCL interpreted), e.g.
+# by another QSF, otherwise many TCL commands such as "$::env(RADIOHDL)" do not work.
+
+# Device:
+set_global_assignment -name FAMILY "Arria 10"
+set_global_assignment -name DEVICE 10AX115U4F45I3SGES
+set_global_assignment -name STRATIX_DEVICE_IO_STANDARD "1.8 V"
+set_global_assignment -name MIN_CORE_JUNCTION_TEMP 0
+#set_global_assignment -name MIN_CORE_JUNCTION_TEMP "-40"
+set_global_assignment -name MAX_CORE_JUNCTION_TEMP 100
+set_global_assignment -name DEVICE_FILTER_SPEED_GRADE FASTEST
+#set_global_assignment -name ERROR_CHECK_FREQUENCY_DIVISOR 256
+set_global_assignment -name ERROR_CHECK_FREQUENCY_DIVISOR 4
+set_global_assignment -name ENABLE_OCT_DONE OFF
+set_global_assignment -name POWER_PRESET_COOLING_SOLUTION "23 MM HEAT SINK WITH 200 LFPM AIRFLOW"
+set_global_assignment -name POWER_BOARD_THERMAL_MODEL "NONE (CONSERVATIVE)"
+set_global_assignment -name PARTITION_NETLIST_TYPE SOURCE -section_id Top
+set_global_assignment -name PARTITION_FITTER_PRESERVATION_LEVEL PLACEMENT -section_id Top
+set_global_assignment -name PARTITION_COLOR 16764057 -section_id Top
+set_global_assignment -name ENABLE_CONFIGURATION_PINS OFF
+set_global_assignment -name ENABLE_NCE_PIN OFF
+set_global_assignment -name ENABLE_BOOT_SEL_PIN OFF
+set_global_assignment -name STRATIXV_CONFIGURATION_SCHEME "ACTIVE SERIAL X4"
+#set_global_assignment -name STRATIXV_CONFIGURATION_SCHEME "ACTIVE SERIAL X1"
+set_global_assignment -name STRATIXII_CONFIGURATION_DEVICE EPCQL1024
+set_global_assignment -name USE_CONFIGURATION_DEVICE ON
+set_global_assignment -name CRC_ERROR_OPEN_DRAIN ON
+set_global_assignment -name OUTPUT_IO_TIMING_NEAR_END_VMEAS "HALF VCCIO" -rise
+set_global_assignment -name OUTPUT_IO_TIMING_NEAR_END_VMEAS "HALF VCCIO" -fall
+set_global_assignment -name OUTPUT_IO_TIMING_FAR_END_VMEAS "HALF SIGNAL SWING" -rise
+set_global_assignment -name OUTPUT_IO_TIMING_FAR_END_VMEAS "HALF SIGNAL SWING" -fall
+
+set_global_assignment -name CONFIGURATION_VCCIO_LEVEL 1.8V
+set_global_assignment -name ON_CHIP_BITSTREAM_DECOMPRESSION ON
+#set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_12_5MHZ
+set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_25MHZ
+#set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_100MHZ
+
+set_global_assignment -name USER_START_UP_CLOCK OFF
+
+set_global_assignment -name DEVICE_FILTER_PACKAGE FBGA
+set_global_assignment -name DEVICE_FILTER_PIN_COUNT 1932
+
+set_global_assignment -name HEX_FILE pm_uc_ES1_ww05p1.hex
+set_global_assignment -name SOURCE_FILE quartus.ini
+
+#set_global_assignment -name EDA_BOARD_DESIGN_SIGNAL_INTEGRITY_TOOL "IBIS (Signal Integrity)"
+#set_global_assignment -name EDA_OUTPUT_DATA_FORMAT IBIS -section_id eda_board_design_signal_integrity
+#set_global_assignment -name EDA_IBIS_SPECIFICATION_VERSION 5P0 -section_id eda_board_design_signal_integrity
+set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top
+
+
+# Optimize for performance:
+set_global_assignment -name OPTIMIZATION_TECHNIQUE SPEED
+set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS ON
+set_global_assignment -name OPTIMIZE_HOLD_TIMING "ALL PATHS"
+set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING ON
+set_global_assignment -name FITTER_EFFORT "STANDARD FIT"
+set_global_assignment -name ROUTER_CLOCKING_TOPOLOGY_ANALYSIS ON
+set_global_assignment -name PHYSICAL_SYNTHESIS_REGISTER_RETIMING ON
+set_global_assignment -name ROUTER_TIMING_OPTIMIZATION_LEVEL MAXIMUM
+
+# To set a location assignment for a PLL, do the following:
+# - after compilation, open the chip planner
+# - hover over the ATX PLL block (left side or right side)
+# - Right click and click "Copy tooltip"
+# - Paste text in here and edit
+#set_location_assignment HSSIPMALCPLL_X0_Y33_N29 -to "unb2_test:u_revision|unb2_board_10gbe:\gen_udp_stream_10GbE:u_tr_10GbE_qsfp_and_ring|tr_10GbE:u_tr_10GbE|tech_eth_10g:u_tech_eth_10g|tech_eth_10g_arria10:\gen_ip_arria10:u0|tech_10gbase_r:u_tech_10gbase_r|tech_10gbase_r_arria10:\gen_ip_arria10:u0|ip_arria10_transceiver_pll_10g:\gen_phy_24:u_ip_arria10_transceiver_pll_10g_0|altera_xcvr_atx_pll_a10:xcvr_atx_pll_a10_0|a10_xcvr_atx_pll:a10_xcvr_atx_pll_inst|twentynm_atx_pll_inst"
+
+
+
+#set_parameter -name dbg_user_identifier 1 -to "\\Generate_XCVR_LANE_INSTANCES:1:xcvr_lane_inst|xcvr_txrx_inst|xcvr_native_a10_0"
+#set_parameter -name dbg_user_identifier 0 -to "\\Generate_XCVR_LANE_INSTANCES:0:xcvr_lane_inst|xcvr_pll_inst|xcvr_atx_pll_a10_0"
+#set_parameter -name dbg_user_identifier 1 -to "\\Generate_XCVR_LANE_INSTANCES:1:xcvr_lane_inst|xcvr_pll_inst|xcvr_atx_pll_a10_0"
+
+set_parameter -name dbg_user_identifier 1 -to "unb2_test:u_revision|unb2_board_10gbe:\\gen_udp_stream_10GbE:u_tr_10GbE_qsfp_and_ring|tr_10GbE:u_tr_10GbE_0|tech_eth_10g:u_tech_eth_10g|tech_eth_10g_arria10:\\gen_ip_arria10:u0|tech_10gbase_r:u_tech_10gbase_r|tech_10gbase_r_arria10:\\gen_ip_arria10:u0|ip_arria10_phy_10gbase_r_12:\\gen_phy_12:u_ip_arria10_phy_10gbase_r_12"
+set_parameter -name dbg_user_identifier 1 -to "unb2_test:u_revision|unb2_board_10gbe:\\gen_udp_stream_10GbE:u_tr_10GbE_qsfp_and_ring|tr_10GbE:u_tr_10GbE_1|tech_eth_10g:u_tech_eth_10g|tech_eth_10g_arria10:\\gen_ip_arria10:u0|tech_10gbase_r:u_tech_10gbase_r|tech_10gbase_r_arria10:\\gen_ip_arria10:u0|ip_arria10_phy_10gbase_r_12:\\gen_phy_12:u_ip_arria10_phy_10gbase_r_12"
+
+set_parameter -name dbg_user_identifier 1 -to "unb2_test:u_revision|unb2_board_10gbe:\\gen_udp_stream_10GbE:u_tr_10GbE_qsfp_and_ring|tr_10GbE:u_tr_10GbE_0|tech_eth_10g:u_tech_eth_10g|tech_eth_10g_arria10:\\gen_ip_arria10:u0|tech_10gbase_r:u_tech_10gbase_r|tech_10gbase_r_arria10:\\gen_ip_arria10:u0|ip_arria10_transceiver_pll_10g:u_ip_arria10_transceiver_pll_10g|altera_xcvr_atx_pll_a10:xcvr_atx_pll_a10_0"
+set_parameter -name dbg_user_identifier 1 -to "unb2_test:u_revision|unb2_board_10gbe:\\gen_udp_stream_10GbE:u_tr_10GbE_qsfp_and_ring|tr_10GbE:u_tr_10GbE_1|tech_eth_10g:u_tech_eth_10g|tech_eth_10g_arria10:\\gen_ip_arria10:u0|tech_10gbase_r:u_tech_10gbase_r|tech_10gbase_r_arria10:\\gen_ip_arria10:u0|ip_arria10_transceiver_pll_10g:u_ip_arria10_transceiver_pll_10g|altera_xcvr_atx_pll_a10:xcvr_atx_pll_a10_0"
+
+
+# Pass compile stamps as generics (passed to top-level when $UNB_COMPILE_STAMPS is set)
+if { [info exists ::env(UNB_COMPILE_STAMPS) ] } {
+  set_parameter -name g_stamp_date [clock format [clock seconds] -format {%Y%m%d}]
+  set_parameter -name g_stamp_time [clock format [clock seconds] -format {%H%M%S}]
+  post_message -type info "RADIOHDL: using SVN $::env(RADIOHDL_SVN_REVISION)"
+  set_parameter -name g_stamp_svn [regsub -all {[^0-9]} [exec echo $::env(RADIOHDL_SVN_REVISION)] ""] 
+}
+
diff --git a/boards/uniboard2a/libraries/unb2a_board/quartus/unb2_board.sdc b/boards/uniboard2a/libraries/unb2a_board/quartus/unb2_board.sdc
new file mode 100644
index 0000000000000000000000000000000000000000..c6d9c5a0ee5cfa0b8c12bddce73ad21b1b9b4398
--- /dev/null
+++ b/boards/uniboard2a/libraries/unb2a_board/quartus/unb2_board.sdc
@@ -0,0 +1,74 @@
+###############################################################################
+#
+# 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/>.
+#
+###############################################################################
+
+set_time_format -unit ns -decimal_places 3
+
+create_clock -period 125Mhz [get_ports {ETH_CLK}]
+create_clock -period 200Mhz [get_ports {CLK}]
+create_clock -period 100Mhz [get_ports {CLKUSR}]
+create_clock -period 644.53125Mhz [get_ports {SA_CLK}]
+create_clock -period 644.53125Mhz [get_ports {SB_CLK}]
+create_clock -period 1.552 -name {BCK_REF_CLK} { BCK_REF_CLK }
+
+derive_pll_clocks
+derive_clock_uncertainty
+
+set_clock_groups -asynchronous -group {CLK}
+set_clock_groups -asynchronous -group {ETH_CLK}
+set_clock_groups -asynchronous -group {BCK_REF_CLK}
+set_clock_groups -asynchronous -group {CLK_USR}
+set_clock_groups -asynchronous -group {CLKUSR}
+set_clock_groups -asynchronous -group {SA_CLK}
+set_clock_groups -asynchronous -group {SB_CLK}
+
+# IOPLL outputs (which have global names defined in the IP qsys settings)
+set_clock_groups -asynchronous -group [get_clocks pll_clk20]
+set_clock_groups -asynchronous -group [get_clocks pll_clk50]
+set_clock_groups -asynchronous -group [get_clocks pll_clk100]
+set_clock_groups -asynchronous -group [get_clocks pll_clk125]
+set_clock_groups -asynchronous -group [get_clocks pll_clk200]
+set_clock_groups -asynchronous -group [get_clocks pll_clk200p]
+set_clock_groups -asynchronous -group [get_clocks pll_clk400]
+
+
+# FPLL outputs
+set_clock_groups -asynchronous -group [get_clocks {*u_ctrl|\gen_mm_clk_hardware:u_unb2_board_clk125_pll|\gen_fractional_pll:u_pll|\gen_ip_arria10:u0|xcvr_fpll_a10_0|outclk1}]
+set_clock_groups -asynchronous -group [get_clocks {*u_ctrl|\gen_mm_clk_hardware:u_unb2_board_clk125_pll|\gen_fractional_pll:u_pll|\gen_ip_arria10:u0|xcvr_fpll_a10_0|outclk3}]
+set_clock_groups -asynchronous -group [get_clocks {*u_ctrl|\gen_dp_clk_hardware:gen_pll:u_unb2_board_clk200_pll|\gen_st_fractional_pll:u_st_fractional_pll|\gen_ip_arria10:u0|xcvr_fpll_a10_0|outclk0}]
+
+
+set_clock_groups -asynchronous -group [get_clocks {u_revision|\gen_udp_stream_10GbE:u_tr_10GbE_qsfp_and_ring|u_tr_10GbE_0|u_tech_eth_10g|\gen_ip_arria10:u0|u_tech_10gbase_r|\gen_ip_arria10:u0|\gen_phy_12:u_ip_arria10_phy_10gbase_r_12|xcvr_native_a10_0|g_xcvr_native_insts[*]|rx_pma_clk}]
+set_clock_groups -asynchronous -group [get_clocks {u_revision|\gen_udp_stream_10GbE:u_tr_10GbE_qsfp_and_ring|u_unb2_board_clk644_pll|\gen_ip_arria10:u0|xcvr_fpll_a10_0|outclk0}]
+set_clock_groups -asynchronous -group [get_clocks {u_revision|\gen_udp_stream_10GbE:u_tr_10GbE_qsfp_and_ring|u_unb2_board_clk644_pll|\gen_ip_arria10:u0|xcvr_fpll_a10_0|outclk1}]
+
+
+#set_clock_groups -asynchronous \
+#-group [get_clocks {inst2|xcvr_4ch_native_phy_inst|xcvr_native_a10_0|g_xcvr_native_insts[?]|rx_pma_clk}] \
+#-group [get_clocks {inst2|xcvr_pll_inst|xcvr_fpll_a10_0|tx_bonding_clocks[0]}]
+
+
+#JTAG Signal Constraints
+#constrain the TDI TMS and TDO ports  -- (modified from timequest SDC cookbook)
+#set_input_delay  -clock altera_reserved_tck 5 [get_ports altera_reserved_tdi]
+#set_input_delay  -clock altera_reserved_tck 5 [get_ports altera_reserved_tms]
+#set_output_delay -clock altera_reserved_tck -clock_fall -fall -max 5 [get_ports altera_reserved_tdo]
+
diff --git a/boards/uniboard2a/libraries/unb2a_board/quartus/unb2_board_v0_fpga_device_family.JPG b/boards/uniboard2a/libraries/unb2a_board/quartus/unb2_board_v0_fpga_device_family.JPG
new file mode 100644
index 0000000000000000000000000000000000000000..f50d11684f4abad160db1a44556541c969d49e6e
Binary files /dev/null and b/boards/uniboard2a/libraries/unb2a_board/quartus/unb2_board_v0_fpga_device_family.JPG differ
diff --git a/boards/uniboard2a/libraries/unb2a_board/quartus/unb2_board_v1_fpga_device_family.jpg b/boards/uniboard2a/libraries/unb2a_board/quartus/unb2_board_v1_fpga_device_family.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..cbe907cf5705a8d93e7725dc5bbc6ba8cf66e27f
Binary files /dev/null and b/boards/uniboard2a/libraries/unb2a_board/quartus/unb2_board_v1_fpga_device_family.jpg differ
diff --git a/boards/uniboard2a/libraries/unb2a_board/quartus/unb2a_board.qsf b/boards/uniboard2a/libraries/unb2a_board/quartus/unb2a_board.qsf
new file mode 100644
index 0000000000000000000000000000000000000000..bfee21d190540c1387812aaf8cdca87941c1a60c
--- /dev/null
+++ b/boards/uniboard2a/libraries/unb2a_board/quartus/unb2a_board.qsf
@@ -0,0 +1,115 @@
+###############################################################################
+#
+# 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/>.
+#
+###############################################################################
+
+# This QSF is sourced by other design QSF files.
+# ==============================================
+# Note: This file can ONLY BE SOURCED (use SOURCE_TCL_SCRIPT_FILE so it will be TCL interpreted), e.g.
+# by another QSF, otherwise many TCL commands such as "$::env(RADIOHDL)" do not work.
+
+set_parameter -name g_technology c_tech_arria10_e3sge3
+
+# Device:
+set_global_assignment -name FAMILY "Arria 10"
+set_global_assignment -name DEVICE 10AX115U4F45E3SGE3
+set_global_assignment -name STRATIX_DEVICE_IO_STANDARD "1.8 V"
+set_global_assignment -name MIN_CORE_JUNCTION_TEMP 0
+#set_global_assignment -name MIN_CORE_JUNCTION_TEMP "-40"
+set_global_assignment -name MAX_CORE_JUNCTION_TEMP 100
+set_global_assignment -name DEVICE_FILTER_SPEED_GRADE FASTEST
+#set_global_assignment -name ERROR_CHECK_FREQUENCY_DIVISOR 256
+set_global_assignment -name ERROR_CHECK_FREQUENCY_DIVISOR 4
+set_global_assignment -name ENABLE_OCT_DONE OFF
+set_global_assignment -name POWER_PRESET_COOLING_SOLUTION "23 MM HEAT SINK WITH 200 LFPM AIRFLOW"
+set_global_assignment -name POWER_BOARD_THERMAL_MODEL "NONE (CONSERVATIVE)"
+set_global_assignment -name PARTITION_NETLIST_TYPE SOURCE -section_id Top
+set_global_assignment -name PARTITION_FITTER_PRESERVATION_LEVEL PLACEMENT -section_id Top
+set_global_assignment -name PARTITION_COLOR 16764057 -section_id Top
+set_global_assignment -name ENABLE_CONFIGURATION_PINS OFF
+set_global_assignment -name ENABLE_NCE_PIN OFF
+set_global_assignment -name ENABLE_BOOT_SEL_PIN OFF
+set_global_assignment -name STRATIXV_CONFIGURATION_SCHEME "ACTIVE SERIAL X4"
+#set_global_assignment -name STRATIXV_CONFIGURATION_SCHEME "ACTIVE SERIAL X1"
+set_global_assignment -name STRATIXII_CONFIGURATION_DEVICE EPCQL1024
+set_global_assignment -name USE_CONFIGURATION_DEVICE ON
+set_global_assignment -name CRC_ERROR_OPEN_DRAIN ON
+set_global_assignment -name OUTPUT_IO_TIMING_NEAR_END_VMEAS "HALF VCCIO" -rise
+set_global_assignment -name OUTPUT_IO_TIMING_NEAR_END_VMEAS "HALF VCCIO" -fall
+set_global_assignment -name OUTPUT_IO_TIMING_FAR_END_VMEAS "HALF SIGNAL SWING" -rise
+set_global_assignment -name OUTPUT_IO_TIMING_FAR_END_VMEAS "HALF SIGNAL SWING" -fall
+
+set_global_assignment -name CONFIGURATION_VCCIO_LEVEL 1.8V
+set_global_assignment -name ON_CHIP_BITSTREAM_DECOMPRESSION ON
+#set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_12_5MHZ
+set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_25MHZ
+#set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_100MHZ
+
+set_global_assignment -name USER_START_UP_CLOCK OFF
+
+set_global_assignment -name DEVICE_FILTER_PACKAGE FBGA
+set_global_assignment -name DEVICE_FILTER_PIN_COUNT 1932
+
+set_global_assignment -name HEX_FILE pm_uc_ES1_ww05p1.hex
+set_global_assignment -name SOURCE_FILE quartus.ini
+
+#set_global_assignment -name EDA_BOARD_DESIGN_SIGNAL_INTEGRITY_TOOL "IBIS (Signal Integrity)"
+#set_global_assignment -name EDA_OUTPUT_DATA_FORMAT IBIS -section_id eda_board_design_signal_integrity
+#set_global_assignment -name EDA_IBIS_SPECIFICATION_VERSION 5P0 -section_id eda_board_design_signal_integrity
+set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top
+
+
+# Optimize for performance:
+set_global_assignment -name OPTIMIZATION_TECHNIQUE SPEED
+set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS ON
+set_global_assignment -name OPTIMIZE_HOLD_TIMING "ALL PATHS"
+set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING ON
+set_global_assignment -name FITTER_EFFORT "STANDARD FIT"
+set_global_assignment -name ROUTER_CLOCKING_TOPOLOGY_ANALYSIS ON
+set_global_assignment -name PHYSICAL_SYNTHESIS_REGISTER_RETIMING ON
+set_global_assignment -name ROUTER_TIMING_OPTIMIZATION_LEVEL MAXIMUM
+
+# To set a location assignment for a PLL, do the following:
+# - after compilation, open the chip planner
+# - hover over the ATX PLL block (left side or right side)
+# - Right click and click "Copy tooltip"
+# - Paste text in here and edit
+#set_location_assignment HSSIPMALCPLL_X0_Y33_N29 -to "unb2_test:u_revision|unb2_board_10gbe:\gen_udp_stream_10GbE:u_tr_10GbE_qsfp_and_ring|tr_10GbE:u_tr_10GbE|tech_eth_10g:u_tech_eth_10g|tech_eth_10g_arria10:\gen_ip_arria10:u0|tech_10gbase_r:u_tech_10gbase_r|tech_10gbase_r_arria10:\gen_ip_arria10:u0|ip_arria10_transceiver_pll_10g:\gen_phy_24:u_ip_arria10_transceiver_pll_10g_0|altera_xcvr_atx_pll_a10:xcvr_atx_pll_a10_0|a10_xcvr_atx_pll:a10_xcvr_atx_pll_inst|twentynm_atx_pll_inst"
+
+
+
+#set_parameter -name dbg_user_identifier 1 -to "\\Generate_XCVR_LANE_INSTANCES:1:xcvr_lane_inst|xcvr_txrx_inst|xcvr_native_a10_0"
+#set_parameter -name dbg_user_identifier 0 -to "\\Generate_XCVR_LANE_INSTANCES:0:xcvr_lane_inst|xcvr_pll_inst|xcvr_atx_pll_a10_0"
+#set_parameter -name dbg_user_identifier 1 -to "\\Generate_XCVR_LANE_INSTANCES:1:xcvr_lane_inst|xcvr_pll_inst|xcvr_atx_pll_a10_0"
+
+set_parameter -name dbg_user_identifier 1 -to "unb2_test:u_revision|unb2_board_10gbe:\\gen_udp_stream_10GbE:u_tr_10GbE_qsfp_and_ring|tr_10GbE:u_tr_10GbE_0|tech_eth_10g:u_tech_eth_10g|tech_eth_10g_arria10:\\gen_ip_arria10:u0|tech_10gbase_r:u_tech_10gbase_r|tech_10gbase_r_arria10:\\gen_ip_arria10:u0|ip_arria10_phy_10gbase_r_12:\\gen_phy_12:u_ip_arria10_phy_10gbase_r_12"
+set_parameter -name dbg_user_identifier 1 -to "unb2_test:u_revision|unb2_board_10gbe:\\gen_udp_stream_10GbE:u_tr_10GbE_qsfp_and_ring|tr_10GbE:u_tr_10GbE_1|tech_eth_10g:u_tech_eth_10g|tech_eth_10g_arria10:\\gen_ip_arria10:u0|tech_10gbase_r:u_tech_10gbase_r|tech_10gbase_r_arria10:\\gen_ip_arria10:u0|ip_arria10_phy_10gbase_r_12:\\gen_phy_12:u_ip_arria10_phy_10gbase_r_12"
+
+set_parameter -name dbg_user_identifier 1 -to "unb2_test:u_revision|unb2_board_10gbe:\\gen_udp_stream_10GbE:u_tr_10GbE_qsfp_and_ring|tr_10GbE:u_tr_10GbE_0|tech_eth_10g:u_tech_eth_10g|tech_eth_10g_arria10:\\gen_ip_arria10:u0|tech_10gbase_r:u_tech_10gbase_r|tech_10gbase_r_arria10:\\gen_ip_arria10:u0|ip_arria10_transceiver_pll_10g:u_ip_arria10_transceiver_pll_10g|altera_xcvr_atx_pll_a10:xcvr_atx_pll_a10_0"
+set_parameter -name dbg_user_identifier 1 -to "unb2_test:u_revision|unb2_board_10gbe:\\gen_udp_stream_10GbE:u_tr_10GbE_qsfp_and_ring|tr_10GbE:u_tr_10GbE_1|tech_eth_10g:u_tech_eth_10g|tech_eth_10g_arria10:\\gen_ip_arria10:u0|tech_10gbase_r:u_tech_10gbase_r|tech_10gbase_r_arria10:\\gen_ip_arria10:u0|ip_arria10_transceiver_pll_10g:u_ip_arria10_transceiver_pll_10g|altera_xcvr_atx_pll_a10:xcvr_atx_pll_a10_0"
+
+
+# Pass compile stamps as generics (passed to top-level when $UNB_COMPILE_STAMPS is set)
+if { [info exists ::env(UNB_COMPILE_STAMPS) ] } {
+  set_parameter -name g_stamp_date [clock format [clock seconds] -format {%Y%m%d}]
+  set_parameter -name g_stamp_time [clock format [clock seconds] -format {%H%M%S}]
+  post_message -type info "RADIOHDL: using SVN $::env(RADIOHDL_SVN_REVISION)"
+  set_parameter -name g_stamp_svn [regsub -all {[^0-9]} [exec echo $::env(RADIOHDL_SVN_REVISION)] ""] 
+}
+
diff --git a/boards/uniboard2a/libraries/unb2a_board/src/vhdl/ctrl_unb2_board.vhd b/boards/uniboard2a/libraries/unb2a_board/src/vhdl/ctrl_unb2_board.vhd
new file mode 100644
index 0000000000000000000000000000000000000000..9f19b28b1cfe24596f469a61e81a4b9fa0fe870f
--- /dev/null
+++ b/boards/uniboard2a/libraries/unb2a_board/src/vhdl/ctrl_unb2_board.vhd
@@ -0,0 +1,804 @@
+-------------------------------------------------------------------------------
+--
+-- Copyright (C) 2012-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: Provide general control infrastructure
+-- Usage: In a design <design_name>.vhd that consists of:
+--   . mmm_<design_name>.vhd with a Nios2 and the MM bus and the peripherals
+--   . ctrl_unb2_board.vhd with e.g. 1GbE, PPS, I2C, Remu, EPCS
+
+LIBRARY IEEE, common_lib, dp_lib, ppsh_lib, i2c_lib, technology_lib, tech_tse_lib, eth_lib, remu_lib, epcs_lib, tech_pll_lib, tech_clkbuf_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 dp_lib.dp_stream_pkg.ALL;
+USE work.unb2_board_pkg.ALL;
+USE i2c_lib.i2c_pkg.ALL;
+USE technology_lib.technology_pkg.ALL;
+USE tech_tse_lib.tech_tse_pkg.ALL;
+USE eth_lib.eth_pkg.ALL;
+
+ENTITY ctrl_unb2_board IS
+  GENERIC (
+    ----------------------------------------------------------------------------
+    -- General
+    ----------------------------------------------------------------------------
+    g_technology     : NATURAL := c_tech_arria10;
+    g_sim            : BOOLEAN := FALSE;
+    g_design_name    : STRING := "UNUSED";
+    g_fw_version     : t_unb2_board_fw_version := (0, 0);  -- firmware version x.y
+    g_stamp_date     : NATURAL := 0;
+    g_stamp_time     : NATURAL := 0;
+    g_stamp_svn      : NATURAL := 0;
+    g_design_note    : STRING  := "UNUSED";
+    g_base_ip        : STD_LOGIC_VECTOR(16-1 DOWNTO 0) := X"0A63"; -- Base IP address used by unb_osy: 10.99.xx.yy
+    g_mm_clk_freq    : NATURAL := c_unb2_board_mm_clk_freq_125M;
+    g_eth_clk_freq   : NATURAL := c_unb2_board_eth_clk_freq_125M;
+    g_tse_clk_buf    : BOOLEAN := FALSE;
+    
+    ----------------------------------------------------------------------------
+    -- External CLK
+    ----------------------------------------------------------------------------
+    g_dp_clk_freq    : NATURAL := c_unb2_board_ext_clk_freq_200M;
+    g_dp_clk_use_pll : BOOLEAN := TRUE;
+    -- PLL phase clk shift with respect to CLK
+    --     STRING :=    "0"             = 0
+    --     STRING :=  "156"             = 011.25
+    --     STRING :=  "313"             = 022.5 
+    --     STRING :=  "469"             = 033.75
+    --     STRING :=  "625"             = 045   
+    --     STRING :=  "781"             = 056.25
+    --     STRING :=  "938"             = 067.5 
+    --     STRING := "1094"             = 078.75
+    --     STRING := "1250"             = 090   
+    --     STRING := "1406" = 1250+ 156 = 101.25
+    --     STRING := "1563" = 1250+ 313 = 112.5 
+    --     STRING := "1719" = 1250+ 469 = 123.75
+    --     STRING := "1875" = 1250+ 625 = 135   
+    --     STRING := "2031" = 1250+ 781 = 146.25
+    --     STRING := "2188" = 1250+ 938 = 157.5 
+    --     STRING := "2344" = 1250+1094 = 168.75
+    --     STRING := "2500" = 1250+1250 = 180   
+    --     STRING := "2656" = 2500+ 156 = 191.25
+    --     STRING := "2813" = 2500+ 313 = 202.5 
+    --     STRING := "2969" = 2500+ 469 = 213.75
+    --     STRING := "3125" = 2500+ 625 = 225   
+    --     STRING := "3281" = 2500+ 781 = 236.25
+    --     STRING := "3438" = 2500+ 938 = 247.5 
+    --     STRING := "3594" = 2500+1094 = 258.75
+    --     STRING := "3750" = 2500+1250 = 270   
+    --     STRING := "3906" = 3750+ 156 = 281.25
+    --     STRING := "4063" = 3750+ 313 = 292.5 
+    --     STRING := "4219" = 3750+ 469 = 303.75
+    --     STRING := "4375" = 3750+ 625 = 315   
+    --     STRING := "4531" = 3750+ 781 = 326.25
+    --     STRING := "4688" = 3750+ 938 = 337.5 
+    --     STRING := "4844" = 3750+1094 = 348.75
+    --     STRING := "5000" = 3750+1250 = 360
+    g_dp_clk_phase         : STRING := "0";      -- phase offset for PLL c0, typically any phase is fine, do not use 225 +-30 degrees because there the PPS edge occurs
+    
+    ----------------------------------------------------------------------------
+    -- 1GbE UDP offload
+    ----------------------------------------------------------------------------
+    g_udp_offload             : BOOLEAN := FALSE;
+    g_udp_offload_nof_streams : NATURAL := c_eth_nof_udp_ports;
+    
+    ----------------------------------------------------------------------------
+    -- Auxiliary Interface
+    ----------------------------------------------------------------------------
+    g_fpga_temp_high : NATURAL := 85;
+    g_app_led_red    : BOOLEAN := FALSE;  -- when TRUE use external LED control via app_led_red
+    g_app_led_green  : BOOLEAN := FALSE;  -- when TRUE use external LED control via app_led_green
+    
+    g_aux            : t_c_unb2_board_aux := c_unb2_board_aux;
+    g_factory_image  : BOOLEAN := FALSE
+  );
+  PORT (
+    --
+    -- >>> SOPC system with conduit peripheral MM bus
+    --
+    -- System
+    cs_sim                 : OUT STD_LOGIC;
+    
+    xo_ethclk              : OUT STD_LOGIC;   -- 125 MHz ETH_CLK
+    xo_rst                 : OUT STD_LOGIC;   -- reset in ETH_CLK domain released after few cycles
+    xo_rst_n               : OUT STD_LOGIC; 
+   
+    ext_clk200             : OUT STD_LOGIC;   -- 200 MHz CLK
+    ext_rst200             : OUT STD_LOGIC;   -- reset in CLK clock domain released after mm_rst
+    
+    mm_clk                 : OUT STD_LOGIC;   -- MM clock from xo_ethclk PLL
+    mm_rst                 : OUT STD_LOGIC;   -- reset in MM clock domain released after xo_ethclk PLL locked
+    
+    dp_rst                 : OUT STD_LOGIC;   -- reset in DP clock domain released after mm_rst and after CLK PLL locked in case g_dp_clk_use_pll=TRUE
+    dp_clk                 : OUT STD_LOGIC;   -- 200 MHz DP clock from CLK system clock direct or via CLK PLL dependent on g_dp_clk_use_pll
+    dp_pps                 : OUT STD_LOGIC;   -- PPS in dp_clk domain
+    dp_rst_in              : IN  STD_LOGIC;   -- externally wire OUT dp_rst to dp_rst_in to avoid delta cycle difference on dp_clk
+    dp_clk_in              : IN  STD_LOGIC;   -- externally wire OUT dp_clk to dp_clk_in to avoid delta cycle difference on dp_clk
+
+    mb_I_ref_rst           : OUT STD_LOGIC;   -- reset in MB_I_REF_CLK domain released after mm_rst
+    mb_II_ref_rst          : OUT STD_LOGIC;   -- reset in MB_II_REF_CLK domain released after mm_rst
+    
+    this_chip_id           : OUT STD_LOGIC_VECTOR(c_unb2_board_nof_chip_w-1 DOWNTO 0);      -- [1:0], so range 0-3 for PN
+    this_bck_id            : OUT STD_LOGIC_VECTOR(c_unb2_board_nof_uniboard_w-1 DOWNTO 0);  -- [1:0] used out of ID[7:2] to index boards 3..0 in subrack
+    
+    app_led_red            : IN  STD_LOGIC := '0';
+    app_led_green          : IN  STD_LOGIC := '1';
+    
+    -- PIOs
+    pout_wdi               : IN  STD_LOGIC;                              -- Toggled by unb_osy; can be overriden by reg_wdi.
+
+    -- Manual WDI override
+    reg_wdi_mosi           : IN  t_mem_mosi := c_mem_mosi_rst;
+    reg_wdi_miso           : OUT t_mem_miso;
+
+    -- REMU
+    reg_remu_mosi          : IN  t_mem_mosi := c_mem_mosi_rst;
+    reg_remu_miso          : OUT t_mem_miso;
+
+    -- EPCS read
+    reg_dpmm_data_mosi     : IN  t_mem_mosi := c_mem_mosi_rst;
+    reg_dpmm_data_miso     : OUT t_mem_miso;
+    reg_dpmm_ctrl_mosi     : IN  t_mem_mosi := c_mem_mosi_rst;
+    reg_dpmm_ctrl_miso     : OUT t_mem_miso;
+
+    -- EPCS write
+    reg_mmdp_data_mosi     : IN  t_mem_mosi := c_mem_mosi_rst;
+    reg_mmdp_data_miso     : OUT t_mem_miso;
+    reg_mmdp_ctrl_mosi     : IN  t_mem_mosi := c_mem_mosi_rst;
+    reg_mmdp_ctrl_miso     : OUT t_mem_miso;
+
+    -- EPCS status/control
+    reg_epcs_mosi          : IN  t_mem_mosi := c_mem_mosi_rst;
+    reg_epcs_miso          : OUT t_mem_miso;
+
+    -- MM buses to/from mms_unb2_board_system_info
+    reg_unb_system_info_mosi : IN  t_mem_mosi := c_mem_mosi_rst;
+    reg_unb_system_info_miso : OUT t_mem_miso;
+
+    rom_unb_system_info_mosi : IN  t_mem_mosi := c_mem_mosi_rst;
+    rom_unb_system_info_miso : OUT t_mem_miso;
+
+    -- UniBoard I2C sensors
+    reg_unb_sens_mosi      : IN  t_mem_mosi := c_mem_mosi_rst;
+    reg_unb_sens_miso      : OUT t_mem_miso;
+
+    reg_unb_pmbus_mosi     : IN  t_mem_mosi := c_mem_mosi_rst;
+    reg_unb_pmbus_miso     : OUT t_mem_miso;
+
+    -- FPGA sensors
+    reg_fpga_temp_sens_mosi     : IN  t_mem_mosi := c_mem_mosi_rst;
+    reg_fpga_temp_sens_miso     : OUT t_mem_miso;
+    reg_fpga_voltage_sens_mosi  : IN  t_mem_mosi := c_mem_mosi_rst;
+    reg_fpga_voltage_sens_miso  : OUT t_mem_miso;
+    
+    -- PPSH
+    reg_ppsh_mosi          : IN  t_mem_mosi := c_mem_mosi_rst;
+    reg_ppsh_miso          : OUT t_mem_miso;
+    
+    -- eth1g control&monitoring
+    eth1g_mm_rst           : IN  STD_LOGIC;
+    eth1g_tse_mosi         : IN  t_mem_mosi;  -- ETH TSE MAC registers
+    eth1g_tse_miso         : OUT t_mem_miso;
+    eth1g_reg_mosi         : IN  t_mem_mosi;  -- ETH control and status registers
+    eth1g_reg_miso         : OUT t_mem_miso;
+    eth1g_reg_interrupt    : OUT STD_LOGIC;   -- Interrupt
+    eth1g_ram_mosi         : IN  t_mem_mosi;  -- ETH rx frame and tx frame memory
+    eth1g_ram_miso         : OUT t_mem_miso;
+
+    -- eth1g UDP streaming ports
+    udp_tx_sosi_arr        : IN  t_dp_sosi_arr(g_udp_offload_nof_streams-1 DOWNTO 0) := (OTHERS=>c_dp_sosi_rst);
+    udp_tx_siso_arr        : OUT t_dp_siso_arr(g_udp_offload_nof_streams-1 DOWNTO 0);  
+    udp_rx_sosi_arr        : OUT t_dp_sosi_arr(g_udp_offload_nof_streams-1 DOWNTO 0);
+    udp_rx_siso_arr        : IN  t_dp_siso_arr(g_udp_offload_nof_streams-1 DOWNTO 0) := (OTHERS=>c_dp_siso_rdy);
+
+    --
+    -- >>> Ctrl FPGA pins
+    --
+    -- GENERAL
+    CLK                    : IN    STD_LOGIC; -- System Clock
+    PPS                    : IN    STD_LOGIC; -- System Sync
+    WDI                    : OUT   STD_LOGIC; -- Watchdog Clear
+    INTA                   : INOUT STD_LOGIC; -- FPGA interconnect line
+    INTB                   : INOUT STD_LOGIC; -- FPGA interconnect line
+
+    -- Others
+    VERSION                : IN    STD_LOGIC_VECTOR(g_aux.version_w-1 DOWNTO 0);
+    ID                     : IN    STD_LOGIC_VECTOR(g_aux.id_w-1 DOWNTO 0);
+    TESTIO                 : INOUT STD_LOGIC_VECTOR(g_aux.testio_w-1 DOWNTO 0);
+    
+    -- I2C Interface to Sensors
+    SENS_SC                : INOUT STD_LOGIC := 'H';
+    SENS_SD                : INOUT STD_LOGIC := 'H';
+
+    -- pmbus
+    PMBUS_SC               : INOUT STD_LOGIC := 'H';
+    PMBUS_SD               : INOUT STD_LOGIC := 'H';
+    PMBUS_ALERT            : IN    STD_LOGIC := '0';
+    
+    -- DDR reference clock domains reset creation
+    MB_I_REF_CLK           : IN    STD_LOGIC := '0';  -- 25 MHz
+    MB_II_REF_CLK          : IN    STD_LOGIC := '0';  -- 25 MHz
+    
+    -- 1GbE Control Interface
+    ETH_CLK                : IN    STD_LOGIC;  -- 125 MHz
+    ETH_SGIN               : IN    STD_LOGIC_VECTOR(c_unb2_board_nof_eth-1 DOWNTO 0) := (OTHERS=>'0');
+    ETH_SGOUT              : OUT   STD_LOGIC_VECTOR(c_unb2_board_nof_eth-1 DOWNTO 0)    
+  );
+END ctrl_unb2_board;
+
+
+ARCHITECTURE str OF ctrl_unb2_board IS
+
+  CONSTANT c_reset_len   : NATURAL := 4;  -- >= c_meta_delay_len from common_pkg
+  
+  -- Clock and reset
+  SIGNAL i_ext_clk200           : STD_LOGIC;
+  SIGNAL ext_pps                : STD_LOGIC;
+ 
+  SIGNAL i_xo_ethclk            : STD_LOGIC;
+  SIGNAL i_xo_rst               : STD_LOGIC;
+  SIGNAL i_mm_rst               : STD_LOGIC;
+  SIGNAL i_mm_clk               : STD_LOGIC;
+  SIGNAL mm_locked              : STD_LOGIC;
+  SIGNAL mm_sim_clk             : STD_LOGIC := '1';
+  SIGNAL epcs_clk               : STD_LOGIC := '1';
+  SIGNAL clk125                 : STD_LOGIC := '1';
+  SIGNAL clk100                 : STD_LOGIC := '1';
+  SIGNAL clk50                  : STD_LOGIC := '1';
+
+  SIGNAL mm_wdi                 : STD_LOGIC;
+
+  SIGNAL mm_pulse_ms            : STD_LOGIC;
+  SIGNAL mm_pulse_s             : STD_LOGIC;
+  SIGNAL mm_board_sens_start    : STD_LOGIC;
+ 
+  SIGNAL led_toggle             : STD_LOGIC;
+  SIGNAL led_toggle_red         : STD_LOGIC;
+  SIGNAL led_toggle_green       : STD_LOGIC;
+ 
+  -- eth1g
+  SIGNAL i_tse_clk              : STD_LOGIC;
+  SIGNAL eth1g_led              : t_tech_tse_led;
+  
+  -- Manual WDI override
+  SIGNAL wdi_override           : STD_LOGIC;
+
+  -- Temperature alarm  (temp > g_fpga_temp_high) 
+  SIGNAL temp_alarm             : STD_LOGIC;
+
+  -- UDP offload I/O
+  SIGNAL eth1g_udp_tx_sosi_arr  : t_dp_sosi_arr(c_eth_nof_udp_ports-1 DOWNTO 0) := (OTHERS=>c_dp_sosi_rst);
+  SIGNAL eth1g_udp_tx_siso_arr  : t_dp_siso_arr(c_eth_nof_udp_ports-1 DOWNTO 0);  
+  SIGNAL eth1g_udp_rx_sosi_arr  : t_dp_sosi_arr(c_eth_nof_udp_ports-1 DOWNTO 0);
+  SIGNAL eth1g_udp_rx_siso_arr  : t_dp_siso_arr(c_eth_nof_udp_ports-1 DOWNTO 0) := (OTHERS=>c_dp_siso_rdy);
+
+BEGIN
+
+  ext_clk200 <= i_ext_clk200;
+  xo_ethclk  <= i_xo_ethclk;
+  xo_rst     <=     i_xo_rst;
+  xo_rst_n   <= NOT i_xo_rst; 
+  mm_clk     <= i_mm_clk;
+  mm_rst     <= i_mm_rst;
+  
+  -- Default leave unused INOUT tri-state
+  INTA <= 'Z';
+  INTB <= 'Z';
+  
+  TESTIO <= (OTHERS=>'Z');  -- Leave unused INOUT tri-state
+ 
+  ext_pps <= PPS;  -- use more special name for PPS pin signal to ease searching for it in editor
+  
+  -----------------------------------------------------------------------------
+  -- ext_clk200 = CLK
+  -----------------------------------------------------------------------------
+  i_ext_clk200 <= CLK;  -- use more special name for CLK pin signal to ease searching for it in editor, the external 200 MHz CLK as ext_clk200
+  
+  u_common_areset_ext : ENTITY common_lib.common_areset
+  GENERIC MAP (
+    g_rst_level => '1',       -- power up default will be inferred in FPGA
+    g_delay_len => c_reset_len
+  )
+  PORT MAP (
+    in_rst    => '0',         -- release reset after some clock cycles
+    clk       => i_ext_clk200,
+    out_rst   => ext_rst200
+  );
+  
+  -----------------------------------------------------------------------------
+  -- xo_ethclk = ETH_CLK
+  -----------------------------------------------------------------------------
+  
+  i_xo_ethclk <= ETH_CLK;   -- use the ETH_CLK pin as xo_clk
+  
+  u_common_areset_xo : ENTITY common_lib.common_areset
+  GENERIC MAP (
+    g_rst_level => '1',       -- power up default will be inferred in FPGA
+    g_delay_len => c_reset_len
+  )
+  PORT MAP (
+    in_rst    => '0',         -- release reset after some clock cycles
+    clk       => i_xo_ethclk,
+    out_rst   => i_xo_rst
+  );
+
+
+  -----------------------------------------------------------------------------
+  -- MB_I_REF_CLK  --> mb_I_ref_rst
+  -- MB_II_REF_CLK --> mb_II_ref_rst
+  -----------------------------------------------------------------------------
+  
+  u_common_areset_mb_I : ENTITY common_lib.common_areset
+  GENERIC MAP (
+    g_rst_level => '1',       -- power up default will be inferred in FPGA
+    g_delay_len => c_reset_len
+  )
+  PORT MAP (
+    in_rst    => i_mm_rst,   -- release reset some clock cycles after i_mm_rst went low
+    clk       => MB_I_REF_CLK,
+    out_rst   => mb_I_ref_rst
+  );
+  
+  u_common_areset_mb_II : ENTITY common_lib.common_areset
+  GENERIC MAP (
+    g_rst_level => '1',       -- power up default will be inferred in FPGA
+    g_delay_len => c_reset_len
+  )
+  PORT MAP (
+    in_rst    => i_mm_rst,   -- release reset some clock cycles after i_mm_rst went low
+    clk       => MB_II_REF_CLK,
+    out_rst   => mb_II_ref_rst
+  );
+  
+  -----------------------------------------------------------------------------
+  -- dp_clk
+  -- . release dp_rst some clock cycles after mm_rst went low
+  -----------------------------------------------------------------------------
+  
+  gen_dp_clk_sim: IF g_sim = TRUE GENERATE
+    dp_clk <= i_ext_clk200;
+    
+    u_common_areset_st : ENTITY common_lib.common_areset
+    GENERIC MAP (
+      g_rst_level => '1',
+      g_delay_len => c_reset_len
+    )
+    PORT MAP (
+      in_rst    => i_mm_rst,   -- release reset some clock cycles after i_mm_rst went low
+      clk       => dp_clk_in,
+      out_rst   => dp_rst
+    );
+  END GENERATE;
+  
+  gen_dp_clk_hardware: IF g_sim = FALSE GENERATE
+    gen_pll: IF g_dp_clk_use_pll = TRUE GENERATE
+      u_unb2_board_clk200_pll : ENTITY work.unb2_board_clk200_pll
+      GENERIC MAP (
+        g_technology          => g_technology,
+        g_use_fpll            => TRUE,
+        g_clk200_phase_shift  => g_dp_clk_phase
+      )
+      PORT MAP (
+        arst       => i_mm_rst,
+        clk200     => i_ext_clk200,
+        st_clk200  => dp_clk,  -- = c0
+        st_rst200  => dp_rst
+      );
+    END GENERATE;
+  
+    no_pll: IF g_dp_clk_use_pll = FALSE GENERATE
+      dp_clk <= i_ext_clk200;
+      
+      u_common_areset_st : ENTITY common_lib.common_areset
+      GENERIC MAP (
+        g_rst_level => '1',
+        g_delay_len => c_reset_len
+      )
+      PORT MAP (
+        in_rst    => i_mm_rst,   -- release reset some clock cycles after i_mm_rst went low
+        clk       => dp_clk_in,
+        out_rst   => dp_rst
+      );    
+    END GENERATE;
+  END GENERATE;
+  
+  
+  -----------------------------------------------------------------------------
+  -- mm_clk
+  -- . use mm_sim_clk in sim
+  -- . derived from ETH_CLK via PLL on hardware
+  -----------------------------------------------------------------------------
+
+  i_mm_clk <= mm_sim_clk WHEN g_sim = TRUE ELSE
+              clk125     WHEN g_mm_clk_freq = c_unb2_board_mm_clk_freq_125M ELSE
+              clk100     WHEN g_mm_clk_freq = c_unb2_board_mm_clk_freq_100M ELSE
+              clk50      WHEN g_mm_clk_freq = c_unb2_board_mm_clk_freq_50M  ELSE
+              clk50;  -- default
+
+  gen_mm_clk_sim: IF g_sim = TRUE GENERATE
+      epcs_clk    <= NOT epcs_clk AFTER 25 ns; -- 20 MHz, 50ns/2
+      clk50       <= NOT clk50 AFTER 10 ns;    -- 50 MHz, 20ns/2
+      clk100      <= NOT clk100 AFTER 5 ns;    -- 100 MHz, 10ns/2
+      clk125      <= NOT clk125 AFTER 4 ns;    -- 125 MHz, 8ns/2
+      mm_sim_clk  <= NOT mm_sim_clk AFTER 50 ns;  -- 10 MHz, 100ns/2  --> FIXME: this mm_sim_clk should come from the MMM so that its speed can be adapted
+      mm_locked   <= '0', '1' AFTER 70 ns;
+  END GENERATE;
+
+  gen_mm_clk_hardware: IF g_sim = FALSE GENERATE
+    u_unb2_board_clk125_pll : ENTITY work.unb2_board_clk125_pll
+    GENERIC MAP (
+      g_use_fpll   => TRUE,
+      g_technology => g_technology
+    )
+    PORT MAP (
+      arst       => i_xo_rst,
+      clk125     => i_xo_ethclk,
+      c0_clk20   => epcs_clk,
+      c1_clk50   => clk50,
+      c2_clk100  => clk100,
+      c3_clk125  => clk125,
+      pll_locked => mm_locked
+    );
+  END GENERATE;
+
+  u_unb2_board_node_ctrl : ENTITY work.unb2_board_node_ctrl
+  GENERIC MAP (
+    g_pulse_us => g_mm_clk_freq / (10**6)     -- nof system clock cycles to get us period, equal to system clock frequency / 10**6
+  )
+  PORT MAP (
+    -- MM clock domain reset
+    mm_clk      => i_mm_clk,
+    mm_locked   => mm_locked,
+    mm_rst      => i_mm_rst,
+    -- WDI extend
+    mm_wdi_in   => pout_wdi,
+    mm_wdi_out  => mm_wdi,  -- actively toggle the WDI via pout_wdi from software with toggle extend to allow software reload
+    -- Pulses
+    mm_pulse_us => OPEN,
+    mm_pulse_ms => mm_pulse_ms,
+    mm_pulse_s  => mm_pulse_s  -- could be used to toggle a LED
+  );
+  
+    
+  -----------------------------------------------------------------------------
+  -- System info
+  -----------------------------------------------------------------------------
+  cs_sim <= is_true(g_sim);
+  
+  u_mms_unb2_board_system_info : ENTITY work.mms_unb2_board_system_info
+  GENERIC MAP (
+    g_sim         => g_sim,
+    g_technology  => g_technology,
+    g_design_name => g_design_name,
+    g_fw_version  => g_fw_version,
+    g_stamp_date  => g_stamp_date,
+    g_stamp_time  => g_stamp_time,
+    g_stamp_svn   => g_stamp_svn,
+    g_design_note => g_design_note
+  )
+  PORT MAP (
+    mm_clk      => i_mm_clk,
+    mm_rst      => i_mm_rst,
+
+    hw_version  => VERSION,
+    id          => ID,
+
+    reg_mosi    => reg_unb_system_info_mosi, 
+    reg_miso    => reg_unb_system_info_miso,
+
+    rom_mosi    => rom_unb_system_info_mosi, 
+    rom_miso    => rom_unb_system_info_miso,
+
+    chip_id     => this_chip_id,
+    bck_id      => this_bck_id
+  );
+
+
+  -----------------------------------------------------------------------------
+  -- Red LED control
+  -----------------------------------------------------------------------------
+
+  gen_app_led_red: IF g_app_led_red = TRUE GENERATE
+    -- Let external app control the LED via the app_led_red input
+    TESTIO(c_unb2_board_testio_led_red)   <= app_led_red;
+  END GENERATE;
+
+  no_app_led_red: IF g_app_led_red = FALSE GENERATE
+    TESTIO(c_unb2_board_testio_led_red)   <= led_toggle_red;   
+  END GENERATE;
+
+
+  -----------------------------------------------------------------------------
+  -- Green LED control
+  -----------------------------------------------------------------------------
+
+  gen_app_led_green: IF g_app_led_green = TRUE GENERATE
+    -- Let external app control the LED via the app_led_green input
+    TESTIO(c_unb2_board_testio_led_green) <= app_led_green;  
+  END GENERATE;
+
+  no_app_led_green: IF g_app_led_green = FALSE GENERATE
+    TESTIO(c_unb2_board_testio_led_green) <= led_toggle_green;   
+  END GENERATE;
+
+
+  ------------------------------------------------------------------------------
+  -- Toggle red LED when unb2_minimal is running, green LED for other designs.
+  ------------------------------------------------------------------------------
+  led_toggle_red   <= sel_a_b(g_factory_image=TRUE,  led_toggle, '0');
+  led_toggle_green <= sel_a_b(g_factory_image=FALSE, led_toggle, '0');
+
+  u_toggle : ENTITY common_lib.common_toggle
+  PORT MAP (
+    rst         => i_mm_rst,
+    clk         => i_mm_clk,
+    in_dat      => mm_pulse_s,
+    out_dat     => led_toggle
+  );
+
+
+  ------------------------------------------------------------------------------
+  -- WDI override
+  ------------------------------------------------------------------------------
+  -- Actively reset watchdog from software when used, else disable watchdog by leaving the WDI at tri-state level.
+  -- A high temp_alarm will keep WDI asserted, causing the watch dog to reset the FPGA.
+  -- A third option is to override the WDI manually using the output of a dedicated reg_wdi.
+  WDI <= mm_wdi OR temp_alarm OR wdi_override; 
+
+  u_unb2_board_wdi_reg : ENTITY work.unb2_board_wdi_reg
+  PORT MAP (
+    mm_rst              => i_mm_rst,
+    mm_clk              => i_mm_clk,
+     
+    sla_in              => reg_wdi_mosi,
+    sla_out             => reg_wdi_miso,
+    
+    wdi_override        => wdi_override
+  );
+
+
+  ------------------------------------------------------------------------------
+  -- Remote upgrade
+  ------------------------------------------------------------------------------                                       
+  -- Every design instantiates an mms_remu instance + MM status & control ports.
+  -- So there is full control over the memory mapped registers to set start address of the flash 
+  -- and reconfigure from that address.
+  u_mms_remu: ENTITY remu_lib.mms_remu
+  GENERIC MAP ( 
+    g_technology       => g_technology
+  )
+  PORT MAP (
+    mm_rst             => i_mm_rst,
+    mm_clk             => i_mm_clk,
+
+    epcs_clk           => epcs_clk,
+
+    remu_mosi          => reg_remu_mosi,
+    remu_miso          => reg_remu_miso
+  );
+
+  -------------------------------------------------------------------------------
+  ---- EPCS
+  -------------------------------------------------------------------------------
+  u_mms_epcs: ENTITY epcs_lib.mms_epcs
+  GENERIC MAP ( 
+    g_technology       => g_technology
+  )
+  PORT MAP (
+    mm_rst             => i_mm_rst,
+    mm_clk             => i_mm_clk,
+
+    epcs_clk           => epcs_clk,
+
+    epcs_mosi          => reg_epcs_mosi,
+    epcs_miso          => reg_epcs_miso,
+
+    dpmm_ctrl_mosi     => reg_dpmm_ctrl_mosi,
+    dpmm_ctrl_miso     => reg_dpmm_ctrl_miso,
+
+    dpmm_data_mosi     => reg_dpmm_data_mosi,
+    dpmm_data_miso     => reg_dpmm_data_miso,
+
+    mmdp_ctrl_mosi     => reg_mmdp_ctrl_mosi,
+    mmdp_ctrl_miso     => reg_mmdp_ctrl_miso,
+
+    mmdp_data_mosi     => reg_mmdp_data_mosi,
+    mmdp_data_miso     => reg_mmdp_data_miso
+  );
+  
+  ------------------------------------------------------------------------------
+  -- PPS input
+  ------------------------------------------------------------------------------
+  
+  u_mms_ppsh : ENTITY ppsh_lib.mms_ppsh
+  GENERIC MAP (
+    g_technology      => g_technology,
+    g_st_clk_freq     => g_dp_clk_freq
+  )
+  PORT MAP (
+    -- Clocks and reset
+    mm_rst           => i_mm_rst,
+    mm_clk           => i_mm_clk,
+    st_rst           => dp_rst_in,
+    st_clk           => dp_clk_in,
+    pps_ext          => ext_pps,           -- with unknown but constant phase to st_clk
+    
+    -- Memory-mapped clock domain
+    reg_mosi         => reg_ppsh_mosi,
+    reg_miso         => reg_ppsh_miso,
+    
+    -- Streaming clock domain
+    pps_sys          => dp_pps
+  );
+  
+  
+  ------------------------------------------------------------------------------
+  -- I2C control for UniBoard sensors
+  ------------------------------------------------------------------------------
+  
+  mm_board_sens_start <= mm_pulse_s WHEN g_sim=FALSE ELSE mm_pulse_ms;  -- speed up in simulation
+  
+  u_mms_unb2_board_sens : ENTITY work.mms_unb2_board_sens
+  GENERIC MAP (
+    g_sim       => g_sim,
+    g_clk_freq  => g_mm_clk_freq
+  )
+  PORT MAP (
+    -- Clocks and reset
+    mm_rst    => i_mm_rst,
+    mm_clk    => i_mm_clk,
+    mm_start  => mm_board_sens_start,
+    
+    -- Memory-mapped clock domain
+    reg_mosi  => reg_unb_sens_mosi,
+    reg_miso  => reg_unb_sens_miso,
+    
+    -- i2c bus
+    scl       => SENS_SC,
+    sda       => SENS_SD
+  );
+
+  u_mms_unb2_board_pmbus : ENTITY work.mms_unb2_board_sens
+  GENERIC MAP (
+    g_sim       => g_sim,
+    g_clk_freq  => 20 * 10**6 -- (to be checked) this (re)calculation lets the I2C bus run at ~300kHz
+  )
+  PORT MAP (
+    -- Clocks and reset
+    mm_rst    => i_mm_rst,
+    mm_clk    => i_mm_clk,
+    mm_start  => mm_board_sens_start,
+    
+    -- Memory-mapped clock domain
+    reg_mosi  => reg_unb_pmbus_mosi,
+    reg_miso  => reg_unb_pmbus_miso,
+    
+    -- i2c bus
+    scl       => PMBUS_SC,
+    sda       => PMBUS_SD
+  );
+
+  u_mms_unb2_fpga_sens : ENTITY work.mms_unb2_fpga_sens
+  GENERIC MAP (
+    g_sim        => g_sim,
+    g_technology => g_technology,
+    g_temp_high  => g_fpga_temp_high
+  )
+  PORT MAP (
+    -- Clocks and reset
+    mm_rst    => i_mm_rst,
+    mm_clk    => i_mm_clk,
+
+    --mm_start  => mm_board_sens_start, -- this does not work, perhaps pulsewidth is too small
+    mm_start  => '1', -- this works
+    
+    -- Memory-mapped clock domain
+    reg_temp_mosi  => reg_fpga_temp_sens_mosi,
+    reg_temp_miso  => reg_fpga_temp_sens_miso,
+    reg_voltage_mosi  => reg_fpga_voltage_sens_mosi,
+    reg_voltage_miso  => reg_fpga_voltage_sens_miso,
+    
+    -- Temperature alarm
+    temp_alarm => temp_alarm
+  );
+
+
+  ------------------------------------------------------------------------------
+  -- Ethernet 1GbE
+  ------------------------------------------------------------------------------
+
+  gen_tse_clk_buf: IF g_tse_clk_buf=TRUE GENERATE
+    -- Separate clkbuf for the 1GbE tse_clk:
+    u_tse_clk_buf : ENTITY tech_clkbuf_lib.tech_clkbuf
+    GENERIC MAP (
+      g_technology   => g_technology,
+      g_clock_net    => "GLOBAL"
+    )
+    PORT MAP (
+      inclk  => i_xo_ethclk,
+      outclk => i_tse_clk
+    );
+  END GENERATE;
+
+  gen_tse_no_clk_buf: IF g_tse_clk_buf=FALSE GENERATE
+      i_tse_clk <= i_xo_ethclk;
+  END GENERATE;
+
+  
+  wire_udp_offload: FOR i IN 0 TO g_udp_offload_nof_streams-1 GENERATE
+    eth1g_udp_tx_sosi_arr(i) <= udp_tx_sosi_arr(i);
+    udp_tx_siso_arr(i)       <= eth1g_udp_tx_siso_arr(i);
+  
+    udp_rx_sosi_arr(i)       <= eth1g_udp_rx_sosi_arr(i);
+    eth1g_udp_rx_siso_arr(i) <= udp_rx_siso_arr(i);
+  END GENERATE;
+
+  -- In simulation use file IO for MM control. In simulation only use 1GbE for streaming DP data offload (or on load) via 1GbE. 
+  no_eth1g : IF g_sim=TRUE AND g_udp_offload=FALSE GENERATE
+    eth1g_reg_interrupt <= '0';
+    eth1g_tse_miso <= c_mem_miso_rst;
+    eth1g_reg_miso <= c_mem_miso_rst;
+    eth1g_ram_miso <= c_mem_miso_rst;
+  END GENERATE;
+  
+  --On hardware always generate 1GbE for MM control. In simulation only use 1GbE for streaming DP data offload (or on load) via 1GbE. 
+  gen_eth: IF g_sim=FALSE OR g_udp_offload=TRUE GENERATE
+    u_eth : ENTITY eth_lib.eth
+    GENERIC MAP (
+      g_technology         => g_technology,
+      g_init_ip_address    => g_base_ip & X"0000", -- Last two bytes set by board/FPGA ID.
+      g_cross_clock_domain => g_udp_offload
+    )
+    PORT MAP (
+      -- Clocks and reset
+      mm_rst            => eth1g_mm_rst, -- use reset from QSYS
+      mm_clk            => i_mm_clk,     -- use mm_clk direct
+      eth_clk           => i_tse_clk,    -- 125 MHz clock
+      st_rst            => dp_rst_in,
+      st_clk            => dp_clk_in,       
+    
+      -- UDP transmit interface
+      udp_tx_snk_in_arr  => eth1g_udp_tx_sosi_arr, 
+      udp_tx_snk_out_arr => eth1g_udp_tx_siso_arr,
+      -- UDP receive interface
+      udp_rx_src_in_arr  => eth1g_udp_rx_siso_arr,
+      udp_rx_src_out_arr => eth1g_udp_rx_sosi_arr,
+ 
+      -- Memory Mapped Slaves
+      tse_sla_in        => eth1g_tse_mosi,
+      tse_sla_out       => eth1g_tse_miso,
+      reg_sla_in        => eth1g_reg_mosi,
+      reg_sla_out       => eth1g_reg_miso,
+      reg_sla_interrupt => eth1g_reg_interrupt,
+      ram_sla_in        => eth1g_ram_mosi,
+      ram_sla_out       => eth1g_ram_miso,
+  
+      -- PHY interface
+      eth_txp           => ETH_SGOUT(0),
+      eth_rxp           => ETH_SGIN(0),
+  
+      -- LED interface
+      tse_led           => eth1g_led
+    );
+  END GENERATE;
+  
+END str;
diff --git a/boards/uniboard2a/libraries/unb2a_board/src/vhdl/mms_unb2_board_sens.vhd b/boards/uniboard2a/libraries/unb2a_board/src/vhdl/mms_unb2_board_sens.vhd
new file mode 100644
index 0000000000000000000000000000000000000000..434fd9359f9f6cf5f7ce72ccffa9ac626a290b73
--- /dev/null
+++ b/boards/uniboard2a/libraries/unb2a_board/src/vhdl/mms_unb2_board_sens.vhd
@@ -0,0 +1,118 @@
+-------------------------------------------------------------------------------
+--
+-- Copyright (C) 2012-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 : MMS for unb2_board_sens
+-- Description: See unb2_board_sens.vhd
+
+LIBRARY IEEE, common_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;
+
+
+ENTITY mms_unb2_board_sens IS
+  GENERIC (
+    g_sim             : BOOLEAN := FALSE;
+    g_clk_freq        : NATURAL := 100*10**6;  -- clk frequency in Hz
+    g_temp_high       : NATURAL := 85
+  );
+  PORT (
+    -- Clocks and reset
+    mm_rst            : IN  STD_LOGIC;  -- reset synchronous with mm_clk
+    mm_clk            : IN  STD_LOGIC;  -- memory-mapped bus clock
+    mm_start          : IN  STD_LOGIC;
+    
+    -- Memory-mapped clock domain
+    reg_mosi          : IN  t_mem_mosi := c_mem_mosi_rst;  -- actual ranges defined by c_mm_reg
+    reg_miso          : OUT t_mem_miso;                    -- actual ranges defined by c_mm_reg
+    
+    -- i2c bus
+    scl               : INOUT STD_LOGIC := '0';
+    sda               : INOUT STD_LOGIC := '0';
+
+    -- Temperature alarm output
+    temp_alarm        : OUT STD_LOGIC
+  );
+END mms_unb2_board_sens;
+
+
+ARCHITECTURE str OF mms_unb2_board_sens IS
+
+  CONSTANT c_sens_nof_result : NATURAL := 4;  -- Should match nof read bytes via I2C in the unb2_board_sens_ctrl SEQUENCE list
+  CONSTANT c_temp_high_w     : NATURAL := 7;  -- Allow user to use only 7 (no sign, only positive) of 8 bits to set set max temp
+
+  SIGNAL sens_err  : STD_LOGIC;
+  SIGNAL sens_data : t_slv_8_arr(0 TO c_sens_nof_result-1);
+
+  SIGNAL temp_high : STD_LOGIC_VECTOR(c_temp_high_w-1 DOWNTO 0);
+
+BEGIN
+
+  u_unb2_board_sens_reg : ENTITY work.unb2_board_sens_reg
+  GENERIC MAP (
+    g_sens_nof_result => c_sens_nof_result,
+    g_temp_high       => g_temp_high  
+  )
+  PORT MAP (
+    -- Clocks and reset
+    mm_rst       => mm_rst,
+    mm_clk       => mm_clk,
+    
+    -- Memory Mapped Slave in mm_clk domain
+    sla_in       => reg_mosi,
+    sla_out      => reg_miso,
+    
+    -- MM registers
+    sens_err     => sens_err,  -- using same protocol list for both node2 and all nodes implies that sens_err is only valid for node2.
+    sens_data    => sens_data,
+
+    -- Max temp threshold
+    temp_high    => temp_high
+  );
+  
+  u_unb2_board_sens : ENTITY work.unb2_board_sens
+  GENERIC MAP (
+    g_sim             => g_sim,
+    g_clk_freq        => g_clk_freq,
+    g_temp_high       => g_temp_high,
+    g_sens_nof_result => c_sens_nof_result
+  )
+  PORT MAP (
+    clk          => mm_clk,
+    rst          => mm_rst,
+    start        => mm_start,
+    -- i2c bus
+    scl          => scl,
+    sda          => sda,
+    -- read results
+    sens_evt     => OPEN,
+    sens_err     => sens_err,
+    sens_data    => sens_data
+  );
+
+  -- Temperature: 7 bits (1 bit per degree) plus sign. A faulty readout (never pulled down = all ones) 
+  -- would produce -1 degrees so does not trigger a temperature alarm.
+  -- temp_high is 7 bits, preceded by a '0' to allow only positive temps to be set. 
+  temp_alarm <= '1' WHEN (SIGNED(sens_data(0)) > SIGNED('0' & temp_high)) ELSE '0';
+    
+END str;
+
diff --git a/boards/uniboard2a/libraries/unb2a_board/src/vhdl/mms_unb2_board_system_info.vhd b/boards/uniboard2a/libraries/unb2a_board/src/vhdl/mms_unb2_board_system_info.vhd
new file mode 100644
index 0000000000000000000000000000000000000000..7e70d05b559657793da91a2be966549d49b55ed6
--- /dev/null
+++ b/boards/uniboard2a/libraries/unb2a_board/src/vhdl/mms_unb2_board_system_info.vhd
@@ -0,0 +1,138 @@
+-------------------------------------------------------------------------------
+--
+-- Copyright (C) 2012-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/>.
+--
+-------------------------------------------------------------------------------
+
+LIBRARY IEEE, common_lib, technology_lib;
+USE IEEE.STD_LOGIC_1164.ALL;
+USE common_lib.common_pkg.ALL;
+USE common_lib.common_mem_pkg.ALL;
+USE work.unb2_board_pkg.ALL;
+USE technology_lib.technology_pkg.ALL;
+
+ENTITY mms_unb2_board_system_info IS
+  GENERIC (
+    g_sim         : BOOLEAN := FALSE;
+    g_technology  : NATURAL := c_tech_arria10;
+    g_design_name : STRING;
+    g_fw_version  : t_unb2_board_fw_version := c_unb2_board_fw_version;  -- firmware version x.y
+    g_stamp_date  : NATURAL := 0;
+    g_stamp_time  : NATURAL := 0;
+    g_stamp_svn   : NATURAL := 0;
+    g_design_note : STRING  := "";
+    g_aux         : t_c_unb2_board_aux := c_unb2_board_aux               -- aux contains the hardware version
+  );
+  PORT (
+    mm_rst          : IN    STD_LOGIC;
+    mm_clk          : IN    STD_LOGIC;
+
+    -- MM registers
+    reg_mosi        : IN    t_mem_mosi := c_mem_mosi_rst;
+    reg_miso        : OUT   t_mem_miso;
+
+    rom_mosi        : IN    t_mem_mosi := c_mem_mosi_rst;
+    rom_miso        : OUT   t_mem_miso;
+
+    hw_version      : IN  STD_LOGIC_VECTOR(g_aux.version_w-1 DOWNTO 0);
+    id              : IN  STD_LOGIC_VECTOR(g_aux.id_w-1 DOWNTO 0);
+
+    chip_id         : OUT STD_LOGIC_VECTOR(c_unb2_board_nof_chip_w-1 DOWNTO 0);
+    bck_id          : OUT STD_LOGIC_VECTOR(c_unb2_board_nof_uniboard_w-1 DOWNTO 0);
+
+    -- Info output still supported for older designs
+    info            : OUT STD_LOGIC_VECTOR(c_word_w-1 DOWNTO 0)
+    );
+END mms_unb2_board_system_info;
+
+
+ARCHITECTURE str OF mms_unb2_board_system_info IS
+
+  -- Provide different prefixes (absolute and relative) for the same path. ModelSim understands $UNB, Quartus does not.
+  -- Required because the work paths of ModelSim and Quartus are different.
+  CONSTANT c_quartus_path_prefix  : STRING := "";
+  CONSTANT c_modelsim_path_prefix : STRING := "$UNB/Firmware/designs/" & g_design_name & "/build/synth/quartus/";
+  CONSTANT c_path_prefix          : STRING := sel_a_b(g_sim, c_modelsim_path_prefix, c_quartus_path_prefix);
+
+-- No longer supporting MIF files in sim as non-$UNB (e.g. $AARTFAAC) designs will cause path error.
+--  CONSTANT c_mif_name    : STRING := sel_a_b((g_design_name="UNUSED"), g_design_name, c_path_prefix & g_design_name & ".mif");
+  CONSTANT c_mif_name    : STRING :=  sel_a_b(g_sim, "UNUSED", sel_a_b((g_design_name="UNUSED"), g_design_name, c_path_prefix & g_design_name & ".mif"));
+
+  CONSTANT c_rom_addr_w  : NATURAL := 10; -- 2^10 = 1024 addresses * 32 bits = 4 kiB
+
+  CONSTANT c_mm_rom      : t_c_mem := (latency  => 1,
+                                      adr_w    => c_rom_addr_w,
+                                      dat_w    => c_word_w,
+                                      nof_dat  => 2**c_rom_addr_w,  -- = 2**adr_w
+                                      init_sl  => '0');
+ 
+  SIGNAL i_info          : STD_LOGIC_VECTOR(c_word_w-1 DOWNTO 0);
+
+BEGIN
+
+ info <= i_info;
+ 
+  u_unb2_board_system_info: ENTITY work.unb2_board_system_info
+  GENERIC MAP (
+    g_sim        => g_sim,
+    g_fw_version => g_fw_version
+  )            
+  PORT MAP (        
+    clk        => mm_clk, 
+    hw_version => hw_version,
+    id         => id,
+    info       => i_info,
+    chip_id    => chip_id,
+    bck_id     => bck_id
+   );
+
+  u_unb2_board_system_info_reg: ENTITY work.unb2_board_system_info_reg                   
+  GENERIC MAP (
+    g_design_name => g_design_name,
+    g_stamp_date  => g_stamp_date,
+    g_stamp_time  => g_stamp_time,
+    g_stamp_svn   => g_stamp_svn,
+    g_design_note => g_design_note
+  )    
+  PORT MAP (       
+    mm_rst    => mm_rst, 
+    mm_clk    => mm_clk,
+
+    sla_in    => reg_mosi,
+    sla_out   => reg_miso,
+
+    info      => i_info
+  );
+
+  u_common_rom : ENTITY common_lib.common_rom
+  GENERIC MAP (
+    g_technology => g_technology,
+    g_ram       => c_mm_rom,
+    g_init_file => c_mif_name
+  )
+  PORT MAP (
+    rst     => mm_rst,
+    clk     => mm_clk,
+    rd_en   => rom_mosi.rd,
+    rd_adr  => rom_mosi.address(c_mm_rom.adr_w-1 DOWNTO 0),
+    rd_dat  => rom_miso.rddata(c_mm_rom.dat_w-1 DOWNTO 0),
+    rd_val  => rom_miso.rdval
+  );
+  
+END str;
+
diff --git a/boards/uniboard2a/libraries/unb2a_board/src/vhdl/mms_unb2_fpga_sens.vhd b/boards/uniboard2a/libraries/unb2a_board/src/vhdl/mms_unb2_fpga_sens.vhd
new file mode 100644
index 0000000000000000000000000000000000000000..96ae8dc74dd007749a9ceafa6f9b081e45e2085e
--- /dev/null
+++ b/boards/uniboard2a/libraries/unb2a_board/src/vhdl/mms_unb2_fpga_sens.vhd
@@ -0,0 +1,122 @@
+-------------------------------------------------------------------------------
+--
+-- Copyright (C) 2012-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 : MMS for unb2_fpga_sens
+-- Description: See unb2_fpga_sens.vhd
+
+LIBRARY IEEE, technology_lib, common_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 technology_lib.technology_pkg.ALL;
+
+
+ENTITY mms_unb2_fpga_sens IS
+  GENERIC (
+    g_sim             : BOOLEAN := FALSE;
+    g_technology      : NATURAL := c_tech_arria10;
+    g_temp_high       : NATURAL := 85
+  );
+  PORT (
+    -- Clocks and reset
+    mm_rst            : IN  STD_LOGIC;  -- reset synchronous with mm_clk
+    mm_clk            : IN  STD_LOGIC;  -- memory-mapped bus clock
+    mm_start          : IN  STD_LOGIC;
+    
+    -- Memory-mapped clock domain
+    reg_temp_mosi          : IN  t_mem_mosi := c_mem_mosi_rst;  -- actual ranges defined by c_mm_reg
+    reg_temp_miso          : OUT t_mem_miso;                    -- actual ranges defined by c_mm_reg
+    reg_voltage_mosi          : IN  t_mem_mosi := c_mem_mosi_rst;  -- actual ranges defined by c_mm_reg
+    reg_voltage_miso          : OUT t_mem_miso;                    -- actual ranges defined by c_mm_reg
+    
+    -- Temperature alarm output
+    temp_alarm        : OUT STD_LOGIC
+  );
+END mms_unb2_fpga_sens;
+
+
+ARCHITECTURE str OF mms_unb2_fpga_sens IS
+
+  CONSTANT c_sens_nof_result : NATURAL := 1;  -- 
+  CONSTANT c_temp_high_w     : NATURAL := 7;  -- Allow user to use only 7 (no sign, only positive) of 8 bits to set set max temp
+
+  SIGNAL sens_err  : STD_LOGIC;
+  SIGNAL sens_data : t_slv_8_arr(0 TO c_sens_nof_result-1);
+
+  SIGNAL temp_high : STD_LOGIC_VECTOR(c_temp_high_w-1 DOWNTO 0);
+
+BEGIN
+
+  u_unb2_fpga_sens_reg : ENTITY work.unb2_fpga_sens_reg
+  GENERIC MAP (
+    g_sim             => g_sim,
+    g_technology      => g_technology,
+    g_sens_nof_result => c_sens_nof_result,
+    g_temp_high       => g_temp_high  
+  )
+  PORT MAP (
+    -- Clocks and reset
+    mm_rst       => mm_rst,
+    mm_clk       => mm_clk,
+    start        => mm_start,
+    
+    -- Memory Mapped Slave in mm_clk domain
+    sla_temp_in       => reg_temp_mosi,
+    sla_temp_out      => reg_temp_miso,
+    sla_voltage_in    => reg_voltage_mosi,
+    sla_voltage_out   => reg_voltage_miso,
+    
+    -- MM registers
+    --sens_err     => sens_err,  -- using same protocol list for both node2 and all nodes implies that sens_err is only valid for node2.
+    --sens_data    => sens_data,
+
+    -- Max temp threshold
+    temp_high    => temp_high
+  );
+  
+--  u_unb2_board_sens : ENTITY work.unb2_board_sens
+--  GENERIC MAP (
+--    g_sim             => g_sim,
+--    g_clk_freq        => g_clk_freq,
+--    g_temp_high       => g_temp_high,
+--    g_sens_nof_result => c_sens_nof_result
+--  )
+--  PORT MAP (
+--    clk          => mm_clk,
+--    rst          => mm_rst,
+--    start        => mm_start,
+--    -- i2c bus
+--    scl          => scl,
+--    sda          => sda,
+--    -- read results
+--    sens_evt     => OPEN,
+--    sens_err     => sens_err,
+--    sens_data    => sens_data
+--  );
+
+  -- Temperature: 7 bits (1 bit per degree) plus sign. A faulty readout (never pulled down = all ones) 
+  -- would produce -1 degrees so does not trigger a temperature alarm.
+  -- temp_high is 7 bits, preceded by a '0' to allow only positive temps to be set. 
+  temp_alarm <= '0';--<= '1' WHEN (SIGNED(sens_data(0)) > SIGNED('0' & temp_high)) ELSE '0';
+    
+END str;
+
diff --git a/boards/uniboard2a/libraries/unb2a_board/src/vhdl/unb2_board_back_io.vhd b/boards/uniboard2a/libraries/unb2a_board/src/vhdl/unb2_board_back_io.vhd
new file mode 100644
index 0000000000000000000000000000000000000000..8142ed4527a9840b4b19c806788f9fb1da0b1737
--- /dev/null
+++ b/boards/uniboard2a/libraries/unb2a_board/src/vhdl/unb2_board_back_io.vhd
@@ -0,0 +1,68 @@
+------------------------------------------------------------------------------
+--
+-- Copyright (C) 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/>.
+--
+-------------------------------------------------------------------------------
+
+LIBRARY IEEE, common_lib;
+USE IEEE.STD_LOGIC_1164.ALL;
+USE work.unb2_board_pkg.ALL;
+
+
+ENTITY unb2_board_back_io IS
+  GENERIC (
+    g_nof_back_bus : NATURAL := c_unb2_board_tr_back.nof_bus
+  );
+  PORT (
+    serial_tx_arr  : IN  STD_LOGIC_VECTOR(g_nof_back_bus * c_unb2_board_tr_back.bus_w-1 DOWNTO 0) := (OTHERS=>'0');
+    serial_rx_arr  : OUT STD_LOGIC_VECTOR(g_nof_back_bus * c_unb2_board_tr_back.bus_w-1 DOWNTO 0);
+
+    -- back transceivers
+    BCK_RX       : IN    t_unb2_board_back_bus_2arr(g_nof_back_bus-1 DOWNTO 0) := (OTHERS=>(OTHERS=>'0'));
+    BCK_TX       : OUT   t_unb2_board_back_bus_2arr(g_nof_back_bus-1 DOWNTO 0);
+
+    BCK_SDA      : INOUT STD_LOGIC_VECTOR(c_unb2_board_tr_back.i2c_w-1 DOWNTO 0);
+    BCK_SCL      : INOUT STD_LOGIC_VECTOR(c_unb2_board_tr_back.i2c_w-1 DOWNTO 0);
+    BCK_ERR      : INOUT STD_LOGIC_VECTOR(c_unb2_board_tr_back.i2c_w-1 DOWNTO 0)
+  );
+END unb2_board_back_io;
+
+ARCHITECTURE str OF unb2_board_back_io IS
+
+  -- help signals so we can iterate through buses
+  SIGNAL si_tx_2arr : t_unb2_board_back_bus_2arr(g_nof_back_bus-1 DOWNTO 0);
+  SIGNAL si_rx_2arr : t_unb2_board_back_bus_2arr(g_nof_back_bus-1 DOWNTO 0);
+
+BEGIN
+
+  gen_buses : FOR i IN 0 TO g_nof_back_bus-1 GENERATE
+    BCK_TX(i)     <= si_tx_2arr(i);
+    si_rx_2arr(i) <= BCK_RX(i);
+  END GENERATE;
+
+
+  gen_wire_bus : FOR i IN 0 TO g_nof_back_bus-1 GENERATE
+    gen_wire_signals : FOR j IN 0 TO c_unb2_board_tr_back.bus_w-1 GENERATE
+
+      si_tx_2arr(i)(j) <= serial_tx_arr(i*c_unb2_board_tr_back.bus_w + j);
+      serial_rx_arr(i*c_unb2_board_tr_back.bus_w + j) <= si_rx_2arr(i)(j);
+
+    END GENERATE;
+  END GENERATE;
+
+END;
diff --git a/boards/uniboard2a/libraries/unb2a_board/src/vhdl/unb2_board_clk125_pll.vhd b/boards/uniboard2a/libraries/unb2a_board/src/vhdl/unb2_board_clk125_pll.vhd
new file mode 100644
index 0000000000000000000000000000000000000000..858cc68b92013637641691b30cdb7eb3bf206202
--- /dev/null
+++ b/boards/uniboard2a/libraries/unb2a_board/src/vhdl/unb2_board_clk125_pll.vhd
@@ -0,0 +1,110 @@
+-------------------------------------------------------------------------------
+--
+-- Copyright (C) 2015
+-- ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/>
+-- JIVE (Joint Institute for VLBI in Europe) <http://www.jive.nl/>
+-- P.O.Box 2, 7990 AA Dwingeloo, The Netherlands
+--
+-- This program is free software: you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation, either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program.  If not, see <http://www.gnu.org/licenses/>.
+--
+-------------------------------------------------------------------------------
+
+LIBRARY IEEE, common_lib, technology_lib, tech_clkbuf_lib, tech_pll_lib, tech_fractional_pll_lib;
+USE IEEE.STD_LOGIC_1164.ALL;
+USE common_lib.common_pkg.ALL;
+USE technology_lib.technology_pkg.ALL;
+
+-- Purpose: PLL for UniBoard node CLK input @ 125 MHz
+-- Description:
+--   c0 = 20 MHz
+--   c1 = 50 MHz
+--   c2 = 100 MHz
+--   c3 = 125 MHz
+-- 
+
+ENTITY unb2_board_clk125_pll IS
+  GENERIC (
+    g_technology : NATURAL := c_tech_arria10;
+    g_use_clkbuf : BOOLEAN := TRUE;
+    g_use_fpll   : BOOLEAN := FALSE
+  );
+  PORT (
+    arst        : IN  STD_LOGIC := '0';
+    clk125      : IN  STD_LOGIC := '0'; -- connect to UniBoard ETH_clk pin (125 MHz)
+
+    c0_clk20    : OUT STD_LOGIC;  -- PLL c0
+    c1_clk50    : OUT STD_LOGIC;  -- PLL c1
+    c2_clk100   : OUT STD_LOGIC;  -- PLL c2
+    c3_clk125   : OUT STD_LOGIC;  -- PLL c3
+    pll_locked  : OUT STD_LOGIC
+  );
+END unb2_board_clk125_pll;
+
+
+ARCHITECTURE arria10 OF unb2_board_clk125_pll IS
+
+  SIGNAL clk125buf : STD_LOGIC;
+
+BEGIN
+
+  no_clkbuf : IF g_use_clkbuf=FALSE GENERATE
+    clk125buf <= clk125;
+  END GENERATE;
+  
+  gen_clkbuf : IF g_use_clkbuf=TRUE GENERATE
+    u_clkbuf : ENTITY tech_clkbuf_lib.tech_clkbuf
+    GENERIC MAP (
+      g_technology   => g_technology,
+      g_clock_net    => "GLOBAL"
+    )
+    PORT MAP (
+      inclk  => clk125,
+      outclk => clk125buf
+    );
+  END GENERATE;
+
+
+  gen_pll : IF g_use_fpll=FALSE GENERATE
+    u_pll : ENTITY tech_pll_lib.tech_pll_clk125
+    GENERIC MAP (
+      g_technology => g_technology
+    )
+    PORT MAP (
+      areset  => arst,
+      inclk0  => clk125buf,
+      c0      => c0_clk20,
+      c1      => c1_clk50,
+      c2      => c2_clk100,
+      c3      => c3_clk125,
+      locked  => pll_locked
+    );
+  END GENERATE;
+
+  gen_fractional_pll : IF g_use_fpll=TRUE GENERATE
+    u_pll : ENTITY tech_fractional_pll_lib.tech_fractional_pll_clk125
+    GENERIC MAP (
+      g_technology => g_technology
+    )
+    PORT MAP (
+      areset  => arst,
+      inclk0  => clk125buf,
+      c0      => c0_clk20,
+      c1      => c1_clk50,
+      c2      => c2_clk100,
+      c3      => c3_clk125,
+      locked  => pll_locked
+    );
+  END GENERATE;
+
+END arria10;
diff --git a/boards/uniboard2a/libraries/unb2a_board/src/vhdl/unb2_board_clk200_pll.vhd b/boards/uniboard2a/libraries/unb2a_board/src/vhdl/unb2_board_clk200_pll.vhd
new file mode 100644
index 0000000000000000000000000000000000000000..63e575d26d41b00f75fa42ee937f963b5cf02aac
--- /dev/null
+++ b/boards/uniboard2a/libraries/unb2a_board/src/vhdl/unb2_board_clk200_pll.vhd
@@ -0,0 +1,222 @@
+-------------------------------------------------------------------------------
+--
+-- Copyright (C) 2010-2014
+-- ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/>
+-- JIVE (Joint Institute for VLBI in Europe) <http://www.jive.nl/>
+-- P.O.Box 2, 7990 AA Dwingeloo, The Netherlands
+--
+-- This program is free software: you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation, either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program.  If not, see <http://www.gnu.org/licenses/>.
+--
+-------------------------------------------------------------------------------
+
+LIBRARY IEEE, common_lib, technology_lib, tech_clkbuf_lib, tech_pll_lib, tech_fractional_pll_lib;
+USE IEEE.STD_LOGIC_1164.ALL;
+USE common_lib.common_pkg.ALL;
+USE technology_lib.technology_pkg.ALL;
+
+-- Purpose: PLL for UniBoard node CLK input @ 200 MHz
+-- Description:
+-- . The PLL runs in normal mode using c0 to compensate for the internal clock
+--   network delay, so that c0 = st_clk200 is aligned to the input clk200.
+-- . The assumption is that default the streaming DSP will run on the 200 MHz
+--   clock from the CLK input via c1 = st_clk200p.
+-- . The PLL normal mode operation compensates for internal clock network
+--   delays of c0. This compensations aligns c0 to inclk0. With
+--   tb_unb2_board_clk200_pll.vhd it appears that the phase setting for c0 does
+--   not influence the compensation. Therefore it is llso possible to use
+--   g_clk200_phase_shift /= 0 and touse c0 as processing clock instead of c1.
+-- . The phase offset of c0 and c1 in the clk200_pll MegaWizard component 
+--   can be set in steps of 11.25 degrees (and even finer):
+--                       g_clk200_phase_shift  (for c0)
+--     phase [degrees]   g_clk200p_phase_shift (for c1)
+--       0                 "0"
+--       11.25             "156"
+--       22.5              "313"
+--       33.75             "469"
+--       45                "625"
+--       56.25             "781"
+--       67.5              "938"
+--       78.75             "1094"
+--       90                "1250"
+--      101.25             "1406"  = 1250+ 156
+--      112.5              "1563"  = 1250+ 313
+--      123.75             "1719"  = 1250+ 469
+--      135                "1875"  = 1250+ 625
+--      146.25             "2031"  = 1250+ 781
+--      157.5              "2188"  = 1250+ 938
+--      168.75             "2344"  = 1250+1094
+--      180                "2500"  = 1250+1250
+--      191.25             "2656"  = 2500+ 156
+--      202.5              "2813"  = 2500+ 313
+--      213.75             "2969"  = 2500+ 469
+--      225                "3125"  = 2500+ 625
+--      236.25             "3281"  = 2500+ 781
+--      247.5              "3438"  = 2500+ 938
+--      258.75             "3594"  = 2500+1094
+--      270                "3750"  = 2500+1250
+--      281.25             "3906"  = 3750+ 156
+--      292.5              "4063"  = 3750+ 313
+--      303.75             "4219"  = 3750+ 469
+--      315                "4375"  = 3750+ 625
+--      326.25             "4531"  = 3750+ 781
+--      337.5              "4688"  = 3750+ 938
+--      348.75             "4844"  = 3750+1094
+--      360                "5000"  = 3750+1250
+-- . With a phase offset of 22.5 degrees the c1 = clk200p is offset by a 1/16
+--   period of 200 MHz, so 1/8 period of the 400 MHz DCLK from ADU and 1/4
+--   period of the 800 MHz sample SCLK of ADU. This phase offset can be used
+--   to achieve stable timing between the DCLK and the clk200p domain.
+-- . Some DSP may also be possible at 400 MHz via st_clk400. Note that this
+--   400 MHz can also be used at places where only a little more than 200 MHz
+--   would be needed, e.g. to create packets at full data rate.
+--   Therefore it is not necessary to create yet another st clock frequency.
+--   This to also avoid the EMI or RFI that a non integer factor of 200 MHz
+--   like e.g. 250 MHz would cause.
+-- . At 400 MHz ADC samples can be clocked in at 800 MSps using DDIO. At 800
+--   MSps the sample period is 1250 ns. Input timing can be tuned via fixed
+--   pad input delays and/or by using another phase of the PLL output clock.
+-- Remarks:
+-- . If necessary more 400 M clock phase could be made available, via g_sel.
+-- 
+
+ENTITY unb2_board_clk200_pll IS
+  GENERIC (
+    g_technology          : NATURAL := c_tech_arria10;
+    g_use_clkbuf          : BOOLEAN := TRUE;
+    g_use_fpll            : BOOLEAN := FALSE;
+    g_operation_mode      : STRING  := "NORMAL";  -- "NORMAL", "NO_COMPENSATION", or "SOURCE_SYNCHRONOUS" --> requires PLL_COMPENSATE assignment to an input pin to compensate for (stratixiv)
+    g_clk200_phase_shift  : STRING := "0";  -- default use 0 degrees, see clk200_pll.vhd for other phase values
+    g_clk200p_phase_shift : STRING := "0"  -- default use 0 degrees, see clk200_pll.vhd for other phase values
+  );
+  PORT (
+    -- It depends on g_sel which outputs are actually available
+    -- . common
+    arst        : IN  STD_LOGIC := '0';
+    clk200      : IN  STD_LOGIC := '0';       -- connect to UniBoard CLK pin
+    st_clk200   : OUT STD_LOGIC;  -- PLL c0 = g_clk200_phase_shift  degrees phase offset to input clk200
+    st_rst200   : OUT STD_LOGIC;
+    st_clk200p  : OUT STD_LOGIC;  -- PLL c1 = g_clk200p_phase_shift degrees phase offset to input clk200 (see clk200_pll.vhd from MegaWizard)
+    st_rst200p  : OUT STD_LOGIC;
+    st_clk400   : OUT STD_LOGIC;  -- PLL c2 = 0                     degrees phase offset to input clk200
+    st_rst400   : OUT STD_LOGIC
+  );
+END unb2_board_clk200_pll;
+
+
+ARCHITECTURE arria10 OF unb2_board_clk200_pll IS
+
+  CONSTANT c_reset_len : NATURAL := c_meta_delay_len;
+    
+  SIGNAL clk200buf    : STD_LOGIC;
+  SIGNAL i_st_rst200  : STD_LOGIC;
+  SIGNAL i_st_clk200  : STD_LOGIC;
+  SIGNAL i_st_clk200p : STD_LOGIC;
+  SIGNAL i_st_clk400  : STD_LOGIC;
+  
+  SIGNAL st_locked    : STD_LOGIC;
+  SIGNAL st_locked_n  : STD_LOGIC;
+
+BEGIN
+
+  st_rst200  <= i_st_rst200;
+  st_clk200  <= i_st_clk200;
+  st_clk200p <= i_st_clk200p;
+  st_clk400  <= i_st_clk400;
+    
+  no_clkbuf : IF g_use_clkbuf=FALSE GENERATE
+    clk200buf <= clk200;
+  END GENERATE;
+  
+  gen_clkbuf : IF g_use_clkbuf=TRUE GENERATE
+    u_clkbuf : ENTITY tech_clkbuf_lib.tech_clkbuf
+    GENERIC MAP (
+      g_technology   => g_technology,
+      g_clock_net    => "GLOBAL"
+    )
+    PORT MAP (
+      inclk  => clk200,
+      outclk => clk200buf
+    );
+  END GENERATE;
+  
+  gen_st_pll : IF g_use_fpll=FALSE GENERATE
+    u_st_pll : ENTITY tech_pll_lib.tech_pll_clk200
+    GENERIC MAP (
+      g_technology       => g_technology,
+      g_operation_mode   => g_operation_mode,
+      g_clk0_phase_shift => g_clk200_phase_shift,
+      g_clk1_phase_shift => g_clk200p_phase_shift
+    )
+    PORT MAP (
+      areset  => arst,
+      inclk0  => clk200buf,
+      c0      => i_st_clk200,
+      c1      => i_st_clk200p,
+      c2      => i_st_clk400,
+      locked  => st_locked
+    );
+  END GENERATE;
+  
+  gen_st_fractional_pll : IF g_use_fpll=TRUE GENERATE
+    u_st_fractional_pll : ENTITY tech_fractional_pll_lib.tech_fractional_pll_clk200
+    GENERIC MAP (
+      g_technology       => g_technology
+    )
+    PORT MAP (
+      areset  => arst,        
+      inclk0  => clk200buf,     -- 200 MHz
+      c0      => i_st_clk200,   -- 200 MHz
+      c1      => i_st_clk200p,  -- 200 MHz shifted 90 degrees
+      c2      => i_st_clk400,   -- 400 MHz
+      locked  => st_locked    
+    );
+  END GENERATE;
+  
+  -- Release clock domain resets after some clock cycles when the PLL has locked  
+  st_locked_n <= NOT st_locked;
+  
+  u_rst200 : ENTITY common_lib.common_areset
+  GENERIC MAP (
+    g_rst_level => '1',
+    g_delay_len => c_reset_len
+  )
+  PORT MAP (
+    in_rst    => st_locked_n,
+    clk       => i_st_clk200,
+    out_rst   => i_st_rst200
+  );
+
+  u_rst200p : ENTITY common_lib.common_areset
+  GENERIC MAP (
+    g_rst_level => '1',
+    g_delay_len => c_reset_len
+  )
+  PORT MAP (
+    in_rst    => st_locked_n,
+    clk       => i_st_clk200p,
+    out_rst   => st_rst200p
+  );
+  
+  u_rst400 : ENTITY common_lib.common_areset
+  GENERIC MAP (
+    g_rst_level => '1',
+    g_delay_len => c_reset_len
+  )
+  PORT MAP (
+    in_rst    => st_locked_n,
+    clk       => i_st_clk400,
+    out_rst   => st_rst400
+  );
+  
+END arria10;
diff --git a/boards/uniboard2a/libraries/unb2a_board/src/vhdl/unb2_board_clk25_pll.vhd b/boards/uniboard2a/libraries/unb2a_board/src/vhdl/unb2_board_clk25_pll.vhd
new file mode 100644
index 0000000000000000000000000000000000000000..a4f7612305993083e11746a92216ab1586e1126c
--- /dev/null
+++ b/boards/uniboard2a/libraries/unb2a_board/src/vhdl/unb2_board_clk25_pll.vhd
@@ -0,0 +1,69 @@
+-------------------------------------------------------------------------------
+--
+-- Copyright (C) 2015
+-- ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/>
+-- JIVE (Joint Institute for VLBI in Europe) <http://www.jive.nl/>
+-- P.O.Box 2, 7990 AA Dwingeloo, The Netherlands
+--
+-- This program is free software: you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation, either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program.  If not, see <http://www.gnu.org/licenses/>.
+--
+-------------------------------------------------------------------------------
+
+LIBRARY IEEE, common_lib, technology_lib, tech_pll_lib;
+USE IEEE.STD_LOGIC_1164.ALL;
+USE common_lib.common_pkg.ALL;
+USE technology_lib.technology_pkg.ALL;
+
+-- Purpose: PLL for UniBoard node CLK input @ 25 MHz
+-- Description:
+--   c0 = 20 MHz
+--   c1 = 50 MHz
+--   c2 = 100 MHz
+--   c3 = 125 MHz
+-- 
+
+ENTITY unb2_board_clk25_pll IS
+  GENERIC (
+    g_technology : NATURAL := c_tech_arria10
+  );
+  PORT (
+    arst        : IN  STD_LOGIC := '0';
+    clk25       : IN  STD_LOGIC := '0'; -- connect to UniBoard ETH_clk pin (25 MHz)
+
+    c0_clk20    : OUT STD_LOGIC;  -- PLL c0
+    c1_clk50    : OUT STD_LOGIC;  -- PLL c1
+    c2_clk100   : OUT STD_LOGIC;  -- PLL c2
+    c3_clk125   : OUT STD_LOGIC;  -- PLL c3
+    pll_locked  : OUT STD_LOGIC
+  );
+END unb2_board_clk25_pll;
+
+
+ARCHITECTURE arria10 OF unb2_board_clk25_pll IS
+BEGIN
+
+  u_pll : ENTITY tech_pll_lib.tech_pll_clk25
+  GENERIC MAP (
+    g_technology => g_technology
+  )
+  PORT MAP (
+    areset  => arst,
+    inclk0  => clk25,
+    c0      => c0_clk20,
+    c1      => c1_clk50,
+    c2      => c2_clk100,
+    c3      => c3_clk125,
+    locked  => pll_locked
+  );
+END arria10;
diff --git a/boards/uniboard2a/libraries/unb2a_board/src/vhdl/unb2_board_clk_rst.vhd b/boards/uniboard2a/libraries/unb2a_board/src/vhdl/unb2_board_clk_rst.vhd
new file mode 100644
index 0000000000000000000000000000000000000000..561075cf83b12b408cda4871c1272434f693beeb
--- /dev/null
+++ b/boards/uniboard2a/libraries/unb2a_board/src/vhdl/unb2_board_clk_rst.vhd
@@ -0,0 +1,86 @@
+-------------------------------------------------------------------------------
+--
+-- Copyright (C) 2010-2014
+-- ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/>
+-- JIVE (Joint Institute for VLBI in Europe) <http://www.jive.nl/>
+-- P.O.Box 2, 7990 AA Dwingeloo, The Netherlands
+--
+-- This program is free software: you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation, either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program.  If not, see <http://www.gnu.org/licenses/>.
+--
+-------------------------------------------------------------------------------
+
+LIBRARY IEEE, common_lib;
+USE IEEE.STD_LOGIC_1164.ALL;
+USE common_lib.common_pkg.ALL;
+
+-- Purpose:
+--   1) initial power up xo_rst_n that can be used to reset a SOPC system (via
+--      reset_n).
+--   2) sys_rst released when the sys_clk PLL from the SOPC system has locked,
+--      can be used as a system reset for the sys_clk domain.
+
+ENTITY unb2_board_clk_rst IS
+  PORT (
+    -- Reference clock and reset to SOPC system PLL
+    xo_clk                 : IN  STD_LOGIC;  -- reference XO clock (e.g. 25 MHz also use by PLL in SOPC)
+    xo_rst_n               : OUT STD_LOGIC;  -- NOT xo_rst (e.g. to reset the SOPC with NIOS2 uP)
+    -- System clock and locked from SOPC system PLL
+    sys_clk                : IN  STD_LOGIC;  -- system clock derived from the reference XO clock (e.g. 125 MHz by a PLL from SOPC with NIOS2 uP)
+    sys_locked             : IN  STD_LOGIC;  -- system clock PLL locked
+    sys_rst                : OUT STD_LOGIC   -- system reset released some cycles after the system clock PLL has in locked
+  );
+END unb2_board_clk_rst;
+
+
+ARCHITECTURE str OF unb2_board_clk_rst IS
+
+  CONSTANT c_reset_len   : NATURAL := 4;  -- >= c_meta_delay_len from common_pkg
+  
+  -- XO clock domain
+  SIGNAL xo_rst          : STD_LOGIC;  -- initial reset released after some XO clock cycles
+  
+  -- SYS clock domain
+  SIGNAL sys_locked_n    : STD_LOGIC;
+  
+BEGIN
+
+  -- Reference clock and reset to SOPC system PLL
+  xo_rst_n <= NOT xo_rst;
+
+  u_common_areset_xo : ENTITY common_lib.common_areset
+  GENERIC MAP (
+    g_rst_level => '1',       -- power up default will be inferred in FPGA
+    g_delay_len => c_reset_len
+  )
+  PORT MAP (
+    in_rst    => '0',         -- release reset after some clock cycles
+    clk       => xo_clk,
+    out_rst   => xo_rst
+  );
+
+  -- System clock from SOPC system PLL and system reset
+  sys_locked_n <= NOT sys_locked;
+  
+  u_common_areset_sys : ENTITY common_lib.common_areset
+  GENERIC MAP (
+    g_rst_level => '1',       -- power up default will be inferred in FPGA
+    g_delay_len => c_reset_len
+  )
+  PORT MAP (
+    in_rst    => sys_locked_n,  -- release reset after some clock cycles when the PLL has locked
+    clk       => sys_clk,
+    out_rst   => sys_rst
+  );
+  
+END str;
diff --git a/boards/uniboard2a/libraries/unb2a_board/src/vhdl/unb2_board_front_io.vhd b/boards/uniboard2a/libraries/unb2a_board/src/vhdl/unb2_board_front_io.vhd
new file mode 100644
index 0000000000000000000000000000000000000000..73927379317d0a4639fbd006f8af9da384338e59
--- /dev/null
+++ b/boards/uniboard2a/libraries/unb2a_board/src/vhdl/unb2_board_front_io.vhd
@@ -0,0 +1,78 @@
+------------------------------------------------------------------------------
+--
+-- Copyright (C) 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/>.
+--
+-------------------------------------------------------------------------------
+
+LIBRARY IEEE, common_lib;
+USE IEEE.STD_LOGIC_1164.ALL;
+USE work.unb2_board_pkg.ALL;
+
+
+ENTITY unb2_board_front_io IS
+  GENERIC (
+    g_nof_qsfp_bus : NATURAL := c_unb2_board_tr_qsfp.nof_bus
+  );
+  PORT (
+    serial_tx_arr  : IN  STD_LOGIC_VECTOR(g_nof_qsfp_bus * c_unb2_board_tr_qsfp.bus_w-1 DOWNTO 0) := (OTHERS=>'0');
+    serial_rx_arr  : OUT STD_LOGIC_VECTOR(g_nof_qsfp_bus * c_unb2_board_tr_qsfp.bus_w-1 DOWNTO 0);
+
+    green_led_arr  : IN  STD_LOGIC_VECTOR(g_nof_qsfp_bus-1 DOWNTO 0) := (OTHERS=>'0');
+    red_led_arr    : IN  STD_LOGIC_VECTOR(g_nof_qsfp_bus-1 DOWNTO 0) := (OTHERS=>'0');
+
+    QSFP_RX        : IN  t_unb2_board_qsfp_bus_2arr(g_nof_qsfp_bus-1 DOWNTO 0) := (OTHERS=>(OTHERS=>'0'));
+    QSFP_TX        : OUT t_unb2_board_qsfp_bus_2arr(g_nof_qsfp_bus-1 DOWNTO 0);
+
+    --QSFP_SDA       : INOUT STD_LOGIC_VECTOR(c_unb2_board_tr_qsfp.i2c_w-1 downto 0);
+    --QSFP_SCL       : INOUT STD_LOGIC_VECTOR(c_unb2_board_tr_qsfp.i2c_w-1 downto 0);
+    --QSFP_RST       : INOUT STD_LOGIC;
+
+    QSFP_LED       : OUT   STD_LOGIC_VECTOR(c_unb2_board_tr_qsfp_nof_leds-1 DOWNTO 0)
+  );
+END unb2_board_front_io;
+
+ARCHITECTURE str OF unb2_board_front_io IS
+
+  -- help signals so we can iterate through buses
+  SIGNAL si_tx_2arr : t_unb2_board_qsfp_bus_2arr(g_nof_qsfp_bus-1 DOWNTO 0);
+  SIGNAL si_rx_2arr : t_unb2_board_qsfp_bus_2arr(g_nof_qsfp_bus-1 DOWNTO 0);
+
+BEGIN
+
+  gen_leds : FOR i IN 0 TO g_nof_qsfp_bus-1 GENERATE
+    QSFP_LED(i*2)   <=  green_led_arr(i);
+    QSFP_LED(i*2+1) <=  red_led_arr(i);
+  END GENERATE;
+
+
+  gen_buses : FOR i IN 0 TO g_nof_qsfp_bus-1 GENERATE
+    QSFP_TX(i)    <= si_tx_2arr(i);
+    si_rx_2arr(i) <= QSFP_RX(i);
+  END GENERATE;
+
+
+  gen_wire_bus : FOR i IN 0 TO g_nof_qsfp_bus-1 GENERATE
+    gen_wire_signals : FOR j IN 0 TO c_unb2_board_tr_qsfp.bus_w-1 GENERATE
+
+        si_tx_2arr(i)(j) <= serial_tx_arr(i*c_unb2_board_tr_qsfp.bus_w + j);
+        serial_rx_arr(i*c_unb2_board_tr_qsfp.bus_w + j) <= si_rx_2arr(i)(j);
+
+    END GENERATE;
+  END GENERATE;
+
+END;
diff --git a/boards/uniboard2a/libraries/unb2a_board/src/vhdl/unb2_board_node_ctrl.vhd b/boards/uniboard2a/libraries/unb2a_board/src/vhdl/unb2_board_node_ctrl.vhd
new file mode 100644
index 0000000000000000000000000000000000000000..afe1feab4e4d7fc402bc8adc4a0519c823ab754c
--- /dev/null
+++ b/boards/uniboard2a/libraries/unb2a_board/src/vhdl/unb2_board_node_ctrl.vhd
@@ -0,0 +1,114 @@
+-------------------------------------------------------------------------------
+--
+-- Copyright (C) 2010-2014
+-- ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/>
+-- JIVE (Joint Institute for VLBI in Europe) <http://www.jive.nl/>
+-- P.O.Box 2, 7990 AA Dwingeloo, The Netherlands
+--
+-- This program is free software: you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation, either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program.  If not, see <http://www.gnu.org/licenses/>.
+--
+-------------------------------------------------------------------------------
+
+LIBRARY IEEE, common_lib;
+USE IEEE.STD_LOGIC_1164.ALL;
+USE common_lib.common_pkg.ALL;
+
+-- Purpose: Provide the basic node clock control (resets, pulses, WDI)
+-- Description:
+--   . Create mm_rst for mm_clk:
+--   . Extend WDI to avoid watchdog reset during software reload
+--   . Pulse every 1 us, 1 ms and 1 s
+
+ENTITY unb2_board_node_ctrl IS
+  GENERIC (
+    g_pulse_us     : NATURAL := 125;     -- nof system clock cycles to get us period, equal to system clock frequency / 10**6
+    g_pulse_ms     : NATURAL := 1000;    -- nof pulse_us pulses to get ms period (fixed, use less to speed up simulation)
+    g_pulse_s      : NATURAL := 1000;    -- nof pulse_ms pulses to get  s period (fixed, use less to speed up simulation)
+    g_wdi_extend_w : NATURAL := 14       -- extend the mm_wdi_in by toggling the mm_wdi_out for about 2**(14-1)= 8 s more
+  );
+  PORT (
+    -- MM clock domain reset
+    mm_clk          : IN  STD_LOGIC;         -- MM clock
+    mm_locked       : IN  STD_LOGIC := '1';  -- MM clock PLL locked (or use default '1')
+    mm_rst          : OUT STD_LOGIC;         -- MM reset released after MM clock PLL has locked
+    
+    -- WDI extend
+    mm_wdi_in       : IN  STD_LOGIC;         -- from software running on the NIOS2 in the SOPC design
+    mm_wdi_out      : OUT STD_LOGIC;         -- to FPGA pin
+    
+    -- Pulses
+    mm_pulse_us     : OUT STD_LOGIC;         -- pulses every us
+    mm_pulse_ms     : OUT STD_LOGIC;         -- pulses every ms
+    mm_pulse_s      : OUT STD_LOGIC          -- pulses every s
+  );
+END unb2_board_node_ctrl;
+
+
+ARCHITECTURE str OF unb2_board_node_ctrl IS
+
+  CONSTANT c_reset_len   : NATURAL := 4;  -- >= c_meta_delay_len from common_pkg
+
+  SIGNAL mm_locked_n     : STD_LOGIC;
+  SIGNAL i_mm_rst        : STD_LOGIC;
+  SIGNAL i_mm_pulse_ms   : STD_LOGIC;
+  
+BEGIN
+
+  -- Create mm_rst reset in mm_clk domain based on mm_locked 
+  mm_rst <= i_mm_rst;  
+  
+  mm_locked_n <= NOT mm_locked;
+  
+  u_common_areset_mm : ENTITY common_lib.common_areset
+  GENERIC MAP (
+    g_rst_level => '1',       -- power up default will be inferred in FPGA
+    g_delay_len => c_reset_len
+  )
+  PORT MAP (
+    in_rst    => mm_locked_n,  -- release reset after some clock cycles when the PLL has locked
+    clk       => mm_clk,
+    out_rst   => i_mm_rst
+  );  
+  
+  -- Create 1 pulse per us, per ms and per s  
+  mm_pulse_ms <= i_mm_pulse_ms;
+
+  u_common_pulser_us_ms_s : ENTITY common_lib.common_pulser_us_ms_s
+  GENERIC MAP (
+    g_pulse_us  => g_pulse_us,
+    g_pulse_ms  => g_pulse_ms,
+    g_pulse_s   => g_pulse_s
+  )
+  PORT MAP (
+    rst         => i_mm_rst,
+    clk         => mm_clk,
+    pulse_us    => mm_pulse_us,
+    pulse_ms    => i_mm_pulse_ms,
+    pulse_s     => mm_pulse_s
+  );
+
+  -- Toggle the WDI every 1 ms
+  u_unb2_board_wdi_extend : ENTITY work.unb2_board_wdi_extend
+  GENERIC MAP (
+    g_extend_w => g_wdi_extend_w
+  )
+  PORT MAP (
+    rst        => i_mm_rst,
+    clk        => mm_clk, 
+    pulse_ms   => i_mm_pulse_ms,
+    wdi_in     => mm_wdi_in,
+    wdi_out    => mm_wdi_out
+  );
+
+END str;
diff --git a/boards/uniboard2a/libraries/unb2a_board/src/vhdl/unb2_board_peripherals_pkg.vhd b/boards/uniboard2a/libraries/unb2a_board/src/vhdl/unb2_board_peripherals_pkg.vhd
new file mode 100644
index 0000000000000000000000000000000000000000..179be05dab124343bbccaaed2cd35aded8dde543
--- /dev/null
+++ b/boards/uniboard2a/libraries/unb2a_board/src/vhdl/unb2_board_peripherals_pkg.vhd
@@ -0,0 +1,173 @@
+-------------------------------------------------------------------------------
+--
+-- Copyright (C) 2009-2015
+-- ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/>
+-- JIVE (Joint Institute for VLBI in Europe) <http://www.jive.nl/>
+-- P.O.Box 2, 7990 AA Dwingeloo, The Netherlands
+--
+-- This program is free software: you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation, either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program.  If not, see <http://www.gnu.org/licenses/>.
+--
+-------------------------------------------------------------------------------
+
+-- Purpose: Central location for collecting the peripheral MM register widths
+-- Description:
+--   The MM register width can be fixed or application dependent. When the MM
+--   register width is fixed it can be defined as a local constant in the
+--   module *_reg.vhd file or it may be defined in a module package.
+--   When modules are used in a design the MM register widths are needed to
+--   connect the 'node' part of the design to the 'sopc' part. Most designs do
+--   use the same widths also for the variable width MM registers. Therefore
+--   rather then obtaining the variable MM register widths from local design
+--   constants and the fixed widths from module packages, it seems easier to
+--   collect them here in t_c_unb2_board_peripherals_mm_reg.
+-- Remarks:
+-- . The c_unb2_board_peripherals_mm_reg_default suits most designs, if
+--   necessary design specific t_c_unb2_board_peripherals_mm_reg constants
+--   can be defined here as well.
+-- . If some design would need different widths for multiple instances, then
+--   these widths need to be defined locally in that design.
+
+LIBRARY IEEE;
+USE IEEE.STD_LOGIC_1164.ALL;
+
+PACKAGE unb2_board_peripherals_pkg IS
+
+  
+  -- *_adr_w : Actual MM address widths
+  -- *_dat_w : The default MM data width is c_word_w=32, otherwise it is specified in the record
+  TYPE t_c_unb2_board_peripherals_mm_reg IS RECORD
+    cross_clock_domain         : BOOLEAN;  -- = TRUE  -- use FALSE when mm_clk and dp_clk are the same, else use TRUE to cross the clock domain
+    
+    -- 1GbE
+    reg_tse_adr_w              : NATURAL;  -- = 10  -- = c_tse_byte_addr_w from tse_pkg.vhd
+    reg_eth_adr_w              : NATURAL;  -- = 4   -- = c_eth_reg_addr_w from eth_pkg.vhd
+    ram_eth_adr_w              : NATURAL;  -- = 10  -- = c_eth_ram_addr_w from eth_pkg.vhd
+    
+    -- pi_system_info (first word of reg_unb_system_info_adr_w is backwards compatible with the original single word PIO system info)
+    reg_unb_system_info_adr_w  : NATURAL;  -- = 5   -- fixed, from c_mm_reg in unb_system_info_reg
+    rom_unb_system_info_adr_w  : NATURAL;  -- = 10  -- fixed, from c_mm_rom in mms_unb_system_info
+    -- pi_reg_common
+    reg_common_adr_w           : NATURAL;  -- = 1   -- fixed, from c_mem_reg in mms_common_reg
+    
+    -- pi_ppsh
+    reg_ppsh_adr_w             : NATURAL;  -- = 1   -- fixed, from c_mm_reg in ppsh_reg
+    
+    -- pi_unb_sens
+    reg_unb_sens_adr_w         : NATURAL;  -- = 3   -- fixed, from c_mm_reg in unb_sens_reg
+    
+    -- pi_dpmm
+    reg_dpmm_data_adr_w        : NATURAL;  -- = 1   -- fixed, see dp_fifo_to_mm.vhd
+    reg_dpmm_ctrl_adr_w        : NATURAL;  -- = 1   -- fixed, from c_mm_reg in dp_fifo_to_mm_reg.vhd
+    
+    -- pi_mmdp
+    reg_mmdp_data_adr_w        : NATURAL;  -- = 1   -- fixed, see dp_fifo_from_mm.vhd
+    reg_mmdp_ctrl_adr_w        : NATURAL;  -- = 1   -- fixed, from c_mm_reg in dp_fifo_from_mm_reg.vhd
+
+    -- pi_dp_ram_from_mm
+    reg_dp_ram_from_mm_adr_w   : NATURAL;  -- = 1   -- fixed, see dp_ram_from_mm.vhd
+ -- ram_dp_ram_from_mm_adr_w   : NATURAL;  -- = VAR -- Variable, from c_mm_reg in dp_ram_from_mm_reg.vhd
+
+    -- pi_dp_ram_to_mm
+--  ram_dp_ram_to_mm_adr_w     : NATURAL;  -- = VAR -- Variable, from c_mm_reg in dp_ram_to_mm_reg.vhd
+    
+    -- pi_epcs (uses DP-MM read and write FIFOs for data access)
+    reg_epcs_adr_w             : NATURAL;  -- = 3   -- fixed, from c_mm_reg in epcs_reg
+    
+    -- pi_remu
+    reg_remu_adr_w             : NATURAL;  -- = 3   -- fixed, from c_mm_reg in remu_reg
+    
+    -- pi_ddr
+    -- pi_ddr_capture (uses DP-MM read FIFO for data access)
+    reg_ddr_adr_w              : NATURAL;  -- = 3   -- fixed, from c_mm_reg in ddr_reg
+    
+    -- pi_io_ddr
+    reg_io_ddr_adr_w           : NATURAL;  -- = 16  -- fixed, from c_mm_reg in io_ddr (3) and in io_ddr_reg (8) that get multiplexed in on addresses 0..2, 8..15
+    
+    -- pi_tr_nonbonded
+    reg_tr_nonbonded_adr_w     : NATURAL;  -- = 4   -- fixed, from c_mm_reg in tr_nonbonded_reg
+
+    -- pi_diagnostics
+    reg_diagnostics_adr_w      : NATURAL;  -- = 6   -- fixed, from c_mm_reg in diagnostics_reg
+
+    -- pi_dp_throttle
+    reg_dp_throttle_adr_w      : NATURAL;  -- = 2   -- fixed, from c_mm_reg in dp_throttle_reg
+    
+    -- pi_bsn_source
+    reg_bsn_source_adr_w       : NATURAL;  -- = 2   -- fixed, from c_mm_reg in dp_bsn_source_reg.vhd
+    
+    -- pi_bsn_schedurer
+    reg_bsn_scheduler_adr_w    : NATURAL;  -- = 1   -- fixed, from c_mm_reg in dp_bsn_scheduler_reg.vhd
+    
+    -- pi_bsn_monitor
+    reg_bsn_monitor_adr_w      : NATURAL;  -- = 4   -- fixed, from c_mm_reg in dp_bsn_monitor_reg.vhd
+    
+    -- pi_aduh_quad (defaults for ADU)
+    reg_adc_quad_adr_w         : NATURAL;  -- = 3   -- fixed, from c_mm_reg in aduh_quad_reg.vhd
+    
+    -- pi_aduh_i2c_commander (defaults for ADU)
+    reg_i2c_commander_adr_w    : NATURAL;  -- = 6   -- = c_i2c_cmdr_aduh_i2c_mm.control_adr_w,  from i2c_commander_aduh_pkg, used to pass on commander_adr_w
+    ram_i2c_protocol_adr_w     : NATURAL;  -- = 13  -- = c_i2c_cmdr_aduh_i2c_mm.protocol_adr_w, from i2c_commander_aduh_pkg
+    ram_i2c_result_adr_w       : NATURAL;  -- = 12  -- = c_i2c_cmdr_aduh_i2c_mm.result_adr_w,   from i2c_commander_aduh_pkg
+    
+    -- pi_aduh_monitor (defaults for ADU or WG used in bn_capture)
+    reg_aduh_mon_adr_w         : NATURAL;  -- = 2   -- fixed, from c_mm_reg in aduh_monitor_reg.vhd
+    ram_aduh_mon_dat_w         : NATURAL;  -- = 32  -- = c_sp_data_w, see node_bn_capture.vhd
+    ram_aduh_mon_adr_w         : NATURAL;  -- = 8   -- = ceil_log2(c_bn_capture.sp.monitor_buffer_nof_samples/c_wideband_factor), see node_bn_capture.vhd
+    
+    -- pi_diag_wg_wideband.py (defaults for WG used in bn_capture)
+    reg_diag_wg_adr_w          : NATURAL;  -- = 2   -- fixed, from c_mm_reg in diag_wg_wideband_reg
+    ram_diag_wg_dat_w          : NATURAL;  -- = 8   -- defined here, see bn_capture_input.vhd
+    ram_diag_wg_adr_w          : NATURAL;  -- = 10  -- defined here, see bn_capture_input.vhd
+    
+    -- pi_diag_data_buffer.py
+    ram_diag_db_nof_buf        : NATURAL;  -- = 16
+    ram_diag_db_buf_size       : NATURAL;  -- = 1024
+    ram_diag_db_adr_w          : NATURAL;  -- = 14  -- = ram_diag_db_nof_buf*ceil_log2(ram_diag_db_buf_size)
+    reg_diag_db_adr_w          : NATURAL;  -- = 5   -- 32 words for 16 streams max
+
+    -- pi_diag_block_gen (defaults when used with the BF for Apertif)
+    reg_diag_bg_adr_w          : NATURAL;  -- = 3
+    ram_diag_bg_adr_w          : NATURAL;  -- = 11  -- = ceil_log2(c_bf.nof_subbands*c_bf.nof_signal_paths/c_bf.nof_input_streams = 24*64/16 = 96) + ceil_log2(c_bf.nof_input_streams = 16)
+  
+    -- pi_diag_tx_seq.py
+    reg_diag_tx_seq_w          : NATURAL;  -- = 2
+    
+    -- pi_diag_tx_seq.py
+    reg_diag_rx_seq_w          : NATURAL;  -- = 3
+    
+    -- pi_bf_bf (defaults for the BF for Apertif)
+    reg_bf_offsets_adr_w       : NATURAL;  -- = 5   -- = ceil_log2(c_bf.nof_offsets = 6) + ceil_log2(c_bf.nof_bf_units = 4)
+    ram_bf_weights_adr_w       : NATURAL;  -- = 16  -- = ceil_log2(c_bf.nof_bf_units*c_bf.nof_signal_paths*c_bf.nof_weights = 4 * 64 * 256 = 65536)
+    ram_st_sst_bf_adr_w        : NATURAL;  -- = 11  -- = ceil_log2(c_bf.nof_bf_units*c_bf.stat_data_sz*c_bf.nof_weights = 4 * 2 * 256 = 2048)
+
+    -- pi_mdio
+    reg_mdio_adr_w             : NATURAL;  -- = 3
+
+    -- dp_offload
+    reg_dp_offload_tx_adr_w    : NATURAL;  -- = 1
+
+    -- pi_unb_fpga_sensors
+    reg_fpga_temp_sens_adr_w    : NATURAL;  -- = 3
+    reg_fpga_voltage_sens_adr_w : NATURAL;  -- = 4
+
+    -- pi_unb_pmbus
+    reg_unb_pmbus_adr_w        : NATURAL;  -- = 3
+  END RECORD;
+  
+  CONSTANT c_unb2_board_peripherals_mm_reg_default    : t_c_unb2_board_peripherals_mm_reg := (TRUE, 10, 4, 10, 5, 10, 1, 1, 3, 1, 1, 1, 1, 1, 3, 3, 3, 16, 4, 6, 2, 2, 1, 4, 3, 6, 13, 12, 2, 32, 8, 2, 8, 10, 16, 1024, 14, 5, 3, 11, 2, 3, 5, 16, 11, 3, 1, 3, 4, 3);
+  
+END unb2_board_peripherals_pkg;
+
+PACKAGE BODY unb2_board_peripherals_pkg IS
+END unb2_board_peripherals_pkg;
diff --git a/boards/uniboard2a/libraries/unb2a_board/src/vhdl/unb2_board_pkg.vhd b/boards/uniboard2a/libraries/unb2a_board/src/vhdl/unb2_board_pkg.vhd
new file mode 100644
index 0000000000000000000000000000000000000000..33484bcbe6d0dcfa8148a7732579b56af7d353a4
--- /dev/null
+++ b/boards/uniboard2a/libraries/unb2a_board/src/vhdl/unb2_board_pkg.vhd
@@ -0,0 +1,170 @@
+-------------------------------------------------------------------------------
+--
+-- Copyright (C) 2009-2015
+-- ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/>
+-- JIVE (Joint Institute for VLBI in Europe) <http://www.jive.nl/>
+-- P.O.Box 2, 7990 AA Dwingeloo, The Netherlands
+--
+-- This program is free software: you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation, either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program.  If not, see <http://www.gnu.org/licenses/>.
+--
+-------------------------------------------------------------------------------
+
+LIBRARY IEEE, common_lib, dp_lib;
+USE IEEE.STD_LOGIC_1164.ALL;
+USE IEEE.NUMERIC_STD.ALL;
+USE common_lib.common_pkg.ALL;
+USE dp_lib.dp_stream_pkg.ALL;
+
+PACKAGE unb2_board_pkg IS
+
+  -- UniBoard
+  CONSTANT c_unb2_board_nof_node             : NATURAL := 4;                     -- number of nodes on UniBoard
+  CONSTANT c_unb2_board_nof_node_w           : NATURAL := 2;                     -- = ceil_log2(c_unb2_board_nof_node)
+  CONSTANT c_unb2_board_nof_chip             : NATURAL := c_unb2_board_nof_node; -- = 4
+  CONSTANT c_unb2_board_nof_chip_w           : NATURAL := 2;                     -- = ceil_log2(c_unb2_board_nof_chip)
+  CONSTANT c_unb2_board_nof_ddr              : NATURAL := 2;                     -- each node has 2 DDR modules
+  
+  -- Subrack
+  CONSTANT c_unb2_board_nof_uniboard         : NATURAL := 4;   -- nof UniBoard in a subrack
+  CONSTANT c_unb2_board_nof_uniboard_w       : NATURAL := 6;   -- Only 2 required for 4 boards; full width is 6.
+  
+  -- Clock frequencies
+  CONSTANT c_unb2_board_ext_clk_freq_200M    : NATURAL := 200 * 10**6;  -- external clock, SMA clock
+  CONSTANT c_unb2_board_eth_clk_freq_25M     : NATURAL :=  25 * 10**6;  -- fixed 25 MHz  ETH XO clock used as reference clock for the PLL
+  CONSTANT c_unb2_board_eth_clk_freq_125M    : NATURAL := 125 * 10**6;  -- fixed 125 MHz ETH XO clock used as direct clock for TSE
+  CONSTANT c_unb2_board_tse_clk_freq         : NATURAL := 125 * 10**6;  -- fixed 125 MHz TSE reference clock derived from ETH_clk by PLL
+  CONSTANT c_unb2_board_cal_clk_freq         : NATURAL :=  40 * 10**6;  -- fixed 40 MHz IO calibration clock derived from ETH_clk by PLL
+  CONSTANT c_unb2_board_mm_clk_freq_25M      : NATURAL :=  25 * 10**6;  -- clock derived from ETH_clk by PLL
+  CONSTANT c_unb2_board_mm_clk_freq_50M      : NATURAL :=  50 * 10**6;  -- clock derived from ETH_clk by PLL
+  CONSTANT c_unb2_board_mm_clk_freq_100M     : NATURAL := 100 * 10**6;  -- clock derived from ETH_clk by PLL
+  CONSTANT c_unb2_board_mm_clk_freq_125M     : NATURAL := 125 * 10**6;  -- clock derived from ETH_clk by PLL
+  
+  -- I2C
+  CONSTANT c_unb2_board_reg_sens_adr_w       : NATURAL := 3;  -- must match ceil_log2(c_mm_nof_dat) in unb2_board_sens_reg.vhd
+
+  -- ETH
+  CONSTANT c_unb2_board_nof_eth              : NATURAL := 2;  -- number of ETH channels per node
+  
+  -- CONSTANT RECORD DECLARATIONS ---------------------------------------------
+  
+  -- c_unb2_board_signature_* : random signature words used for unused status bits to ensure that the software reads the correct interface address
+  CONSTANT c_unb2_board_signature_eth1g_slv   : STD_LOGIC_VECTOR(31 DOWNTO 0) := X"46e46cbc";
+  CONSTANT c_unb2_board_signature_eth10g_slv  : STD_LOGIC_VECTOR(31 DOWNTO 0) := X"2bd2e40a";
+
+  CONSTANT c_unb2_board_signature_eth1g       : INTEGER := TO_SINT(c_unb2_board_signature_eth1g_slv  );
+  CONSTANT c_unb2_board_signature_eth10g      : INTEGER := TO_SINT(c_unb2_board_signature_eth10g_slv );
+  
+  -- Transceivers
+  TYPE t_c_unb2_board_tr IS RECORD
+    nof_bus                           : NATURAL;
+    bus_w                             : NATURAL;
+    i2c_w                             : NATURAL;
+  END RECORD;
+
+  --CONSTANT c_unb2_board_tr_back              : t_c_unb2_board_tr := (2, 24, 3); -- per node: 2 buses with 24 channels
+  CONSTANT c_unb2_board_tr_back              : t_c_unb2_board_tr := (1, 24, 3); -- per node: 1 buses with 24 channels (testing)
+  --CONSTANT c_unb2_board_tr_back              : t_c_unb2_board_tr := (2, 12, 3); -- per node: 2 buses with 24 channels (testing)
+  --CONSTANT c_unb2_board_tr_back              : t_c_unb2_board_tr := (2, 4, 3); -- per node: 2 buses with 24 channels (testing)
+
+  CONSTANT c_unb2_board_tr_ring              : t_c_unb2_board_tr := (2, 12, 0); -- per node: 2 buses with 12 channels
+  --CONSTANT c_unb2_board_tr_ring              : t_c_unb2_board_tr := (2, 4, 0); -- per node: 2 buses with 12 channels (testing)
+
+  CONSTANT c_unb2_board_tr_qsfp              : t_c_unb2_board_tr := (6, 4,  6); -- per node: 6 buses with 4 channels
+  CONSTANT c_unb2_board_tr_qsfp_nof_leds     : NATURAL := c_unb2_board_tr_qsfp.nof_bus * 2; -- 2 leds per qsfp
+
+
+  TYPE t_unb2_board_qsfp_bus_2arr IS ARRAY (INTEGER RANGE <>) OF STD_LOGIC_VECTOR(c_unb2_board_tr_qsfp.bus_w-1 DOWNTO 0);
+  TYPE t_unb2_board_ring_bus_2arr IS ARRAY (INTEGER RANGE <>) OF STD_LOGIC_VECTOR(c_unb2_board_tr_ring.bus_w-1 DOWNTO 0);
+  TYPE t_unb2_board_back_bus_2arr IS ARRAY (INTEGER RANGE <>) OF STD_LOGIC_VECTOR(c_unb2_board_tr_back.bus_w-1 DOWNTO 0);
+
+
+  -- Auxiliary
+  
+  -- Test IO Interface
+  TYPE t_c_unb2_board_testio IS RECORD  
+    tst_w                             : NATURAL;  -- = nof tst = 2; [tst_w-1 +tst_lo : tst_lo] = [5:4],
+    led_w                             : NATURAL;  -- = nof led = 2; [led_w-1 +led_lo : led_lo] = [3:2],
+    jmp_w                             : NATURAL;  -- = nof jmp = 2; [jmp_w-1 +jmp_lo : jmp_lo] = [1:0],
+    tst_lo                            : NATURAL;  -- = 2;
+    led_lo                            : NATURAL;  -- = 2;
+    jmp_lo                            : NATURAL;  -- = 0;
+  END RECORD;
+
+  CONSTANT c_unb2_board_testio               : t_c_unb2_board_testio := (2, 2, 2, 2, 2, 0);
+  CONSTANT c_unb2_board_testio_led_green     : NATURAL := c_unb2_board_testio.led_lo;
+  CONSTANT c_unb2_board_testio_led_red       : NATURAL := c_unb2_board_testio.led_lo+1;
+  
+  TYPE t_c_unb2_board_aux IS RECORD
+    version_w                         : NATURAL;  -- = 2;
+    id_w                              : NATURAL;  -- = 8;  -- 6+2 bits wide = total node ID for up to 64 UniBoards in a system and 4 nodes per board
+    chip_id_w                         : NATURAL;  -- = 2;  -- board node ID for the 4 FPGA nodes on a UniBoard
+    testio_w                          : NATURAL;  -- = 6;
+    testio                            : t_c_unb2_board_testio;
+  END RECORD;
+  
+  CONSTANT c_unb2_board_aux           : t_c_unb2_board_aux := (2, 8, c_unb2_board_nof_chip_w, 6, c_unb2_board_testio);
+  
+  TYPE t_e_unb2_board_node IS (e_any);
+
+  TYPE t_unb2_board_fw_version IS RECORD
+    hi                                : NATURAL;  -- = 0..15
+    lo                                : NATURAL;  -- = 0..15, firmware version is: hi.lo
+  END RECORD;
+  
+  CONSTANT c_unb2_board_fw_version    : t_unb2_board_fw_version := (0, 0);
+    
+  -- SIGNAL RECORD DECLARATIONS -----------------------------------------------
+  
+  
+  -- I2C, MDIO
+  -- . If no I2C bus arbitration or clock stretching is needed then the SCL only needs to be output.
+  -- . Can also be used for a PHY Management Data IO interface with serial clock MDC and serial data MDIO
+  TYPE t_unb2_board_i2c_inout IS RECORD  
+    scl : STD_LOGIC;  -- serial clock
+    sda : STD_LOGIC;  -- serial data
+  END RECORD;
+    
+  -- System info
+  TYPE t_c_unb2_board_system_info IS RECORD
+    version  : NATURAL;  -- UniBoard board HW version (2 bit value)
+    id       : NATURAL;  -- UniBoard FPGA node id (8 bit value)
+                         -- Derived ID info:
+    bck_id   : NATURAL;  -- = id[7:2], ID part from back plane
+    chip_id  : NATURAL;  -- = id[1:0], ID part from UniBoard
+    node_id  : NATURAL;  -- = id[1:0], node ID: 0, 1, 2 or 3
+    is_node2 : NATURAL;  -- 1 for Node 2, else 0.
+  END RECORD;
+
+  FUNCTION func_unb2_board_system_info(VERSION : IN STD_LOGIC_VECTOR(c_unb2_board_aux.version_w-1 DOWNTO 0);
+                                       ID      : IN STD_LOGIC_VECTOR(c_unb2_board_aux.id_w-1 DOWNTO 0)) RETURN t_c_unb2_board_system_info;
+                                
+END unb2_board_pkg;
+
+
+PACKAGE BODY unb2_board_pkg IS
+
+  FUNCTION func_unb2_board_system_info(VERSION : IN STD_LOGIC_VECTOR(c_unb2_board_aux.version_w-1 DOWNTO 0);
+                                       ID      : IN STD_LOGIC_VECTOR(c_unb2_board_aux.id_w-1 DOWNTO 0)) RETURN t_c_unb2_board_system_info IS
+    VARIABLE v_system_info : t_c_unb2_board_system_info;
+  BEGIN
+    v_system_info.version := TO_INTEGER(UNSIGNED(VERSION));
+    v_system_info.id      := TO_INTEGER(UNSIGNED(ID));
+    v_system_info.bck_id  := TO_INTEGER(UNSIGNED(ID(7 DOWNTO 2)));
+    v_system_info.chip_id := TO_INTEGER(UNSIGNED(ID(1 DOWNTO 0)));
+    v_system_info.node_id := TO_INTEGER(UNSIGNED(ID(1 DOWNTO 0)));
+    IF UNSIGNED(ID(1 DOWNTO 0))=2 THEN v_system_info.is_node2 := 1; ELSE v_system_info.is_node2 := 0; END IF;
+    RETURN v_system_info;
+  END;
+  
+END unb2_board_pkg;
diff --git a/boards/uniboard2a/libraries/unb2a_board/src/vhdl/unb2_board_qsfp_leds.vhd b/boards/uniboard2a/libraries/unb2a_board/src/vhdl/unb2_board_qsfp_leds.vhd
new file mode 100644
index 0000000000000000000000000000000000000000..f90d2dc68961b44125a049a8e170d394778f678e
--- /dev/null
+++ b/boards/uniboard2a/libraries/unb2a_board/src/vhdl/unb2_board_qsfp_leds.vhd
@@ -0,0 +1,186 @@
+-------------------------------------------------------------------------------
+--
+-- Copyright (C) 2015
+-- ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/>
+-- JIVE (Joint Institute for VLBI in Europe) <http://www.jive.nl/>
+-- P.O.Box 2, 7990 AA Dwingeloo, The Netherlands
+--
+-- This program is free software: you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation, either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program.  If not, see <http://www.gnu.org/licenses/>.
+--
+-------------------------------------------------------------------------------
+
+LIBRARY IEEE, common_lib, dp_lib;
+USE IEEE.STD_LOGIC_1164.ALL;
+USE common_lib.common_pkg.ALL;
+USE dp_lib.dp_stream_pkg.ALL;
+
+-- Purpose: Provide visual activity information via the UniBoard2 front panel QSFP LEDs.
+-- Description:
+--   The testio LED on UniBoard2 is not visible via the front panel. The
+--   front panel does have a dual colour LED for each QSFP lane. Therefore
+--   these QSFP LEDs are used to signal some application information and lane
+--   status/activity information.
+--
+--   LED lights:
+--  
+--   1) Default behaviour for all QSFP leds:
+--      . off = no FPGA image is running
+--
+--   2) For factory image:
+--      . green off
+--      . red toggling every 1 s = factory image is running (g_factory_image=TRUE)
+--  
+--   3) For a user image without Gbps lane functionality: 
+--      . red off
+--      . green toggling every 1 s = user image is running (g_factory_image=FALSE and green_on_arr(I)='0' default)
+--
+--   4) For a user image with Gbps lane functionality:
+--      . red off
+--      . green toggling every 1 s when the lane status is not OK (green_on_arr(I)=xon='0')
+--      . green on continously when the lane status is OK (green_on_arr(I)=xon='1')
+--      . green led goes off briefly off when there is an Tx or Rx packet (green_evt_arr(I).sop='1')
+--
+--   The combined colour amber (= red + green) is not used. The factory image
+--   only uses the red led and the user image only uses the green led.
+--
+--   Each QSFP carries c_quad = 4 lanes, therefore the green led LED can only
+--   signal a combined status of the lanes. The combined status eg. be:
+--   
+--     'and-status' = combined status is on when all lanes are on
+--     'or-status'  = combined status is on when at least 1 lane is on
+--
+--   Choose using 'or-status', because then the LED can give lane status
+--   information when less than all 4 lane are connected.
+--
+
+ENTITY unb2_board_qsfp_leds IS
+  GENERIC (
+    g_sim             : BOOLEAN := FALSE;        -- when true speed up led toggling in simulation
+    g_factory_image   : BOOLEAN := FALSE;        -- distinguish factory image and user images
+    g_nof_qsfp        : NATURAL := 6;            -- number of QSFP cages each with one dual led that can light red or green (or amber = red + green)
+    g_pulse_us        : NATURAL := 200           -- nof clk cycles to get us period
+  );
+  PORT (
+    rst               : IN  STD_LOGIC;
+    clk               : IN  STD_LOGIC;
+    -- internal pulser outputs
+    pulse_us          : OUT STD_LOGIC;
+    pulse_ms          : OUT STD_LOGIC;
+    pulse_s           : OUT STD_LOGIC;
+    -- lane status
+    tx_siso_arr       : IN  t_dp_siso_arr(g_nof_qsfp*c_quad-1 DOWNTO 0) := (OTHERS=>c_dp_siso_rst);
+    tx_sosi_arr       : IN  t_dp_sosi_arr(g_nof_qsfp*c_quad-1 DOWNTO 0) := (OTHERS=>c_dp_sosi_rst);
+    rx_sosi_arr       : IN  t_dp_sosi_arr(g_nof_qsfp*c_quad-1 DOWNTO 0) := (OTHERS=>c_dp_sosi_rst);
+    -- leds
+    green_led_arr     : OUT STD_LOGIC_VECTOR(g_nof_qsfp-1 DOWNTO 0);
+    red_led_arr       : OUT STD_LOGIC_VECTOR(g_nof_qsfp-1 DOWNTO 0)
+  );
+END unb2_board_qsfp_leds;
+
+
+ARCHITECTURE str OF unb2_board_qsfp_leds IS
+
+  CONSTANT c_nof_ms         : NATURAL := sel_a_b(g_sim, 1, 100);  -- force off for c_nof_ms and then on for at least c_nof_ms
+  CONSTANT c_nof_lanes      : NATURAL := g_nof_qsfp*c_quad;       -- number of transceiver lanes, fixed 4 per Quad-SFP cage
+  
+  SIGNAL i_pulse_ms         : STD_LOGIC;
+  SIGNAL i_pulse_s          : STD_LOGIC;
+  SIGNAL toggle_s           : STD_LOGIC;
+  
+  SIGNAL green_on_arr       : STD_LOGIC_VECTOR(g_nof_qsfp*c_quad-1 DOWNTO 0);
+  SIGNAL green_evt_arr      : STD_LOGIC_VECTOR(g_nof_qsfp*c_quad-1 DOWNTO 0);
+  
+  SIGNAL qsfp_on_arr        : STD_LOGIC_VECTOR(g_nof_qsfp-1 DOWNTO 0);
+  SIGNAL qsfp_evt_arr       : STD_LOGIC_VECTOR(g_nof_qsfp-1 DOWNTO 0);
+  
+BEGIN
+
+  pulse_ms <= i_pulse_ms;
+  pulse_s  <= i_pulse_s;
+
+  -- Also output the pulses, because they could be useful for other purposes in the clk clock domain as well
+  u_common_pulser_us_ms_s : ENTITY common_lib.common_pulser_us_ms_s
+  GENERIC MAP (
+    g_pulse_us  => g_pulse_us,                 -- nof clk cycles to get us period
+    g_pulse_ms  => sel_a_b(g_sim, 10, 1000),   -- nof pulse_us pulses to get ms period
+    g_pulse_s   => sel_a_b(g_sim, 10, 1000)    -- nof pulse_ms pulses to get s period
+  )
+  PORT MAP (
+    rst         => rst,
+    clk         => clk,
+    pulse_us    => pulse_us,
+    pulse_ms    => i_pulse_ms,
+    pulse_s     => i_pulse_s
+  );
+
+  u_common_toggle_s : ENTITY common_lib.common_toggle
+  PORT MAP (
+    rst         => rst,
+    clk         => clk,
+    in_dat      => i_pulse_s,
+    out_dat     => toggle_s
+  );
+  
+  gen_factory_image : IF g_factory_image=TRUE GENERATE
+    green_led_arr <= (OTHERS=>'0');
+    
+    gen_red_led_arr : FOR I IN g_nof_qsfp-1 DOWNTO 0 GENERATE
+      u_red_led_controller : ENTITY common_lib.common_led_controller
+      GENERIC MAP (
+        g_nof_ms      => c_nof_ms
+      )
+      PORT MAP (
+        rst           => rst,
+        clk           => clk,
+        -- led control
+        ctrl_input    => toggle_s,
+        -- led output
+        led           => red_led_arr(I)
+      );
+    END GENERATE;
+  END GENERATE;
+
+  gen_user_image : IF g_factory_image=FALSE GENERATE
+  
+    red_led_arr <= (OTHERS=>'0');
+    
+    gen_green_ctrl_arr : FOR I IN c_nof_lanes-1 DOWNTO 0 GENERATE
+      green_on_arr(I)  <= tx_siso_arr(I).xon                       WHEN rising_edge(clk);
+      green_evt_arr(I) <= tx_sosi_arr(I).sop OR rx_sosi_arr(I).sop WHEN rising_edge(clk);
+    END GENERATE;    
+      
+    gen_green_led_arr : FOR I IN g_nof_qsfp-1 DOWNTO 0 GENERATE
+    
+      qsfp_on_arr(I)  <= orv(green_on_arr( (I+1)*c_quad-1 DOWNTO + I*c_quad));
+      qsfp_evt_arr(I) <= orv(green_evt_arr((I+1)*c_quad-1 DOWNTO + I*c_quad));
+      
+      u_green_led_controller : ENTITY common_lib.common_led_controller
+      GENERIC MAP (
+        g_nof_ms      => c_nof_ms
+      )
+      PORT MAP (
+        rst           => rst,
+        clk           => clk,
+        pulse_ms      => i_pulse_ms,
+        -- led control
+        ctrl_on       => qsfp_on_arr(I),
+        ctrl_evt      => qsfp_evt_arr(I),
+        ctrl_input    => toggle_s,
+        -- led output
+        led           => green_led_arr(I)
+      );
+    END GENERATE;    
+  END GENERATE;
+  
+END str;
diff --git a/boards/uniboard2a/libraries/unb2a_board/src/vhdl/unb2_board_ring_io.vhd b/boards/uniboard2a/libraries/unb2a_board/src/vhdl/unb2_board_ring_io.vhd
new file mode 100644
index 0000000000000000000000000000000000000000..2c924997a546d3de8092e6107b80f868482b3617
--- /dev/null
+++ b/boards/uniboard2a/libraries/unb2a_board/src/vhdl/unb2_board_ring_io.vhd
@@ -0,0 +1,63 @@
+------------------------------------------------------------------------------
+--
+-- Copyright (C) 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/>.
+--
+-------------------------------------------------------------------------------
+
+LIBRARY IEEE, common_lib;
+USE IEEE.STD_LOGIC_1164.ALL;
+USE work.unb2_board_pkg.ALL;
+
+
+ENTITY unb2_board_ring_io IS
+  GENERIC (
+    g_nof_ring_bus : NATURAL := c_unb2_board_tr_ring.nof_bus
+  );
+  PORT (
+    serial_tx_arr  : IN  STD_LOGIC_VECTOR(g_nof_ring_bus * c_unb2_board_tr_ring.bus_w-1 DOWNTO 0) := (OTHERS=>'0');
+    serial_rx_arr  : OUT STD_LOGIC_VECTOR(g_nof_ring_bus * c_unb2_board_tr_ring.bus_w-1 DOWNTO 0);
+
+    RING_RX        : IN    t_unb2_board_ring_bus_2arr(g_nof_ring_bus-1 DOWNTO 0) := (OTHERS=>(OTHERS=>'0'));
+    RING_TX        : OUT   t_unb2_board_ring_bus_2arr(g_nof_ring_bus-1 DOWNTO 0)
+  );
+END unb2_board_ring_io;
+
+ARCHITECTURE str OF unb2_board_ring_io IS
+
+  -- help signals so we can iterate through buses
+  SIGNAL si_tx_2arr : t_unb2_board_ring_bus_2arr(g_nof_ring_bus-1 DOWNTO 0);
+  SIGNAL si_rx_2arr : t_unb2_board_ring_bus_2arr(g_nof_ring_bus-1 DOWNTO 0);
+
+BEGIN
+
+  gen_buses : FOR i IN 0 TO g_nof_ring_bus-1 GENERATE
+    RING_TX(i)    <= si_tx_2arr(i);
+    si_rx_2arr(i) <= RING_RX(i);
+  END GENERATE;
+
+
+  gen_wire_bus : FOR i IN 0 TO g_nof_ring_bus-1 GENERATE
+    gen_wire_signals : FOR j IN 0 TO c_unb2_board_tr_ring.bus_w-1 GENERATE
+
+      si_tx_2arr(i)(j) <= serial_tx_arr(i*c_unb2_board_tr_ring.bus_w + j);
+      serial_rx_arr(i*c_unb2_board_tr_ring.bus_w + j) <= si_rx_2arr(i)(j);
+
+    END GENERATE;
+  END GENERATE;
+
+END;
diff --git a/boards/uniboard2a/libraries/unb2a_board/src/vhdl/unb2_board_sens.vhd b/boards/uniboard2a/libraries/unb2a_board/src/vhdl/unb2_board_sens.vhd
new file mode 100644
index 0000000000000000000000000000000000000000..d56e6802fb445b0c34f6344566a72cdbd1406560
--- /dev/null
+++ b/boards/uniboard2a/libraries/unb2a_board/src/vhdl/unb2_board_sens.vhd
@@ -0,0 +1,110 @@
+-------------------------------------------------------------------------------
+--
+-- Copyright (C) 2012-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/>.
+--
+-------------------------------------------------------------------------------
+
+LIBRARY IEEE, common_lib, i2c_lib;
+USE IEEE.std_logic_1164.ALL;
+USE common_lib.common_pkg.ALL;
+USE i2c_lib.i2c_pkg.ALL;
+
+
+ENTITY unb2_board_sens is
+  GENERIC (
+    g_sim             : BOOLEAN := FALSE;
+    g_clk_freq        : NATURAL := 100*10**6;  -- clk frequency in Hz
+    g_temp_high       : NATURAL := 85;
+    g_sens_nof_result : NATURAL := 4  -- Should match nof read bytes via I2C in the unb2_board_sens_ctrl SEQUENCE list
+  );
+  PORT (
+    rst          : IN    STD_LOGIC;
+    clk          : IN    STD_LOGIC;
+    start        : IN    STD_LOGIC;
+    -- i2c bus
+    scl          : INOUT STD_LOGIC;
+    sda          : INOUT STD_LOGIC;
+    -- read results
+    sens_evt     : OUT   STD_LOGIC;
+    sens_err     : OUT   STD_LOGIC;
+    sens_data    : OUT   t_slv_8_arr(0 TO g_sens_nof_result-1)
+  );
+END ENTITY;
+
+
+ARCHITECTURE str OF unb2_board_sens IS
+
+  -- I2C clock rate settings
+  CONSTANT c_sens_clk_cnt      : NATURAL := sel_a_b(g_sim, 1, func_i2c_calculate_clk_cnt(g_clk_freq/10**6));  -- define I2C clock rate
+  CONSTANT c_sens_comma_w      : NATURAL := 0;  -- 2**c_i2c_comma_w * system clock period comma time after I2C start and after each octet
+                                                -- 0 = no comma time
+  
+  CONSTANT c_sens_phy          : t_c_i2c_phy := (c_sens_clk_cnt, c_sens_comma_w);
+  
+  SIGNAL smbus_in_dat  : STD_LOGIC_VECTOR(c_byte_w-1 DOWNTO 0);
+  SIGNAL smbus_in_val  : STD_LOGIC;
+  SIGNAL smbus_out_dat : STD_LOGIC_VECTOR(c_byte_w-1 DOWNTO 0);
+  SIGNAL smbus_out_val : STD_LOGIC;
+  SIGNAL smbus_out_err : STD_LOGIC;
+  SIGNAL smbus_out_ack : STD_LOGIC;
+  SIGNAL smbus_out_end : STD_LOGIC;
+
+BEGIN
+
+  u_unb2_board_sens_ctrl : ENTITY work.unb2_board_sens_ctrl
+  GENERIC MAP (
+    g_sim        => g_sim,
+    g_nof_result => g_sens_nof_result,
+    g_temp_high  => g_temp_high
+  )
+  PORT MAP (
+    clk         => clk,
+    rst         => rst,
+    start       => start,
+    in_dat      => smbus_out_dat,
+    in_val      => smbus_out_val,
+    in_err      => smbus_out_err,
+    in_ack      => smbus_out_ack,
+    in_end      => smbus_out_end,
+    out_dat     => smbus_in_dat,
+    out_val     => smbus_in_val,
+    result_val  => sens_evt,
+    result_err  => sens_err,
+    result_dat  => sens_data
+  );
+
+  u_i2c_smbus : ENTITY i2c_lib.i2c_smbus
+  GENERIC MAP (
+    g_i2c_phy   => c_sens_phy
+  )
+  PORT MAP (
+    gs_sim      => g_sim,
+    clk         => clk,
+    rst         => rst,
+    in_dat      => smbus_in_dat,
+    in_req      => smbus_in_val,
+    out_dat     => smbus_out_dat,
+    out_val     => smbus_out_val,
+    out_err     => smbus_out_err,
+    out_ack     => smbus_out_ack,
+    st_end      => smbus_out_end,
+    scl         => scl,
+    sda         => sda
+  );
+
+END ARCHITECTURE;
diff --git a/boards/uniboard2a/libraries/unb2a_board/src/vhdl/unb2_board_sens_ctrl.vhd b/boards/uniboard2a/libraries/unb2a_board/src/vhdl/unb2_board_sens_ctrl.vhd
new file mode 100644
index 0000000000000000000000000000000000000000..c4f99d23048de7cfa7c53213f799833ec0532c45
--- /dev/null
+++ b/boards/uniboard2a/libraries/unb2a_board/src/vhdl/unb2_board_sens_ctrl.vhd
@@ -0,0 +1,191 @@
+-------------------------------------------------------------------------------
+--
+-- Copyright (C) 2012-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/>.
+--
+-------------------------------------------------------------------------------
+
+LIBRARY IEEE, common_lib, i2c_lib;
+USE IEEE.std_logic_1164.ALL;
+USE i2c_lib.i2c_smbus_pkg.ALL;
+USE i2c_lib.i2c_dev_max1617_pkg.ALL;
+USE i2c_lib.i2c_dev_ltc4260_pkg.ALL;
+USE common_lib.common_pkg.ALL;
+
+
+ENTITY unb2_board_sens_ctrl IS
+  GENERIC (
+    g_sim        : BOOLEAN := FALSE;
+    g_nof_result : NATURAL := 4;
+    g_temp_high  : NATURAL := 85
+  );
+  PORT (
+    rst        : IN  STD_LOGIC;
+    clk        : IN  STD_LOGIC;
+    start      : IN  STD_LOGIC;  -- pulse to start the I2C sequence to read out the sensors
+    out_dat    : OUT STD_LOGIC_VECTOR(c_byte_w-1 DOWNTO 0);
+    out_val    : OUT STD_LOGIC;    
+    in_dat     : IN  STD_LOGIC_VECTOR(c_byte_w-1 DOWNTO 0);
+    in_val     : IN  STD_LOGIC;
+    in_err     : IN  STD_LOGIC; 
+    in_ack     : IN  STD_LOGIC;
+    in_end     : IN  STD_LOGIC;
+    result_val : OUT STD_LOGIC;
+    result_err : OUT STD_LOGIC;
+    result_dat : OUT t_slv_8_arr(0 TO g_nof_result-1)
+  );
+END ENTITY;
+
+
+ARCHITECTURE rtl OF unb2_board_sens_ctrl IS
+
+  -- I2C slave addresses of the devices on the I2C bus on UniBoard
+  CONSTANT FPGA_MAX1617_ADR     : NATURAL := MAX1617_ADR_LOW_LOW;      -- FPGA temperature sensor, slave address is "0011000"
+  CONSTANT ETH_MAX1617_ADR      : NATURAL := MAX1617_ADR_MID_LOW;      -- ETH  temperature sensor, slave address is "0101001"
+  CONSTANT HOTSWAP_LTC4260_ADR  : NATURAL := LTC4260_ADR_LOW_LOW_LOW;  -- Hot swap controller,     slave address is "1000100";
+
+
+  -- Experimental constants for the PMBUS, power module readouts (to be checked FIXME)
+  CONSTANT LOC_POWER_TR_R : NATURAL := 16#1C#; -- 0x0E
+  CONSTANT LOC_POWER_TR_R1 : NATURAL := 16#0E#;
+  CONSTANT LOC_POWER_TR_R2 : NATURAL := 16#0F#; -- 0x0E
+  CONSTANT LP_VOUT_MODE   : NATURAL := 16#20#;
+  CONSTANT LP_VOUT        : NATURAL := 16#8B#;
+  CONSTANT LP_IOUT        : NATURAL := 16#8C#;
+  CONSTANT LP_TEMP        : NATURAL := 16#8D#;
+
+
+  TYPE t_SEQUENCE IS ARRAY (NATURAL RANGE <>) OF NATURAL;
+  
+  -- The I2C bit rate is c_i2c_bit_rate = 50 [kbps], so 20 us period. Hence 20 us wait time for SDA is enough
+  -- Assume clk <= 200 MHz, so 5 ns period. Hence timeout of 4000 is enough.
+  CONSTANT c_timeout_sda : NATURAL := sel_a_b(g_sim, 0, 16);  -- wait 16 * 256 = 4096 clk periods
+  
+  CONSTANT c_SEQ : t_SEQUENCE := (
+    SMBUS_READ_BYTE ,    LOC_POWER_TR_R, LP_TEMP,--LP_VOUT_MODE,
+    SMBUS_READ_BYTE ,    LOC_POWER_TR_R1, LP_TEMP,--LP_VOUT, -- SMBUS_READ_WORD
+    SMBUS_READ_BYTE ,    LOC_POWER_TR_R2, LP_TEMP,--LP_IOUT, -- SMBUS_READ_WORD
+    SMBUS_READ_BYTE ,    LOC_POWER_TR_R1, LP_VOUT_MODE, -- SMBUS_READ_WORD
+
+    --SMBUS_READ_BYTE ,    FPGA_MAX1617_ADR, MAX1617_CMD_READ_REMOTE_TEMP,
+    --SMBUS_READ_BYTE ,     ETH_MAX1617_ADR, MAX1617_CMD_READ_REMOTE_TEMP,
+    --SMBUS_READ_BYTE , HOTSWAP_LTC4260_ADR, LTC4260_CMD_SENSE,
+    --SMBUS_READ_BYTE , HOTSWAP_LTC4260_ADR, LTC4260_CMD_SOURCE,
+    SMBUS_C_SAMPLE_SDA, 0, c_timeout_sda, 0, 0,
+    SMBUS_C_END,
+    SMBUS_C_NOP
+  );  -- = (7 24 1) (7 77 1) (7 68 4) (7 68 5) (20, timeout[0:3]) (19)
+    
+  CONSTANT c_seq_len : NATURAL := c_SEQ'LENGTH-1;  -- upto SMBUS_C_END, the SMBUS_C_NOP is dummy to allow sufficient seq_cnt range
+  
+  -- The protocol list c_SEQ yields a list of g_nof_result=14 result bytes:
+  -- . expected SMBUS_READ_BYTE  -> rdbyte, ok=0
+  -- . expected SMBUS_WRITE_BYTE -> ok=0
+  -- . expected SMBUS_C_END      -> ok=0
+  --   ==> so expected result_dat[0:4] = [rdbyte, rdbyte, rdbyte, rdbyte, rdbyte]
+  
+  SIGNAL start_reg       : STD_LOGIC;
+  
+  SIGNAL seq_cnt         : NATURAL RANGE 0 TO c_seq_len := c_seq_len;
+  SIGNAL nxt_seq_cnt     : NATURAL;
+  
+  SIGNAL rx_cnt          : NATURAL RANGE 0 TO g_nof_result;
+  SIGNAL nxt_rx_cnt      : NATURAL;
+  
+  SIGNAL rx_val          : STD_LOGIC;
+  SIGNAL nxt_rx_val      : STD_LOGIC;
+  SIGNAL rx_err          : STD_LOGIC;
+  SIGNAL nxt_rx_err      : STD_LOGIC;
+  SIGNAL rx_dat          : t_slv_8_arr(result_dat'RANGE);  
+  SIGNAL nxt_rx_dat      : t_slv_8_arr(result_dat'RANGE); 
+  SIGNAL nxt_result_val  : STD_LOGIC;
+  SIGNAL nxt_result_err  : STD_LOGIC;
+  SIGNAL i_result_dat    : t_slv_8_arr(result_dat'RANGE);  
+  SIGNAL nxt_result_dat  : t_slv_8_arr(result_dat'RANGE);   
+  
+BEGIN
+
+  result_dat <= i_result_dat;
+
+  regs: PROCESS(rst, clk)
+  BEGIN
+    IF rst='1' THEN
+      start_reg     <= '0';
+      seq_cnt       <= c_seq_len;
+      rx_cnt        <= 0;
+      rx_val        <= '0';
+      rx_err        <= '0';
+      rx_dat        <= (OTHERS=>(OTHERS=>'0'));
+      result_val    <= '0';
+      result_err    <= '0';
+      i_result_dat  <= (OTHERS=>(OTHERS=>'0'));
+    ELSIF rising_edge(clk) THEN
+      start_reg     <= start;
+      seq_cnt       <= nxt_seq_cnt;
+      rx_cnt        <= nxt_rx_cnt;
+      rx_val        <= nxt_rx_val;
+      rx_err        <= nxt_rx_err;
+      rx_dat        <= nxt_rx_dat;
+      result_val    <= nxt_result_val;
+      result_err    <= nxt_result_err;
+      i_result_dat  <= nxt_result_dat;
+    END IF;
+  END PROCESS;
+  
+  -- Issue the protocol list
+  p_seq_cnt : PROCESS(seq_cnt, start_reg, in_ack)
+  BEGIN
+    nxt_seq_cnt <= seq_cnt;
+    IF start_reg = '1' THEN
+      nxt_seq_cnt <= 0;
+    ELSIF seq_cnt<c_seq_len AND in_ack='1' THEN
+      nxt_seq_cnt <= seq_cnt + 1;
+    END IF;
+  END PROCESS;
+
+  out_dat <= STD_LOGIC_VECTOR(TO_UVEC(c_SEQ(seq_cnt), c_byte_w));
+  out_val <= '1' WHEN seq_cnt<c_seq_len ELSE '0';
+  
+  -- Fill the rx_dat byte array
+  p_rx_dat : PROCESS(start_reg, rx_err, in_err, rx_dat, rx_cnt, in_dat, in_val)
+  BEGIN
+    nxt_rx_err <= rx_err;
+    IF start_reg = '1' THEN
+      nxt_rx_err <= '0';
+    ELSIF in_err='1' THEN
+      nxt_rx_err <= '1';
+    END IF;
+    
+    nxt_rx_dat <= rx_dat;
+    nxt_rx_cnt <= rx_cnt;
+    IF start_reg = '1' THEN
+      nxt_rx_dat <= (OTHERS=>(OTHERS=>'0'));
+      nxt_rx_cnt <= 0;
+    ELSIF in_val='1' THEN
+      nxt_rx_dat(rx_cnt) <= in_dat;
+      nxt_rx_cnt         <= rx_cnt + 1;
+    END IF;
+  END PROCESS;
+
+  nxt_rx_val <= in_end;
+  
+  -- Capture the complete rx_dat byte array
+  nxt_result_val <= rx_val;
+  nxt_result_err <= rx_err;
+  nxt_result_dat <= rx_dat WHEN rx_val='1' ELSE i_result_dat;
+    
+END rtl;
diff --git a/boards/uniboard2a/libraries/unb2a_board/src/vhdl/unb2_board_sens_reg.vhd b/boards/uniboard2a/libraries/unb2a_board/src/vhdl/unb2_board_sens_reg.vhd
new file mode 100644
index 0000000000000000000000000000000000000000..e38265c892ebbcc6bf09e1ba56aaa5eeef87cdb0
--- /dev/null
+++ b/boards/uniboard2a/libraries/unb2a_board/src/vhdl/unb2_board_sens_reg.vhd
@@ -0,0 +1,162 @@
+-------------------------------------------------------------------------------
+--
+-- Copyright (C) 2012-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/>.
+--
+-------------------------------------------------------------------------------
+
+-- Purpose: Provide MM slave register for unb2_board_sens
+-- Description:
+--
+--   31             24 23             16 15              8 7               0  wi
+--  |-----------------|-----------------|-----------------|-----------------|
+--  |                xxx                     fpga_temp   = sens_data[0][7:0]|  0
+--  |-----------------------------------------------------------------------|
+--  |                xxx                     eth_temp    = sens_data[1][7:0]|  1
+--  |-----------------------------------------------------------------------|
+--  |                xxx               hot_swap_v_sense  = sens_data[2][7:0]|  2
+--  |-----------------------------------------------------------------------|
+--  |                xxx               hot_swap_v_source = sens_data[3][7:0]|  3
+--  |-----------------------------------------------------------------------|
+--  |                xxx                                         sens_err[0]|  4
+--  |-----------------------------------------------------------------------|
+--  |                xxx                                      temp_high[6:0]|  5
+--  |-----------------------------------------------------------------------|
+--
+-- * The fpga_temp and eth_temp are in degrees (two's complement)
+-- * The hot swap voltages depend on:
+--   . From i2c_dev_ltc4260_pkg:
+--     LTC4260_V_UNIT_SENSE        = 0.0003  --   0.3 mV over Rs for current sense
+--     LTC4260_V_UNIT_SOURCE       = 0.4     -- 400   mV supply voltage (e.g +48 V)
+--     LTC4260_V_UNIT_ADIN         = 0.01    --  10   mV ADC
+--
+--   . From UniBoard unb_sensors.h:
+--     SENS_HOT_SWAP_R_SENSE       = 0.005   -- R sense on UniBoard is 5 mOhm (~= 10 mOhm // 10 mOhm)
+--     SENS_HOT_SWAP_I_UNIT_SENSE  = LTC4260_V_UNIT_SENSE / SENS_HOT_SWAP_R_SENSE
+--     SENS_HOT_SWAP_V_UNIT_SOURCE = LTC4260_V_UNIT_SOURCE
+--
+-- ==> 
+--   Via all nodes:
+--   0 = FPGA temperature                 = TInt8(fpga_temp)
+--   Only via node2:
+--   1 = UniBoard ETH PHY temperature     = TInt8(eth_temp)
+--   2 = UniBoard hot swap supply current = hot_swap_v_sense * SENS_HOT_SWAP_I_UNIT_SENSE
+--   3 = UniBoard hot swap supply voltage = hot_swap_v_source * SENS_HOT_SWAP_V_UNIT_SOURCE
+--   4 = I2C error status for node2 sensors access only, 0 = ok
+--   
+
+LIBRARY IEEE, common_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;
+
+ENTITY unb2_board_sens_reg IS
+  GENERIC (
+    g_sens_nof_result : NATURAL := 4;
+    g_temp_high       : NATURAL := 85
+  );
+  PORT (
+    -- Clocks and reset
+    mm_rst     : IN  STD_LOGIC;   -- reset synchronous with mm_clk
+    mm_clk     : IN  STD_LOGIC;   -- memory-mapped bus clock
+    
+    -- Memory Mapped Slave in mm_clk domain
+    sla_in     : IN  t_mem_mosi;  -- actual ranges defined by c_mm_reg
+    sla_out    : OUT t_mem_miso;  -- actual ranges defined by c_mm_reg
+    
+    -- MM registers
+    sens_err   : IN  STD_LOGIC := '0';
+    sens_data  : IN  t_slv_8_arr(0 TO g_sens_nof_result-1);
+
+    -- Max temp output
+    temp_high  : OUT STD_LOGIC_VECTOR(6 DOWNTO 0)
+
+  );
+END unb2_board_sens_reg;
+
+
+ARCHITECTURE rtl OF unb2_board_sens_reg IS
+
+  -- Define the actual size of the MM slave register
+  CONSTANT c_mm_nof_dat : NATURAL := g_sens_nof_result+1+1;  -- +1 to fit user set temp_high one additional address
+                                                             -- +1 to fit sens_err in the last address
+
+  CONSTANT c_mm_reg     : t_c_mem := (latency  => 1,
+                                      adr_w    => ceil_log2(c_mm_nof_dat),
+                                      dat_w    => c_word_w,  -- Use MM bus data width = c_word_w = 32 for all MM registers
+                                      nof_dat  => c_mm_nof_dat,
+                                      init_sl  => '0');
+
+  SIGNAL i_temp_high    : STD_LOGIC_VECTOR(6 DOWNTO 0);
+                                  
+BEGIN
+
+  temp_high <= i_temp_high;
+
+  ------------------------------------------------------------------------------
+  -- MM register access in the mm_clk domain
+  -- . Hardcode the shared MM slave register directly in RTL instead of using
+  --   the common_reg_r_w instance. Directly using RTL is easier when the large
+  --   MM register has multiple different fields and with different read and
+  --   write options per field in one MM register.
+  ------------------------------------------------------------------------------
+  
+  p_mm_reg : PROCESS (mm_rst, mm_clk)
+    VARIABLE vA : NATURAL := 0;
+  BEGIN
+    IF mm_rst = '1' THEN
+      -- Read access
+      sla_out <= c_mem_miso_rst;
+      -- Write access, register values
+      i_temp_high <= TO_UVEC(g_temp_high, 7);
+
+    ELSIF rising_edge(mm_clk) THEN
+      vA := TO_UINT(sla_in.address(c_mm_reg.adr_w-1 DOWNTO 0));
+      
+      -- Read access defaults
+      sla_out.rdval <= '0';
+      
+      -- Write access: set register value
+      IF sla_in.wr = '1' THEN
+        IF vA = g_sens_nof_result+1 THEN
+            -- Only change temp_high if user writes a max. 7-bit value. This prevents accidentally
+            -- setting a negative temp as temp_high, e.g. 128 which becomes -128. 
+            IF UNSIGNED(sla_in.wrdata(c_word_w-1 DOWNTO 7)) = 0 THEN 
+              i_temp_high <= sla_in.wrdata(6 DOWNTO 0);
+            END IF;
+        END IF;
+  
+      -- Read access: get register value
+      ELSIF sla_in.rd = '1' THEN
+        sla_out        <= c_mem_miso_rst;  -- set unused rddata bits to '0' when read
+        sla_out.rdval  <= '1';             -- c_mm_reg.latency = 1
+        
+        -- no need to capture sens_data, it is not critical if the sens_data happens to be read just before and after an I2C access occurred
+        IF vA < g_sens_nof_result THEN
+          sla_out.rddata <= RESIZE_MEM_DATA(sens_data(vA)(c_byte_w-1 DOWNTO 0));
+        ELSIF vA = g_sens_nof_result THEN
+          sla_out.rddata(0) <= sens_err;   -- only valid for node2
+        ELSE
+          sla_out.rddata(6 DOWNTO 0) <= i_temp_high; 
+        END IF;
+        -- else unused addresses read zero
+      END IF;
+    END IF;
+  END PROCESS;
+  
+END rtl;
diff --git a/boards/uniboard2a/libraries/unb2a_board/src/vhdl/unb2_board_system_info.vhd b/boards/uniboard2a/libraries/unb2a_board/src/vhdl/unb2_board_system_info.vhd
new file mode 100644
index 0000000000000000000000000000000000000000..7bf92453fe036c0192e885c2c931e0e541be2f3b
--- /dev/null
+++ b/boards/uniboard2a/libraries/unb2a_board/src/vhdl/unb2_board_system_info.vhd
@@ -0,0 +1,98 @@
+--------------------------------------------------------------------------------
+--
+-- Copyright (C) 2009-2014
+-- ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/>
+-- JIVE (Joint Institute for VLBI in Europe) <http://www.jive.nl/>
+-- P.O.Box 2, 7990 AA Dwingeloo, The Netherlands
+--
+-- This program is free software: you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation, either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program.  If not, see <http://www.gnu.org/licenses/>.
+--
+--------------------------------------------------------------------------------
+ 
+LIBRARY IEEE, common_lib;
+USE IEEE.STD_LOGIC_1164.ALL;
+USE common_lib.common_pkg.ALL;
+USE work.unb2_board_pkg.ALL;
+
+-- Keep the UniBoard system info knowledge in this HDL entity and in the
+-- corresponding software functions in unb_common.c,h. This avoids having to
+-- define named constants for indexing the fields in the info word.
+
+ENTITY unb2_board_system_info IS
+  GENERIC (
+    g_sim        : BOOLEAN := FALSE;
+    g_fw_version : t_unb2_board_fw_version := c_unb2_board_fw_version;  -- firmware version x.y (4b.4b)
+    g_aux        : t_c_unb2_board_aux := c_unb2_board_aux               -- aux contains the hardware version
+  );
+  PORT (
+    clk         : IN  STD_LOGIC;
+    hw_version  : IN  STD_LOGIC_VECTOR(g_aux.version_w-1 DOWNTO 0);
+    id          : IN  STD_LOGIC_VECTOR(g_aux.id_w-1 DOWNTO 0);
+    info        : OUT STD_LOGIC_VECTOR(c_word_w-1 DOWNTO 0);
+    bck_id      : OUT STD_LOGIC_VECTOR(c_unb2_board_nof_uniboard_w-1 DOWNTO 0); -- ID[7:2]
+    chip_id     : OUT STD_LOGIC_VECTOR(c_unb2_board_nof_chip_w-1 DOWNTO 0);     -- ID[1:0]
+    node_id     : OUT STD_LOGIC_VECTOR(c_unb2_board_nof_node_w-1 DOWNTO 0);     -- ID[1:0]
+    is_node2    : OUT STD_LOGIC   -- '1' for Node 2, else '0'.
+  );
+END unb2_board_system_info;
+
+
+ARCHITECTURE str OF unb2_board_system_info IS
+
+  SIGNAL cs_sim         : STD_LOGIC;
+  
+  SIGNAL hw_version_reg : STD_LOGIC_VECTOR(hw_version'RANGE);
+  SIGNAL id_reg         : STD_LOGIC_VECTOR(id'RANGE);
+  SIGNAL nxt_info       : STD_LOGIC_VECTOR(info'RANGE);
+
+  SIGNAL nxt_bck_id     : STD_LOGIC_VECTOR(bck_id'RANGE);
+  SIGNAL nxt_chip_id    : STD_LOGIC_VECTOR(chip_id'RANGE);
+  SIGNAL nxt_node_id    : STD_LOGIC_VECTOR(node_id'RANGE);
+  SIGNAL nxt_is_node2   : STD_LOGIC;
+  
+BEGIN
+
+  p_reg : PROCESS(clk)
+  BEGIN
+    IF rising_edge(clk) THEN
+      -- inputs
+      hw_version_reg <= hw_version;
+      id_reg         <= id;
+      -- output
+      info           <= nxt_info;
+      bck_id         <= nxt_bck_id;
+      chip_id        <= nxt_chip_id;
+      node_id        <= nxt_node_id;
+      is_node2       <= nxt_is_node2;
+    END IF;
+  END PROCESS;
+  
+  cs_sim <= is_true(g_sim);
+
+  p_info : PROCESS(cs_sim, hw_version_reg, id_reg)
+  BEGIN
+    nxt_info               <= (OTHERS=>'0');
+    nxt_info(23 DOWNTO 20) <= TO_UVEC(g_fw_version.hi, 4);
+    nxt_info(19 DOWNTO 16) <= TO_UVEC(g_fw_version.lo, 4);
+    nxt_info(10)           <= cs_sim;
+    nxt_info(9 DOWNTO 8)   <= hw_version_reg;
+    nxt_info(7 DOWNTO 0)   <= id_reg;
+  END PROCESS;
+ 
+  nxt_bck_id   <= id_reg(7 DOWNTO 2);
+  nxt_chip_id  <= id_reg(1 DOWNTO 0);
+  nxt_node_id  <= id_reg(1 DOWNTO 0);
+  nxt_is_node2 <= '1' WHEN TO_UINT(id_reg(1 DOWNTO 0)) = 2 ELSE '0';
+  
+END str;
diff --git a/boards/uniboard2a/libraries/unb2a_board/src/vhdl/unb2_board_system_info_reg.vhd b/boards/uniboard2a/libraries/unb2a_board/src/vhdl/unb2_board_system_info_reg.vhd
new file mode 100644
index 0000000000000000000000000000000000000000..d528a8d4b5c44a9b1e77aa52d6609d9c5d17da66
--- /dev/null
+++ b/boards/uniboard2a/libraries/unb2a_board/src/vhdl/unb2_board_system_info_reg.vhd
@@ -0,0 +1,144 @@
+-------------------------------------------------------------------------------
+--
+-- Copyright (C) 2012-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/>.
+--
+-------------------------------------------------------------------------------
+
+--  RO  read only  (no VHDL present to access HW in write mode)
+--  WO  write only (no VHDL present to access HW in read mode)
+--  WE  write event (=WO)
+--  WR  write control, read control
+--  RW  read status, write control  
+--  RC  read, clear on read
+--  FR  FIFO read
+--  FW  FIFO write
+--
+--  wi  Bits    R/W Name          Default  Description      |REG_UNB2_BOARD_SYSTEM_INFO|
+--  =============================================================================
+--  0   [23..0] RO  info          
+--  1   [7..0]  RO  0
+--  2   [31..0] RO  design_name
+--  .   ..      .   ..
+--  9   [31..0] RO  design name
+--  10  [31..0] RO  date stamp             (YYYYMMDD)
+--  11  [31..0] RO  time stamp             (HHMMSS)
+--  12  [31..0] RO  SVN  stamp         
+--  13  [31..0] RO  note
+--  .   .       .   ..
+--  20  [31..0] RO  note
+--  =============================================================================
+
+LIBRARY IEEE, common_lib;
+USE IEEE.STD_LOGIC_1164.ALL;
+USE common_lib.common_pkg.ALL;
+USE common_lib.common_str_pkg.ALL;
+USE common_lib.common_mem_pkg.ALL;
+USE work.unb2_board_pkg.ALL;
+
+ENTITY unb2_board_system_info_reg IS
+  GENERIC (
+    g_design_name : STRING;
+    g_stamp_date  : NATURAL := 0;
+    g_stamp_time  : NATURAL := 0;
+    g_stamp_svn   : NATURAL := 0;
+    g_design_note : STRING
+  );
+  PORT (
+    -- Clocks and reset
+    mm_rst      : IN  STD_LOGIC;    
+    mm_clk      : IN  STD_LOGIC;
+    
+    -- Memory Mapped Slave 
+    sla_in      : IN  t_mem_mosi; 
+    sla_out     : OUT t_mem_miso; 
+    
+    info        : IN  STD_LOGIC_VECTOR(c_word_w-1 DOWNTO 0)
+    );
+END unb2_board_system_info_reg;
+
+
+ARCHITECTURE rtl OF unb2_board_system_info_reg IS
+
+  CONSTANT c_nof_fixed_regs       : NATURAL := 2; -- info
+  CONSTANT c_nof_design_name_regs : NATURAL := 8; -- design_name
+  CONSTANT c_nof_stamp_regs       : NATURAL := 3; -- date, time, svn rev
+  CONSTANT c_nof_design_note_regs : NATURAL := 8; -- note
+
+  CONSTANT c_nof_regs             : NATURAL := c_nof_fixed_regs + c_nof_design_name_regs + c_nof_stamp_regs + c_nof_design_note_regs;
+
+  CONSTANT c_mm_reg        : t_c_mem := (latency  => 1,
+                                         adr_w    => ceil_log2(c_nof_regs),
+                                         dat_w    => c_word_w,       -- Use MM bus data width = c_word_w = 32 for all MM registers
+                                         nof_dat  => c_nof_regs,
+                                         init_sl  => '0');   
+
+  CONSTANT c_use_phy_w     : NATURAL := 8; -- FIXME: to be removed
+  CONSTANT c_use_phy       : STD_LOGIC_VECTOR(c_use_phy_w-1 DOWNTO 0) := (OTHERS=> '0'); -- FIXME: to be removed
+
+  CONSTANT c_design_name    : t_slv_32_arr(0 TO c_nof_design_name_regs-1) := str_to_ascii_slv_32_arr(g_design_name, c_nof_design_name_regs);
+  CONSTANT c_design_note    : t_slv_32_arr(0 TO c_nof_design_note_regs-1) := str_to_ascii_slv_32_arr(g_design_note, c_nof_design_note_regs);
+ 
+BEGIN
+
+  p_mm_reg : PROCESS (mm_rst, mm_clk)
+    VARIABLE vA : NATURAL := 0;
+  BEGIN
+    IF mm_rst = '1' THEN
+      -- Read access
+      sla_out   <= c_mem_miso_rst;
+    ELSIF rising_edge(mm_clk) THEN
+      -- Read access defaults
+      sla_out.rdval <= '0';
+           
+      -- Read access: get register value
+      IF sla_in.rd = '1' THEN
+        sla_out       <= c_mem_miso_rst;    -- set unused rddata bits to '0' when read
+        sla_out.rdval <= '1';               -- c_mm_reg.latency = 1
+
+        vA := TO_UINT(sla_in.address(c_mm_reg.adr_w-1 DOWNTO 0));
+        IF vA = 0 THEN         
+          sla_out.rddata(c_word_w-1 DOWNTO 0) <= info;
+          -- Use bit 11 to indicate that we're using the MM bus (not the info SLV).
+          -- Using the MM bus enables user to also read use_phy, design_name etc.
+          sla_out.rddata(11) <= '1';
+        ELSIF vA = 1 THEN  
+          sla_out.rddata(c_use_phy_w-1 DOWNTO 0) <= c_use_phy;
+        ELSIF vA < c_nof_fixed_regs + c_nof_design_name_regs THEN      
+          sla_out.rddata(c_word_w-1 DOWNTO 0) <= c_design_name(vA-c_nof_fixed_regs);
+
+        ELSIF vA = c_nof_fixed_regs + c_nof_design_name_regs THEN      
+          sla_out.rddata(c_word_w-1 DOWNTO 0) <= TO_UVEC(g_stamp_date, c_word_w);
+
+        ELSIF vA = c_nof_fixed_regs + c_nof_design_name_regs+1 THEN      
+          sla_out.rddata(c_word_w-1 DOWNTO 0) <= TO_UVEC(g_stamp_time, c_word_w);
+
+        ELSIF vA = c_nof_fixed_regs + c_nof_design_name_regs+2 THEN      
+          sla_out.rddata(c_word_w-1 DOWNTO 0) <= TO_UVEC(g_stamp_svn, c_word_w);
+
+        ELSIF vA < c_nof_fixed_regs + c_nof_design_name_regs+c_nof_stamp_regs+c_nof_design_note_regs THEN      
+          sla_out.rddata(c_word_w-1 DOWNTO 0) <= c_design_note(vA-c_nof_fixed_regs-c_nof_design_name_regs-c_nof_stamp_regs);
+
+        END IF;
+
+      END IF;
+    END IF;
+  END PROCESS;
+
+ 
+END rtl;
+
diff --git a/boards/uniboard2a/libraries/unb2a_board/src/vhdl/unb2_board_wdi_extend.vhd b/boards/uniboard2a/libraries/unb2a_board/src/vhdl/unb2_board_wdi_extend.vhd
new file mode 100644
index 0000000000000000000000000000000000000000..ffc5345b51204581561602c2e42a2cf28f7bece8
--- /dev/null
+++ b/boards/uniboard2a/libraries/unb2a_board/src/vhdl/unb2_board_wdi_extend.vhd
@@ -0,0 +1,98 @@
+-------------------------------------------------------------------------------
+--
+-- Copyright (C) 2010-2014
+-- ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/>
+-- JIVE (Joint Institute for VLBI in Europe) <http://www.jive.nl/>
+-- P.O.Box 2, 7990 AA Dwingeloo, The Netherlands
+--
+-- This program is free software: you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation, either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program.  If not, see <http://www.gnu.org/licenses/>.
+--
+-------------------------------------------------------------------------------
+
+LIBRARY IEEE, common_lib;
+USE IEEE.STD_LOGIC_1164.ALL;
+USE common_lib.common_pkg.ALL;
+
+-- Purpose:
+--   Extend the input WDI that is controlled in SW (as it should be) to avoid
+--   that the watchdog reset will occur when new SW is loaded, while keeping
+--   the HDL image. This component extends the last input WDI by toggling the
+--   output WDI for about 2**(g_extend_w-1) ms more.
+
+ENTITY unb2_board_wdi_extend IS
+  GENERIC (
+    g_extend_w : NATURAL := 14
+  );
+  PORT (
+    rst              : IN  STD_LOGIC;
+    clk              : IN  STD_LOGIC;
+    pulse_ms         : IN  STD_LOGIC;  -- pulses every 1 ms
+    wdi_in           : IN  STD_LOGIC;
+    wdi_out          : OUT STD_LOGIC
+  );
+END unb2_board_wdi_extend;
+
+
+ARCHITECTURE str OF unb2_board_wdi_extend IS
+
+  SIGNAL wdi_evt     : STD_LOGIC;
+  
+  SIGNAL wdi_cnt     : STD_LOGIC_VECTOR(g_extend_w-1 DOWNTO 0);
+  SIGNAL wdi_cnt_en  : STD_LOGIC;
+  
+  SIGNAL i_wdi_out   : STD_LOGIC;
+  SIGNAL nxt_wdi_out : STD_LOGIC;
+  
+BEGIN
+
+  wdi_out <= i_wdi_out;
+  
+  p_clk : PROCESS(rst, clk)
+  BEGIN
+    IF rst='1' THEN
+      i_wdi_out <= '0';
+    ELSIF rising_edge(clk) THEN
+      i_wdi_out <= nxt_wdi_out;
+    END IF;
+  END PROCESS;
+  
+  wdi_cnt_en <= '1' WHEN pulse_ms='1' AND wdi_cnt(wdi_cnt'HIGH)='0' ELSE '0';
+
+  nxt_wdi_out <= NOT i_wdi_out WHEN wdi_cnt_en='1' ELSE i_wdi_out;
+  
+  u_common_evt : ENTITY common_lib.common_evt
+  GENERIC MAP (
+    g_evt_type => "BOTH",
+    g_out_reg  => TRUE
+  )
+  PORT MAP (
+    rst      => rst,
+    clk      => clk,
+    in_sig   => wdi_in,
+    out_evt  => wdi_evt
+  );
+  
+  u_common_counter : ENTITY common_lib.common_counter
+  GENERIC MAP (
+    g_width   => g_extend_w
+  )
+  PORT MAP (
+    rst     => rst,
+    clk     => clk,
+    cnt_clr => wdi_evt,
+    cnt_en  => wdi_cnt_en,
+    count   => wdi_cnt
+  );
+  
+END str;
diff --git a/boards/uniboard2a/libraries/unb2a_board/src/vhdl/unb2_board_wdi_reg.vhd b/boards/uniboard2a/libraries/unb2a_board/src/vhdl/unb2_board_wdi_reg.vhd
new file mode 100644
index 0000000000000000000000000000000000000000..42a42742a54008100adefd7cc0b25a5df68ba5fa
--- /dev/null
+++ b/boards/uniboard2a/libraries/unb2a_board/src/vhdl/unb2_board_wdi_reg.vhd
@@ -0,0 +1,90 @@
+-------------------------------------------------------------------------------
+--
+-- Copyright (C) 2012-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/>.
+--
+-------------------------------------------------------------------------------
+
+-- Purpose: 
+--   Manually override WDI to initiate reconfiguratioon of the FPGA.
+--   Write 0xB007FAC7 to address 0x0.
+
+LIBRARY IEEE, common_lib;
+USE IEEE.STD_LOGIC_1164.ALL;
+USE common_lib.common_pkg.ALL;
+USE common_lib.common_mem_pkg.ALL;
+
+ENTITY unb2_board_wdi_reg IS
+  PORT (
+    -- Clocks and reset
+    mm_rst            : IN  STD_LOGIC;   -- reset synchronous with mm_clk
+    mm_clk            : IN  STD_LOGIC;   -- memory-mapped bus clock
+     
+    -- Memory Mapped Slave in mm_clk domain
+    sla_in            : IN  t_mem_mosi;  -- actual ranges defined by c_mm_reg
+    sla_out           : OUT t_mem_miso;  -- actual ranges defined by c_mm_reg
+    
+    -- MM registers in st_clk domain
+    wdi_override      : OUT STD_LOGIC
+ );
+END unb2_board_wdi_reg;
+
+
+ARCHITECTURE rtl OF unb2_board_wdi_reg IS
+
+  -- Define the actual size of the MM slave register
+  CONSTANT c_mm_reg : t_c_mem := (latency  => 1,
+                                  adr_w    => ceil_log2(1),
+                                  dat_w    => c_word_w,       -- Use MM bus data width = c_word_w = 32 for all MM registers
+                                  nof_dat  => 1,
+                                  init_sl  => '0');                       
+
+  -- For safety, WDI override requires the following word to be written:
+  CONSTANT c_cmd_reconfigure : STD_LOGIC_VECTOR(c_word_w-1 DOWNTO 0 ) := x"B007FAC7"; -- "Boot factory"  
+
+BEGIN
+
+  p_mm_reg : PROCESS (mm_rst, mm_clk)
+  BEGIN
+    IF mm_rst = '1' THEN
+      -- Read access
+      sla_out   <= c_mem_miso_rst;
+      -- Write access, register values
+        wdi_override <= '0';
+    ELSIF rising_edge(mm_clk) THEN
+      -- Read access defaults: unused
+      sla_out   <= c_mem_miso_rst;   
+   
+      -- Write access: set register value
+      IF sla_in.wr = '1' THEN
+        CASE TO_UINT(sla_in.address(c_mm_reg.adr_w-1 DOWNTO 0)) IS
+          -- Write Block Sync
+          WHEN 0 => 
+            IF sla_in.wrdata(c_word_w-1 DOWNTO 0) = c_cmd_reconfigure THEN
+              wdi_override <= '1';
+            ELSE
+              wdi_override <= '0';
+            END IF;
+          WHEN OTHERS => NULL;  -- unused MM addresses
+        END CASE;
+      END IF;
+  
+    END IF;
+  END PROCESS;
+
+END rtl;
+
diff --git a/boards/uniboard2a/libraries/unb2a_board/src/vhdl/unb2_fpga_sens_reg.vhd b/boards/uniboard2a/libraries/unb2a_board/src/vhdl/unb2_fpga_sens_reg.vhd
new file mode 100644
index 0000000000000000000000000000000000000000..eb233b1ac5546e80db457f343112f05d94548181
--- /dev/null
+++ b/boards/uniboard2a/libraries/unb2a_board/src/vhdl/unb2_fpga_sens_reg.vhd
@@ -0,0 +1,89 @@
+-------------------------------------------------------------------------------
+--
+-- Copyright (C) 2012-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/>.
+--
+-------------------------------------------------------------------------------
+
+-- Purpose: Provide MM slave register for unb2_fpga_sens
+--
+
+LIBRARY IEEE, common_lib, technology_lib, fpga_sense_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 technology_lib.technology_pkg.ALL;
+
+
+ENTITY unb2_fpga_sens_reg IS
+  GENERIC (
+    g_sim             : BOOLEAN;
+    g_technology      : NATURAL := c_tech_arria10;
+    g_sens_nof_result : NATURAL := 1;
+    g_temp_high       : NATURAL := 85
+  );
+  PORT (
+    -- Clocks and reset
+    mm_rst     : IN  STD_LOGIC;   -- reset synchronous with mm_clk
+    mm_clk     : IN  STD_LOGIC;   -- memory-mapped bus clock
+    start      : IN  STD_LOGIC;
+    
+    -- Memory Mapped Slave in mm_clk domain
+    sla_temp_in     : IN  t_mem_mosi;  -- actual ranges defined by c_mm_reg
+    sla_temp_out    : OUT t_mem_miso;  -- actual ranges defined by c_mm_reg
+    
+    sla_voltage_in     : IN  t_mem_mosi;  -- actual ranges defined by c_mm_reg
+    sla_voltage_out    : OUT t_mem_miso;  -- actual ranges defined by c_mm_reg
+
+    -- MM registers
+    --sens_err   : IN  STD_LOGIC := '0';
+    --sens_data  : IN  t_slv_8_arr(0 TO g_sens_nof_result-1); -- FIXME should be OUT
+
+    -- Max temp output
+    temp_high  : OUT STD_LOGIC_VECTOR(6 DOWNTO 0)
+  );
+END unb2_fpga_sens_reg;
+
+
+ARCHITECTURE str OF unb2_fpga_sens_reg IS
+
+  --SIGNAL i_temp_high    : STD_LOGIC_VECTOR(6 DOWNTO 0);
+                                  
+BEGIN
+
+  temp_high <= (others => '0'); --i_temp_high;
+
+  u_fpga_sense: ENTITY fpga_sense_lib.fpga_sense
+  GENERIC MAP (
+    g_technology => g_technology,
+    g_sim        => g_sim
+  )
+  PORT MAP (
+    mm_clk      => mm_clk,
+    mm_rst      => mm_rst,
+
+    start_sense => start,
+
+    reg_temp_mosi    => sla_temp_in,
+    reg_temp_miso    => sla_temp_out,
+
+    reg_voltage_store_mosi    => sla_voltage_in,
+    reg_voltage_store_miso    => sla_voltage_out
+  );
+
+END str;
diff --git a/boards/uniboard2a/libraries/unb2a_board/tb/vhdl/tb_mms_unb2_board_sens.vhd b/boards/uniboard2a/libraries/unb2a_board/tb/vhdl/tb_mms_unb2_board_sens.vhd
new file mode 100644
index 0000000000000000000000000000000000000000..71e2198b7759daae9b141f583275581770a3f8f8
--- /dev/null
+++ b/boards/uniboard2a/libraries/unb2a_board/tb/vhdl/tb_mms_unb2_board_sens.vhd
@@ -0,0 +1,212 @@
+-------------------------------------------------------------------------------
+--
+-- Copyright (C) 2012
+-- 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 bench for mms_unb2_board_sens
+--
+-- Features:
+-- . Verify that the UniBoard sensors are read.
+--
+-- Usage:
+-- . > as 10
+-- . > run -all
+
+ENTITY tb_mms_unb2_board_sens IS
+END tb_mms_unb2_board_sens;
+
+LIBRARY IEEE, common_lib, i2c_lib;
+USE IEEE.std_logic_1164.ALL;
+USE common_lib.common_pkg.ALL;
+USE common_lib.common_mem_pkg.ALL;
+USE common_lib.tb_common_pkg.ALL;
+USE common_lib.tb_common_mem_pkg.ALL;
+
+
+ARCHITECTURE tb OF tb_mms_unb2_board_sens IS
+
+  CONSTANT c_sim              : BOOLEAN := TRUE;  --FALSE;
+  CONSTANT c_repeat           : NATURAL := 2;
+  CONSTANT c_clk_freq         : NATURAL := 100*10**6;
+  CONSTANT c_clk_period       : TIME    := (10**9/c_clk_freq) * 1 ns;  
+  CONSTANT c_rst_period       : TIME    := 4 * c_clk_period;  
+  
+  -- Model I2C sensor slaves as on the UniBoard
+  CONSTANT c_temp_high           : NATURAL := 85;
+  CONSTANT c_fpga_temp_address   : STD_LOGIC_VECTOR(6 DOWNTO 0) := "0011000";  -- MAX1618 address LOW LOW
+  CONSTANT c_fpga_temp           : INTEGER := 60;
+  CONSTANT c_eth_temp_address    : STD_LOGIC_VECTOR(6 DOWNTO 0) := "0101001";  -- MAX1618 address MID LOW
+  CONSTANT c_eth_temp            : INTEGER := 40;
+  CONSTANT c_hot_swap_address    : STD_LOGIC_VECTOR(6 DOWNTO 0) := "1000100";  -- LTC4260 address L L L
+  CONSTANT c_hot_swap_R_sense    : REAL := 0.01;                               -- = 10 mOhm on UniBoard
+  
+  CONSTANT c_uniboard_current    : REAL := 5.0;   -- = assume 5.0 A on UniBoard  --> hot swap = 5010 mAmpere (167)
+  CONSTANT c_uniboard_supply     : REAL := 48.0;  -- = assume 48.0 V on UniBoard --> hot swap = 48000 mVolt (120)
+  CONSTANT c_uniboard_adin       : REAL := -1.0;  -- = NC on UniBoard
+  
+  CONSTANT c_sens_nof_result  : NATURAL := 4 + 1;
+  CONSTANT c_sens_expected    : t_natural_arr(0 TO c_sens_nof_result-1) := (60, 40, 167, 120, 0);  -- 4 bytes as read by c_SEQ in unb2_board_sens_ctrl + sens_err
+  
+  SIGNAL tb_end          : STD_LOGIC := '0';
+  SIGNAL clk             : STD_LOGIC := '0';
+  SIGNAL rst             : STD_LOGIC := '1';
+  SIGNAL start           : STD_LOGIC;
+ 
+  SIGNAL reg_mosi        : t_mem_mosi := c_mem_mosi_rst;
+  SIGNAL reg_miso        : t_mem_miso;
+  
+  SIGNAL sens_val        : STD_LOGIC;
+  SIGNAL sens_dat        : STD_LOGIC_VECTOR(c_byte_w-1 DOWNTO 0);
+  
+  SIGNAL scl_stretch     : STD_LOGIC := 'Z';
+  SIGNAL scl             : STD_LOGIC;
+  SIGNAL sda             : STD_LOGIC;  
+  
+BEGIN
+
+  rst <= '0' AFTER 4*c_clk_period;
+  clk <= (NOT clk) OR tb_end AFTER c_clk_period/2;
+  
+  -- I2C bus
+  scl <= 'H';   -- model I2C pull up
+  sda <= 'H';   -- model I2C pull up, use '0' and '1' to verify sens_err
+
+  scl <= scl_stretch;
+
+  sens_clk_stretch : PROCESS (scl)
+  BEGIN
+    IF falling_edge(scl) THEN
+      scl_stretch <= '0', 'Z' AFTER 50 ns;   -- < 10 ns to effectively disable stretching, >= 50 ns to enable it
+    END IF;
+  END PROCESS;
+  
+  p_mm_reg_stimuli : PROCESS
+    VARIABLE v_bsn : NATURAL;
+    VARIABLE vI    : NATURAL;
+    VARIABLE vJ    : NATURAL;
+  BEGIN
+    start     <= '0';
+    reg_mosi  <= c_mem_mosi_rst;
+    
+    proc_common_wait_until_low(clk, rst);
+    proc_common_wait_some_cycles(clk, 10);
+    
+    FOR I IN 0 TO c_repeat-1 LOOP
+      -- start I2C access
+      start <= '1';
+      proc_common_wait_some_cycles(clk, 1);
+      start <= '0';
+      
+      -- wait for I2C access to have finished
+      proc_common_wait_some_cycles(clk, sel_a_b(c_sim, 5000, 500000));
+      
+      -- read I2C result data
+      FOR I IN 0 TO c_sens_nof_result-1 LOOP
+        proc_mem_mm_bus_rd(I, clk, reg_miso, reg_mosi);  -- read sens_data
+      END LOOP;
+      
+      proc_common_wait_some_cycles(clk, 1000);
+    END LOOP;
+    
+    proc_common_wait_some_cycles(clk, 100);
+    tb_end <= '1';
+    WAIT;
+  END PROCESS;
+  
+  sens_val <= reg_miso.rdval;
+  sens_dat <= reg_miso.rddata(c_byte_w-1 DOWNTO 0);
+  
+  -- Verify sensor data
+  p_verify : PROCESS
+  BEGIN
+    WAIT UNTIL rising_edge(clk);  -- Added this line to avoid warning: (vcom-1090) Possible infinite loop: Process contains no WAIT statement.
+    
+    proc_common_wait_until_high(clk, sens_val);
+    ASSERT TO_UINT(sens_dat)=c_sens_expected(0) REPORT "Wrong FPGA temperature value" SEVERITY ERROR;
+    proc_common_wait_some_cycles(clk, 1);
+    ASSERT TO_UINT(sens_dat)=c_sens_expected(1) REPORT "Wrong ETH temperature value" SEVERITY ERROR;
+    proc_common_wait_some_cycles(clk, 1);
+    ASSERT TO_UINT(sens_dat)=c_sens_expected(2) REPORT "Wrong hot swap V sense value" SEVERITY ERROR;
+    proc_common_wait_some_cycles(clk, 1);
+    ASSERT TO_UINT(sens_dat)=c_sens_expected(3) REPORT "Wrong hot swap V source value" SEVERITY ERROR;
+    proc_common_wait_some_cycles(clk, 1);
+    ASSERT TO_UINT(sens_dat)=c_sens_expected(4) REPORT "An I2C error occurred" SEVERITY ERROR;
+    
+  END PROCESS;
+  
+  
+  -- I2C sensors master
+  u_mms_unb2_board_sens : ENTITY work.mms_unb2_board_sens
+  GENERIC MAP (
+    g_sim       => c_sim,
+    g_clk_freq  => c_clk_freq,
+    g_temp_high => c_temp_high
+  )
+  PORT MAP (
+    -- Clocks and reset
+    mm_rst    => rst,
+    mm_clk    => clk,
+    mm_start  => start,
+    
+    -- Memory-mapped clock domain
+    reg_mosi  => reg_mosi,
+    reg_miso  => reg_miso,
+    
+    -- i2c bus
+    scl       => scl,
+    sda       => sda
+  );
+  
+  -- 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  => scl,
+    sda  => sda,
+    temp => c_fpga_temp
+  );
+
+  -- I2C slaves that are available only via FPGA node 3
+  u_eth_temp : ENTITY i2c_lib.dev_max1618
+  GENERIC MAP (
+    g_address => c_eth_temp_address
+  )
+  PORT MAP (
+    scl  => scl,
+    sda  => 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               => scl,
+    sda               => sda,
+    ana_current_sense => c_uniboard_current,
+    ana_volt_source   => c_uniboard_supply,
+    ana_volt_adin     => c_uniboard_adin
+  );
+    
+END tb;
+
diff --git a/boards/uniboard2a/libraries/unb2a_board/tb/vhdl/tb_unb2_board_clk125_pll.vhd b/boards/uniboard2a/libraries/unb2a_board/tb/vhdl/tb_unb2_board_clk125_pll.vhd
new file mode 100644
index 0000000000000000000000000000000000000000..13f29d91913a0a613615e253ad05da073e3e694c
--- /dev/null
+++ b/boards/uniboard2a/libraries/unb2a_board/tb/vhdl/tb_unb2_board_clk125_pll.vhd
@@ -0,0 +1,71 @@
+-------------------------------------------------------------------------------
+--
+-- Copyright (C) 2014
+-- ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/>
+-- JIVE (Joint Institute for VLBI in Europe) <http://www.jive.nl/>
+-- P.O.Box 2, 7990 AA Dwingeloo, The Netherlands
+--
+-- This program is free software: you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation, either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program.  If not, see <http://www.gnu.org/licenses/>.
+--
+-------------------------------------------------------------------------------
+
+
+-- Purpose: Simulate phase behaviour of PLL in normal mode
+-- Description:
+-- Usage:
+-- > as 3
+-- > run -all
+
+LIBRARY IEEE, common_lib;
+USE IEEE.STD_LOGIC_1164.ALL;
+USE common_lib.common_pkg.ALL;
+
+
+ENTITY tb_unb2_board_clk125_pll IS
+END tb_unb2_board_clk125_pll;
+
+
+ARCHITECTURE tb OF tb_unb2_board_clk125_pll IS
+
+  CONSTANT c_ext_clk_period  : TIME := 8 ns; -- 125 MHz
+  
+  SIGNAL tb_end      : STD_LOGIC := '0';
+  SIGNAL ext_clk     : STD_LOGIC := '0';
+  SIGNAL ext_rst     : STD_LOGIC;
+  SIGNAL c0_clk20    : STD_LOGIC;
+  SIGNAL c1_clk50    : STD_LOGIC;
+  SIGNAL c2_clk100   : STD_LOGIC;
+  SIGNAL c3_clk125   : STD_LOGIC;
+  SIGNAL pll_locked  : STD_LOGIC;
+  
+BEGIN
+
+  tb_end <= '0', '1' AFTER c_ext_clk_period*5000;
+  
+  ext_clk <= NOT ext_clk OR tb_end AFTER c_ext_clk_period/2;
+  ext_rst <= '1', '0' AFTER c_ext_clk_period*7;
+  
+  dut_0 : ENTITY work.unb2_board_clk125_pll
+  PORT MAP (
+    arst      => ext_rst,
+    clk125    => ext_clk,
+
+    c0_clk20  => c0_clk20,
+    c1_clk50  => c1_clk50,
+    c2_clk100  => c2_clk100,
+    c3_clk125  => c3_clk125,
+
+    pll_locked => pll_locked
+  );
+END tb;
diff --git a/boards/uniboard2a/libraries/unb2a_board/tb/vhdl/tb_unb2_board_clk200_pll.vhd b/boards/uniboard2a/libraries/unb2a_board/tb/vhdl/tb_unb2_board_clk200_pll.vhd
new file mode 100644
index 0000000000000000000000000000000000000000..a2e442c17a96dc1432cee7897a8e1f79917bea4d
--- /dev/null
+++ b/boards/uniboard2a/libraries/unb2a_board/tb/vhdl/tb_unb2_board_clk200_pll.vhd
@@ -0,0 +1,116 @@
+-------------------------------------------------------------------------------
+--
+-- 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/>.
+--
+-------------------------------------------------------------------------------
+
+
+-- Purpose: Simulate phase behaviour of PLL in normal mode
+-- Description:
+-- Usage:
+-- > as 3
+-- > run -all
+
+LIBRARY IEEE, common_lib;
+USE IEEE.STD_LOGIC_1164.ALL;
+USE common_lib.common_pkg.ALL;
+
+
+ENTITY tb_unb2_board_clk200_pll IS
+END tb_unb2_board_clk200_pll;
+
+
+ARCHITECTURE tb OF tb_unb2_board_clk200_pll IS
+
+  CONSTANT c_ext_clk_period    : TIME := 5 ns;               -- 200 MHz
+  CONSTANT c_clk_vec_w         : NATURAL := 6;
+  CONSTANT c_clk_div           : NATURAL := 32;
+  
+  SIGNAL tb_end         : STD_LOGIC := '0';
+  SIGNAL ext_clk        : STD_LOGIC := '0';
+  SIGNAL ext_rst        : STD_LOGIC;
+  
+  SIGNAL st_clk200_0    : STD_LOGIC;
+  SIGNAL st_rst200_0    : STD_LOGIC;
+  
+  SIGNAL st_clk200p0    : STD_LOGIC;
+  SIGNAL st_rst200p0    : STD_LOGIC;
+  
+  SIGNAL st_clk200_45   : STD_LOGIC;
+  SIGNAL st_rst200_45   : STD_LOGIC;
+  
+  SIGNAL st_clk200p45   : STD_LOGIC;
+  SIGNAL st_rst200p45   : STD_LOGIC;
+  
+  SIGNAL st_clk400      : STD_LOGIC;
+  SIGNAL st_rst400      : STD_LOGIC;
+  
+  SIGNAL dp_clk200      : STD_LOGIC;
+  SIGNAL dp_rst200      : STD_LOGIC;
+  
+BEGIN
+
+  tb_end <= '0', '1' AFTER c_ext_clk_period*5000;
+  
+  ext_clk <= NOT ext_clk OR tb_end AFTER c_ext_clk_period/2;
+  ext_rst <= '1', '0' AFTER c_ext_clk_period*7;
+  
+  dut_0 : ENTITY work.unb2_board_clk200_pll
+  GENERIC MAP (
+    g_clk200_phase_shift  => "0"
+  )
+  PORT MAP (
+    arst       => ext_rst,
+    clk200     => ext_clk,
+    st_clk200  => st_clk200_0,
+    st_rst200  => st_rst200_0,
+    st_clk200p => st_clk200p0,
+    st_rst200p => st_rst200p0,
+    st_clk400  => st_clk400,
+    st_rst400  => st_rst400
+  );
+  
+  dut_45 : ENTITY work.unb2_board_clk200_pll
+  GENERIC MAP (
+    g_clk200_phase_shift  => "625",
+    g_clk200p_phase_shift => "625"
+  )
+  PORT MAP (
+    arst       => ext_rst,
+    clk200     => ext_clk,
+    st_clk200  => st_clk200_45,
+    st_rst200  => st_rst200_45,
+    st_clk200p => st_clk200p45,
+    st_rst200p => st_rst200p45,
+    st_clk400  => OPEN,
+    st_rst400  => OPEN
+  );
+  
+  dut_p6 : ENTITY work.unb2_board_clk200_pll
+  GENERIC MAP (
+    g_clk200_phase_shift  => "0"
+  )
+  PORT MAP (
+    arst       => ext_rst,
+    clk200     => ext_clk,
+    st_clk200  => dp_clk200,
+    st_rst200  => dp_rst200
+  );
+  
+END tb;
diff --git a/boards/uniboard2a/libraries/unb2a_board/tb/vhdl/tb_unb2_board_clk25_pll.vhd b/boards/uniboard2a/libraries/unb2a_board/tb/vhdl/tb_unb2_board_clk25_pll.vhd
new file mode 100644
index 0000000000000000000000000000000000000000..cbd3d0290147c376a450c5b718e38c57f8d652db
--- /dev/null
+++ b/boards/uniboard2a/libraries/unb2a_board/tb/vhdl/tb_unb2_board_clk25_pll.vhd
@@ -0,0 +1,71 @@
+-------------------------------------------------------------------------------
+--
+-- Copyright (C) 2014
+-- ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/>
+-- JIVE (Joint Institute for VLBI in Europe) <http://www.jive.nl/>
+-- P.O.Box 2, 7990 AA Dwingeloo, The Netherlands
+--
+-- This program is free software: you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation, either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program.  If not, see <http://www.gnu.org/licenses/>.
+--
+-------------------------------------------------------------------------------
+
+
+-- Purpose: Simulate phase behaviour of PLL in normal mode
+-- Description:
+-- Usage:
+-- > as 3
+-- > run -all
+
+LIBRARY IEEE, common_lib;
+USE IEEE.STD_LOGIC_1164.ALL;
+USE common_lib.common_pkg.ALL;
+
+
+ENTITY tb_unb2_board_clk25_pll IS
+END tb_unb2_board_clk25_pll;
+
+
+ARCHITECTURE tb OF tb_unb2_board_clk25_pll IS
+
+  CONSTANT c_ext_clk_period  : TIME := 40 ns; -- 25 MHz
+  
+  SIGNAL tb_end      : STD_LOGIC := '0';
+  SIGNAL ext_clk     : STD_LOGIC := '0';
+  SIGNAL ext_rst     : STD_LOGIC;
+  SIGNAL c0_clk20    : STD_LOGIC;
+  SIGNAL c1_clk50    : STD_LOGIC;
+  SIGNAL c2_clk100   : STD_LOGIC;
+  SIGNAL c3_clk125   : STD_LOGIC;
+  SIGNAL pll_locked  : STD_LOGIC;
+  
+BEGIN
+
+  tb_end <= '0', '1' AFTER c_ext_clk_period*5000;
+  
+  ext_clk <= NOT ext_clk OR tb_end AFTER c_ext_clk_period/2;
+  ext_rst <= '1', '0' AFTER c_ext_clk_period*7;
+  
+  dut_0 : ENTITY work.unb2_board_clk25_pll
+  PORT MAP (
+    arst      => ext_rst,
+    clk25     => ext_clk,
+
+    c0_clk20  => c0_clk20,
+    c1_clk50  => c1_clk50,
+    c2_clk100  => c2_clk100,
+    c3_clk125  => c3_clk125,
+
+    pll_locked => pll_locked
+  );
+END tb;
diff --git a/boards/uniboard2a/libraries/unb2a_board/tb/vhdl/tb_unb2_board_node_ctrl.vhd b/boards/uniboard2a/libraries/unb2a_board/tb/vhdl/tb_unb2_board_node_ctrl.vhd
new file mode 100644
index 0000000000000000000000000000000000000000..a5dbd064dc9a2edc29f28336cfbba3bc4270b09c
--- /dev/null
+++ b/boards/uniboard2a/libraries/unb2a_board/tb/vhdl/tb_unb2_board_node_ctrl.vhd
@@ -0,0 +1,99 @@
+-------------------------------------------------------------------------------
+--
+-- Copyright (C) 2010
+-- 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;
+USE IEEE.STD_LOGIC_1164.ALL;
+USE common_lib.common_pkg.ALL;
+
+
+ENTITY tb_unb2_board_node_ctrl IS
+END tb_unb2_board_node_ctrl;
+
+
+ARCHITECTURE tb OF tb_unb2_board_node_ctrl IS
+
+  CONSTANT c_scale             : NATURAL := 100;             -- scale to speed up simulation
+  
+  CONSTANT c_xo_clk_period     : TIME := 1 us;               -- 1 MHz XO, slow XO to speed up simulation
+  CONSTANT c_mm_clk_period     : TIME := c_xo_clk_period/5;  -- 5 MHz PLL output from XO reference
+  CONSTANT c_mm_locked_time    : TIME := 10 us;
+    
+  CONSTANT c_pulse_us          : NATURAL := 5;              -- nof 5 MHz clk cycles to get us period
+  CONSTANT c_pulse_ms          : NATURAL := 1000/c_scale;   -- nof pulse_us pulses to get ms period
+  CONSTANT c_pulse_s           : NATURAL := 1000;           -- nof pulse_ms pulses to get  s period
+  
+  CONSTANT c_wdi_extend_w      : NATURAL := 14;     -- extend wdi by about 2**(14-1)= 8 s (as defined by c_pulse_ms)
+  CONSTANT c_wdi_period        : TIME :=  1000 ms;  -- wdi toggle after c_wdi_period
+  
+  -- Use c_sw_period=40000 ms to show that the c_wdi_extend_w=5 is not enough, the WD will kick in when the sw is off during reload
+  CONSTANT c_sw_period         : TIME := 40000 ms;  -- sw active for c_sw_period then inactive during reload for c_sw_period, etc.
+  -- Use c_sw_period=10000 ms to show that the c_wdi_extend_w=5 is enough, the WD will not kick in when the sw is off during reload
+  --CONSTANT c_sw_period         : TIME := 6000 ms;  -- sw active for c_sw_period then inactive during reload for c_sw_period, etc.
+  
+  SIGNAL mm_clk      : STD_LOGIC := '0';
+  SIGNAL mm_locked   : STD_LOGIC := '0';
+  SIGNAL mm_rst      : STD_LOGIC;
+  
+  SIGNAL wdi         : STD_LOGIC := '0';
+  SIGNAL wdi_in      : STD_LOGIC;
+  SIGNAL wdi_out     : STD_LOGIC;
+  
+  SIGNAL sw          : STD_LOGIC := '0';
+  
+  SIGNAL pulse_us    : STD_LOGIC;
+  SIGNAL pulse_ms    : STD_LOGIC;
+  SIGNAL pulse_s     : STD_LOGIC;
+  
+BEGIN
+
+  -- run 2000 ms
+  
+  mm_clk <= NOT mm_clk AFTER c_mm_clk_period/2;
+  mm_locked <= '0', '1' AFTER c_mm_locked_time;
+  
+  wdi    <= NOT wdi AFTER c_wdi_period/c_scale;  -- wd interrupt
+  sw     <= NOT sw  AFTER c_sw_period/c_scale;   -- sw active / reload
+  
+  wdi_in <= wdi AND sw;  -- sw wdi only when sw is active, during sw inactive the wdi_out will be extended
+  
+  dut : ENTITY work.unb2_board_node_ctrl
+  GENERIC MAP (
+    g_pulse_us     => c_pulse_us,
+    g_pulse_ms     => c_pulse_ms,
+    g_pulse_s      => c_pulse_s,
+    g_wdi_extend_w => c_wdi_extend_w
+  )
+  PORT MAP (
+    -- MM clock domain reset
+    mm_clk      => mm_clk,
+    mm_locked   => mm_locked,
+    mm_rst      => mm_rst,
+    -- WDI extend
+    mm_wdi_in   => wdi_in,
+    mm_wdi_out  => wdi_out,
+    -- Pulses
+    mm_pulse_us => pulse_us,
+    mm_pulse_ms => pulse_ms,
+    mm_pulse_s  => pulse_s
+  );
+  
+END tb;
diff --git a/boards/uniboard2a/libraries/unb2a_board/tb/vhdl/tb_unb2_board_qsfp_leds.vhd b/boards/uniboard2a/libraries/unb2a_board/tb/vhdl/tb_unb2_board_qsfp_leds.vhd
new file mode 100644
index 0000000000000000000000000000000000000000..06f7e52d03b4c4be727e5f18049b20f9778e2ebd
--- /dev/null
+++ b/boards/uniboard2a/libraries/unb2a_board/tb/vhdl/tb_unb2_board_qsfp_leds.vhd
@@ -0,0 +1,190 @@
+-------------------------------------------------------------------------------
+--
+-- Copyright (C) 2015
+-- ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/>
+-- JIVE (Joint Institute for VLBI in Europe) <http://www.jive.nl/>
+-- P.O.Box 2, 7990 AA Dwingeloo, The Netherlands
+--
+-- This program is free software: you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation, either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program.  If not, see <http://www.gnu.org/licenses/>.
+--
+-------------------------------------------------------------------------------
+
+-- Purpose: Test bench for unb2_board_qsfp_leds
+-- Description:
+--   The test bench is self-stopping but not self-checking. Manually obeserve
+--   in the wave window that:
+--   1) factory image:
+--      - green led is off
+--      - red led toggles
+--   2) user image
+--      - red led is off
+--      - green led toggles when any xon='0'
+--      - green led is on continously when any xon='1'
+--      - green led goes briefly off when any sop='1'
+-- Usage:
+--   > as 3
+--   > run -a
+
+LIBRARY IEEE, common_lib, dp_lib;
+USE IEEE.std_logic_1164.ALL;
+USE common_lib.common_pkg.ALL;
+USE common_lib.tb_common_pkg.ALL;
+USE dp_lib.dp_stream_pkg.ALL;
+
+ENTITY tb_unb2_board_qsfp_leds IS
+END tb_unb2_board_qsfp_leds;
+
+ARCHITECTURE tb OF tb_unb2_board_qsfp_leds IS
+
+  CONSTANT c_clk_freq_hz    : NATURAL := 200 * 10**6;
+  CONSTANT c_clk_period_ns  : NATURAL := 10**9 / c_clk_freq_hz;
+  CONSTANT c_nof_clk_per_us : NATURAL := 1000 / c_clk_period_ns;
+  
+  CONSTANT clk_period       : TIME := c_clk_period_ns * 1 ns;
+  
+  CONSTANT c_nof_qsfp       : NATURAL := 2;
+  CONSTANT c_nof_lanes      : NATURAL := c_nof_qsfp*c_quad;
+  
+  SIGNAL tb_end                  : STD_LOGIC := '0';
+  SIGNAL rst                     : STD_LOGIC;
+  SIGNAL clk                     : STD_LOGIC := '0';
+  SIGNAL pulse_us                : STD_LOGIC;
+  SIGNAL pulse_ms                : STD_LOGIC;
+  SIGNAL pulse_s                 : STD_LOGIC;
+ 
+  SIGNAL tx_siso_arr             : t_dp_siso_arr(c_nof_lanes-1 DOWNTO 0) := (OTHERS=>c_dp_siso_rst);
+  SIGNAL tx_sosi_arr             : t_dp_sosi_arr(c_nof_lanes-1 DOWNTO 0) := (OTHERS=>c_dp_sosi_rst);
+  SIGNAL rx_sosi_arr             : t_dp_sosi_arr(c_nof_lanes-1 DOWNTO 0) := (OTHERS=>c_dp_sosi_rst);
+    
+  SIGNAL dbg_xon_arr             : STD_LOGIC_VECTOR(c_nof_lanes-1 DOWNTO 0);
+  SIGNAL dbg_tx_sop_arr          : STD_LOGIC_VECTOR(c_nof_lanes-1 DOWNTO 0);
+  SIGNAL dbg_rx_sop_arr          : STD_LOGIC_VECTOR(c_nof_lanes-1 DOWNTO 0);
+  
+  SIGNAL factory_green_led_arr   : STD_LOGIC_VECTOR(c_nof_qsfp-1 DOWNTO 0);
+  SIGNAL factory_red_led_arr     : STD_LOGIC_VECTOR(c_nof_qsfp-1 DOWNTO 0);
+  
+  SIGNAL user_green_led_arr      : STD_LOGIC_VECTOR(c_nof_qsfp-1 DOWNTO 0);
+  SIGNAL user_red_led_arr        : STD_LOGIC_VECTOR(c_nof_qsfp-1 DOWNTO 0);
+  
+  -- Cannot use proc_common_gen_pulse() to create sop in array.
+  -- proc_common_gen_pulse() works for dbg_sop, dbg_sosi.sop but not for dbg_sop_slv(I) or for tx_sosi_arr(I).sop.
+  -- The compiler then gives Error: "(vcom-1450) Actual (indexed name) for formal "pulse" is not a static signal name"
+  -- It does work if the array index is from a GENERATE statement, but it does not work when it is from a LOOP statement.
+  SIGNAL dbg_sop      : STD_LOGIC;
+  SIGNAL dbg_sop_slv  : STD_LOGIC_VECTOR(c_nof_lanes-1 DOWNTO 0);
+  SIGNAL dbg_sosi : t_dp_sosi;
+  
+BEGIN
+  
+  clk <= NOT clk OR tb_end AFTER clk_period/2;
+  rst <= '1', '0' AFTER clk_period*7;
+  
+  -- Ease observation of record fields in Wave window, by mapping them to a SLV
+  dbg_xon_arr    <= func_dp_stream_arr_get(tx_siso_arr, "XON");
+  dbg_tx_sop_arr <= func_dp_stream_arr_get(tx_sosi_arr, "SOP");
+  dbg_rx_sop_arr <= func_dp_stream_arr_get(rx_sosi_arr, "SOP");
+  
+  p_stimuli : PROCESS
+  BEGIN
+    tx_siso_arr <= (OTHERS=>c_dp_siso_rst);
+    tx_sosi_arr <= (OTHERS=>c_dp_sosi_rst);
+    rx_sosi_arr <= (OTHERS=>c_dp_sosi_rst);
+    proc_common_wait_some_pulses(clk, pulse_ms, 50);
+    
+    -- Switch on each lane
+    FOR I IN 0 TO c_nof_lanes-1 LOOP
+      tx_siso_arr(I).xon <= '1';
+      proc_common_wait_some_pulses(clk, pulse_ms, 10);
+    END LOOP;
+    proc_common_wait_some_pulses(clk, pulse_ms, 50);
+    
+    -- Issue the sop of a Tx packet on each lane
+    FOR I IN 0 TO c_nof_lanes-1 LOOP
+      -- Cannot use proc_common_gen_pulse(), because index I in a LOOP is not static
+      tx_sosi_arr(I).sop <= '1';
+      WAIT UNTIL rising_edge(clk);
+      tx_sosi_arr(I).sop <= '0';
+      proc_common_wait_some_pulses(clk, pulse_ms, 10);
+    END LOOP;
+    proc_common_wait_some_pulses(clk, pulse_ms, 50);
+    
+    -- Issue the sop of an Rx packet on each lane
+    FOR I IN 0 TO c_nof_lanes-1 LOOP
+      -- Cannot use proc_common_gen_pulse(), because index I in a LOOP is not static
+      rx_sosi_arr(I).sop <= '1';
+      WAIT UNTIL rising_edge(clk);
+      rx_sosi_arr(I).sop <= '0';
+      proc_common_wait_some_pulses(clk, pulse_ms, 10);
+    END LOOP;
+    proc_common_wait_some_pulses(clk, pulse_ms, 50);
+    
+    -- Switch off each lane
+    FOR I IN 0 TO c_nof_lanes-1 LOOP
+      tx_siso_arr(I).xon <= '0';
+      proc_common_wait_some_pulses(clk, pulse_ms, 10);
+    END LOOP;
+    proc_common_wait_some_pulses(clk, pulse_ms, 50);
+    
+    tb_end <= '1';
+    proc_common_wait_some_pulses(clk, pulse_ms, 10);
+    WAIT;
+  END PROCESS;
+  
+  u_unb2_factory_qsfp_leds : ENTITY work.unb2_board_qsfp_leds
+  GENERIC MAP (
+    g_sim             => TRUE,             -- when true speed up led toggling in simulation
+    g_factory_image   => TRUE,             -- distinguish factory image and user images
+    g_nof_qsfp        => c_nof_qsfp,       -- number of QSFP cages each with one dual led that can light red or green (or amber = red + green)
+    g_pulse_us        => c_nof_clk_per_us  -- nof clk cycles to get us period
+  )
+  PORT MAP (
+    rst               => rst,
+    clk               => clk,
+    -- internal pulser outputs
+    pulse_us          => pulse_us,
+    pulse_ms          => pulse_ms,
+    pulse_s           => pulse_s,
+    -- lane status
+    tx_siso_arr       => tx_siso_arr,
+    tx_sosi_arr       => tx_sosi_arr,
+    rx_sosi_arr       => rx_sosi_arr,
+    -- leds
+    green_led_arr     => factory_green_led_arr,
+    red_led_arr       => factory_red_led_arr
+  );
+  
+  u_unb2_user_qsfp_leds : ENTITY work.unb2_board_qsfp_leds
+  GENERIC MAP (
+    g_sim             => TRUE,             -- when true speed up led toggling in simulation
+    g_factory_image   => FALSE,            -- distinguish factory image and user images
+    g_nof_qsfp        => c_nof_qsfp,       -- number of QSFP cages each with one dual led that can light red or green (or amber = red + green)
+    g_pulse_us        => c_nof_clk_per_us  -- nof clk cycles to get us period
+  )
+  PORT MAP (
+    rst               => rst,
+    clk               => clk,
+    -- internal pulser outputs
+    pulse_us          => pulse_us,
+    pulse_ms          => pulse_ms,
+    pulse_s           => pulse_s,
+    -- lane status
+    tx_siso_arr       => tx_siso_arr,
+    tx_sosi_arr       => tx_sosi_arr,
+    rx_sosi_arr       => rx_sosi_arr,
+    -- leds
+    green_led_arr     => user_green_led_arr,
+    red_led_arr       => user_red_led_arr
+  );
+  
+END tb;