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
9d0a2fe3
Commit
9d0a2fe3
authored
7 years ago
by
Pieter Donker
Browse files
Options
Downloads
Patches
Plain Diff
dp_switch has now flow control on output, and extended tb
parent
9af85910
No related branches found
No related tags found
No related merge requests found
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
libraries/base/dp/src/vhdl/dp_switch.vhd
+11
-7
11 additions, 7 deletions
libraries/base/dp/src/vhdl/dp_switch.vhd
libraries/base/dp/tb/vhdl/tb_dp_switch.vhd
+46
-8
46 additions, 8 deletions
libraries/base/dp/tb/vhdl/tb_dp_switch.vhd
with
57 additions
and
15 deletions
libraries/base/dp/src/vhdl/dp_switch.vhd
+
11
−
7
View file @
9d0a2fe3
...
@@ -66,7 +66,10 @@ ENTITY dp_switch IS
...
@@ -66,7 +66,10 @@ ENTITY dp_switch IS
mm_rst
:
IN
STD_LOGIC
;
mm_rst
:
IN
STD_LOGIC
;
snk_in_arr
:
IN
t_dp_sosi_arr
(
g_nof_inputs
-1
DOWNTO
0
);
snk_in_arr
:
IN
t_dp_sosi_arr
(
g_nof_inputs
-1
DOWNTO
0
);
snk_out_arr
:
OUT
t_dp_siso_arr
(
g_nof_inputs
-1
DOWNTO
0
);
src_out
:
OUT
t_dp_sosi
;
src_out
:
OUT
t_dp_sosi
;
src_in
:
IN
t_dp_siso
:
=
c_dp_siso_rdy
;
reg_mosi
:
IN
t_mem_mosi
;
reg_mosi
:
IN
t_mem_mosi
;
reg_miso
:
OUT
t_mem_miso
reg_miso
:
OUT
t_mem_miso
...
@@ -82,8 +85,8 @@ ARCHITECTURE str OF dp_switch IS
...
@@ -82,8 +85,8 @@ ARCHITECTURE str OF dp_switch IS
SIGNAL
dp_mux_sel_ctrl_req
:
NATURAL
;
SIGNAL
dp_mux_sel_ctrl_req
:
NATURAL
;
SIGNAL
dp_mux_sel_ctrl
:
NATURAL
;
SIGNAL
dp_mux_sel_ctrl
:
NATURAL
;
SIGNAL
xonoff_s
nk_in
_arr
:
t_dp_sosi_arr
(
g_nof_inputs
-1
DOWNTO
0
);
SIGNAL
xonoff_s
rc_out
_arr
:
t_dp_sosi_arr
(
g_nof_inputs
-1
DOWNTO
0
);
SIGNAL
xonoff_s
nk_out
_arr
:
t_dp_siso_arr
(
g_nof_inputs
-1
DOWNTO
0
);
SIGNAL
xonoff_s
rc_in
_arr
:
t_dp_siso_arr
(
g_nof_inputs
-1
DOWNTO
0
);
SIGNAL
inverted_snk_in_arr
:
t_dp_sosi_arr
(
0
TO
g_nof_inputs
-1
);
SIGNAL
inverted_snk_in_arr
:
t_dp_sosi_arr
(
0
TO
g_nof_inputs
-1
);
SIGNAL
inverted_snk_out_arr
:
t_dp_siso_arr
(
0
TO
g_nof_inputs
-1
);
SIGNAL
inverted_snk_out_arr
:
t_dp_siso_arr
(
0
TO
g_nof_inputs
-1
);
...
@@ -120,9 +123,10 @@ BEGIN
...
@@ -120,9 +123,10 @@ BEGIN
rst
=>
dp_rst
,
rst
=>
dp_rst
,
-- Frame in
-- Frame in
in_sosi
=>
snk_in_arr
(
i
),
in_sosi
=>
snk_in_arr
(
i
),
in_siso
=>
snk_out_arr
(
i
),
-- Frame out
-- Frame out
out_siso
=>
xonoff_s
nk_out
_arr
(
i
),
-- flush control done by dp_mux.snk_out_arr
out_siso
=>
xonoff_s
rc_in
_arr
(
i
),
-- flush control done by dp_mux.snk_out_arr
out_sosi
=>
xonoff_s
nk_in
_arr
(
i
)
out_sosi
=>
xonoff_s
rc_out
_arr
(
i
)
);
);
END
GENERATE
;
END
GENERATE
;
...
@@ -130,8 +134,8 @@ BEGIN
...
@@ -130,8 +134,8 @@ BEGIN
-- invert snk_in_arr, dp_mux uses a TO array.
-- invert snk_in_arr, dp_mux uses a TO array.
------------------------------------------------------------------------------
------------------------------------------------------------------------------
gen_dp_switch_snk_in_arr
:
FOR
i
IN
0
TO
g_nof_inputs
-1
GENERATE
gen_dp_switch_snk_in_arr
:
FOR
i
IN
0
TO
g_nof_inputs
-1
GENERATE
inverted_snk_in_arr
(
i
)
<=
xonoff_s
nk_in
_arr
(
i
);
inverted_snk_in_arr
(
i
)
<=
xonoff_s
rc_out
_arr
(
i
);
xonoff_s
nk_out
_arr
(
i
)
<=
inverted_snk_out_arr
(
i
);
xonoff_s
rc_in
_arr
(
i
)
<=
inverted_snk_out_arr
(
i
);
END
GENERATE
;
END
GENERATE
;
------------------------------------------------------------------------------
------------------------------------------------------------------------------
...
@@ -174,7 +178,7 @@ BEGIN
...
@@ -174,7 +178,7 @@ BEGIN
snk_out_arr
=>
inverted_snk_out_arr
,
snk_out_arr
=>
inverted_snk_out_arr
,
src_out
=>
src_out
,
src_out
=>
src_out
,
src_in
=>
c_dp_siso_rdy
src_in
=>
src_in
);
);
END
str
;
END
str
;
This diff is collapsed.
Click to expand it.
libraries/base/dp/tb/vhdl/tb_dp_switch.vhd
+
46
−
8
View file @
9d0a2fe3
...
@@ -29,6 +29,7 @@ LIBRARY IEEE, common_lib;
...
@@ -29,6 +29,7 @@ LIBRARY IEEE, common_lib;
USE
IEEE
.
std_logic_1164
.
ALL
;
USE
IEEE
.
std_logic_1164
.
ALL
;
USE
IEEE
.
numeric_std
.
ALL
;
USE
IEEE
.
numeric_std
.
ALL
;
USE
common_lib
.
common_pkg
.
ALL
;
USE
common_lib
.
common_pkg
.
ALL
;
USE
common_lib
.
common_str_pkg
.
ALL
;
USE
common_lib
.
common_mem_pkg
.
ALL
;
USE
common_lib
.
common_mem_pkg
.
ALL
;
USE
common_lib
.
tb_common_pkg
.
ALL
;
USE
common_lib
.
tb_common_pkg
.
ALL
;
USE
common_lib
.
tb_common_mem_pkg
.
ALL
;
USE
common_lib
.
tb_common_mem_pkg
.
ALL
;
...
@@ -61,12 +62,15 @@ ARCHITECTURE tb OF tb_dp_switch IS
...
@@ -61,12 +62,15 @@ ARCHITECTURE tb OF tb_dp_switch IS
SIGNAL
mm_rst
:
STD_LOGIC
;
SIGNAL
mm_rst
:
STD_LOGIC
;
SIGNAL
dp_gen_block_data_in_en
:
STD_LOGIC
:
=
'1'
;
SIGNAL
dp_gen_block_data_in_en
:
STD_LOGIC
:
=
'1'
;
SIGNAL
dp_gen_block_data_src_in
:
t_dp_siso
:
=
c_dp_siso_rdy
;
SIGNAL
dp_gen_block_data_src_in_arr
:
t_dp_siso_arr
(
c_nof_inputs
-1
DOWNTO
0
);
SIGNAL
dp_gen_block_data_src_out_arr
:
t_dp_sosi_arr
(
c_nof_inputs
-1
DOWNTO
0
);
SIGNAL
dp_gen_block_data_src_out_arr
:
t_dp_sosi_arr
(
c_nof_inputs
-1
DOWNTO
0
);
SIGNAL
dp_switch_snk_in_arr
:
t_dp_sosi_arr
(
c_nof_inputs
-1
DOWNTO
0
);
SIGNAL
dp_switch_snk_in_arr
:
t_dp_sosi_arr
(
c_nof_inputs
-1
DOWNTO
0
);
SIGNAL
dp_switch_snk_out_arr
:
t_dp_siso_arr
(
c_nof_inputs
-1
DOWNTO
0
);
SIGNAL
dp_switch_src_out
:
t_dp_sosi
;
SIGNAL
dp_switch_src_out
:
t_dp_sosi
;
SIGNAL
dp_switch_src_in
:
t_dp_siso
:
=
c_dp_siso_rdy
;
SIGNAL
reg_dp_switch_mosi
:
t_mem_mosi
:
=
c_mem_mosi_rst
;
SIGNAL
reg_dp_switch_mosi
:
t_mem_mosi
:
=
c_mem_mosi_rst
;
SIGNAL
reg_dp_switch_miso
:
t_mem_miso
;
SIGNAL
reg_dp_switch_miso
:
t_mem_miso
;
...
@@ -82,41 +86,72 @@ BEGIN
...
@@ -82,41 +86,72 @@ BEGIN
mm_clk
<=
NOT
mm_clk
OR
tb_end
AFTER
c_mm_clk_period
/
2
;
mm_clk
<=
NOT
mm_clk
OR
tb_end
AFTER
c_mm_clk_period
/
2
;
mm_rst
<=
'1'
,
'0'
AFTER
c_mm_clk_period
*
7
;
mm_rst
<=
'1'
,
'0'
AFTER
c_mm_clk_period
*
7
;
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
-- Generate packet streams
-- Generate
continuous
packet streams
, with and without gaps
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
dp_gen_block_data_src_in_arr
<=
dp_switch_snk_out_arr
;
gen_generate_packets
:
FOR
i
IN
0
TO
c_nof_inputs
-1
GENERATE
gen_generate_packets
:
FOR
i
IN
0
TO
c_nof_inputs
-1
GENERATE
p_generate_packets
:
PROCESS
p_generate_packets
:
PROCESS
BEGIN
BEGIN
dp_gen_block_data_src_out_arr
(
i
)
<=
c_dp_sosi_rst
;
dp_gen_block_data_src_out_arr
(
i
)
<=
c_dp_sosi_rst
;
proc_common_wait_until_low
(
dp_clk
,
dp_rst
);
proc_common_wait_until_low
(
dp_clk
,
dp_rst
);
--proc_common_wait_some_cycles(dp_clk, 4);
--proc_common_wait_some_cycles(dp_clk, 4);
-- Generate single packet
-- Generate single packet
proc_dp_gen_block_data
(
c_data_w
,
i
*
1000
,
c_packet_len
,
0
,
0
,
'0'
,
"0"
,
dp_clk
,
dp_gen_block_data_in_en
,
dp_gen_block_data_src_in
,
dp_gen_block_data_src_out_arr
(
i
));
proc_dp_gen_block_data
(
c_data_w
,
i
*
1000
,
c_packet_len
,
0
,
0
,
'0'
,
"0"
,
dp_clk
,
dp_gen_block_data_in_en
,
dp_gen_block_data_src_in
_arr
(
i
)
,
dp_gen_block_data_src_out_arr
(
i
));
-- Insert optional gap between the packets
-- Insert optional gap between the packets
, (0 .. c_nof_inputs-1) gaps
proc_common_wait_some_cycles
(
dp_clk
,
i
);
proc_common_wait_some_cycles
(
dp_clk
,
i
);
WAIT
FOR
0
ns
;
WAIT
FOR
0
ns
;
END
PROCESS
;
END
PROCESS
;
END
GENERATE
;
END
GENERATE
;
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
-- MM write different input selections
-- MM write different input selections
and check output
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
p_switch_inputs
:
PROCESS
p_switch_input
_stimulu
s
:
PROCESS
BEGIN
BEGIN
proc_common_wait_until_low
(
mm_clk
,
mm_rst
);
proc_common_wait_until_low
(
mm_clk
,
mm_rst
);
reg_dp_switch_mosi
<=
c_mem_mosi_rst
;
reg_dp_switch_mosi
<=
c_mem_mosi_rst
;
proc_common_wait_some_cycles
(
mm_clk
,
1
);
proc_common_wait_some_cycles
(
mm_clk
,
1
);
FOR
I
IN
0
TO
c_nof_switch_runs
-1
LOOP
FOR
I
IN
0
TO
c_nof_switch_runs
-1
LOOP
FOR
J
IN
0
TO
c_nof_inputs
-1
LOOP
FOR
J
IN
0
TO
c_nof_inputs
-1
LOOP
-- write new input selection to mm bus and wait some time
proc_mem_mm_bus_wr
(
0
,
J
,
mm_clk
,
reg_dp_switch_mosi
);
proc_mem_mm_bus_wr
(
0
,
J
,
mm_clk
,
reg_dp_switch_mosi
);
proc_common_wait_some_cycles
(
mm_clk
,
100
);
proc_common_wait_some_cycles
(
mm_clk
,
50
);
-- check if channel number in src_out is the same as requested (J)
ASSERT
J
=
TO_UINT
(
dp_switch_src_out
.
channel
)
REPORT
"Wrong src_out channel"
&
", expected="
&
int_to_str
(
J
)
&
", readback="
&
int_to_str
(
INTEGER
(
TO_UINT
(
dp_switch_src_out
.
channel
)))
SEVERITY
ERROR
;
-- check if data value in src_out is in the expected value window (J*1000 <= data < (J+1)*1000))
ASSERT
TO_UINT
(
dp_switch_src_out
.
data
)
>=
J
*
1000
and
TO_UINT
(
dp_switch_src_out
.
data
)
<
(
J
+
1
)
*
1000
REPORT
"Wrong src_out data"
&
", expected between="
&
int_to_str
(
J
*
1000
)
&
" and "
&
int_to_str
((
J
+
1
)
*
1000
)
&
", readback="
&
int_to_str
(
INTEGER
(
TO_UINT
(
dp_switch_src_out
.
data
)))
SEVERITY
ERROR
;
END
LOOP
;
END
LOOP
;
END
LOOP
;
END
LOOP
;
-- check if output data is stopped if output send hold signal
dp_switch_src_in
<=
c_dp_siso_hold
;
proc_common_wait_some_cycles
(
mm_clk
,
50
);
ASSERT
dp_switch_src_out
.
valid
=
'0'
REPORT
"Still data on output after setting hold command"
SEVERITY
ERROR
;
-- check if output data flows again if output send flush signal
dp_switch_src_in
<=
c_dp_siso_rdy
;
proc_common_wait_some_cycles
(
mm_clk
,
50
);
ASSERT
dp_switch_src_out
.
valid
=
'1'
REPORT
"No data on output after setting flush command"
SEVERITY
ERROR
;
tb_end
<=
'1'
;
tb_end
<=
'1'
;
WAIT
;
WAIT
;
END
PROCESS
;
END
PROCESS
;
...
@@ -142,7 +177,10 @@ BEGIN
...
@@ -142,7 +177,10 @@ BEGIN
mm_rst
=>
mm_rst
,
mm_rst
=>
mm_rst
,
snk_in_arr
=>
dp_switch_snk_in_arr
,
snk_in_arr
=>
dp_switch_snk_in_arr
,
snk_out_arr
=>
dp_switch_snk_out_arr
,
src_out
=>
dp_switch_src_out
,
src_out
=>
dp_switch_src_out
,
src_in
=>
dp_switch_src_in
,
reg_mosi
=>
reg_dp_switch_mosi
,
reg_mosi
=>
reg_dp_switch_mosi
,
reg_miso
=>
reg_dp_switch_miso
reg_miso
=>
reg_dp_switch_miso
...
...
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