diff --git a/applications/lofar2/libraries/sdp/src/vhdl/sdp_station.vhd b/applications/lofar2/libraries/sdp/src/vhdl/sdp_station.vhd index 168e95ffae4a2113eada4384790b586642b4351d..cfffdf2e7b32a003df111b5afd60da164af0a3d2 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/sdp_station.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/sdp_station.vhd @@ -407,6 +407,12 @@ ARCHITECTURE str OF sdp_station IS CONSTANT c_lane_payload_nof_longwords_max : NATURAL := largest(c_lane_payload_nof_longwords_xst, c_lane_payload_nof_longwords_bf); CONSTANT c_lane_packet_nof_longwords_max : NATURAL := c_lane_payload_nof_longwords_max + c_ring_dp_hdr_field_size; -- = 549 + 3 = 552 + -- Use large enough c_lane_total_nof_packets_w, so that lane total nof packets count will not overflow: + -- . For low band XST crosslets on ring : L_packet = (P_sq - 1) * f_sub = 8 * 195312.5 = 1.5625 M packets/s, + -- so 2**48 / (1.5625e6 * 3600 * 24 *365.25) = 5.7 years. + -- . Use same value for BF beamlets on ring. + CONSTANT c_lane_total_nof_packets_w : NATURAL := 48; -- <= c_longword_w = 64 + CONSTANT c_err_bi : NATURAL := 0; CONSTANT c_nof_err_counts : NATURAL := 8; CONSTANT c_bsn_at_sync_check_channel : NATURAL := 1; @@ -1172,6 +1178,7 @@ BEGIN g_lane_direction => 1, -- transport in positive direction. g_lane_data_w => c_longword_w, g_lane_packet_length => c_lane_payload_nof_longwords_xst, + g_lane_total_nof_packets_w => c_lane_total_nof_packets_w, g_use_dp_layer => TRUE, g_nof_rx_monitors => c_sdp_N_pn_max, g_nof_tx_monitors => c_sdp_N_pn_max, @@ -1223,6 +1230,7 @@ BEGIN g_lane_direction => 1, -- transport in positive direction. g_lane_data_w => c_longword_w, g_lane_packet_length => c_lane_payload_nof_longwords_bf, + g_lane_total_nof_packets_w => c_lane_total_nof_packets_w, g_use_dp_layer => TRUE, g_nof_rx_monitors => 1, g_nof_tx_monitors => 1, diff --git a/libraries/base/ring/src/vhdl/ring_lane.vhd b/libraries/base/ring/src/vhdl/ring_lane.vhd index e0ccc75d9f3b84a0a67a5f98304032f607ddad68..30a17041ba169a4d8b4cf595f3afdb3f6afa4113 100644 --- a/libraries/base/ring/src/vhdl/ring_lane.vhd +++ b/libraries/base/ring/src/vhdl/ring_lane.vhd @@ -45,6 +45,7 @@ ENTITY ring_lane IS g_lane_direction : NATURAL := 1; g_lane_data_w : NATURAL := 64; g_lane_packet_length : NATURAL := 1024; + g_lane_total_nof_packets_w : NATURAL := c_longword_w; -- <= c_longword_w = 64 g_use_dp_layer : BOOLEAN := TRUE; g_nof_rx_monitors : NATURAL := 0; g_nof_tx_monitors : NATURAL := 1; @@ -114,15 +115,16 @@ BEGIN u_ring_rx : ENTITY work.ring_rx GENERIC MAP ( - g_use_dp_layer => g_use_dp_layer, - g_lane_direction => g_lane_direction, - g_data_w => g_lane_data_w, - g_nof_rx_monitors => g_nof_rx_monitors, - g_err_bi => g_err_bi, - g_block_size => g_lane_packet_length, - g_nof_err_counts => g_nof_err_counts, - g_check_channel => g_bsn_at_sync_check_channel, - g_sync_timeout => g_sync_timeout + g_use_dp_layer => g_use_dp_layer, + g_lane_direction => g_lane_direction, + g_total_nof_packets_w => g_lane_total_nof_packets_w, + g_data_w => g_lane_data_w, + g_nof_rx_monitors => g_nof_rx_monitors, + g_err_bi => g_err_bi, + g_block_size => g_lane_packet_length, + g_nof_err_counts => g_nof_err_counts, + g_check_channel => g_bsn_at_sync_check_channel, + g_sync_timeout => g_sync_timeout ) PORT MAP ( mm_rst => mm_rst, diff --git a/libraries/base/ring/src/vhdl/ring_rx.vhd b/libraries/base/ring/src/vhdl/ring_rx.vhd index 92a6ae69ea45c47430d237efccb1fb2bb2624eee..65dab32489ae24b6fa40c78c6966491002108c9c 100644 --- a/libraries/base/ring/src/vhdl/ring_rx.vhd +++ b/libraries/base/ring/src/vhdl/ring_rx.vhd @@ -37,15 +37,16 @@ USE work.ring_pkg.ALL; ENTITY ring_rx IS GENERIC ( - g_use_dp_layer : BOOLEAN := TRUE; - g_lane_direction : NATURAL := 1; - g_data_w : NATURAL := 64; - g_nof_rx_monitors : NATURAL := 1; - g_err_bi : NATURAL := 0; - g_block_size : NATURAL := 1024; - g_nof_err_counts : NATURAL := 1; - g_check_channel : NATURAL := 1; - g_sync_timeout : NATURAL := 220*10**6 -- 10% margin + g_use_dp_layer : BOOLEAN := TRUE; + g_lane_direction : NATURAL := 1; + g_total_nof_packets_w : NATURAL := 48; -- <= c_longword_w = 64 + g_data_w : NATURAL := 64; + g_nof_rx_monitors : NATURAL := 1; + g_err_bi : NATURAL := 0; + g_block_size : NATURAL := 1024; + g_nof_err_counts : NATURAL := 1; + g_check_channel : NATURAL := 1; + g_sync_timeout : NATURAL := 220*10**6 -- 10% margin ); PORT ( -- Clocks and reset @@ -116,6 +117,8 @@ BEGIN -- Validate error field u_dp_block_validate_err : ENTITY dp_lib.dp_block_validate_err GENERIC MAP ( + g_cnt_w => c_word_w, -- <= c_word_w = 32 + g_blk_cnt_w => g_total_nof_packets_w, -- <= c_longword_w = 64 g_max_block_size => c_packet_size, g_min_block_size => c_packet_size, g_nof_err_counts => g_nof_err_counts,