diff --git a/applications/lofar2/libraries/sdp/sdp.peripheral.yaml b/applications/lofar2/libraries/sdp/sdp.peripheral.yaml index 67eef47dc7e3f47dbb1558b2b6cfac89b0c9593f..d4b798dea57721a7e72ffd009397235d6e6ae11b 100644 --- a/applications/lofar2/libraries/sdp/sdp.peripheral.yaml +++ b/applications/lofar2/libraries/sdp/sdp.peripheral.yaml @@ -12,6 +12,7 @@ peripherals: # MM port for sdp_info.vhd - mm_port_name: REG_SDP_INFO mm_port_type: REG + mm_port_span: 16 * MM_BUS_SIZE mm_port_description: | "The SDP info contains central SDP information. The station_id applies to the entire station. The other info fields apply per antenna band (low band or high band). An FPGA node only @@ -35,25 +36,28 @@ peripherals: peripheral_description: "SDP Subband equalizer coefficients." parameters: # Parameters of pi_sdp_subband_equalizer.py, fixed in sdp_subband_equalizer.vhd / sdp_pkg.vhd - - { name: g_nof_instances, value: 6 } # P_pfb = S_pn / Q_fft = 12 / 2 = 6 + - { name: P_pfb, value: 6 } # P_pfb = S_pn / Q_fft = 12 / 2 = 6 + - { name: Q_fft, value: 2 } + - { name: N_sub, value: 512 } mm_ports: # MM port for sdp_subband_equalizer.vhd - mm_port_name: RAM_EQUALIZER_GAINS mm_port_type: RAM + mm_port_span: ceil_pow2(Q_fft * N_sub) * MM_BUS_SIZE mm_port_description: | - "The subband weigths are stored in g_nof_instances = P_pfb = S_pn / Q_fft = 6 blocks of + "The subband weigths are stored in P_pfb = S_pn / Q_fft = 6 blocks of Q_fft * N_sub = 2 * 512 = 1024 complex coefficients as: (cint16)subband_weights[S_pn/Q_fft]_[Q_fft][N_sub] where S_pn = 12, Q_fft = 2 and N_sub = 512 are defined in sdp_pkg.vhd." - number_of_mm_ports: g_nof_instances + number_of_mm_ports: P_pfb fields: - - field_name: coef field_description: | "Complex coefficient to calibrate the gain and phase per subband. Packed as imaginary in high part, real in low part of mm_width = N_complex * W_sub_weight = 2 * 16 = 32 bit." - number_of_fields: 1024 # = Q_fft * N_sub = 2 signal inputs * 512 subbands + number_of_fields: Q_fft * N_sub # = 1024 = 2 signal inputs * 512 subbands address_offset: 0x0 mm_width: 32 # = N_complex * W_sub_weight radix: cint16_ir @@ -63,14 +67,17 @@ peripherals: peripheral_description: "SDP Beamformer weights (= beamlet weights)." parameters: # Parameters of pi_sdp_bf_weights.py, fixed in sdp_bf_weights.vhd / sdp_pkg.vhd - - { name: g_nof_instances, value: 12 } # = N_pol_bf * P_pfb - - { name: g_nof_gains, value: 976 } # = Q_fft * S_sub_bf + - { name: N_pol_bf, value: 2 } + - { name: P_pfb, value: 6 } # P_pfb = S_pn / Q_fft = 12 / 2 = 6 + - { name: Q_fft, value: 2 } + - { name: S_sub_bf, value: 488 } mm_ports: # MM port for sdp_beamformer_local.vhd / sdp_bf_weights.vhd / mms_dp_gain_serial_arr.vhd - mm_port_name: RAM_BF_WEIGHTS mm_port_type: RAM + mm_port_span: ceil_pow2(Q_fft * S_sub_bf) * MM_BUS_SIZE mm_port_description: | - "The beamlet weigths are stored in g_nof_instances = N_pol_bf * P_pfb = 2 * 6 = 12, where + "The beamlet weigths are stored in N_pol_bf * P_pfb = 2 * 6 = 12 instances, where P_pfb = S_pn / Q_fft = 6. Per instance there is a block of Q_fft * S_sub_bf = 2 * 488 = 976 complex BF weights. The N_pol_bf = 2 represents the two beamformer polarizations, to distinguish these from the N_pol = 2 antenna polarizations. The @@ -95,13 +102,13 @@ peripherals: when index of N_pol_bf and index of N_pol are the same. The cross-polarization BF weights (XY, YX) are set when index of N_pol_bf and index of N_pol are different. If no cross-polarization weighting is needed, then these weights can be kept 0." - number_of_mm_ports: g_nof_instances + number_of_mm_ports: N_pol_bf * P_pfb # = 12 = 2 beam polarizations * 6 complex PFB units fields: - - field_name: coef field_description: | "Complex weight per subband. Packed as imaginary in high part, real in low part of mm_width = N_complex * W_bf_weight = 2 * 16 = 32 bit." - number_of_fields: g_nof_gains + number_of_fields: Q_fft * S_sub_bf # = 976 = 2 signal inputs * 488 beamlets address_offset: 0x0 mm_width: 32 # = N_complex * W_bf_weight radix: cint16_ir @@ -117,6 +124,7 @@ peripherals: # MM port for node_sdp_beamformer.vhd / mms_dp_scale.vhd / mms_dp_gain.vhd / mms_dp_gain_arr.vhd - mm_port_name: REG_BF_SCALE mm_port_type: REG + mm_port_span: 2 * MM_BUS_SIZE mm_port_description: | "The beamlet scale function scales the beamlet sum with a real scale factor and then requantizes the result to beamlet data output with less bits. @@ -134,7 +142,7 @@ peripherals: number_of_fields: 1 address_offset: 0x0 mm_width: g_gain_w - #user_width: g_gain_w # EK TODO check parameter passing to user_width + #user_width: g_gain_w # EK TODO: check parameter passing to user_width radix: uint32 # scale factor is unsigned value resolution_w: 0 - g_lsb_w - - field_name: unused @@ -148,6 +156,7 @@ peripherals: # MM port for sdp_beamformer_output.vhd / dp_offload_tx_v3.vhd - mm_port_name: REG_DP_OFFLOAD_TX_HDR_DAT mm_port_type: REG + mm_port_span: 64 * MM_BUS_SIZE mm_port_description: | "The ETH/IP/UDP/application header fields for the beamlet data output offload UDP packets. @@ -223,6 +232,7 @@ peripherals: # MM port for sdp_statistics_offload.vhd / dp_offload_tx_v3.vhd - mm_port_name: REG_DP_OFFLOAD_TX_HDR_DAT mm_port_type: REG + mm_port_span: 64 * MM_BUS_SIZE mm_port_description: | "The ETH/IP/UDP/application header fields for the SST offload UDP packets. @@ -291,6 +301,7 @@ peripherals: # MM port for sdp_statistics_offload.vhd / dp_offload_tx_v3.vhd - mm_port_name: REG_DP_OFFLOAD_TX_HDR_DAT mm_port_type: REG + mm_port_span: 64 * MM_BUS_SIZE mm_port_description: | "The ETH/IP/UDP/application header fields for the BST offload UDP packets. @@ -359,6 +370,7 @@ peripherals: # MM port for sdp_statistics_offload.vhd / dp_offload_tx_v3.vhd - mm_port_name: REG_DP_OFFLOAD_TX_HDR_DAT mm_port_type: REG + mm_port_span: 64 * MM_BUS_SIZE mm_port_description: | "The ETH/IP/UDP/application header fields for the XST offload UDP packets. diff --git a/libraries/base/common/common.peripheral.yaml b/libraries/base/common/common.peripheral.yaml index 5d06bbdbda5d1d9331af904518ebbc63f6a51c9d..ea7a6033b7663732f36bca0048823bee4788c94c 100644 --- a/libraries/base/common/common.peripheral.yaml +++ b/libraries/base/common/common.peripheral.yaml @@ -17,6 +17,7 @@ peripherals: # MM port for mms_common_variable_delay.vhd / mms_common_reg.vhd - mm_port_name: REG_COMMON_VARIABLE_DELAY mm_port_type: REG + mm_port_span: 2 * MM_BUS_SIZE mm_port_description: "" fields: - - field_name: enable diff --git a/libraries/base/diag/diag.peripheral.yaml b/libraries/base/diag/diag.peripheral.yaml index 0e3102a02207679fa3ba64cd51414472bed9a298..8081e7e15c2f3168838d7ac8112d02f52d705ccb 100644 --- a/libraries/base/diag/diag.peripheral.yaml +++ b/libraries/base/diag/diag.peripheral.yaml @@ -15,7 +15,7 @@ peripherals: # MM port for diag_wg_wideband_reg.vhd - mm_port_name: REG_DIAG_WG mm_port_type: REG - mm_port_span: 16 + mm_port_span: 4 * MM_BUS_SIZE mm_port_description: "Waveform control." number_of_mm_ports: g_nof_streams fields: @@ -52,7 +52,7 @@ peripherals: # MM port for mms_diag_wg_wideband.vhd - mm_port_name: RAM_DIAG_WG mm_port_type: RAM - mm_port_span: 4096 + mm_port_span: 1024 * MM_BUS_SIZE mm_port_description: "Waveform buffer." number_of_mm_ports: g_nof_streams fields: @@ -74,6 +74,7 @@ peripherals: # MM port for mms_diag_data_buffer.vhd - mm_port_name: REG_DIAG_DB mm_port_type: REG + mm_port_span: 2 * MM_BUS_SIZE mm_port_description: "Data buffer status." number_of_mm_ports: g_nof_streams fields: @@ -88,6 +89,7 @@ peripherals: # MM port for mms_diag_data_buffer.vhd - mm_port_name: RAM_DIAG_DB mm_port_type: RAM + mm_port_span: ceil_pow2(g_nof_data * ceil_div(g_data_w, c_word_w)) * MM_BUS_SIZE mm_port_description: "Data buffer memory, gets filled after the sync when g_use_in_sync = True, else after the last word was read." number_of_mm_ports: g_nof_streams fields: diff --git a/libraries/base/dp/dp.peripheral.yaml b/libraries/base/dp/dp.peripheral.yaml index 7a8008c0e8addecda2dee9e1579f39f0fd09c9d6..fe7dacf6457d681bd0a7a90f0b4642790b4b3715 100644 --- a/libraries/base/dp/dp.peripheral.yaml +++ b/libraries/base/dp/dp.peripheral.yaml @@ -12,6 +12,7 @@ peripherals: # MM port for mms_dp_fifo_to_mm.vhd / dp_fifo_to_mm_reg.vhd - mm_port_name: REG_DPMM_CTRL mm_port_type: REG + mm_port_span: 2 * MM_BUS_SIZE mm_port_description: "DPMM = Monitor the DP to MM read FIFO." fields: - - field_name: rd_usedw @@ -21,6 +22,7 @@ peripherals: # MM port for mms_dp_fifo_to_mm.vhd / dp_fifo_to_mm.vhd - mm_port_name: REG_DPMM_DATA # Use REG_, instead of preferred FIFO_, to match mm_port_name in pi_dpmm.py mm_port_type: FIFO + mm_port_span: 2 * MM_BUS_SIZE mm_port_description: "DPMM = read word from the DP to MM read FIFO" fields: - - field_name: rd_data @@ -35,6 +37,7 @@ peripherals: # MM port for mms_dp_fifo_from_mm.vhd / dp_fifo_from_mm_reg.vhd - mm_port_name: REG_MMDP_CTRL mm_port_type: REG + mm_port_span: 2 * MM_BUS_SIZE mm_port_description: "MMDP = Monitor the MM to DP write FIFO." fields: - - field_name: wr_usedw @@ -49,6 +52,7 @@ peripherals: # MM port for mms_dp_fifo_from_mm.vhd / dp_fifo_from_mm.vhd - mm_port_name: REG_MMDP_DATA # Use REG_, instead of preferred FIFO_, to match mm_port_name in pi_mmdp.py mm_port_type: FIFO + mm_port_span: 2 * MM_BUS_SIZE mm_port_description: "MMDP = write word to the MM to DP write FIFO." fields: - - field_name: data @@ -67,6 +71,7 @@ peripherals: # MM port for mms_dp_xonoff.vhd - mm_port_name: REG_DP_XONOFF mm_port_type: REG + mm_port_span: 2 * MM_BUS_SIZE mm_port_description: "When g_combine_streams = False then there is one enable bit per stream, else there is one enable bit for all streams." fields: - - field_name: enable_stream @@ -90,6 +95,7 @@ peripherals: # MM port for dp_shiftram.vhd - mm_port_name: REG_DP_SHIFTRAM mm_port_type: REG + mm_port_span: 2 * MM_BUS_SIZE mm_port_description: "" number_of_mm_ports: g_nof_streams fields: @@ -109,6 +115,7 @@ peripherals: # MM port for dp_bsn_source_reg.vhd - mm_port_name: REG_DP_BSN_SOURCE mm_port_type: REG + mm_port_span: 4 * MM_BUS_SIZE mm_port_description: "" fields: - - field_name: dp_on @@ -148,6 +155,7 @@ peripherals: # MM port for dp_bsn_source_reg_v2.vhd - mm_port_name: REG_DP_BSN_SOURCE_V2 mm_port_type: REG + mm_port_span: 8 * MM_BUS_SIZE mm_port_description: "" fields: - - field_name: dp_on @@ -187,6 +195,7 @@ peripherals: # MM port for dp_bsn_scheduler_reg.vhd - mm_port_name: REG_DP_BSN_SCHEDULER mm_port_type: REG + mm_port_span: 2 * MM_BUS_SIZE mm_port_description: "" fields: - - field_name: scheduled_bsn @@ -206,6 +215,7 @@ peripherals: # MM port for dp_bsn_monitor_reg.vhd - mm_port_name: REG_DP_BSN_MONITOR mm_port_type: REG + mm_port_span: 16 * MM_BUS_SIZE mm_port_description: "" number_of_mm_ports: g_nof_streams fields: @@ -266,6 +276,7 @@ peripherals: # MM port for dp_bsn_monitor_reg_v2.vhd - mm_port_name: REG_DP_BSN_MONITOR_V2 mm_port_type: REG + mm_port_span: 8 * MM_BUS_SIZE mm_port_description: "" number_of_mm_ports: g_nof_streams fields: @@ -317,6 +328,7 @@ peripherals: # MM port for dp_selector_arr.vhd - mm_port_name: REG_DP_SELECTOR mm_port_type: REG + mm_port_span: 2 * MM_BUS_SIZE mm_port_description: "" fields: - - field_name: input_select diff --git a/libraries/base/reorder/reorder.peripheral.yaml b/libraries/base/reorder/reorder.peripheral.yaml index fa238d51081386f0d1330737dc6f921421944d0a..91a27205798b4d895550235c5a845f506b787a4c 100644 --- a/libraries/base/reorder/reorder.peripheral.yaml +++ b/libraries/base/reorder/reorder.peripheral.yaml @@ -23,6 +23,7 @@ peripherals: # MM port for reorder_col_wide.vhd / reorder_col.vhd - mm_port_name: RAM_SS_SS_WIDE mm_port_type: RAM + mm_port_span: ceil_pow2(g_nof_ch_sel) * MM_BUS_SIZE mm_port_description: "" number_of_mm_ports: g_wb_factor fields: diff --git a/libraries/dsp/filter/filter.peripheral.yaml b/libraries/dsp/filter/filter.peripheral.yaml index 0e13878acb86d6fbb3315e8cc5692b88869b4225..bbdc0db669179fa058da97b01eb622d63fc3d927 100644 --- a/libraries/dsp/filter/filter.peripheral.yaml +++ b/libraries/dsp/filter/filter.peripheral.yaml @@ -34,6 +34,7 @@ peripherals: # MM port for fil_ppf_wide.vhd / fil_ppf_single.vhd - mm_port_name: RAM_FIL_COEFS mm_port_type: RAM + mm_port_span: ceil_pow2(g_fil_ppf.nof_bands / g_fil_ppf.wb_factor) * MM_BUS_SIZE mm_port_description: | "The FIR filter coefficients are stored in blocks of g_fil_ppf.nof_bands/g_fil_ppf.wb_factor real coefficients: diff --git a/libraries/dsp/st/st.peripheral.yaml b/libraries/dsp/st/st.peripheral.yaml index 13bbf592e2000dc1d0336ff519d3f8050e8cdef1..d812b3ac307a4df560f42471719512de0907a2c2 100644 --- a/libraries/dsp/st/st.peripheral.yaml +++ b/libraries/dsp/st/st.peripheral.yaml @@ -23,6 +23,7 @@ peripherals: # MM port for st_sst.vhd - mm_port_name: RAM_ST_SST mm_port_type: RAM + mm_port_span: ceil_pow2(g_stat_data_sz * g_nof_stat) * MM_BUS_SIZE mm_port_description: | "The statistics are calculated for blocks of g_nof_stat time multiplexed data streams. There are g_nof_instances parallel time multiplexed data streams. @@ -54,6 +55,7 @@ peripherals: # MM port for st_sst.vhd - mm_port_name: RAM_ST_SST mm_port_type: RAM + mm_port_span: ceil_pow2(g_stat_data_sz * g_nof_stat) * MM_BUS_SIZE mm_port_description: | "The subband statistics per PN are stored in g_nof_instances = P_pfb = S_pn / Q_fft = 6 blocks of N_sub * Q_fft = 512 * 2 = 1024 real values as: @@ -86,6 +88,7 @@ peripherals: # MM port for st_sst.vhd - mm_port_name: RAM_ST_SST mm_port_type: RAM + mm_port_span: ceil_pow2(g_stat_data_sz * g_nof_stat) * MM_BUS_SIZE mm_port_description: | "The beamlet statistics per PN are stored in 1 block of S_sub_bf * N_pol_bf = 488 * 2 = 976 real values as: diff --git a/libraries/io/aduh/aduh.peripheral.yaml b/libraries/io/aduh/aduh.peripheral.yaml index 3d06ffa0e07ce48bc2b53c781bfb0f66629419f4..24f0150d78ddbba37e7aaa590eda209944691133 100644 --- a/libraries/io/aduh/aduh.peripheral.yaml +++ b/libraries/io/aduh/aduh.peripheral.yaml @@ -15,6 +15,7 @@ peripherals: # MM port for mms_aduh_monitor_arr.vhd / aduh_monitor_reg.vhd - mm_port_name: REG_ADUH_MON mm_port_type: REG + mm_port_span: 4 * MM_BUS_SIZE mm_port_description: "Sum of samples and sample powers during a sync interval." number_of_mm_ports: g_nof_streams fields: @@ -44,6 +45,7 @@ peripherals: # MM port for mms_aduh_monitor_arr.vhd - mm_port_name: RAM_ADUH_MON mm_port_type: RAM + mm_port_span: ceil_pow2(g_buffer_nof_symbols / g_nof_symbols_per_data) * MM_BUS_SIZE mm_port_description: "Data buffer memory, gets filled after the sync when g_buffer_use_sync = True, else after the last word was read." number_of_mm_ports: g_nof_streams fields: