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
1ba47729
Commit
1ba47729
authored
3 years ago
by
Eric Kooistra
Browse files
Options
Downloads
Patches
Plain Diff
Use d to group the auxiliary variables in p_comb.
parent
6d969ed3
No related branches found
No related tags found
1 merge request
!156
Added first version of dp_bsn_align_v2.vhd with mmp and tb. This was...
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
libraries/base/dp/src/vhdl/dp_bsn_align_v2.vhd
+39
-31
39 additions, 31 deletions
libraries/base/dp/src/vhdl/dp_bsn_align_v2.vhd
with
39 additions
and
31 deletions
libraries/base/dp/src/vhdl/dp_bsn_align_v2.vhd
+
39
−
31
View file @
1ba47729
...
...
@@ -131,6 +131,14 @@ ARCHITECTURE rtl OF dp_bsn_align_v2 IS
out_bsn
:
STD_LOGIC_VECTOR
(
g_bsn_w
-1
DOWNTO
0
);
-- hold BSN for streaming output
END
RECORD
;
TYPE
t_comb
IS
RECORD
ref_sosi
:
t_dp_sosi
;
pointer_slv
:
STD_LOGIC_VECTOR
(
c_blk_pointer_w
-1
DOWNTO
0
);
product_slv
:
STD_LOGIC_VECTOR
(
c_product_w
-1
DOWNTO
0
);
lost_data_flag
:
STD_LOGIC
;
out_sosi_arr
:
t_dp_sosi_arr
(
g_nof_streams
-1
DOWNTO
0
);
END
RECORD
;
CONSTANT
c_reg_rst
:
t_reg
:
=
(
0
,
(
OTHERS
=>
c_mem_copi_rst
),
(
OTHERS
=>
(
OTHERS
=>
'0'
)),
...
...
@@ -145,11 +153,14 @@ ARCHITECTURE rtl OF dp_bsn_align_v2 IS
(
OTHERS
=>
c_mem_cipo_rst
),
(
OTHERS
=>
'0'
));
-- State registers
-- State registers
for p_comb
SIGNAL
r
:
t_reg
;
SIGNAL
nxt_r
:
t_reg
;
-- Wires
-- Memoryless signals in p_comb (wires used as local auxiliary variables)
SIGNAL
s
:
t_comb
;
-- Structural signals (wires used to connect components and IO)
SIGNAL
dp_done
:
STD_LOGIC
;
SIGNAL
dp_done_arr
:
STD_LOGIC_VECTOR
(
g_nof_streams
-1
DOWNTO
0
);
SIGNAL
dp_copi
:
t_mem_copi
;
...
...
@@ -190,16 +201,10 @@ BEGIN
END
PROCESS
;
p_comb
:
PROCESS
(
r
,
in_sosi_arr_p
,
mm_copi
,
dp_copi
,
rd_cipo_arr
,
rd_sosi_arr
)
-- State variable
VARIABLE
v
:
t_reg
;
-- Auxiliary variables / local wires / no memory
VARIABLE
v_ref_sosi
:
t_dp_sosi
;
VARIABLE
v_pointer_slv
:
STD_LOGIC_VECTOR
(
c_blk_pointer_w
-1
DOWNTO
0
);
VARIABLE
v_product_slv
:
STD_LOGIC_VECTOR
(
c_product_w
-1
DOWNTO
0
);
VARIABLE
v_lost_data_flag
:
STD_LOGIC
;
VARIABLE
v_out_sosi_arr
:
t_dp_sosi_arr
(
g_nof_streams
-1
DOWNTO
0
);
VARIABLE
v
:
t_reg
;
-- State variable
VARIABLE
d
:
t_comb
;
-- Memoryless auxiliary variables, local wires
BEGIN
v
:
=
r
;
v
:
=
r
;
-- state signals
v
.
mm_sosi
:
=
func_dp_stream_reset_control
(
r
.
mm_sosi
);
v
.
wr_copi_arr
:
=
RESET_MEM_COPI_CTRL
(
r
.
wr_copi_arr
);
...
...
@@ -217,24 +222,24 @@ BEGIN
IF
in_sosi_arr_p
(
I
)
.
sop
=
'1'
THEN
-- . set address at start of block
v_
pointer_slv
:
=
in_sosi_arr_p
(
I
)
.
bsn
(
c_blk_pointer_w
-1
DOWNTO
0
);
v_
product_slv
:
=
MULT_UVEC
(
v_
pointer_slv
,
c_block_size_slv
);
v
.
wr_copi_arr
(
I
)
.
address
:
=
RESIZE_MEM_ADDRESS
(
v_
product_slv
);
d
.
pointer_slv
:
=
in_sosi_arr_p
(
I
)
.
bsn
(
c_blk_pointer_w
-1
DOWNTO
0
);
d
.
product_slv
:
=
MULT_UVEC
(
d
.
pointer_slv
,
c_block_size_slv
);
v
.
wr_copi_arr
(
I
)
.
address
:
=
RESIZE_MEM_ADDRESS
(
d
.
product_slv
);
-- . set filled flag at sop, so assume rest of block will follow in time
v
.
filled_arr
(
I
)(
TO_UINT
(
v_
pointer_slv
))
:
=
'1'
;
v
.
filled_arr
(
I
)(
TO_UINT
(
d
.
pointer_slv
))
:
=
'1'
;
END
IF
;
END
LOOP
;
----------------------------------------------------------------------------
-- p_control, all at sop of local reference input 0
----------------------------------------------------------------------------
v_
ref_sosi
:
=
in_sosi_arr_p
(
0
);
IF
v_
ref_sosi
.
sop
=
'1'
THEN
d
.
ref_sosi
:
=
in_sosi_arr_p
(
0
);
IF
d
.
ref_sosi
.
sop
=
'1'
THEN
-- . write sync & bsn buffer
v
.
wr_pointer
:
=
TO_UINT
(
v_
ref_sosi
.
bsn
(
c_blk_pointer_w
-1
DOWNTO
0
));
v
.
sync_arr
(
v
.
wr_pointer
)
:
=
v_
ref_sosi
.
sync
;
v
.
bsn_arr
(
v
.
wr_pointer
)
:
=
v_
ref_sosi
.
bsn
(
g_bsn_w
-1
DOWNTO
0
);
v
.
wr_pointer
:
=
TO_UINT
(
d
.
ref_sosi
.
bsn
(
c_blk_pointer_w
-1
DOWNTO
0
));
v
.
sync_arr
(
v
.
wr_pointer
)
:
=
d
.
ref_sosi
.
sync
;
v
.
bsn_arr
(
v
.
wr_pointer
)
:
=
d
.
ref_sosi
.
bsn
(
g_bsn_w
-1
DOWNTO
0
);
-- . update read block pointer at g_bsn_latency_max blocks behind the reference write pointer
IF
g_nof_aligners_max
=
1
THEN
...
...
@@ -247,9 +252,9 @@ BEGIN
END
IF
;
-- . update read address of read block pointer
v_
pointer_slv
:
=
TO_UVEC
(
v
.
rd_pointer
,
c_blk_pointer_w
);
v_
product_slv
:
=
MULT_UVEC
(
v_
pointer_slv
,
c_block_size_slv
);
v
.
rd_offset
:
=
RESIZE_UVEC
(
v_
product_slv
,
c_mem_ram
.
adr_w
);
d
.
pointer_slv
:
=
TO_UVEC
(
v
.
rd_pointer
,
c_blk_pointer_w
);
d
.
product_slv
:
=
MULT_UVEC
(
d
.
pointer_slv
,
c_block_size_slv
);
v
.
rd_offset
:
=
RESIZE_UVEC
(
d
.
product_slv
,
c_mem_ram
.
adr_w
);
-- . issue mm_sosi, if there is output ready to be read, indicated by filled reference block
IF
r
.
filled_arr
(
0
)(
v
.
rd_pointer
)
=
'1'
THEN
...
...
@@ -263,10 +268,10 @@ BEGIN
-- determine whether the ouput has to insert replacement data
v
.
mm_sosi
.
channel
:
=
(
OTHERS
=>
'0'
);
FOR
I
IN
0
TO
g_nof_streams
-1
LOOP
v_
lost_data_flag
:
=
NOT
v
.
filled_arr
(
I
)(
v
.
rd_pointer
);
d
.
lost_data_flag
:
=
NOT
v
.
filled_arr
(
I
)(
v
.
rd_pointer
);
IF
stream_en_arr
(
I
)
=
'1'
THEN
-- use MM bit at sop
v
.
use_replacement_data
(
I
)
:
=
v_
lost_data_flag
;
-- enabled stream, so replace if data was lost
v
.
mm_sosi
.
channel
(
I
)
:
=
v_
lost_data_flag
;
v
.
use_replacement_data
(
I
)
:
=
d
.
lost_data_flag
;
-- enabled stream, so replace if data was lost
v
.
mm_sosi
.
channel
(
I
)
:
=
d
.
lost_data_flag
;
ELSE
v
.
use_replacement_data
(
I
)
:
=
'1'
;
-- disabled stream, so replace data
END
IF
;
...
...
@@ -319,25 +324,28 @@ BEGIN
END
IF
;
-- apply mm_sosi.sync and bsn at sop to all streams in out_sosi_arr
v_
out_sosi_arr
:
=
rd_sosi_arr
;
-- = v.fill_cipo_arr in streaming format, contains the
d
.
out_sosi_arr
:
=
rd_sosi_arr
;
-- = v.fill_cipo_arr in streaming format, contains the
-- input data from the buffer or replacement data
IF
rd_sosi_arr
(
0
)
.
sop
=
'1'
THEN
v_
out_sosi_arr
:
=
func_dp_stream_arr_set
(
v_
out_sosi_arr
,
r
.
dp_sosi
.
sync
,
"SYNC"
);
v_
out_sosi_arr
:
=
func_dp_stream_arr_set
(
v_
out_sosi_arr
,
r
.
dp_sosi
.
bsn
,
"BSN"
);
d
.
out_sosi_arr
:
=
func_dp_stream_arr_set
(
d
.
out_sosi_arr
,
r
.
dp_sosi
.
sync
,
"SYNC"
);
d
.
out_sosi_arr
:
=
func_dp_stream_arr_set
(
d
.
out_sosi_arr
,
r
.
dp_sosi
.
bsn
,
"BSN"
);
v
.
out_bsn
:
=
r
.
dp_sosi
.
bsn
(
g_bsn_w
-1
DOWNTO
0
);
-- hold BSN until next sop, to ease view in wave window
ELSE
-- hold BSN until next sop, to ease view in wave window
v_
out_sosi_arr
:
=
func_dp_stream_arr_set
(
v_
out_sosi_arr
,
r
.
out_bsn
,
"BSN"
);
d
.
out_sosi_arr
:
=
func_dp_stream_arr_set
(
d
.
out_sosi_arr
,
r
.
out_bsn
,
"BSN"
);
END
IF
;
-- . output via DP streaming interface
out_sosi_arr
<=
v_
out_sosi_arr
;
out_sosi_arr
<=
d
.
out_sosi_arr
;
END
IF
;
----------------------------------------------------------------------------
-- next state
----------------------------------------------------------------------------
nxt_r
<=
v
;
-- memory less signals, only for view in wave window
s
<=
d
;
END
PROCESS
;
------------------------------------------------------------------------------
...
...
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