Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
F
FMC ADC 100M 14b 4cha - Gateware
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
8
Issues
8
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Wiki
Wiki
image/svg+xml
Discourse
Discourse
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Projects
FMC ADC 100M 14b 4cha - Gateware
Commits
b48832a9
Commit
b48832a9
authored
Dec 13, 2013
by
Matthieu Cattin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
hdl: Insert trigger time-tag in data, after post-trigger samples.
parent
94774b66
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
385 additions
and
311 deletions
+385
-311
fmc_adc_100Ms_core.vhd
hdl/adc/rtl/fmc_adc_100Ms_core.vhd
+290
-241
fmc_adc_100Ms_core_pkg.vhd
hdl/adc/rtl/fmc_adc_100Ms_core_pkg.vhd
+6
-1
fmc_adc_mezzanine.vhd
hdl/adc/rtl/fmc_adc_mezzanine.vhd
+10
-4
fmc_adc_mezzanine_pkg.vhd
hdl/adc/rtl/fmc_adc_mezzanine_pkg.vhd
+5
-0
timetag_core.vhd
hdl/ip_cores/timetag_core/rtl/timetag_core.vhd
+57
-65
timetag_core_pkg.vhd
hdl/ip_cores/timetag_core/rtl/timetag_core_pkg.vhd
+12
-0
spec_top_fmc_adc_100Ms.vhd
hdl/spec/rtl/spec_top_fmc_adc_100Ms.vhd
+5
-0
No files found.
hdl/adc/rtl/fmc_adc_100Ms_core.vhd
View file @
b48832a9
...
...
@@ -39,6 +39,7 @@
library
IEEE
;
use
IEEE
.
STD_LOGIC_1164
.
all
;
use
IEEE
.
NUMERIC_STD
.
all
;
use
work
.
timetag_core_pkg
.
all
;
library
UNISIM
;
...
...
@@ -85,6 +86,9 @@ entity fmc_adc_100Ms_core is
acq_stop_p_o
:
out
std_logic
;
acq_end_p_o
:
out
std_logic
;
-- Trigger time-tag input
trigger_tag_i
:
t_timetag
;
-- FMC interface
ext_trigger_p_i
:
in
std_logic
;
-- External trigger
ext_trigger_n_i
:
in
std_logic
;
...
...
@@ -276,7 +280,7 @@ architecture rtl of fmc_adc_100Ms_core is
------------------------------------------------------------------------------
-- Types declaration
------------------------------------------------------------------------------
type
t_acq_fsm_state
is
(
IDLE
,
PRE_TRIG
,
WAIT_TRIG
,
POST_TRIG
,
DECR_SHOT
);
type
t_acq_fsm_state
is
(
IDLE
,
PRE_TRIG
,
WAIT_TRIG
,
POST_TRIG
,
TRIG_TAG
,
DECR_SHOT
);
------------------------------------------------------------------------------
-- Signals declaration
...
...
@@ -346,7 +350,6 @@ architecture rtl of fmc_adc_100Ms_core is
signal
sync_fifo_wr
:
std_logic
;
signal
sync_fifo_rd
:
std_logic
;
signal
sync_fifo_valid
:
std_logic
;
signal
sync_fifo_dreq
:
std_logic
;
-- Gain/offset calibration
signal
gain_calibr
:
std_logic_vector
(
63
downto
0
);
...
...
@@ -355,7 +358,6 @@ architecture rtl of fmc_adc_100Ms_core is
signal
data_calibr_out
:
std_logic_vector
(
63
downto
0
);
signal
data_calibr_out_d
:
std_logic_vector
(
63
downto
0
);
-- Acquisition FSM
signal
acq_fsm_current_state
:
t_acq_fsm_state
;
signal
acq_fsm_state
:
std_logic_vector
(
2
downto
0
);
...
...
@@ -369,8 +371,14 @@ architecture rtl of fmc_adc_100Ms_core is
signal
acq_in_pre_trig
:
std_logic
;
signal
acq_in_wait_trig
:
std_logic
;
signal
acq_in_post_trig
:
std_logic
;
signal
acq_in_trig_tag
:
std_logic
;
signal
samples_wr_en
:
std_logic
;
-- Trigger tag insertion in data
signal
trig_tag_done
:
std_logic
;
signal
trig_tag_data
:
std_logic_vector
(
63
downto
0
);
signal
trig_tag_progress
:
std_logic_vector
(
1
downto
0
);
-- pre/post trigger and shots counters
signal
pre_trig_value
:
std_logic_vector
(
31
downto
0
);
signal
pre_trig_cnt
:
unsigned
(
31
downto
0
);
...
...
@@ -970,7 +978,7 @@ begin
-- "00000000" & serdes_out_fr;
sync_fifo_wr
<=
decim_en
and
serdes_synced
and
not
(
sync_fifo_full
);
sync_fifo_rd
<=
sync_fifo_dreq
and
not
(
sync_fifo_empty
);
sync_fifo_rd
<=
not
(
sync_fifo_empty
);
-- read sync fifo as soon as data are available
--============================================================================
...
...
@@ -1162,6 +1170,13 @@ begin
if
acq_stop
=
'1'
then
acq_fsm_current_state
<=
IDLE
;
elsif
post_trig_done
=
'1'
then
acq_fsm_current_state
<=
TRIG_TAG
;
end
if
;
when
TRIG_TAG
=>
if
acq_stop
=
'1'
then
acq_fsm_current_state
<=
IDLE
;
elsif
trig_tag_done
=
'1'
then
if
single_shot
=
'1'
then
acq_fsm_current_state
<=
IDLE
;
else
...
...
@@ -1195,64 +1210,93 @@ begin
when
IDLE
=>
shots_decr
<=
'0'
;
sync_fifo_dreq
<=
'1'
;
acq_in_pre_trig
<=
'0'
;
acq_in_wait_trig
<=
'0'
;
acq_in_post_trig
<=
'0'
;
acq_in_trig_tag
<=
'0'
;
samples_wr_en
<=
'0'
;
acq_fsm_state
<=
"001"
;
when
PRE_TRIG
=>
shots_decr
<=
'0'
;
sync_fifo_dreq
<=
'1'
;
acq_in_pre_trig
<=
'1'
;
acq_in_wait_trig
<=
'0'
;
acq_in_post_trig
<=
'0'
;
acq_in_trig_tag
<=
'0'
;
samples_wr_en
<=
'1'
;
acq_fsm_state
<=
"010"
;
when
WAIT_TRIG
=>
shots_decr
<=
'0'
;
sync_fifo_dreq
<=
'1'
;
acq_in_pre_trig
<=
'0'
;
acq_in_wait_trig
<=
'1'
;
acq_in_post_trig
<=
'0'
;
acq_in_trig_tag
<=
'0'
;
samples_wr_en
<=
'1'
;
acq_fsm_state
<=
"011"
;
when
POST_TRIG
=>
shots_decr
<=
'0'
;
sync_fifo_dreq
<=
'1'
;
acq_in_pre_trig
<=
'0'
;
acq_in_wait_trig
<=
'0'
;
acq_in_post_trig
<=
'1'
;
acq_in_trig_tag
<=
'0'
;
samples_wr_en
<=
'1'
;
acq_fsm_state
<=
"100"
;
when
TRIG_TAG
=>
shots_decr
<=
'0'
;
acq_in_pre_trig
<=
'0'
;
acq_in_wait_trig
<=
'0'
;
acq_in_post_trig
<=
'0'
;
acq_in_trig_tag
<=
'1'
;
samples_wr_en
<=
'0'
;
acq_fsm_state
<=
"101"
;
when
DECR_SHOT
=>
shots_decr
<=
'1'
;
sync_fifo_dreq
<=
'1'
;
acq_in_pre_trig
<=
'0'
;
acq_in_wait_trig
<=
'0'
;
acq_in_post_trig
<=
'0'
;
acq_in_trig_tag
<=
'0'
;
samples_wr_en
<=
'0'
;
acq_fsm_state
<=
"1
01
"
;
acq_fsm_state
<=
"1
10
"
;
when
others
=>
shots_decr
<=
'0'
;
sync_fifo_dreq
<=
'1'
;
acq_in_pre_trig
<=
'0'
;
acq_in_wait_trig
<=
'0'
;
acq_in_post_trig
<=
'0'
;
acq_in_trig_tag
<=
'0'
;
samples_wr_en
<=
'0'
;
acq_fsm_state
<=
"111"
;
end
case
;
end
process
p_acq_fsm_outputs
;
------------------------------------------------------------------------------
-- Inserting trigger time-tag after post_trigger samples
------------------------------------------------------------------------------
-- ###
p_insert_trig_tag
:
process
(
sys_clk_i
,
sys_rst_n_i
)
begin
if
sys_rst_n_i
=
'0'
then
trig_tag_data
<=
(
others
=>
'0'
);
trig_tag_progress
<=
(
others
=>
'0'
);
elsif
rising_edge
(
sys_clk_i
)
then
trig_tag_done
<=
acq_in_trig_tag
;
if
trig_tag_done
=
'0'
then
trig_tag_data
<=
trigger_tag_i
.
seconds
&
trigger_tag_i
.
meta
;
elsif
trig_tag_done
=
'1'
then
trig_tag_data
<=
trigger_tag_i
.
fine
&
trigger_tag_i
.
coarse
;
end
if
;
end
if
;
end
process
p_insert_trig_tag
;
-- ###
------------------------------------------------------------------------------
-- Dual DPRAM buffers for multi-shots acquisition
-----------------------------------------------------------------------------
-
-----------------------------------------------------------------------------
-- DPRAM input address counter
p_dpram_addra_cnt
:
process
(
sys_clk_i
,
sys_rst_n_i
)
...
...
@@ -1283,10 +1327,10 @@ begin
-- DPRAM inputs
dpram0_addra
<=
std_logic_vector
(
dpram_addra_cnt
);
dpram1_addra
<=
std_logic_vector
(
dpram_addra_cnt
);
dpram0_dina
<=
sync_fifo_dout
(
63
downto
0
);
dpram1_dina
<=
sync_fifo_dout
(
63
downto
0
)
;
dpram0_wea
<=
(
samples_wr_en
and
sync_fifo_valid
)
when
multishot_buffer_sel
=
'0'
else
'0'
;
dpram1_wea
<=
(
samples_wr_en
and
sync_fifo_valid
)
when
multishot_buffer_sel
=
'1'
else
'0'
;
dpram0_dina
<=
sync_fifo_dout
(
63
downto
0
)
when
acq_in_trig_tag
=
'0'
else
trig_tag_data
;
-- ###
dpram1_dina
<=
sync_fifo_dout
(
63
downto
0
)
when
acq_in_trig_tag
=
'0'
else
trig_tag_data
;
-- ###
;
dpram0_wea
<=
(
samples_wr_en
and
sync_fifo_valid
)
or
acq_in_trig_tag
when
multishot_buffer_sel
=
'0'
else
'0'
;
-- ###
dpram1_wea
<=
(
samples_wr_en
and
sync_fifo_valid
)
or
acq_in_trig_tag
when
multishot_buffer_sel
=
'1'
else
'0'
;
-- ###
-- DPRAMs
cmp_multishot_dpram0
:
generic_dpram
...
...
@@ -1416,8 +1460,13 @@ begin
wb_ddr_fifo_wr_en
<=
'0'
;
elsif
rising_edge
(
sys_clk_i
)
then
if
single_shot
=
'1'
then
if
acq_in_trig_tag
=
'1'
then
wb_ddr_fifo_din
<=
trig_tag_data
;
-- ###
wb_ddr_fifo_wr_en
<=
acq_in_trig_tag
;
-- ###
else
wb_ddr_fifo_din
<=
acq_trig
&
sync_fifo_dout
(
63
downto
0
);
-- trigger + data
wb_ddr_fifo_wr_en
<=
samples_wr_en
and
sync_fifo_valid
;
end
if
;
else
wb_ddr_fifo_din
<=
'0'
&
dpram_dout
;
wb_ddr_fifo_wr_en
<=
dpram_valid
;
...
...
@@ -1503,4 +1552,4 @@ begin
wb_ddr_sel_o
<=
X"FF"
;
end
rtl
;
end
rtl
;
hdl/adc/rtl/fmc_adc_100Ms_core_pkg.vhd
View file @
b48832a9
...
...
@@ -37,6 +37,8 @@
library
IEEE
;
use
IEEE
.
STD_LOGIC_1164
.
all
;
use
IEEE
.
NUMERIC_STD
.
all
;
use
work
.
timetag_core_pkg
.
all
;
package
fmc_adc_100Ms_core_pkg
is
...
...
@@ -85,6 +87,9 @@ package fmc_adc_100Ms_core_pkg is
acq_stop_p_o
:
out
std_logic
;
acq_end_p_o
:
out
std_logic
;
-- Trigger time-tag input
trigger_tag_i
:
t_timetag
;
-- FMC interface
ext_trigger_p_i
:
in
std_logic
;
-- External trigger
ext_trigger_n_i
:
in
std_logic
;
...
...
hdl/adc/rtl/fmc_adc_mezzanine.vhd
View file @
b48832a9
...
...
@@ -43,6 +43,7 @@ use IEEE.NUMERIC_STD.all;
library
work
;
use
work
.
fmc_adc_100Ms_core_pkg
.
all
;
use
work
.
wishbone_pkg
.
all
;
use
work
.
timetag_core_pkg
.
all
;
entity
fmc_adc_mezzanine
is
...
...
@@ -83,6 +84,9 @@ entity fmc_adc_mezzanine is
acq_stop_p_o
:
out
std_logic
;
acq_end_p_o
:
out
std_logic
;
-- Trigger time-tag input
trigger_tag_i
:
t_timetag
;
-- FMC interface
ext_trigger_p_i
:
in
std_logic
;
-- External trigger
ext_trigger_n_i
:
in
std_logic
;
...
...
@@ -399,6 +403,8 @@ begin
acq_stop_p_o
=>
acq_stop_p_o
,
acq_end_p_o
=>
acq_end_p_o
,
trigger_tag_i
=>
trigger_tag_i
,
ext_trigger_p_i
=>
ext_trigger_p_i
,
ext_trigger_n_i
=>
ext_trigger_n_i
,
...
...
hdl/adc/rtl/fmc_adc_mezzanine_pkg.vhd
View file @
b48832a9
...
...
@@ -37,6 +37,8 @@
library
IEEE
;
use
IEEE
.
STD_LOGIC_1164
.
all
;
use
IEEE
.
NUMERIC_STD
.
all
;
use
work
.
timetag_core_pkg
.
all
;
package
fmc_adc_mezzanine_pkg
is
...
...
@@ -86,6 +88,9 @@ package fmc_adc_mezzanine_pkg is
acq_stop_p_o
:
out
std_logic
;
acq_end_p_o
:
out
std_logic
;
-- Trigger time-tag input
trigger_tag_i
:
t_timetag
;
-- FMC interface
ext_trigger_p_i
:
in
std_logic
;
-- External trigger
ext_trigger_n_i
:
in
std_logic
;
...
...
hdl/ip_cores/timetag_core/rtl/timetag_core.vhd
View file @
b48832a9
...
...
@@ -38,7 +38,7 @@
library
IEEE
;
use
IEEE
.
STD_LOGIC_1164
.
all
;
use
IEEE
.
NUMERIC_STD
.
all
;
use
work
.
timetag_core_pkg
.
all
;
--library UNISIM;
--use UNISIM.vcomponents.all;
...
...
@@ -56,6 +56,9 @@ entity timetag_core is
acq_stop_p_i
:
in
std_logic
;
acq_end_p_i
:
in
std_logic
;
-- Trigger time-tag output
trig_tag_o
:
out
t_timetag
;
-- Wishbone interface
wb_adr_i
:
in
std_logic_vector
(
4
downto
0
);
wb_dat_i
:
in
std_logic_vector
(
31
downto
0
);
...
...
@@ -124,22 +127,10 @@ architecture rtl of timetag_core is
signal
timetag_coarse_cnt
:
unsigned
(
31
downto
0
);
signal
timetag_coarse_load_value
:
std_logic_vector
(
31
downto
0
);
signal
timetag_coarse_load_en
:
std_logic
;
signal
timetag_trig_tag_meta
:
std_logic_vector
(
31
downto
0
);
signal
timetag_trig_tag_seconds
:
std_logic_vector
(
31
downto
0
);
signal
timetag_trig_tag_coarse
:
std_logic_vector
(
31
downto
0
);
signal
timetag_trig_tag_fine
:
std_logic_vector
(
31
downto
0
);
signal
timetag_acq_start_tag_meta
:
std_logic_vector
(
31
downto
0
);
signal
timetag_acq_start_tag_seconds
:
std_logic_vector
(
31
downto
0
);
signal
timetag_acq_start_tag_coarse
:
std_logic_vector
(
31
downto
0
);
signal
timetag_acq_start_tag_fine
:
std_logic_vector
(
31
downto
0
);
signal
timetag_acq_stop_tag_meta
:
std_logic_vector
(
31
downto
0
);
signal
timetag_acq_stop_tag_seconds
:
std_logic_vector
(
31
downto
0
);
signal
timetag_acq_stop_tag_coarse
:
std_logic_vector
(
31
downto
0
);
signal
timetag_acq_stop_tag_fine
:
std_logic_vector
(
31
downto
0
);
signal
timetag_acq_end_tag_meta
:
std_logic_vector
(
31
downto
0
);
signal
timetag_acq_end_tag_seconds
:
std_logic_vector
(
31
downto
0
);
signal
timetag_acq_end_tag_coarse
:
std_logic_vector
(
31
downto
0
);
signal
timetag_acq_end_tag_fine
:
std_logic_vector
(
31
downto
0
);
signal
trig_tag
:
t_timetag
;
signal
acq_start_tag
:
t_timetag
;
signal
acq_stop_tag
:
t_timetag
;
signal
acq_end_tag
:
t_timetag
;
signal
local_pps
:
std_logic
;
...
...
@@ -169,22 +160,22 @@ begin
timetag_core_coarse_o
=>
timetag_coarse_load_value
,
timetag_core_coarse_i
=>
timetag_coarse
,
timetag_core_coarse_load_o
=>
timetag_coarse_load_en
,
timetag_core_trig_tag_meta_i
=>
t
imetag_trig_tag_
meta
,
timetag_core_trig_tag_seconds_i
=>
t
imetag_trig_tag_
seconds
,
timetag_core_trig_tag_coarse_i
=>
t
imetag_trig_tag_
coarse
,
timetag_core_trig_tag_fine_i
=>
t
imetag_trig_tag_
fine
,
timetag_core_acq_start_tag_meta_i
=>
timetag_acq_start_tag_
meta
,
timetag_core_acq_start_tag_seconds_i
=>
timetag_acq_start_tag_
seconds
,
timetag_core_acq_start_tag_coarse_i
=>
timetag_acq_start_tag_
coarse
,
timetag_core_acq_start_tag_fine_i
=>
timetag_acq_start_tag_
fine
,
timetag_core_acq_stop_tag_meta_i
=>
timetag_acq_stop_tag_
meta
,
timetag_core_acq_stop_tag_seconds_i
=>
timetag_acq_stop_tag_
seconds
,
timetag_core_acq_stop_tag_coarse_i
=>
timetag_acq_stop_tag_
coarse
,
timetag_core_acq_stop_tag_fine_i
=>
timetag_acq_stop_tag_
fine
,
timetag_core_acq_end_tag_meta_i
=>
timetag_acq_end_tag_
meta
,
timetag_core_acq_end_tag_seconds_i
=>
timetag_acq_end_tag_
seconds
,
timetag_core_acq_end_tag_coarse_i
=>
timetag_acq_end_tag_
coarse
,
timetag_core_acq_end_tag_fine_i
=>
timetag_acq_end_tag_
fine
timetag_core_trig_tag_meta_i
=>
t
rig_tag
.
meta
,
timetag_core_trig_tag_seconds_i
=>
t
rig_tag
.
seconds
,
timetag_core_trig_tag_coarse_i
=>
t
rig_tag
.
coarse
,
timetag_core_trig_tag_fine_i
=>
t
rig_tag
.
fine
,
timetag_core_acq_start_tag_meta_i
=>
acq_start_tag
.
meta
,
timetag_core_acq_start_tag_seconds_i
=>
acq_start_tag
.
seconds
,
timetag_core_acq_start_tag_coarse_i
=>
acq_start_tag
.
coarse
,
timetag_core_acq_start_tag_fine_i
=>
acq_start_tag
.
fine
,
timetag_core_acq_stop_tag_meta_i
=>
acq_stop_tag
.
meta
,
timetag_core_acq_stop_tag_seconds_i
=>
acq_stop_tag
.
seconds
,
timetag_core_acq_stop_tag_coarse_i
=>
acq_stop_tag
.
coarse
,
timetag_core_acq_stop_tag_fine_i
=>
acq_stop_tag
.
fine
,
timetag_core_acq_end_tag_meta_i
=>
acq_end_tag
.
meta
,
timetag_core_acq_end_tag_seconds_i
=>
acq_end_tag
.
seconds
,
timetag_core_acq_end_tag_coarse_i
=>
acq_end_tag
.
coarse
,
timetag_core_acq_end_tag_fine_i
=>
acq_end_tag
.
fine
);
------------------------------------------------------------------------------
...
...
@@ -236,17 +227,18 @@ begin
begin
if
rising_edge
(
clk_i
)
then
if
rst_n_i
=
'0'
then
t
imetag_trig_tag_
seconds
<=
(
others
=>
'0'
);
t
imetag_trig_tag_
coarse
<=
(
others
=>
'0'
);
t
imetag_trig_tag_
fine
<=
(
others
=>
'0'
);
t
rig_tag
.
seconds
<=
(
others
=>
'0'
);
t
rig_tag
.
coarse
<=
(
others
=>
'0'
);
t
rig_tag
.
fine
<=
(
others
=>
'0'
);
elsif
trigger_p_i
=
'1'
then
t
imetag_trig_tag_
seconds
<=
timetag_seconds
;
t
imetag_trig_tag_
coarse
<=
timetag_coarse
;
t
rig_tag
.
seconds
<=
timetag_seconds
;
t
rig_tag
.
coarse
<=
timetag_coarse
;
end
if
;
end
if
;
end
process
p_trig_tag
;
timetag_trig_tag_meta
<=
X"00000000"
;
trig_tag
.
meta
<=
X"00000000"
;
trig_tag_o
<=
trig_tag
;
------------------------------------------------------------------------------
-- Last acquisition start event time-tag
...
...
@@ -255,17 +247,17 @@ begin
begin
if
rising_edge
(
clk_i
)
then
if
rst_n_i
=
'0'
then
timetag_acq_start_tag_
seconds
<=
(
others
=>
'0'
);
timetag_acq_start_tag_
coarse
<=
(
others
=>
'0'
);
timetag_acq_start_tag_
fine
<=
(
others
=>
'0'
);
acq_start_tag
.
seconds
<=
(
others
=>
'0'
);
acq_start_tag
.
coarse
<=
(
others
=>
'0'
);
acq_start_tag
.
fine
<=
(
others
=>
'0'
);
elsif
acq_start_p_i
=
'1'
then
timetag_acq_start_tag_
seconds
<=
timetag_seconds
;
timetag_acq_start_tag_
coarse
<=
timetag_coarse
;
acq_start_tag
.
seconds
<=
timetag_seconds
;
acq_start_tag
.
coarse
<=
timetag_coarse
;
end
if
;
end
if
;
end
process
p_acq_start_tag
;
timetag_acq_start_tag_
meta
<=
X"00000000"
;
acq_start_tag
.
meta
<=
X"00000000"
;
------------------------------------------------------------------------------
-- Last acquisition stop event time-tag
...
...
@@ -274,17 +266,17 @@ begin
begin
if
rising_edge
(
clk_i
)
then
if
rst_n_i
=
'0'
then
timetag_acq_stop_tag_
seconds
<=
(
others
=>
'0'
);
timetag_acq_stop_tag_
coarse
<=
(
others
=>
'0'
);
timetag_acq_stop_tag_
fine
<=
(
others
=>
'0'
);
acq_stop_tag
.
seconds
<=
(
others
=>
'0'
);
acq_stop_tag
.
coarse
<=
(
others
=>
'0'
);
acq_stop_tag
.
fine
<=
(
others
=>
'0'
);
elsif
acq_stop_p_i
=
'1'
then
timetag_acq_stop_tag_
seconds
<=
timetag_seconds
;
timetag_acq_stop_tag_
coarse
<=
timetag_coarse
;
acq_stop_tag
.
seconds
<=
timetag_seconds
;
acq_stop_tag
.
coarse
<=
timetag_coarse
;
end
if
;
end
if
;
end
process
p_acq_stop_tag
;
timetag_acq_stop_tag_
meta
<=
X"00000000"
;
acq_stop_tag
.
meta
<=
X"00000000"
;
------------------------------------------------------------------------------
-- Last acquisition end event time-tag
...
...
@@ -293,17 +285,17 @@ begin
begin
if
rising_edge
(
clk_i
)
then
if
rst_n_i
=
'0'
then
timetag_acq_end_tag_
seconds
<=
(
others
=>
'0'
);
timetag_acq_end_tag_
coarse
<=
(
others
=>
'0'
);
timetag_acq_end_tag_
fine
<=
(
others
=>
'0'
);
acq_end_tag
.
seconds
<=
(
others
=>
'0'
);
acq_end_tag
.
coarse
<=
(
others
=>
'0'
);
acq_end_tag
.
fine
<=
(
others
=>
'0'
);
elsif
acq_end_p_i
=
'1'
then
timetag_acq_end_tag_
seconds
<=
timetag_seconds
;
timetag_acq_end_tag_
coarse
<=
timetag_coarse
;
acq_end_tag
.
seconds
<=
timetag_seconds
;
acq_end_tag
.
coarse
<=
timetag_coarse
;
end
if
;
end
if
;
end
process
p_acq_end_tag
;
timetag_acq_end_tag_
meta
<=
X"00000000"
;
acq_end_tag
.
meta
<=
X"00000000"
;
end
rtl
;
hdl/ip_cores/timetag_core/rtl/timetag_core_pkg.vhd
View file @
b48832a9
...
...
@@ -44,6 +44,15 @@ package timetag_core_pkg is
-- Constants declaration
------------------------------------------------------------------------------
------------------------------------------------------------------------------
-- Types declaration
------------------------------------------------------------------------------
type
t_timetag
is
record
meta
:
std_logic_vector
(
31
downto
0
);
seconds
:
std_logic_vector
(
31
downto
0
);
coarse
:
std_logic_vector
(
31
downto
0
);
fine
:
std_logic_vector
(
31
downto
0
);
end
record
t_timetag
;
------------------------------------------------------------------------------
-- Components declaration
...
...
@@ -60,6 +69,9 @@ package timetag_core_pkg is
acq_stop_p_i
:
in
std_logic
;
acq_end_p_i
:
in
std_logic
;
-- Trigger time-tag output
trig_tag_o
:
out
t_timetag
;
-- Wishbone interface
wb_adr_i
:
in
std_logic_vector
(
4
downto
0
);
wb_dat_i
:
in
std_logic_vector
(
31
downto
0
);
...
...
hdl/spec/rtl/spec_top_fmc_adc_100Ms.vhd
View file @
b48832a9
...
...
@@ -489,6 +489,7 @@ architecture rtl of spec_top_fmc_adc_100Ms is
signal
acq_start_p
:
std_logic
;
signal
acq_stop_p
:
std_logic
;
signal
acq_end_p
:
std_logic
;
signal
trigger_tag
:
t_timetag
;
-- led pwm
signal
led_pwm_update_cnt
:
unsigned
(
9
downto
0
);
...
...
@@ -795,6 +796,8 @@ begin
acq_stop_p_i
=>
acq_stop_p
,
acq_end_p_i
=>
acq_end_p
,
trig_tag_o
=>
trigger_tag
,
wb_adr_i
=>
cnx_master_out
(
c_WB_SLAVE_TIMETAG
)
.
adr
(
6
downto
2
),
-- cnx_master_out.adr is byte address
wb_dat_i
=>
cnx_master_out
(
c_WB_SLAVE_TIMETAG
)
.
dat
,
wb_dat_o
=>
cnx_master_in
(
c_WB_SLAVE_TIMETAG
)
.
dat
,
...
...
@@ -949,6 +952,8 @@ begin
acq_stop_p_o
=>
acq_stop_p
,
acq_end_p_o
=>
acq_end_p
,
trigger_tag_i
=>
trigger_tag
,
ext_trigger_p_i
=>
adc0_ext_trigger_p_i
,
ext_trigger_n_i
=>
adc0_ext_trigger_n_i
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment