Commit 3501364d authored by Dimitris Lampridis's avatar Dimitris Lampridis

Migrate Timetag Core to Cheby

parent e084c507
== Memory map summary
Time-tagging core registers
|===
|HW address | Type | Name | HDL name
|0x00
|REG
|seconds_upper
|seconds_upper
|0x04
|REG
|seconds_lower
|seconds_lower
|0x08
|REG
|coarse
|coarse
|0x0c
|REG
|time_trig_seconds_upper
|time_trig_seconds_upper
|0x10
|REG
|time_trig_seconds_lower
|time_trig_seconds_lower
|0x14
|REG
|time_trig_coarse
|time_trig_coarse
|0x18
|REG
|trig_tag_seconds_upper
|trig_tag_seconds_upper
|0x1c
|REG
|trig_tag_seconds_lower
|trig_tag_seconds_lower
|0x20
|REG
|trig_tag_coarse
|trig_tag_coarse
|0x24
|REG
|acq_start_tag_seconds_upper
|acq_start_tag_seconds_upper
|0x28
|REG
|acq_start_tag_seconds_lower
|acq_start_tag_seconds_lower
|0x2c
|REG
|acq_start_tag_coarse
|acq_start_tag_coarse
|0x30
|REG
|acq_stop_tag_seconds_upper
|acq_stop_tag_seconds_upper
|0x34
|REG
|acq_stop_tag_seconds_lower
|acq_stop_tag_seconds_lower
|0x38
|REG
|acq_stop_tag_coarse
|acq_stop_tag_coarse
|0x3c
|REG
|acq_end_tag_seconds_upper
|acq_end_tag_seconds_upper
|0x40
|REG
|acq_end_tag_seconds_lower
|acq_end_tag_seconds_lower
|0x44
|REG
|acq_end_tag_coarse
|acq_end_tag_coarse
|===
== Registers description
=== seconds_upper
[horizontal]
HDL name:: seconds_upper
address:: 0x0
block offset:: 0x0
access mode:: rw
Timetag seconds register (upper)
[cols="8*^"]
|===
| 31
| 30
| 29
| 28
| 27
| 26
| 25
| 24
| -
| -
| -
| -
| -
| -
| -
| -
| 23
| 22
| 21
| 20
| 19
| 18
| 17
| 16
| -
| -
| -
| -
| -
| -
| -
| -
| 15
| 14
| 13
| 12
| 11
| 10
| 9
| 8
| -
| -
| -
| -
| -
| -
| -
| -
| 7
| 6
| 5
| 4
| 3
| 2
| 1
| 0
8+s| seconds_upper[7:0]
|===
:: Timetag seconds
=== seconds_lower
[horizontal]
HDL name:: seconds_lower
address:: 0x4
block offset:: 0x4
access mode:: rw
Timetag seconds register (lower)
[cols="8*^"]
|===
| 31
| 30
| 29
| 28
| 27
| 26
| 25
| 24
8+s| seconds_lower[31:24]
| 23
| 22
| 21
| 20
| 19
| 18
| 17
| 16
8+s| seconds_lower[23:16]
| 15
| 14
| 13
| 12
| 11
| 10
| 9
| 8
8+s| seconds_lower[15:8]
| 7
| 6
| 5
| 4
| 3
| 2
| 1
| 0
8+s| seconds_lower[7:0]
|===
=== coarse
[horizontal]
HDL name:: coarse
address:: 0x8
block offset:: 0x8
access mode:: rw
Timetag coarse time register, system clock ticks (125MHz)
[cols="8*^"]
|===
| 31
| 30
| 29
| 28
| 27
| 26
| 25
| 24
| -
| -
| -
| -
4+s| coarse[27:24]
| 23
| 22
| 21
| 20
| 19
| 18
| 17
| 16
8+s| coarse[23:16]
| 15
| 14
| 13
| 12
| 11
| 10
| 9
| 8
8+s| coarse[15:8]
| 7
| 6
| 5
| 4
| 3
| 2
| 1
| 0
8+s| coarse[7:0]
|===
:: Timetag coarse time
=== time_trig_seconds_upper
[horizontal]
HDL name:: time_trig_seconds_upper
address:: 0xc
block offset:: 0xc
access mode:: rw
Time trigger seconds register (upper)
[cols="8*^"]
|===
| 31
| 30
| 29
| 28
| 27
| 26
| 25
| 24
| -
| -
| -
| -
| -
| -
| -
| -
| 23
| 22
| 21
| 20
| 19
| 18
| 17
| 16
| -
| -
| -
| -
| -
| -
| -
| -
| 15
| 14
| 13
| 12
| 11
| 10
| 9
| 8
| -
| -
| -
| -
| -
| -
| -
| -
| 7
| 6
| 5
| 4
| 3
| 2
| 1
| 0
8+s| time_trig_seconds_upper[7:0]
|===
:: Time trigger seconds
=== time_trig_seconds_lower
[horizontal]
HDL name:: time_trig_seconds_lower
address:: 0x10
block offset:: 0x10
access mode:: rw
Time trigger seconds register (lower)
[cols="8*^"]
|===
| 31
| 30
| 29
| 28
| 27
| 26
| 25
| 24
8+s| time_trig_seconds_lower[31:24]
| 23
| 22
| 21
| 20
| 19
| 18
| 17
| 16
8+s| time_trig_seconds_lower[23:16]
| 15
| 14
| 13
| 12
| 11
| 10
| 9
| 8
8+s| time_trig_seconds_lower[15:8]
| 7
| 6
| 5
| 4
| 3
| 2
| 1
| 0
8+s| time_trig_seconds_lower[7:0]
|===
=== time_trig_coarse
[horizontal]
HDL name:: time_trig_coarse
address:: 0x14
block offset:: 0x14
access mode:: rw
Time trigger coarse time register, system clock ticks (125MHz)
[cols="8*^"]
|===
| 31
| 30
| 29
| 28
| 27
| 26
| 25
| 24
| -
| -
| -
| -
4+s| time_trig_coarse[27:24]
| 23
| 22
| 21
| 20
| 19
| 18
| 17
| 16
8+s| time_trig_coarse[23:16]
| 15
| 14
| 13
| 12
| 11
| 10
| 9
| 8
8+s| time_trig_coarse[15:8]
| 7
| 6
| 5
| 4
| 3
| 2
| 1
| 0
8+s| time_trig_coarse[7:0]
|===
:: Time trigger coarse value
=== trig_tag_seconds_upper
[horizontal]
HDL name:: trig_tag_seconds_upper
address:: 0x18
block offset:: 0x18
access mode:: ro
Trigger time-tag seconds register (upper)
[cols="8*^"]
|===
| 31
| 30
| 29
| 28
| 27
| 26
| 25
| 24
| -
| -
| -
| -
| -
| -
| -
| -
| 23
| 22
| 21
| 20
| 19
| 18
| 17
| 16
| -
| -
| -
| -
| -
| -
| -
| -
| 15
| 14
| 13
| 12
| 11
| 10
| 9
| 8
| -
| -
| -
| -
| -
| -
| -
| -
| 7
| 6
| 5
| 4
| 3
| 2
| 1
| 0
8+s| trig_tag_seconds_upper[7:0]
|===
:: Holds time-tag seconds of the last trigger event
=== trig_tag_seconds_lower
[horizontal]
HDL name:: trig_tag_seconds_lower
address:: 0x1c
block offset:: 0x1c
access mode:: ro
Trigger time-tag seconds register (lower)
[cols="8*^"]
|===
| 31
| 30
| 29
| 28
| 27
| 26
| 25
| 24
8+s| trig_tag_seconds_lower[31:24]
| 23
| 22
| 21
| 20
| 19
| 18
| 17
| 16
8+s| trig_tag_seconds_lower[23:16]
| 15
| 14
| 13
| 12
| 11
| 10
| 9
| 8
8+s| trig_tag_seconds_lower[15:8]
| 7
| 6
| 5
| 4
| 3
| 2
| 1
| 0
8+s| trig_tag_seconds_lower[7:0]
|===
=== trig_tag_coarse
[horizontal]
HDL name:: trig_tag_coarse
address:: 0x20
block offset:: 0x20
access mode:: ro
Trigger time-tag coarse time (system clock ticks 125MHz) register
[cols="8*^"]
|===
| 31
| 30
| 29
| 28
| 27
| 26
| 25
| 24
| -
| -
| -
| -
4+s| trig_tag_coarse[27:24]
| 23
| 22
| 21
| 20
| 19
| 18
| 17
| 16
8+s| trig_tag_coarse[23:16]
| 15
| 14
| 13
| 12
| 11
| 10
| 9
| 8
8+s| trig_tag_coarse[15:8]
| 7
| 6
| 5
| 4
| 3
| 2
| 1
| 0
8+s| trig_tag_coarse[7:0]
|===
:: Holds time-tag coarse time of the last trigger event
=== acq_start_tag_seconds_upper
[horizontal]
HDL name:: acq_start_tag_seconds_upper
address:: 0x24
block offset:: 0x24
access mode:: ro
Acquisition start time-tag seconds register (upper)
[cols="8*^"]
|===
| 31
| 30
| 29
| 28
| 27
| 26
| 25
| 24
| -
| -
| -
| -
| -
| -
| -
| -
| 23
| 22
| 21
| 20
| 19
| 18
| 17
| 16
| -
| -
| -
| -
| -
| -
| -
| -
| 15
| 14
| 13
| 12
| 11
| 10
| 9
| 8
| -
| -
| -
| -
| -
| -
| -
| -
| 7
| 6
| 5
| 4
| 3
| 2
| 1
| 0
8+s| acq_start_tag_seconds_upper[7:0]
|===
:: Holds time-tag seconds of the last acquisition start event
=== acq_start_tag_seconds_lower
[horizontal]
HDL name:: acq_start_tag_seconds_lower
address:: 0x28
block offset:: 0x28
access mode:: ro
Acquisition start time-tag seconds register (lower)
[cols="8*^"]
|===
| 31
| 30
| 29
| 28
| 27
| 26
| 25
| 24
8+s| acq_start_tag_seconds_lower[31:24]
| 23
| 22
| 21
| 20
| 19
| 18
| 17
| 16
8+s| acq_start_tag_seconds_lower[23:16]
| 15
| 14
| 13
| 12
| 11
| 10
| 9
| 8
8+s| acq_start_tag_seconds_lower[15:8]
| 7
| 6
| 5
| 4
| 3
| 2
| 1
| 0
8+s| acq_start_tag_seconds_lower[7:0]
|===
=== acq_start_tag_coarse
[horizontal]
HDL name:: acq_start_tag_coarse
address:: 0x2c
block offset:: 0x2c
access mode:: ro
Acquisition start time-tag coarse time (system clock ticks 125MHz) register
[cols="8*^"]
|===
| 31
| 30
| 29
| 28
| 27
| 26
| 25
| 24
| -
| -
| -
| -
4+s| acq_start_tag_coarse[27:24]
| 23
| 22
| 21
| 20
| 19
| 18
| 17
| 16
8+s| acq_start_tag_coarse[23:16]
| 15
| 14
| 13
| 12
| 11
| 10
| 9
| 8
8+s| acq_start_tag_coarse[15:8]
| 7
| 6
| 5
| 4
| 3
| 2
| 1
| 0
8+s| acq_start_tag_coarse[7:0]
|===
:: Holds time-tag coarse time of the last acquisition start event
=== acq_stop_tag_seconds_upper
[horizontal]
HDL name:: acq_stop_tag_seconds_upper
address:: 0x30
block offset:: 0x30
access mode:: ro
Acquisition stop time-tag seconds register (upper)
[cols="8*^"]
|===
| 31
| 30
| 29
| 28
| 27
| 26
| 25
| 24
| -
| -
| -
| -
| -
| -
| -
| -
| 23
| 22
| 21
| 20
| 19
| 18
| 17
| 16
| -
| -
| -
| -
| -
| -
| -
| -
| 15
| 14
| 13
| 12
| 11
| 10
| 9
| 8
| -
| -
| -
| -
| -
| -
| -
| -
| 7
| 6
| 5
| 4
| 3
| 2
| 1
| 0
8+s| acq_stop_tag_seconds_upper[7:0]
|===
:: Holds time-tag seconds of the last acquisition stop event
=== acq_stop_tag_seconds_lower
[horizontal]
HDL name:: acq_stop_tag_seconds_lower
address:: 0x34
block offset:: 0x34
access mode:: ro
Acquisition stop time-tag seconds register (lower)
[cols="8*^"]
|===
| 31
| 30
| 29
| 28
| 27
| 26
| 25
| 24
8+s| acq_stop_tag_seconds_lower[31:24]
| 23
| 22
| 21
| 20
| 19
| 18
| 17
| 16
8+s| acq_stop_tag_seconds_lower[23:16]
| 15
| 14
| 13
| 12
| 11
| 10
| 9
| 8
8+s| acq_stop_tag_seconds_lower[15:8]
| 7
| 6
| 5
| 4
| 3
| 2
| 1
| 0
8+s| acq_stop_tag_seconds_lower[7:0]
|===
=== acq_stop_tag_coarse
[horizontal]
HDL name:: acq_stop_tag_coarse
address:: 0x38
block offset:: 0x38
access mode:: ro
Acquisition stop time-tag coarse time (system clock ticks 125MHz) register
[cols="8*^"]
|===
| 31
| 30
| 29
| 28
| 27
| 26
| 25
| 24
| -
| -
| -
| -
4+s| acq_stop_tag_coarse[27:24]
| 23
| 22
| 21
| 20
| 19
| 18
| 17
| 16
8+s| acq_stop_tag_coarse[23:16]
| 15
| 14
| 13
| 12
| 11
| 10
| 9
| 8
8+s| acq_stop_tag_coarse[15:8]
| 7
| 6
| 5
| 4
| 3
| 2
| 1
| 0
8+s| acq_stop_tag_coarse[7:0]
|===
:: Holds time-tag coarse time of the last acquisition stop event
=== acq_end_tag_seconds_upper
[horizontal]
HDL name:: acq_end_tag_seconds_upper
address:: 0x3c
block offset:: 0x3c
access mode:: ro
Acquisition end time-tag seconds register (upper)
[cols="8*^"]
|===
| 31
| 30
| 29
| 28
| 27
| 26
| 25
| 24
| -
| -
| -
| -
| -
| -
| -
| -
| 23
| 22
| 21
| 20
| 19
| 18
| 17
| 16
| -
| -
| -
| -
| -
| -
| -
| -
| 15
| 14
| 13
| 12
| 11
| 10
| 9
| 8
| -
| -
| -
| -
| -
| -
| -
| -
| 7
| 6
| 5
| 4
| 3
| 2
| 1
| 0
8+s| acq_end_tag_seconds_upper[7:0]
|===
:: Holds time-tag seconds of the last acquisition end event
=== acq_end_tag_seconds_lower
[horizontal]
HDL name:: acq_end_tag_seconds_lower
address:: 0x40
block offset:: 0x40
access mode:: ro
Acquisition end time-tag seconds register (lower)
[cols="8*^"]
|===
| 31
| 30
| 29
| 28
| 27
| 26
| 25
| 24
8+s| acq_end_tag_seconds_lower[31:24]
| 23
| 22
| 21
| 20
| 19
| 18
| 17
| 16
8+s| acq_end_tag_seconds_lower[23:16]
| 15
| 14
| 13
| 12
| 11
| 10
| 9
| 8
8+s| acq_end_tag_seconds_lower[15:8]
| 7
| 6
| 5
| 4
| 3
| 2
| 1
| 0
8+s| acq_end_tag_seconds_lower[7:0]
|===
=== acq_end_tag_coarse
[horizontal]
HDL name:: acq_end_tag_coarse
address:: 0x44
block offset:: 0x44
access mode:: ro
Acquisition end time-tag coarse time (system clock ticks 125MHz) register
[cols="8*^"]
|===
| 31
| 30
| 29
| 28
| 27
| 26
| 25
| 24
| -
| -
| -
| -
4+s| acq_end_tag_coarse[27:24]
| 23
| 22
| 21
| 20
| 19
| 18
| 17
| 16
8+s| acq_end_tag_coarse[23:16]
| 15
| 14
| 13
| 12
| 11
| 10
| 9
| 8
8+s| acq_end_tag_coarse[15:8]
| 7
| 6
| 5
| 4
| 3
| 2
| 1
| 0
8+s| acq_end_tag_coarse[7:0]
|===
:: Holds time-tag coarse time of the last acquisition end event
......@@ -8,10 +8,6 @@ files = [
"fmc_adc_alt_trigout.vhd",
"fmc_adc_eic.vhd",
"offset_gain_s.vhd",
"timetag_core_regs.vhd",
"timetag_core.vhd",
]
modules = {
"local" : [
"timetag_core",
],
}
......@@ -33,7 +33,7 @@ library unisim;
use unisim.vcomponents.all;
library work;
use work.timetag_core_pkg.all;
use work.timetag_core_defs_pkg.all;
use work.genram_pkg.all;
use work.gencores_pkg.all;
use work.wishbone_pkg.all;
......
......@@ -35,7 +35,7 @@
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.NUMERIC_STD.all;
use work.timetag_core_pkg.all;
use work.timetag_core_defs_pkg.all;
use work.wishbone_pkg.all;
package fmc_adc_100Ms_core_pkg is
......
......@@ -34,8 +34,8 @@ 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;
use work.timetag_core_regs_pkg.all;
use work.timetag_core_defs_pkg.all;
entity fmc_adc_mezzanine is
generic (
......@@ -592,6 +592,8 @@ begin
------------------------------------------------------------------------------
cmp_timetag_core : entity work.timetag_core
generic map (
g_WB_MODE => PIPELINED,
g_WB_GRANULARITY => BYTE,
-- Systematic delay introduced to the time tag by the FMC-ADC-100M core.
-- Measured experimentally.
g_TAG_ADJUST => g_TAG_ADJUST)
......@@ -619,15 +621,8 @@ begin
alt_trigin_tag_i => alt_trigin_tag,
alt_trigin_o => alt_time_trigger,
wb_adr_i => cnx_slave_in(c_WB_SLAVE_TIMETAG).adr(6 downto 2), -- cnx_slave_in.adr is byte address
wb_dat_i => cnx_slave_in(c_WB_SLAVE_TIMETAG).dat,
wb_dat_o => cnx_slave_out(c_WB_SLAVE_TIMETAG).dat,
wb_cyc_i => cnx_slave_in(c_WB_SLAVE_TIMETAG).cyc,
wb_sel_i => cnx_slave_in(c_WB_SLAVE_TIMETAG).sel,
wb_stb_i => cnx_slave_in(c_WB_SLAVE_TIMETAG).stb,
wb_we_i => cnx_slave_in(c_WB_SLAVE_TIMETAG).we,
wb_ack_o => cnx_slave_out(c_WB_SLAVE_TIMETAG).ack
);
wb_i => cnx_slave_in(c_WB_SLAVE_TIMETAG),
wb_o => cnx_slave_out(c_WB_SLAVE_TIMETAG));
cmp_alt_trigin : entity work.alt_trigin
port map (
......@@ -647,9 +642,4 @@ begin
alt_trigin_tag <= (seconds => alt_trigin_secs(39 downto 0),
coarse => alt_trigin_cycs(27 downto 0));
-- Unused wishbone signals
cnx_slave_out(c_WB_SLAVE_TIMETAG).err <= '0';
cnx_slave_out(c_WB_SLAVE_TIMETAG).rty <= '0';
cnx_slave_out(c_WB_SLAVE_TIMETAG).stall <= '0';
end rtl;
......@@ -34,7 +34,7 @@
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.NUMERIC_STD.all;
use work.timetag_core_pkg.all;
use work.timetag_core_defs_pkg.all;
use work.wishbone_pkg.all;
package fmc_adc_mezzanine_pkg is
......
......@@ -4,8 +4,6 @@
-- URL : http://www.ohwr.org/projects/fmc-adc-100m14b4cha-gw
-------------------------------------------------------------------------------
-- File : timetag_core.vhd
-- Author(s) : Matthieu Cattin <matthieu.cattin@cern.ch>
-- : Dimitrios Lampridis <dimitrios.lampridis@cern.ch>
-- Company : CERN (BE-CO-HT)
-- Created : 2011-11-18
-- Standard : VHDL'93/02
......@@ -27,19 +25,35 @@
-- received a copy of the GNU Lesser General Public License along with this
-- source; if not, download it from http://www.gnu.org/licenses/lgpl-2.1.html
-------------------------------------------------------------------------------
-- Revisions :
-- Date Version Author
-- 2011-11-18 1.0 Matthieu Cattin
-------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.NUMERIC_STD.all;
use work.timetag_core_pkg.all;
use work.timetag_core_wbgen2_pkg.all;
package timetag_core_defs_pkg is
type t_timetag is record
seconds : std_logic_vector(39 downto 0);
coarse : std_logic_vector(27 downto 0);
end record t_timetag;
constant c_TAG_COARSE_MAX : unsigned := to_unsigned(125000000, 28);
end timetag_core_defs_pkg;
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.NUMERIC_STD.all;
use work.wishbone_pkg.all;
use work.timetag_core_regs_pkg.all;
use work.timetag_core_defs_pkg.all;
entity timetag_core is
generic (
-- WB interface configuration
g_WB_MODE : t_wishbone_interface_mode := PIPELINED;
g_WB_GRANULARITY : t_wishbone_address_granularity := BYTE;
-- Value to be subtracted from trigger tag coarse counter.
-- This is useful if you know that the system introduces
-- some systematic delay wrt the actual trigger time
......@@ -75,41 +89,12 @@ entity timetag_core is
alt_trigin_o : out std_logic;
-- Wishbone interface
wb_adr_i : in std_logic_vector(4 downto 0);
wb_dat_i : in std_logic_vector(31 downto 0);
wb_dat_o : out std_logic_vector(31 downto 0);
wb_cyc_i : in std_logic;
wb_sel_i : in std_logic_vector(3 downto 0);
wb_stb_i : in std_logic;
wb_we_i : in std_logic;
wb_ack_o : out std_logic
);
wb_i : in t_wishbone_slave_in;
wb_o : out t_wishbone_slave_out);
end timetag_core;
architecture rtl of timetag_core is
------------------------------------------------------------------------------
-- Components declaration
------------------------------------------------------------------------------
component timetag_core_regs is
port (
rst_n_i : in std_logic;
clk_sys_i : in std_logic;
wb_adr_i : in std_logic_vector(4 downto 0);
wb_dat_i : in std_logic_vector(31 downto 0);
wb_dat_o : out std_logic_vector(31 downto 0);
wb_cyc_i : in std_logic;
wb_sel_i : in std_logic_vector(3 downto 0);
wb_stb_i : in std_logic;
wb_we_i : in std_logic;
wb_ack_o : out std_logic;
wb_stall_o : out std_logic;
regs_i : in t_timetag_core_in_registers;
regs_o : out t_timetag_core_out_registers);
end component timetag_core_regs;
------------------------------------------------------------------------------
-- Signals declaration
------------------------------------------------------------------------------
......@@ -128,13 +113,16 @@ architecture rtl of timetag_core is
signal wr_enabled : std_logic := '0';
signal regin : t_timetag_core_in_registers;
signal regout : t_timetag_core_out_registers;
signal regin : t_timetag_core_master_in;
signal regout : t_timetag_core_master_out;
signal alt_trigin : std_logic;
signal alt_trigin_d : std_logic;
signal alt_trigin_enable : std_logic;
signal wb_in : t_wishbone_slave_in;
signal wb_out : t_wishbone_slave_out;
begin
-- logic to detect if WR is enabled and timecode is valid
......@@ -143,40 +131,50 @@ begin
------------------------------------------------------------------------------
-- Wishbone interface to UTC core registers
------------------------------------------------------------------------------
cmp_timetag_core_regs : timetag_core_regs
cmp_timetag_wb_slave_adapter_in : wb_slave_adapter
generic map (
g_master_use_struct => TRUE,
g_master_mode => PIPELINED,
g_master_granularity => BYTE,
g_slave_use_struct => TRUE,
g_slave_mode => g_WB_MODE,
g_slave_granularity => g_WB_GRANULARITY)
port map (
rst_n_i => rst_n_i,
clk_sys_i => clk_i,
wb_adr_i => wb_adr_i,
wb_dat_i => wb_dat_i,
wb_dat_o => wb_dat_o,
wb_cyc_i => wb_cyc_i,
wb_sel_i => wb_sel_i,
wb_stb_i => wb_stb_i,
wb_we_i => wb_we_i,
wb_ack_o => wb_ack_o,
wb_stall_o => open,
regs_i => regin,
regs_o => regout);
regin.seconds_upper_i <= current_time.seconds(39 downto 32);
regin.seconds_lower_i <= current_time.seconds(31 downto 0);
regin.coarse_i <= current_time.coarse;
regin.trig_tag_seconds_upper_i <= trig_tag.seconds(39 downto 32);
regin.trig_tag_seconds_lower_i <= trig_tag.seconds(31 downto 0);
regin.trig_tag_coarse_i <= trig_tag.coarse;
regin.acq_start_tag_seconds_upper_i <= acq_start_tag.seconds(39 downto 32);
regin.acq_start_tag_seconds_lower_i <= acq_start_tag.seconds(31 downto 0);
regin.acq_start_tag_coarse_i <= acq_start_tag.coarse;
regin.acq_stop_tag_seconds_upper_i <= acq_stop_tag.seconds(39 downto 32);
regin.acq_stop_tag_seconds_lower_i <= acq_stop_tag.seconds(31 downto 0);
regin.acq_stop_tag_coarse_i <= acq_stop_tag.coarse;
regin.acq_end_tag_seconds_upper_i <= acq_end_tag.seconds(39 downto 32);
regin.acq_end_tag_seconds_lower_i <= acq_end_tag.seconds(31 downto 0);
regin.acq_end_tag_coarse_i <= acq_end_tag.coarse;
time_trigger.seconds <= regout.time_trig_seconds_upper_o & regout.time_trig_seconds_lower_o;
time_trigger.coarse <= regout.time_trig_coarse_o;
rst_n_i => rst_n_i,
slave_i => wb_i,
slave_o => wb_o,
master_i => wb_out,
master_o => wb_in);
cmp_timetag_core_regs : entity work.timetag_core_regs
port map (
rst_n_i => rst_n_i,
clk_i => clk_i,
wb_i => wb_in,
wb_o => wb_out,
timetag_core_i => regin,
timetag_core_o => regout);
regin.seconds_upper <= current_time.seconds(39 downto 32);
regin.seconds_lower <= current_time.seconds(31 downto 0);
regin.coarse <= current_time.coarse;
regin.trig_tag_seconds_upper <= trig_tag.seconds(39 downto 32);
regin.trig_tag_seconds_lower <= trig_tag.seconds(31 downto 0);
regin.trig_tag_coarse <= trig_tag.coarse;
regin.acq_start_tag_seconds_upper <= acq_start_tag.seconds(39 downto 32);
regin.acq_start_tag_seconds_lower <= acq_start_tag.seconds(31 downto 0);
regin.acq_start_tag_coarse <= acq_start_tag.coarse;
regin.acq_stop_tag_seconds_upper <= acq_stop_tag.seconds(39 downto 32);
regin.acq_stop_tag_seconds_lower <= acq_stop_tag.seconds(31 downto 0);
regin.acq_stop_tag_coarse <= acq_stop_tag.coarse;
regin.acq_end_tag_seconds_upper <= acq_end_tag.seconds(39 downto 32);
regin.acq_end_tag_seconds_lower <= acq_end_tag.seconds(31 downto 0);
regin.acq_end_tag_coarse <= acq_end_tag.coarse;
time_trigger.seconds <= regout.time_trig_seconds_upper & regout.time_trig_seconds_lower;
time_trigger.coarse <= regout.time_trig_coarse;
------------------------------------------------------------------------------
-- UTC seconds counter
......@@ -186,10 +184,10 @@ begin
if rising_edge(clk_i) then
if rst_n_i = '0' then
time_counter.seconds <= (others => '0');
elsif regout.seconds_upper_load_o = '1' then
time_counter.seconds(39 downto 32) <= regout.seconds_upper_o;
elsif regout.seconds_lower_load_o = '1' then
time_counter.seconds(31 downto 0) <= regout.seconds_lower_o;
elsif regout.seconds_upper_wr = '1' then
time_counter.seconds(39 downto 32) <= regout.seconds_upper;
elsif regout.seconds_lower_wr = '1' then
time_counter.seconds(31 downto 0) <= regout.seconds_lower;
elsif local_pps = '1' then
time_counter.seconds <= std_logic_vector(unsigned(current_time.seconds) + 1);
else
......@@ -209,8 +207,8 @@ begin
if rst_n_i = '0' then
time_counter.coarse <= (others => '0');
local_pps <= '0';
elsif regout.coarse_load_o = '1' then
time_counter.coarse <= regout.coarse_o;
elsif regout.coarse_wr = '1' then
time_counter.coarse <= regout.coarse;
local_pps <= '0';
elsif time_counter.coarse = std_logic_vector(c_TAG_COARSE_MAX - 1) then
time_counter.coarse <= (others => '0');
......
files = [
"timetag_core_regs.vhd",
"timetag_core_regs_wbgen2_pkg.vhd",
"timetag_core.vhd",
"timetag_core_pkg.vhd",
]
-------------------------------------------------------------------------------
-- Title : Timetag core package
-- Project : FMC ADC 100M 14B 4CHA gateware
-- URL : http://www.ohwr.org/projects/fmc-adc-100m14b4cha-gw
-------------------------------------------------------------------------------
-- File : timetag_core_pkg.vhd
-- Author(s) : Matthieu Cattin <matthieu.cattin@cern.ch>
-- : Dimitrios Lampridis <dimitrios.lampridis@cern.ch>
-- Company : CERN (BE-CO-HT)
-- Created : 2013-07-05
-- Standard : VHDL'93/02
-------------------------------------------------------------------------------
-- Description: Package for timetag core
-------------------------------------------------------------------------------
-- Copyright (c) 2013-2019 CERN (BE-CO-HT)
-------------------------------------------------------------------------------
-- GNU LESSER GENERAL PUBLIC LICENSE
-------------------------------------------------------------------------------
-- This source file is free software; you can redistribute it and/or modify it
-- under the terms of the GNU Lesser General Public License as published by the
-- Free Software Foundation; either version 2.1 of the License, or (at your
-- option) any later version. This source is distributed in the hope that it
-- will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
-- of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-- See the GNU Lesser General Public License for more details. You should have
-- received a copy of the GNU Lesser General Public License along with this
-- source; if not, download it from http://www.gnu.org/licenses/lgpl-2.1.html
-------------------------------------------------------------------------------
-- Revisions :
-- Date Version Author
-- 2013-07-05 1.0 Matthieu Cattin
-------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.NUMERIC_STD.all;
package timetag_core_pkg is
------------------------------------------------------------------------------
-- Types declaration
------------------------------------------------------------------------------
type t_timetag is record
seconds : std_logic_vector(39 downto 0);
coarse : std_logic_vector(27 downto 0);
end record t_timetag;
constant c_TAG_COARSE_MAX : unsigned := to_unsigned(125000000, 28);
end timetag_core_pkg;
package body timetag_core_pkg is
end timetag_core_pkg;
---------------------------------------------------------------------------------------
-- Title : Wishbone slave core for Time-tagging core registers
---------------------------------------------------------------------------------------
-- File : ../rtl/timetag_core_regs.vhd
-- Author : auto-generated by wbgen2 from timetag_core_regs.wb
-- Created : Fri Feb 23 15:43:42 2018
-- Standard : VHDL'87
---------------------------------------------------------------------------------------
-- THIS FILE WAS GENERATED BY wbgen2 FROM SOURCE FILE timetag_core_regs.wb
-- DO NOT HAND-EDIT UNLESS IT'S ABSOLUTELY NECESSARY!
---------------------------------------------------------------------------------------
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use work.timetag_core_wbgen2_pkg.all;
entity timetag_core_regs is
port (
rst_n_i : in std_logic;
clk_sys_i : in std_logic;
wb_adr_i : in std_logic_vector(4 downto 0);
wb_dat_i : in std_logic_vector(31 downto 0);
wb_dat_o : out std_logic_vector(31 downto 0);
wb_cyc_i : in std_logic;
wb_sel_i : in std_logic_vector(3 downto 0);
wb_stb_i : in std_logic;
wb_we_i : in std_logic;
wb_ack_o : out std_logic;
wb_stall_o : out std_logic;
regs_i : in t_timetag_core_in_registers;
regs_o : out t_timetag_core_out_registers
);
end timetag_core_regs;
architecture syn of timetag_core_regs is
signal timetag_core_time_trig_seconds_upper_int : std_logic_vector(7 downto 0);
signal timetag_core_time_trig_seconds_lower_int : std_logic_vector(31 downto 0);
signal timetag_core_time_trig_coarse_int : std_logic_vector(27 downto 0);
signal ack_sreg : std_logic_vector(9 downto 0);
signal rddata_reg : std_logic_vector(31 downto 0);
signal wrdata_reg : std_logic_vector(31 downto 0);
signal rwaddr_reg : std_logic_vector(4 downto 0);
signal ack_in_progress : std_logic ;
begin
-- Some internal signals assignments
wrdata_reg <= wb_dat_i;
--
-- Main register bank access process.
process (clk_sys_i, rst_n_i)
begin
if (rst_n_i = '0') then
ack_sreg <= "0000000000";
ack_in_progress <= '0';
rddata_reg <= "00000000000000000000000000000000";
regs_o.seconds_upper_load_o <= '0';
regs_o.seconds_lower_load_o <= '0';
regs_o.coarse_load_o <= '0';
timetag_core_time_trig_seconds_upper_int <= "00000000";
timetag_core_time_trig_seconds_lower_int <= "00000000000000000000000000000000";
timetag_core_time_trig_coarse_int <= "0000000000000000000000000000";
elsif rising_edge(clk_sys_i) then
-- advance the ACK generator shift register
ack_sreg(8 downto 0) <= ack_sreg(9 downto 1);
ack_sreg(9) <= '0';
if (ack_in_progress = '1') then
if (ack_sreg(0) = '1') then
regs_o.seconds_upper_load_o <= '0';
regs_o.seconds_lower_load_o <= '0';
regs_o.coarse_load_o <= '0';
ack_in_progress <= '0';
else
regs_o.seconds_upper_load_o <= '0';
regs_o.seconds_lower_load_o <= '0';
regs_o.coarse_load_o <= '0';
end if;
else
if ((wb_cyc_i = '1') and (wb_stb_i = '1')) then
case rwaddr_reg(4 downto 0) is
when "00000" =>
if (wb_we_i = '1') then
regs_o.seconds_upper_load_o <= '1';
end if;
rddata_reg(7 downto 0) <= regs_i.seconds_upper_i;
rddata_reg(8) <= 'X';
rddata_reg(9) <= 'X';
rddata_reg(10) <= 'X';
rddata_reg(11) <= 'X';
rddata_reg(12) <= 'X';
rddata_reg(13) <= 'X';
rddata_reg(14) <= 'X';
rddata_reg(15) <= 'X';
rddata_reg(16) <= 'X';
rddata_reg(17) <= 'X';
rddata_reg(18) <= 'X';
rddata_reg(19) <= 'X';
rddata_reg(20) <= 'X';
rddata_reg(21) <= 'X';
rddata_reg(22) <= 'X';
rddata_reg(23) <= 'X';
rddata_reg(24) <= 'X';
rddata_reg(25) <= 'X';
rddata_reg(26) <= 'X';
rddata_reg(27) <= 'X';
rddata_reg(28) <= 'X';
rddata_reg(29) <= 'X';
rddata_reg(30) <= 'X';
rddata_reg(31) <= 'X';
ack_sreg(0) <= '1';
ack_in_progress <= '1';
when "00001" =>
if (wb_we_i = '1') then
regs_o.seconds_lower_load_o <= '1';
end if;
rddata_reg(31 downto 0) <= regs_i.seconds_lower_i;
ack_sreg(0) <= '1';
ack_in_progress <= '1';
when "00010" =>
if (wb_we_i = '1') then
regs_o.coarse_load_o <= '1';
end if;
rddata_reg(27 downto 0) <= regs_i.coarse_i;
rddata_reg(28) <= 'X';
rddata_reg(29) <= 'X';
rddata_reg(30) <= 'X';
rddata_reg(31) <= 'X';
ack_sreg(0) <= '1';
ack_in_progress <= '1';
when "00011" =>
if (wb_we_i = '1') then
timetag_core_time_trig_seconds_upper_int <= wrdata_reg(7 downto 0);
end if;
rddata_reg(7 downto 0) <= timetag_core_time_trig_seconds_upper_int;
rddata_reg(8) <= 'X';
rddata_reg(9) <= 'X';
rddata_reg(10) <= 'X';
rddata_reg(11) <= 'X';
rddata_reg(12) <= 'X';
rddata_reg(13) <= 'X';
rddata_reg(14) <= 'X';
rddata_reg(15) <= 'X';
rddata_reg(16) <= 'X';
rddata_reg(17) <= 'X';
rddata_reg(18) <= 'X';
rddata_reg(19) <= 'X';
rddata_reg(20) <= 'X';
rddata_reg(21) <= 'X';
rddata_reg(22) <= 'X';
rddata_reg(23) <= 'X';
rddata_reg(24) <= 'X';
rddata_reg(25) <= 'X';
rddata_reg(26) <= 'X';
rddata_reg(27) <= 'X';
rddata_reg(28) <= 'X';
rddata_reg(29) <= 'X';
rddata_reg(30) <= 'X';
rddata_reg(31) <= 'X';
ack_sreg(0) <= '1';
ack_in_progress <= '1';
when "00100" =>
if (wb_we_i = '1') then
timetag_core_time_trig_seconds_lower_int <= wrdata_reg(31 downto 0);
end if;
rddata_reg(31 downto 0) <= timetag_core_time_trig_seconds_lower_int;
ack_sreg(0) <= '1';
ack_in_progress <= '1';
when "00101" =>
if (wb_we_i = '1') then
timetag_core_time_trig_coarse_int <= wrdata_reg(27 downto 0);
end if;
rddata_reg(27 downto 0) <= timetag_core_time_trig_coarse_int;
rddata_reg(28) <= 'X';
rddata_reg(29) <= 'X';
rddata_reg(30) <= 'X';
rddata_reg(31) <= 'X';
ack_sreg(0) <= '1';
ack_in_progress <= '1';
when "00110" =>
if (wb_we_i = '1') then
end if;
rddata_reg(7 downto 0) <= regs_i.trig_tag_seconds_upper_i;
rddata_reg(8) <= 'X';
rddata_reg(9) <= 'X';
rddata_reg(10) <= 'X';
rddata_reg(11) <= 'X';
rddata_reg(12) <= 'X';
rddata_reg(13) <= 'X';
rddata_reg(14) <= 'X';
rddata_reg(15) <= 'X';
rddata_reg(16) <= 'X';
rddata_reg(17) <= 'X';
rddata_reg(18) <= 'X';
rddata_reg(19) <= 'X';
rddata_reg(20) <= 'X';
rddata_reg(21) <= 'X';
rddata_reg(22) <= 'X';
rddata_reg(23) <= 'X';
rddata_reg(24) <= 'X';
rddata_reg(25) <= 'X';
rddata_reg(26) <= 'X';
rddata_reg(27) <= 'X';
rddata_reg(28) <= 'X';
rddata_reg(29) <= 'X';
rddata_reg(30) <= 'X';
rddata_reg(31) <= 'X';
ack_sreg(0) <= '1';
ack_in_progress <= '1';
when "00111" =>
if (wb_we_i = '1') then
end if;
rddata_reg(31 downto 0) <= regs_i.trig_tag_seconds_lower_i;
ack_sreg(0) <= '1';
ack_in_progress <= '1';
when "01000" =>
if (wb_we_i = '1') then
end if;
rddata_reg(27 downto 0) <= regs_i.trig_tag_coarse_i;
rddata_reg(28) <= 'X';
rddata_reg(29) <= 'X';
rddata_reg(30) <= 'X';
rddata_reg(31) <= 'X';
ack_sreg(0) <= '1';
ack_in_progress <= '1';
when "01001" =>
if (wb_we_i = '1') then
end if;
rddata_reg(7 downto 0) <= regs_i.acq_start_tag_seconds_upper_i;
rddata_reg(8) <= 'X';
rddata_reg(9) <= 'X';
rddata_reg(10) <= 'X';
rddata_reg(11) <= 'X';
rddata_reg(12) <= 'X';
rddata_reg(13) <= 'X';
rddata_reg(14) <= 'X';
rddata_reg(15) <= 'X';
rddata_reg(16) <= 'X';
rddata_reg(17) <= 'X';
rddata_reg(18) <= 'X';
rddata_reg(19) <= 'X';
rddata_reg(20) <= 'X';
rddata_reg(21) <= 'X';
rddata_reg(22) <= 'X';
rddata_reg(23) <= 'X';
rddata_reg(24) <= 'X';
rddata_reg(25) <= 'X';
rddata_reg(26) <= 'X';
rddata_reg(27) <= 'X';
rddata_reg(28) <= 'X';
rddata_reg(29) <= 'X';
rddata_reg(30) <= 'X';
rddata_reg(31) <= 'X';
ack_sreg(0) <= '1';
ack_in_progress <= '1';
when "01010" =>
if (wb_we_i = '1') then
end if;
rddata_reg(31 downto 0) <= regs_i.acq_start_tag_seconds_lower_i;
ack_sreg(0) <= '1';
ack_in_progress <= '1';
when "01011" =>
if (wb_we_i = '1') then
end if;
rddata_reg(27 downto 0) <= regs_i.acq_start_tag_coarse_i;
rddata_reg(28) <= 'X';
rddata_reg(29) <= 'X';
rddata_reg(30) <= 'X';
rddata_reg(31) <= 'X';
ack_sreg(0) <= '1';
ack_in_progress <= '1';
when "01100" =>
if (wb_we_i = '1') then
end if;
rddata_reg(7 downto 0) <= regs_i.acq_stop_tag_seconds_upper_i;
rddata_reg(8) <= 'X';
rddata_reg(9) <= 'X';
rddata_reg(10) <= 'X';
rddata_reg(11) <= 'X';
rddata_reg(12) <= 'X';
rddata_reg(13) <= 'X';
rddata_reg(14) <= 'X';
rddata_reg(15) <= 'X';
rddata_reg(16) <= 'X';
rddata_reg(17) <= 'X';
rddata_reg(18) <= 'X';
rddata_reg(19) <= 'X';
rddata_reg(20) <= 'X';
rddata_reg(21) <= 'X';
rddata_reg(22) <= 'X';
rddata_reg(23) <= 'X';
rddata_reg(24) <= 'X';
rddata_reg(25) <= 'X';
rddata_reg(26) <= 'X';
rddata_reg(27) <= 'X';
rddata_reg(28) <= 'X';
rddata_reg(29) <= 'X';
rddata_reg(30) <= 'X';
rddata_reg(31) <= 'X';
ack_sreg(0) <= '1';
ack_in_progress <= '1';
when "01101" =>
if (wb_we_i = '1') then
end if;
rddata_reg(31 downto 0) <= regs_i.acq_stop_tag_seconds_lower_i;
ack_sreg(0) <= '1';
ack_in_progress <= '1';
when "01110" =>
if (wb_we_i = '1') then
end if;
rddata_reg(27 downto 0) <= regs_i.acq_stop_tag_coarse_i;
rddata_reg(28) <= 'X';
rddata_reg(29) <= 'X';
rddata_reg(30) <= 'X';
rddata_reg(31) <= 'X';
ack_sreg(0) <= '1';
ack_in_progress <= '1';
when "01111" =>
if (wb_we_i = '1') then
end if;
rddata_reg(7 downto 0) <= regs_i.acq_end_tag_seconds_upper_i;
rddata_reg(8) <= 'X';
rddata_reg(9) <= 'X';
rddata_reg(10) <= 'X';
rddata_reg(11) <= 'X';
rddata_reg(12) <= 'X';
rddata_reg(13) <= 'X';
rddata_reg(14) <= 'X';
rddata_reg(15) <= 'X';
rddata_reg(16) <= 'X';
rddata_reg(17) <= 'X';
rddata_reg(18) <= 'X';
rddata_reg(19) <= 'X';
rddata_reg(20) <= 'X';
rddata_reg(21) <= 'X';
rddata_reg(22) <= 'X';
rddata_reg(23) <= 'X';
rddata_reg(24) <= 'X';
rddata_reg(25) <= 'X';
rddata_reg(26) <= 'X';
rddata_reg(27) <= 'X';
rddata_reg(28) <= 'X';
rddata_reg(29) <= 'X';
rddata_reg(30) <= 'X';
rddata_reg(31) <= 'X';
ack_sreg(0) <= '1';
ack_in_progress <= '1';
when "10000" =>
if (wb_we_i = '1') then
end if;
rddata_reg(31 downto 0) <= regs_i.acq_end_tag_seconds_lower_i;
ack_sreg(0) <= '1';
ack_in_progress <= '1';
when "10001" =>
if (wb_we_i = '1') then
end if;
rddata_reg(27 downto 0) <= regs_i.acq_end_tag_coarse_i;
rddata_reg(28) <= 'X';
rddata_reg(29) <= 'X';
rddata_reg(30) <= 'X';
rddata_reg(31) <= 'X';
ack_sreg(0) <= '1';
ack_in_progress <= '1';
when others =>
-- prevent the slave from hanging the bus on invalid address
ack_in_progress <= '1';
ack_sreg(0) <= '1';
end case;
end if;
end if;
end if;
end process;
-- Drive the data output bus
wb_dat_o <= rddata_reg;
-- Timetag seconds
regs_o.seconds_upper_o <= wrdata_reg(7 downto 0);
-- Timetag seconds
regs_o.seconds_lower_o <= wrdata_reg(31 downto 0);
-- Timetag coarse time
regs_o.coarse_o <= wrdata_reg(27 downto 0);
-- Time trigger seconds
regs_o.time_trig_seconds_upper_o <= timetag_core_time_trig_seconds_upper_int;
-- Time trigger seconds
regs_o.time_trig_seconds_lower_o <= timetag_core_time_trig_seconds_lower_int;
-- Time trigger coarse value
regs_o.time_trig_coarse_o <= timetag_core_time_trig_coarse_int;
-- Trigger time-tag seconds
-- Trigger time-tag seconds
-- Trigger time-tag coarse time
-- Acquisition start time-tag seconds
-- Acquisition start time-tag seconds
-- Acquisition start time-tag coarse time
-- Acquisition stop time-tag seconds
-- Acquisition stop time-tag seconds
-- Acquisition stop time-tag coarse time
-- Acquisition end time-tag seconds
-- Acquisition end time-tag seconds
-- Acquisition end time-tag coarse time
rwaddr_reg <= wb_adr_i;
wb_stall_o <= (not ack_sreg(0)) and (wb_stb_i and wb_cyc_i);
-- ACK signal generation. Just pass the LSB of ACK counter.
wb_ack_o <= ack_sreg(0);
end syn;
---------------------------------------------------------------------------------------
-- Title : Wishbone slave core for Time-tagging core registers
---------------------------------------------------------------------------------------
-- File : ../rtl/timetag_core_regs_wbgen2_pkg.vhd
-- Author : auto-generated by wbgen2 from timetag_core_regs.wb
-- Created : Fri Feb 23 15:43:42 2018
-- Standard : VHDL'87
---------------------------------------------------------------------------------------
-- THIS FILE WAS GENERATED BY wbgen2 FROM SOURCE FILE timetag_core_regs.wb
-- DO NOT HAND-EDIT UNLESS IT'S ABSOLUTELY NECESSARY!
---------------------------------------------------------------------------------------
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
package timetag_core_wbgen2_pkg is
-- Input registers (user design -> WB slave)
type t_timetag_core_in_registers is record
seconds_upper_i : std_logic_vector(7 downto 0);
seconds_lower_i : std_logic_vector(31 downto 0);
coarse_i : std_logic_vector(27 downto 0);
trig_tag_seconds_upper_i : std_logic_vector(7 downto 0);
trig_tag_seconds_lower_i : std_logic_vector(31 downto 0);
trig_tag_coarse_i : std_logic_vector(27 downto 0);
acq_start_tag_seconds_upper_i : std_logic_vector(7 downto 0);
acq_start_tag_seconds_lower_i : std_logic_vector(31 downto 0);
acq_start_tag_coarse_i : std_logic_vector(27 downto 0);
acq_stop_tag_seconds_upper_i : std_logic_vector(7 downto 0);
acq_stop_tag_seconds_lower_i : std_logic_vector(31 downto 0);
acq_stop_tag_coarse_i : std_logic_vector(27 downto 0);
acq_end_tag_seconds_upper_i : std_logic_vector(7 downto 0);
acq_end_tag_seconds_lower_i : std_logic_vector(31 downto 0);
acq_end_tag_coarse_i : std_logic_vector(27 downto 0);
end record;
constant c_timetag_core_in_registers_init_value: t_timetag_core_in_registers := (
seconds_upper_i => (others => '0'),
seconds_lower_i => (others => '0'),
coarse_i => (others => '0'),
trig_tag_seconds_upper_i => (others => '0'),
trig_tag_seconds_lower_i => (others => '0'),
trig_tag_coarse_i => (others => '0'),
acq_start_tag_seconds_upper_i => (others => '0'),
acq_start_tag_seconds_lower_i => (others => '0'),
acq_start_tag_coarse_i => (others => '0'),
acq_stop_tag_seconds_upper_i => (others => '0'),
acq_stop_tag_seconds_lower_i => (others => '0'),
acq_stop_tag_coarse_i => (others => '0'),
acq_end_tag_seconds_upper_i => (others => '0'),
acq_end_tag_seconds_lower_i => (others => '0'),
acq_end_tag_coarse_i => (others => '0')
);
-- Output registers (WB slave -> user design)
type t_timetag_core_out_registers is record
seconds_upper_o : std_logic_vector(7 downto 0);
seconds_upper_load_o : std_logic;
seconds_lower_o : std_logic_vector(31 downto 0);
seconds_lower_load_o : std_logic;
coarse_o : std_logic_vector(27 downto 0);
coarse_load_o : std_logic;
time_trig_seconds_upper_o : std_logic_vector(7 downto 0);
time_trig_seconds_lower_o : std_logic_vector(31 downto 0);
time_trig_coarse_o : std_logic_vector(27 downto 0);
end record;
constant c_timetag_core_out_registers_init_value: t_timetag_core_out_registers := (
seconds_upper_o => (others => '0'),
seconds_upper_load_o => '0',
seconds_lower_o => (others => '0'),
seconds_lower_load_o => '0',
coarse_o => (others => '0'),
coarse_load_o => '0',
time_trig_seconds_upper_o => (others => '0'),
time_trig_seconds_lower_o => (others => '0'),
time_trig_coarse_o => (others => '0')
);
function "or" (left, right: t_timetag_core_in_registers) return t_timetag_core_in_registers;
function f_x_to_zero (x:std_logic) return std_logic;
function f_x_to_zero (x:std_logic_vector) return std_logic_vector;
end package;
package body timetag_core_wbgen2_pkg is
function f_x_to_zero (x:std_logic) return std_logic is
begin
if x = '1' then
return '1';
else
return '0';
end if;
end function;
function f_x_to_zero (x:std_logic_vector) return std_logic_vector is
variable tmp: std_logic_vector(x'length-1 downto 0);
begin
for i in 0 to x'length-1 loop
if x(i) = '1' then
tmp(i):= '1';
else
tmp(i):= '0';
end if;
end loop;
return tmp;
end function;
function "or" (left, right: t_timetag_core_in_registers) return t_timetag_core_in_registers is
variable tmp: t_timetag_core_in_registers;
begin
tmp.seconds_upper_i := f_x_to_zero(left.seconds_upper_i) or f_x_to_zero(right.seconds_upper_i);
tmp.seconds_lower_i := f_x_to_zero(left.seconds_lower_i) or f_x_to_zero(right.seconds_lower_i);
tmp.coarse_i := f_x_to_zero(left.coarse_i) or f_x_to_zero(right.coarse_i);
tmp.trig_tag_seconds_upper_i := f_x_to_zero(left.trig_tag_seconds_upper_i) or f_x_to_zero(right.trig_tag_seconds_upper_i);
tmp.trig_tag_seconds_lower_i := f_x_to_zero(left.trig_tag_seconds_lower_i) or f_x_to_zero(right.trig_tag_seconds_lower_i);
tmp.trig_tag_coarse_i := f_x_to_zero(left.trig_tag_coarse_i) or f_x_to_zero(right.trig_tag_coarse_i);
tmp.acq_start_tag_seconds_upper_i := f_x_to_zero(left.acq_start_tag_seconds_upper_i) or f_x_to_zero(right.acq_start_tag_seconds_upper_i);
tmp.acq_start_tag_seconds_lower_i := f_x_to_zero(left.acq_start_tag_seconds_lower_i) or f_x_to_zero(right.acq_start_tag_seconds_lower_i);
tmp.acq_start_tag_coarse_i := f_x_to_zero(left.acq_start_tag_coarse_i) or f_x_to_zero(right.acq_start_tag_coarse_i);
tmp.acq_stop_tag_seconds_upper_i := f_x_to_zero(left.acq_stop_tag_seconds_upper_i) or f_x_to_zero(right.acq_stop_tag_seconds_upper_i);
tmp.acq_stop_tag_seconds_lower_i := f_x_to_zero(left.acq_stop_tag_seconds_lower_i) or f_x_to_zero(right.acq_stop_tag_seconds_lower_i);
tmp.acq_stop_tag_coarse_i := f_x_to_zero(left.acq_stop_tag_coarse_i) or f_x_to_zero(right.acq_stop_tag_coarse_i);
tmp.acq_end_tag_seconds_upper_i := f_x_to_zero(left.acq_end_tag_seconds_upper_i) or f_x_to_zero(right.acq_end_tag_seconds_upper_i);
tmp.acq_end_tag_seconds_lower_i := f_x_to_zero(left.acq_end_tag_seconds_lower_i) or f_x_to_zero(right.acq_end_tag_seconds_lower_i);
tmp.acq_end_tag_coarse_i := f_x_to_zero(left.acq_end_tag_coarse_i) or f_x_to_zero(right.acq_end_tag_coarse_i);
return tmp;
end function;
end package body;
WBGEN2=$(shell which wbgen2)
RTL=../
TEX=../../../../doc/manual/
SIM=../../../testbench/include/
timetag_core_regs:
$(WBGEN2) -l vhdl -H record -V $(RTL)$@.vhd -p $(RTL)$@_wbgen2_pkg.vhd -f html -D $@.htm -C $@.h -K $(SIM)$@.v $@.wb
$(WBGEN2) -f texinfo -D $(TEX)$@.tex $@.wb
/*
Register definitions for slave core: Time-tagging core registers
* File : timetag_core_regs.h
* Author : auto-generated by wbgen2 from timetag_core_regs.wb
* Created : Fri Feb 23 15:43:42 2018
* Standard : ANSI C
THIS FILE WAS GENERATED BY wbgen2 FROM SOURCE FILE timetag_core_regs.wb
DO NOT HAND-EDIT UNLESS IT'S ABSOLUTELY NECESSARY!
*/
#ifndef __WBGEN2_REGDEFS_TIMETAG_CORE_REGS_WB
#define __WBGEN2_REGDEFS_TIMETAG_CORE_REGS_WB
#ifdef __KERNEL__
#include <linux/types.h>
#else
#include <inttypes.h>
#endif
#if defined( __GNUC__)
#define PACKED __attribute__ ((packed))
#else
#error "Unsupported compiler?"
#endif
#ifndef __WBGEN2_MACROS_DEFINED__
#define __WBGEN2_MACROS_DEFINED__
#define WBGEN2_GEN_MASK(offset, size) (((1<<(size))-1) << (offset))
#define WBGEN2_GEN_WRITE(value, offset, size) (((value) & ((1<<(size))-1)) << (offset))
#define WBGEN2_GEN_READ(reg, offset, size) (((reg) >> (offset)) & ((1<<(size))-1))
#define WBGEN2_SIGN_EXTEND(value, bits) (((value) & (1<<bits) ? ~((1<<(bits))-1): 0 ) | (value))
#endif
/* definitions for register: Timetag seconds register (upper) */
/* definitions for register: Timetag seconds register (lower) */
/* definitions for register: Timetag coarse time register, system clock ticks (125MHz) */
/* definitions for register: Time trigger seconds register (upper) */
/* definitions for register: Time trigger seconds register (lower) */
/* definitions for register: Time trigger coarse time register, system clock ticks (125MHz) */
/* definitions for register: Trigger time-tag seconds register (upper) */
/* definitions for register: Trigger time-tag seconds register (lower) */
/* definitions for register: Trigger time-tag coarse time (system clock ticks 125MHz) register */
/* definitions for register: Acquisition start time-tag seconds register (upper) */
/* definitions for register: Acquisition start time-tag seconds register (lower) */
/* definitions for register: Acquisition start time-tag coarse time (system clock ticks 125MHz) register */
/* definitions for register: Acquisition stop time-tag seconds register (upper) */
/* definitions for register: Acquisition stop time-tag seconds register (lower) */
/* definitions for register: Acquisition stop time-tag coarse time (system clock ticks 125MHz) register */
/* definitions for register: Acquisition end time-tag seconds register (upper) */
/* definitions for register: Acquisition end time-tag seconds register (lower) */
/* definitions for register: Acquisition end time-tag coarse time (system clock ticks 125MHz) register */
PACKED struct TIMETAG_CORE_WB {
/* [0x0]: REG Timetag seconds register (upper) */
uint32_t SECONDS_UPPER;
/* [0x4]: REG Timetag seconds register (lower) */
uint32_t SECONDS_LOWER;
/* [0x8]: REG Timetag coarse time register, system clock ticks (125MHz) */
uint32_t COARSE;
/* [0xc]: REG Time trigger seconds register (upper) */
uint32_t TIME_TRIG_SECONDS_UPPER;
/* [0x10]: REG Time trigger seconds register (lower) */
uint32_t TIME_TRIG_SECONDS_LOWER;
/* [0x14]: REG Time trigger coarse time register, system clock ticks (125MHz) */
uint32_t TIME_TRIG_COARSE;
/* [0x18]: REG Trigger time-tag seconds register (upper) */
uint32_t TRIG_TAG_SECONDS_UPPER;
/* [0x1c]: REG Trigger time-tag seconds register (lower) */
uint32_t TRIG_TAG_SECONDS_LOWER;
/* [0x20]: REG Trigger time-tag coarse time (system clock ticks 125MHz) register */
uint32_t TRIG_TAG_COARSE;
/* [0x24]: REG Acquisition start time-tag seconds register (upper) */
uint32_t ACQ_START_TAG_SECONDS_UPPER;
/* [0x28]: REG Acquisition start time-tag seconds register (lower) */
uint32_t ACQ_START_TAG_SECONDS_LOWER;
/* [0x2c]: REG Acquisition start time-tag coarse time (system clock ticks 125MHz) register */
uint32_t ACQ_START_TAG_COARSE;
/* [0x30]: REG Acquisition stop time-tag seconds register (upper) */
uint32_t ACQ_STOP_TAG_SECONDS_UPPER;
/* [0x34]: REG Acquisition stop time-tag seconds register (lower) */
uint32_t ACQ_STOP_TAG_SECONDS_LOWER;
/* [0x38]: REG Acquisition stop time-tag coarse time (system clock ticks 125MHz) register */
uint32_t ACQ_STOP_TAG_COARSE;
/* [0x3c]: REG Acquisition end time-tag seconds register (upper) */
uint32_t ACQ_END_TAG_SECONDS_UPPER;
/* [0x40]: REG Acquisition end time-tag seconds register (lower) */
uint32_t ACQ_END_TAG_SECONDS_LOWER;
/* [0x44]: REG Acquisition end time-tag coarse time (system clock ticks 125MHz) register */
uint32_t ACQ_END_TAG_COARSE;
};
#endif
<HTML>
<HEAD>
<TITLE>timetag_core_regs</TITLE>
<STYLE TYPE="text/css" MEDIA="all">
<!--
BODY { background: white; color: black;
font-family: Arial,Helvetica; font-size:12; }
h1 { font-family: Trebuchet MS,Arial,Helvetica; font-size:30; color:#404040; }
h2 { font-family: Trebuchet MS,Arial,Helvetica; font-size:22; color:#404040; }
h3 { font-family: Trebuchet MS,Arial,Helvetica; font-size:16; color:#404040; }
.td_arrow_left { padding:0px; background: #ffffff; text-align: right; font-size:12;}
.td_arrow_right { padding:0px; background: #ffffff; text-align: left; font-size:12;}
.td_code { font-family:Courier New,Courier; padding: 3px; }
.td_desc { padding: 3px; }
.td_sym_center { background: #e0e0f0; padding: 3px; }
.td_port_name { font-family:Courier New,Courier; background: #e0e0f0; text-align: right; font-weight:bold;padding: 3px; width:200px; }
.td_pblock_left { font-family:Courier New,Courier; background: #e0e0f0; padding: 0px; text-align: left; }
.td_pblock_right { font-family:Courier New,Courier; background: #e0e0f0; padding: 0px; text-align: right; }
.td_bit { background: #ffffff; color:#404040; font-size:10; width: 70px; font-family:Courier New,Courier; padding: 3px; text-align:center; }
.td_field { background: #e0e0f0; padding: 3px; text-align:center; }
.td_unused { background: #a0a0a0; padding: 3px; text-align:center; }
th { font-weight:bold; color:#ffffff; background: #202080; padding:3px; }
.tr_even { background: #f0eff0; }
.tr_odd { background: #e0e0f0; }
-->
</STYLE>
</HEAD>
<BODY>
<h1 class="heading">timetag_core_regs</h1>
<h3>Time-tagging core registers</h3>
<p>Wishbone slave for registers related to time-tagging core</p>
<h3>Contents:</h3>
<span style="margin-left: 0px; ">1. <A href="#sect_1_0">Memory map summary</a></span><br/>
<span style="margin-left: 0px; ">2. <A href="#sect_2_0">HDL symbol</a></span><br/>
<span style="margin-left: 0px; ">3. <A href="#sect_3_0">Register description</a></span><br/>
<span style="margin-left: 20px; ">3.1. <A href="#sect_3_1">Timetag seconds register (upper)</a></span><br/>
<span style="margin-left: 20px; ">3.2. <A href="#sect_3_2">Timetag seconds register (lower)</a></span><br/>
<span style="margin-left: 20px; ">3.3. <A href="#sect_3_3">Timetag coarse time register, system clock ticks (125MHz)</a></span><br/>
<span style="margin-left: 20px; ">3.4. <A href="#sect_3_4">Time trigger seconds register (upper)</a></span><br/>
<span style="margin-left: 20px; ">3.5. <A href="#sect_3_5">Time trigger seconds register (lower)</a></span><br/>
<span style="margin-left: 20px; ">3.6. <A href="#sect_3_6">Time trigger coarse time register, system clock ticks (125MHz)</a></span><br/>
<span style="margin-left: 20px; ">3.7. <A href="#sect_3_7">Trigger time-tag seconds register (upper)</a></span><br/>
<span style="margin-left: 20px; ">3.8. <A href="#sect_3_8">Trigger time-tag seconds register (lower)</a></span><br/>
<span style="margin-left: 20px; ">3.9. <A href="#sect_3_9">Trigger time-tag coarse time (system clock ticks 125MHz) register</a></span><br/>
<span style="margin-left: 20px; ">3.10. <A href="#sect_3_10">Acquisition start time-tag seconds register (upper)</a></span><br/>
<span style="margin-left: 20px; ">3.11. <A href="#sect_3_11">Acquisition start time-tag seconds register (lower)</a></span><br/>
<span style="margin-left: 20px; ">3.12. <A href="#sect_3_12">Acquisition start time-tag coarse time (system clock ticks 125MHz) register</a></span><br/>
<span style="margin-left: 20px; ">3.13. <A href="#sect_3_13">Acquisition stop time-tag seconds register (upper)</a></span><br/>
<span style="margin-left: 20px; ">3.14. <A href="#sect_3_14">Acquisition stop time-tag seconds register (lower)</a></span><br/>
<span style="margin-left: 20px; ">3.15. <A href="#sect_3_15">Acquisition stop time-tag coarse time (system clock ticks 125MHz) register</a></span><br/>
<span style="margin-left: 20px; ">3.16. <A href="#sect_3_16">Acquisition end time-tag seconds register (upper)</a></span><br/>
<span style="margin-left: 20px; ">3.17. <A href="#sect_3_17">Acquisition end time-tag seconds register (lower)</a></span><br/>
<span style="margin-left: 20px; ">3.18. <A href="#sect_3_18">Acquisition end time-tag coarse time (system clock ticks 125MHz) register</a></span><br/>
<h3><a name="sect_1_0">1. Memory map summary</a></h3>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<th >
H/W Address
</th>
<th >
Type
</th>
<th >
Name
</th>
<th >
VHDL/Verilog prefix
</th>
<th >
C prefix
</th>
</tr>
<tr class="tr_odd">
<td class="td_code">
0x0
</td>
<td >
REG
</td>
<td >
<A href="#SECONDS_UPPER">Timetag seconds register (upper)</a>
</td>
<td class="td_code">
timetag_core_seconds_upper
</td>
<td class="td_code">
SECONDS_UPPER
</td>
</tr>
<tr class="tr_even">
<td class="td_code">
0x1
</td>
<td >
REG
</td>
<td >
<A href="#SECONDS_LOWER">Timetag seconds register (lower)</a>
</td>
<td class="td_code">
timetag_core_seconds_lower
</td>
<td class="td_code">
SECONDS_LOWER
</td>
</tr>
<tr class="tr_odd">
<td class="td_code">
0x2
</td>
<td >
REG
</td>
<td >
<A href="#COARSE">Timetag coarse time register, system clock ticks (125MHz)</a>
</td>
<td class="td_code">
timetag_core_coarse
</td>
<td class="td_code">
COARSE
</td>
</tr>
<tr class="tr_even">
<td class="td_code">
0x3
</td>
<td >
REG
</td>
<td >
<A href="#TIME_TRIG_SECONDS_UPPER">Time trigger seconds register (upper)</a>
</td>
<td class="td_code">
timetag_core_time_trig_seconds_upper
</td>
<td class="td_code">
TIME_TRIG_SECONDS_UPPER
</td>
</tr>
<tr class="tr_odd">
<td class="td_code">
0x4
</td>
<td >
REG
</td>
<td >
<A href="#TIME_TRIG_SECONDS_LOWER">Time trigger seconds register (lower)</a>
</td>
<td class="td_code">
timetag_core_time_trig_seconds_lower
</td>
<td class="td_code">
TIME_TRIG_SECONDS_LOWER
</td>
</tr>
<tr class="tr_even">
<td class="td_code">
0x5
</td>
<td >
REG
</td>
<td >
<A href="#TIME_TRIG_COARSE">Time trigger coarse time register, system clock ticks (125MHz)</a>
</td>
<td class="td_code">
timetag_core_time_trig_coarse
</td>
<td class="td_code">
TIME_TRIG_COARSE
</td>
</tr>
<tr class="tr_odd">
<td class="td_code">
0x6
</td>
<td >
REG
</td>
<td >
<A href="#TRIG_TAG_SECONDS_UPPER">Trigger time-tag seconds register (upper)</a>
</td>
<td class="td_code">
timetag_core_trig_tag_seconds_upper
</td>
<td class="td_code">
TRIG_TAG_SECONDS_UPPER
</td>
</tr>
<tr class="tr_even">
<td class="td_code">
0x7
</td>
<td >
REG
</td>
<td >
<A href="#TRIG_TAG_SECONDS_LOWER">Trigger time-tag seconds register (lower)</a>
</td>
<td class="td_code">
timetag_core_trig_tag_seconds_lower
</td>
<td class="td_code">
TRIG_TAG_SECONDS_LOWER
</td>
</tr>
<tr class="tr_odd">
<td class="td_code">
0x8
</td>
<td >
REG
</td>
<td >
<A href="#TRIG_TAG_COARSE">Trigger time-tag coarse time (system clock ticks 125MHz) register</a>
</td>
<td class="td_code">
timetag_core_trig_tag_coarse
</td>
<td class="td_code">
TRIG_TAG_COARSE
</td>
</tr>
<tr class="tr_even">
<td class="td_code">
0x9
</td>
<td >
REG
</td>
<td >
<A href="#ACQ_START_TAG_SECONDS_UPPER">Acquisition start time-tag seconds register (upper)</a>
</td>
<td class="td_code">
timetag_core_acq_start_tag_seconds_upper
</td>
<td class="td_code">
ACQ_START_TAG_SECONDS_UPPER
</td>
</tr>
<tr class="tr_odd">
<td class="td_code">
0xa
</td>
<td >
REG
</td>
<td >
<A href="#ACQ_START_TAG_SECONDS_LOWER">Acquisition start time-tag seconds register (lower)</a>
</td>
<td class="td_code">
timetag_core_acq_start_tag_seconds_lower
</td>
<td class="td_code">
ACQ_START_TAG_SECONDS_LOWER
</td>
</tr>
<tr class="tr_even">
<td class="td_code">
0xb
</td>
<td >
REG
</td>
<td >
<A href="#ACQ_START_TAG_COARSE">Acquisition start time-tag coarse time (system clock ticks 125MHz) register</a>
</td>
<td class="td_code">
timetag_core_acq_start_tag_coarse
</td>
<td class="td_code">
ACQ_START_TAG_COARSE
</td>
</tr>
<tr class="tr_odd">
<td class="td_code">
0xc
</td>
<td >
REG
</td>
<td >
<A href="#ACQ_STOP_TAG_SECONDS_UPPER">Acquisition stop time-tag seconds register (upper)</a>
</td>
<td class="td_code">
timetag_core_acq_stop_tag_seconds_upper
</td>
<td class="td_code">
ACQ_STOP_TAG_SECONDS_UPPER
</td>
</tr>
<tr class="tr_even">
<td class="td_code">
0xd
</td>
<td >
REG
</td>
<td >
<A href="#ACQ_STOP_TAG_SECONDS_LOWER">Acquisition stop time-tag seconds register (lower)</a>
</td>
<td class="td_code">
timetag_core_acq_stop_tag_seconds_lower
</td>
<td class="td_code">
ACQ_STOP_TAG_SECONDS_LOWER
</td>
</tr>
<tr class="tr_odd">
<td class="td_code">
0xe
</td>
<td >
REG
</td>
<td >
<A href="#ACQ_STOP_TAG_COARSE">Acquisition stop time-tag coarse time (system clock ticks 125MHz) register</a>
</td>
<td class="td_code">
timetag_core_acq_stop_tag_coarse
</td>
<td class="td_code">
ACQ_STOP_TAG_COARSE
</td>
</tr>
<tr class="tr_even">
<td class="td_code">
0xf
</td>
<td >
REG
</td>
<td >
<A href="#ACQ_END_TAG_SECONDS_UPPER">Acquisition end time-tag seconds register (upper)</a>
</td>
<td class="td_code">
timetag_core_acq_end_tag_seconds_upper
</td>
<td class="td_code">
ACQ_END_TAG_SECONDS_UPPER
</td>
</tr>
<tr class="tr_odd">
<td class="td_code">
0x10
</td>
<td >
REG
</td>
<td >
<A href="#ACQ_END_TAG_SECONDS_LOWER">Acquisition end time-tag seconds register (lower)</a>
</td>
<td class="td_code">
timetag_core_acq_end_tag_seconds_lower
</td>
<td class="td_code">
ACQ_END_TAG_SECONDS_LOWER
</td>
</tr>
<tr class="tr_even">
<td class="td_code">
0x11
</td>
<td >
REG
</td>
<td >
<A href="#ACQ_END_TAG_COARSE">Acquisition end time-tag coarse time (system clock ticks 125MHz) register</a>
</td>
<td class="td_code">
timetag_core_acq_end_tag_coarse
</td>
<td class="td_code">
ACQ_END_TAG_COARSE
</td>
</tr>
</table>
<h3><a name="sect_2_0">2. HDL symbol</a></h3>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_arrow_left">
&rarr;
</td>
<td class="td_pblock_left">
rst_n_i
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
<b>Timetag seconds register (upper):</b>
</td>
<td class="td_arrow_right">
</td>
</tr>
<tr>
<td class="td_arrow_left">
&rarr;
</td>
<td class="td_pblock_left">
clk_sys_i
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
timetag_core_seconds_upper_o[7:0]
</td>
<td class="td_arrow_right">
&rArr;
</td>
</tr>
<tr>
<td class="td_arrow_left">
&rArr;
</td>
<td class="td_pblock_left">
wb_adr_i[4:0]
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
timetag_core_seconds_upper_i[7:0]
</td>
<td class="td_arrow_right">
&lArr;
</td>
</tr>
<tr>
<td class="td_arrow_left">
&rArr;
</td>
<td class="td_pblock_left">
wb_dat_i[31:0]
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
timetag_core_seconds_upper_load_o
</td>
<td class="td_arrow_right">
&rarr;
</td>
</tr>
<tr>
<td class="td_arrow_left">
&lArr;
</td>
<td class="td_pblock_left">
wb_dat_o[31:0]
</td>
<td class="td_sym_center">
&nbsp;
</td>
<td class="td_pblock_right">
</td>
<td class="td_arrow_right">
</td>
</tr>
<tr>
<td class="td_arrow_left">
&rarr;
</td>
<td class="td_pblock_left">
wb_cyc_i
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
<b>Timetag seconds register (lower):</b>
</td>
<td class="td_arrow_right">
</td>
</tr>
<tr>
<td class="td_arrow_left">
&rArr;
</td>
<td class="td_pblock_left">
wb_sel_i[3:0]
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
timetag_core_seconds_lower_o[31:0]
</td>
<td class="td_arrow_right">
&rArr;
</td>
</tr>
<tr>
<td class="td_arrow_left">
&rarr;
</td>
<td class="td_pblock_left">
wb_stb_i
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
timetag_core_seconds_lower_i[31:0]
</td>
<td class="td_arrow_right">
&lArr;
</td>
</tr>
<tr>
<td class="td_arrow_left">
&rarr;
</td>
<td class="td_pblock_left">
wb_we_i
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
timetag_core_seconds_lower_load_o
</td>
<td class="td_arrow_right">
&rarr;
</td>
</tr>
<tr>
<td class="td_arrow_left">
&larr;
</td>
<td class="td_pblock_left">
wb_ack_o
</td>
<td class="td_sym_center">
&nbsp;
</td>
<td class="td_pblock_right">
</td>
<td class="td_arrow_right">
</td>
</tr>
<tr>
<td class="td_arrow_left">
&larr;
</td>
<td class="td_pblock_left">
wb_stall_o
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
<b>Timetag coarse time register, system clock ticks (125MHz):</b>
</td>
<td class="td_arrow_right">
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
timetag_core_coarse_o[27:0]
</td>
<td class="td_arrow_right">
&rArr;
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
timetag_core_coarse_i[27:0]
</td>
<td class="td_arrow_right">
&lArr;
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
timetag_core_coarse_load_o
</td>
<td class="td_arrow_right">
&rarr;
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
&nbsp;
</td>
<td class="td_pblock_right">
</td>
<td class="td_arrow_right">
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
<b>Time trigger seconds register (upper):</b>
</td>
<td class="td_arrow_right">
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
timetag_core_time_trig_seconds_upper_o[7:0]
</td>
<td class="td_arrow_right">
&rArr;
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
&nbsp;
</td>
<td class="td_pblock_right">
</td>
<td class="td_arrow_right">
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
<b>Time trigger seconds register (lower):</b>
</td>
<td class="td_arrow_right">
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
timetag_core_time_trig_seconds_lower_o[31:0]
</td>
<td class="td_arrow_right">
&rArr;
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
&nbsp;
</td>
<td class="td_pblock_right">
</td>
<td class="td_arrow_right">
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
<b>Time trigger coarse time register, system clock ticks (125MHz):</b>
</td>
<td class="td_arrow_right">
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
timetag_core_time_trig_coarse_o[27:0]
</td>
<td class="td_arrow_right">
&rArr;
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
&nbsp;
</td>
<td class="td_pblock_right">
</td>
<td class="td_arrow_right">
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
<b>Trigger time-tag seconds register (upper):</b>
</td>
<td class="td_arrow_right">
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
timetag_core_trig_tag_seconds_upper_i[7:0]
</td>
<td class="td_arrow_right">
&lArr;
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
&nbsp;
</td>
<td class="td_pblock_right">
</td>
<td class="td_arrow_right">
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
<b>Trigger time-tag seconds register (lower):</b>
</td>
<td class="td_arrow_right">
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
timetag_core_trig_tag_seconds_lower_i[31:0]
</td>
<td class="td_arrow_right">
&lArr;
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
&nbsp;
</td>
<td class="td_pblock_right">
</td>
<td class="td_arrow_right">
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
<b>Trigger time-tag coarse time (system clock ticks 125MHz) register:</b>
</td>
<td class="td_arrow_right">
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
timetag_core_trig_tag_coarse_i[27:0]
</td>
<td class="td_arrow_right">
&lArr;
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
&nbsp;
</td>
<td class="td_pblock_right">
</td>
<td class="td_arrow_right">
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
<b>Acquisition start time-tag seconds register (upper):</b>
</td>
<td class="td_arrow_right">
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
timetag_core_acq_start_tag_seconds_upper_i[7:0]
</td>
<td class="td_arrow_right">
&lArr;
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
&nbsp;
</td>
<td class="td_pblock_right">
</td>
<td class="td_arrow_right">
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
<b>Acquisition start time-tag seconds register (lower):</b>
</td>
<td class="td_arrow_right">
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
timetag_core_acq_start_tag_seconds_lower_i[31:0]
</td>
<td class="td_arrow_right">
&lArr;
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
&nbsp;
</td>
<td class="td_pblock_right">
</td>
<td class="td_arrow_right">
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
<b>Acquisition start time-tag coarse time (system clock ticks 125MHz) register:</b>
</td>
<td class="td_arrow_right">
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
timetag_core_acq_start_tag_coarse_i[27:0]
</td>
<td class="td_arrow_right">
&lArr;
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
&nbsp;
</td>
<td class="td_pblock_right">
</td>
<td class="td_arrow_right">
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
<b>Acquisition stop time-tag seconds register (upper):</b>
</td>
<td class="td_arrow_right">
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
timetag_core_acq_stop_tag_seconds_upper_i[7:0]
</td>
<td class="td_arrow_right">
&lArr;
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
&nbsp;
</td>
<td class="td_pblock_right">
</td>
<td class="td_arrow_right">
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
<b>Acquisition stop time-tag seconds register (lower):</b>
</td>
<td class="td_arrow_right">
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
timetag_core_acq_stop_tag_seconds_lower_i[31:0]
</td>
<td class="td_arrow_right">
&lArr;
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
&nbsp;
</td>
<td class="td_pblock_right">
</td>
<td class="td_arrow_right">
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
<b>Acquisition stop time-tag coarse time (system clock ticks 125MHz) register:</b>
</td>
<td class="td_arrow_right">
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
timetag_core_acq_stop_tag_coarse_i[27:0]
</td>
<td class="td_arrow_right">
&lArr;
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
&nbsp;
</td>
<td class="td_pblock_right">
</td>
<td class="td_arrow_right">
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
<b>Acquisition end time-tag seconds register (upper):</b>
</td>
<td class="td_arrow_right">
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
timetag_core_acq_end_tag_seconds_upper_i[7:0]
</td>
<td class="td_arrow_right">
&lArr;
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
&nbsp;
</td>
<td class="td_pblock_right">
</td>
<td class="td_arrow_right">
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
<b>Acquisition end time-tag seconds register (lower):</b>
</td>
<td class="td_arrow_right">
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
timetag_core_acq_end_tag_seconds_lower_i[31:0]
</td>
<td class="td_arrow_right">
&lArr;
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
&nbsp;
</td>
<td class="td_pblock_right">
</td>
<td class="td_arrow_right">
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
<b>Acquisition end time-tag coarse time (system clock ticks 125MHz) register:</b>
</td>
<td class="td_arrow_right">
</td>
</tr>
<tr>
<td class="td_arrow_left">
</td>
<td class="td_pblock_left">
</td>
<td class="td_sym_center">
</td>
<td class="td_pblock_right">
timetag_core_acq_end_tag_coarse_i[27:0]
</td>
<td class="td_arrow_right">
&lArr;
</td>
</tr>
</table>
<h3><a name="sect_3_0">3. Register description</a></h3>
<a name="SECONDS_UPPER"></a>
<h3><a name="sect_3_1">3.1. Timetag seconds register (upper)</a></h3>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td >
<b>HW prefix: </b>
</td>
<td class="td_code">
timetag_core_seconds_upper
</td>
</tr>
<tr>
<td >
<b>HW address: </b>
</td>
<td class="td_code">
0x0
</td>
</tr>
<tr>
<td >
<b>C prefix: </b>
</td>
<td class="td_code">
SECONDS_UPPER
</td>
</tr>
<tr>
<td >
<b>C offset: </b>
</td>
<td class="td_code">
0x0
</td>
</tr>
</table>
<p>
8 upper bits of seconds counter. Incremented everytime the coarse counter overflows.
</p>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
31
</td>
<td class="td_bit">
30
</td>
<td class="td_bit">
29
</td>
<td class="td_bit">
28
</td>
<td class="td_bit">
27
</td>
<td class="td_bit">
26
</td>
<td class="td_bit">
25
</td>
<td class="td_bit">
24
</td>
</tr>
<tr>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
23
</td>
<td class="td_bit">
22
</td>
<td class="td_bit">
21
</td>
<td class="td_bit">
20
</td>
<td class="td_bit">
19
</td>
<td class="td_bit">
18
</td>
<td class="td_bit">
17
</td>
<td class="td_bit">
16
</td>
</tr>
<tr>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
15
</td>
<td class="td_bit">
14
</td>
<td class="td_bit">
13
</td>
<td class="td_bit">
12
</td>
<td class="td_bit">
11
</td>
<td class="td_bit">
10
</td>
<td class="td_bit">
9
</td>
<td class="td_bit">
8
</td>
</tr>
<tr>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
7
</td>
<td class="td_bit">
6
</td>
<td class="td_bit">
5
</td>
<td class="td_bit">
4
</td>
<td class="td_bit">
3
</td>
<td class="td_bit">
2
</td>
<td class="td_bit">
1
</td>
<td class="td_bit">
0
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
SECONDS_UPPER[7:0]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<ul>
<li><b>
SECONDS_UPPER
</b>[<i>read/write</i>]: Timetag seconds
</ul>
<a name="SECONDS_LOWER"></a>
<h3><a name="sect_3_2">3.2. Timetag seconds register (lower)</a></h3>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td >
<b>HW prefix: </b>
</td>
<td class="td_code">
timetag_core_seconds_lower
</td>
</tr>
<tr>
<td >
<b>HW address: </b>
</td>
<td class="td_code">
0x1
</td>
</tr>
<tr>
<td >
<b>C prefix: </b>
</td>
<td class="td_code">
SECONDS_LOWER
</td>
</tr>
<tr>
<td >
<b>C offset: </b>
</td>
<td class="td_code">
0x4
</td>
</tr>
</table>
<p>
32 lower bits of seconds counter. Incremented everytime the coarse counter overflows.
</p>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
31
</td>
<td class="td_bit">
30
</td>
<td class="td_bit">
29
</td>
<td class="td_bit">
28
</td>
<td class="td_bit">
27
</td>
<td class="td_bit">
26
</td>
<td class="td_bit">
25
</td>
<td class="td_bit">
24
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
SECONDS_LOWER[31:24]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
23
</td>
<td class="td_bit">
22
</td>
<td class="td_bit">
21
</td>
<td class="td_bit">
20
</td>
<td class="td_bit">
19
</td>
<td class="td_bit">
18
</td>
<td class="td_bit">
17
</td>
<td class="td_bit">
16
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
SECONDS_LOWER[23:16]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
15
</td>
<td class="td_bit">
14
</td>
<td class="td_bit">
13
</td>
<td class="td_bit">
12
</td>
<td class="td_bit">
11
</td>
<td class="td_bit">
10
</td>
<td class="td_bit">
9
</td>
<td class="td_bit">
8
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
SECONDS_LOWER[15:8]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
7
</td>
<td class="td_bit">
6
</td>
<td class="td_bit">
5
</td>
<td class="td_bit">
4
</td>
<td class="td_bit">
3
</td>
<td class="td_bit">
2
</td>
<td class="td_bit">
1
</td>
<td class="td_bit">
0
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
SECONDS_LOWER[7:0]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<ul>
<li><b>
SECONDS_LOWER
</b>[<i>read/write</i>]: Timetag seconds
</ul>
<a name="COARSE"></a>
<h3><a name="sect_3_3">3.3. Timetag coarse time register, system clock ticks (125MHz)</a></h3>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td >
<b>HW prefix: </b>
</td>
<td class="td_code">
timetag_core_coarse
</td>
</tr>
<tr>
<td >
<b>HW address: </b>
</td>
<td class="td_code">
0x2
</td>
</tr>
<tr>
<td >
<b>C prefix: </b>
</td>
<td class="td_code">
COARSE
</td>
</tr>
<tr>
<td >
<b>C offset: </b>
</td>
<td class="td_code">
0x8
</td>
</tr>
</table>
<p>
Coarse time counter clocked by 125MHz system clock.<br>Counts from 0 to 125000000.
</p>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
31
</td>
<td class="td_bit">
30
</td>
<td class="td_bit">
29
</td>
<td class="td_bit">
28
</td>
<td class="td_bit">
27
</td>
<td class="td_bit">
26
</td>
<td class="td_bit">
25
</td>
<td class="td_bit">
24
</td>
</tr>
<tr>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td style="border: solid 1px black;" colspan=4 class="td_field">
COARSE[27:24]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
23
</td>
<td class="td_bit">
22
</td>
<td class="td_bit">
21
</td>
<td class="td_bit">
20
</td>
<td class="td_bit">
19
</td>
<td class="td_bit">
18
</td>
<td class="td_bit">
17
</td>
<td class="td_bit">
16
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
COARSE[23:16]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
15
</td>
<td class="td_bit">
14
</td>
<td class="td_bit">
13
</td>
<td class="td_bit">
12
</td>
<td class="td_bit">
11
</td>
<td class="td_bit">
10
</td>
<td class="td_bit">
9
</td>
<td class="td_bit">
8
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
COARSE[15:8]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
7
</td>
<td class="td_bit">
6
</td>
<td class="td_bit">
5
</td>
<td class="td_bit">
4
</td>
<td class="td_bit">
3
</td>
<td class="td_bit">
2
</td>
<td class="td_bit">
1
</td>
<td class="td_bit">
0
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
COARSE[7:0]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<ul>
<li><b>
COARSE
</b>[<i>read/write</i>]: Timetag coarse time
</ul>
<a name="TIME_TRIG_SECONDS_UPPER"></a>
<h3><a name="sect_3_4">3.4. Time trigger seconds register (upper)</a></h3>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td >
<b>HW prefix: </b>
</td>
<td class="td_code">
timetag_core_time_trig_seconds_upper
</td>
</tr>
<tr>
<td >
<b>HW address: </b>
</td>
<td class="td_code">
0x3
</td>
</tr>
<tr>
<td >
<b>C prefix: </b>
</td>
<td class="td_code">
TIME_TRIG_SECONDS_UPPER
</td>
</tr>
<tr>
<td >
<b>C offset: </b>
</td>
<td class="td_code">
0xc
</td>
</tr>
</table>
<p>
8 upper bits of seconds used for timer trigger.
</p>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
31
</td>
<td class="td_bit">
30
</td>
<td class="td_bit">
29
</td>
<td class="td_bit">
28
</td>
<td class="td_bit">
27
</td>
<td class="td_bit">
26
</td>
<td class="td_bit">
25
</td>
<td class="td_bit">
24
</td>
</tr>
<tr>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
23
</td>
<td class="td_bit">
22
</td>
<td class="td_bit">
21
</td>
<td class="td_bit">
20
</td>
<td class="td_bit">
19
</td>
<td class="td_bit">
18
</td>
<td class="td_bit">
17
</td>
<td class="td_bit">
16
</td>
</tr>
<tr>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
15
</td>
<td class="td_bit">
14
</td>
<td class="td_bit">
13
</td>
<td class="td_bit">
12
</td>
<td class="td_bit">
11
</td>
<td class="td_bit">
10
</td>
<td class="td_bit">
9
</td>
<td class="td_bit">
8
</td>
</tr>
<tr>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
7
</td>
<td class="td_bit">
6
</td>
<td class="td_bit">
5
</td>
<td class="td_bit">
4
</td>
<td class="td_bit">
3
</td>
<td class="td_bit">
2
</td>
<td class="td_bit">
1
</td>
<td class="td_bit">
0
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
TIME_TRIG_SECONDS_UPPER[7:0]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<ul>
<li><b>
TIME_TRIG_SECONDS_UPPER
</b>[<i>read/write</i>]: Time trigger seconds
</ul>
<a name="TIME_TRIG_SECONDS_LOWER"></a>
<h3><a name="sect_3_5">3.5. Time trigger seconds register (lower)</a></h3>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td >
<b>HW prefix: </b>
</td>
<td class="td_code">
timetag_core_time_trig_seconds_lower
</td>
</tr>
<tr>
<td >
<b>HW address: </b>
</td>
<td class="td_code">
0x4
</td>
</tr>
<tr>
<td >
<b>C prefix: </b>
</td>
<td class="td_code">
TIME_TRIG_SECONDS_LOWER
</td>
</tr>
<tr>
<td >
<b>C offset: </b>
</td>
<td class="td_code">
0x10
</td>
</tr>
</table>
<p>
32 lower bits of seconds used for time trigger.
</p>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
31
</td>
<td class="td_bit">
30
</td>
<td class="td_bit">
29
</td>
<td class="td_bit">
28
</td>
<td class="td_bit">
27
</td>
<td class="td_bit">
26
</td>
<td class="td_bit">
25
</td>
<td class="td_bit">
24
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
TIME_TRIG_SECONDS_LOWER[31:24]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
23
</td>
<td class="td_bit">
22
</td>
<td class="td_bit">
21
</td>
<td class="td_bit">
20
</td>
<td class="td_bit">
19
</td>
<td class="td_bit">
18
</td>
<td class="td_bit">
17
</td>
<td class="td_bit">
16
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
TIME_TRIG_SECONDS_LOWER[23:16]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
15
</td>
<td class="td_bit">
14
</td>
<td class="td_bit">
13
</td>
<td class="td_bit">
12
</td>
<td class="td_bit">
11
</td>
<td class="td_bit">
10
</td>
<td class="td_bit">
9
</td>
<td class="td_bit">
8
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
TIME_TRIG_SECONDS_LOWER[15:8]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
7
</td>
<td class="td_bit">
6
</td>
<td class="td_bit">
5
</td>
<td class="td_bit">
4
</td>
<td class="td_bit">
3
</td>
<td class="td_bit">
2
</td>
<td class="td_bit">
1
</td>
<td class="td_bit">
0
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
TIME_TRIG_SECONDS_LOWER[7:0]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<ul>
<li><b>
TIME_TRIG_SECONDS_LOWER
</b>[<i>read/write</i>]: Time trigger seconds
</ul>
<a name="TIME_TRIG_COARSE"></a>
<h3><a name="sect_3_6">3.6. Time trigger coarse time register, system clock ticks (125MHz)</a></h3>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td >
<b>HW prefix: </b>
</td>
<td class="td_code">
timetag_core_time_trig_coarse
</td>
</tr>
<tr>
<td >
<b>HW address: </b>
</td>
<td class="td_code">
0x5
</td>
</tr>
<tr>
<td >
<b>C prefix: </b>
</td>
<td class="td_code">
TIME_TRIG_COARSE
</td>
</tr>
<tr>
<td >
<b>C offset: </b>
</td>
<td class="td_code">
0x14
</td>
</tr>
</table>
<p>
Coarse time counter clocked by 125MHz system clock.<br>Counts from 0 to 125000000.
</p>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
31
</td>
<td class="td_bit">
30
</td>
<td class="td_bit">
29
</td>
<td class="td_bit">
28
</td>
<td class="td_bit">
27
</td>
<td class="td_bit">
26
</td>
<td class="td_bit">
25
</td>
<td class="td_bit">
24
</td>
</tr>
<tr>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td style="border: solid 1px black;" colspan=4 class="td_field">
TIME_TRIG_COARSE[27:24]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
23
</td>
<td class="td_bit">
22
</td>
<td class="td_bit">
21
</td>
<td class="td_bit">
20
</td>
<td class="td_bit">
19
</td>
<td class="td_bit">
18
</td>
<td class="td_bit">
17
</td>
<td class="td_bit">
16
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
TIME_TRIG_COARSE[23:16]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
15
</td>
<td class="td_bit">
14
</td>
<td class="td_bit">
13
</td>
<td class="td_bit">
12
</td>
<td class="td_bit">
11
</td>
<td class="td_bit">
10
</td>
<td class="td_bit">
9
</td>
<td class="td_bit">
8
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
TIME_TRIG_COARSE[15:8]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
7
</td>
<td class="td_bit">
6
</td>
<td class="td_bit">
5
</td>
<td class="td_bit">
4
</td>
<td class="td_bit">
3
</td>
<td class="td_bit">
2
</td>
<td class="td_bit">
1
</td>
<td class="td_bit">
0
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
TIME_TRIG_COARSE[7:0]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<ul>
<li><b>
TIME_TRIG_COARSE
</b>[<i>read/write</i>]: Time trigger coarse value
</ul>
<a name="TRIG_TAG_SECONDS_UPPER"></a>
<h3><a name="sect_3_7">3.7. Trigger time-tag seconds register (upper)</a></h3>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td >
<b>HW prefix: </b>
</td>
<td class="td_code">
timetag_core_trig_tag_seconds_upper
</td>
</tr>
<tr>
<td >
<b>HW address: </b>
</td>
<td class="td_code">
0x6
</td>
</tr>
<tr>
<td >
<b>C prefix: </b>
</td>
<td class="td_code">
TRIG_TAG_SECONDS_UPPER
</td>
</tr>
<tr>
<td >
<b>C offset: </b>
</td>
<td class="td_code">
0x18
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
31
</td>
<td class="td_bit">
30
</td>
<td class="td_bit">
29
</td>
<td class="td_bit">
28
</td>
<td class="td_bit">
27
</td>
<td class="td_bit">
26
</td>
<td class="td_bit">
25
</td>
<td class="td_bit">
24
</td>
</tr>
<tr>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
23
</td>
<td class="td_bit">
22
</td>
<td class="td_bit">
21
</td>
<td class="td_bit">
20
</td>
<td class="td_bit">
19
</td>
<td class="td_bit">
18
</td>
<td class="td_bit">
17
</td>
<td class="td_bit">
16
</td>
</tr>
<tr>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
15
</td>
<td class="td_bit">
14
</td>
<td class="td_bit">
13
</td>
<td class="td_bit">
12
</td>
<td class="td_bit">
11
</td>
<td class="td_bit">
10
</td>
<td class="td_bit">
9
</td>
<td class="td_bit">
8
</td>
</tr>
<tr>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
7
</td>
<td class="td_bit">
6
</td>
<td class="td_bit">
5
</td>
<td class="td_bit">
4
</td>
<td class="td_bit">
3
</td>
<td class="td_bit">
2
</td>
<td class="td_bit">
1
</td>
<td class="td_bit">
0
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
TRIG_TAG_SECONDS_UPPER[7:0]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<ul>
<li><b>
TRIG_TAG_SECONDS_UPPER
</b>[<i>read-only</i>]: Trigger time-tag seconds
<br>Holds time-tag seconds of the last trigger event
</ul>
<a name="TRIG_TAG_SECONDS_LOWER"></a>
<h3><a name="sect_3_8">3.8. Trigger time-tag seconds register (lower)</a></h3>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td >
<b>HW prefix: </b>
</td>
<td class="td_code">
timetag_core_trig_tag_seconds_lower
</td>
</tr>
<tr>
<td >
<b>HW address: </b>
</td>
<td class="td_code">
0x7
</td>
</tr>
<tr>
<td >
<b>C prefix: </b>
</td>
<td class="td_code">
TRIG_TAG_SECONDS_LOWER
</td>
</tr>
<tr>
<td >
<b>C offset: </b>
</td>
<td class="td_code">
0x1c
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
31
</td>
<td class="td_bit">
30
</td>
<td class="td_bit">
29
</td>
<td class="td_bit">
28
</td>
<td class="td_bit">
27
</td>
<td class="td_bit">
26
</td>
<td class="td_bit">
25
</td>
<td class="td_bit">
24
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
TRIG_TAG_SECONDS_LOWER[31:24]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
23
</td>
<td class="td_bit">
22
</td>
<td class="td_bit">
21
</td>
<td class="td_bit">
20
</td>
<td class="td_bit">
19
</td>
<td class="td_bit">
18
</td>
<td class="td_bit">
17
</td>
<td class="td_bit">
16
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
TRIG_TAG_SECONDS_LOWER[23:16]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
15
</td>
<td class="td_bit">
14
</td>
<td class="td_bit">
13
</td>
<td class="td_bit">
12
</td>
<td class="td_bit">
11
</td>
<td class="td_bit">
10
</td>
<td class="td_bit">
9
</td>
<td class="td_bit">
8
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
TRIG_TAG_SECONDS_LOWER[15:8]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
7
</td>
<td class="td_bit">
6
</td>
<td class="td_bit">
5
</td>
<td class="td_bit">
4
</td>
<td class="td_bit">
3
</td>
<td class="td_bit">
2
</td>
<td class="td_bit">
1
</td>
<td class="td_bit">
0
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
TRIG_TAG_SECONDS_LOWER[7:0]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<ul>
<li><b>
TRIG_TAG_SECONDS_LOWER
</b>[<i>read-only</i>]: Trigger time-tag seconds
<br>Holds time-tag seconds of the last trigger event
</ul>
<a name="TRIG_TAG_COARSE"></a>
<h3><a name="sect_3_9">3.9. Trigger time-tag coarse time (system clock ticks 125MHz) register</a></h3>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td >
<b>HW prefix: </b>
</td>
<td class="td_code">
timetag_core_trig_tag_coarse
</td>
</tr>
<tr>
<td >
<b>HW address: </b>
</td>
<td class="td_code">
0x8
</td>
</tr>
<tr>
<td >
<b>C prefix: </b>
</td>
<td class="td_code">
TRIG_TAG_COARSE
</td>
</tr>
<tr>
<td >
<b>C offset: </b>
</td>
<td class="td_code">
0x20
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
31
</td>
<td class="td_bit">
30
</td>
<td class="td_bit">
29
</td>
<td class="td_bit">
28
</td>
<td class="td_bit">
27
</td>
<td class="td_bit">
26
</td>
<td class="td_bit">
25
</td>
<td class="td_bit">
24
</td>
</tr>
<tr>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td style="border: solid 1px black;" colspan=4 class="td_field">
TRIG_TAG_COARSE[27:24]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
23
</td>
<td class="td_bit">
22
</td>
<td class="td_bit">
21
</td>
<td class="td_bit">
20
</td>
<td class="td_bit">
19
</td>
<td class="td_bit">
18
</td>
<td class="td_bit">
17
</td>
<td class="td_bit">
16
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
TRIG_TAG_COARSE[23:16]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
15
</td>
<td class="td_bit">
14
</td>
<td class="td_bit">
13
</td>
<td class="td_bit">
12
</td>
<td class="td_bit">
11
</td>
<td class="td_bit">
10
</td>
<td class="td_bit">
9
</td>
<td class="td_bit">
8
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
TRIG_TAG_COARSE[15:8]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
7
</td>
<td class="td_bit">
6
</td>
<td class="td_bit">
5
</td>
<td class="td_bit">
4
</td>
<td class="td_bit">
3
</td>
<td class="td_bit">
2
</td>
<td class="td_bit">
1
</td>
<td class="td_bit">
0
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
TRIG_TAG_COARSE[7:0]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<ul>
<li><b>
TRIG_TAG_COARSE
</b>[<i>read-only</i>]: Trigger time-tag coarse time
<br>Holds time-tag coarse time of the last trigger event
</ul>
<a name="ACQ_START_TAG_SECONDS_UPPER"></a>
<h3><a name="sect_3_10">3.10. Acquisition start time-tag seconds register (upper)</a></h3>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td >
<b>HW prefix: </b>
</td>
<td class="td_code">
timetag_core_acq_start_tag_seconds_upper
</td>
</tr>
<tr>
<td >
<b>HW address: </b>
</td>
<td class="td_code">
0x9
</td>
</tr>
<tr>
<td >
<b>C prefix: </b>
</td>
<td class="td_code">
ACQ_START_TAG_SECONDS_UPPER
</td>
</tr>
<tr>
<td >
<b>C offset: </b>
</td>
<td class="td_code">
0x24
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
31
</td>
<td class="td_bit">
30
</td>
<td class="td_bit">
29
</td>
<td class="td_bit">
28
</td>
<td class="td_bit">
27
</td>
<td class="td_bit">
26
</td>
<td class="td_bit">
25
</td>
<td class="td_bit">
24
</td>
</tr>
<tr>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
23
</td>
<td class="td_bit">
22
</td>
<td class="td_bit">
21
</td>
<td class="td_bit">
20
</td>
<td class="td_bit">
19
</td>
<td class="td_bit">
18
</td>
<td class="td_bit">
17
</td>
<td class="td_bit">
16
</td>
</tr>
<tr>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
15
</td>
<td class="td_bit">
14
</td>
<td class="td_bit">
13
</td>
<td class="td_bit">
12
</td>
<td class="td_bit">
11
</td>
<td class="td_bit">
10
</td>
<td class="td_bit">
9
</td>
<td class="td_bit">
8
</td>
</tr>
<tr>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
7
</td>
<td class="td_bit">
6
</td>
<td class="td_bit">
5
</td>
<td class="td_bit">
4
</td>
<td class="td_bit">
3
</td>
<td class="td_bit">
2
</td>
<td class="td_bit">
1
</td>
<td class="td_bit">
0
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
ACQ_START_TAG_SECONDS_UPPER[7:0]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<ul>
<li><b>
ACQ_START_TAG_SECONDS_UPPER
</b>[<i>read-only</i>]: Acquisition start time-tag seconds
<br>Holds time-tag seconds of the last acquisition start event
</ul>
<a name="ACQ_START_TAG_SECONDS_LOWER"></a>
<h3><a name="sect_3_11">3.11. Acquisition start time-tag seconds register (lower)</a></h3>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td >
<b>HW prefix: </b>
</td>
<td class="td_code">
timetag_core_acq_start_tag_seconds_lower
</td>
</tr>
<tr>
<td >
<b>HW address: </b>
</td>
<td class="td_code">
0xa
</td>
</tr>
<tr>
<td >
<b>C prefix: </b>
</td>
<td class="td_code">
ACQ_START_TAG_SECONDS_LOWER
</td>
</tr>
<tr>
<td >
<b>C offset: </b>
</td>
<td class="td_code">
0x28
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
31
</td>
<td class="td_bit">
30
</td>
<td class="td_bit">
29
</td>
<td class="td_bit">
28
</td>
<td class="td_bit">
27
</td>
<td class="td_bit">
26
</td>
<td class="td_bit">
25
</td>
<td class="td_bit">
24
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
ACQ_START_TAG_SECONDS_LOWER[31:24]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
23
</td>
<td class="td_bit">
22
</td>
<td class="td_bit">
21
</td>
<td class="td_bit">
20
</td>
<td class="td_bit">
19
</td>
<td class="td_bit">
18
</td>
<td class="td_bit">
17
</td>
<td class="td_bit">
16
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
ACQ_START_TAG_SECONDS_LOWER[23:16]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
15
</td>
<td class="td_bit">
14
</td>
<td class="td_bit">
13
</td>
<td class="td_bit">
12
</td>
<td class="td_bit">
11
</td>
<td class="td_bit">
10
</td>
<td class="td_bit">
9
</td>
<td class="td_bit">
8
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
ACQ_START_TAG_SECONDS_LOWER[15:8]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
7
</td>
<td class="td_bit">
6
</td>
<td class="td_bit">
5
</td>
<td class="td_bit">
4
</td>
<td class="td_bit">
3
</td>
<td class="td_bit">
2
</td>
<td class="td_bit">
1
</td>
<td class="td_bit">
0
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
ACQ_START_TAG_SECONDS_LOWER[7:0]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<ul>
<li><b>
ACQ_START_TAG_SECONDS_LOWER
</b>[<i>read-only</i>]: Acquisition start time-tag seconds
<br>Holds time-tag seconds of the last acquisition start event
</ul>
<a name="ACQ_START_TAG_COARSE"></a>
<h3><a name="sect_3_12">3.12. Acquisition start time-tag coarse time (system clock ticks 125MHz) register</a></h3>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td >
<b>HW prefix: </b>
</td>
<td class="td_code">
timetag_core_acq_start_tag_coarse
</td>
</tr>
<tr>
<td >
<b>HW address: </b>
</td>
<td class="td_code">
0xb
</td>
</tr>
<tr>
<td >
<b>C prefix: </b>
</td>
<td class="td_code">
ACQ_START_TAG_COARSE
</td>
</tr>
<tr>
<td >
<b>C offset: </b>
</td>
<td class="td_code">
0x2c
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
31
</td>
<td class="td_bit">
30
</td>
<td class="td_bit">
29
</td>
<td class="td_bit">
28
</td>
<td class="td_bit">
27
</td>
<td class="td_bit">
26
</td>
<td class="td_bit">
25
</td>
<td class="td_bit">
24
</td>
</tr>
<tr>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td style="border: solid 1px black;" colspan=4 class="td_field">
ACQ_START_TAG_COARSE[27:24]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
23
</td>
<td class="td_bit">
22
</td>
<td class="td_bit">
21
</td>
<td class="td_bit">
20
</td>
<td class="td_bit">
19
</td>
<td class="td_bit">
18
</td>
<td class="td_bit">
17
</td>
<td class="td_bit">
16
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
ACQ_START_TAG_COARSE[23:16]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
15
</td>
<td class="td_bit">
14
</td>
<td class="td_bit">
13
</td>
<td class="td_bit">
12
</td>
<td class="td_bit">
11
</td>
<td class="td_bit">
10
</td>
<td class="td_bit">
9
</td>
<td class="td_bit">
8
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
ACQ_START_TAG_COARSE[15:8]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
7
</td>
<td class="td_bit">
6
</td>
<td class="td_bit">
5
</td>
<td class="td_bit">
4
</td>
<td class="td_bit">
3
</td>
<td class="td_bit">
2
</td>
<td class="td_bit">
1
</td>
<td class="td_bit">
0
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
ACQ_START_TAG_COARSE[7:0]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<ul>
<li><b>
ACQ_START_TAG_COARSE
</b>[<i>read-only</i>]: Acquisition start time-tag coarse time
<br>Holds time-tag coarse time of the last acquisition start event
</ul>
<a name="ACQ_STOP_TAG_SECONDS_UPPER"></a>
<h3><a name="sect_3_13">3.13. Acquisition stop time-tag seconds register (upper)</a></h3>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td >
<b>HW prefix: </b>
</td>
<td class="td_code">
timetag_core_acq_stop_tag_seconds_upper
</td>
</tr>
<tr>
<td >
<b>HW address: </b>
</td>
<td class="td_code">
0xc
</td>
</tr>
<tr>
<td >
<b>C prefix: </b>
</td>
<td class="td_code">
ACQ_STOP_TAG_SECONDS_UPPER
</td>
</tr>
<tr>
<td >
<b>C offset: </b>
</td>
<td class="td_code">
0x30
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
31
</td>
<td class="td_bit">
30
</td>
<td class="td_bit">
29
</td>
<td class="td_bit">
28
</td>
<td class="td_bit">
27
</td>
<td class="td_bit">
26
</td>
<td class="td_bit">
25
</td>
<td class="td_bit">
24
</td>
</tr>
<tr>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
23
</td>
<td class="td_bit">
22
</td>
<td class="td_bit">
21
</td>
<td class="td_bit">
20
</td>
<td class="td_bit">
19
</td>
<td class="td_bit">
18
</td>
<td class="td_bit">
17
</td>
<td class="td_bit">
16
</td>
</tr>
<tr>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
15
</td>
<td class="td_bit">
14
</td>
<td class="td_bit">
13
</td>
<td class="td_bit">
12
</td>
<td class="td_bit">
11
</td>
<td class="td_bit">
10
</td>
<td class="td_bit">
9
</td>
<td class="td_bit">
8
</td>
</tr>
<tr>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
7
</td>
<td class="td_bit">
6
</td>
<td class="td_bit">
5
</td>
<td class="td_bit">
4
</td>
<td class="td_bit">
3
</td>
<td class="td_bit">
2
</td>
<td class="td_bit">
1
</td>
<td class="td_bit">
0
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
ACQ_STOP_TAG_SECONDS_UPPER[7:0]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<ul>
<li><b>
ACQ_STOP_TAG_SECONDS_UPPER
</b>[<i>read-only</i>]: Acquisition stop time-tag seconds
<br>Holds time-tag seconds of the last acquisition stop event
</ul>
<a name="ACQ_STOP_TAG_SECONDS_LOWER"></a>
<h3><a name="sect_3_14">3.14. Acquisition stop time-tag seconds register (lower)</a></h3>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td >
<b>HW prefix: </b>
</td>
<td class="td_code">
timetag_core_acq_stop_tag_seconds_lower
</td>
</tr>
<tr>
<td >
<b>HW address: </b>
</td>
<td class="td_code">
0xd
</td>
</tr>
<tr>
<td >
<b>C prefix: </b>
</td>
<td class="td_code">
ACQ_STOP_TAG_SECONDS_LOWER
</td>
</tr>
<tr>
<td >
<b>C offset: </b>
</td>
<td class="td_code">
0x34
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
31
</td>
<td class="td_bit">
30
</td>
<td class="td_bit">
29
</td>
<td class="td_bit">
28
</td>
<td class="td_bit">
27
</td>
<td class="td_bit">
26
</td>
<td class="td_bit">
25
</td>
<td class="td_bit">
24
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
ACQ_STOP_TAG_SECONDS_LOWER[31:24]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
23
</td>
<td class="td_bit">
22
</td>
<td class="td_bit">
21
</td>
<td class="td_bit">
20
</td>
<td class="td_bit">
19
</td>
<td class="td_bit">
18
</td>
<td class="td_bit">
17
</td>
<td class="td_bit">
16
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
ACQ_STOP_TAG_SECONDS_LOWER[23:16]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
15
</td>
<td class="td_bit">
14
</td>
<td class="td_bit">
13
</td>
<td class="td_bit">
12
</td>
<td class="td_bit">
11
</td>
<td class="td_bit">
10
</td>
<td class="td_bit">
9
</td>
<td class="td_bit">
8
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
ACQ_STOP_TAG_SECONDS_LOWER[15:8]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
7
</td>
<td class="td_bit">
6
</td>
<td class="td_bit">
5
</td>
<td class="td_bit">
4
</td>
<td class="td_bit">
3
</td>
<td class="td_bit">
2
</td>
<td class="td_bit">
1
</td>
<td class="td_bit">
0
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
ACQ_STOP_TAG_SECONDS_LOWER[7:0]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<ul>
<li><b>
ACQ_STOP_TAG_SECONDS_LOWER
</b>[<i>read-only</i>]: Acquisition stop time-tag seconds
<br>Holds time-tag seconds of the last acquisition stop event
</ul>
<a name="ACQ_STOP_TAG_COARSE"></a>
<h3><a name="sect_3_15">3.15. Acquisition stop time-tag coarse time (system clock ticks 125MHz) register</a></h3>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td >
<b>HW prefix: </b>
</td>
<td class="td_code">
timetag_core_acq_stop_tag_coarse
</td>
</tr>
<tr>
<td >
<b>HW address: </b>
</td>
<td class="td_code">
0xe
</td>
</tr>
<tr>
<td >
<b>C prefix: </b>
</td>
<td class="td_code">
ACQ_STOP_TAG_COARSE
</td>
</tr>
<tr>
<td >
<b>C offset: </b>
</td>
<td class="td_code">
0x38
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
31
</td>
<td class="td_bit">
30
</td>
<td class="td_bit">
29
</td>
<td class="td_bit">
28
</td>
<td class="td_bit">
27
</td>
<td class="td_bit">
26
</td>
<td class="td_bit">
25
</td>
<td class="td_bit">
24
</td>
</tr>
<tr>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td style="border: solid 1px black;" colspan=4 class="td_field">
ACQ_STOP_TAG_COARSE[27:24]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
23
</td>
<td class="td_bit">
22
</td>
<td class="td_bit">
21
</td>
<td class="td_bit">
20
</td>
<td class="td_bit">
19
</td>
<td class="td_bit">
18
</td>
<td class="td_bit">
17
</td>
<td class="td_bit">
16
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
ACQ_STOP_TAG_COARSE[23:16]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
15
</td>
<td class="td_bit">
14
</td>
<td class="td_bit">
13
</td>
<td class="td_bit">
12
</td>
<td class="td_bit">
11
</td>
<td class="td_bit">
10
</td>
<td class="td_bit">
9
</td>
<td class="td_bit">
8
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
ACQ_STOP_TAG_COARSE[15:8]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
7
</td>
<td class="td_bit">
6
</td>
<td class="td_bit">
5
</td>
<td class="td_bit">
4
</td>
<td class="td_bit">
3
</td>
<td class="td_bit">
2
</td>
<td class="td_bit">
1
</td>
<td class="td_bit">
0
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
ACQ_STOP_TAG_COARSE[7:0]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<ul>
<li><b>
ACQ_STOP_TAG_COARSE
</b>[<i>read-only</i>]: Acquisition stop time-tag coarse time
<br>Holds time-tag coarse time of the last acquisition stop event
</ul>
<a name="ACQ_END_TAG_SECONDS_UPPER"></a>
<h3><a name="sect_3_16">3.16. Acquisition end time-tag seconds register (upper)</a></h3>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td >
<b>HW prefix: </b>
</td>
<td class="td_code">
timetag_core_acq_end_tag_seconds_upper
</td>
</tr>
<tr>
<td >
<b>HW address: </b>
</td>
<td class="td_code">
0xf
</td>
</tr>
<tr>
<td >
<b>C prefix: </b>
</td>
<td class="td_code">
ACQ_END_TAG_SECONDS_UPPER
</td>
</tr>
<tr>
<td >
<b>C offset: </b>
</td>
<td class="td_code">
0x3c
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
31
</td>
<td class="td_bit">
30
</td>
<td class="td_bit">
29
</td>
<td class="td_bit">
28
</td>
<td class="td_bit">
27
</td>
<td class="td_bit">
26
</td>
<td class="td_bit">
25
</td>
<td class="td_bit">
24
</td>
</tr>
<tr>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
23
</td>
<td class="td_bit">
22
</td>
<td class="td_bit">
21
</td>
<td class="td_bit">
20
</td>
<td class="td_bit">
19
</td>
<td class="td_bit">
18
</td>
<td class="td_bit">
17
</td>
<td class="td_bit">
16
</td>
</tr>
<tr>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
15
</td>
<td class="td_bit">
14
</td>
<td class="td_bit">
13
</td>
<td class="td_bit">
12
</td>
<td class="td_bit">
11
</td>
<td class="td_bit">
10
</td>
<td class="td_bit">
9
</td>
<td class="td_bit">
8
</td>
</tr>
<tr>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
7
</td>
<td class="td_bit">
6
</td>
<td class="td_bit">
5
</td>
<td class="td_bit">
4
</td>
<td class="td_bit">
3
</td>
<td class="td_bit">
2
</td>
<td class="td_bit">
1
</td>
<td class="td_bit">
0
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
ACQ_END_TAG_SECONDS_UPPER[7:0]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<ul>
<li><b>
ACQ_END_TAG_SECONDS_UPPER
</b>[<i>read-only</i>]: Acquisition end time-tag seconds
<br>Holds time-tag seconds of the last acquisition end event
</ul>
<a name="ACQ_END_TAG_SECONDS_LOWER"></a>
<h3><a name="sect_3_17">3.17. Acquisition end time-tag seconds register (lower)</a></h3>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td >
<b>HW prefix: </b>
</td>
<td class="td_code">
timetag_core_acq_end_tag_seconds_lower
</td>
</tr>
<tr>
<td >
<b>HW address: </b>
</td>
<td class="td_code">
0x10
</td>
</tr>
<tr>
<td >
<b>C prefix: </b>
</td>
<td class="td_code">
ACQ_END_TAG_SECONDS_LOWER
</td>
</tr>
<tr>
<td >
<b>C offset: </b>
</td>
<td class="td_code">
0x40
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
31
</td>
<td class="td_bit">
30
</td>
<td class="td_bit">
29
</td>
<td class="td_bit">
28
</td>
<td class="td_bit">
27
</td>
<td class="td_bit">
26
</td>
<td class="td_bit">
25
</td>
<td class="td_bit">
24
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
ACQ_END_TAG_SECONDS_LOWER[31:24]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
23
</td>
<td class="td_bit">
22
</td>
<td class="td_bit">
21
</td>
<td class="td_bit">
20
</td>
<td class="td_bit">
19
</td>
<td class="td_bit">
18
</td>
<td class="td_bit">
17
</td>
<td class="td_bit">
16
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
ACQ_END_TAG_SECONDS_LOWER[23:16]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
15
</td>
<td class="td_bit">
14
</td>
<td class="td_bit">
13
</td>
<td class="td_bit">
12
</td>
<td class="td_bit">
11
</td>
<td class="td_bit">
10
</td>
<td class="td_bit">
9
</td>
<td class="td_bit">
8
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
ACQ_END_TAG_SECONDS_LOWER[15:8]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
7
</td>
<td class="td_bit">
6
</td>
<td class="td_bit">
5
</td>
<td class="td_bit">
4
</td>
<td class="td_bit">
3
</td>
<td class="td_bit">
2
</td>
<td class="td_bit">
1
</td>
<td class="td_bit">
0
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
ACQ_END_TAG_SECONDS_LOWER[7:0]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<ul>
<li><b>
ACQ_END_TAG_SECONDS_LOWER
</b>[<i>read-only</i>]: Acquisition end time-tag seconds
<br>Holds time-tag seconds of the last acquisition end event
</ul>
<a name="ACQ_END_TAG_COARSE"></a>
<h3><a name="sect_3_18">3.18. Acquisition end time-tag coarse time (system clock ticks 125MHz) register</a></h3>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td >
<b>HW prefix: </b>
</td>
<td class="td_code">
timetag_core_acq_end_tag_coarse
</td>
</tr>
<tr>
<td >
<b>HW address: </b>
</td>
<td class="td_code">
0x11
</td>
</tr>
<tr>
<td >
<b>C prefix: </b>
</td>
<td class="td_code">
ACQ_END_TAG_COARSE
</td>
</tr>
<tr>
<td >
<b>C offset: </b>
</td>
<td class="td_code">
0x44
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
31
</td>
<td class="td_bit">
30
</td>
<td class="td_bit">
29
</td>
<td class="td_bit">
28
</td>
<td class="td_bit">
27
</td>
<td class="td_bit">
26
</td>
<td class="td_bit">
25
</td>
<td class="td_bit">
24
</td>
</tr>
<tr>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td class="td_unused">
-
</td>
<td style="border: solid 1px black;" colspan=4 class="td_field">
ACQ_END_TAG_COARSE[27:24]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
23
</td>
<td class="td_bit">
22
</td>
<td class="td_bit">
21
</td>
<td class="td_bit">
20
</td>
<td class="td_bit">
19
</td>
<td class="td_bit">
18
</td>
<td class="td_bit">
17
</td>
<td class="td_bit">
16
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
ACQ_END_TAG_COARSE[23:16]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
15
</td>
<td class="td_bit">
14
</td>
<td class="td_bit">
13
</td>
<td class="td_bit">
12
</td>
<td class="td_bit">
11
</td>
<td class="td_bit">
10
</td>
<td class="td_bit">
9
</td>
<td class="td_bit">
8
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
ACQ_END_TAG_COARSE[15:8]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td class="td_bit">
7
</td>
<td class="td_bit">
6
</td>
<td class="td_bit">
5
</td>
<td class="td_bit">
4
</td>
<td class="td_bit">
3
</td>
<td class="td_bit">
2
</td>
<td class="td_bit">
1
</td>
<td class="td_bit">
0
</td>
</tr>
<tr>
<td style="border: solid 1px black;" colspan=8 class="td_field">
ACQ_END_TAG_COARSE[7:0]
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
</tr>
</table>
<ul>
<li><b>
ACQ_END_TAG_COARSE
</b>[<i>read-only</i>]: Acquisition end time-tag coarse time
<br>Holds time-tag coarse time of the last acquisition end event
</ul>
</BODY>
</HTML>
peripheral {
name = "Time-tagging core registers";
description = "Wishbone slave for registers related to time-tagging core";
hdl_entity = "timetag_core_regs";
prefix = "timetag_core";
reg {
name = "Timetag seconds register (upper)";
description = "8 upper bits of seconds counter. Incremented everytime the coarse counter overflows.";
prefix = "seconds_upper";
field {
name = "Timetag seconds";
type = SLV;
load = LOAD_EXT;
size = 8;
access_bus = READ_WRITE;
access_dev = READ_WRITE;
};
};
reg {
name = "Timetag seconds register (lower)";
description = "32 lower bits of seconds counter. Incremented everytime the coarse counter overflows.";
prefix = "seconds_lower";
field {
name = "Timetag seconds";
type = SLV;
load = LOAD_EXT;
size = 32;
access_bus = READ_WRITE;
access_dev = READ_WRITE;
};
};
reg {
name = "Timetag coarse time register, system clock ticks (125MHz)";
description = "Coarse time counter clocked by 125MHz system clock.\nCounts from 0 to 125000000.";
prefix = "coarse";
field {
name = "Timetag coarse time";
type = SLV;
load = LOAD_EXT;
size = 28;
access_bus = READ_WRITE;
access_dev = READ_WRITE;
};
};
reg {
name = "Time trigger seconds register (upper)";
description = "8 upper bits of seconds used for timer trigger.";
prefix = "time_trig_seconds_upper";
field {
name = "Time trigger seconds";
type = SLV;
size = 8;
access_bus = READ_WRITE;
access_dev = READ_ONLY;
};
};
reg {
name = "Time trigger seconds register (lower)";
description = "32 lower bits of seconds used for time trigger.";
prefix = "time_trig_seconds_lower";
field {
name = "Time trigger seconds";
type = SLV;
size = 32;
access_bus = READ_WRITE;
access_dev = READ_ONLY;
};
};
reg {
name = "Time trigger coarse time register, system clock ticks (125MHz)";
description = "Coarse time counter clocked by 125MHz system clock.\nCounts from 0 to 125000000.";
prefix = "time_trig_coarse";
field {
name = "Time trigger coarse value";
type = SLV;
size = 28;
access_bus = READ_WRITE;
access_dev = READ_ONLY;
};
};
reg {
name = "Trigger time-tag seconds register (upper)";
prefix = "trig_tag_seconds_upper";
field {
name = "Trigger time-tag seconds";
description = "Holds time-tag seconds of the last trigger event";
type = SLV;
size = 8;
access_bus = READ_ONLY;
access_dev = WRITE_ONLY;
};
};
reg {
name = "Trigger time-tag seconds register (lower)";
prefix = "trig_tag_seconds_lower";
field {
name = "Trigger time-tag seconds";
description = "Holds time-tag seconds of the last trigger event";
type = SLV;
size = 32;
access_bus = READ_ONLY;
access_dev = WRITE_ONLY;
};
};
reg {
name = "Trigger time-tag coarse time (system clock ticks 125MHz) register";
prefix = "trig_tag_coarse";
field {
name = "Trigger time-tag coarse time";
description = "Holds time-tag coarse time of the last trigger event";
type = SLV;
size = 28;
access_bus = READ_ONLY;
access_dev = WRITE_ONLY;
};
};
reg {
name = "Acquisition start time-tag seconds register (upper)";
prefix = "acq_start_tag_seconds_upper";
field {
name = "Acquisition start time-tag seconds";
description = "Holds time-tag seconds of the last acquisition start event";
type = SLV;
size = 8;
access_bus = READ_ONLY;
access_dev = WRITE_ONLY;
};
};
reg {
name = "Acquisition start time-tag seconds register (lower)";
prefix = "acq_start_tag_seconds_lower";
field {
name = "Acquisition start time-tag seconds";
description = "Holds time-tag seconds of the last acquisition start event";
type = SLV;
size = 32;
access_bus = READ_ONLY;
access_dev = WRITE_ONLY;
};
};
reg {
name = "Acquisition start time-tag coarse time (system clock ticks 125MHz) register";
prefix = "acq_start_tag_coarse";
field {
name = "Acquisition start time-tag coarse time";
description = "Holds time-tag coarse time of the last acquisition start event";
type = SLV;
size = 28;
access_bus = READ_ONLY;
access_dev = WRITE_ONLY;
};
};
reg {
name = "Acquisition stop time-tag seconds register (upper)";
prefix = "acq_stop_tag_seconds_upper";
field {
name = "Acquisition stop time-tag seconds";
description = "Holds time-tag seconds of the last acquisition stop event";
type = SLV;
size = 8;
access_bus = READ_ONLY;
access_dev = WRITE_ONLY;
};
};
reg {
name = "Acquisition stop time-tag seconds register (lower)";
prefix = "acq_stop_tag_seconds_lower";
field {
name = "Acquisition stop time-tag seconds";
description = "Holds time-tag seconds of the last acquisition stop event";
type = SLV;
size = 32;
access_bus = READ_ONLY;
access_dev = WRITE_ONLY;
};
};
reg {
name = "Acquisition stop time-tag coarse time (system clock ticks 125MHz) register";
prefix = "acq_stop_tag_coarse";
field {
name = "Acquisition stop time-tag coarse time";
description = "Holds time-tag coarse time of the last acquisition stop event";
type = SLV;
size = 28;
access_bus = READ_ONLY;
access_dev = WRITE_ONLY;
};
};
reg {
name = "Acquisition end time-tag seconds register (upper)";
prefix = "acq_end_tag_seconds_upper";
field {
name = "Acquisition end time-tag seconds";
description = "Holds time-tag seconds of the last acquisition end event";
type = SLV;
size = 8;
access_bus = READ_ONLY;
access_dev = WRITE_ONLY;
};
};
reg {
name = "Acquisition end time-tag seconds register (lower)";
prefix = "acq_end_tag_seconds_lower";
field {
name = "Acquisition end time-tag seconds";
description = "Holds time-tag seconds of the last acquisition end event";
type = SLV;
size = 32;
access_bus = READ_ONLY;
access_dev = WRITE_ONLY;
};
};
reg {
name = "Acquisition end time-tag coarse time (system clock ticks 125MHz) register";
prefix = "acq_end_tag_coarse";
field {
name = "Acquisition end time-tag coarse time";
description = "Holds time-tag coarse time of the last acquisition end event";
type = SLV;
size = 28;
access_bus = READ_ONLY;
access_dev = WRITE_ONLY;
};
};
};
memory-map:
bus: wb-32-be
name: timetag_core_regs
description: Time-tagging core registers
comment: |
Wishbone slave for registers related to time-tagging core
x-hdl:
busgroup: True
iogroup: timetag_core
children:
- reg:
name: seconds_upper
address: 0x00000000
width: 32
access: rw
description: Timetag seconds register (upper)
x-hdl:
write-strobe: True
comment: |
8 upper bits of seconds counter. Incremented every time the coarse counter overflows.
children:
- field:
name: ""
range: 7-0
description: Timetag seconds
x-hdl:
type: wire
- reg:
name: seconds_lower
address: 0x00000004
width: 32
access: rw
description: Timetag seconds register (lower)
x-hdl:
write-strobe: True
type: wire
comment: |
32 lower bits of seconds counter. Incremented every time the coarse counter overflows.
- reg:
name: coarse
address: 0x00000008
width: 32
access: rw
description: Timetag coarse time register, system clock ticks (125MHz)
x-hdl:
write-strobe: True
comment: |
Coarse time counter clocked by 125MHz system clock.
Counts from 0 to 125000000.
children:
- field:
name: ""
range: 27-0
description: Timetag coarse time
x-hdl:
type: wire
- reg:
name: time_trig_seconds_upper
address: 0x0000000c
width: 32
access: rw
description: Time trigger seconds register (upper)
comment: |
8 upper bits of seconds used for timer trigger.
children:
- field:
name: ""
range: 7-0
description: Time trigger seconds
- reg:
name: time_trig_seconds_lower
address: 0x00000010
width: 32
access: rw
description: Time trigger seconds register (lower)
comment: |
32 lower bits of seconds used for time trigger.
- reg:
name: time_trig_coarse
address: 0x00000014
width: 32
access: rw
description: Time trigger coarse time register, system clock ticks (125MHz)
comment: |
Coarse time counter clocked by 125MHz system clock.
Counts from 0 to 125000000.
children:
- field:
name: ""
range: 27-0
description: Time trigger coarse value
- reg:
name: trig_tag_seconds_upper
address: 0x00000018
width: 32
access: ro
description: Trigger time-tag seconds register (upper)
children:
- field:
name: ""
range: 7-0
description: Trigger time-tag seconds
comment: |
Holds time-tag seconds of the last trigger event
- reg:
name: trig_tag_seconds_lower
address: 0x0000001c
width: 32
access: ro
description: Trigger time-tag seconds register (lower)
comment: |
Holds time-tag seconds of the last trigger event
- reg:
name: trig_tag_coarse
address: 0x00000020
width: 32
access: ro
description: Trigger time-tag coarse time (system clock ticks 125MHz) register
children:
- field:
name: ""
range: 27-0
description: Trigger time-tag coarse time
comment: |
Holds time-tag coarse time of the last trigger event
- reg:
name: acq_start_tag_seconds_upper
address: 0x00000024
width: 32
access: ro
description: Acquisition start time-tag seconds register (upper)
children:
- field:
name: ""
range: 7-0
description: Acquisition start time-tag seconds
comment: |
Holds time-tag seconds of the last acquisition start event
- reg:
name: acq_start_tag_seconds_lower
address: 0x00000028
width: 32
access: ro
description: Acquisition start time-tag seconds register (lower)
comment: |
Holds time-tag seconds of the last acquisition start event
- reg:
name: acq_start_tag_coarse
address: 0x0000002c
width: 32
access: ro
description: Acquisition start time-tag coarse time (system clock ticks 125MHz) register
children:
- field:
name: ""
range: 27-0
description: Acquisition start time-tag coarse time
comment: |
Holds time-tag coarse time of the last acquisition start event
- reg:
name: acq_stop_tag_seconds_upper
address: 0x00000030
width: 32
access: ro
description: Acquisition stop time-tag seconds register (upper)
children:
- field:
name: ""
range: 7-0
description: Acquisition stop time-tag seconds
comment: |
Holds time-tag seconds of the last acquisition stop event
- reg:
name: acq_stop_tag_seconds_lower
address: 0x00000034
width: 32
access: ro
description: Acquisition stop time-tag seconds register (lower)
comment: |
Holds time-tag seconds of the last acquisition stop event
- reg:
name: acq_stop_tag_coarse
address: 0x00000038
width: 32
access: ro
description: Acquisition stop time-tag coarse time (system clock ticks 125MHz) register
children:
- field:
name: ""
range: 27-0
description: Acquisition stop time-tag coarse time
comment: |
Holds time-tag coarse time of the last acquisition stop event
- reg:
name: acq_end_tag_seconds_upper
address: 0x0000003c
width: 32
access: ro
description: Acquisition end time-tag seconds register (upper)
children:
- field:
name: ""
range: 7-0
description: Acquisition end time-tag seconds
comment: |
Holds time-tag seconds of the last acquisition end event
- reg:
name: acq_end_tag_seconds_lower
address: 0x00000040
width: 32
access: ro
description: Acquisition end time-tag seconds register (lower)
comment: |
Holds time-tag seconds of the last acquisition end event
- reg:
name: acq_end_tag_coarse
address: 0x00000044
width: 32
access: ro
description: Acquisition end time-tag coarse time (system clock ticks 125MHz) register
children:
- field:
name: ""
range: 27-0
description: Acquisition end time-tag coarse time
comment: |
Holds time-tag coarse time of the last acquisition end event
-- Do not edit; this file was generated by Cheby using these options:
-- -i timetag_core_regs.cheby --gen-hdl=timetag_core_regs.vhd
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use work.wishbone_pkg.all;
package timetag_core_regs_pkg is
type t_timetag_core_master_out is record
seconds_upper : std_logic_vector(7 downto 0);
seconds_upper_wr : std_logic;
seconds_lower : std_logic_vector(31 downto 0);
seconds_lower_wr : std_logic;
coarse : std_logic_vector(27 downto 0);
coarse_wr : std_logic;
time_trig_seconds_upper : std_logic_vector(7 downto 0);
time_trig_seconds_lower : std_logic_vector(31 downto 0);
time_trig_coarse : std_logic_vector(27 downto 0);
end record t_timetag_core_master_out;
subtype t_timetag_core_slave_in is t_timetag_core_master_out;
type t_timetag_core_slave_out is record
seconds_upper : std_logic_vector(7 downto 0);
seconds_lower : std_logic_vector(31 downto 0);
coarse : std_logic_vector(27 downto 0);
trig_tag_seconds_upper : std_logic_vector(7 downto 0);
trig_tag_seconds_lower : std_logic_vector(31 downto 0);
trig_tag_coarse : std_logic_vector(27 downto 0);
acq_start_tag_seconds_upper : std_logic_vector(7 downto 0);
acq_start_tag_seconds_lower : std_logic_vector(31 downto 0);
acq_start_tag_coarse : std_logic_vector(27 downto 0);
acq_stop_tag_seconds_upper : std_logic_vector(7 downto 0);
acq_stop_tag_seconds_lower : std_logic_vector(31 downto 0);
acq_stop_tag_coarse : std_logic_vector(27 downto 0);
acq_end_tag_seconds_upper : std_logic_vector(7 downto 0);
acq_end_tag_seconds_lower : std_logic_vector(31 downto 0);
acq_end_tag_coarse : std_logic_vector(27 downto 0);
end record t_timetag_core_slave_out;
subtype t_timetag_core_master_in is t_timetag_core_slave_out;
end timetag_core_regs_pkg;
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use work.wishbone_pkg.all;
use work.timetag_core_regs_pkg.all;
entity timetag_core_regs is
port (
rst_n_i : in std_logic;
clk_i : in std_logic;
wb_i : in t_wishbone_slave_in;
wb_o : out t_wishbone_slave_out;
-- Wires and registers
timetag_core_i : in t_timetag_core_master_in;
timetag_core_o : out t_timetag_core_master_out
);
end timetag_core_regs;
architecture syn of timetag_core_regs is
signal rd_int : std_logic;
signal wr_int : std_logic;
signal rd_ack_int : std_logic;
signal wr_ack_int : std_logic;
signal wb_en : std_logic;
signal ack_int : std_logic;
signal wb_rip : std_logic;
signal wb_wip : std_logic;
signal time_trig_seconds_upper_reg : std_logic_vector(7 downto 0);
signal time_trig_seconds_lower_reg : std_logic_vector(31 downto 0);
signal time_trig_coarse_reg : std_logic_vector(27 downto 0);
signal reg_rdat_int : std_logic_vector(31 downto 0);
signal rd_ack1_int : std_logic;
begin
-- WB decode signals
wb_en <= wb_i.cyc and wb_i.stb;
process (clk_i) begin
if rising_edge(clk_i) then
if rst_n_i = '0' then
wb_rip <= '0';
else
wb_rip <= (wb_rip or (wb_en and not wb_i.we)) and not rd_ack_int;
end if;
end if;
end process;
rd_int <= (wb_en and not wb_i.we) and not wb_rip;
process (clk_i) begin
if rising_edge(clk_i) then
if rst_n_i = '0' then
wb_wip <= '0';
else
wb_wip <= (wb_wip or (wb_en and wb_i.we)) and not wr_ack_int;
end if;
end if;
end process;
wr_int <= (wb_en and wb_i.we) and not wb_wip;
ack_int <= rd_ack_int or wr_ack_int;
wb_o.ack <= ack_int;
wb_o.stall <= not ack_int and wb_en;
wb_o.rty <= '0';
wb_o.err <= '0';
-- Assign outputs
timetag_core_o.time_trig_seconds_upper <= time_trig_seconds_upper_reg;
timetag_core_o.time_trig_seconds_lower <= time_trig_seconds_lower_reg;
timetag_core_o.time_trig_coarse <= time_trig_coarse_reg;
-- Process for write requests.
process (clk_i) begin
if rising_edge(clk_i) then
if rst_n_i = '0' then
wr_ack_int <= '0';
timetag_core_o.seconds_upper_wr <= '0';
timetag_core_o.seconds_lower_wr <= '0';
timetag_core_o.coarse_wr <= '0';
time_trig_seconds_upper_reg <= "00000000";
time_trig_seconds_lower_reg <= "00000000000000000000000000000000";
time_trig_coarse_reg <= "0000000000000000000000000000";
else
wr_ack_int <= '0';
timetag_core_o.seconds_upper_wr <= '0';
timetag_core_o.seconds_lower_wr <= '0';
timetag_core_o.coarse_wr <= '0';
case wb_i.adr(6 downto 2) is
when "00000" =>
-- Register seconds_upper
timetag_core_o.seconds_upper_wr <= wr_int;
if wr_int = '1' then
timetag_core_o.seconds_upper <= wb_i.dat(7 downto 0);
end if;
wr_ack_int <= wr_int;
when "00001" =>
-- Register seconds_lower
timetag_core_o.seconds_lower_wr <= wr_int;
if wr_int = '1' then
timetag_core_o.seconds_lower <= wb_i.dat;
end if;
wr_ack_int <= wr_int;
when "00010" =>
-- Register coarse
timetag_core_o.coarse_wr <= wr_int;
if wr_int = '1' then
timetag_core_o.coarse <= wb_i.dat(27 downto 0);
end if;
wr_ack_int <= wr_int;
when "00011" =>
-- Register time_trig_seconds_upper
if wr_int = '1' then
time_trig_seconds_upper_reg <= wb_i.dat(7 downto 0);
end if;
wr_ack_int <= wr_int;
when "00100" =>
-- Register time_trig_seconds_lower
if wr_int = '1' then
time_trig_seconds_lower_reg <= wb_i.dat;
end if;
wr_ack_int <= wr_int;
when "00101" =>
-- Register time_trig_coarse
if wr_int = '1' then
time_trig_coarse_reg <= wb_i.dat(27 downto 0);
end if;
wr_ack_int <= wr_int;
when "00110" =>
-- Register trig_tag_seconds_upper
when "00111" =>
-- Register trig_tag_seconds_lower
when "01000" =>
-- Register trig_tag_coarse
when "01001" =>
-- Register acq_start_tag_seconds_upper
when "01010" =>
-- Register acq_start_tag_seconds_lower
when "01011" =>
-- Register acq_start_tag_coarse
when "01100" =>
-- Register acq_stop_tag_seconds_upper
when "01101" =>
-- Register acq_stop_tag_seconds_lower
when "01110" =>
-- Register acq_stop_tag_coarse
when "01111" =>
-- Register acq_end_tag_seconds_upper
when "10000" =>
-- Register acq_end_tag_seconds_lower
when "10001" =>
-- Register acq_end_tag_coarse
when others =>
wr_ack_int <= wr_int;
end case;
end if;
end if;
end process;
-- Process for registers read.
process (clk_i) begin
if rising_edge(clk_i) then
if rst_n_i = '0' then
rd_ack1_int <= '0';
else
reg_rdat_int <= (others => '0');
case wb_i.adr(6 downto 2) is
when "00000" =>
-- seconds_upper
reg_rdat_int(7 downto 0) <= timetag_core_i.seconds_upper;
rd_ack1_int <= rd_int;
when "00001" =>
-- seconds_lower
reg_rdat_int <= timetag_core_i.seconds_lower;
rd_ack1_int <= rd_int;
when "00010" =>
-- coarse
reg_rdat_int(27 downto 0) <= timetag_core_i.coarse;
rd_ack1_int <= rd_int;
when "00011" =>
-- time_trig_seconds_upper
reg_rdat_int(7 downto 0) <= time_trig_seconds_upper_reg;
rd_ack1_int <= rd_int;
when "00100" =>
-- time_trig_seconds_lower
reg_rdat_int <= time_trig_seconds_lower_reg;
rd_ack1_int <= rd_int;
when "00101" =>
-- time_trig_coarse
reg_rdat_int(27 downto 0) <= time_trig_coarse_reg;
rd_ack1_int <= rd_int;
when "00110" =>
-- trig_tag_seconds_upper
reg_rdat_int(7 downto 0) <= timetag_core_i.trig_tag_seconds_upper;
rd_ack1_int <= rd_int;
when "00111" =>
-- trig_tag_seconds_lower
reg_rdat_int <= timetag_core_i.trig_tag_seconds_lower;
rd_ack1_int <= rd_int;
when "01000" =>
-- trig_tag_coarse
reg_rdat_int(27 downto 0) <= timetag_core_i.trig_tag_coarse;
rd_ack1_int <= rd_int;
when "01001" =>
-- acq_start_tag_seconds_upper
reg_rdat_int(7 downto 0) <= timetag_core_i.acq_start_tag_seconds_upper;
rd_ack1_int <= rd_int;
when "01010" =>
-- acq_start_tag_seconds_lower
reg_rdat_int <= timetag_core_i.acq_start_tag_seconds_lower;
rd_ack1_int <= rd_int;
when "01011" =>
-- acq_start_tag_coarse
reg_rdat_int(27 downto 0) <= timetag_core_i.acq_start_tag_coarse;
rd_ack1_int <= rd_int;
when "01100" =>
-- acq_stop_tag_seconds_upper
reg_rdat_int(7 downto 0) <= timetag_core_i.acq_stop_tag_seconds_upper;
rd_ack1_int <= rd_int;
when "01101" =>
-- acq_stop_tag_seconds_lower
reg_rdat_int <= timetag_core_i.acq_stop_tag_seconds_lower;
rd_ack1_int <= rd_int;
when "01110" =>
-- acq_stop_tag_coarse
reg_rdat_int(27 downto 0) <= timetag_core_i.acq_stop_tag_coarse;
rd_ack1_int <= rd_int;
when "01111" =>
-- acq_end_tag_seconds_upper
reg_rdat_int(7 downto 0) <= timetag_core_i.acq_end_tag_seconds_upper;
rd_ack1_int <= rd_int;
when "10000" =>
-- acq_end_tag_seconds_lower
reg_rdat_int <= timetag_core_i.acq_end_tag_seconds_lower;
rd_ack1_int <= rd_int;
when "10001" =>
-- acq_end_tag_coarse
reg_rdat_int(27 downto 0) <= timetag_core_i.acq_end_tag_coarse;
rd_ack1_int <= rd_int;
when others =>
reg_rdat_int <= (others => 'X');
rd_ack1_int <= rd_int;
end case;
end if;
end if;
end process;
-- Process for read requests.
process (wb_i.adr, reg_rdat_int, rd_ack1_int, rd_int) begin
-- By default ack read requests
wb_o.dat <= (others => '0');
case wb_i.adr(6 downto 2) is
when "00000" =>
-- seconds_upper
wb_o.dat <= reg_rdat_int;
rd_ack_int <= rd_ack1_int;
when "00001" =>
-- seconds_lower
wb_o.dat <= reg_rdat_int;
rd_ack_int <= rd_ack1_int;
when "00010" =>
-- coarse
wb_o.dat <= reg_rdat_int;
rd_ack_int <= rd_ack1_int;
when "00011" =>
-- time_trig_seconds_upper
wb_o.dat <= reg_rdat_int;
rd_ack_int <= rd_ack1_int;
when "00100" =>
-- time_trig_seconds_lower
wb_o.dat <= reg_rdat_int;
rd_ack_int <= rd_ack1_int;
when "00101" =>
-- time_trig_coarse
wb_o.dat <= reg_rdat_int;
rd_ack_int <= rd_ack1_int;
when "00110" =>
-- trig_tag_seconds_upper
wb_o.dat <= reg_rdat_int;
rd_ack_int <= rd_ack1_int;
when "00111" =>
-- trig_tag_seconds_lower
wb_o.dat <= reg_rdat_int;
rd_ack_int <= rd_ack1_int;
when "01000" =>
-- trig_tag_coarse
wb_o.dat <= reg_rdat_int;
rd_ack_int <= rd_ack1_int;
when "01001" =>
-- acq_start_tag_seconds_upper
wb_o.dat <= reg_rdat_int;
rd_ack_int <= rd_ack1_int;
when "01010" =>
-- acq_start_tag_seconds_lower
wb_o.dat <= reg_rdat_int;
rd_ack_int <= rd_ack1_int;
when "01011" =>
-- acq_start_tag_coarse
wb_o.dat <= reg_rdat_int;
rd_ack_int <= rd_ack1_int;
when "01100" =>
-- acq_stop_tag_seconds_upper
wb_o.dat <= reg_rdat_int;
rd_ack_int <= rd_ack1_int;
when "01101" =>
-- acq_stop_tag_seconds_lower
wb_o.dat <= reg_rdat_int;
rd_ack_int <= rd_ack1_int;
when "01110" =>
-- acq_stop_tag_coarse
wb_o.dat <= reg_rdat_int;
rd_ack_int <= rd_ack1_int;
when "01111" =>
-- acq_end_tag_seconds_upper
wb_o.dat <= reg_rdat_int;
rd_ack_int <= rd_ack1_int;
when "10000" =>
-- acq_end_tag_seconds_lower
wb_o.dat <= reg_rdat_int;
rd_ack_int <= rd_ack1_int;
when "10001" =>
-- acq_end_tag_coarse
wb_o.dat <= reg_rdat_int;
rd_ack_int <= rd_ack1_int;
when others =>
rd_ack_int <= rd_int;
end case;
end process;
end syn;
......@@ -248,9 +248,9 @@ module main;
#1us;
acc.write(`TAG_BASE + `ADDR_TIMETAG_CORE_SECONDS_UPPER, 'h00000032); // timetag core seconds high
acc.write(`TAG_BASE + `ADDR_TIMETAG_CORE_SECONDS_LOWER, 'h00005a34); // timetag core seconds low
acc.write(`TAG_BASE + `ADDR_TIMETAG_CORE_COARSE, 'h00000000); // timetag core ticks
acc.write(`TAG_BASE + `ADDR_TIMETAG_CORE_REGS_SECONDS_UPPER, 'h00000032); // timetag core seconds high
acc.write(`TAG_BASE + `ADDR_TIMETAG_CORE_REGS_SECONDS_LOWER, 'h00005a34); // timetag core seconds low
acc.write(`TAG_BASE + `ADDR_TIMETAG_CORE_REGS_COARSE, 'h00000000); // timetag core ticks
wait (acq_fsm_state == 1);
$display("<%t> START ACQ 1", $realtime);
......@@ -313,11 +313,11 @@ module main;
#1us;
// set time trigger
acc.write(`TAG_BASE + `ADDR_TIMETAG_CORE_TIME_TRIG_SECONDS_UPPER,
acc.write(`TAG_BASE + `ADDR_TIMETAG_CORE_REGS_TIME_TRIG_SECONDS_UPPER,
'h00000032); // timetag core seconds high
acc.write(`TAG_BASE + `ADDR_TIMETAG_CORE_TIME_TRIG_SECONDS_LOWER,
acc.write(`TAG_BASE + `ADDR_TIMETAG_CORE_REGS_TIME_TRIG_SECONDS_LOWER,
'h00005a34); // timetag core seconds low
acc.write(`TAG_BASE + `ADDR_TIMETAG_CORE_TIME_TRIG_COARSE,
acc.write(`TAG_BASE + `ADDR_TIMETAG_CORE_REGS_TIME_TRIG_COARSE,
'h00000e00); // timetag core ticks
acc.write(`CSR_BASE + `ADDR_FMC_ADC_100MS_CSR_PRE_SAMPLES, 'h00000010);
......@@ -358,7 +358,7 @@ module main;
// set time trigger
trigin_acc.write(`ADDR_ALT_TRIGIN_SECONDS + 0, 'h00000032);
trigin_acc.write(`ADDR_ALT_TRIGIN_SECONDS + 4, 'h00005a34);
acc.read(`TAG_BASE + `ADDR_TIMETAG_CORE_TIME_TRIG_COARSE, val);
acc.read(`TAG_BASE + `ADDR_TIMETAG_CORE_REGS_TIME_TRIG_COARSE, val);
trigin_acc.write(`ADDR_ALT_TRIGIN_CYCLES, val + 'h00001000);
trigin_acc.write(`ADDR_ALT_TRIGIN_CTRL, `ALT_TRIGIN_CTRL_ENABLE);
......
`define ADDR_TIMETAG_CORE_SECONDS_UPPER 7'h0
`define ADDR_TIMETAG_CORE_SECONDS_LOWER 7'h4
`define ADDR_TIMETAG_CORE_COARSE 7'h8
`define ADDR_TIMETAG_CORE_TIME_TRIG_SECONDS_UPPER 7'hc
`define ADDR_TIMETAG_CORE_TIME_TRIG_SECONDS_LOWER 7'h10
`define ADDR_TIMETAG_CORE_TIME_TRIG_COARSE 7'h14
`define ADDR_TIMETAG_CORE_TRIG_TAG_SECONDS_UPPER 7'h18
`define ADDR_TIMETAG_CORE_TRIG_TAG_SECONDS_LOWER 7'h1c
`define ADDR_TIMETAG_CORE_TRIG_TAG_COARSE 7'h20
`define ADDR_TIMETAG_CORE_ACQ_START_TAG_SECONDS_UPPER 7'h24
`define ADDR_TIMETAG_CORE_ACQ_START_TAG_SECONDS_LOWER 7'h28
`define ADDR_TIMETAG_CORE_ACQ_START_TAG_COARSE 7'h2c
`define ADDR_TIMETAG_CORE_ACQ_STOP_TAG_SECONDS_UPPER 7'h30
`define ADDR_TIMETAG_CORE_ACQ_STOP_TAG_SECONDS_LOWER 7'h34
`define ADDR_TIMETAG_CORE_ACQ_STOP_TAG_COARSE 7'h38
`define ADDR_TIMETAG_CORE_ACQ_END_TAG_SECONDS_UPPER 7'h3c
`define ADDR_TIMETAG_CORE_ACQ_END_TAG_SECONDS_LOWER 7'h40
`define ADDR_TIMETAG_CORE_ACQ_END_TAG_COARSE 7'h44
`define TIMETAG_CORE_REGS_SIZE 72
`define ADDR_TIMETAG_CORE_REGS_SECONDS_UPPER 'h0
`define TIMETAG_CORE_REGS_SECONDS_UPPER_OFFSET 0
`define TIMETAG_CORE_REGS_SECONDS_UPPER 'hff
`define ADDR_TIMETAG_CORE_REGS_SECONDS_LOWER 'h4
`define ADDR_TIMETAG_CORE_REGS_COARSE 'h8
`define TIMETAG_CORE_REGS_COARSE_OFFSET 0
`define TIMETAG_CORE_REGS_COARSE 'hfffffff
`define ADDR_TIMETAG_CORE_REGS_TIME_TRIG_SECONDS_UPPER 'hc
`define TIMETAG_CORE_REGS_TIME_TRIG_SECONDS_UPPER_OFFSET 0
`define TIMETAG_CORE_REGS_TIME_TRIG_SECONDS_UPPER 'hff
`define ADDR_TIMETAG_CORE_REGS_TIME_TRIG_SECONDS_LOWER 'h10
`define ADDR_TIMETAG_CORE_REGS_TIME_TRIG_COARSE 'h14
`define TIMETAG_CORE_REGS_TIME_TRIG_COARSE_OFFSET 0
`define TIMETAG_CORE_REGS_TIME_TRIG_COARSE 'hfffffff
`define ADDR_TIMETAG_CORE_REGS_TRIG_TAG_SECONDS_UPPER 'h18
`define TIMETAG_CORE_REGS_TRIG_TAG_SECONDS_UPPER_OFFSET 0
`define TIMETAG_CORE_REGS_TRIG_TAG_SECONDS_UPPER 'hff
`define ADDR_TIMETAG_CORE_REGS_TRIG_TAG_SECONDS_LOWER 'h1c
`define ADDR_TIMETAG_CORE_REGS_TRIG_TAG_COARSE 'h20
`define TIMETAG_CORE_REGS_TRIG_TAG_COARSE_OFFSET 0
`define TIMETAG_CORE_REGS_TRIG_TAG_COARSE 'hfffffff
`define ADDR_TIMETAG_CORE_REGS_ACQ_START_TAG_SECONDS_UPPER 'h24
`define TIMETAG_CORE_REGS_ACQ_START_TAG_SECONDS_UPPER_OFFSET 0
`define TIMETAG_CORE_REGS_ACQ_START_TAG_SECONDS_UPPER 'hff
`define ADDR_TIMETAG_CORE_REGS_ACQ_START_TAG_SECONDS_LOWER 'h28
`define ADDR_TIMETAG_CORE_REGS_ACQ_START_TAG_COARSE 'h2c
`define TIMETAG_CORE_REGS_ACQ_START_TAG_COARSE_OFFSET 0
`define TIMETAG_CORE_REGS_ACQ_START_TAG_COARSE 'hfffffff
`define ADDR_TIMETAG_CORE_REGS_ACQ_STOP_TAG_SECONDS_UPPER 'h30
`define TIMETAG_CORE_REGS_ACQ_STOP_TAG_SECONDS_UPPER_OFFSET 0
`define TIMETAG_CORE_REGS_ACQ_STOP_TAG_SECONDS_UPPER 'hff
`define ADDR_TIMETAG_CORE_REGS_ACQ_STOP_TAG_SECONDS_LOWER 'h34
`define ADDR_TIMETAG_CORE_REGS_ACQ_STOP_TAG_COARSE 'h38
`define TIMETAG_CORE_REGS_ACQ_STOP_TAG_COARSE_OFFSET 0
`define TIMETAG_CORE_REGS_ACQ_STOP_TAG_COARSE 'hfffffff
`define ADDR_TIMETAG_CORE_REGS_ACQ_END_TAG_SECONDS_UPPER 'h3c
`define TIMETAG_CORE_REGS_ACQ_END_TAG_SECONDS_UPPER_OFFSET 0
`define TIMETAG_CORE_REGS_ACQ_END_TAG_SECONDS_UPPER 'hff
`define ADDR_TIMETAG_CORE_REGS_ACQ_END_TAG_SECONDS_LOWER 'h40
`define ADDR_TIMETAG_CORE_REGS_ACQ_END_TAG_COARSE 'h44
`define TIMETAG_CORE_REGS_ACQ_END_TAG_COARSE_OFFSET 0
`define TIMETAG_CORE_REGS_ACQ_END_TAG_COARSE 'hfffffff
......@@ -41,7 +41,6 @@ use work.gencores_pkg.all;
use work.wishbone_pkg.all;
use work.fmc_adc_mezzanine_pkg.all;
use work.synthesis_descriptor.all;
use work.timetag_core_pkg.all;
use work.carrier_csr_wbgen2_pkg.all;
use work.wr_xilinx_pkg.all;
use work.wr_board_pkg.all;
......
......@@ -41,7 +41,6 @@ use work.gencores_pkg.all;
use work.wishbone_pkg.all;
use work.fmc_adc_mezzanine_pkg.all;
use work.synthesis_descriptor.all;
use work.timetag_core_pkg.all;
use work.carrier_csr_wbgen2_pkg.all;
use work.wr_xilinx_pkg.all;
use work.wr_board_pkg.all;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment