From 18cf247d22838ccb1ff9cf2d81fc35550a107409 Mon Sep 17 00:00:00 2001
From: Eric Kooistra <kooistra@astron.nl>
Date: Fri, 12 Mar 2021 07:51:20 +0100
Subject: [PATCH] Added fpga.yaml for BF and first peripheral for reorder
 library.

---
 .../lofar2_unb2b_beamformer.fpga.yaml         | 182 ++++++++++++++++++
 .../base/reorder/reorder.peripheral.yaml      |  33 ++++
 2 files changed, 215 insertions(+)
 create mode 100644 applications/lofar2/designs/lofar2_unb2b_beamformer/lofar2_unb2b_beamformer.fpga.yaml
 create mode 100644 libraries/base/reorder/reorder.peripheral.yaml

diff --git a/applications/lofar2/designs/lofar2_unb2b_beamformer/lofar2_unb2b_beamformer.fpga.yaml b/applications/lofar2/designs/lofar2_unb2b_beamformer/lofar2_unb2b_beamformer.fpga.yaml
new file mode 100644
index 0000000000..e57cc831f2
--- /dev/null
+++ b/applications/lofar2/designs/lofar2_unb2b_beamformer/lofar2_unb2b_beamformer.fpga.yaml
@@ -0,0 +1,182 @@
+schema_name   : args
+schema_version: 1.0
+schema_type   : fpga
+
+hdl_library_name: lofar2_unb2b_beamformer
+fpga_name       : lofar2_unb2b_beamformer
+fpga_description: "FPGA design lofar2_unb2b_beamformer"
+
+peripherals:
+  #############################################################################
+  # Factory / minimal (see ctrl_unb2b_board.vhd)
+  #############################################################################
+  - peripheral_name: unb2b_board/system_info
+    slave_port_names:
+      - ROM_SYSTEM_INFO
+      - PIO_SYSTEM_INFO
+    lock_base_address: 0x10000
+
+  - peripheral_name: unb2b_board/wdi
+    slave_port_names:
+      - PIO_WDI
+
+  - peripheral_name: unb2b_board/unb2_fpga_sens
+    slave_port_names:
+      - REG_FPGA_TEMP_SENS
+      - REG_FPGA_VOLTAGE_SENS
+    
+  - peripheral_name: unb2b_board/ram_scrap
+    slave_port_names:
+      - RAM_SCRAP
+      
+  - peripheral_name: eth/eth
+    slave_port_names:
+      - AVS_ETH_0_TSE
+      - AVS_ETH_0_REG
+      - AVS_ETH_0_RAM
+      
+  - peripheral_name: ppsh/ppsh
+    slave_port_names:
+      - PIO_PPS
+      
+  - peripheral_name: epcs/epcs
+    slave_port_names:
+      - REG_EPCS
+      
+  - peripheral_name: dp/dpmm
+    slave_port_names:
+      - REG_DPMM_CTRL
+      - REG_DPMM_DATA
+      
+  - peripheral_name: dp/mmdp
+    slave_port_names:
+      - REG_MMDP_CTRL
+      - REG_MMDP_DATA
+      
+  - peripheral_name: remu/remu
+    slave_port_names:
+      - REG_REMU
+ 
+  #############################################################################
+  # AIT = ADC Input and Timing (see node_adc_input_and_timing.vhd)
+  #############################################################################
+  
+  - peripheral_name: tech_jesd204b/jesd_ctrl
+    slave_port_names:
+      - PIO_JESD_CTRL
+      
+  - peripheral_name: tech_jesd204b/jesd204b_arria10
+    slave_port_names:
+      - JESD204B
+  
+  - peripheral_name: dp/dp_shiftram
+    parameter_overrides:
+      - { name: g_nof_streams, value: 12 }  # = S_pn
+      - { name: g_nof_words, value: 4096 }
+      - { name: g_data_w, value: 16 }
+    slave_port_names:
+      - REG_DP_SHIFTRAM
+
+  - peripheral_name: dp/dp_bsn_source
+    parameter_overrides:
+      - { name: g_nof_block_per_sync, value: 195313 }  # 390625 = 2 * 195312, to have integer number of blocks in 2 s sync interval
+    slave_port_names:
+      - REG_BSN_SOURCE
+      
+  # TODO: Use REG_BSN_SOURCE_V2 instead of REG_BSN_SOURCE
+  #peripheral_name: dp/dp_bsn_source_v2
+  #parameter_overrides:
+  #  - { name: g_nof_clk_per_sync, value: 200000000 }  # = f_adc
+  #  - { name: g_block_size, value: 1024 }       # = N_fft
+  #  - { name: g_bsn_time_offset_w, value: 10 }  # note: g_bsn_time_offset_w = ceil_log2(g_block_size)
+  #slave_port_names:
+  #  - REG_BSN_SOURCE_V2
+      
+  - peripheral_name: dp/dp_bsn_scheduler
+    slave_port_names:
+      - REG_BSN_SCHEDULER
+  
+  - peripheral_name: dp/dp_bsn_monitor
+    peripheral_group: input
+    slave_port_names:
+      - REG_BSN_MONITOR_INPUT
+  
+  - peripheral_name: diag/diag_wg_wideband
+    parameter_overrides:
+      - { name: g_nof_streams, value: 12 }  # = S_pn
+    slave_port_names:
+      - REG_DIAG_WG
+      - RAM_DIAG_WG
+      
+  - peripheral_name: aduh/aduh_mon_dc_power
+    parameter_overrides:
+      - { name: g_nof_streams, value: 12 }  # = S_pn
+    slave_port_names:
+      - REG_ADUH_MON
+
+  # Commented RAM_ADUH_MON, because use RAM_DIAG_DATA_BUF_BSN instead
+  #- peripheral_name: aduh/aduh_mon_data_buffer
+  #  parameter_overrides:
+  #    - { name: g_nof_streams, value: 12 }  # = S_pn
+  #    - { name: g_symbol_w, value: 16 }
+  #    - { name: g_nof_symbols_per_data, value: 1 }
+  #    - { name: g_buffer_nof_symbols, value: 512 }
+  #    - { name: g_buffer_use_sync, value: true }
+  #  slave_port_names:
+  #    - RAM_ADUH_MON
+
+  - peripheral_name: diag/diag_data_buffer
+    peripheral_group: bsn
+    parameter_overrides:
+      - { name: g_nof_streams, value: 12 }  # = S_pn
+      - { name: g_data_w, value: 16 }
+      - { name: g_nof_data, value: 1024 }
+    slave_port_names:
+      - REG_DIAG_DATA_BUF_BSN
+      - RAM_DIAG_DATA_BUF_BSN
+  
+  #############################################################################
+  # Fsub = Subband Filterbank (from node_sdp_filterbank.vhd)
+  #############################################################################
+  
+  - peripheral_name: si/si
+    slave_port_names:
+      - REG_SI
+      
+  - peripheral_name: filter/fil_ppf_w
+    parameter_overrides:
+      - { name: g_wb_factor, value: 1 }
+      - { name: g_nof_taps, value: 16 }  # = N_taps
+      - { name: g_nof_bands, value: 1024 }  # = N_fft
+      - { name: g_coef_dat_w, value: 16 }  # = W_fir_coef
+    slave_port_names:
+      - RAM_FIL_COEFS
+      
+  - peripheral_name: sdp/sdp_subband_equalizer
+    slave_port_names:
+      - RAM_EQUALIZER_GAINS
+      
+  - peripheral_name: dp/dp_selector
+    slave_port_names:
+      - REG_DP_SELECTOR   # input_select = 0 for weighted subbands, input_select = 1 for raw subbands
+      
+  - peripheral_name: st/st_sst_for_sdp
+    slave_port_names:
+      - RAM_ST_SST
+      
+      
+  #############################################################################
+  # BF = Beamformer (from node_sdp_beamformer.vhd)
+  #############################################################################
+  
+  - peripheral_name: sdp/sdp_info
+    slave_port_names:
+      - REG_SDP_INFO
+      
+  - peripheral_name: reorder/reorder_col_wide
+    parameter_overrides:
+      - { name: g_wb_factor, value: 12 }  # N_beamsets * P_pfb
+      - { name: g_nof_ch_in, value: 1024 }  # = N_sub * Q_fft
+      - { name: g_nof_ch_sel, value: 976 }  # = S_sub_bf * Q_fft
+    slave_port_names:
+      - RAM_SS_SS_WIDE
diff --git a/libraries/base/reorder/reorder.peripheral.yaml b/libraries/base/reorder/reorder.peripheral.yaml
new file mode 100644
index 0000000000..5281f2590d
--- /dev/null
+++ b/libraries/base/reorder/reorder.peripheral.yaml
@@ -0,0 +1,33 @@
+schema_name: args
+schema_version: 1.0
+schema_type: peripheral
+
+hdl_library_name: reorder
+hdl_library_description: "Reorder data within and between data streams."
+
+peripherals:
+  - peripheral_name: reorder_col_wide    # pi_ss_ss_wide.py
+    peripheral_description: |
+      "Reorder the data serially per stream.
+       Each block of g_nof_ch_in input data gets stored, and then a block of g_nof_ch_sel
+       selected data is passed on. The index fields specify the order and the index of
+       the input data that is passed on.
+       There are g_wb_factor parallel data streams. All data streams can be reordered
+       independently."
+    parameters:
+      # Parameters of reorder_col_wide.vhd / reorder_col.vhd
+      - { name: g_wb_factor, value: 1 }
+      - { name: g_nof_ch_in, value: 256 }
+      - { name: g_nof_ch_sel, value: 192 }  # g_nof_ch_sel < g_nof_ch_in
+    slave_ports:                            
+      # MM port for reorder_col_wide.vhd / reorder_col.vhd
+      - slave_name: RAM_SS_SS_WIDE
+        slave_description: ""
+        slave_type: RAM
+        number_of_slaves: g_wb_factor
+        fields:
+          - - field_name: index
+              field_description: ""
+              width: ceil_log2(g_nof_ch_in)
+              address_offset: 0x0
+              number_of_fields: g_nof_ch_sel
-- 
GitLab