Skip to content
GitLab
Explore
Sign in
Register
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
GitLab community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
RTSD
HDL
Commits
60a0a5a4
Commit
60a0a5a4
authored
1 year ago
by
Eric Kooistra
Browse files
Options
Downloads
Patches
Plain Diff
Use c_revision_select.use_bdo_transpose. Add p_verify_rx_beamlet_list.
parent
1e126f8c
No related branches found
No related tags found
1 merge request
!348
Use use_bdo_transpose = true in c_bf revision. Test use_bdo_transpose = false...
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_bf/tb_lofar2_unb2c_sdp_station_bf.vhd
+81
-37
81 additions, 37 deletions
...2_unb2c_sdp_station_bf/tb_lofar2_unb2c_sdp_station_bf.vhd
with
81 additions
and
37 deletions
applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_bf/tb_lofar2_unb2c_sdp_station_bf.vhd
+
81
−
37
View file @
60a0a5a4
...
...
@@ -121,7 +121,11 @@
-- # Manually add missing signals and constants using objects in GUI
-- > add wave -position insertpoint \
-- sim:/tb_lofar2_unb2c_sdp_station_bf/sp_ssts_arr2 \
-- sim:/tb_lofar2_unb2c_sdp_station_bf/bsts_arr2
-- sim:/tb_lofar2_unb2c_sdp_station_bf/bsts_arr2 \
-- sim:/tb_lofar2_unb2c_sdp_station_bf/rx_packet_list_re \
-- sim:/tb_lofar2_unb2c_sdp_station_bf/rx_packet_list_im \
-- sim:/tb_lofar2_unb2c_sdp_station_bf/rx_reordered_list_re \
-- sim:/tb_lofar2_unb2c_sdp_station_bf/rx_reordered_list_im
-- > run -a
-- View beamlet output as radix-decimal
-- Takes about 1h 1 m when g_read_all_* = FALSE
...
...
@@ -151,6 +155,7 @@ use unb2c_board_lib.unb2c_board_pkg.all;
use
lofar2_sdp_lib
.
sdp_pkg
.
all
;
use
lofar2_sdp_lib
.
tb_sdp_pkg
.
all
;
use
tech_pll_lib
.
tech_pll_component_pkg
.
all
;
use
lofar2_unb2c_sdp_station_lib
.
lofar2_unb2c_sdp_station_pkg
.
all
;
entity
tb_lofar2_unb2c_sdp_station_bf
is
generic
(
...
...
@@ -178,21 +183,22 @@ end tb_lofar2_unb2c_sdp_station_bf;
architecture
tb
of
tb_lofar2_unb2c_sdp_station_bf
is
-- Revision parameters
constant
c_design_name
:
string
:
=
"lofar2_unb2c_sdp_station_bf"
;
constant
c_revision_select
:
t_lofar2_unb2c_sdp_station_config
:
=
func_sel_revision_rec
(
c_design_name
);
constant
c_sim
:
boolean
:
=
true
;
constant
c_unb_nr
:
natural
:
=
0
;
-- UniBoard 0
constant
c_node_nr
:
natural
:
=
0
;
constant
c_gn_index
:
natural
:
=
c_unb_nr
*
4
+
c_node_nr
;
-- this node GN
constant
c_init_bsn
:
natural
:
=
17
;
-- some recognizable value >= 0
constant
c_bsn_latency
:
natural
:
=
5
;
-- used to time stimuli_done
constant
c_use_transpose
:
boolean
:
=
fal
se
;
constant
c_use_
bdo_
transpose
:
boolean
:
=
c_revision_select
.
use_bdo_transpo
se
;
constant
c_id
:
std_logic_vector
(
7
downto
0
)
:
=
TO_UVEC
(
c_gn_index
,
8
);
constant
c_version
:
std_logic_vector
(
1
downto
0
)
:
=
"00"
;
constant
c_fw_version
:
t_unb2c_board_fw_version
:
=
(
1
,
0
);
constant
c_mac_15_0
:
std_logic_vector
(
15
downto
0
)
:
=
TO_UVEC
(
c_unb_nr
,
8
)
&
TO_UVEC
(
c_node_nr
,
8
);
constant
c_ip_15_0
:
std_logic_vector
(
15
downto
0
)
:
=
TO_UVEC
(
c_unb_nr
,
8
)
&
TO_UVEC
(
c_node_nr
+
1
,
8
);
-- +1 to avoid IP = *.*.*.0
constant
c_eth_clk_period
:
time
:
=
8
ns
;
-- 125 MHz XO on UniBoard
constant
c_ext_clk_period
:
time
:
=
5
ns
;
constant
c_mm_clk_period
:
time
:
=
10
ns
;
-- 100 MHz internal mm_clk
...
...
@@ -355,12 +361,17 @@ architecture tb of tb_lofar2_unb2c_sdp_station_bf is
constant
c_mm_file_reg_sdp_info
:
string
:
=
mmf_unb_file_prefix
(
c_unb_nr
,
c_node_nr
)
&
"REG_SDP_INFO"
;
constant
c_mm_file_reg_hdr_dat
:
string
:
=
mmf_unb_file_prefix
(
c_unb_nr
,
c_node_nr
)
&
"REG_HDR_DAT"
;
-- c_sdp_N_beamsets = 2 beamsets
-- Tb BSN moments
constant
c_stimuli_done_bsn
:
natural
:
=
c_init_bsn
+
c_bsn_latency
+
c_nof_block_per_sync
*
3
;
constant
c_verify_rx_beamlet_list_bsn
:
natural
:
=
c_stimuli_done_bsn
-
c_nof_block_per_sync
;
-- Tb
signal
stimuli_done
:
std_logic
:
=
'0'
;
signal
tb_almost_end
:
std_logic
:
=
'0'
;
signal
tb_end
:
std_logic
:
=
'0'
;
signal
tb_clk
:
std_logic
:
=
'0'
;
signal
rd_data
:
std_logic_vector
(
c_32
-
1
downto
0
);
signal
rd_data_bsn
:
std_logic_vector
(
c_32
-
1
downto
0
);
signal
dest_rst
:
std_logic
:
=
'1'
;
-- use separate destination rst for Rx 10GbE in tb
signal
pps_rst
:
std_logic
:
=
'1'
;
-- use separate reset to release the PPS generator
...
...
@@ -447,8 +458,8 @@ architecture tb of tb_lofar2_unb2c_sdp_station_bf is
signal
rx_beamlet_eop_cnt
:
natural
:
=
0
;
-- [0 : 3] = X, Y, X, Y
signal
rx_beamlet_arr_re
:
t_sdp_beamlet_
longword_list
;
signal
rx_beamlet_arr_im
:
t_sdp_beamlet_
longword_list
;
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
;
...
...
@@ -458,9 +469,17 @@ architecture tb of tb_lofar2_unb2c_sdp_station_bf is
signal
rx_reordered_list_re
:
t_sdp_beamlet_packet_list
;
signal
rx_reordered_list_im
:
t_sdp_beamlet_packet_list
;
-- [0 : 488 * 2 - 1] = [0 : 975]
-- Recover original beamlet order per block, either by using c_use_bdo_transpose
-- = false or by using c_use_bdo_transpose and func_sdp_bdo_transpose_packet().
-- List: [0 : 488 * 2 - 1] = [0 : 975]
-- . X part at even indices
-- . Y part at odd indices
signal
prev_rx_beamlet_list_re
:
t_sdp_beamlet_block_list
;
signal
prev_rx_beamlet_list_im
:
t_sdp_beamlet_block_list
;
signal
rx_beamlet_list_re
:
t_sdp_beamlet_block_list
;
signal
rx_beamlet_list_im
:
t_sdp_beamlet_block_list
;
signal
rx_beamlet_list_val
:
std_logic
;
signal
verify_rx_beamlet_list
:
std_logic
:
=
'0'
;
signal
rx_beamlet_x_output_re
:
integer
;
signal
rx_beamlet_x_output_im
:
integer
;
...
...
@@ -516,7 +535,7 @@ begin
------------------------------------------------------------------------------
u_lofar_unb2c_sdp_station_bf
:
entity
lofar2_unb2c_sdp_station_lib
.
lofar2_unb2c_sdp_station
generic
map
(
g_design_name
=>
"lofar2_unb2c_sdp_station_bf"
,
g_design_name
=>
c_design_name
,
g_design_note
=>
""
,
g_sim
=>
c_sim
,
g_sim_unb_nr
=>
c_unb_nr
,
...
...
@@ -683,7 +702,9 @@ begin
---- Set and check BF per beamset
------------------------------------------------------------------------------
for
bset
in
0
to
c_sdp_N_beamsets
-
1
loop
----------------------------------------------------------------------------
-- MM beamlet_scale
----------------------------------------------------------------------------
-- . write
v_offset
:
=
bset
*
c_mm_span_reg_bf_scale
;
mmf_mm_bus_wr
(
c_mm_file_reg_bf_scale
,
v_offset
+
0
,
c_exp_beamlet_scale
,
tb_clk
);
...
...
@@ -695,6 +716,9 @@ begin
proc_common_wait_some_cycles
(
tb_clk
,
1
);
assert
TO_UINT
(
rd_beamlet_scale
)
=
c_exp_beamlet_scale
report
"Wrong MM read beamlet_scale for beamset "
&
natural
'image
(
bset
)
severity
ERROR
;
----------------------------------------------------------------------------
-- Set CEP beamlets output MAC,IP,UDP port
----------------------------------------------------------------------------
-- CEP beamlet output header
-- c_sdp_cep_hdr_field_arr : t_common_field_arr(c_sdp_cep_nof_hdr_fields-1 DOWNTO 0) := (
-- 40 "eth_dst_mac" ), "RW", 48, field_default(c_sdp_cep_eth_dst_mac) ),
...
...
@@ -1018,7 +1042,7 @@ begin
----------------------------------------------------------------------------
-- read BSN low, this is the wait until condition
mmf_mm_wait_until_value
(
c_mm_file_reg_bsn_scheduler_wg
,
0
,
"UNSIGNED"
,
rd_data
,
">="
,
c_
init_bsn
+
c_bsn_latency
+
c_nof_block_per_sync
*
3
,
"UNSIGNED"
,
rd_data
_bsn
,
">="
,
c_
stimuli_done_bsn
,
c_sdp_T_sub
,
tb_clk
);
-- Stimuli done, now verify results at end of test
...
...
@@ -1369,41 +1393,61 @@ begin
-- Wait until end of a beamlet packet
wait
until
rising_edge
(
ext_clk
);
-- to avoid Modelsim warning: (vcom-1090)
proc_common_wait_until_hi_lo
(
ext_clk
,
rx_beamlet_sosi
.
eop
);
-- to reduce simulation effort
rx_reordered_list_re
<=
func_sdp_transpose_packet
(
c_sdp_cep_nof_blocks_per_packet
,
rx_reordered_list_re
<=
func_sdp_
bdo_
transpose_packet
(
c_sdp_cep_nof_blocks_per_packet
,
c_sdp_cep_nof_beamlets_per_block
,
rx_packet_list_re
);
rx_reordered_list_im
<=
func_sdp_transpose_packet
(
c_sdp_cep_nof_blocks_per_packet
,
rx_reordered_list_im
<=
func_sdp_
bdo_
transpose_packet
(
c_sdp_cep_nof_blocks_per_packet
,
c_sdp_cep_nof_beamlets_per_block
,
rx_packet_list_im
);
end
process
;
p_rx_beamlet_list
:
process
constant
c_N
:
natural
:
=
c_sdp_cep_nof_beamlets_per_block
*
c_sdp_N_pol_bf
;
begin
-- Wait until p_rx_reordered_list has updated
rx_beamlet_list_val
<=
'0'
;
-- Wait until after p_rx_reordered_list has updated
proc_common_wait_until_hi_lo
(
ext_clk
,
rx_beamlet_sosi
.
eop
);
wait
until
rising_edge
(
ext_clk
);
-- Copy first block from rx_packet_list into rx_beamlet_list of one block.
if
c_use_transpose
then
-- transposed beamlet output order
rx_beamlet_list_re
<=
rx_reordered_list_re
(
0
to
c_sdp_cep_nof_beamlets_per_block
*
c_sdp_N_pol_bf
-
1
);
rx_beamlet_list_im
<=
rx_reordered_list_im
(
0
to
c_sdp_cep_nof_beamlets_per_block
*
c_sdp_N_pol_bf
-
1
);
-- Use same rx_beamlet_list to show all 4 blocks of a packet in time, to
-- ease viewing the blocks in the wave window.
for
blk
in
0
to
c_sdp_cep_nof_blocks_per_packet
-
1
loop
-- Copy block blk from rx_packet_list into rx_beamlet_list of one block.
if
c_use_bdo_transpose
then
-- undone transposed beamlet output order
rx_beamlet_list_re
<=
rx_reordered_list_re
(
blk
*
c_N
to
(
blk
+
1
)
*
c_N
-
1
);
rx_beamlet_list_im
<=
rx_reordered_list_im
(
blk
*
c_N
to
(
blk
+
1
)
*
c_N
-
1
);
else
-- identity beamlet output order
-- . X at even indices
-- . Y at odd indices
rx_beamlet_list_re
<=
rx_packet_list_re
(
0
to
c_sdp_cep_nof_beamlets_per_block
*
c_sdp_N_pol_bf
-
1
);
rx_beamlet_list_im
<=
rx_packet_list_im
(
0
to
c_sdp_cep_nof_beamlets_per_block
*
c_sdp_N_pol_bf
-
1
);
rx_beamlet_list_re
<=
rx_packet_list_re
(
blk
*
c_N
to
(
blk
+
1
)
*
c_N
-
1
);
rx_beamlet_list_im
<=
rx_packet_list_im
(
blk
*
c_N
to
(
blk
+
1
)
*
c_N
-
1
);
end
if
;
rx_beamlet_list_val
<=
'1'
;
wait
until
rising_edge
(
ext_clk
);
end
loop
;
end
process
;
-- Verify that beamlet values remain stable in time
p_verify_rx_beamlet_list
:
process
-- Verify that beamlet values remain stable in time, so same beamlet value in each time block
verify_rx_beamlet_list
<=
'1'
when
unsigned
(
rd_data_bsn
)
>
c_verify_rx_beamlet_list_bsn
else
'0'
;
p_verify_rx_beamlet_list
:
process
(
ext_clk
)
begin
-- . After some time all rx blocks should have same beamlet values, so
if
rising_edge
(
ext_clk
)
then
-- Wait until p_rx_beamlet_list is valid
if
rx_beamlet_list_val
=
'1'
then
-- Maintain previous x_beamlet_list for comparision
prev_rx_beamlet_list_re
<=
rx_beamlet_list_re
;
prev_rx_beamlet_list_im
<=
rx_beamlet_list_im
;
-- After some time all rx blocks should have same beamlet values, so
-- then rx_beamlet_list then does not change in time and the other
-- blocks should be the same as the first block.
-- TODO
if
verify_rx_beamlet_list
=
'1'
then
assert
rx_beamlet_list_re
=
prev_rx_beamlet_list_re
report
"Wrong: rx_beamlet_list_re differs from previous block"
severity
ERROR
;
assert
rx_beamlet_list_im
=
prev_rx_beamlet_list_im
report
"Wrong: rx_beamlet_list_im differs from previous block"
severity
ERROR
;
end
if
;
end
if
;
end
if
;
end
process
;
-- get rx_beamlet for comparision with c_exp_beamlet
...
...
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