diff --git a/boards/uniboard2c/designs/unb2c_test/unb2c_test.fpga.yaml b/boards/uniboard2c/designs/unb2c_test/unb2c_test.fpga.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..0b33ed4c02331e284be62af8c60356aebc66870d
--- /dev/null
+++ b/boards/uniboard2c/designs/unb2c_test/unb2c_test.fpga.yaml
@@ -0,0 +1,266 @@
+schema_name   : args
+schema_version: 1.0
+schema_type   : fpga
+
+hdl_library_name: unb2c_test
+fpga_name       : unb2c_test
+fpga_description: "FPGA design unb2c_test"
+parameters:
+  - { name: c_nof_streams_1GbE_UDP,             value: 2 }  
+  - { name: c_def_1GbE_block_size,              value: 20 }  
+  - { name: c_nof_streams_10GbE_UDP,            value: 72 }  
+  - { name: c_def_10GbE_block_size,             value: 900 }  
+  - { name: c_nof_streams_qsfp,                 value: 24 }  
+  - { name: c_nof_streams_ring,                 value: 24 }  
+  - { name: c_nof_streams_back0,                value: 24 }  
+  - { name: c_ddr_db_buf_nof_data,              value: 1024 }  
+  - { name: c_nof_streams_jesd204b,             value: 12 }  
+  - { name: c_jesd_db_buf_nof_data,             value: 131072 }  
+
+peripherals:
+  # ctrl_unb2c_board
+  - peripheral_name: unb2c_board/system_info
+    lock_base_address: 0x10000
+    mm_port_names:
+      - ROM_SYSTEM_INFO
+      - PIO_SYSTEM_INFO
+
+  - peripheral_name: unb2c_board/wdi
+    mm_port_names:
+      - REG_WDI
+
+  - peripheral_name: unb2c_board/unb2_fpga_sens
+    mm_port_names:
+      - REG_FPGA_TEMP_SENS
+      - REG_FPGA_VOLTAGE_SENS
+
+  - peripheral_name: unb2c_board/ram_scrap
+    mm_port_names:
+      - RAM_SCRAP
+
+  - peripheral_name: eth/eth
+    mm_port_names:
+      - AVS_ETH_0_TSE
+      - AVS_ETH_0_REG
+      - AVS_ETH_0_RAM
+      
+  - peripheral_name: ppsh/ppsh
+    mm_port_names:
+      - PIO_PPS
+      
+  - peripheral_name: epcs/epcs
+    mm_port_names:
+      - REG_EPCS
+
+  - peripheral_name: dp/dpmm
+    mm_port_names:
+      - REG_DPMM_CTRL
+      - REG_DPMM_DATA
+
+  - peripheral_name: dp/mmdp
+    mm_port_names:
+      - REG_MMDP_CTRL
+      - REG_MMDP_DATA
+
+  - peripheral_name: remu/remu
+    mm_port_names:
+      - REG_REMU
+
+  # Heater 
+  - peripheral_name: util/heater
+    mm_port_names:
+      - REG_HEATER
+
+  # 1GbE
+  - peripheral_name: diag/diag_block_gen
+    peripheral_group: eth_1gbe
+    parameter_overrides:
+      - { name: g_nof_streams, value: c_nof_streams_1GbE_UDP }
+      - { name: g_buf_dat_w, value: 32 }
+      - { name: g_buf_addr_w, value: ceil_log2(c_def_1GbE_block_size) }
+    mm_port_names:
+      - REG_DIAG_BG_1GBE
+      - RAM_DIAG_BG_1GBE
+
+  - peripheral_name: diag/diag_tx_seq
+    peripheral_group: eth_1gbe
+    parameter_overrides:
+      - { name: g_nof_streams, value: c_nof_streams_1GbE_UDP }
+    mm_port_names:
+      - REG_DIAG_TX_SEQ_1GBE
+
+  - peripheral_name: dp/dp_bsn_monitor
+    peripheral_group: eth_1gbe
+    parameter_overrides:
+      - { name: g_nof_streams, value: c_nof_streams_1GbE_UDP }
+    mm_port_names:
+      - REG_BSN_MONITOR_1GBE
+
+  - peripheral_name: diag/diag_data_buffer
+    peripheral_group: eth_1gbe
+    parameter_overrides:
+      - { name: g_nof_streams, value: c_nof_streams_1GbE_UDP }
+      - { name: g_data_w, value: 32 }
+      - { name: g_nof_data, value: c_def_1GbE_block_size }
+    mm_port_names:
+      - REG_DIAG_DATA_BUFFER_1GBE
+      - RAM_DIAG_DATA_BUFFER_1GBE
+
+  - peripheral_name: diag/diag_rx_seq
+    peripheral_group: eth_1gbe
+    parameter_overrides:
+      - { name: g_nof_streams, value: c_nof_streams_1GbE_UDP }
+    mm_port_names:
+      - REG_DIAG_TX_SEQ_1GBE
+
+  # 10GbE
+  - peripheral_name: diag/diag_block_gen
+    peripheral_group: eth_10gbe
+    parameter_overrides:
+      - { name: g_nof_streams, value: c_nof_streams_10GbE_UDP }
+      - { name: g_buf_dat_w, value: 64 }
+      - { name: g_buf_addr_w, value: ceil_log2(c_def_10GbE_block_size) }
+    mm_port_names:
+      - REG_DIAG_BG_10GBE
+      - RAM_DIAG_BG_10GBE
+
+  - peripheral_name: diag/diag_tx_seq
+    peripheral_group: eth_10gbe
+    parameter_overrides:
+      - { name: g_nof_streams, value: c_nof_streams_10GbE_UDP }
+    mm_port_names:
+      - REG_DIAG_TX_SEQ_10GBE
+
+  - peripheral_name: dp/dp_bsn_monitor
+    peripheral_group: eth_10gbe
+    parameter_overrides:
+      - { name: g_nof_streams, value: c_nof_streams_10GbE_UDP }
+    mm_port_names:
+      - REG_BSN_MONITOR_10GBE
+
+  - peripheral_name: diag/diag_data_buffer
+    peripheral_group: eth_10gbe
+    parameter_overrides:
+      - { name: g_nof_streams, value: c_nof_streams_10GbE_UDP }
+      - { name: g_data_w, value: 64 }
+      - { name: g_nof_data, value: c_def_10GbE_block_size }
+    mm_port_names:
+      - REG_DIAG_DATA_BUFFER_10GBE
+      - RAM_DIAG_DATA_BUFFER_10GBE
+
+  - peripheral_name: diag/diag_rx_seq
+    peripheral_group: eth_10gbe
+    parameter_overrides:
+      - { name: g_nof_streams, value: c_nof_streams_10GbE_UDP }
+    mm_port_names:
+      - REG_DIAG_TX_SEQ_10GBE
+
+  - peripheral_name: tr_10GbE/tr_10GbE_unb2legacy
+    peripheral_group: qsfp_ring
+    parameter_overrides:
+      - { name: g_nof_macs, value: c_nof_streams_qsfp + c_nof_streams_ring }
+    mm_port_names:
+      - REG_TR_10GBE_QSFP_RING
+
+  - peripheral_name: tr_10GbE/tr_10GbE_eth10g
+    peripheral_group: qsfp_ring
+    parameter_overrides:
+      - { name: g_nof_macs, value: c_nof_streams_qsfp + c_nof_streams_ring }
+    mm_port_names:
+      - REG_ETH10G_QSFP_RING
+
+  - peripheral_name: tr_10GbE/tr_10GbE_unb2legacy
+    peripheral_group: back0
+    parameter_overrides:
+      - { name: g_nof_macs, value: c_nof_streams_back0 }
+    mm_port_names:
+      - REG_TR_10GBE_BACK0
+
+  - peripheral_name: tr_10GbE/tr_10GbE_eth10g
+    peripheral_group: back0
+    parameter_overrides:
+      - { name: g_nof_macs, value: c_nof_streams_back0 }
+    mm_port_names:
+      - REG_ETH10G_BACK0
+
+  # DDR4 : MB I 
+  - peripheral_name: ddr/io_ddr
+    peripheral_group: MB_I
+    mm_port_names:
+      - REG_IO_DDR_MB_I
+
+  - peripheral_name: diag/diag_tx_seq
+    peripheral_group: MB_I
+    mm_port_names:
+      - REG_DIAG_TX_SEQ_DDR_MB_I
+
+  - peripheral_name: diag/diag_rx_seq
+    peripheral_group: MB_I
+    mm_port_names:
+      - REG_DIAG_RX_SEQ_DDR_MB_I
+
+  - peripheral_name: diag/diag_data_buffer
+    peripheral_group: ddr_MB_I
+    parameter_overrides:
+      - { name: g_data_w, value: 32 }
+      - { name: g_nof_data, value: c_ddr_db_buf_nof_data }
+    mm_port_names:
+      - REG_DIAG_DATA_BUFFER_DDR_MB_I
+      - RAM_DIAG_DATA_BUFFER_DDR_MB_I
+
+  # DDR4 : MB II 
+  - peripheral_name: ddr/io_ddr
+    peripheral_group: MB_II
+    mm_port_names:
+      - REG_IO_DDR_MB_II
+
+  - peripheral_name: diag/diag_tx_seq
+    peripheral_group: MB_II
+    mm_port_names:
+      - REG_DIAG_TX_SEQ_DDR_MB_II
+
+  - peripheral_name: diag/diag_rx_seq
+    peripheral_group: MB_II
+    mm_port_names:
+      - REG_DIAG_RX_SEQ_DDR_MB_II
+
+  - peripheral_name: diag/diag_data_buffer
+    peripheral_group: ddr_MB_II
+    parameter_overrides:
+      - { name: g_data_w, value: 32 }
+      - { name: g_nof_data, value: c_ddr_db_buf_nof_data }
+    mm_port_names:
+      - REG_DIAG_DATA_BUFFER_DDR_MB_II
+      - RAM_DIAG_DATA_BUFFER_DDR_MB_II
+
+  # JESD
+  - peripheral_name: tech_jesd204b/jesd_ctrl
+    mm_port_names:
+      - PIO_JESD_CTRL
+      
+  - peripheral_name: tech_jesd204b/jesd204b_arria10
+    parameter_overrides:
+      - { name: g_nof_streams, value: c_nof_streams_jesd204b }
+    mm_port_names:
+      - JESD204B
+
+  - peripheral_name: dp/dp_bsn_source
+    mm_port_names:
+      - REG_BSN_SOURCE
+
+  - peripheral_name: dp/dp_bsn_monitor
+    peripheral_group: input
+    parameter_overrides:
+      - { name: g_nof_streams, value: c_nof_streams_jesd204b }
+    mm_port_names:
+      - REG_BSN_MONITOR_INPUT
+
+  - peripheral_name: diag/diag_data_buffer
+    peripheral_group: bsn 
+    parameter_overrides:
+      - { name: g_nof_streams, value: c_nof_streams_jesd204b }
+      - { name: g_data_w, value: 16 }
+      - { name: g_nof_data, value: c_jesd_db_buf_nof_data }
+    mm_port_names:
+      - REG_DIAG_DATA_BUFFER_BSN
+      - RAM_DIAG_DATA_BUFFER_BSN
diff --git a/libraries/base/diag/diag.peripheral.yaml b/libraries/base/diag/diag.peripheral.yaml
index 8081e7e15c2f3168838d7ac8112d02f52d705ccb..1642e1e0ebaf9d48882a8b6055963a5bae60cd9e 100644
--- a/libraries/base/diag/diag.peripheral.yaml
+++ b/libraries/base/diag/diag.peripheral.yaml
@@ -97,5 +97,117 @@ peripherals:
               field_description: ""
               number_of_fields: g_nof_data
               address_offset: 0x0
-              mm_width: g_data_w
-              
+              user_width: g_data_w
+    
+  - peripheral_name: diag_block_gen    # pi_diag_block_gen.py
+    peripheral_description: "Block generator (BG)"
+    parameters:
+      # Parameters of mms_diag_block_gen.vhd
+      - { name: g_nof_streams, value: 1 }
+      - { name: g_buf_dat_w, value: 16 }
+      - { name: g_buf_addr_w, value: 7 }
+    mm_ports:
+      # MM port for mms_diag_block_gen.vhd
+      - mm_port_name: REG_DIAG_BG
+        mm_port_type: REG
+        mm_port_span: 8 * MM_BUS_SIZE
+        mm_port_description: "Block gen control."
+        number_of_mm_ports: 1
+        fields:
+          - - field_name: enable
+              address_offset: 0x0
+              bit_offset: 0
+              mm_width: 1
+          - - field_name: enable_sync
+              address_offset: 0x0
+              bit_offset: 1
+              mm_width: 1
+          - - field_name: samples_per_packet
+              address_offset: 0x4
+          - - field_name: blocks_per_sync
+              address_offset: 0x8
+          - - field_name: gapsize
+              address_offset: 0xc
+          - - field_name: mem_low_adrs
+              address_offset: 0x10
+          - - field_name: mem_high_adrs
+              address_offset: 0x14
+          - - field_name: bsn_init
+              address_offset: 0x18
+              user_width: 64
+              radix: uint64
+
+      # MM port for mms_diag_block_gen.vhd
+      - mm_port_name: RAM_DIAG_BG
+        mm_port_type: RAM
+        mm_port_span: ceil_pow2( 2**g_buf_addr_w * ceil_div(g_buf_dat_w, c_word_w)) * MM_BUS_SIZE
+        mm_port_description: "Block gen buffer memory, contains the data patterns to be generated."
+        number_of_mm_ports: g_nof_streams
+        fields:
+          - - field_name: data
+              field_description: ""
+              number_of_fields: 2**g_buf_addr_w
+              address_offset: 0x0
+              user_width: g_buf_dat_w        
+
+  - peripheral_name: diag_tx_seq    # pi_diag_tx_seq.py
+    peripheral_description: "TX test sequence"
+    parameters:
+      # Parameters of mms_diag_tx_seq.vhd
+      - { name: g_nof_streams, value: 1 }
+      - { name: g_mm_broadcast, value: False }
+    mm_ports:
+      # MM port for mms_diag_tx_seq.vhd
+      - mm_port_name: REG_DIAG_TX_SEQ
+        mm_port_type: REG
+        mm_port_span: 4 * MM_BUS_SIZE
+        mm_port_description: "TX test sequence control."
+        number_of_mm_ports: sel_a_b(g_mm_broadcast, 1, g_nof_streams)
+        fields:
+          - - field_name: control
+              address_offset: 0x0
+              mm_width: 3
+          - - field_name: init
+              address_offset: 0x4
+          - - field_name: tx_cnt
+              address_offset: 0x8
+              access_mode: RO
+          - - field_name: modulo
+              address_offset: 0xc
+
+  - peripheral_name: diag_rx_seq    # pi_diag_rx_seq.py
+    peripheral_description: "RX test sequence"
+    parameters:
+      # Parameters of mms_diag_rx_seq.vhd
+      - { name: g_nof_streams, value: 1 }
+    mm_ports:
+      # MM port for mms_diag_rx_seq.vhd
+      - mm_port_name: REG_DIAG_RX_SEQ
+        mm_port_type: REG
+        mm_port_span: 8 * MM_BUS_SIZE
+        mm_port_description: "RX test sequence control."
+        number_of_mm_ports: g_nof_streams
+        fields:
+          - - field_name: control
+              address_offset: 0x0
+              mm_width: 2
+          - - field_name: result
+              address_offset: 0x4
+              access_mode: RO
+              mm_width: 2
+          - - field_name: rx_cnt
+              address_offset: 0x8
+              access_mode: RO
+          - - field_name: rx_sample
+              address_offset: 0xc
+              access_mode: RO
+          - - field_name: step_0
+              address_offset: 0x10
+          - - field_name: step_1
+              address_offset: 0x14
+          - - field_name: step_2
+              address_offset: 0x18
+          - - field_name: step_3
+              address_offset: 0x1c
+
+  
diff --git a/libraries/base/util/util.peripheral.yaml b/libraries/base/util/util.peripheral.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..82287d4419242d27790a9cc5a55f3d3639df047f
--- /dev/null
+++ b/libraries/base/util/util.peripheral.yaml
@@ -0,0 +1,23 @@
+schema_name: args
+schema_version: 1.0
+schema_type: peripheral
+
+hdl_library_name: util
+hdl_library_description: "Util Heater."
+
+peripherals:
+  - peripheral_name: heater    # pi_heater.py
+    peripheral_description: "Heater component, see util_heater.vhd"
+    mm_ports:
+      # MM port for util_heater.vhd
+      - mm_port_name: REG_HEATER
+        mm_port_type: REG
+        mm_port_span: 32 * MM_BUS_SIZE
+        mm_port_description: "Heater control."
+        fields:
+          - - field_name: enable
+              field_description: "Enable"
+              number_of_fields: 25
+              address_offset: 0x0
+
+
diff --git a/libraries/io/ddr/ddr.peripheral.yaml b/libraries/io/ddr/ddr.peripheral.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..779cc9e24106252fadd598ea973ff75024bb76cb
--- /dev/null
+++ b/libraries/io/ddr/ddr.peripheral.yaml
@@ -0,0 +1,41 @@
+schema_name: args
+schema_version: 1.0
+schema_type: peripheral
+
+hdl_library_name: ddr 
+hdl_library_description: "Double data rate memory"
+
+peripherals:
+  - peripheral_name: io_ddr    # pi_io_ddr.py
+    peripheral_description: "DDR controller"
+    mm_ports:
+      # MM port for io_ddr_reg.vhd
+      - mm_port_name: REG_IO_DDR
+        mm_port_type: REG
+        mm_port_span: 8 * MM_BUS_SIZE
+        mm_port_description: "DDR controller registers."
+        number_of_mm_ports: 1
+        fields:
+          - - field_name: burstbegin
+              address_offset: 0x0
+              access_mode: WO
+              mm_width: 1
+          - - field_name: wr_not_rd
+              address_offset: 0x4
+              access_mode: WO
+              mm_width: 1
+          - - field_name: done 
+              address_offset: 0x8
+              access_mode: RO
+              mm_width: 1
+          - - field_name: address
+              address_offset: 0x14
+              access_mode: WO
+          - - field_name: burstsize
+              address_offset: 0x18
+              access_mode: WO
+          - - field_name: flush
+              address_offset: 0x1c
+              mm_width: 1
+
+  
diff --git a/libraries/io/tr_10GbE/tr_10GbE.peripheral.yaml b/libraries/io/tr_10GbE/tr_10GbE.peripheral.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..7615739f1d20fd13b1bfff5cb982e1eaae8ffcac
--- /dev/null
+++ b/libraries/io/tr_10GbE/tr_10GbE.peripheral.yaml
@@ -0,0 +1,179 @@
+schema_name: args
+schema_version: 1.0
+schema_type: peripheral
+
+hdl_library_name: tr_10GbE
+hdl_library_description: "Network peripherals for 10GbE."
+
+peripherals:
+  - peripheral_name: tr_10GbE_unb2legacy    # pi_nw_10GbE_unb2legacy.py / pi_tr_10GbE.py / pi_tr_10GbE_unb2.py
+    peripheral_description: |
+      "M&C of Intel Low Latency (LL) 10GbE MAC control status register (CSR) see [1]
+
+       The LL 10GbE MAC is used with the legacy address map option of the old 10GbE MAC, see [2], this implies:
+       . Some registers have a different address offset in [1] and [2]
+       . The 36 bit registers are stored at word 0 = [31:0] and word 1 = [3:0] = [35:32] in [1], but in [2]
+         they are stored with their 4 most significant bits first and their 32 least significant bits last, so
+         with word 0 = [3:0] = [35:32] and word 1 = [31:0].
+       Here the address map and 36 bit word order from [2] are used.
+
+       [1] LL 10GbE MAC, https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/ug/ug_32b_10g_ethernet_mac.pdf
+       [2] Legacy 10GbE MAC, https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/ug/10gbps_mac.pdf
+      "
+    parameters:
+      # Parameters of nw_10GbE.vhd / tr_10GbE.vhd
+      - { name: g_nof_macs, value: 1 }
+    mm_ports:
+      # MM port for reg_mac_mosi = mac_mosi in ip_arria10_e1sg_eth_10g.vhd
+      # Use tr_10GbE_word_to_byte_address.py to derive the byte addresses from the word addresses
+      - mm_port_name: REG_TR_10GBE_MAC
+        mm_port_type: REG
+        mm_port_description: "MAC registers"
+        number_of_mm_ports: g_nof_macs
+        fields:
+          - - {field_name: rx_transfer_control,                     mm_width:  1,                                                     access_mode: RW, address_offset: 0x0000 }  # = 0x0000
+          - - {field_name: rx_transfer_status,                      mm_width:  1,                                                     access_mode: RO, address_offset: 0x0004 }  # = 0x0001
+          - - {field_name: rx_padcrc_control,                       mm_width:  2,                                                     access_mode: RW, address_offset: 0x0100 }  # = 0x0040
+          - - {field_name: rx_crccheck_control,                     mm_width:  2,                                                     access_mode: RW, address_offset: 0x0200 }  # = 0x0080
+          - - {field_name: rx_pktovrflow_error,                     mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x0300 }  # = 0x00C0
+          - - {field_name: rx_pktovrflow_etherStatsDropEvents,      mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x0308 }  # = 0x00C2
+          - - {field_name: rx_lane_decoder_preamble_control,        mm_width:  1,                                                     access_mode: RW, address_offset: 0x0400 }  # = 0x0100
+          - - {field_name: rx_preamble_inserter_control,            mm_width:  1,                                                     access_mode: RW, address_offset: 0x0500 }  # = 0x0140
+          - - {field_name: rx_frame_control,                        mm_width: 20,                                                     access_mode: RW, address_offset: 0x2000 }  # = 0x0800
+          - - {field_name: rx_frame_maxlength,                      mm_width: 16,                                                     access_mode: RW, address_offset: 0x2004 }  # = 0x0801
+          - - {field_name: rx_frame_addr0,                          mm_width: 16,                                                     access_mode: RW, address_offset: 0x2008 }  # = 0x0802
+          - - {field_name: rx_frame_addr1,                          mm_width: 16,                                                     access_mode: RW, address_offset: 0x200c }  # = 0x0803
+          - - {field_name: rx_frame_spaddr0_0,                      mm_width: 16,                                                     access_mode: RW, address_offset: 0x2010 }  # = 0x0804
+          - - {field_name: rx_frame_spaddr0_1,                      mm_width: 16,                                                     access_mode: RW, address_offset: 0x2014 }  # = 0x0805
+          - - {field_name: rx_frame_spaddr1_0,                      mm_width: 16,                                                     access_mode: RW, address_offset: 0x2018 }  # = 0x0806
+          - - {field_name: rx_frame_spaddr1_1,                      mm_width: 16,                                                     access_mode: RW, address_offset: 0x201c }  # = 0x0807
+          - - {field_name: rx_frame_spaddr2_0,                      mm_width: 16,                                                     access_mode: RW, address_offset: 0x2020 }  # = 0x0808
+          - - {field_name: rx_frame_spaddr2_1,                      mm_width: 16,                                                     access_mode: RW, address_offset: 0x2024 }  # = 0x0809
+          - - {field_name: rx_frame_spaddr3_0,                      mm_width: 16,                                                     access_mode: RW, address_offset: 0x2028 }  # = 0x080A
+          - - {field_name: rx_frame_spaddr3_1,                      mm_width: 16,                                                     access_mode: RW, address_offset: 0x202c }  # = 0x080B
+          - - {field_name: rx_pfc_control,                          mm_width: 17,                                                     access_mode: RW, address_offset: 0x2060 }  # = 0x0818
+          - - {field_name: tx_transfer_control,                     mm_width:  1,                                                     access_mode: RW, address_offset: 0x4000 }  # = 0x1000
+          - - {field_name: tx_transfer_status,                      mm_width:  1,                                                     access_mode: RO, address_offset: 0x4004 }  # = 0x1001
+          - - {field_name: tx_padins_control,                       mm_width:  1,                                                     access_mode: RW, address_offset: 0x4100 }  # = 0x1040
+          - - {field_name: tx_crcins_control,                       mm_width:  2,                                                     access_mode: RW, address_offset: 0x4200 }  # = 0x1080
+          - - {field_name: tx_pktunderflow_error,                   mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x4300 }  # = 0x10C0
+          - - {field_name: tx_preamble_control,                     mm_width:  1,                                                     access_mode: RW, address_offset: 0x4400 }  # = 0x1100
+          - - {field_name: tx_pauseframe_control,                   mm_width:  2,                                                     access_mode: RW, address_offset: 0x4500 }  # = 0x1140
+          - - {field_name: tx_pauseframe_quanta,                    mm_width: 16,                                                     access_mode: RW, address_offset: 0x4504 }  # = 0x1141
+          - - {field_name: tx_pauseframe_enable,                    mm_width:  1,                                                     access_mode: RW, address_offset: 0x4508 }  # = 0x1142
+          # Altera is unclear about the width of the quanta registers. Assuming 32 bits, where bits 16:31 are reserved:
+          - - {field_name: pfc_pause_quanta_0,                      mm_width: 32,                                                     access_mode: RW, address_offset: 0x4600 }  # = 0x1180
+          - - {field_name: pfc_pause_quanta_1,                      mm_width: 32,                                                     access_mode: RW, address_offset: 0x4604 }  # = 0x1181
+          - - {field_name: pfc_pause_quanta_2,                      mm_width: 32,                                                     access_mode: RW, address_offset: 0x4608 }  # = 0x1182
+          - - {field_name: pfc_pause_quanta_3,                      mm_width: 32,                                                     access_mode: RW, address_offset: 0x460c }  # = 0x1183
+          - - {field_name: pfc_pause_quanta_4,                      mm_width: 32,                                                     access_mode: RW, address_offset: 0x4610 }  # = 0x1184
+          - - {field_name: pfc_pause_quanta_5,                      mm_width: 32,                                                     access_mode: RW, address_offset: 0x4614 }  # = 0x1185
+          - - {field_name: pfc_pause_quanta_6,                      mm_width: 32,                                                     access_mode: RW, address_offset: 0x4618 }  # = 0x1186
+          - - {field_name: pfc_pause_quanta_7,                      mm_width: 32,                                                     access_mode: RW, address_offset: 0x461c }  # = 0x1187
+          - - {field_name: pfc_holdoff_quanta_0,                    mm_width: 32,                                                     access_mode: RW, address_offset: 0x4640 }  # = 0x1190
+          - - {field_name: pfc_holdoff_quanta_1,                    mm_width: 32,                                                     access_mode: RW, address_offset: 0x4644 }  # = 0x1191
+          - - {field_name: pfc_holdoff_quanta_2,                    mm_width: 32,                                                     access_mode: RW, address_offset: 0x4648 }  # = 0x1192
+          - - {field_name: pfc_holdoff_quanta_3,                    mm_width: 32,                                                     access_mode: RW, address_offset: 0x464c }  # = 0x1193
+          - - {field_name: pfc_holdoff_quanta_4,                    mm_width: 32,                                                     access_mode: RW, address_offset: 0x4650 }  # = 0x1194
+          - - {field_name: pfc_holdoff_quanta_5,                    mm_width: 32,                                                     access_mode: RW, address_offset: 0x4654 }  # = 0x1195
+          - - {field_name: pfc_holdoff_quanta_6,                    mm_width: 32,                                                     access_mode: RW, address_offset: 0x4658 }  # = 0x1196
+          - - {field_name: pfc_holdoff_quanta_7,                    mm_width: 32,                                                     access_mode: RW, address_offset: 0x465c }  # = 0x1197
+          - - {field_name: tx_pfc_priority_enable,                  mm_width:  8,                                                     access_mode: RW, address_offset: 0x4680 }  # = 0x11A0
+          - - {field_name: tx_addrins_control,                      mm_width:  1,                                                     access_mode: RW, address_offset: 0x4800 }  # = 0x1200
+          - - {field_name: tx_addrins_macaddr0,                     mm_width: 32,                                                     access_mode: RW, address_offset: 0x4804 }  # = 0x1201
+          - - {field_name: tx_addrins_macaddr1,                     mm_width: 16,                                                     access_mode: RW, address_offset: 0x4808 }  # = 0x1202
+          - - {field_name: tx_frame_maxlength,                      mm_width: 16,                                                     access_mode: RW, address_offset: 0x6004 }  # = 0x1801
+          - - {field_name: rx_stats_clr,                            mm_width:  1,                                                     access_mode: RW, address_offset: 0x3000 }  # = 0x0C00
+          - - {field_name: tx_stats_clr,                            mm_width:  1,                                                     access_mode: RW, address_offset: 0x7000 }  # = 0x1C00
+          - - {field_name: rx_stats_framesOK,                       mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x3008 }  # = 0x0C02
+          - - {field_name: tx_stats_framesOK,                       mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x7008 }  # = 0x1C02
+          - - {field_name: rx_stats_framesErr,                      mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x3010 }  # = 0x0C04
+          - - {field_name: tx_stats_framesErr,                      mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x7010 }  # = 0x1C04
+          - - {field_name: rx_stats_framesCRCErr,                   mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x3018 }  # = 0x0C06
+          - - {field_name: tx_stats_framesCRCErr,                   mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x7018 }  # = 0x1C06
+          - - {field_name: rx_stats_octetsOK,                       mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x3020 }  # = 0x0C08
+          - - {field_name: tx_stats_octetsOK,                       mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x7020 }  # = 0x1C08
+          - - {field_name: rx_stats_pauseMACCtrl_Frames,            mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x3028 }  # = 0x0C0A
+          - - {field_name: tx_stats_pauseMACCtrl_Frames,            mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x7028 }  # = 0x1C0A
+          - - {field_name: rx_stats_ifErrors,                       mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x3030 }  # = 0x0C0C
+          - - {field_name: tx_stats_ifErrors,                       mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x7030 }  # = 0x1C0C
+          - - {field_name: rx_stats_unicast_FramesOK,               mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x3038 }  # = 0x0C0E
+          - - {field_name: tx_stats_unicast_FramesOK,               mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x7038 }  # = 0x1C0E
+          - - {field_name: rx_stats_unicast_FramesErr,              mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x3040 }  # = 0x0C10
+          - - {field_name: tx_stats_unicast_FramesErr,              mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x7040 }  # = 0x1C10
+          - - {field_name: rx_stats_multicastFramesOK,              mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x3048 }  # = 0x0C12
+          - - {field_name: tx_stats_multicastFramesOK,              mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x7048 }  # = 0x1C12
+          - - {field_name: rx_stats_multicast_FramesErr,            mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x3050 }  # = 0x0C14
+          - - {field_name: tx_stats_multicast_FramesErr,            mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x7050 }  # = 0x1C14
+          - - {field_name: rx_stats_broadcastFramesOK,              mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x3058 }  # = 0x0C16
+          - - {field_name: tx_stats_broadcastFramesOK,              mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x7058 }  # = 0x1C16
+          - - {field_name: rx_stats_broadcast_FramesErr,            mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x3060 }  # = 0x0C18
+          - - {field_name: tx_stats_broadcast_FramesErr,            mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x7060 }  # = 0x1C18
+          - - {field_name: rx_stats_etherStatsOctets,               mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x3068 }  # = 0x0C1A
+          - - {field_name: tx_stats_etherStatsOctets,               mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x7068 }  # = 0x1C1A
+          - - {field_name: rx_stats_etherStatsPkts,                 mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x3070 }  # = 0x0C1C
+          - - {field_name: tx_stats_etherStatsPkts,                 mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x7070 }  # = 0x1C1C
+          - - {field_name: rx_stats_etherStats_UndersizePkts,       mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x3078 }  # = 0x0C1E
+          - - {field_name: tx_stats_etherStats_UndersizePkts,       mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x7078 }  # = 0x1C1E
+          - - {field_name: rx_stats_etherStats_OversizePkts,        mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x3080 }  # = 0x0C20
+          - - {field_name: tx_stats_etherStats_OversizePkts,        mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x7080 }  # = 0x1C20
+          - - {field_name: rx_stats_etherStats_Pkts64Octets,        mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x3088 }  # = 0x0C22
+          - - {field_name: tx_stats_etherStats_Pkts64Octets,        mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x7088 }  # = 0x1C22
+          - - {field_name: rx_stats_etherStats_Pkts65to127Octets,   mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x3090 }  # = 0x0C24
+          - - {field_name: tx_stats_etherStats_Pkts65to127Octets,   mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x7090 }  # = 0x1C24
+          - - {field_name: rx_stats_etherStats_Pkts128to255Octets,  mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x3098 }  # = 0x0C26
+          - - {field_name: tx_stats_etherStats_Pkts128to255Octets,  mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x7098 }  # = 0x1C26
+          - - {field_name: rx_stats_etherStats_Pkts256to511Octets,  mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x30a0 }  # = 0x0C28
+          - - {field_name: tx_stats_etherStats_Pkts256to511Octets,  mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x70a0 }  # = 0x1C28
+          - - {field_name: rx_stats_etherStats_Pkts512to1023Octets, mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x30a8 }  # = 0x0C2A
+          - - {field_name: tx_stats_etherStats_Pkts512to1023Octets, mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x70a8 }  # = 0x1C2A
+          - - {field_name: rx_stats_etherStat_Pkts1024to1518Octets, mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x30b0 }  # = 0x0C2C
+          - - {field_name: tx_stats_etherStat_Pkts1024to1518Octets, mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x70b0 }  # = 0x1C2C
+          - - {field_name: rx_stats_etherStats_Pkts1519toXOctets,   mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x30b8 }  # = 0x0C2E
+          - - {field_name: tx_stats_etherStats_Pkts1519toXOctets,   mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x70b8 }  # = 0x1C2E
+          - - {field_name: rx_stats_etherStats_Fragments,           mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x30c0 }  # = 0x0C30
+          - - {field_name: tx_stats_etherStats_Fragments,           mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x70c0 }  # = 0x1C30
+          - - {field_name: rx_stats_etherStats_Jabbers,             mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x30c8 }  # = 0x0C32
+          - - {field_name: tx_stats_etherStats_Jabbers,             mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x70c8 }  # = 0x1C32
+          - - {field_name: rx_stats_etherStatsCRCErr,               mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x30d0 }  # = 0x0C34
+          - - {field_name: tx_stats_etherStatsCRCErr,               mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x70d0 }  # = 0x1C34
+          - - {field_name: rx_stats_unicastMACCtrlFrames,           mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x30d8 }  # = 0x0C36
+          - - {field_name: tx_stats_unicastMACCtrlFrames,           mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x70d8 }  # = 0x1C36
+          - - {field_name: rx_stats_multicastMAC_CtrlFrames,        mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x30e0 }  # = 0x0C38
+          - - {field_name: tx_stats_multicastMAC_CtrlFrames,        mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x70e0 }  # = 0x1C38
+          - - {field_name: rx_stats_broadcastMAC_CtrlFrames,        mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x30e8 }  # = 0x0C3A
+          - - {field_name: tx_stats_broadcastMAC_CtrlFrames,        mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x70e8 }  # = 0x1C3A
+          - - {field_name: rx_stats_PFCMACCtrlFrames,               mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x30f0 }  # = 0x0C3C
+          - - {field_name: tx_stats_PFCMACCtrlFrames,               mm_width: 32, user_width: 36, user_word_order: be, radix: uint64, access_mode: RO, address_offset: 0x70f0 }  # = 0x1C3C
+
+
+  - peripheral_name: tr_10GbE_eth10g    # pi_nw_10GbE_eth10g.py / pi_10GbE.py
+    peripheral_description: "10GbE link status register"
+    parameters:
+      # Parameters of nw_10GbE.vhd / tr_10GbE.vhd
+      - { name: g_nof_macs, value: 1 }
+    mm_ports:
+      # MM port for reg_eth10g_mosi in ip_arria10_e1sg_eth_10g.vhd / common_reg_r_w_dc.vhd
+      - mm_port_name: REG_TR_10GBE_ETH10G
+        mm_port_type: REG
+        mm_port_description: ""
+        number_of_mm_ports: g_nof_macs
+        fields:
+          - - field_name: tx_snk_out_xon
+              field_description: ""
+              address_offset: 0x0
+              mm_width: 1
+              bit_offset: 0
+              access_mode: RO
+          - - field_name: xgmii_tx_ready
+              field_description: ""
+              address_offset: 0x0
+              mm_width: 1
+              bit_offset: 1
+              access_mode: RO
+          - - field_name: xgmii_link_status
+              field_description: ""
+              address_offset: 0x0
+              mm_width: 2
+              bit_offset: 2
+              access_mode: RO