diff --git a/applications/lofar2/images/images.txt b/applications/lofar2/images/images.txt index 7b31fb1838b3336f4db93d8d6031825a41a878d4..bad1d5352fff4084b933d82b756a78af8def09bf 100644 --- a/applications/lofar2/images/images.txt +++ b/applications/lofar2/images/images.txt @@ -11,5 +11,7 @@ lofar2_unb2b_sdp_station_xsub_one-r087d98be6 | 2021-06-14 | R vd Walle unb2b_minimal-rce6b96eed | 2021-08-26 | P. Donker | unb2b_minimal with new mmap, rbf maid with option --unb2_factory lofar2_unb2b_sdp_station_full-r9ff51058a | 2022-01-12 | R vd Walle | Old Lofar2 SDP station full design for UniBoard2b without ring. lofar2_unb2b_sdp_station_full-r2c3958e1f | 2022-04-29 | R vd Walle | Lofar2 SDP station full design for UniBoard2b. -lofar2_unb2b_sdp_station_full_wg-r70b28ffc3 | 2022-06-15 | R vd Walle | Lofar2 SDP station design without ADC inputs, only WG. Uses dp_clk + dp_pps instead of rx_clk + rx_sysref. -lofar2_unb2c_sdp_station_full-r70484fd08 | 2022-04-29 | R vd Walle | Lofar2 SDP station full design for UniBoard2c. +lofar2_unb2b_sdp_station_full_wg-r70b28ffc3 | 2022-06-15 | R vd Walle | Do not use, has beamlet/subband weight bug, delete when r01205cbe4 is OK. +lofar2_unb2b_sdp_station_full_wg-r01205cbe4 | 2022-07-14 | R vd Walle | Lofar2 SDP station design without ADC inputs, only WG. Uses dp_clk + dp_pps instead of rx_clk + rx_sysref. +lofar2_unb2c_sdp_station_full-r70484fd08 | 2022-04-29 | R vd Walle | Do not use, has beamlet/subband weight bug, delete when r01205cbe4 is OK. +lofar2_unb2c_sdp_station_full-r01205cbe4 | 2022-07-14 | R vd Walle | Lofar2 SDP station full design for UniBoard2c. diff --git a/applications/lofar2/images/lofar2_unb2b_sdp_station_full_wg-r01205cbe4.tar.gz b/applications/lofar2/images/lofar2_unb2b_sdp_station_full_wg-r01205cbe4.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..186b0cf9ea654534ab82ddd1ffd7c9e28e0ad5b4 Binary files /dev/null and b/applications/lofar2/images/lofar2_unb2b_sdp_station_full_wg-r01205cbe4.tar.gz differ diff --git a/applications/lofar2/images/lofar2_unb2c_sdp_station_full-r01205cbe4.tar.gz b/applications/lofar2/images/lofar2_unb2c_sdp_station_full-r01205cbe4.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..5fcf627d167aeb69ff14debbc11ae0d4e394a6ea Binary files /dev/null and b/applications/lofar2/images/lofar2_unb2c_sdp_station_full-r01205cbe4.tar.gz differ diff --git a/applications/lofar2/libraries/sdp/src/vhdl/node_sdp_correlator.vhd b/applications/lofar2/libraries/sdp/src/vhdl/node_sdp_correlator.vhd index ec8180f396e3c3a6837878b26792c6f01f29274b..43c17b7a7734a746960722a9ccb37fe0a608027f 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/node_sdp_correlator.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/node_sdp_correlator.vhd @@ -325,7 +325,7 @@ BEGIN g_use_mm_output => TRUE, g_rd_latency => 1, -- Required for st_xst -- for mms_dp_bsn_monitor_v2 - g_nof_clk_per_sync => c_sdp_N_clk_sync_timeout, -- Using c_sdp_N_clk_sync_timeout as g_nof_clk_per_sync is used for BSN monitor timeout. + g_nof_clk_per_sync => c_sdp_N_clk_sync_timeout_xsub, -- Using c_sdp_N_clk_sync_timeout_xsub as g_nof_clk_per_sync is used for BSN monitor timeout. g_nof_input_bsn_monitors => g_P_sq, g_use_bsn_output_monitor => TRUE ) @@ -436,10 +436,11 @@ BEGIN xst_udp_sosi <= mon_xst_udp_sosi_arr(0); u_sdp_xst_udp_offload: ENTITY work.sdp_statistics_offload GENERIC MAP ( - g_statistics_type => "XST", - g_offload_time => sel_a_b(g_sim, g_sim_sdp.offload_time, c_sdp_offload_time), - g_P_sq => g_P_sq, - g_crosslets_direction => 1 -- = lane direction + g_statistics_type => "XST", + g_offload_time => sel_a_b(g_sim, g_sim_sdp.offload_time, c_sdp_offload_time), + g_P_sq => g_P_sq, + g_crosslets_direction => 1, -- = lane direction + g_bsn_monitor_sync_timeout => c_sdp_N_clk_sync_timeout_xsub ) PORT MAP ( mm_clk => mm_clk, diff --git a/applications/lofar2/libraries/sdp/src/vhdl/sdp_bf_weights.vhd b/applications/lofar2/libraries/sdp/src/vhdl/sdp_bf_weights.vhd index 3dec6eb52968ae1f86598a42c32e9e7771852cf2..a32d05170126eac25662f7df361b93231825fd97 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/sdp_bf_weights.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/sdp_bf_weights.vhd @@ -120,7 +120,10 @@ BEGIN g_gain_w => c_sdp_W_bf_weight, g_in_dat_w => c_sdp_W_subband, g_out_dat_w => c_gain_out_dat_w, - g_gains_file_name => g_gains_file_name + g_gains_file_name => g_gains_file_name, + -- extra input latency to ease timing. + g_pipeline_real_mult_input => 2, + g_pipeline_complex_mult_input => 2 ) PORT MAP ( -- System diff --git a/applications/lofar2/libraries/sdp/src/vhdl/sdp_pkg.vhd b/applications/lofar2/libraries/sdp/src/vhdl/sdp_pkg.vhd index 4b2746d0aeab1c70710d2f5dbdb465ce9a707f8b..524f257c78da4cc7195fb7dd50e3dc87e32e20e5 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/sdp_pkg.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/sdp_pkg.vhd @@ -109,25 +109,26 @@ PACKAGE sdp_pkg is CONSTANT c_sdp_N_ring_nof_mac10g : NATURAL := 3; -- for sdp_station_xsub_ring design. -- Derived constants - CONSTANT c_sdp_FS_adc : NATURAL := 2**(c_sdp_W_adc - 1); -- full scale FS corresponds to amplitude 1.0, will just cause clipping of +FS to +FS-1 - CONSTANT c_sdp_wg_ampl_lsb : REAL := c_diag_wg_ampl_unit / REAL(c_sdp_FS_adc); -- WG amplitude in number of LSbit resolution steps - CONSTANT c_sdp_wg_subband_freq_unit : REAL := c_diag_wg_freq_unit/REAL(c_sdp_N_fft); -- subband freq = Fs/1024 = 200 MSps/1024 = 195312.5 Hz sinus - CONSTANT c_sdp_N_clk_per_sync : NATURAL := c_sdp_f_adc_MHz*10**6; -- Default 200M clock cycles per second - CONSTANT c_sdp_N_clk_sync_timeout : NATURAL := c_sdp_f_adc_MHz*10**6 + c_sdp_f_adc_MHz*10**5; -- 10% margin. - CONSTANT c_sdp_N_sync_jesd : NATURAL := c_sdp_S_pn * c_sdp_N_sync_rcu / c_sdp_S_rcu; -- = 4, nof JESD IP sync outputs per PN - CONSTANT c_sdp_f_sub_Hz : REAL := REAL(c_sdp_f_adc_MHz * 10**6) / REAL(c_sdp_N_fft); -- = 195312.5 - CONSTANT c_sdp_N_int : NATURAL := c_sdp_f_adc_MHz * 10**6; -- nof ADC sample periods per 1 s integration interval - CONSTANT c_sdp_N_int_sub : REAL := c_sdp_f_sub_Hz; -- nof subband sample periods per 1 s integration interval - CONSTANT c_sdp_N_int_sub_lo : NATURAL := NATURAL(FLOOR(c_sdp_N_int_sub)); -- = 195312 - CONSTANT c_sdp_N_int_sub_hi : NATURAL := NATURAL(CEIL(c_sdp_N_int_sub)); -- = 195313 - CONSTANT c_sdp_A_pn : NATURAL := c_sdp_S_pn / c_sdp_N_pol; -- = 6 dual pol antenna per PN, is 6 signal input pairs - CONSTANT c_sdp_P_pfb : NATURAL := c_sdp_S_pn / c_sdp_Q_fft; -- = 6 PFB units, for 6 signal input pairs - CONSTANT c_sdp_T_adc : TIME := (10**6 / c_sdp_f_adc_MHz) * 1 ps; -- = 5 ns @ 200MHz - CONSTANT c_sdp_T_sub : TIME := c_sdp_N_fft * c_sdp_T_adc; -- = 5.12 us @ 200MHz - CONSTANT c_sdp_W_bf_product : NATURAL := c_sdp_W_subband + c_sdp_W_bf_weight -1; - CONSTANT c_sdp_X_sq : NATURAL := c_sdp_S_pn * c_sdp_S_pn; -- = 144 - CONSTANT c_sdp_block_period : NATURAL := c_sdp_N_fft * 1000 / c_sdp_f_adc_MHz; -- = 5120 [ns] - CONSTANT c_sdp_N_beamlets_sdp : NATURAL := c_sdp_N_beamsets * c_sdp_S_sub_bf; -- = 976 + CONSTANT c_sdp_FS_adc : NATURAL := 2**(c_sdp_W_adc - 1); -- full scale FS corresponds to amplitude 1.0, will just cause clipping of +FS to +FS-1 + CONSTANT c_sdp_wg_ampl_lsb : REAL := c_diag_wg_ampl_unit / REAL(c_sdp_FS_adc); -- WG amplitude in number of LSbit resolution steps + CONSTANT c_sdp_wg_subband_freq_unit : REAL := c_diag_wg_freq_unit/REAL(c_sdp_N_fft); -- subband freq = Fs/1024 = 200 MSps/1024 = 195312.5 Hz sinus + CONSTANT c_sdp_N_clk_per_sync : NATURAL := c_sdp_f_adc_MHz*10**6; -- Default 200M clock cycles per second + CONSTANT c_sdp_N_clk_sync_timeout : NATURAL := c_sdp_f_adc_MHz*10**6 + c_sdp_f_adc_MHz*10**5; -- 10% margin. + CONSTANT c_sdp_N_clk_sync_timeout_xsub : NATURAL := 2**31 - 1; -- 10.7 seconds = largest value for NATURAL. + CONSTANT c_sdp_N_sync_jesd : NATURAL := c_sdp_S_pn * c_sdp_N_sync_rcu / c_sdp_S_rcu; -- = 4, nof JESD IP sync outputs per PN + CONSTANT c_sdp_f_sub_Hz : REAL := REAL(c_sdp_f_adc_MHz * 10**6) / REAL(c_sdp_N_fft); -- = 195312.5 + CONSTANT c_sdp_N_int : NATURAL := c_sdp_f_adc_MHz * 10**6; -- nof ADC sample periods per 1 s integration interval + CONSTANT c_sdp_N_int_sub : REAL := c_sdp_f_sub_Hz; -- nof subband sample periods per 1 s integration interval + CONSTANT c_sdp_N_int_sub_lo : NATURAL := NATURAL(FLOOR(c_sdp_N_int_sub)); -- = 195312 + CONSTANT c_sdp_N_int_sub_hi : NATURAL := NATURAL(CEIL(c_sdp_N_int_sub)); -- = 195313 + CONSTANT c_sdp_A_pn : NATURAL := c_sdp_S_pn / c_sdp_N_pol; -- = 6 dual pol antenna per PN, is 6 signal input pairs + CONSTANT c_sdp_P_pfb : NATURAL := c_sdp_S_pn / c_sdp_Q_fft; -- = 6 PFB units, for 6 signal input pairs + CONSTANT c_sdp_T_adc : TIME := (10**6 / c_sdp_f_adc_MHz) * 1 ps; -- = 5 ns @ 200MHz + CONSTANT c_sdp_T_sub : TIME := c_sdp_N_fft * c_sdp_T_adc; -- = 5.12 us @ 200MHz + CONSTANT c_sdp_W_bf_product : NATURAL := c_sdp_W_subband + c_sdp_W_bf_weight -1; + CONSTANT c_sdp_X_sq : NATURAL := c_sdp_S_pn * c_sdp_S_pn; -- = 144 + CONSTANT c_sdp_block_period : NATURAL := c_sdp_N_fft * 1000 / c_sdp_f_adc_MHz; -- = 5120 [ns] + CONSTANT c_sdp_N_beamlets_sdp : NATURAL := c_sdp_N_beamsets * c_sdp_S_sub_bf; -- = 976 -- . unit weights CONSTANT c_sdp_unit_sub_weight : NATURAL := 2**c_sdp_W_sub_weight_fraction; -- 2**13, so range +-4.0 for 16 bit signed weight diff --git a/applications/lofar2/libraries/sdp/src/vhdl/sdp_statistics_offload.vhd b/applications/lofar2/libraries/sdp/src/vhdl/sdp_statistics_offload.vhd index efb23c8a92d1e738b96ed7cbdbb2263ed7ed2b92..1338fe6d15b0c5bec083dd968b12817a003e259c 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/sdp_statistics_offload.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/sdp_statistics_offload.vhd @@ -109,12 +109,13 @@ USE work.sdp_pkg.ALL; ENTITY sdp_statistics_offload IS GENERIC ( - g_statistics_type : STRING := "SST"; - g_offload_time : NATURAL := c_sdp_offload_time; - g_beamset_id : NATURAL := 0; - g_P_sq : NATURAL := c_sdp_P_sq; -- number of available correlator cells, - g_crosslets_direction : NATURAL := 1; -- > 0 for crosslet transport in positive direction (incrementing RN), else 0 for negative direction - g_reverse_word_order : BOOLEAN := TRUE -- default word order is MSB after LSB, we need to stream LSB after MSB. + g_statistics_type : STRING := "SST"; + g_offload_time : NATURAL := c_sdp_offload_time; + g_beamset_id : NATURAL := 0; + g_P_sq : NATURAL := c_sdp_P_sq; -- number of available correlator cells, + g_crosslets_direction : NATURAL := 1; -- > 0 for crosslet transport in positive direction (incrementing RN), else 0 for negative direction + g_reverse_word_order : BOOLEAN := TRUE; -- default word order is MSB after LSB, we need to stream LSB after MSB. + g_bsn_monitor_sync_timeout : NATURAL := c_sdp_N_clk_sync_timeout ); PORT ( -- Clocks and reset @@ -575,7 +576,7 @@ BEGIN GENERIC MAP ( g_nof_streams => 1, g_cross_clock_domain => TRUE, - g_sync_timeout => c_sdp_N_clk_sync_timeout, + g_sync_timeout => g_bsn_monitor_sync_timeout, g_bsn_w => c_dp_stream_bsn_w, g_error_bi => 0, g_cnt_sop_w => c_word_w, diff --git a/applications/lofar2/libraries/sdp/src/vhdl/sdp_subband_equalizer.vhd b/applications/lofar2/libraries/sdp/src/vhdl/sdp_subband_equalizer.vhd index 05d222f417f158351779bbee469fc7b5543f3124..e5e7d4f12cc299106f3fa6856cf5b01cd87d068a 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/sdp_subband_equalizer.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/sdp_subband_equalizer.vhd @@ -120,7 +120,10 @@ BEGIN g_gain_w => c_sdp_W_sub_weight, g_in_dat_w => c_sdp_W_subband, g_out_dat_w => c_gain_out_dat_w, - g_gains_file_name => g_gains_file_name + g_gains_file_name => g_gains_file_name, + -- extra input latency to ease timing. + g_pipeline_real_mult_input => 2, + g_pipeline_complex_mult_input => 2 ) PORT MAP ( -- System diff --git a/libraries/base/dp/src/vhdl/mms_dp_gain_serial_arr.vhd b/libraries/base/dp/src/vhdl/mms_dp_gain_serial_arr.vhd index 25551f29f88ba7b36582739de336065b9bcd1c6a..7e8174fa8f8f52c878ebf7f3f6af51087179eab3 100644 --- a/libraries/base/dp/src/vhdl/mms_dp_gain_serial_arr.vhd +++ b/libraries/base/dp/src/vhdl/mms_dp_gain_serial_arr.vhd @@ -100,7 +100,7 @@ ARCHITECTURE str OF mms_dp_gain_serial_arr IS -- dat_w : NATURAL; -- nof_dat : NATURAL; -- optional, nof dat words <= 2**adr_w -- init_sl : STD_LOGIC; -- optional, init all dat words to std_logic '0', '1' or 'X' - CONSTANT c_mm_ram : t_c_mem := (latency => 2, -- set latency to 2 to ease timing + CONSTANT c_mm_ram : t_c_mem := (latency => 1, adr_w => ceil_log2(g_nof_gains), dat_w => sel_a_b(g_complex_gain, c_nof_complex, 1) * g_gain_w, nof_dat => g_nof_gains, diff --git a/libraries/technology/jesd204b/tech_jesd204b.peripheral.yaml b/libraries/technology/jesd204b/tech_jesd204b.peripheral.yaml index 39125f424499c9c9c3793f229d2711024798dfa6..4dcb02e027356ec88766d3e8a895db9af14e8584 100644 --- a/libraries/technology/jesd204b/tech_jesd204b.peripheral.yaml +++ b/libraries/technology/jesd204b/tech_jesd204b.peripheral.yaml @@ -21,8 +21,8 @@ peripherals: bit_offset: 31 mm_width: 1 access_mode: RW - - - field_name: enable - field_description: "Enable JESD signal input i by setting bit i = 1, disable by clearing bit i = 0." + - - field_name: disable + field_description: "Disable JESD signal input i by setting bit i = 1, enable by clearing bit i = 0." address_offset: 0x0 bit_offset: 0 mm_width: 31