diff --git a/libraries/dsp/st/st.peripheral.yaml b/libraries/dsp/st/st.peripheral.yaml index 23b11ddf8086194ade628fc1ec8e98d84e14d0b3..805b806ab85e5b5e6d6798883148f55d1d553814 100644 --- a/libraries/dsp/st/st.peripheral.yaml +++ b/libraries/dsp/st/st.peripheral.yaml @@ -34,7 +34,7 @@ peripherals: fields: - - field_name: power field_description: "" - number_of_fields: g_nof_stat * g_stat_data_sz + number_of_fields: g_nof_stat address_offset: 0x0 mm_width: 32 user_width: g_stat_data_w @@ -46,7 +46,7 @@ peripherals: "Accumulate the subband auto power values during a sync interval for the subband statistics (SST) in LOFAR2.0 SDP" parameters: # Parameters of pi_st_sst.py, fixed in node_sdp_filterbank.vhd / sdp_pkg.vhd - - { name: g_nof_instances, value: 6 } + - { name: g_nof_instances, value: 6 } # c_sdp_P_pfb = 6 # Parameters of st_sst.vhd, fixed in node_sdp_filterbank.vhd / sdp_pkg.vhd - { name: g_nof_stat, value: 1024 } # nof accumulators: N_sub * Q_fft = 512 * 2 = 1024 - { name: g_stat_data_w, value: 54 } # statistics accumulator user_width in bits: W_statistic = 64 @@ -67,7 +67,7 @@ peripherals: fields: - - field_name: power field_description: "" - number_of_fields: g_nof_stat * g_stat_data_sz + number_of_fields: g_nof_stat address_offset: 0x0 mm_width: 32 user_width: g_stat_data_w @@ -79,7 +79,7 @@ peripherals: "Accumulate the beamlet auto power values during a sync interval for the beamlet statistics (BST) in LOFAR2.0 SDP" parameters: # Parameters of pi_st_bst.py, fixed in node_sdp_beamformer.vhd / sdp_pkg.vhd - - { name: g_nof_instances, value: 6 } + - { name: g_nof_instances, value: 1 } # Parameters of st_sst.vhd, fixed in node_sdp_filterbank.vhd / sdp_pkg.vhd - { name: g_nof_stat, value: 976 } # nof accumulators: S_sub_bf * N_pol_bf = 488 * 2 = 976 - { name: g_stat_data_w, value: 54 } # statistics accumulator user_width in bits: W_statistic = 64 @@ -95,11 +95,11 @@ peripherals: (uint64)BST[g_nof_stat] = (uint64)BST[S_sub_bf][N_pol_bf] where N_pol_bf = 2 and S_sub_bf = 488 are defined in sdp_pkg.vhd." - number_of_mm_ports: 1 + number_of_mm_ports: g_nof_instances fields: - - field_name: power field_description: "" - number_of_fields: g_nof_stat * g_stat_data_sz + number_of_fields: g_nof_stat address_offset: 0x0 mm_width: 32 user_width: g_stat_data_w @@ -112,27 +112,50 @@ peripherals: parameters: # Parameters of pi_st_xst.py, fixed in node_sdp_correlator.vhd / sdp_pkg.vhd - { name: g_nof_streams, value: 9 } # P_sq - # Parameters of st_xst.vhd, fixed in node_sdp_correlator.vhd / sdp_pkg.vhd + # Parameters of st_xst.vhd, st_xsq_arr.vhd fixed in node_sdp_correlator.vhd / sdp_pkg.vhd - { name: g_nof_crosslets, value: 1 } # N_crosslets - { name: g_nof_signal_inputs, value: 12 } # S_pn = 12 - { name: g_in_data_w, value: 16 } # W_crosslet = 16 - { name: g_stat_data_w, value: 64 } # W_statistic = 64 - { name: g_stat_data_sz, value: 2 } # W_statistic_sz = 2 mm_ports: - # MM port for st_sst.vhd + # MM port for st_xst.vhd - mm_port_name: RAM_ST_XSQ mm_port_type: RAM + # from sdp_pkg.vhd: + # . c_sdp_ram_st_xsq_addr_w = ceil_log2(P_sq) + ceil_log2(N_crosslets * X_sq * c_nof_complex * (c_longword_sz/c_word_sz) + # . c_sdp_X_sq = S_pn**2 = g_nof_signal_inputs**2 + mm_port_span: ceil_pow2(g_nof_streams) + ceil_pow2(g_nof_crosslets * g_nof_signal_inputs**2 * c_nof_complex * g_stat_data_sz) * MM_BUS_SIZE mm_port_description: | - "The crosslets statistics per PN are stored in 1 block of - g_nof_crosslets * g_nof_signal_inputs**2 * c_nof_complex * g_stat_data_sz = 1 * 12 * 12 * 2 * 2 = 576 values as: + "The crosslets statistics per PN are stored in g_nof_streams blocks + of each nof_stat values per block (= per X_sq correlator cell). The + N_crosslets are stored tightly in series per block: + + nof_stat = g_nof_crosslets * g_nof_signal_inputs**2 + # g_nof_crosslets = 1: + = 1 * 12 * 12 = 144 complex values = number_of_fields + = c_nof_complex * 144 = 288 real values + = g_stat_data_sz * 288 = 576 MM words --> mm_port_span = 1024 + # g_nof_crosslets = 7: + = 7 * 12 * 12 = 1008 complex values = number_of_fields + = c_nof_complex * 1008 = 2016 real values + = g_stat_data_sz * 2016 = 4032 MM words --> mm_port_span = 4096 + + in this format: + + (cint64)XST[] = XST[crosslets][in A][in B][N_complex][g_stat_data_sz] - (cint64)XST[] = (cint64)XST[crosslets][in A][in B][complex][word]" + In total there are g_nof_streams = P_sq parallel X_sq blocks in the MM + peripheral span: - number_of_mm_ports: 1 + mm_peripheral_span = ceil_pow2(g_nof_streams) * ceil_pow2(nof_stat MM words) + = 16 * 1024 = 16K = 0x4000 when N_crosslets = 1 + = 16 * 4096 = 64K = 0x10000 when N_crosslets = 7." + number_of_mm_ports: g_nof_streams fields: - - field_name: power field_description: "" - number_of_fields: 576 + number_of_fields: g_nof_crosslets * g_nof_signal_inputs**2 address_offset: 0x0 mm_width: 32 user_width: g_stat_data_w