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
e77dbedf
Commit
e77dbedf
authored
3 years ago
by
Eric Kooistra
Browse files
Options
Downloads
Patches
Plain Diff
Made verify_sync and expected_out_enable more simple and robust.
parent
53f09928
No related branches found
No related tags found
1 merge request
!132
Renamed proc_dp_verify_sync_v2() into overloaded proc_dp_verify_sync() and...
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
libraries/base/dp/tb/vhdl/tb_dp_bsn_sync_scheduler.vhd
+35
-66
35 additions, 66 deletions
libraries/base/dp/tb/vhdl/tb_dp_bsn_sync_scheduler.vhd
with
35 additions
and
66 deletions
libraries/base/dp/tb/vhdl/tb_dp_bsn_sync_scheduler.vhd
+
35
−
66
View file @
e77dbedf
...
@@ -40,9 +40,9 @@
...
@@ -40,9 +40,9 @@
--
--
-- Development steps:
-- Development steps:
-- . Step 1 ~1 day work (idea started earlier, so requirements were clear),
-- . Step 1 ~1 day work (idea started earlier, so requirements were clear),
-- steps 2,5 ~
1.5
days work (fixing details and verifying all features),
-- steps 2,5 ~
2
days work (fixing details and verifying all features),
-- steps 3,4 ~
0.5
day work,
-- steps 3,4 ~
1
day work,
-- total ~
3
days work spent in ~ 1 week.
-- total ~
4
days work spent in ~ 1 week.
-- 1a Draft design description of dp_bsn_sync_scheduler
-- 1a Draft design description of dp_bsn_sync_scheduler
-- b Initial implementation that compiles
-- b Initial implementation that compiles
-- 2a Initial tb using u_stimuli to generate in_sosi and using p_stimuli
-- 2a Initial tb using u_stimuli to generate in_sosi and using p_stimuli
...
@@ -130,7 +130,7 @@ ARCHITECTURE tb OF tb_dp_bsn_sync_scheduler IS
...
@@ -130,7 +130,7 @@ ARCHITECTURE tb OF tb_dp_bsn_sync_scheduler IS
SIGNAL
ctrl_enable_evt
:
STD_LOGIC
:
=
'0'
;
SIGNAL
ctrl_enable_evt
:
STD_LOGIC
:
=
'0'
;
SIGNAL
ctrl_interval_size
:
NATURAL
:
=
g_nof_samples_per_output_sync
;
SIGNAL
ctrl_interval_size
:
NATURAL
:
=
g_nof_samples_per_output_sync
;
SIGNAL
ctrl_start_bsn
:
STD_LOGIC_VECTOR
(
c_bsn_w
-1
DOWNTO
0
)
:
=
(
OTHERS
=>
'0'
);
SIGNAL
ctrl_start_bsn
:
STD_LOGIC_VECTOR
(
c_bsn_w
-1
DOWNTO
0
)
:
=
(
OTHERS
=>
'0'
);
SIGNAL
mon_
input_
current_bsn
:
STD_LOGIC_VECTOR
(
c_bsn_w
-1
DOWNTO
0
);
SIGNAL
mon_curren
t_inpu
t_bsn
:
STD_LOGIC_VECTOR
(
c_bsn_w
-1
DOWNTO
0
);
SIGNAL
mon_input_bsn_at_sync
:
STD_LOGIC_VECTOR
(
c_bsn_w
-1
DOWNTO
0
);
SIGNAL
mon_input_bsn_at_sync
:
STD_LOGIC_VECTOR
(
c_bsn_w
-1
DOWNTO
0
);
SIGNAL
mon_output_enable
:
STD_LOGIC
;
SIGNAL
mon_output_enable
:
STD_LOGIC
;
SIGNAL
mon_output_sync_bsn
:
STD_LOGIC_VECTOR
(
c_bsn_w
-1
DOWNTO
0
);
SIGNAL
mon_output_sync_bsn
:
STD_LOGIC_VECTOR
(
c_bsn_w
-1
DOWNTO
0
);
...
@@ -161,7 +161,6 @@ ARCHITECTURE tb OF tb_dp_bsn_sync_scheduler IS
...
@@ -161,7 +161,6 @@ ARCHITECTURE tb OF tb_dp_bsn_sync_scheduler IS
SIGNAL
verifying_sync_equal
:
STD_LOGIC
:
=
'0'
;
SIGNAL
verifying_sync_equal
:
STD_LOGIC
:
=
'0'
;
SIGNAL
prev_out_enable
:
STD_LOGIC
:
=
'0'
;
SIGNAL
prev_out_enable
:
STD_LOGIC
:
=
'0'
;
SIGNAL
pending_out_enable
:
STD_LOGIC
:
=
'0'
;
SIGNAL
pending_out_disable
:
STD_LOGIC
:
=
'0'
;
SIGNAL
pending_out_disable
:
STD_LOGIC
:
=
'0'
;
SIGNAL
expected_out_enable
:
STD_LOGIC
:
=
'0'
;
SIGNAL
expected_out_enable
:
STD_LOGIC
:
=
'0'
;
SIGNAL
expecting_out_start
:
STD_LOGIC
:
=
'0'
;
SIGNAL
expecting_out_start
:
STD_LOGIC
:
=
'0'
;
...
@@ -358,56 +357,39 @@ BEGIN
...
@@ -358,56 +357,39 @@ BEGIN
END
IF
;
END
IF
;
END
PROCESS
;
END
PROCESS
;
p_expected_out_enable
:
PROCESS
(
ctrl_enable
,
ctrl_enable_evt
,
in_sosi
,
ctrl_start_bsn
,
out_enable
,
pending_out_enable
,
pending_out_disable
,
hold_out_eop
)
-- Determine expected out_enable
p_expected_out_enable
:
PROCESS
(
ctrl_enable
,
ctrl_enable_evt
,
in_sosi
,
ctrl_start_bsn
,
out_enable
,
pending_out_disable
,
hold_out_eop
)
BEGIN
BEGIN
-- Determine expected out_enable
-- Expect output disable after ctrl_enable_evt
IF
ctrl_enable
=
'1'
THEN
IF
ctrl_enable_evt
=
'1'
THEN
-- Detect output enable event
IF
out_enable
=
'0'
THEN
IF
ctrl_enable_evt
=
'1'
THEN
-- Output is already disabled
-- Determine whether the output enable event is scheduled in the future
expected_out_enable
<=
'0'
;
IF
UNSIGNED
(
in_sosi
.
bsn
)
<
UNSIGNED
(
ctrl_start_bsn
)
THEN
ELSE
pending_out_enable
<=
'1'
;
-- Output is enabled, so this is a re-enable event.
IF
hold_out_eop
=
'1'
THEN
-- Detect output re-enable event, to plan output disable before re-enable
expected_out_enable
<=
'0'
;
-- end of block, so output can disable immediately
IF
out_enable
=
'1'
THEN
ELSE
IF
hold_out_eop
=
'1'
THEN
pending_out_disable
<=
'1'
;
-- plan output disable before re-enable
expected_out_enable
<=
'0'
;
END
IF
;
ELSE
END
IF
;
pending_out_disable
<=
'1'
;
END
IF
;
END
IF
;
END
IF
;
END
IF
;
-- else ignore output enable event in the past
END
IF
;
-- Enable expected_out_enable at start BSN (and at in_sosi.sop)
IF
pending_out_disable
<=
'1'
THEN
IF
pending_out_enable
=
'1'
THEN
IF
hold_out_eop
=
'1'
THEN
IF
UNSIGNED
(
in_sosi
.
bsn
)
>=
UNSIGNED
(
ctrl_start_bsn
)
THEN
expected_out_enable
<=
'0'
;
-- end of block, so output can disable
expected_out_enable
<=
'1'
;
pending_out_disable
<=
'0'
;
pending_out_enable
<=
'0'
;
END
IF
;
END
IF
;
ELSE
-- Immediately remove any pending output enable
pending_out_enable
<=
'0'
;
-- Detect output disable event, to plan output disable
IF
ctrl_enable_evt
=
'1'
THEN
IF
hold_out_eop
=
'1'
THEN
expected_out_enable
<=
'0'
;
ELSE
pending_out_disable
<=
'1'
;
END
IF
;
END
IF
;
END
IF
;
END
IF
;
END
IF
;
-- Expected out_enable disabled between block boundaries
-- Expect output enable at start BSN
IF
pending_out_disable
=
'1'
AND
hold_out_eop
=
'1'
THEN
IF
ctrl_enable
=
'1'
THEN
expected_out_enable
<=
'0'
;
IF
UNSIGNED
(
in_sosi
.
bsn
)
>=
UNSIGNED
(
ctrl_start_bsn
)
THEN
pending_out_disable
<=
'0'
;
expected_out_enable
<=
'1'
;
END
IF
;
END
IF
;
END
IF
;
END
PROCESS
;
END
PROCESS
;
p_verify_out_enable
:
PROCESS
(
clk
)
p_verify_out_enable
:
PROCESS
(
clk
)
BEGIN
BEGIN
-- Use registered values to compare, to avoid combinatorial differences
-- Use registered values to compare, to avoid combinatorial differences
...
@@ -470,7 +452,7 @@ BEGIN
...
@@ -470,7 +452,7 @@ BEGIN
REPORT
"Unexpected out_start"
SEVERITY
ERROR
;
REPORT
"Unexpected out_start"
SEVERITY
ERROR
;
END
IF
;
END
IF
;
-- Check when out_enable goes high
whether out_start is missed
-- Check
that out_start is active
when out_enable goes high
IF
out_start
=
'0'
AND
out_enable
=
'1'
AND
prev_out_enable
=
'0'
THEN
IF
out_start
=
'0'
AND
out_enable
=
'1'
AND
prev_out_enable
=
'0'
THEN
REPORT
"Missed out_start"
SEVERITY
ERROR
;
REPORT
"Missed out_start"
SEVERITY
ERROR
;
END
IF
;
END
IF
;
...
@@ -509,20 +491,7 @@ BEGIN
...
@@ -509,20 +491,7 @@ BEGIN
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
-- . Verify out_sosi.sync interval
-- . Verify out_sosi.sync interval
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
p_verify_sync
:
PROCESS
(
clk
)
verify_sync
<=
NOT
recover_from_in_lost
;
BEGIN
IF
rising_edge
(
clk
)
THEN
IF
ctrl_enable
=
'1'
AND
ctrl_enable_evt
=
'1'
THEN
verify_sync
<=
'0'
;
-- request for new sync interval
ELSIF
out_start
=
'1'
THEN
verify_sync
<=
'1'
;
-- new sync interval has started;
END
IF
;
IF
recover_from_in_lost
=
'1'
THEN
verify_sync
<=
'0'
;
-- after long input lost, first output_sync may get lost during catch up
END
IF
;
END
IF
;
END
PROCESS
;
proc_dp_verify_sync
(
TO_UINT
(
ctrl_start_bsn
),
proc_dp_verify_sync
(
TO_UINT
(
ctrl_start_bsn
),
ctrl_interval_size
,
ctrl_interval_size
,
...
@@ -553,8 +522,8 @@ BEGIN
...
@@ -553,8 +522,8 @@ BEGIN
IF
rising_edge
(
clk
)
THEN
IF
rising_edge
(
clk
)
THEN
IF
recover_from_in_lost
=
'0'
THEN
IF
recover_from_in_lost
=
'0'
THEN
IF
out_sop_dly
=
'1'
THEN
IF
out_sop_dly
=
'1'
THEN
v_bsn_min
:
=
TO_UINT
(
mon_
input_
current_bsn
)
-
1
;
v_bsn_min
:
=
TO_UINT
(
mon_curren
t_inpu
t_bsn
)
-
1
;
v_bsn_max
:
=
TO_UINT
(
mon_
input_
current_bsn
)
+
c_output_nof_blocks_min
+
1
;
v_bsn_max
:
=
TO_UINT
(
mon_curren
t_inpu
t_bsn
)
+
c_output_nof_blocks_min
+
1
;
ASSERT
TO_UINT
(
mon_output_sync_bsn
)
>=
v_bsn_min
ASSERT
TO_UINT
(
mon_output_sync_bsn
)
>=
v_bsn_min
REPORT
"Wrong: mon_output_sync_bsn is behind ("
&
int_to_str
(
TO_UINT
(
mon_output_sync_bsn
))
&
" < "
&
int_to_str
(
v_bsn_min
)
&
")"
SEVERITY
ERROR
;
REPORT
"Wrong: mon_output_sync_bsn is behind ("
&
int_to_str
(
TO_UINT
(
mon_output_sync_bsn
))
&
" < "
&
int_to_str
(
v_bsn_min
)
&
")"
SEVERITY
ERROR
;
...
@@ -562,7 +531,7 @@ BEGIN
...
@@ -562,7 +531,7 @@ BEGIN
REPORT
"Wrong: mon_output_sync_bsn is too far ahead ("
&
int_to_str
(
TO_UINT
(
mon_output_sync_bsn
))
&
" > "
&
int_to_str
(
v_bsn_max
)
&
")"
SEVERITY
ERROR
;
REPORT
"Wrong: mon_output_sync_bsn is too far ahead ("
&
int_to_str
(
TO_UINT
(
mon_output_sync_bsn
))
&
" > "
&
int_to_str
(
v_bsn_max
)
&
")"
SEVERITY
ERROR
;
--Debug report used to investigate v_bsn_min and v_bsn_max assert conditions
--Debug report used to investigate v_bsn_min and v_bsn_max assert conditions
--REPORT int_to_str(TO_UINT(mon_output_sync_bsn)) & " : " & int_to_str(TO_UINT(mon_
input_
current_bsn)) SEVERITY NOTE;
--REPORT int_to_str(TO_UINT(mon_output_sync_bsn)) & " : " & int_to_str(TO_UINT(mon_curren
t_inpu
t_bsn)) SEVERITY NOTE;
END
IF
;
END
IF
;
END
IF
;
END
IF
;
END
IF
;
END
IF
;
...
@@ -588,7 +557,7 @@ BEGIN
...
@@ -588,7 +557,7 @@ BEGIN
ctrl_enable_evt
=>
ctrl_enable_evt
,
ctrl_enable_evt
=>
ctrl_enable_evt
,
ctrl_interval_size
=>
ctrl_interval_size
,
ctrl_interval_size
=>
ctrl_interval_size
,
ctrl_start_bsn
=>
ctrl_start_bsn
,
ctrl_start_bsn
=>
ctrl_start_bsn
,
mon_
input_
current_bsn
=>
mon_
input_
current_bsn
,
mon_curren
t_inpu
t_bsn
=>
mon_curren
t_inpu
t_bsn
,
mon_input_bsn_at_sync
=>
mon_input_bsn_at_sync
,
mon_input_bsn_at_sync
=>
mon_input_bsn_at_sync
,
mon_output_enable
=>
mon_output_enable
,
mon_output_enable
=>
mon_output_enable
,
mon_output_sync_bsn
=>
mon_output_sync_bsn
,
mon_output_sync_bsn
=>
mon_output_sync_bsn
,
...
...
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