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
0d5503a7
Commit
0d5503a7
authored
4 years ago
by
Pieter Donker
Browse files
Options
Downloads
Patches
Plain Diff
L2SDP-200
, added test to tb_dp_block_from_mm.vhd
parent
74436c11
No related branches found
No related tags found
2 merge requests
!100
Removed text for XSub that is now written in Confluence Subband correlator...
,
!67
Resolve L2SDP-200
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
libraries/base/dp/tb/vhdl/tb_dp_block_from_mm.vhd
+54
-23
54 additions, 23 deletions
libraries/base/dp/tb/vhdl/tb_dp_block_from_mm.vhd
with
54 additions
and
23 deletions
libraries/base/dp/tb/vhdl/tb_dp_block_from_mm.vhd
+
54
−
23
View file @
0d5503a7
...
...
@@ -59,10 +59,10 @@ END tb_dp_block_from_mm;
ARCHITECTURE
tb
OF
tb_dp_block_from_mm
IS
CONSTANT
c_nof_blocks
:
NATURAL
:
=
g_step_size
/
g_data_size
;
CONSTANT
c_ram_data_size
:
NATURAL
:
=
g_nof_data
*
g_data_size
*
c_nof_blocks
;
CONSTANT
c_ram_data_size
:
NATURAL
:
=
g_nof_data
*
g_data_size
*
c_nof_blocks
+
g_data_size
;
-- Size is 1 address more than needed, to check for oversized blocks.
CONSTANT
c_ram_adr_w
:
NATURAL
:
=
ceil_log2
(
c_ram_data_size
);
CONSTANT
c_ram
:
t_c_mem
:
=
(
1
,
c_ram_adr_w
,
c_word_w
,
2
**
c_ram_adr_w
,
'0'
);
CONSTANT
c_ram
:
t_c_mem
:
=
(
1
,
c_ram_adr_w
,
c_word_w
,
2
**
c_ram_adr_w
,
'0'
);
SIGNAL
tb_end
:
STD_LOGIC
:
=
'0'
;
SIGNAL
clk
:
STD_LOGIC
:
=
'1'
;
...
...
@@ -83,16 +83,22 @@ ARCHITECTURE tb OF tb_dp_block_from_mm IS
SIGNAL
wr_miso
:
t_mem_miso
;
-- needed for init and verify
SIGNAL
ram_wr_en
:
STD_LOGIC
:
=
'0'
;
SIGNAL
ram_wr_adr
:
STD_LOGIC_VECTOR
(
c_ram
.
adr_w
-1
DOWNTO
0
)
:
=
(
OTHERS
=>
'0'
);
SIGNAL
ram_wr_dat
:
STD_LOGIC_VECTOR
(
c_ram
.
dat_w
-1
DOWNTO
0
)
:
=
(
OTHERS
=>
'0'
);
SIGNAL
ram_rd_en
:
STD_LOGIC
:
=
'0'
;
SIGNAL
ram_rd_adr
:
STD_LOGIC_VECTOR
(
c_ram
.
adr_w
-1
DOWNTO
0
);
SIGNAL
ram_rd_dat
:
STD_LOGIC_VECTOR
(
c_ram
.
dat_w
-1
DOWNTO
0
);
SIGNAL
ram_rd_val
:
STD_LOGIC
;
SIGNAL
init_done
:
STD_LOGIC
:
=
'0'
;
SIGNAL
transfer_done
:
STD_LOGIC
:
=
'0'
;
SIGNAL
ram_wr_en
:
STD_LOGIC
:
=
'0'
;
SIGNAL
ram_wr_adr
:
STD_LOGIC_VECTOR
(
c_ram
.
adr_w
-1
DOWNTO
0
)
:
=
(
OTHERS
=>
'0'
);
SIGNAL
ram_wr_dat
:
STD_LOGIC_VECTOR
(
c_ram
.
dat_w
-1
DOWNTO
0
)
:
=
(
OTHERS
=>
'0'
);
SIGNAL
ram_rd_en
:
STD_LOGIC
:
=
'0'
;
SIGNAL
ram_rd_adr
:
STD_LOGIC_VECTOR
(
c_ram
.
adr_w
-1
DOWNTO
0
);
SIGNAL
ram_rd_dat
:
STD_LOGIC_VECTOR
(
c_ram
.
dat_w
-1
DOWNTO
0
);
SIGNAL
ram_rd_val
:
STD_LOGIC
;
SIGNAL
ram_prev_rd_val
:
STD_LOGIC
;
SIGNAL
rd_nxt_data
:
NATURAL
:
=
0
;
SIGNAL
rd_data
:
NATURAL
:
=
0
;
SIGNAL
stop_address
:
NATURAL
:
=
0
;
SIGNAL
init_done
:
STD_LOGIC
:
=
'0'
;
SIGNAL
transfer_done
:
STD_LOGIC
:
=
'0'
;
BEGIN
...
...
@@ -110,7 +116,7 @@ BEGIN
ram_wr_en
<=
'0'
;
proc_common_wait_until_low
(
clk
,
rst
);
proc_common_wait_some_cycles
(
clk
,
10
);
FOR
i
IN
0
TO
c_ram_data_size
-
1
LOOP
FOR
i
IN
0
TO
c_ram_data_size
-
1
LOOP
-- Write 1 address more than needed.
ram_wr_adr
<=
TO_UVEC
(
i
,
c_ram
.
adr_w
);
ram_wr_dat
<=
TO_UVEC
(
i
,
c_ram
.
dat_w
);
ram_wr_en
<=
'1'
;
...
...
@@ -128,25 +134,40 @@ BEGIN
start_address
<=
0
;
proc_common_wait_until_high
(
clk
,
init_done
);
FOR
i
IN
0
TO
c_nof_blocks
-1
LOOP
start_address
<=
i
*
g_data_size
;
start_address
<=
i
*
g_data_size
;
start_pulse
<=
'1'
;
proc_common_wait_some_cycles
(
clk
,
1
);
start_pulse
<=
'0'
;
--stop_address <= start_address + g_nof_data * g_step_size - g_data_size - 1;
stop_address
<=
start_address
+
(
g_nof_data
-
1
)
*
g_step_size
+
g_data_size
-
1
;
proc_common_wait_until_high
(
clk
,
block_done
);
END
LOOP
;
proc_common_wait_some_cycles
(
clk
,
1
);
--
n
eeded for dp_block_to_mm to proccess last word.
proc_common_wait_some_cycles
(
clk
,
1
);
--
N
eeded for dp_block_to_mm to proccess last word.
transfer_done
<=
'1'
;
WAIT
;
END
PROCESS
;
p_verify_read
:
PROCESS
p_verify_transfer
:
PROCESS
BEGIN
proc_common_wait_until_high
(
clk
,
init_done
);
WHILE
tb_end
=
'0'
LOOP
WAIT
UNTIL
rising_edge
(
clk
);
IF
block_done
=
'1'
THEN
ASSERT
stop_address
=
TO_UINT
(
wr_mosi
.
wrdata
(
c_ram
.
dat_w
-1
DOWNTO
0
))
REPORT
"wrong data at mm_done signal, must be same as stop_address"
SEVERITY
ERROR
;
END
IF
;
END
LOOP
;
WAIT
;
END
PROCESS
;
p_read_ram
:
PROCESS
BEGIN
ram_rd_en
<=
'0'
;
ram_rd_adr
<=
TO_UVEC
(
0
,
c_ram
.
adr_w
);
proc_common_wait_until_high
(
clk
,
transfer_done
);
ram_rd_en
<=
'1'
;
FOR
i
IN
0
TO
c_ram_data_size
-
1
LOOP
FOR
i
IN
0
TO
c_ram_data_size
-
1
LOOP
-- Ask for 1 address more than needed.
ram_rd_adr
<=
TO_UVEC
(
i
,
c_ram
.
adr_w
);
proc_common_wait_some_cycles
(
clk
,
1
);
END
LOOP
;
...
...
@@ -157,15 +178,25 @@ BEGIN
WAIT
;
END
PROCESS
;
p_verify_check
:
PROCESS
VARIABLE
v_cnt
:
NATURAL
:
=
0
;
ram_prev_rd_val
<=
ram_rd_val
WHEN
rising_edge
(
clk
);
p_verify_read_ram_data
:
PROCESS
BEGIN
--stop_address <= g_nof_data * g_step_size - 1;
rd_nxt_data
<=
1
;
proc_common_wait_until_high
(
clk
,
transfer_done
);
WHILE
tb_end
=
'0'
LOOP
WAIT
UNTIL
rising_edge
(
clk
);
IF
ram_rd_val
=
'1'
THEN
ASSERT
v_cnt
=
TO_UINT
(
ram_rd_dat
)
REPORT
"RAM values not equal"
SEVERITY
ERROR
;
v_cnt
:
=
v_cnt
+
1
;
rd_data
<=
TO_UINT
(
ram_rd_dat
);
IF
rd_data
>
0
THEN
IF
ram_rd_val
=
'1'
THEN
ASSERT
rd_data
=
rd_nxt_data
REPORT
"wrong order of RAM values"
SEVERITY
ERROR
;
ASSERT
rd_data
<=
stop_address
REPORT
"wrong RAM values, greater then block size"
SEVERITY
ERROR
;
rd_nxt_data
<=
rd_nxt_data
+
1
;
END
IF
;
IF
ram_rd_val
=
'0'
AND
ram_prev_rd_val
=
'1'
THEN
-- If ram_rd_val goes from hi tot lo.
ASSERT
rd_data
=
stop_address
REPORT
"wrong last RAM values, not same as block size"
SEVERITY
ERROR
;
END
IF
;
END
IF
;
END
LOOP
;
WAIT
;
...
...
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