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

Add proc_sdp_rx_beamlet_octets() variant for general c_nof_blocks_per_packet.

parent 4b76d0b8
No related branches found
No related tags found
1 merge request!359Clarify g_nof_destinations_max design revision parameter and package constants...
......@@ -148,6 +148,17 @@ package tb_sdp_pkg is
function func_sdp_undo_transpose_beamlet_packet(packet_list : t_sdp_beamlet_packet_list) return t_sdp_beamlet_packet_list;
-- Read beamlet packet octets per re and im parts
procedure proc_sdp_rx_beamlet_octets(
constant c_nof_blocks_per_packet : in natural;
signal clk : in std_logic;
signal rx_beamlet_sosi : in t_dp_sosi;
signal rx_beamlet_cnt : inout natural;
signal rx_beamlet_valid : out std_logic;
signal rx_beamlet_arr_re : out t_sdp_beamlet_part_arr;
signal rx_beamlet_arr_im : out t_sdp_beamlet_part_arr;
signal rx_packet_list_re : out t_slv_8_arr;
signal rx_packet_list_im : out t_slv_8_arr);
procedure proc_sdp_rx_beamlet_octets(
signal clk : in std_logic;
signal rx_beamlet_sosi : in t_dp_sosi;
......@@ -628,21 +639,25 @@ package body tb_sdp_pkg is
-- . Beamlets array is stored big endian in the data, so X.real index 0 first
-- in MSByte of rx_beamlet_sosi.data.
procedure proc_sdp_rx_beamlet_octets(
signal clk : in std_logic;
signal rx_beamlet_sosi : in t_dp_sosi;
signal rx_beamlet_cnt : inout natural;
signal rx_beamlet_valid : out std_logic;
signal rx_beamlet_arr_re : out t_sdp_beamlet_part_arr;
signal rx_beamlet_arr_im : out t_sdp_beamlet_part_arr;
signal rx_packet_list_re : out t_sdp_beamlet_packet_list;
signal rx_packet_list_im : out t_sdp_beamlet_packet_list) is
constant c_nof_blocks_per_packet : in natural;
signal clk : in std_logic;
signal rx_beamlet_sosi : in t_dp_sosi;
signal rx_beamlet_cnt : inout natural;
signal rx_beamlet_valid : out std_logic;
signal rx_beamlet_arr_re : out t_sdp_beamlet_part_arr; -- [0:3]
signal rx_beamlet_arr_im : out t_sdp_beamlet_part_arr; -- [0:3]
signal rx_packet_list_re : out t_slv_8_arr; -- [0:c_list_len - 1]
signal rx_packet_list_im : out t_slv_8_arr) is
constant c_nof_beamlets_per_packet : natural := c_nof_blocks_per_packet * c_sdp_cep_nof_beamlets_per_block;
constant c_nof_longwords_per_packet : natural := c_nof_beamlets_per_packet / c_sdp_nof_beamlets_per_longword;
constant c_list_len : natural := c_nof_beamlets_per_packet * c_sdp_N_pol_bf;
begin
rx_beamlet_cnt <= 0;
rx_beamlet_valid <= '0';
-- Wait until start of a beamlet packet
proc_common_wait_until_high(clk, rx_beamlet_sosi.sop);
-- c_sdp_nof_beamlets_per_longword = 2 dual pol beamlets (= XY, XY) per 64b data word
for I in 0 to (c_sdp_cep_nof_beamlets_per_packet / c_sdp_nof_beamlets_per_longword) - 1 loop
for I in 0 to c_nof_longwords_per_packet - 1 loop
proc_common_wait_until_high(clk, rx_beamlet_sosi.valid);
rx_beamlet_valid <= '1';
-- Capture rx beamlets per longword in rx_beamlet_arr, for time series view in Wave window
......@@ -669,8 +684,29 @@ package body tb_sdp_pkg is
-- contains no WAIT statement.
wait until rising_edge(clk);
rx_beamlet_valid <= '0';
rx_beamlet_cnt <= (rx_beamlet_cnt + c_sdp_nof_beamlets_per_longword) mod c_sdp_cep_nof_beamlets_per_block; -- 4 blocks/packet
rx_beamlet_cnt <= (rx_beamlet_cnt + c_sdp_nof_beamlets_per_longword) mod c_sdp_cep_nof_beamlets_per_block;
end loop;
end proc_sdp_rx_beamlet_octets;
procedure proc_sdp_rx_beamlet_octets(
signal clk : in std_logic;
signal rx_beamlet_sosi : in t_dp_sosi;
signal rx_beamlet_cnt : inout natural;
signal rx_beamlet_valid : out std_logic;
signal rx_beamlet_arr_re : out t_sdp_beamlet_part_arr;
signal rx_beamlet_arr_im : out t_sdp_beamlet_part_arr;
signal rx_packet_list_re : out t_sdp_beamlet_packet_list;
signal rx_packet_list_im : out t_sdp_beamlet_packet_list) is
begin
proc_sdp_rx_beamlet_octets(
c_sdp_cep_nof_blocks_per_packet, -- 4 blocks/packet
clk,
rx_beamlet_sosi,
rx_beamlet_cnt,
rx_beamlet_valid ,
rx_beamlet_arr_re,
rx_beamlet_arr_im,
rx_packet_list_re,
rx_packet_list_im);
end proc_sdp_rx_beamlet_octets;
end tb_sdp_pkg;
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment