From 12c4b6707c037806b2cbcb80ce26fbe01c7f5615 Mon Sep 17 00:00:00 2001 From: Eric Kooistra <kooistra@astron.nl> Date: Thu, 27 Mar 2025 09:04:19 +0100 Subject: [PATCH] Correct c_offload_node_time_scaled value on HW by using real. --- .../libraries/sdp/src/vhdl/sdp_statistics_offload.vhd | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) 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 cc3ad48a56..a46df0ac50 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/sdp_statistics_offload.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/sdp_statistics_offload.vhd @@ -174,8 +174,12 @@ architecture str of sdp_statistics_offload is constant c_nof_streams : natural := 1; -- Offload timing - constant c_offload_node_time_scaled : natural := (g_offload_node_time * 2**g_offload_scale_w) / - g_ctrl_interval_size_min; + -- . use natural(real()) to avoid overflow due to intermediate natural result 600000 * 2**15 > 2*31 + -- - natural: 600000 * 2**15 / 20000000 = -90 (from compile or sim load error message) + -- - real: 600000 * 2**15 / 20000000 = 983.04 --> 983 + constant c_offload_node_time_scaled : natural := natural(real(g_offload_node_time) * + real(2**g_offload_scale_w) / + real(g_ctrl_interval_size_min)); constant c_offload_packet_time_scaled : natural := (g_offload_packet_time * 2**g_offload_scale_w) / g_ctrl_interval_size_min; constant c_offload_packet_time_max : natural := g_offload_packet_time * -- GitLab