Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
H
HDL
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Iterations
Wiki
Requirements
Jira
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Releases
Container Registry
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
RTSD
HDL
Commits
3484be78
Commit
3484be78
authored
1 year ago
by
Eric Kooistra
Browse files
Options
Downloads
Patches
Plain Diff
Verify beamlets header. Decode beamlets payload data.
parent
0bb396f6
No related branches found
Branches containing commit
No related tags found
1 merge request
!357
Move func_sdp_bdo_cep_hdr_field_sel_dest() from sdp_bdo_pkg to...
Pipeline
#59243
passed
1 year ago
Stage: linting
Changes
1
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
applications/lofar2/libraries/sdp/tb/vhdl/tb_sdp_beamformer_output.vhd
+120
-21
120 additions, 21 deletions
...lofar2/libraries/sdp/tb/vhdl/tb_sdp_beamformer_output.vhd
with
120 additions
and
21 deletions
applications/lofar2/libraries/sdp/tb/vhdl/tb_sdp_beamformer_output.vhd
+
120
−
21
View file @
3484be78
...
...
@@ -42,7 +42,7 @@ use work.tb_sdp_pkg.all;
entity
tb_sdp_beamformer_output
is
generic
(
g_nof_repeat
:
natural
:
=
1
0
;
g_nof_repeat
:
natural
:
=
5
0
;
g_beamset_id
:
natural
:
=
0
;
g_use_transpose
:
boolean
:
=
false
;
g_use_multiple_destinations
:
boolean
:
=
false
...
...
@@ -53,17 +53,25 @@ architecture tb of tb_sdp_beamformer_output is
constant
c_dp_clk_period
:
time
:
=
5
ns
;
-- 200 MHz
constant
c_mm_clk_period
:
time
:
=
1
ns
;
-- fast MM clk to speed up simulation
constant
c_cross_clock_domain_latency
:
natural
:
=
20
;
constant
c_bf_block_len
:
natural
:
=
c_sdp_N_pol_bf
*
c_sdp_S_sub_bf
;
-- = 2 * 488 = 976
constant
c_bf_gap_size
:
natural
:
=
c_sdp_N_fft
-
c_bf_block_len
;
-- = 1024 - 976 = 48
constant
c_exp_beamlet_scale
:
natural
:
=
natural
(
1
.
0
/
2
.
0
**
9
*
real
(
c_sdp_unit_beamlet_scale
));
constant
c_exp_beamlet_scale_slv
:
std_logic_vector
(
c_sdp_W_beamlet_scale
-1
downto
0
)
:
=
to_uvec
(
c_exp_beamlet_scale
,
c_sdp_W_beamlet_scale
);
constant
c_exp_gn_id
:
natural
:
=
3
;
constant
c_exp_gn_id_slv
:
std_logic_vector
(
c_sdp_W_gn_id
-
1
downto
0
)
:
=
to_uvec
(
c_exp_gn_id
,
c_sdp_W_gn_id
);
constant
c_init_bsn
:
natural
:
=
0
;
constant
c_bf_block_len
:
natural
:
=
c_sdp_N_pol_bf
*
c_sdp_S_sub_bf
;
-- = 2 * 488 = 976
constant
c_bf_gap_size
:
natural
:
=
c_sdp_N_fft
-
c_bf_block_len
;
-- = 1024 - 976 = 48
constant
c_exp_beamlet_scale
:
natural
:
=
natural
(
1
.
0
/
2
.
0
**
9
*
real
(
c_sdp_unit_beamlet_scale
));
constant
c_exp_beamlet_scale_slv
:
std_logic_vector
(
c_sdp_W_beamlet_scale
-1
downto
0
)
:
=
to_uvec
(
c_exp_beamlet_scale
,
c_sdp_W_beamlet_scale
);
constant
c_gn_id
:
natural
:
=
3
;
constant
c_gn_id_slv
:
std_logic_vector
(
c_sdp_W_gn_id
-
1
downto
0
)
:
=
to_uvec
(
c_gn_id
,
c_sdp_W_gn_id
);
constant
c_id
:
std_logic_vector
(
7
downto
0
)
:
=
to_uvec
(
c_gn_id
,
8
);
constant
c_cep_eth_src_mac
:
std_logic_vector
(
47
downto
0
)
:
=
c_sdp_cep_eth_src_mac_47_16
&
func_sdp_gn_index_to_mac_15_0
(
c_gn_id
);
constant
c_cep_ip_src_addr
:
std_logic_vector
(
31
downto
0
)
:
=
c_sdp_cep_ip_src_addr_31_16
&
func_sdp_gn_index_to_ip_15_0
(
c_gn_id
);
constant
c_cep_udp_src_port
:
std_logic_vector
(
15
downto
0
)
:
=
c_sdp_cep_udp_src_port_15_8
&
c_id
;
-- Checksum value obtained from rx_sdp_cep_header.ip.header_checksum in wave window
constant
c_exp_ip_header_checksum
:
natural
:
=
16
#
5
BDB
#
;
constant
c_exp_payload_error
:
std_logic
:
=
'0'
;
constant
c_exp_beamlet_index
:
natural
:
=
g_beamset_id
*
c_sdp_S_sub_bf
;
constant
c_exp_sdp_info
:
t_sdp_info
:
=
(
to_uvec
(
7
,
6
),
-- antenna_field_index
to_uvec
(
601
,
10
),
-- station_id
...
...
@@ -76,8 +84,6 @@ architecture tb of tb_sdp_beamformer_output is
x"1400"
-- block_period = 5120
);
constant
c_beamlet_index
:
natural
:
=
g_beamset_id
*
c_sdp_S_sub_bf
;
signal
tb_end
:
std_logic
:
=
'0'
;
signal
dp_clk
:
std_logic
:
=
'1'
;
signal
dp_rst
:
std_logic
;
...
...
@@ -105,8 +111,25 @@ architecture tb of tb_sdp_beamformer_output is
signal
rx_hdr_dat_cipo
:
t_mem_cipo
;
signal
rx_hdr_fields_out
:
std_logic_vector
(
1023
downto
0
);
signal
rx_hdr_fields_raw
:
std_logic_vector
(
1023
downto
0
)
:
=
(
others
=>
'0'
);
signal
rx_sdp_cep_header
:
t_sdp_cep_header
;
signal
rx_beamlet_sosi
:
t_dp_sosi
;
signal
rx_beamlet_header
:
t_sdp_cep_header
;
signal
exp_beamlet_header
:
t_sdp_cep_header
;
signal
exp_dp_bsn
:
natural
;
-- Beamlets packets data
signal
rx_beamlet_data
:
std_logic_vector
(
c_longword_w
-
1
downto
0
);
-- 64 bit
signal
rx_beamlet_sosi
:
t_dp_sosi
:
=
c_dp_sosi_rst
;
signal
rx_beamlet_sop_cnt
:
natural
:
=
0
;
signal
rx_beamlet_eop_cnt
:
natural
:
=
0
;
-- [0 : 3] = X, Y, X, Y
signal
rx_beamlet_arr_re
:
t_sdp_beamlet_part_arr
;
signal
rx_beamlet_arr_im
:
t_sdp_beamlet_part_arr
;
signal
rx_beamlet_cnt
:
natural
;
signal
rx_beamlet_valid
:
std_logic
;
-- [0 : 4 * 488 * 2 - 1] = [0 : 3903]
signal
rx_packet_list_re
:
t_sdp_beamlet_packet_list
;
signal
rx_packet_list_im
:
t_sdp_beamlet_packet_list
;
begin
dp_rst
<=
'1'
,
'0'
after
c_dp_clk_period
*
7
;
dp_clk
<=
(
not
dp_clk
)
or
tb_end
after
c_dp_clk_period
/
2
;
...
...
@@ -115,11 +138,25 @@ begin
mm_clk
<=
(
not
mm_clk
)
or
tb_end
after
c_mm_clk_period
/
2
;
p_mm
:
process
variable
v_offset
:
natural
;
begin
proc_common_wait_until_low
(
dp_clk
,
mm_rst
);
proc_common_wait_some_cycles
(
mm_clk
,
10
);
----------------------------------------------------------------------------
-- Header fields
----------------------------------------------------------------------------
-- . Use sim default dst and src MAC, IP, UDP port from sdp_pkg.vhd and
-- based on c_gn_id
-- . use signed to fit 32 b in integer
proc_mem_mm_bus_wr
(
39
,
to_uint
(
c_cep_eth_src_mac
(
47
downto
32
)),
mm_clk
,
hdr_dat_cipo
,
hdr_dat_copi
);
proc_mem_mm_bus_wr
(
38
,
to_sint
(
c_cep_eth_src_mac
(
31
downto
0
)),
mm_clk
,
hdr_dat_cipo
,
hdr_dat_copi
);
proc_mem_mm_bus_wr
(
26
,
to_sint
(
c_cep_ip_src_addr
),
mm_clk
,
hdr_dat_cipo
,
hdr_dat_copi
);
proc_mem_mm_bus_wr
(
24
,
to_uint
(
c_cep_udp_src_port
),
mm_clk
,
hdr_dat_cipo
,
hdr_dat_copi
);
proc_mem_mm_bus_wr
(
41
,
to_uint
(
c_sdp_cep_eth_dst_mac
(
47
downto
32
)),
mm_clk
,
hdr_dat_cipo
,
hdr_dat_copi
);
proc_mem_mm_bus_wr
(
40
,
to_sint
(
c_sdp_cep_eth_dst_mac
(
31
downto
0
)),
mm_clk
,
hdr_dat_cipo
,
hdr_dat_copi
);
proc_mem_mm_bus_wr
(
25
,
to_sint
(
c_sdp_cep_ip_dst_addr
),
mm_clk
,
hdr_dat_cipo
,
hdr_dat_copi
);
proc_mem_mm_bus_wr
(
23
,
to_uint
(
c_sdp_cep_udp_dst_port
),
mm_clk
,
hdr_dat_cipo
,
hdr_dat_copi
);
----------------------------------------------------------------------------
-- Enable beamlet output (dp_xonoff)
----------------------------------------------------------------------------
...
...
@@ -135,7 +172,7 @@ begin
g_use_complex
=>
true
,
g_re_init
=>
0
,
g_im_init
=>
1
,
g_bsn_init
=>
TO_DP_BSN
(
0
),
g_bsn_init
=>
TO_DP_BSN
(
c_init_bsn
),
g_err_init
=>
0
,
-- not used
g_err_incr
=>
0
,
-- not used
g_channel_init
=>
0
,
-- not used
...
...
@@ -165,7 +202,8 @@ begin
generic
map
(
g_beamset_id
=>
g_beamset_id
,
g_use_transpose
=>
g_use_transpose
,
g_use_multiple_destinations
=>
g_use_multiple_destinations
g_use_multiple_destinations
=>
g_use_multiple_destinations
,
g_sim_force_bsn_error
=>
false
)
port
map
(
mm_clk
=>
mm_clk
,
...
...
@@ -189,7 +227,7 @@ begin
sdp_info
=>
c_exp_sdp_info
,
beamlet_scale
=>
c_exp_beamlet_scale_slv
,
gn_id
=>
c_
exp_
gn_id_slv
,
gn_id
=>
c_gn_id_slv
,
-- Source MAC/IP/UDP are not used, c_sdp_cep_hdr_field_sel selects MM programmable instead
eth_src_mac
=>
bdo_eth_src_mac
,
...
...
@@ -227,5 +265,66 @@ begin
hdr_fields_raw_arr
(
0
)
=>
rx_hdr_fields_raw
);
rx_sdp_cep_header
<=
func_sdp_map_cep_header
(
rx_hdr_fields_raw
);
-----------------------------------------------------------------------------
-- Beamlet offload packet header
-----------------------------------------------------------------------------
-- Counters to time expected cep_header fields per offload packet
p_test_counters
:
process
(
dp_clk
)
begin
if
rising_edge
(
dp_clk
)
then
-- Count rx_beamlet_sosi packets
if
rx_beamlet_sosi
.
sop
=
'1'
then
rx_beamlet_sop_cnt
<=
rx_beamlet_sop_cnt
+
1
;
-- early count
end
if
;
if
rx_beamlet_sosi
.
eop
=
'1'
then
rx_beamlet_eop_cnt
<=
rx_beamlet_eop_cnt
+
1
;
-- after count
end
if
;
end
if
;
end
process
;
-- Prepare exp_beamlet_header before rx_beamlet_sosi.eop, so that
-- p_verify_beamlet_header can verify it at rx_beamlet_sosi.eop.
exp_beamlet_header
<=
func_sdp_compose_cep_header
(
c_exp_ip_header_checksum
,
c_exp_sdp_info
,
c_gn_id
,
c_exp_payload_error
,
c_exp_beamlet_scale
,
c_exp_beamlet_index
,
exp_dp_bsn
);
rx_beamlet_header
<=
func_sdp_map_cep_header
(
rx_hdr_fields_raw
);
p_verify_beamlet_header
:
process
variable
v_bool
:
boolean
;
begin
wait
until
rising_edge
(
dp_clk
);
-- Prepare exp_sdp_cep_header at sop, so that it can be verified at eop
if
rx_beamlet_sosi
.
sop
=
'1'
then
-- Expected BSN increments by c_sdp_cep_nof_blocks_per_packet = 4 blocks
-- per packet
exp_dp_bsn
<=
c_init_bsn
+
rx_beamlet_sop_cnt
*
c_sdp_cep_nof_blocks_per_packet
;
end
if
;
-- Verify header at eop
if
rx_beamlet_sosi
.
eop
=
'1'
then
v_bool
:
=
func_sdp_verify_cep_header
(
rx_beamlet_header
,
exp_beamlet_header
);
end
if
;
end
process
;
-----------------------------------------------------------------------------
-- Beamlet offload packet data
-----------------------------------------------------------------------------
-- To view the 64 bit 10GbE offload data more easily in the Wave window
rx_beamlet_data
<=
rx_beamlet_sosi
.
data
(
c_longword_w
-
1
downto
0
);
proc_sdp_cep_rx_beamlets
(
dp_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
tb
;
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment