Commit f911e540 authored by Tomasz Wlostowski's avatar Tomasz Wlostowski

Merge branch 'master' of ohwr.org:fmc-projects/fmc-delay-1ns-8cha

parents 27a6774b ec8b2e68
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
-- Author : Tomasz Wlostowski -- Author : Tomasz Wlostowski
-- Company : CERN -- Company : CERN
-- Created : 2011-08-29 -- Created : 2011-08-29
-- Last update: 2012-02-16 -- Last update: 2012-05-18
-- Platform : FPGA-generic -- Platform : FPGA-generic
-- Standard : VHDL'93 -- Standard : VHDL'93
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
...@@ -60,10 +60,12 @@ entity fd_acam_timestamp_postprocessor is ...@@ -60,10 +60,12 @@ entity fd_acam_timestamp_postprocessor is
raw_valid_i : in std_logic; raw_valid_i : in std_logic;
raw_utc_i : in std_logic_vector(c_TIMESTAMP_UTC_BITS-1 downto 0); raw_utc_i : in std_logic_vector(c_TIMESTAMP_UTC_BITS-1 downto 0);
raw_utc_shifted_i : in std_logic_vector(c_TIMESTAMP_UTC_BITS-1 downto 0);
-- "start number" (value of coarse counter, counting at every start pulse of the -- "start number" (value of coarse counter, counting at every start pulse of the
-- TDC, i.e. 125 MHz / 16 = 7.8215 MHz) -- TDC, i.e. 125 MHz / 16 = 7.8215 MHz)
raw_coarse_i : in std_logic_vector(c_TIMESTAMP_COARSE_BITS-4-1 downto 0); raw_coarse_i : in std_logic_vector(c_TIMESTAMP_COARSE_BITS-4-1 downto 0);
raw_coarse_shifted_i : in std_logic_vector(c_TIMESTAMP_COARSE_BITS-4-1 downto 0);
-- raw fractional timestamp generated by ACAM -- raw fractional timestamp generated by ACAM
raw_frac_i : in std_logic_vector(22 downto 0); raw_frac_i : in std_logic_vector(22 downto 0);
...@@ -81,10 +83,11 @@ entity fd_acam_timestamp_postprocessor is ...@@ -81,10 +83,11 @@ entity fd_acam_timestamp_postprocessor is
-- Post-processed timestamp. WARNING! DE-NORMALIZED! -- Post-processed timestamp. WARNING! DE-NORMALIZED!
--------------------------------------------------------------------------- ---------------------------------------------------------------------------
tag_valid_o : out std_logic; tag_valid_o : out std_logic;
tag_utc_o : out std_logic_vector(c_TIMESTAMP_UTC_BITS-1 downto 0); tag_utc_o : out std_logic_vector(c_TIMESTAMP_UTC_BITS-1 downto 0);
tag_coarse_o : out std_logic_vector(c_TIMESTAMP_COARSE_BITS-1 downto 0); tag_coarse_o : out std_logic_vector(c_TIMESTAMP_COARSE_BITS-1 downto 0);
tag_frac_o : out std_logic_vector(g_frac_bits-1 downto 0); tag_frac_o : out std_logic_vector(g_frac_bits-1 downto 0);
tag_dbg_raw_o : out std_logic_vector(31 downto 0);
-- Wishbone regs -- Wishbone regs
regs_i : in t_fd_main_out_registers regs_i : in t_fd_main_out_registers
...@@ -143,7 +146,7 @@ begin -- behavioral ...@@ -143,7 +146,7 @@ begin -- behavioral
-- situations, ACAM internally adds a constant offset (StartOffset), which we have -- situations, ACAM internally adds a constant offset (StartOffset), which we have
-- to subtract here. -- to subtract here.
pp_pipe(0) <= raw_valid_i; pp_pipe(0) <= raw_valid_i;
post_frac_start_adj <= signed(raw_frac_i) - signed(regs_i.asor_offset_o); post_frac_start_adj <= signed(raw_frac_i) - signed(regs_i.asor_offset_o);
...@@ -181,9 +184,9 @@ begin -- behavioral ...@@ -181,9 +184,9 @@ begin -- behavioral
-- the synthesis tool to spread the multiplier across several stages, -- the synthesis tool to spread the multiplier across several stages,
-- improving the timing of the design. -- improving the timing of the design.
pp_pipe(3) <= pp_pipe(2); pp_pipe(3) <= pp_pipe(2);
post_frac_multiplied_d0 <= post_frac_multiplied; post_frac_multiplied_d0 <= post_frac_multiplied;
-- Pipeline stage 4: -- Pipeline stage 4:
-- Split the rescaled fractional part into the (mod 4096) tag_frac_o and add -- Split the rescaled fractional part into the (mod 4096) tag_frac_o and add
-- the rest to the coarse part, along with the start-to-timescale offset. -- the rest to the coarse part, along with the start-to-timescale offset.
...@@ -198,19 +201,37 @@ begin -- behavioral ...@@ -198,19 +201,37 @@ begin -- behavioral
-- --
-- This value is added here to align the result to our timescale -- This value is added here to align the result to our timescale
-- without messing around with the PLL. -- without messing around with the PLL.
pp_pipe(4) <= pp_pipe(3); pp_pipe(4) <= pp_pipe(3);
tag_utc_o <= std_logic_vector(post_tag_utc); if(regs_i.tsbcr_raw_o = '0') then
tag_coarse_o <= std_logic_vector(
signed(post_tag_coarse) -- index of start pulse (mod 16 = 0) tag_utc_o <= std_logic_vector(post_tag_utc);
+ signed(acam_subcycle_offset_i) -- start-to-timescale offset tag_coarse_o <= std_logic_vector(
+ signed(post_frac_multiplied_d0(post_frac_multiplied_d0'left downto c_SCALER_SHIFT + g_frac_bits))); signed(post_tag_coarse) -- index of start pulse (mod 16 = 0)
-- extra coarse counts from ACAM's frac part after rescaling + signed(acam_subcycle_offset_i) -- start-to-timescale offset
+ signed(post_frac_multiplied_d0(post_frac_multiplied_d0'left downto c_SCALER_SHIFT + g_frac_bits)));
-- extra coarse counts from ACAM's frac part after rescaling
tag_frac_o <= std_logic_vector(post_frac_multiplied_d0(c_SCALER_SHIFT + g_frac_bits-1 downto c_SCALER_SHIFT));
tag_valid_o <= pp_pipe(4);
elsif(raw_valid_i = '1') then
tag_utc_o <= raw_utc_i;
tag_coarse_o <= raw_coarse_i & raw_start_offset_i;
tag_frac_o <= raw_frac_i(11 downto 0);
tag_dbg_raw_o(10 downto 0) <= raw_frac_i(22 downto 12);
tag_dbg_raw_o(15 downto 11) <= acam_subcycle_offset_i;
tag_dbg_raw_o(23 downto 16) <= raw_coarse_shifted_i(7 downto 0);
tag_dbg_raw_o(31 downto 24) <= raw_utc_shifted_i(7 downto 0);
tag_valid_o <= '1';
else
tag_valid_o <= '0';
end if;
tag_frac_o <= std_logic_vector(post_frac_multiplied_d0(c_SCALER_SHIFT + g_frac_bits-1 downto c_SCALER_SHIFT));
tag_valid_o <= pp_pipe(4);
end if; end if;
end if; end if;
......
This diff is collapsed.
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
--------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------
-- File : fd_main_wbgen2_pkg.vhd -- File : fd_main_wbgen2_pkg.vhd
-- Author : auto-generated by wbgen2 from fd_main_wishbone_slave.wb -- Author : auto-generated by wbgen2 from fd_main_wishbone_slave.wb
-- Created : Wed Apr 11 11:05:21 2012 -- Created : Mon May 21 20:09:49 2012
-- Standard : VHDL'87 -- Standard : VHDL'87
--------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------
-- THIS FILE WAS GENERATED BY wbgen2 FROM SOURCE FILE fd_main_wishbone_slave.wb -- THIS FILE WAS GENERATED BY wbgen2 FROM SOURCE FILE fd_main_wishbone_slave.wb
...@@ -55,6 +55,7 @@ package fd_main_wbgen2_pkg is ...@@ -55,6 +55,7 @@ package fd_main_wbgen2_pkg is
i2cr_scl_in_i : std_logic; i2cr_scl_in_i : std_logic;
i2cr_sda_in_i : std_logic; i2cr_sda_in_i : std_logic;
tder1_vcxo_freq_i : std_logic_vector(31 downto 0); tder1_vcxo_freq_i : std_logic_vector(31 downto 0);
tsbr_debug_i : std_logic_vector(31 downto 0);
end record; end record;
constant c_fd_main_in_registers_init_value: t_fd_main_in_registers := ( constant c_fd_main_in_registers_init_value: t_fd_main_in_registers := (
...@@ -91,7 +92,8 @@ package fd_main_wbgen2_pkg is ...@@ -91,7 +92,8 @@ package fd_main_wbgen2_pkg is
tsbr_fid_seqid_i => (others => '0'), tsbr_fid_seqid_i => (others => '0'),
i2cr_scl_in_i => '0', i2cr_scl_in_i => '0',
i2cr_sda_in_i => '0', i2cr_sda_in_i => '0',
tder1_vcxo_freq_i => (others => '0') tder1_vcxo_freq_i => (others => '0'),
tsbr_debug_i => (others => '0')
); );
-- Output registers (WB slave -> user design) -- Output registers (WB slave -> user design)
...@@ -147,11 +149,13 @@ package fd_main_wbgen2_pkg is ...@@ -147,11 +149,13 @@ package fd_main_wbgen2_pkg is
tsbcr_enable_o : std_logic; tsbcr_enable_o : std_logic;
tsbcr_purge_o : std_logic; tsbcr_purge_o : std_logic;
tsbcr_rst_seq_o : std_logic; tsbcr_rst_seq_o : std_logic;
tsbcr_raw_o : std_logic;
tsbir_timeout_o : std_logic_vector(9 downto 0); tsbir_timeout_o : std_logic_vector(9 downto 0);
tsbir_threshold_o : std_logic_vector(11 downto 0); tsbir_threshold_o : std_logic_vector(11 downto 0);
i2cr_scl_out_o : std_logic; i2cr_scl_out_o : std_logic;
i2cr_sda_out_o : std_logic; i2cr_sda_out_o : std_logic;
tder2_pelt_drive_o : std_logic_vector(31 downto 0); tder2_pelt_drive_o : std_logic_vector(31 downto 0);
tsbr_advance_adv_o : std_logic;
end record; end record;
constant c_fd_main_out_registers_init_value: t_fd_main_out_registers := ( constant c_fd_main_out_registers_init_value: t_fd_main_out_registers := (
...@@ -205,11 +209,13 @@ package fd_main_wbgen2_pkg is ...@@ -205,11 +209,13 @@ package fd_main_wbgen2_pkg is
tsbcr_enable_o => '0', tsbcr_enable_o => '0',
tsbcr_purge_o => '0', tsbcr_purge_o => '0',
tsbcr_rst_seq_o => '0', tsbcr_rst_seq_o => '0',
tsbcr_raw_o => '0',
tsbir_timeout_o => (others => '0'), tsbir_timeout_o => (others => '0'),
tsbir_threshold_o => (others => '0'), tsbir_threshold_o => (others => '0'),
i2cr_scl_out_o => '0', i2cr_scl_out_o => '0',
i2cr_sda_out_o => '0', i2cr_sda_out_o => '0',
tder2_pelt_drive_o => (others => '0') tder2_pelt_drive_o => (others => '0'),
tsbr_advance_adv_o => '0'
); );
function "or" (left, right: t_fd_main_in_registers) return t_fd_main_in_registers; function "or" (left, right: t_fd_main_in_registers) return t_fd_main_in_registers;
function f_x_to_zero (x:std_logic) return std_logic; function f_x_to_zero (x:std_logic) return std_logic;
...@@ -274,6 +280,7 @@ tmp.tsbr_fid_seqid_i := f_x_to_zero(left.tsbr_fid_seqid_i) or f_x_to_zero(right. ...@@ -274,6 +280,7 @@ tmp.tsbr_fid_seqid_i := f_x_to_zero(left.tsbr_fid_seqid_i) or f_x_to_zero(right.
tmp.i2cr_scl_in_i := f_x_to_zero(left.i2cr_scl_in_i) or f_x_to_zero(right.i2cr_scl_in_i); tmp.i2cr_scl_in_i := f_x_to_zero(left.i2cr_scl_in_i) or f_x_to_zero(right.i2cr_scl_in_i);
tmp.i2cr_sda_in_i := f_x_to_zero(left.i2cr_sda_in_i) or f_x_to_zero(right.i2cr_sda_in_i); tmp.i2cr_sda_in_i := f_x_to_zero(left.i2cr_sda_in_i) or f_x_to_zero(right.i2cr_sda_in_i);
tmp.tder1_vcxo_freq_i := f_x_to_zero(left.tder1_vcxo_freq_i) or f_x_to_zero(right.tder1_vcxo_freq_i); tmp.tder1_vcxo_freq_i := f_x_to_zero(left.tder1_vcxo_freq_i) or f_x_to_zero(right.tder1_vcxo_freq_i);
tmp.tsbr_debug_i := f_x_to_zero(left.tsbr_debug_i) or f_x_to_zero(right.tsbr_debug_i);
return tmp; return tmp;
end function; end function;
end package body; end package body;
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
--------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------
-- File : fd_main_wishbone_slave.vhd -- File : fd_main_wishbone_slave.vhd
-- Author : auto-generated by wbgen2 from fd_main_wishbone_slave.wb -- Author : auto-generated by wbgen2 from fd_main_wishbone_slave.wb
-- Created : Wed Apr 11 11:05:21 2012 -- Created : Mon May 21 20:09:49 2012
-- Standard : VHDL'87 -- Standard : VHDL'87
--------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------
-- THIS FILE WAS GENERATED BY wbgen2 FROM SOURCE FILE fd_main_wishbone_slave.wb -- THIS FILE WAS GENERATED BY wbgen2 FROM SOURCE FILE fd_main_wishbone_slave.wb
...@@ -36,7 +36,8 @@ entity fd_main_wb_slave is ...@@ -36,7 +36,8 @@ entity fd_main_wb_slave is
tcr_rd_ack_o : out std_logic; tcr_rd_ack_o : out std_logic;
calr_rd_ack_o : out std_logic; calr_rd_ack_o : out std_logic;
spllr_rd_ack_o : out std_logic; spllr_rd_ack_o : out std_logic;
advance_rbuf_o : out std_logic; tsbcr_read_ack_o : out std_logic;
fid_read_ack_o : out std_logic;
irq_ts_buf_notempty_i : in std_logic; irq_ts_buf_notempty_i : in std_logic;
irq_dmtd_spll_i : in std_logic; irq_dmtd_spll_i : in std_logic;
irq_sync_status_i : in std_logic; irq_sync_status_i : in std_logic;
...@@ -233,11 +234,14 @@ signal fd_main_tsbcr_rst_seq_int_delay : std_logic ; ...@@ -233,11 +234,14 @@ signal fd_main_tsbcr_rst_seq_int_delay : std_logic ;
signal fd_main_tsbcr_rst_seq_sync0 : std_logic ; signal fd_main_tsbcr_rst_seq_sync0 : std_logic ;
signal fd_main_tsbcr_rst_seq_sync1 : std_logic ; signal fd_main_tsbcr_rst_seq_sync1 : std_logic ;
signal fd_main_tsbcr_rst_seq_sync2 : std_logic ; signal fd_main_tsbcr_rst_seq_sync2 : std_logic ;
signal fd_main_tsbcr_raw_int : std_logic ;
signal fd_main_tsbir_timeout_int : std_logic_vector(9 downto 0); signal fd_main_tsbir_timeout_int : std_logic_vector(9 downto 0);
signal fd_main_tsbir_threshold_int : std_logic_vector(11 downto 0); signal fd_main_tsbir_threshold_int : std_logic_vector(11 downto 0);
signal fd_main_i2cr_scl_out_int : std_logic ; signal fd_main_i2cr_scl_out_int : std_logic ;
signal fd_main_i2cr_sda_out_int : std_logic ; signal fd_main_i2cr_sda_out_int : std_logic ;
signal fd_main_tder2_pelt_drive_int : std_logic_vector(31 downto 0); signal fd_main_tder2_pelt_drive_int : std_logic_vector(31 downto 0);
signal fd_main_tsbr_advance_adv_dly0 : std_logic ;
signal fd_main_tsbr_advance_adv_int : std_logic ;
signal eic_idr_int : std_logic_vector(2 downto 0); signal eic_idr_int : std_logic_vector(2 downto 0);
signal eic_idr_write_int : std_logic ; signal eic_idr_write_int : std_logic ;
signal eic_ier_int : std_logic_vector(2 downto 0); signal eic_ier_int : std_logic_vector(2 downto 0);
...@@ -371,12 +375,15 @@ begin ...@@ -371,12 +375,15 @@ begin
fd_main_tsbcr_purge_int <= '0'; fd_main_tsbcr_purge_int <= '0';
fd_main_tsbcr_rst_seq_int <= '0'; fd_main_tsbcr_rst_seq_int <= '0';
fd_main_tsbcr_rst_seq_int_delay <= '0'; fd_main_tsbcr_rst_seq_int_delay <= '0';
tsbcr_read_ack_o <= '0';
fd_main_tsbcr_raw_int <= '0';
fd_main_tsbir_timeout_int <= "0000000000"; fd_main_tsbir_timeout_int <= "0000000000";
fd_main_tsbir_threshold_int <= "000000000000"; fd_main_tsbir_threshold_int <= "000000000000";
advance_rbuf_o <= '0'; fid_read_ack_o <= '0';
fd_main_i2cr_scl_out_int <= '0'; fd_main_i2cr_scl_out_int <= '0';
fd_main_i2cr_sda_out_int <= '0'; fd_main_i2cr_sda_out_int <= '0';
fd_main_tder2_pelt_drive_int <= "00000000000000000000000000000000"; fd_main_tder2_pelt_drive_int <= "00000000000000000000000000000000";
fd_main_tsbr_advance_adv_int <= '0';
eic_idr_write_int <= '0'; eic_idr_write_int <= '0';
eic_ier_write_int <= '0'; eic_ier_write_int <= '0';
eic_isr_write_int <= '0'; eic_isr_write_int <= '0';
...@@ -396,7 +403,9 @@ begin ...@@ -396,7 +403,9 @@ begin
regs_o.scr_data_load_o <= '0'; regs_o.scr_data_load_o <= '0';
fd_main_scr_start_int <= '0'; fd_main_scr_start_int <= '0';
fd_main_tsbcr_purge_int <= '0'; fd_main_tsbcr_purge_int <= '0';
advance_rbuf_o <= '0'; tsbcr_read_ack_o <= '0';
fid_read_ack_o <= '0';
fd_main_tsbr_advance_adv_int <= '0';
eic_idr_write_int <= '0'; eic_idr_write_int <= '0';
eic_ier_write_int <= '0'; eic_ier_write_int <= '0';
eic_isr_write_int <= '0'; eic_isr_write_int <= '0';
...@@ -1003,6 +1012,7 @@ begin ...@@ -1003,6 +1012,7 @@ begin
fd_main_tsbcr_purge_int <= wrdata_reg(6); fd_main_tsbcr_purge_int <= wrdata_reg(6);
fd_main_tsbcr_rst_seq_int <= wrdata_reg(7); fd_main_tsbcr_rst_seq_int <= wrdata_reg(7);
fd_main_tsbcr_rst_seq_int_delay <= wrdata_reg(7); fd_main_tsbcr_rst_seq_int_delay <= wrdata_reg(7);
fd_main_tsbcr_raw_int <= wrdata_reg(22);
end if; end if;
rddata_reg(4 downto 0) <= fd_main_tsbcr_chan_mask_int; rddata_reg(4 downto 0) <= fd_main_tsbcr_chan_mask_int;
rddata_reg(5) <= fd_main_tsbcr_enable_int; rddata_reg(5) <= fd_main_tsbcr_enable_int;
...@@ -1010,8 +1020,9 @@ begin ...@@ -1010,8 +1020,9 @@ begin
rddata_reg(7) <= 'X'; rddata_reg(7) <= 'X';
rddata_reg(8) <= regs_i.tsbcr_full_i; rddata_reg(8) <= regs_i.tsbcr_full_i;
rddata_reg(9) <= regs_i.tsbcr_empty_i; rddata_reg(9) <= regs_i.tsbcr_empty_i;
tsbcr_read_ack_o <= '1';
rddata_reg(21 downto 10) <= regs_i.tsbcr_count_i; rddata_reg(21 downto 10) <= regs_i.tsbcr_count_i;
rddata_reg(22) <= 'X'; rddata_reg(22) <= fd_main_tsbcr_raw_int;
rddata_reg(23) <= 'X'; rddata_reg(23) <= 'X';
rddata_reg(24) <= 'X'; rddata_reg(24) <= 'X';
rddata_reg(25) <= 'X'; rddata_reg(25) <= 'X';
...@@ -1094,7 +1105,7 @@ begin ...@@ -1094,7 +1105,7 @@ begin
rddata_reg(3 downto 0) <= regs_i.tsbr_fid_channel_i; rddata_reg(3 downto 0) <= regs_i.tsbr_fid_channel_i;
rddata_reg(15 downto 4) <= regs_i.tsbr_fid_fine_i; rddata_reg(15 downto 4) <= regs_i.tsbr_fid_fine_i;
rddata_reg(31 downto 16) <= regs_i.tsbr_fid_seqid_i; rddata_reg(31 downto 16) <= regs_i.tsbr_fid_seqid_i;
advance_rbuf_o <= '1'; fid_read_ack_o <= '1';
ack_sreg(0) <= '1'; ack_sreg(0) <= '1';
ack_in_progress <= '1'; ack_in_progress <= '1';
when "011010" => when "011010" =>
...@@ -1149,6 +1160,51 @@ begin ...@@ -1149,6 +1160,51 @@ begin
rddata_reg(31 downto 0) <= fd_main_tder2_pelt_drive_int; rddata_reg(31 downto 0) <= fd_main_tder2_pelt_drive_int;
ack_sreg(0) <= '1'; ack_sreg(0) <= '1';
ack_in_progress <= '1'; ack_in_progress <= '1';
when "011101" =>
if (wb_we_i = '1') then
end if;
rddata_reg(31 downto 0) <= regs_i.tsbr_debug_i;
ack_sreg(0) <= '1';
ack_in_progress <= '1';
when "011110" =>
if (wb_we_i = '1') then
fd_main_tsbr_advance_adv_int <= wrdata_reg(0);
end if;
rddata_reg(0) <= 'X';
rddata_reg(0) <= 'X';
rddata_reg(1) <= 'X';
rddata_reg(2) <= 'X';
rddata_reg(3) <= 'X';
rddata_reg(4) <= 'X';
rddata_reg(5) <= 'X';
rddata_reg(6) <= 'X';
rddata_reg(7) <= 'X';
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(2) <= '1';
ack_in_progress <= '1';
when "100000" => when "100000" =>
if (wb_we_i = '1') then if (wb_we_i = '1') then
eic_idr_write_int <= '1'; eic_idr_write_int <= '1';
...@@ -1982,6 +2038,8 @@ begin ...@@ -1982,6 +2038,8 @@ begin
-- Buffer full -- Buffer full
-- Buffer empty -- Buffer empty
-- Buffer entries count -- Buffer entries count
-- RAW readout mode enable
regs_o.tsbcr_raw_o <= fd_main_tsbcr_raw_int;
-- IRQ timeout [milliseconds] -- IRQ timeout [milliseconds]
regs_o.tsbir_timeout_o <= fd_main_tsbir_timeout_int; regs_o.tsbir_timeout_o <= fd_main_tsbir_timeout_int;
-- Interrupt threshold -- Interrupt threshold
...@@ -2001,6 +2059,20 @@ begin ...@@ -2001,6 +2059,20 @@ begin
-- VCXO Frequency -- VCXO Frequency
-- Peltier PWM drive -- Peltier PWM drive
regs_o.tder2_pelt_drive_o <= fd_main_tder2_pelt_drive_int; regs_o.tder2_pelt_drive_o <= fd_main_tder2_pelt_drive_int;
-- Debug value
-- Advance buffer readout
process (clk_sys_i, rst_n_i)
begin
if (rst_n_i = '0') then
fd_main_tsbr_advance_adv_dly0 <= '0';
regs_o.tsbr_advance_adv_o <= '0';
elsif rising_edge(clk_sys_i) then
fd_main_tsbr_advance_adv_dly0 <= fd_main_tsbr_advance_adv_int;
regs_o.tsbr_advance_adv_o <= fd_main_tsbr_advance_adv_int and (not fd_main_tsbr_advance_adv_dly0);
end if;
end process;
-- extra code for reg/fifo/mem: Interrupt disable register -- extra code for reg/fifo/mem: Interrupt disable register
eic_idr_int(2 downto 0) <= wrdata_reg(2 downto 0); eic_idr_int(2 downto 0) <= wrdata_reg(2 downto 0);
-- extra code for reg/fifo/mem: Interrupt enable register -- extra code for reg/fifo/mem: Interrupt enable register
......
...@@ -753,7 +753,9 @@ write 0: DMTD pattern generation disabled."; ...@@ -753,7 +753,9 @@ write 0: DMTD pattern generation disabled.";
type = BIT; type = BIT;
access_bus = READ_ONLY; access_bus = READ_ONLY;
access_dev = WRITE_ONLY; access_dev = WRITE_ONLY;
ack_read = "tsbcr_read_ack_o";
}; };
field { field {
name = "Buffer entries count"; name = "Buffer entries count";
prefix = "COUNT"; prefix = "COUNT";
...@@ -762,6 +764,14 @@ write 0: DMTD pattern generation disabled."; ...@@ -762,6 +764,14 @@ write 0: DMTD pattern generation disabled.";
access_bus = READ_ONLY; access_bus = READ_ONLY;
access_dev = WRITE_ONLY; access_dev = WRITE_ONLY;
}; };
field {
name = "RAW readout mode enable";
prefix = "RAW";
type = BIT;
access_bus = READ_WRITE;
access_dev = READ_ONLY;
};
}; };
reg { reg {
...@@ -861,7 +871,7 @@ write 0: DMTD pattern generation disabled."; ...@@ -861,7 +871,7 @@ write 0: DMTD pattern generation disabled.";
type = SLV; type = SLV;
access_bus = READ_ONLY; access_bus = READ_ONLY;
access_dev = WRITE_ONLY; access_dev = WRITE_ONLY;
ack_read = "advance_rbuf_o"; ack_read = "fid_read_ack_o";
}; };
}; };
...@@ -927,6 +937,32 @@ write 0: DMTD pattern generation disabled."; ...@@ -927,6 +937,32 @@ write 0: DMTD pattern generation disabled.";
}; };
}; };
reg {
name = "Timestamp Buffer Debug Values Register";
prefix = "TSBR_DEBUG";
field {
name = "Debug value";
size = 32;
type = SLV;
access_bus = READ_ONLY;
access_dev = WRITE_ONLY;
};
};
reg {
name = "Timestamp Buffer Advance Register";
prefix = "TSBR_ADVANCE";
field {
name = "Advance buffer readout";
descriptor = "write 1: transfer the latest sample from the ring buffer to TSBR_SEC/CYCLES/FID registers,\
write 0: no effect";
type = MONOSTABLE;
prefix = "ADV";
};
};
irq { irq {
name = "TS Buffer not empty."; name = "TS Buffer not empty.";
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
-- Author : Tomasz Wlostowski -- Author : Tomasz Wlostowski
-- Company : CERN -- Company : CERN
-- Created : 2011-08-24 -- Created : 2011-08-24
-- Last update: 2012-05-01 -- Last update: 2012-05-22
-- Platform : FPGA-generic -- Platform : FPGA-generic
-- Standard : VHDL'93 -- Standard : VHDL'93
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
...@@ -66,16 +66,18 @@ entity fd_ring_buffer is ...@@ -66,16 +66,18 @@ entity fd_ring_buffer is
--------------------------------------------------------------------------- ---------------------------------------------------------------------------
-- Input tags (clk_ref_i domain) -- Input tags (clk_ref_i domain)
--------------------------------------------------------------------------- ---------------------------------------------------------------------------
tag_valid_i : in std_logic; tag_valid_i : in std_logic;
-- Tag source : 0 = TDC, 1..4 = output channels -- Tag source : 0 = TDC, 1..4 = output channels
tag_source_i : in std_logic_vector(3 downto 0); tag_source_i : in std_logic_vector(3 downto 0);
tag_utc_i : in std_logic_vector(c_TIMESTAMP_UTC_BITS-1 downto 0); tag_utc_i : in std_logic_vector(c_TIMESTAMP_UTC_BITS-1 downto 0);
tag_coarse_i : in std_logic_vector(c_TIMESTAMP_COARSE_BITS-1 downto 0); tag_coarse_i : in std_logic_vector(c_TIMESTAMP_COARSE_BITS-1 downto 0);
tag_frac_i : in std_logic_vector(c_TIMESTAMP_FRAC_BITS-1 downto 0); tag_frac_i : in std_logic_vector(c_TIMESTAMP_FRAC_BITS-1 downto 0);
tag_dbg_raw_i : in std_logic_vector(31 downto 0);
-- Advances buffer readout by 1 timestamp. Asserted upon read of TSBR_FID register.
advance_rbuf_i : in std_logic; -- Flushes the latest timestamp to the output registers
tsbcr_read_ack_i: in std_logic;
fid_read_ack_i: in std_logic;
-- Buffer interrupt (level-sensitive) -- Buffer interrupt (level-sensitive)
buf_irq_o : out std_logic; buf_irq_o : out std_logic;
...@@ -88,7 +90,7 @@ end fd_ring_buffer; ...@@ -88,7 +90,7 @@ end fd_ring_buffer;
architecture behavioral of fd_ring_buffer is architecture behavioral of fd_ring_buffer is
constant c_PACKED_TS_SIZE : integer := 4 + c_TIMESTAMP_UTC_BITS + c_TIMESTAMP_COARSE_BITS + c_TIMESTAMP_FRAC_BITS + 16; constant c_PACKED_TS_SIZE : integer := 32 + 4 + c_TIMESTAMP_UTC_BITS + c_TIMESTAMP_COARSE_BITS + c_TIMESTAMP_FRAC_BITS + 16;
constant c_FIFO_SIZE : integer := 8; constant c_FIFO_SIZE : integer := 8;
type t_internal_timestamp is record type t_internal_timestamp is record
...@@ -97,19 +99,21 @@ architecture behavioral of fd_ring_buffer is ...@@ -97,19 +99,21 @@ architecture behavioral of fd_ring_buffer is
coarse : std_logic_vector(c_TIMESTAMP_COARSE_BITS-1 downto 0); coarse : std_logic_vector(c_TIMESTAMP_COARSE_BITS-1 downto 0);
frac : std_logic_vector(c_TIMESTAMP_FRAC_BITS-1 downto 0); frac : std_logic_vector(c_TIMESTAMP_FRAC_BITS-1 downto 0);
seq_id : std_logic_vector(15 downto 0); seq_id : std_logic_vector(15 downto 0);
dbg : std_logic_vector(31 downto 0);
end record; end record;
function f_pack_timestamp(ts : t_internal_timestamp) return std_logic_vector is function f_pack_timestamp(ts : t_internal_timestamp) return std_logic_vector is
begin begin
return ts.utc & ts.coarse & ts.frac & ts.seq_id & ts.src; return ts.dbg & ts.utc & ts.coarse & ts.frac & ts.seq_id & ts.src;
end f_pack_timestamp; end f_pack_timestamp;
function f_unpack_timestamp(ts : std_logic_vector)return t_internal_timestamp is function f_unpack_timestamp(ts : std_logic_vector)return t_internal_timestamp is
variable tmp : t_internal_timestamp; variable tmp : t_internal_timestamp;
begin begin
tmp.utc := ts(c_PACKED_TS_SIZE-1 downto c_PACKED_TS_SIZE-c_TIMESTAMP_UTC_BITS); tmp.dbg := ts(c_PACKED_TS_SIZE-1 downto c_PACKED_TS_SIZE-32);
tmp.coarse := ts(c_PACKED_TS_SIZE-c_TIMESTAMP_UTC_BITS-1 downto c_PACKED_TS_SIZE-c_TIMESTAMP_UTC_BITS-c_TIMESTAMP_COARSE_BITS); tmp.utc := ts(-32 + c_PACKED_TS_SIZE-1 downto -32 + c_PACKED_TS_SIZE-c_TIMESTAMP_UTC_BITS);
tmp.coarse := ts(-32 + c_PACKED_TS_SIZE-c_TIMESTAMP_UTC_BITS-1 downto -32 + c_PACKED_TS_SIZE-c_TIMESTAMP_UTC_BITS-c_TIMESTAMP_COARSE_BITS);
tmp.frac := ts(16+4+c_TIMESTAMP_FRAC_BITS-1 downto 16+4); tmp.frac := ts(16+4+c_TIMESTAMP_FRAC_BITS-1 downto 16+4);
tmp.seq_id := ts(16+4-1 downto 4); tmp.seq_id := ts(16+4-1 downto 4);
tmp.src := ts(3 downto 0); tmp.src := ts(3 downto 0);
...@@ -128,7 +132,7 @@ architecture behavioral of fd_ring_buffer is ...@@ -128,7 +132,7 @@ architecture behavioral of fd_ring_buffer is
signal buf_count : unsigned(g_size_log2 downto 0); signal buf_count : unsigned(g_size_log2 downto 0);
signal buf_full, buf_empty : std_logic; signal buf_full, buf_empty : std_logic;
signal buf_wr_data, buf_rd_data : std_logic_vector(c_PACKED_TS_SIZE-1 downto 0); signal buf_wr_data, buf_rd_data : std_logic_vector(c_PACKED_TS_SIZE-1 downto 0);
signal buf_write, buf_read : std_logic; signal buf_write, buf_read, buf_overflow : std_logic;
signal buf_ram_out, buf_out_reg : t_internal_timestamp; signal buf_ram_out, buf_out_reg : t_internal_timestamp;
...@@ -137,12 +141,15 @@ architecture behavioral of fd_ring_buffer is ...@@ -137,12 +141,15 @@ architecture behavioral of fd_ring_buffer is
signal tmr_div : unsigned(f_log2_size(c_REF_CLK_FREQ/1000+1)-1 downto 0); signal tmr_div : unsigned(f_log2_size(c_REF_CLK_FREQ/1000+1)-1 downto 0);
signal tmr_tick : std_logic; signal tmr_tick : std_logic;
signal tmr_timeout : unsigned(9 downto 0); signal tmr_timeout : unsigned(9 downto 0);
signal buf_irq_int : std_logic; signal buf_irq_int : std_logic;
signal buf_read_d0, buf_read_d1 : std_logic; signal buf_read_d0, buf_read_d1 : std_logic;
signal empty_d : std_logic_vector(4 downto 0);
signal read_ack, read_ack_d, read_ack_p : std_logic;
begin -- behavioral begin -- behavioral
...@@ -160,6 +167,7 @@ begin -- behavioral ...@@ -160,6 +167,7 @@ begin -- behavioral
fifo_in <= f_pack_timestamp(ts_fifo_in); fifo_in <= f_pack_timestamp(ts_fifo_in);
ts_fifo_in.dbg <= tag_dbg_raw_i;
ts_fifo_in.utc <= tag_utc_i; ts_fifo_in.utc <= tag_utc_i;
ts_fifo_in.coarse <= tag_coarse_i; ts_fifo_in.coarse <= tag_coarse_i;
ts_fifo_in.frac <= tag_frac_i; ts_fifo_in.frac <= tag_frac_i;
...@@ -211,12 +219,13 @@ begin -- behavioral ...@@ -211,12 +219,13 @@ begin -- behavioral
buf_full <= '1' when (buf_wr_ptr + 1 = buf_rd_ptr) else '0'; buf_full <= '1' when (buf_wr_ptr + 1 = buf_rd_ptr) else '0';
buf_empty <= '1' when (buf_wr_ptr = buf_rd_ptr) else '0'; buf_empty <= '1' when (buf_wr_ptr = buf_rd_ptr) else '0';
buf_write <= regs_i.tsbcr_enable_o and fifo_read_d0; buf_write <= regs_i.tsbcr_enable_o and fifo_read_d0;
buf_read <= '1' when (advance_rbuf_i = '1' and buf_empty = '0') or (buf_write = '1' and buf_full = '1') else '0'; buf_overflow <= '1' when (buf_write = '1' and buf_full = '1') else '0';
buf_read <= '1' when (regs_i.tsbr_advance_adv_o = '1' and buf_empty = '0') or buf_overflow = '1' else '0';
buf_ram_out <= f_unpack_timestamp(buf_rd_data); buf_ram_out <= f_unpack_timestamp(buf_rd_data);
-- drive WB registers -- drive WB registers
regs_o.tsbcr_empty_i <= buf_empty;
regs_o.tsbcr_full_i <= buf_full; regs_o.tsbcr_full_i <= buf_full;
regs_o.tsbcr_empty_i <= buf_empty;
p_buffer_control : process(clk_sys_i) p_buffer_control : process(clk_sys_i)
begin begin
...@@ -226,14 +235,12 @@ begin -- behavioral ...@@ -226,14 +235,12 @@ begin -- behavioral
buf_wr_ptr <= (others => '0'); buf_wr_ptr <= (others => '0');
buf_count <= (others => '0'); buf_count <= (others => '0');
fifo_read_d0 <= '0'; fifo_read_d0 <= '0';
buf_read_d0 <= '0';
buf_read_d1 <= '0';
else else
fifo_read_d0 <= fifo_read;
buf_read_d0 <= buf_read;
buf_read_d1 <= buf_read_d0;
fifo_read_d0 <= fifo_read;
if(buf_write = '1') then if(buf_write = '1') then
buf_wr_ptr <= buf_wr_ptr + 1; buf_wr_ptr <= buf_wr_ptr + 1;
end if; end if;
...@@ -256,9 +263,7 @@ begin -- behavioral ...@@ -256,9 +263,7 @@ begin -- behavioral
p_output_register : process(clk_sys_i) p_output_register : process(clk_sys_i)
begin begin
if rising_edge(clk_sys_i) then if rising_edge(clk_sys_i) then
if(buf_write = '1' and buf_empty = '1') then if(buf_read = '1' and buf_overflow = '0') then
buf_out_reg <= f_unpack_timestamp(buf_wr_data);
elsif(buf_read_d1 = '1') then
buf_out_reg <= buf_ram_out; buf_out_reg <= buf_ram_out;
end if; end if;
end if; end if;
...@@ -317,12 +322,15 @@ begin -- behavioral ...@@ -317,12 +322,15 @@ begin -- behavioral
end if; end if;
end process; end process;
regs_o.tsbr_sech_i <= buf_out_reg.utc(39 downto 32); regs_o.tsbr_sech_i <= buf_out_reg.utc(39 downto 32);
regs_o.tsbr_secl_i <= buf_out_reg.utc(31 downto 0); regs_o.tsbr_secl_i <= buf_out_reg.utc(31 downto 0);
regs_o.tsbr_cycles_i <= buf_out_reg.coarse; regs_o.tsbr_cycles_i <= buf_out_reg.coarse;
regs_o.tsbr_fid_fine_i <= buf_out_reg.frac; regs_o.tsbr_fid_fine_i <= buf_out_reg.frac;
regs_o.tsbr_fid_seqid_i <= buf_out_reg.seq_id; regs_o.tsbr_fid_seqid_i <= buf_out_reg.seq_id;
regs_o.tsbr_fid_channel_i <= buf_out_reg.src; regs_o.tsbr_fid_channel_i <= buf_out_reg.src;
regs_o.tsbr_debug_i <= buf_out_reg.dbg;
regs_o.tsbcr_count_i <= std_logic_vector(resize(buf_count, regs_o.tsbcr_count_i'length)); regs_o.tsbcr_count_i <= std_logic_vector(resize(buf_count, regs_o.tsbcr_count_i'length));
buf_irq_o <= buf_irq_int; buf_irq_o <= buf_irq_int;
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
-- Author : Tomasz Wlostowski -- Author : Tomasz Wlostowski
-- Company : CERN -- Company : CERN
-- Created : 2011-08-24 -- Created : 2011-08-24
-- Last update: 2012-04-25 -- Last update: 2012-05-21
-- Platform : FPGA-generic -- Platform : FPGA-generic
-- Standard : VHDL'93 -- Standard : VHDL'93
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
...@@ -253,6 +253,7 @@ architecture rtl of fine_delay_core is ...@@ -253,6 +253,7 @@ architecture rtl of fine_delay_core is
signal tag_frac : std_logic_vector(c_TIMESTAMP_FRAC_BITS-1 downto 0); signal tag_frac : std_logic_vector(c_TIMESTAMP_FRAC_BITS-1 downto 0);
signal tag_coarse : std_logic_vector(c_TIMESTAMP_COARSE_BITS-1 downto 0); signal tag_coarse : std_logic_vector(c_TIMESTAMP_COARSE_BITS-1 downto 0);
signal tag_utc : std_logic_vector(c_TIMESTAMP_UTC_BITS-1 downto 0); signal tag_utc : std_logic_vector(c_TIMESTAMP_UTC_BITS-1 downto 0);
signal tag_dbg : std_logic_vector(31 downto 0);
signal tag_valid : std_logic; signal tag_valid : std_logic;
signal rbuf_mux_ts : t_timestamp_array(0 to 4); signal rbuf_mux_ts : t_timestamp_array(0 to 4);
...@@ -271,7 +272,7 @@ architecture rtl of fine_delay_core is ...@@ -271,7 +272,7 @@ architecture rtl of fine_delay_core is
signal rst_n_sys, rst_n_ref : std_logic; signal rst_n_sys, rst_n_ref : std_logic;
signal advance_rbuf : std_logic; signal tsbcr_read_ack, fid_read_ack : std_logic;
signal irq_rbuf, irq_spll, irq_sync : std_logic; signal irq_rbuf, irq_spll, irq_sync : std_logic;
...@@ -463,7 +464,8 @@ begin -- rtl ...@@ -463,7 +464,8 @@ begin -- rtl
irq_ts_buf_notempty_i => irq_rbuf, irq_ts_buf_notempty_i => irq_rbuf,
irq_dmtd_spll_i => irq_spll, irq_dmtd_spll_i => irq_spll,
irq_sync_status_i => irq_sync, irq_sync_status_i => irq_sync,
advance_rbuf_o => advance_rbuf, tsbcr_read_ack_o => tsbcr_read_ack,
fid_read_ack_o => fid_read_ack,
spllr_rd_ack_o => spllr_rd_ack, spllr_rd_ack_o => spllr_rd_ack,
calr_rd_ack_o => calr_rd_ack calr_rd_ack_o => calr_rd_ack
); );
...@@ -496,6 +498,7 @@ begin -- rtl ...@@ -496,6 +498,7 @@ begin -- rtl
tag_coarse_o => tag_coarse, tag_coarse_o => tag_coarse,
tag_utc_o => tag_utc, tag_utc_o => tag_utc,
tag_valid_o => tag_valid, tag_valid_o => tag_valid,
tag_dbg_raw_o => tag_dbg,
tag_rearm_p1_i => '1', tag_rearm_p1_i => '1',
...@@ -549,8 +552,10 @@ begin -- rtl ...@@ -549,8 +552,10 @@ begin -- rtl
tag_utc_i => rbuf_in_ts.u, tag_utc_i => rbuf_in_ts.u,
tag_coarse_i => rbuf_in_ts.c, tag_coarse_i => rbuf_in_ts.c,
tag_frac_i => rbuf_in_ts.f, tag_frac_i => rbuf_in_ts.f,
tag_dbg_raw_i => tag_dbg,
advance_rbuf_i => advance_rbuf, tsbcr_read_ack_i => tsbcr_read_ack,
fid_read_ack_i => fid_read_ack,
buf_irq_o => irq_rbuf, buf_irq_o => irq_rbuf,
regs_i => regs_fromwb, regs_i => regs_fromwb,
regs_o => regs_towb_rbuf); regs_o => regs_towb_rbuf);
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
-- Author : Tomasz Wlostowski -- Author : Tomasz Wlostowski
-- Company : CERN -- Company : CERN
-- Created : 2011-08-24 -- Created : 2011-08-24
-- Last update: 2012-04-25 -- Last update: 2012-05-21
-- Platform : FPGA-generic -- Platform : FPGA-generic
-- Standard : VHDL'93 -- Standard : VHDL'93
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
...@@ -53,24 +53,24 @@ package fine_delay_pkg is ...@@ -53,24 +53,24 @@ package fine_delay_pkg is
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
-- Timestamp field bits (if you change them, you must also change the WB files) -- Timestamp field bits (if you change them, you must also change the WB files)
constant c_TIMESTAMP_UTC_BITS : integer := 40; constant c_TIMESTAMP_UTC_BITS : integer := 40;
constant c_TIMESTAMP_COARSE_BITS : integer := 28; constant c_TIMESTAMP_COARSE_BITS : integer := 28;
constant c_TIMESTAMP_FRAC_BITS : integer := 12; constant c_TIMESTAMP_FRAC_BITS : integer := 12;
-- log2(Number of entries in the timestamp buffer) -- log2(Number of entries in the timestamp buffer)
constant c_RING_BUFFER_SIZE_LOG2 : integer := 10; constant c_RING_BUFFER_SIZE_LOG2 : integer := 10;
-- Reference clock frequency in Hz -- Reference clock frequency in Hz
constant c_REF_CLK_FREQ : integer := 125000000; constant c_REF_CLK_FREQ : integer := 125000000;
-- System clock frequency in Hz -- System clock frequency in Hz
constant c_SYS_CLK_FREQ : integer := 62500000; constant c_SYS_CLK_FREQ : integer := 62500000;
-- Reference clock period in picoseconds -- Reference clock period in picoseconds
constant c_REF_CLK_PERIOD_PS : integer := 8000; constant c_REF_CLK_PERIOD_PS : integer := 8000;
-- Number of card outputs -- Number of card outputs
constant c_FD_NUM_OUTPUTS : integer := 4; constant c_FD_NUM_OUTPUTS : integer := 4;
-- Number of reference clock cycles per one DDMTD calibration period -- Number of reference clock cycles per one DDMTD calibration period
constant c_FD_DMTD_CALIBRATION_PERIOD : integer := 125; constant c_FD_DMTD_CALIBRATION_PERIOD : integer := 125;
...@@ -93,7 +93,7 @@ package fine_delay_pkg is ...@@ -93,7 +93,7 @@ package fine_delay_pkg is
dev_version => x"00000001", dev_version => x"00000001",
dev_date => x"20120425", dev_date => x"20120425",
description => "Fine Delay Core "); description => "Fine Delay Core ");
type t_fd_timestamp is record type t_fd_timestamp is record
u : std_logic_vector(c_TIMESTAMP_UTC_BITS-1 downto 0); u : std_logic_vector(c_TIMESTAMP_UTC_BITS-1 downto 0);
c : std_logic_vector(c_TIMESTAMP_COARSE_BITS-1 downto 0); c : std_logic_vector(c_TIMESTAMP_COARSE_BITS-1 downto 0);
...@@ -183,6 +183,7 @@ package fine_delay_pkg is ...@@ -183,6 +183,7 @@ package fine_delay_pkg is
tag_coarse_o : out std_logic_vector(c_TIMESTAMP_COARSE_BITS-1 downto 0); tag_coarse_o : out std_logic_vector(c_TIMESTAMP_COARSE_BITS-1 downto 0);
tag_utc_o : out std_logic_vector(c_TIMESTAMP_UTC_BITS-1 downto 0); tag_utc_o : out std_logic_vector(c_TIMESTAMP_UTC_BITS-1 downto 0);
tag_rearm_p1_i : in std_logic; tag_rearm_p1_i : in std_logic;
tag_dbg_raw_o : out std_logic_vector(31 downto 0);
tag_valid_o : out std_logic; tag_valid_o : out std_logic;
csync_coarse_i : in std_logic_vector(c_TIMESTAMP_COARSE_BITS-1 downto 0); csync_coarse_i : in std_logic_vector(c_TIMESTAMP_COARSE_BITS-1 downto 0);
csync_utc_i : in std_logic_vector(c_TIMESTAMP_UTC_BITS-1 downto 0); csync_utc_i : in std_logic_vector(c_TIMESTAMP_UTC_BITS-1 downto 0);
...@@ -214,7 +215,7 @@ package fine_delay_pkg is ...@@ -214,7 +215,7 @@ package fine_delay_pkg is
regs_i : in t_fd_main_out_registers; regs_i : in t_fd_main_out_registers;
regs_o : out t_fd_main_in_registers; regs_o : out t_fd_main_in_registers;
tcr_rd_ack_i : in std_logic; tcr_rd_ack_i : in std_logic;
csync_pps_o: out std_logic; csync_pps_o : out std_logic;
irq_sync_o : out std_logic); irq_sync_o : out std_logic);
end component; end component;
...@@ -254,7 +255,8 @@ package fine_delay_pkg is ...@@ -254,7 +255,8 @@ package fine_delay_pkg is
tcr_rd_ack_o : out std_logic; tcr_rd_ack_o : out std_logic;
calr_rd_ack_o : out std_logic; calr_rd_ack_o : out std_logic;
spllr_rd_ack_o : out std_logic; spllr_rd_ack_o : out std_logic;
advance_rbuf_o : out std_logic; tsbcr_read_ack_o : out std_logic;
fid_read_ack_o: out std_logic;
irq_ts_buf_notempty_i : in std_logic; irq_ts_buf_notempty_i : in std_logic;
irq_dmtd_spll_i : in std_logic; irq_dmtd_spll_i : in std_logic;
irq_sync_status_i : in std_logic; irq_sync_status_i : in std_logic;
...@@ -329,24 +331,25 @@ package fine_delay_pkg is ...@@ -329,24 +331,25 @@ package fine_delay_pkg is
dmtd_dac_wr_o : out std_logic); dmtd_dac_wr_o : out std_logic);
end component; end component;
component fd_ring_buffer component fd_ring_buffer
generic ( generic (
g_size_log2 : integer); g_size_log2 : integer);
port ( port (
rst_n_sys_i : in std_logic; rst_n_sys_i : in std_logic;
rst_n_ref_i : in std_logic; rst_n_ref_i : in std_logic;
clk_ref_i : in std_logic; clk_ref_i : in std_logic;
clk_sys_i : in std_logic; clk_sys_i : in std_logic;
tag_valid_i : in std_logic; tag_valid_i : in std_logic;
tag_source_i : in std_logic_vector(3 downto 0); tag_source_i : in std_logic_vector(3 downto 0);
tag_utc_i : in std_logic_vector(c_TIMESTAMP_UTC_BITS-1 downto 0); tag_utc_i : in std_logic_vector(c_TIMESTAMP_UTC_BITS-1 downto 0);
tag_coarse_i : in std_logic_vector(c_TIMESTAMP_COARSE_BITS-1 downto 0); tag_coarse_i : in std_logic_vector(c_TIMESTAMP_COARSE_BITS-1 downto 0);
tag_frac_i : in std_logic_vector(c_TIMESTAMP_FRAC_BITS-1 downto 0); tag_frac_i : in std_logic_vector(c_TIMESTAMP_FRAC_BITS-1 downto 0);
advance_rbuf_i : in std_logic; tag_dbg_raw_i : in std_logic_vector(31 downto 0);
buf_irq_o : out std_logic; tsbcr_read_ack_i : in std_logic;
regs_i : in t_fd_main_out_registers; fid_read_ack_i : in std_logic;
regs_o : out t_fd_main_in_registers); buf_irq_o : out std_logic;
regs_i : in t_fd_main_out_registers;
regs_o : out t_fd_main_in_registers);
end component; end component;
component fd_spi_dac_arbiter component fd_spi_dac_arbiter
...@@ -376,7 +379,7 @@ package fine_delay_pkg is ...@@ -376,7 +379,7 @@ package fine_delay_pkg is
q_o : out std_logic); q_o : out std_logic);
end component; end component;
component fine_delay_core component fine_delay_core
generic ( generic (
g_with_wr_core : boolean; g_with_wr_core : boolean;
g_simulation : boolean; g_simulation : boolean;
......
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