Skip to content
Snippets Groups Projects
Commit 4b0003e7 authored by Eric Kooistra's avatar Eric Kooistra
Browse files

Pipeline gn_index and added rn_index_reg.

parent 73cd845b
Branches
No related tags found
1 merge request!175Added t_sdp_sim. Add func_sdp_get_stat_*() functions to determine the header...
...@@ -99,12 +99,12 @@ ARCHITECTURE str OF sdp_statistics_offload IS ...@@ -99,12 +99,12 @@ ARCHITECTURE str OF sdp_statistics_offload IS
CONSTANT c_nof_statistics_per_packet : NATURAL := func_sdp_get_stat_nof_statistics_per_packet(g_statistics_type); CONSTANT c_nof_statistics_per_packet : NATURAL := func_sdp_get_stat_nof_statistics_per_packet(g_statistics_type);
CONSTANT c_udp_total_length : NATURAL := func_sdp_get_stat_udp_total_length(g_statistics_type); CONSTANT c_udp_total_length : NATURAL := func_sdp_get_stat_udp_total_length(g_statistics_type);
CONSTANT c_ip_total_length : NATURAL := func_sdp_get_stat_ip_total_length(g_statistics_type); CONSTANT c_ip_total_length : NATURAL := func_sdp_get_stat_ip_total_length(g_statistics_type);
CONSTANT c_nof_packets : NATURAL := func_sdp_get_stat_nof_packets(g_statistics_type, c_sdp_S_pn, g_P_sq); CONSTANT c_nof_packets_max : NATURAL := func_sdp_get_stat_nof_packets(g_statistics_type, c_sdp_S_pn, g_P_sq, c_sdp_N_crosslets_max);
CONSTANT c_beamlet_id : NATURAL := g_beamset_id * c_sdp_S_sub_bf; CONSTANT c_beamlet_id : NATURAL := g_beamset_id * c_sdp_S_sub_bf;
-- payload data -- payload data
CONSTANT c_data_size : NATURAL := c_sdp_stat_data_sz; -- = 2 CONSTANT c_data_size : NATURAL := c_sdp_W_statistic_sz; -- = 2
-- Note: -- Note:
-- . c_nof_data_per_step = 2 for all g_statistics_type, but for different -- . c_nof_data_per_step = 2 for all g_statistics_type, but for different
-- reasons, because c_sdp_N_pol_bf = c_nof_complex = c_sdp_Q_fft = 2 -- reasons, because c_sdp_N_pol_bf = c_nof_complex = c_sdp_Q_fft = 2
...@@ -139,6 +139,9 @@ ARCHITECTURE str OF sdp_statistics_offload IS ...@@ -139,6 +139,9 @@ ARCHITECTURE str OF sdp_statistics_offload IS
SIGNAL r : t_reg; SIGNAL r : t_reg;
SIGNAL nxt_r : t_reg; SIGNAL nxt_r : t_reg;
SIGNAL gn_index_reg : NATURAL;
SIGNAL rn_index_reg : NATURAL;
SIGNAL trigger : STD_LOGIC := '0'; SIGNAL trigger : STD_LOGIC := '0';
SIGNAL done : STD_LOGIC := '0'; SIGNAL done : STD_LOGIC := '0';
SIGNAL dp_block_from_mm_src_out : t_dp_sosi; SIGNAL dp_block_from_mm_src_out : t_dp_sosi;
...@@ -220,12 +223,15 @@ BEGIN ...@@ -220,12 +223,15 @@ BEGIN
END IF; END IF;
END PROCESS; END PROCESS;
p_control_packet_offload : PROCESS(r, gn_index, in_sosi, trigger, done, dp_header_info, selected_crosslet_arr, nof_crosslets) gn_index_reg <= gn_index WHEN rising_edge(dp_clk);
rn_index_reg <= gn_index - TO_UINT(sdp_info.O_rn) WHEN rising_edge(dp_clk);
p_control_packet_offload : PROCESS(r, gn_index_reg, in_sosi, trigger, done, dp_header_info, selected_crosslet_arr, nof_crosslets)
VARIABLE v: t_reg; VARIABLE v: t_reg;
BEGIN BEGIN
v := r; v := r;
v.start_pulse := '0'; v.start_pulse := '0';
v.nof_cycles_dly := gn_index * g_offload_time; v.nof_cycles_dly := gn_index_reg * g_offload_time;
-- Count number of sop's in a sync interval and get payload errors and keep them till next sync. -- Count number of sop's in a sync interval and get payload errors and keep them till next sync.
IF in_sosi.sync = '1' THEN IF in_sosi.sync = '1' THEN
...@@ -243,14 +249,15 @@ BEGIN ...@@ -243,14 +249,15 @@ BEGIN
END IF; END IF;
-- assign sdp_data_id for different statistic types -- assign sdp_data_id for different statistic types
v.data_id := x"00000000";
IF g_statistics_type = "SST" THEN IF g_statistics_type = "SST" THEN
v.data_id := x"000000" & TO_UVEC(r.block_count + c_sdp_S_pn * gn_index, 8); v.data_id(7 DOWNTO 0) := TO_UVEC(r.block_count + c_sdp_S_pn * gn_index_reg, 8);
ELSIF g_statistics_type = "BST" THEN ELSIF g_statistics_type = "BST" THEN
v.data_id := x"0000" & TO_UVEC(c_beamlet_id, 16); v.data_id(15 DOWNTO 0) := TO_UVEC(c_beamlet_id, 16);
ELSIF g_statistics_type = "XST" THEN ELSIF g_statistics_type = "XST" THEN
v.data_id := x"0" & "000" & RESIZE_UVEC(selected_crosslet_arr(r.crosslet_count), 9) & TO_UVEC(r.block_count * c_sdp_S_pn, 8) & TO_UVEC(r.block_count * c_sdp_S_pn, 8); -- RW TODO: define for P_sq > 1 v.data_id(24 DOWNTO 16) := RESIZE_UVEC(selected_crosslet_arr(r.crosslet_count), 9);
ELSE v.data_id(15 DOWNTO 8) := TO_UVEC(r.block_count * c_sdp_S_pn, 8);
v.data_id := x"00000000"; v.data_id(7 DOWNTO 0) := TO_UVEC(r.block_count * c_sdp_S_pn, 8); -- RW TODO: define for P_sq > 1
END IF; END IF;
-- Issue start_pulse per packet offload -- Issue start_pulse per packet offload
...@@ -263,7 +270,7 @@ BEGIN ...@@ -263,7 +270,7 @@ BEGIN
v.nof_crosslets := TO_UINT(nof_crosslets); -- register nof_crosslets to make sure it does not change during packet output. v.nof_crosslets := TO_UINT(nof_crosslets); -- register nof_crosslets to make sure it does not change during packet output.
ELSIF done = '1' THEN ELSIF done = '1' THEN
-- Use done to start next packets -- Use done to start next packets
IF r.block_count < c_nof_packets-1 THEN IF r.block_count < c_nof_packets_max-1 THEN
IF g_statistics_type /= "XST" OR r.crosslet_count < r.nof_crosslets-1 THEN IF g_statistics_type /= "XST" OR r.crosslet_count < r.nof_crosslets-1 THEN
-- For SST, BST and for XST nof_crosslets do: -- For SST, BST and for XST nof_crosslets do:
IF r.block_count MOD c_nof_data_per_step = 0 THEN IF r.block_count MOD c_nof_data_per_step = 0 THEN
...@@ -312,7 +319,7 @@ BEGIN ...@@ -312,7 +319,7 @@ BEGIN
trigger_dly => trigger trigger_dly => trigger
); );
u_dp_block_from_mm : ENTITY dp_lib.dp_block_from_mm_dc u_dp_block_from_mm_dc : ENTITY dp_lib.dp_block_from_mm_dc
GENERIC MAP ( GENERIC MAP (
g_data_size => c_data_size, g_data_size => c_data_size,
g_step_size => c_step_size, g_step_size => c_step_size,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment