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
874fbca5
Commit
874fbca5
authored
10 years ago
by
Pepping
Browse files
Options
Downloads
Patches
Plain Diff
- Added dp_sync_checker and dp_packet_merge
- Removed functionality for sync_ok detection.
parent
3bab66a0
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
libraries/base/reorder/src/vhdl/reorder_transpose.vhd
+70
-69
70 additions, 69 deletions
libraries/base/reorder/src/vhdl/reorder_transpose.vhd
with
70 additions
and
69 deletions
libraries/base/reorder/src/vhdl/reorder_transpose.vhd
+
70
−
69
View file @
874fbca5
...
@@ -132,15 +132,21 @@ ARCHITECTURE str OF reorder_transpose IS
...
@@ -132,15 +132,21 @@ ARCHITECTURE str OF reorder_transpose IS
CONSTANT
c_nof_ch_in
:
NATURAL
:
=
g_frame_size_in
*
g_reorder_seq
.
rd_chunksize
;
CONSTANT
c_nof_ch_in
:
NATURAL
:
=
g_frame_size_in
*
g_reorder_seq
.
rd_chunksize
;
CONSTANT
c_nof_ch_sel
:
NATURAL
:
=
c_nof_ch_in
;
CONSTANT
c_nof_ch_sel
:
NATURAL
:
=
c_nof_ch_in
;
CONSTANT
c_cnt_sop_w
:
NATURAL
:
=
ceil_log2
(
g_nof_blk_per_sync
)
+
1
;
CONSTANT
c_ctlr_data_w
:
NATURAL
:
=
func_tech_ddr_ctlr_data_w
(
g_tech_ddr
);
CONSTANT
c_ctlr_data_w
:
NATURAL
:
=
func_tech_ddr_ctlr_data_w
(
g_tech_ddr
);
CONSTANT
c_data_w_ratio
:
POSITIVE
:
=
c_ctlr_data_w
/
c_data_w
;
CONSTANT
c_data_w_ratio
:
POSITIVE
:
=
c_ctlr_data_w
/
c_data_w
;
SIGNAL
sync_check_in_sosi
:
t_dp_sosi
;
SIGNAL
sync_check_in_siso
:
t_dp_siso
:
=
c_dp_siso_rdy
;
SIGNAL
dp_sync_chk_out_sosi
:
t_dp_sosi
;
SIGNAL
packet_merge_in_sosi
:
t_dp_sosi
;
SIGNAL
packet_merge_in_siso
:
t_dp_siso
;
SIGNAL
ss_in_sosi
:
t_dp_sosi
;
SIGNAL
ss_in_sosi
:
t_dp_sosi
;
SIGNAL
ss_in_siso
:
t_dp_siso
;
SIGNAL
ss_in_siso
:
t_dp_siso
:
=
c_dp_siso_rdy
;
-- ctrl & status DDR3 driver
-- ctrl & status DDR3 driver
SIGNAL
dvr_done
:
STD_LOGIC
;
SIGNAL
dvr_done
:
STD_LOGIC
;
SIGNAL
dvr_en
:
STD_LOGIC
;
SIGNAL
dvr_en
:
STD_LOGIC
;
SIGNAL
dvr_wr_not_rd
:
STD_LOGIC
;
SIGNAL
dvr_wr_not_rd
:
STD_LOGIC
;
...
@@ -158,23 +164,16 @@ ARCHITECTURE str OF reorder_transpose IS
...
@@ -158,23 +164,16 @@ ARCHITECTURE str OF reorder_transpose IS
SIGNAL
rd_req_i
:
STD_LOGIC
;
SIGNAL
rd_req_i
:
STD_LOGIC
;
SIGNAL
rd_dat_i
:
STD_LOGIC_VECTOR
(
c_dp_stream_bsn_w
-1
DOWNTO
0
);
SIGNAL
rd_dat_i
:
STD_LOGIC_VECTOR
(
c_dp_stream_bsn_w
-1
DOWNTO
0
);
SIGNAL
rd_val_i
:
STD_LOGIC
;
SIGNAL
rd_val_i
:
STD_LOGIC
;
SIGNAL
cnt_sop
:
STD_LOGIC_VECTOR
(
c_cnt_sop_w
-1
DOWNTO
0
);
SIGNAL
nof_sop
:
STD_LOGIC_VECTOR
(
c_cnt_sop_w
-1
DOWNTO
0
);
SIGNAL
i_mon_nof_sop
:
STD_LOGIC_VECTOR
(
c_cnt_sop_w
-1
DOWNTO
0
);
SIGNAL
nxt_mon_nof_sop
:
STD_LOGIC_VECTOR
(
c_cnt_sop_w
-1
DOWNTO
0
);
SIGNAL
sync_ok_in
:
STD_LOGIC
;
SIGNAL
sync_ok_out
:
STD_LOGIC
;
BEGIN
BEGIN
g_merge_in_complex
:
IF
g_use_complex
=
TRUE
GENERATE
g_merge_in_complex
:
IF
g_use_complex
=
TRUE
GENERATE
PROCESS
(
snk_in_arr
)
PROCESS
(
snk_in_arr
)
BEGIN
BEGIN
s
s
_in_sosi
<=
snk_in_arr
(
0
);
s
ync_check
_in_sosi
<=
snk_in_arr
(
0
);
FOR
i
IN
0
TO
g_nof_streams
-1
LOOP
FOR
i
IN
0
TO
g_nof_streams
-1
LOOP
s
s
_in_sosi
.
data
((
2
*
i
+
1
)
*
g_in_dat_w
-1
DOWNTO
2
*
i
*
g_in_dat_w
)
<=
snk_in_arr
(
i
)
.
re
(
g_in_dat_w
-1
DOWNTO
0
);
s
ync_check
_in_sosi
.
data
((
2
*
i
+
1
)
*
g_in_dat_w
-1
DOWNTO
2
*
i
*
g_in_dat_w
)
<=
snk_in_arr
(
i
)
.
re
(
g_in_dat_w
-1
DOWNTO
0
);
s
s
_in_sosi
.
data
((
2
*
i
+
2
)
*
g_in_dat_w
-1
DOWNTO
(
2
*
i
+
1
)
*
g_in_dat_w
)
<=
snk_in_arr
(
i
)
.
im
(
g_in_dat_w
-1
DOWNTO
0
);
s
ync_check
_in_sosi
.
data
((
2
*
i
+
2
)
*
g_in_dat_w
-1
DOWNTO
(
2
*
i
+
1
)
*
g_in_dat_w
)
<=
snk_in_arr
(
i
)
.
im
(
g_in_dat_w
-1
DOWNTO
0
);
END
LOOP
;
END
LOOP
;
END
PROCESS
;
END
PROCESS
;
END
GENERATE
;
END
GENERATE
;
...
@@ -182,12 +181,46 @@ BEGIN
...
@@ -182,12 +181,46 @@ BEGIN
g_merge_in_data
:
IF
g_use_complex
=
FALSE
GENERATE
g_merge_in_data
:
IF
g_use_complex
=
FALSE
GENERATE
PROCESS
(
snk_in_arr
)
PROCESS
(
snk_in_arr
)
BEGIN
BEGIN
s
s
_in_sosi
<=
snk_in_arr
(
0
);
s
ync_check
_in_sosi
<=
snk_in_arr
(
0
);
FOR
i
IN
0
TO
g_nof_streams
-1
LOOP
FOR
i
IN
0
TO
g_nof_streams
-1
LOOP
s
s
_in_sosi
.
data
((
i
+
1
)
*
g_in_dat_w
-1
DOWNTO
i
*
g_in_dat_w
)
<=
snk_in_arr
(
i
)
.
data
(
g_in_dat_w
-1
DOWNTO
0
);
s
ync_check
_in_sosi
.
data
((
i
+
1
)
*
g_in_dat_w
-1
DOWNTO
i
*
g_in_dat_w
)
<=
snk_in_arr
(
i
)
.
data
(
g_in_dat_w
-1
DOWNTO
0
);
END
LOOP
;
END
LOOP
;
END
PROCESS
;
END
PROCESS
;
END
GENERATE
;
END
GENERATE
;
g_siso
:
FOR
J
IN
0
TO
g_nof_streams
-1
GENERATE
snk_out_arr
(
J
)
<=
sync_check_in_siso
;
END
GENERATE
;
u_sync_check_and_restore
:
ENTITY
dp_lib
.
dp_sync_checker
GENERIC
MAP
(
g_nof_blk_per_sync
=>
g_nof_blk_per_sync
)
PORT
MAP
(
mm_rst
=>
mm_rst
,
mm_clk
=>
mm_clk
,
dp_rst
=>
dp_rst
,
dp_clk
=>
dp_clk
,
snk_out
=>
sync_check_in_siso
,
snk_in
=>
sync_check_in_sosi
,
src_in
=>
packet_merge_in_siso
,
src_out
=>
packet_merge_in_sosi
);
u_dp_packet_merge
:
ENTITY
dp_lib
.
dp_packet_merge
GENERIC
MAP
(
g_nof_pkt
=>
g_reorder_seq
.
rd_chunksize
)
PORT
MAP
(
rst
=>
dp_rst
,
clk
=>
dp_clk
,
snk_out
=>
packet_merge_in_siso
,
snk_in
=>
packet_merge_in_sosi
,
src_in
=>
ss_in_siso
,
src_out
=>
ss_in_sosi
);
gen_pre_transpose
:
IF
g_ena_pre_transp
=
TRUE
GENERATE
gen_pre_transpose
:
IF
g_ena_pre_transp
=
TRUE
GENERATE
u_single_ss
:
ENTITY
work
.
ss
u_single_ss
:
ENTITY
work
.
ss
...
@@ -210,11 +243,12 @@ BEGIN
...
@@ -210,11 +243,12 @@ BEGIN
-- Streaming
-- Streaming
input_sosi
=>
ss_in_sosi
,
input_sosi
=>
ss_in_sosi
,
input_siso
=>
ss_in_siso
,
input_siso
=>
OPEN
,
-- Don't allow backpressure.
output_sosi
=>
to_mem_src_out_i
,
output_sosi
=>
to_mem_src_out_i
,
output_siso
=>
to_mem_src_in
output_siso
=>
to_mem_src_in
);
);
END
GENERATE
;
END
GENERATE
;
to_mem_src_out
<=
to_mem_src_out_i
;
to_mem_src_out
<=
to_mem_src_out_i
;
...
@@ -223,66 +257,33 @@ BEGIN
...
@@ -223,66 +257,33 @@ BEGIN
to_mem_src_out_i
<=
ss_in_sosi
;
to_mem_src_out_i
<=
ss_in_sosi
;
ss_in_siso
<=
to_mem_src_in
;
ss_in_siso
<=
to_mem_src_in
;
END
GENERATE
;
END
GENERATE
;
g_siso
:
FOR
J
IN
0
TO
g_nof_streams
-1
GENERATE
snk_out_arr
(
J
)
<=
ss_in_siso
;
END
GENERATE
;
-- Map original dvr interface signals to t_mem_ctlr_mosi/miso
-- Map original dvr interface signals to t_mem_ctlr_mosi/miso
dvr_done
<=
dvr_miso
.
done
;
-- Requested wr or rd sequence is done
dvr_done
<=
dvr_miso
.
done
;
-- Requested wr or rd sequence is done
dvr_mosi
.
burstbegin
<=
dvr_en
;
dvr_mosi
.
burstbegin
<=
dvr_en
;
dvr_mosi
.
wr
<=
dvr_wr_not_rd
;
-- No need to use dvr_mosi.rd
dvr_mosi
.
wr
<=
dvr_wr_not_rd
;
-- No need to use dvr_mosi.rd
dvr_mosi
.
address
<=
RESIZE_MEM_CTLR_ADDRESS
(
dvr_start_address
);
dvr_mosi
.
address
<=
RESIZE_MEM_CTLR_ADDRESS
(
dvr_start_address
);
dvr_mosi
.
burstsize
<=
RESIZE_MEM_CTLR_BURSTSIZE
(
dvr_nof_data
);
dvr_mosi
.
burstsize
<=
RESIZE_MEM_CTLR_BURSTSIZE
(
dvr_nof_data
);
dvr_mosi
.
flush
<=
dvr_wr_flush_en
;
dvr_mosi
.
flush
<=
dvr_wr_flush_en
;
dvr_wr_flush_en
<=
'0'
;
dvr_wr_flush_en
<=
NOT
(
sync_ok_out
);
u_ddr_sequencer
:
ENTITY
work
.
reorder_sequencer
u_ddr_sequencer
:
ENTITY
work
.
reorder_sequencer
GENERIC
MAP
(
GENERIC
MAP
(
g_reorder_seq
=>
g_reorder_seq
,
g_reorder_seq
=>
g_reorder_seq
,
g_data_w_ratio
=>
c_data_w_ratio
g_data_w_ratio
=>
c_data_w_ratio
)
)
PORT
MAP
(
PORT
MAP
(
dp_rst
=>
dp_rst
,
dp_rst
=>
dp_rst
,
dp_clk
=>
dp_clk
,
dp_clk
=>
dp_clk
,
en_evt
=>
dvr_en
,
en_evt
=>
dvr_en
,
wr_not_rd
=>
dvr_wr_not_rd
,
wr_not_rd
=>
dvr_wr_not_rd
,
address
=>
dvr_start_address
,
address
=>
dvr_start_address
,
burstsize
=>
dvr_nof_data
,
burstsize
=>
dvr_nof_data
,
done
=>
dvr_done
,
done
=>
dvr_done
sync_ok_in
=>
sync_ok_in
,
sync_ok_out
=>
sync_ok_out
);
u_cnt_sop
:
ENTITY
common_lib
.
common_counter
GENERIC
MAP
(
g_width
=>
c_cnt_sop_w
)
PORT
MAP
(
rst
=>
dp_rst
,
clk
=>
dp_clk
,
cnt_clr
=>
to_mem_src_out_i
.
sync
,
cnt_en
=>
to_mem_src_out_i
.
sop
,
count
=>
cnt_sop
);
);
nof_sop
<=
INCR_UVEC
(
cnt_sop
,
1
);
-- +1 because the sop at the sync also counts
nxt_mon_nof_sop
<=
nof_sop
WHEN
to_mem_src_out_i
.
sync
=
'1'
ELSE
i_mon_nof_sop
;
sync_ok_in
<=
'1'
WHEN
TO_UINT
(
i_mon_nof_sop
)
=
g_nof_blk_per_sync
AND
TO_UINT
(
nof_sop
)
<=
g_nof_blk_per_sync
ELSE
'0'
;
p_clk
:
PROCESS
(
dp_rst
,
dp_clk
)
BEGIN
IF
dp_rst
=
'1'
THEN
i_mon_nof_sop
<=
(
OTHERS
=>
'0'
);
ELSIF
rising_edge
(
dp_clk
)
THEN
i_mon_nof_sop
<=
nxt_mon_nof_sop
;
END
IF
;
END
PROCESS
;
---------------------------------------------------------------
---------------------------------------------------------------
-- FIFO FOR SYNC-BSN
-- FIFO FOR 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