Commit 2908b258 authored by Tomasz Wlostowski's avatar Tomasz Wlostowski

fd_wishbone_slave: added new calibration registers

parent 5094074c
......@@ -3,7 +3,7 @@
---------------------------------------------------------------------------------------
-- File : fd_wbgen2_pkg.vhd
-- Author : auto-generated by wbgen2 from fd_wishbone_slave.wb
-- Created : Wed Sep 7 17:10:37 2011
-- Created : Mon Oct 24 13:42:09 2011
-- Standard : VHDL'87
---------------------------------------------------------------------------------------
-- THIS FILE WAS GENERATED BY wbgen2 FROM SOURCE FILE fd_wishbone_slave.wb
......@@ -104,10 +104,13 @@ package fd_wbgen2_pkg is
tar_addr_o : std_logic_vector(3 downto 0);
tdcsr_write_o : std_logic;
tdcsr_read_o : std_logic;
tdcsr_stop_en_o : std_logic;
tdcsr_start_dis_o : std_logic;
tdcsr_start_en_o : std_logic;
tdcsr_stop_dis_o : std_logic;
tdcsr_stop_en_o : std_logic;
tdcsr_alutrig_o : std_logic;
calr_cal_pulse_o : std_logic;
calr_psel_o : std_logic_vector(3 downto 0);
adsfr_o : std_logic_vector(17 downto 0);
atmcr_c_thr_o : std_logic_vector(3 downto 0);
atmcr_f_thr_o : std_logic_vector(22 downto 0);
......@@ -122,7 +125,7 @@ package fd_wbgen2_pkg is
dcr1_pg_arm_o : std_logic;
dcr1_pg_arm_load_o : std_logic;
dcr1_update_o : std_logic;
dcr1_force_cp_o : std_logic;
dcr1_force_dly_o : std_logic;
dcr1_pol_o : std_logic;
frr1_o : std_logic_vector(9 downto 0);
u_start1_o : std_logic_vector(31 downto 0);
......@@ -136,7 +139,7 @@ package fd_wbgen2_pkg is
dcr2_pg_arm_o : std_logic;
dcr2_pg_arm_load_o : std_logic;
dcr2_update_o : std_logic;
dcr2_force_cp_o : std_logic;
dcr2_force_dly_o : std_logic;
dcr2_pol_o : std_logic;
frr2_o : std_logic_vector(9 downto 0);
u_start2_o : std_logic_vector(31 downto 0);
......@@ -150,7 +153,7 @@ package fd_wbgen2_pkg is
dcr3_pg_arm_o : std_logic;
dcr3_pg_arm_load_o : std_logic;
dcr3_update_o : std_logic;
dcr3_force_cp_o : std_logic;
dcr3_force_dly_o : std_logic;
dcr3_pol_o : std_logic;
frr3_o : std_logic_vector(9 downto 0);
u_start3_o : std_logic_vector(31 downto 0);
......@@ -164,7 +167,7 @@ package fd_wbgen2_pkg is
dcr4_pg_arm_o : std_logic;
dcr4_pg_arm_load_o : std_logic;
dcr4_update_o : std_logic;
dcr4_force_cp_o : std_logic;
dcr4_force_dly_o : std_logic;
dcr4_pol_o : std_logic;
frr4_o : std_logic_vector(9 downto 0);
u_start4_o : std_logic_vector(31 downto 0);
......@@ -187,10 +190,13 @@ package fd_wbgen2_pkg is
tar_addr_o => (others => '0'),
tdcsr_write_o => '0',
tdcsr_read_o => '0',
tdcsr_stop_en_o => '0',
tdcsr_start_dis_o => '0',
tdcsr_start_en_o => '0',
tdcsr_stop_dis_o => '0',
tdcsr_stop_en_o => '0',
tdcsr_alutrig_o => '0',
calr_cal_pulse_o => '0',
calr_psel_o => (others => '0'),
adsfr_o => (others => '0'),
atmcr_c_thr_o => (others => '0'),
atmcr_f_thr_o => (others => '0'),
......@@ -205,7 +211,7 @@ package fd_wbgen2_pkg is
dcr1_pg_arm_o => '0',
dcr1_pg_arm_load_o => '0',
dcr1_update_o => '0',
dcr1_force_cp_o => '0',
dcr1_force_dly_o => '0',
dcr1_pol_o => '0',
frr1_o => (others => '0'),
u_start1_o => (others => '0'),
......@@ -219,7 +225,7 @@ package fd_wbgen2_pkg is
dcr2_pg_arm_o => '0',
dcr2_pg_arm_load_o => '0',
dcr2_update_o => '0',
dcr2_force_cp_o => '0',
dcr2_force_dly_o => '0',
dcr2_pol_o => '0',
frr2_o => (others => '0'),
u_start2_o => (others => '0'),
......@@ -233,7 +239,7 @@ package fd_wbgen2_pkg is
dcr3_pg_arm_o => '0',
dcr3_pg_arm_load_o => '0',
dcr3_update_o => '0',
dcr3_force_cp_o => '0',
dcr3_force_dly_o => '0',
dcr3_pol_o => '0',
frr3_o => (others => '0'),
u_start3_o => (others => '0'),
......@@ -247,7 +253,7 @@ package fd_wbgen2_pkg is
dcr4_pg_arm_o => '0',
dcr4_pg_arm_load_o => '0',
dcr4_update_o => '0',
dcr4_force_cp_o => '0',
dcr4_force_dly_o => '0',
dcr4_pol_o => '0',
frr4_o => (others => '0'),
u_start4_o => (others => '0'),
......
......@@ -3,7 +3,7 @@
---------------------------------------------------------------------------------------
-- File : fd_wishbone_slave.vhd
-- Author : auto-generated by wbgen2 from fd_wishbone_slave.wb
-- Created : Wed Sep 7 17:10:37 2011
-- Created : Mon Oct 24 13:42:09 2011
-- Standard : VHDL'87
---------------------------------------------------------------------------------------
-- THIS FILE WAS GENERATED BY wbgen2 FROM SOURCE FILE fd_wishbone_slave.wb
......@@ -92,6 +92,11 @@ signal fd_tdcsr_load_sync0 : std_logic ;
signal fd_tdcsr_load_sync1 : std_logic ;
signal fd_tdcsr_empty_sync0 : std_logic ;
signal fd_tdcsr_empty_sync1 : std_logic ;
signal fd_tdcsr_stop_en_int : std_logic ;
signal fd_tdcsr_stop_en_int_delay : std_logic ;
signal fd_tdcsr_stop_en_sync0 : std_logic ;
signal fd_tdcsr_stop_en_sync1 : std_logic ;
signal fd_tdcsr_stop_en_sync2 : std_logic ;
signal fd_tdcsr_start_dis_int : std_logic ;
signal fd_tdcsr_start_dis_int_delay : std_logic ;
signal fd_tdcsr_start_dis_sync0 : std_logic ;
......@@ -107,11 +112,22 @@ signal fd_tdcsr_stop_dis_int_delay : std_logic ;
signal fd_tdcsr_stop_dis_sync0 : std_logic ;
signal fd_tdcsr_stop_dis_sync1 : std_logic ;
signal fd_tdcsr_stop_dis_sync2 : std_logic ;
signal fd_tdcsr_stop_en_int : std_logic ;
signal fd_tdcsr_stop_en_int_delay : std_logic ;
signal fd_tdcsr_stop_en_sync0 : std_logic ;
signal fd_tdcsr_stop_en_sync1 : std_logic ;
signal fd_tdcsr_stop_en_sync2 : std_logic ;
signal fd_tdcsr_alutrig_int : std_logic ;
signal fd_tdcsr_alutrig_int_delay : std_logic ;
signal fd_tdcsr_alutrig_sync0 : std_logic ;
signal fd_tdcsr_alutrig_sync1 : std_logic ;
signal fd_tdcsr_alutrig_sync2 : std_logic ;
signal fd_calr_cal_pulse_int : std_logic ;
signal fd_calr_cal_pulse_int_delay : std_logic ;
signal fd_calr_cal_pulse_sync0 : std_logic ;
signal fd_calr_cal_pulse_sync1 : std_logic ;
signal fd_calr_cal_pulse_sync2 : std_logic ;
signal fd_calr_psel_int : std_logic_vector(3 downto 0);
signal fd_calr_psel_swb : std_logic ;
signal fd_calr_psel_swb_delay : std_logic ;
signal fd_calr_psel_swb_s0 : std_logic ;
signal fd_calr_psel_swb_s1 : std_logic ;
signal fd_calr_psel_swb_s2 : std_logic ;
signal fd_adsfr_int : std_logic_vector(17 downto 0);
signal fd_adsfr_swb : std_logic ;
signal fd_adsfr_swb_delay : std_logic ;
......@@ -212,11 +228,11 @@ signal fd_dcr1_update_sync1 : std_logic ;
signal fd_dcr1_update_sync2 : std_logic ;
signal fd_dcr1_upd_done_sync0 : std_logic ;
signal fd_dcr1_upd_done_sync1 : std_logic ;
signal fd_dcr1_force_cp_int : std_logic ;
signal fd_dcr1_force_cp_int_delay : std_logic ;
signal fd_dcr1_force_cp_sync0 : std_logic ;
signal fd_dcr1_force_cp_sync1 : std_logic ;
signal fd_dcr1_force_cp_sync2 : std_logic ;
signal fd_dcr1_force_dly_int : std_logic ;
signal fd_dcr1_force_dly_int_delay : std_logic ;
signal fd_dcr1_force_dly_sync0 : std_logic ;
signal fd_dcr1_force_dly_sync1 : std_logic ;
signal fd_dcr1_force_dly_sync2 : std_logic ;
signal fd_dcr1_pol_int : std_logic ;
signal fd_dcr1_pol_sync0 : std_logic ;
signal fd_dcr1_pol_sync1 : std_logic ;
......@@ -286,11 +302,11 @@ signal fd_dcr2_update_sync1 : std_logic ;
signal fd_dcr2_update_sync2 : std_logic ;
signal fd_dcr2_upd_done_sync0 : std_logic ;
signal fd_dcr2_upd_done_sync1 : std_logic ;
signal fd_dcr2_force_cp_int : std_logic ;
signal fd_dcr2_force_cp_int_delay : std_logic ;
signal fd_dcr2_force_cp_sync0 : std_logic ;
signal fd_dcr2_force_cp_sync1 : std_logic ;
signal fd_dcr2_force_cp_sync2 : std_logic ;
signal fd_dcr2_force_dly_int : std_logic ;
signal fd_dcr2_force_dly_int_delay : std_logic ;
signal fd_dcr2_force_dly_sync0 : std_logic ;
signal fd_dcr2_force_dly_sync1 : std_logic ;
signal fd_dcr2_force_dly_sync2 : std_logic ;
signal fd_dcr2_pol_int : std_logic ;
signal fd_dcr2_pol_sync0 : std_logic ;
signal fd_dcr2_pol_sync1 : std_logic ;
......@@ -360,11 +376,11 @@ signal fd_dcr3_update_sync1 : std_logic ;
signal fd_dcr3_update_sync2 : std_logic ;
signal fd_dcr3_upd_done_sync0 : std_logic ;
signal fd_dcr3_upd_done_sync1 : std_logic ;
signal fd_dcr3_force_cp_int : std_logic ;
signal fd_dcr3_force_cp_int_delay : std_logic ;
signal fd_dcr3_force_cp_sync0 : std_logic ;
signal fd_dcr3_force_cp_sync1 : std_logic ;
signal fd_dcr3_force_cp_sync2 : std_logic ;
signal fd_dcr3_force_dly_int : std_logic ;
signal fd_dcr3_force_dly_int_delay : std_logic ;
signal fd_dcr3_force_dly_sync0 : std_logic ;
signal fd_dcr3_force_dly_sync1 : std_logic ;
signal fd_dcr3_force_dly_sync2 : std_logic ;
signal fd_dcr3_pol_int : std_logic ;
signal fd_dcr3_pol_sync0 : std_logic ;
signal fd_dcr3_pol_sync1 : std_logic ;
......@@ -434,11 +450,11 @@ signal fd_dcr4_update_sync1 : std_logic ;
signal fd_dcr4_update_sync2 : std_logic ;
signal fd_dcr4_upd_done_sync0 : std_logic ;
signal fd_dcr4_upd_done_sync1 : std_logic ;
signal fd_dcr4_force_cp_int : std_logic ;
signal fd_dcr4_force_cp_int_delay : std_logic ;
signal fd_dcr4_force_cp_sync0 : std_logic ;
signal fd_dcr4_force_cp_sync1 : std_logic ;
signal fd_dcr4_force_cp_sync2 : std_logic ;
signal fd_dcr4_force_dly_int : std_logic ;
signal fd_dcr4_force_dly_int_delay : std_logic ;
signal fd_dcr4_force_dly_sync0 : std_logic ;
signal fd_dcr4_force_dly_sync1 : std_logic ;
signal fd_dcr4_force_dly_sync2 : std_logic ;
signal fd_dcr4_pol_int : std_logic ;
signal fd_dcr4_pol_sync0 : std_logic ;
signal fd_dcr4_pol_sync1 : std_logic ;
......@@ -543,14 +559,21 @@ begin
fd_tdcsr_write_int_delay <= '0';
fd_tdcsr_read_int <= '0';
fd_tdcsr_read_int_delay <= '0';
fd_tdcsr_stop_en_int <= '0';
fd_tdcsr_stop_en_int_delay <= '0';
fd_tdcsr_start_dis_int <= '0';
fd_tdcsr_start_dis_int_delay <= '0';
fd_tdcsr_start_en_int <= '0';
fd_tdcsr_start_en_int_delay <= '0';
fd_tdcsr_stop_dis_int <= '0';
fd_tdcsr_stop_dis_int_delay <= '0';
fd_tdcsr_stop_en_int <= '0';
fd_tdcsr_stop_en_int_delay <= '0';
fd_tdcsr_alutrig_int <= '0';
fd_tdcsr_alutrig_int_delay <= '0';
fd_calr_cal_pulse_int <= '0';
fd_calr_cal_pulse_int_delay <= '0';
fd_calr_psel_int <= "0000";
fd_calr_psel_swb <= '0';
fd_calr_psel_swb_delay <= '0';
fd_adsfr_int <= "000000000000000000";
fd_adsfr_swb <= '0';
fd_adsfr_swb_delay <= '0';
......@@ -594,8 +617,8 @@ begin
fd_dcr1_pg_arm_int_write <= '0';
fd_dcr1_update_int <= '0';
fd_dcr1_update_int_delay <= '0';
fd_dcr1_force_cp_int <= '0';
fd_dcr1_force_cp_int_delay <= '0';
fd_dcr1_force_dly_int <= '0';
fd_dcr1_force_dly_int_delay <= '0';
fd_dcr1_pol_int <= '0';
fd_frr1_int <= "0000000000";
fd_frr1_swb <= '0';
......@@ -627,8 +650,8 @@ begin
fd_dcr2_pg_arm_int_write <= '0';
fd_dcr2_update_int <= '0';
fd_dcr2_update_int_delay <= '0';
fd_dcr2_force_cp_int <= '0';
fd_dcr2_force_cp_int_delay <= '0';
fd_dcr2_force_dly_int <= '0';
fd_dcr2_force_dly_int_delay <= '0';
fd_dcr2_pol_int <= '0';
fd_frr2_int <= "0000000000";
fd_frr2_swb <= '0';
......@@ -660,8 +683,8 @@ begin
fd_dcr3_pg_arm_int_write <= '0';
fd_dcr3_update_int <= '0';
fd_dcr3_update_int_delay <= '0';
fd_dcr3_force_cp_int <= '0';
fd_dcr3_force_cp_int_delay <= '0';
fd_dcr3_force_dly_int <= '0';
fd_dcr3_force_dly_int_delay <= '0';
fd_dcr3_pol_int <= '0';
fd_frr3_int <= "0000000000";
fd_frr3_swb <= '0';
......@@ -693,8 +716,8 @@ begin
fd_dcr4_pg_arm_int_write <= '0';
fd_dcr4_update_int <= '0';
fd_dcr4_update_int_delay <= '0';
fd_dcr4_force_cp_int <= '0';
fd_dcr4_force_cp_int_delay <= '0';
fd_dcr4_force_dly_int <= '0';
fd_dcr4_force_dly_int_delay <= '0';
fd_dcr4_pol_int <= '0';
fd_frr4_int <= "0000000000";
fd_frr4_swb <= '0';
......@@ -752,14 +775,20 @@ begin
fd_tdcsr_write_int_delay <= '0';
fd_tdcsr_read_int <= fd_tdcsr_read_int_delay;
fd_tdcsr_read_int_delay <= '0';
fd_tdcsr_stop_en_int <= fd_tdcsr_stop_en_int_delay;
fd_tdcsr_stop_en_int_delay <= '0';
fd_tdcsr_start_dis_int <= fd_tdcsr_start_dis_int_delay;
fd_tdcsr_start_dis_int_delay <= '0';
fd_tdcsr_start_en_int <= fd_tdcsr_start_en_int_delay;
fd_tdcsr_start_en_int_delay <= '0';
fd_tdcsr_stop_dis_int <= fd_tdcsr_stop_dis_int_delay;
fd_tdcsr_stop_dis_int_delay <= '0';
fd_tdcsr_stop_en_int <= fd_tdcsr_stop_en_int_delay;
fd_tdcsr_stop_en_int_delay <= '0';
fd_tdcsr_alutrig_int <= fd_tdcsr_alutrig_int_delay;
fd_tdcsr_alutrig_int_delay <= '0';
fd_calr_cal_pulse_int <= fd_calr_cal_pulse_int_delay;
fd_calr_cal_pulse_int_delay <= '0';
fd_calr_psel_swb <= fd_calr_psel_swb_delay;
fd_calr_psel_swb_delay <= '0';
fd_adsfr_swb <= fd_adsfr_swb_delay;
fd_adsfr_swb_delay <= '0';
fd_atmcr_c_thr_swb <= fd_atmcr_c_thr_swb_delay;
......@@ -810,8 +839,8 @@ begin
end if;
fd_dcr1_update_int <= fd_dcr1_update_int_delay;
fd_dcr1_update_int_delay <= '0';
fd_dcr1_force_cp_int <= fd_dcr1_force_cp_int_delay;
fd_dcr1_force_cp_int_delay <= '0';
fd_dcr1_force_dly_int <= fd_dcr1_force_dly_int_delay;
fd_dcr1_force_dly_int_delay <= '0';
fd_frr1_swb <= fd_frr1_swb_delay;
fd_frr1_swb_delay <= '0';
fd_u_start1_swb <= fd_u_start1_swb_delay;
......@@ -834,8 +863,8 @@ begin
end if;
fd_dcr2_update_int <= fd_dcr2_update_int_delay;
fd_dcr2_update_int_delay <= '0';
fd_dcr2_force_cp_int <= fd_dcr2_force_cp_int_delay;
fd_dcr2_force_cp_int_delay <= '0';
fd_dcr2_force_dly_int <= fd_dcr2_force_dly_int_delay;
fd_dcr2_force_dly_int_delay <= '0';
fd_frr2_swb <= fd_frr2_swb_delay;
fd_frr2_swb_delay <= '0';
fd_u_start2_swb <= fd_u_start2_swb_delay;
......@@ -858,8 +887,8 @@ begin
end if;
fd_dcr3_update_int <= fd_dcr3_update_int_delay;
fd_dcr3_update_int_delay <= '0';
fd_dcr3_force_cp_int <= fd_dcr3_force_cp_int_delay;
fd_dcr3_force_cp_int_delay <= '0';
fd_dcr3_force_dly_int <= fd_dcr3_force_dly_int_delay;
fd_dcr3_force_dly_int_delay <= '0';
fd_frr3_swb <= fd_frr3_swb_delay;
fd_frr3_swb_delay <= '0';
fd_u_start3_swb <= fd_u_start3_swb_delay;
......@@ -882,8 +911,8 @@ begin
end if;
fd_dcr4_update_int <= fd_dcr4_update_int_delay;
fd_dcr4_update_int_delay <= '0';
fd_dcr4_force_cp_int <= fd_dcr4_force_cp_int_delay;
fd_dcr4_force_cp_int_delay <= '0';
fd_dcr4_force_dly_int <= fd_dcr4_force_dly_int_delay;
fd_dcr4_force_dly_int_delay <= '0';
fd_frr4_swb <= fd_frr4_swb_delay;
fd_frr4_swb_delay <= '0';
fd_u_start4_swb <= fd_u_start4_swb_delay;
......@@ -954,14 +983,18 @@ begin
rddata_reg(0) <= 'X';
fd_gcr_input_en_int <= wrdata_reg(1);
rddata_reg(1) <= 'X';
rddata_reg(2) <= 'X';
fd_gcr_csync_int_int <= wrdata_reg(2);
fd_gcr_csync_int_int_delay <= wrdata_reg(2);
rddata_reg(3) <= 'X';
fd_gcr_csync_wr_int <= wrdata_reg(3);
fd_gcr_csync_wr_int_delay <= wrdata_reg(3);
rddata_reg(4) <= 'X';
else
rddata_reg(0) <= fd_gcr_bypass_int;
rddata_reg(1) <= fd_gcr_input_en_int;
rddata_reg(2) <= 'X';
rddata_reg(3) <= 'X';
rddata_reg(4) <= fd_gcr_wr_ready_sync1;
rddata_reg(5) <= 'X';
rddata_reg(6) <= 'X';
......@@ -1014,27 +1047,42 @@ begin
ack_in_progress <= '1';
when "000100" =>
if (wb_we_i = '1') then
rddata_reg(0) <= 'X';
fd_tdcsr_write_int <= wrdata_reg(0);
fd_tdcsr_write_int_delay <= wrdata_reg(0);
rddata_reg(1) <= 'X';
fd_tdcsr_read_int <= wrdata_reg(1);
fd_tdcsr_read_int_delay <= wrdata_reg(1);
rddata_reg(2) <= 'X';
rddata_reg(3) <= 'X';
rddata_reg(4) <= 'X';
rddata_reg(5) <= 'X';
fd_tdcsr_start_dis_int <= wrdata_reg(6);
fd_tdcsr_start_dis_int_delay <= wrdata_reg(6);
fd_tdcsr_start_en_int <= wrdata_reg(7);
fd_tdcsr_start_en_int_delay <= wrdata_reg(7);
fd_tdcsr_stop_dis_int <= wrdata_reg(8);
fd_tdcsr_stop_dis_int_delay <= wrdata_reg(8);
fd_tdcsr_stop_en_int <= wrdata_reg(9);
fd_tdcsr_stop_en_int_delay <= wrdata_reg(9);
rddata_reg(6) <= 'X';
fd_tdcsr_stop_en_int <= wrdata_reg(6);
fd_tdcsr_stop_en_int_delay <= wrdata_reg(6);
rddata_reg(7) <= 'X';
fd_tdcsr_start_dis_int <= wrdata_reg(7);
fd_tdcsr_start_dis_int_delay <= wrdata_reg(7);
rddata_reg(8) <= 'X';
fd_tdcsr_start_en_int <= wrdata_reg(8);
fd_tdcsr_start_en_int_delay <= wrdata_reg(8);
rddata_reg(9) <= 'X';
fd_tdcsr_stop_dis_int <= wrdata_reg(9);
fd_tdcsr_stop_dis_int_delay <= wrdata_reg(9);
rddata_reg(10) <= 'X';
fd_tdcsr_alutrig_int <= wrdata_reg(10);
fd_tdcsr_alutrig_int_delay <= wrdata_reg(10);
else
rddata_reg(0) <= 'X';
rddata_reg(1) <= 'X';
rddata_reg(2) <= fd_tdcsr_err_sync1;
rddata_reg(3) <= fd_tdcsr_int_sync1;
rddata_reg(4) <= fd_tdcsr_load_sync1;
rddata_reg(5) <= fd_tdcsr_empty_sync1;
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';
......@@ -1061,6 +1109,47 @@ begin
ack_sreg(4) <= '1';
ack_in_progress <= '1';
when "000101" =>
if (wb_we_i = '1') then
rddata_reg(0) <= 'X';
fd_calr_cal_pulse_int <= wrdata_reg(0);
fd_calr_cal_pulse_int_delay <= wrdata_reg(0);
fd_calr_psel_int <= wrdata_reg(4 downto 1);
fd_calr_psel_swb <= '1';
fd_calr_psel_swb_delay <= '1';
else
rddata_reg(0) <= 'X';
rddata_reg(4 downto 1) <= fd_calr_psel_int;
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';
end if;
ack_sreg(4) <= '1';
ack_in_progress <= '1';
when "000110" =>
if (wb_we_i = '1') then
fd_adsfr_int <= wrdata_reg(17 downto 0);
fd_adsfr_swb <= '1';
......@@ -1084,7 +1173,7 @@ begin
end if;
ack_sreg(3) <= '1';
ack_in_progress <= '1';
when "000110" =>
when "000111" =>
if (wb_we_i = '1') then
fd_atmcr_c_thr_int <= wrdata_reg(3 downto 0);
fd_atmcr_c_thr_swb <= '1';
......@@ -1103,7 +1192,7 @@ begin
end if;
ack_sreg(3) <= '1';
ack_in_progress <= '1';
when "000111" =>
when "001000" =>
if (wb_we_i = '1') then
fd_asor_offset_int <= wrdata_reg(22 downto 0);
fd_asor_offset_swb <= '1';
......@@ -1122,7 +1211,7 @@ begin
end if;
ack_sreg(3) <= '1';
ack_in_progress <= '1';
when "001000" =>
when "001001" =>
if (wb_we_i = '1') then
else
fd_iecraw_lwb <= '1';
......@@ -1131,7 +1220,7 @@ begin
end if;
ack_sreg(5) <= '1';
ack_in_progress <= '1';
when "001001" =>
when "001010" =>
if (wb_we_i = '1') then
else
fd_iectag_lwb <= '1';
......@@ -1140,11 +1229,13 @@ begin
end if;
ack_sreg(5) <= '1';
ack_in_progress <= '1';
when "001010" =>
when "001011" =>
if (wb_we_i = '1') then
rddata_reg(0) <= 'X';
fd_iepd_rst_stat_int <= wrdata_reg(0);
fd_iepd_rst_stat_int_delay <= wrdata_reg(0);
else
rddata_reg(0) <= 'X';
fd_iepd_pdelay_lwb <= '1';
fd_iepd_pdelay_lwb_delay <= '1';
fd_iepd_pdelay_lwb_in_progress <= '1';
......@@ -1174,7 +1265,7 @@ begin
end if;
ack_sreg(5) <= '1';
ack_in_progress <= '1';
when "001011" =>
when "001100" =>
if (wb_we_i = '1') then
else
fd_rcrr_lwb <= '1';
......@@ -1183,7 +1274,7 @@ begin
end if;
ack_sreg(5) <= '1';
ack_in_progress <= '1';
when "001100" =>
when "001101" =>
if (wb_we_i = '1') then
else
fd_rcfr_lwb <= '1';
......@@ -1192,17 +1283,21 @@ begin
end if;
ack_sreg(5) <= '1';
ack_in_progress <= '1';
when "001101" =>
when "001110" =>
if (wb_we_i = '1') then
rddata_reg(0) <= 'X';
fd_tsbcr_enable_int <= wrdata_reg(0);
fd_tsbcr_purge_int <= wrdata_reg(1);
rddata_reg(1) <= 'X';
rddata_reg(2) <= 'X';
fd_tsbcr_rst_seq_int <= wrdata_reg(2);
fd_tsbcr_rst_seq_int_delay <= wrdata_reg(2);
rddata_reg(3) <= 'X';
rddata_reg(4) <= 'X';
else
rddata_reg(0) <= fd_tsbcr_enable_int;
rddata_reg(1) <= 'X';
rddata_reg(2) <= 'X';
rddata_reg(3) <= regs_i.tsbcr_full_i;
rddata_reg(4) <= regs_i.tsbcr_empty_i;
rddata_reg(5) <= 'X';
......@@ -1235,14 +1330,14 @@ begin
end if;
ack_sreg(4) <= '1';
ack_in_progress <= '1';
when "001110" =>
when "001111" =>
if (wb_we_i = '1') then
else
rddata_reg(31 downto 0) <= regs_i.tsbr_u_i;
end if;
ack_sreg(0) <= '1';
ack_in_progress <= '1';
when "001111" =>
when "010000" =>
if (wb_we_i = '1') then
else
rddata_reg(27 downto 0) <= regs_i.tsbr_c_i;
......@@ -1253,7 +1348,7 @@ begin
end if;
ack_sreg(0) <= '1';
ack_in_progress <= '1';
when "010000" =>
when "010001" =>
if (wb_we_i = '1') then
else
rddata_reg(11 downto 0) <= regs_i.tsbr_fid_fine_i;
......@@ -1279,11 +1374,13 @@ begin
fd_dcr1_pg_arm_lw_read_in_progress <= '0';
fd_dcr1_pg_arm_rwsel <= '1';
rddata_reg(3) <= 'X';
rddata_reg(4) <= 'X';
fd_dcr1_update_int <= wrdata_reg(4);
fd_dcr1_update_int_delay <= wrdata_reg(4);
rddata_reg(5) <= 'X';
fd_dcr1_force_cp_int <= wrdata_reg(6);
fd_dcr1_force_cp_int_delay <= wrdata_reg(6);
rddata_reg(6) <= 'X';
fd_dcr1_force_dly_int <= wrdata_reg(6);
fd_dcr1_force_dly_int_delay <= wrdata_reg(6);
fd_dcr1_pol_int <= wrdata_reg(7);
rddata_reg(7) <= 'X';
else
......@@ -1295,7 +1392,9 @@ begin
fd_dcr1_pg_arm_lw_read_in_progress <= '1';
fd_dcr1_pg_arm_rwsel <= '0';
rddata_reg(3) <= fd_dcr1_pg_trig_sync1;
rddata_reg(4) <= 'X';
rddata_reg(5) <= fd_dcr1_upd_done_sync1;
rddata_reg(6) <= 'X';
rddata_reg(7) <= fd_dcr1_pol_int;
rddata_reg(8) <= 'X';
rddata_reg(9) <= 'X';
......@@ -1477,11 +1576,13 @@ begin
fd_dcr2_pg_arm_lw_read_in_progress <= '0';
fd_dcr2_pg_arm_rwsel <= '1';
rddata_reg(3) <= 'X';
rddata_reg(4) <= 'X';
fd_dcr2_update_int <= wrdata_reg(4);
fd_dcr2_update_int_delay <= wrdata_reg(4);
rddata_reg(5) <= 'X';
fd_dcr2_force_cp_int <= wrdata_reg(6);
fd_dcr2_force_cp_int_delay <= wrdata_reg(6);
rddata_reg(6) <= 'X';
fd_dcr2_force_dly_int <= wrdata_reg(6);
fd_dcr2_force_dly_int_delay <= wrdata_reg(6);
fd_dcr2_pol_int <= wrdata_reg(7);
rddata_reg(7) <= 'X';
else
......@@ -1493,7 +1594,9 @@ begin
fd_dcr2_pg_arm_lw_read_in_progress <= '1';
fd_dcr2_pg_arm_rwsel <= '0';
rddata_reg(3) <= fd_dcr2_pg_trig_sync1;
rddata_reg(4) <= 'X';
rddata_reg(5) <= fd_dcr2_upd_done_sync1;
rddata_reg(6) <= 'X';
rddata_reg(7) <= fd_dcr2_pol_int;
rddata_reg(8) <= 'X';
rddata_reg(9) <= 'X';
......@@ -1675,11 +1778,13 @@ begin
fd_dcr3_pg_arm_lw_read_in_progress <= '0';
fd_dcr3_pg_arm_rwsel <= '1';
rddata_reg(3) <= 'X';
rddata_reg(4) <= 'X';
fd_dcr3_update_int <= wrdata_reg(4);
fd_dcr3_update_int_delay <= wrdata_reg(4);
rddata_reg(5) <= 'X';
fd_dcr3_force_cp_int <= wrdata_reg(6);
fd_dcr3_force_cp_int_delay <= wrdata_reg(6);
rddata_reg(6) <= 'X';
fd_dcr3_force_dly_int <= wrdata_reg(6);
fd_dcr3_force_dly_int_delay <= wrdata_reg(6);
fd_dcr3_pol_int <= wrdata_reg(7);
rddata_reg(7) <= 'X';
else
......@@ -1691,7 +1796,9 @@ begin
fd_dcr3_pg_arm_lw_read_in_progress <= '1';
fd_dcr3_pg_arm_rwsel <= '0';
rddata_reg(3) <= fd_dcr3_pg_trig_sync1;
rddata_reg(4) <= 'X';
rddata_reg(5) <= fd_dcr3_upd_done_sync1;
rddata_reg(6) <= 'X';
rddata_reg(7) <= fd_dcr3_pol_int;
rddata_reg(8) <= 'X';
rddata_reg(9) <= 'X';
......@@ -1873,11 +1980,13 @@ begin
fd_dcr4_pg_arm_lw_read_in_progress <= '0';
fd_dcr4_pg_arm_rwsel <= '1';
rddata_reg(3) <= 'X';
rddata_reg(4) <= 'X';
fd_dcr4_update_int <= wrdata_reg(4);
fd_dcr4_update_int_delay <= wrdata_reg(4);
rddata_reg(5) <= 'X';
fd_dcr4_force_cp_int <= wrdata_reg(6);
fd_dcr4_force_cp_int_delay <= wrdata_reg(6);
rddata_reg(6) <= 'X';
fd_dcr4_force_dly_int <= wrdata_reg(6);
fd_dcr4_force_dly_int_delay <= wrdata_reg(6);
fd_dcr4_pol_int <= wrdata_reg(7);
rddata_reg(7) <= 'X';
else
......@@ -1889,7 +1998,9 @@ begin
fd_dcr4_pg_arm_lw_read_in_progress <= '1';
fd_dcr4_pg_arm_rwsel <= '0';
rddata_reg(3) <= fd_dcr4_pg_trig_sync1;
rddata_reg(4) <= 'X';
rddata_reg(5) <= fd_dcr4_upd_done_sync1;
rddata_reg(6) <= 'X';
rddata_reg(7) <= fd_dcr4_pol_int;
rddata_reg(8) <= 'X';
rddata_reg(9) <= 'X';
......@@ -2513,6 +2624,23 @@ begin
end process;
-- Start enable
process (clk_ref_i, rst_n_i)
begin
if (rst_n_i = '0') then
regs_o.tdcsr_stop_en_o <= '0';
fd_tdcsr_stop_en_sync0 <= '0';
fd_tdcsr_stop_en_sync1 <= '0';
fd_tdcsr_stop_en_sync2 <= '0';
elsif rising_edge(clk_ref_i) then
fd_tdcsr_stop_en_sync0 <= fd_tdcsr_stop_en_int;
fd_tdcsr_stop_en_sync1 <= fd_tdcsr_stop_en_sync0;
fd_tdcsr_stop_en_sync2 <= fd_tdcsr_stop_en_sync1;
regs_o.tdcsr_stop_en_o <= fd_tdcsr_stop_en_sync2 and (not fd_tdcsr_stop_en_sync1);
end if;
end process;
-- Start disable
process (clk_ref_i, rst_n_i)
begin
......@@ -2530,7 +2658,7 @@ begin
end process;
-- Start enable
-- Stop enable
process (clk_ref_i, rst_n_i)
begin
if (rst_n_i = '0') then
......@@ -2547,7 +2675,7 @@ begin
end process;
-- Start disable
-- Stop disable
process (clk_ref_i, rst_n_i)
begin
if (rst_n_i = '0') then
......@@ -2564,19 +2692,56 @@ begin
end process;
-- Start enable
-- write 1: Pulse the Alutrigger line
process (clk_ref_i, rst_n_i)
begin
if (rst_n_i = '0') then
regs_o.tdcsr_stop_en_o <= '0';
fd_tdcsr_stop_en_sync0 <= '0';
fd_tdcsr_stop_en_sync1 <= '0';
fd_tdcsr_stop_en_sync2 <= '0';
regs_o.tdcsr_alutrig_o <= '0';
fd_tdcsr_alutrig_sync0 <= '0';
fd_tdcsr_alutrig_sync1 <= '0';
fd_tdcsr_alutrig_sync2 <= '0';
elsif rising_edge(clk_ref_i) then
fd_tdcsr_stop_en_sync0 <= fd_tdcsr_stop_en_int;
fd_tdcsr_stop_en_sync1 <= fd_tdcsr_stop_en_sync0;
fd_tdcsr_stop_en_sync2 <= fd_tdcsr_stop_en_sync1;
regs_o.tdcsr_stop_en_o <= fd_tdcsr_stop_en_sync2 and (not fd_tdcsr_stop_en_sync1);
fd_tdcsr_alutrig_sync0 <= fd_tdcsr_alutrig_int;
fd_tdcsr_alutrig_sync1 <= fd_tdcsr_alutrig_sync0;
fd_tdcsr_alutrig_sync2 <= fd_tdcsr_alutrig_sync1;
regs_o.tdcsr_alutrig_o <= fd_tdcsr_alutrig_sync2 and (not fd_tdcsr_alutrig_sync1);
end if;
end process;
-- Triggers calibration pulses
process (clk_ref_i, rst_n_i)
begin
if (rst_n_i = '0') then
regs_o.calr_cal_pulse_o <= '0';
fd_calr_cal_pulse_sync0 <= '0';
fd_calr_cal_pulse_sync1 <= '0';
fd_calr_cal_pulse_sync2 <= '0';
elsif rising_edge(clk_ref_i) then
fd_calr_cal_pulse_sync0 <= fd_calr_cal_pulse_int;
fd_calr_cal_pulse_sync1 <= fd_calr_cal_pulse_sync0;
fd_calr_cal_pulse_sync2 <= fd_calr_cal_pulse_sync1;
regs_o.calr_cal_pulse_o <= fd_calr_cal_pulse_sync2 and (not fd_calr_cal_pulse_sync1);
end if;
end process;
-- Enable pulse generation
-- asynchronous std_logic_vector register : Enable pulse generation (type RW/RO, clk_ref_i <-> bus_clock_int)
process (clk_ref_i, rst_n_i)
begin
if (rst_n_i = '0') then
fd_calr_psel_swb_s0 <= '0';
fd_calr_psel_swb_s1 <= '0';
fd_calr_psel_swb_s2 <= '0';
regs_o.calr_psel_o <= "0000";
elsif rising_edge(clk_ref_i) then
fd_calr_psel_swb_s0 <= fd_calr_psel_swb;
fd_calr_psel_swb_s1 <= fd_calr_psel_swb_s0;
fd_calr_psel_swb_s2 <= fd_calr_psel_swb_s1;
if ((fd_calr_psel_swb_s2 = '0') and (fd_calr_psel_swb_s1 = '1')) then
regs_o.calr_psel_o <= fd_calr_psel_int;
end if;
end if;
end process;
......@@ -2945,19 +3110,19 @@ begin
end process;
-- Force Calibration Pulse
-- Force Calibration Delay
process (clk_ref_i, rst_n_i)
begin
if (rst_n_i = '0') then
regs_o.dcr1_force_cp_o <= '0';
fd_dcr1_force_cp_sync0 <= '0';
fd_dcr1_force_cp_sync1 <= '0';
fd_dcr1_force_cp_sync2 <= '0';
regs_o.dcr1_force_dly_o <= '0';
fd_dcr1_force_dly_sync0 <= '0';
fd_dcr1_force_dly_sync1 <= '0';
fd_dcr1_force_dly_sync2 <= '0';
elsif rising_edge(clk_ref_i) then
fd_dcr1_force_cp_sync0 <= fd_dcr1_force_cp_int;
fd_dcr1_force_cp_sync1 <= fd_dcr1_force_cp_sync0;
fd_dcr1_force_cp_sync2 <= fd_dcr1_force_cp_sync1;
regs_o.dcr1_force_cp_o <= fd_dcr1_force_cp_sync2 and (not fd_dcr1_force_cp_sync1);
fd_dcr1_force_dly_sync0 <= fd_dcr1_force_dly_int;
fd_dcr1_force_dly_sync1 <= fd_dcr1_force_dly_sync0;
fd_dcr1_force_dly_sync2 <= fd_dcr1_force_dly_sync1;
regs_o.dcr1_force_dly_o <= fd_dcr1_force_dly_sync2 and (not fd_dcr1_force_dly_sync1);
end if;
end process;
......@@ -3225,19 +3390,19 @@ begin
end process;
-- Force Calibration Pulse
-- Force Calibration Delay
process (clk_ref_i, rst_n_i)
begin
if (rst_n_i = '0') then
regs_o.dcr2_force_cp_o <= '0';
fd_dcr2_force_cp_sync0 <= '0';
fd_dcr2_force_cp_sync1 <= '0';
fd_dcr2_force_cp_sync2 <= '0';
regs_o.dcr2_force_dly_o <= '0';
fd_dcr2_force_dly_sync0 <= '0';
fd_dcr2_force_dly_sync1 <= '0';
fd_dcr2_force_dly_sync2 <= '0';
elsif rising_edge(clk_ref_i) then
fd_dcr2_force_cp_sync0 <= fd_dcr2_force_cp_int;
fd_dcr2_force_cp_sync1 <= fd_dcr2_force_cp_sync0;
fd_dcr2_force_cp_sync2 <= fd_dcr2_force_cp_sync1;
regs_o.dcr2_force_cp_o <= fd_dcr2_force_cp_sync2 and (not fd_dcr2_force_cp_sync1);
fd_dcr2_force_dly_sync0 <= fd_dcr2_force_dly_int;
fd_dcr2_force_dly_sync1 <= fd_dcr2_force_dly_sync0;
fd_dcr2_force_dly_sync2 <= fd_dcr2_force_dly_sync1;
regs_o.dcr2_force_dly_o <= fd_dcr2_force_dly_sync2 and (not fd_dcr2_force_dly_sync1);
end if;
end process;
......@@ -3505,19 +3670,19 @@ begin
end process;
-- Force Calibration Pulse
-- Force Calibration Delay
process (clk_ref_i, rst_n_i)
begin
if (rst_n_i = '0') then
regs_o.dcr3_force_cp_o <= '0';
fd_dcr3_force_cp_sync0 <= '0';
fd_dcr3_force_cp_sync1 <= '0';
fd_dcr3_force_cp_sync2 <= '0';
regs_o.dcr3_force_dly_o <= '0';
fd_dcr3_force_dly_sync0 <= '0';
fd_dcr3_force_dly_sync1 <= '0';
fd_dcr3_force_dly_sync2 <= '0';
elsif rising_edge(clk_ref_i) then
fd_dcr3_force_cp_sync0 <= fd_dcr3_force_cp_int;
fd_dcr3_force_cp_sync1 <= fd_dcr3_force_cp_sync0;
fd_dcr3_force_cp_sync2 <= fd_dcr3_force_cp_sync1;
regs_o.dcr3_force_cp_o <= fd_dcr3_force_cp_sync2 and (not fd_dcr3_force_cp_sync1);
fd_dcr3_force_dly_sync0 <= fd_dcr3_force_dly_int;
fd_dcr3_force_dly_sync1 <= fd_dcr3_force_dly_sync0;
fd_dcr3_force_dly_sync2 <= fd_dcr3_force_dly_sync1;
regs_o.dcr3_force_dly_o <= fd_dcr3_force_dly_sync2 and (not fd_dcr3_force_dly_sync1);
end if;
end process;
......@@ -3785,19 +3950,19 @@ begin
end process;
-- Force Calibration Pulse
-- Force Calibration Delay
process (clk_ref_i, rst_n_i)
begin
if (rst_n_i = '0') then
regs_o.dcr4_force_cp_o <= '0';
fd_dcr4_force_cp_sync0 <= '0';
fd_dcr4_force_cp_sync1 <= '0';
fd_dcr4_force_cp_sync2 <= '0';
regs_o.dcr4_force_dly_o <= '0';
fd_dcr4_force_dly_sync0 <= '0';
fd_dcr4_force_dly_sync1 <= '0';
fd_dcr4_force_dly_sync2 <= '0';
elsif rising_edge(clk_ref_i) then
fd_dcr4_force_cp_sync0 <= fd_dcr4_force_cp_int;
fd_dcr4_force_cp_sync1 <= fd_dcr4_force_cp_sync0;
fd_dcr4_force_cp_sync2 <= fd_dcr4_force_cp_sync1;
regs_o.dcr4_force_cp_o <= fd_dcr4_force_cp_sync2 and (not fd_dcr4_force_cp_sync1);
fd_dcr4_force_dly_sync0 <= fd_dcr4_force_dly_int;
fd_dcr4_force_dly_sync1 <= fd_dcr4_force_dly_sync0;
fd_dcr4_force_dly_sync2 <= fd_dcr4_force_dly_sync1;
regs_o.dcr4_force_dly_o <= fd_dcr4_force_dly_sync2 and (not fd_dcr4_force_dly_sync1);
end if;
end process;
......
-- -*- Mode: LUA; tab-width: 2 -*-
peripheral {
name = "Fine Delay Wishbone slave";
hdl_entity = "fd_wishbone_slave";
prefix = "fd";
reg {
name = "Reset Register";
prefix = "RSTR";
field {
name = "Reset trigger";
description = "Writing 0xDEADBEEF into this register will trigger a full reset of the \ fine delay core";
type = PASS_THROUGH;
size = 32;
};
};
name = "Fine Delay Wishbone slave";
hdl_entity = "fd_wishbone_slave";
prefix = "fd";
reg {
name = "Reset Register";
prefix = "RSTR";
field {
name = "Reset trigger";
description = "Writing 0xDEADBEEF into this register will trigger a full reset of the \ fine delay core";
type = PASS_THROUGH;
size = 32;
};
};
reg {
name = "ID Register";
......@@ -33,32 +34,32 @@ peripheral {
};
reg {
name = "Global Control Register";
prefix = "GCR";
field {
clock = "clk_ref_i";
reg {
name = "Global Control Register";
prefix = "GCR";
field {
clock = "clk_ref_i";
name = "Bypass delay block";
prefix = "BYPASS";
description = "0: normal operation (fine-delay)\
name = "Bypass delay block";
prefix = "BYPASS";
description = "0: normal operation (fine-delay)\
1: TDC and delay lines controlled from the host";
type = BIT;
access_bus = READ_WRITE;
access_dev = READ_ONLY;
};
field {
clock = "clk_ref_i";
name = "Enable trigger input";
prefix = "INPUT_EN";
description = "";
type = BIT;
access_bus = READ_WRITE;
access_dev = READ_ONLY;
};
type = BIT;
access_bus = READ_WRITE;
access_dev = READ_ONLY;
};
field {
clock = "clk_ref_i";
name = "Enable trigger input";
prefix = "INPUT_EN";
description = "";
type = BIT;
access_bus = READ_WRITE;
access_dev = READ_ONLY;
};
field {
name = "Internal Counter Sync";
......@@ -85,123 +86,154 @@ peripheral {
prefix = "WR_READY";
type = BIT;
clock = "clk_ref_i";
access_bus = READ_ONLY;
access_dev = WRITE_ONLY;
};
};
reg {
name = "TDC Address/Data Register";
prefix = "TAR";
field {
clock = "clk_ref_i";
name = "DATA";
prefix = "DATA";
type = SLV;
size = 28;
access_bus = READ_WRITE;
access_dev = READ_WRITE;
load = LOAD_EXT;
};
field {
clock = "clk_ref_i";
name = "ADDR";
prefix = "ADDR";
type = SLV;
size = 4;
access_bus = READ_WRITE;
access_dev = READ_ONLY;
};
};
reg {
name = "TDC control/status reg";
prefix = "TDCSR";
field {
name = "Start TDC write";
prefix = "WRITE";
clock = "clk_ref_i";
type = MONOSTABLE;
};
field {
name = "Start TDC read";
prefix = "READ";
clock = "clk_ref_i";
type = MONOSTABLE;
};
field {
clock = "clk_ref_i";
name = "Error flag";
prefix = "ERR";
type = BIT;
access_bus = READ_ONLY;
access_dev = WRITE_ONLY;
};
field {
clock = "clk_ref_i";
name = "Interrupt flag";
prefix = "INT";
type = BIT;
access_bus = READ_ONLY;
access_dev = WRITE_ONLY;
};
field {
clock = "clk_ref_i";
name = "Load flag";
prefix = "LOAD";
type = BIT;
access_bus = READ_ONLY;
access_dev = WRITE_ONLY;
};
field {
clock = "clk_ref_i";
name = "Empty flag";
prefix = "EMPTY";
type = BIT;
access_bus = READ_ONLY;
access_dev = WRITE_ONLY;
};
field {
clock = "clk_ref_i";
name = "Start disable";
prefix = "START_DIS";
type = MONOSTABLE;
};
field {
clock = "clk_ref_i";
name = "Start enable";
prefix = "START_EN";
type = MONOSTABLE;
};
field {
clock = "clk_ref_i";
name = "Start disable";
prefix = "STOP_DIS";
type = MONOSTABLE;
};
field {
clock = "clk_ref_i";
name = "Start enable";
prefix = "STOP_EN";
type = MONOSTABLE;
};
};
access_bus = READ_ONLY;
access_dev = WRITE_ONLY;
};
};
reg {
name = "TDC Address/Data Register";
prefix = "TAR";
field {
clock = "clk_ref_i";
name = "DATA";
prefix = "DATA";
type = SLV;
size = 28;
access_bus = READ_WRITE;
access_dev = READ_WRITE;
load = LOAD_EXT;
};
field {
clock = "clk_ref_i";
name = "ADDR";
prefix = "ADDR";
type = SLV;
size = 4;
access_bus = READ_WRITE;
access_dev = READ_ONLY;
};
};
reg {
name = "TDC control/status reg";
prefix = "TDCSR";
field {
name = "Start TDC write";
prefix = "WRITE";
clock = "clk_ref_i";
type = MONOSTABLE;
};
field {
name = "Start TDC read";
prefix = "READ";
clock = "clk_ref_i";
type = MONOSTABLE;
};
field {
clock = "clk_ref_i";
name = "Error flag";
prefix = "ERR";
type = BIT;
access_bus = READ_ONLY;
access_dev = WRITE_ONLY;
};
field {
clock = "clk_ref_i";
name = "Interrupt flag";
prefix = "INT";
type = BIT;
access_bus = READ_ONLY;
access_dev = WRITE_ONLY;
};
field {
clock = "clk_ref_i";
name = "Load flag";
prefix = "LOAD";
type = BIT;
access_bus = READ_ONLY;
access_dev = WRITE_ONLY;
};
field {
clock = "clk_ref_i";
name = "Empty flag";
prefix = "EMPTY";
type = BIT;
access_bus = READ_ONLY;
access_dev = WRITE_ONLY;
};
field {
clock = "clk_ref_i";
name = "Start enable";
prefix = "STOP_EN";
type = MONOSTABLE;
};
field {
clock = "clk_ref_i";
name = "Start disable";
prefix = "START_DIS";
type = MONOSTABLE;
};
field {
clock = "clk_ref_i";
name = "Stop enable";
prefix = "START_EN";
type = MONOSTABLE;
};
field {
clock = "clk_ref_i";
name = "Stop disable";
prefix = "STOP_DIS";
type = MONOSTABLE;
};
field {
clock = "clk_ref_i";
name = "write 1: Pulse the Alutrigger line";
prefix = "ALUTRIG";
type = MONOSTABLE;
};
};
reg {
prefix = "CALR";
name = "Calibration register";
field {
clock = "clk_ref_i";
name = "Triggers calibration pulses";
description = "write 1: Generates synchronous calibration pulses the channels selected in PSEL field.";
prefix = "CAL_PULSE";
type = MONOSTABLE;
};
field {
clock = "clk_ref_i";
name = "Enable pulse generation";
description = "1: enable generation of calibration pulses on the output corresponding to the written bit\
0: disable generation of these pulses";
prefix = "PSEL";
type = SLV;
size = 4;
access_bus = READ_WRITE;
access_dev = READ_ONLY;
};
};
reg {
......@@ -216,85 +248,85 @@ peripheral {
clock = "clk_ref_i";
access_bus = READ_WRITE;
access_dev = READ_ONLY;
};
};
reg {
prefix = "ATMCR";
name = "Acam Timestamp Merging Control Register";
description = "Register controlling the merging of the fine timestamps prouced by Acam with the coarse timestamps gatheret by the FPGA. These values are hardware-specific. The register should be loaded with the paramete 'ATMCR' from the mezzanine's configuration EEPROM";
field {
name = "Wraparound Coarse Threshold";
prefix = "C_THR";
size = 4;
type = SLV;
clock = "clk_ref_i";
access_bus = READ_WRITE;
access_dev = READ_ONLY;
};
field {
name = "Wraparound Fine Threshold";
prefix = "F_THR";
size = 23;
type = SLV;
clock = "clk_ref_i";
access_bus = READ_WRITE;
access_dev = READ_ONLY;
};
};
reg {
prefix = "ASOR";
name = "Acam Start Offset Register";
description = "";
field {
name = "Start Offset";
prefix = "OFFSET";
size = 23;
type = SLV;
clock = "clk_ref_i";
access_bus = READ_WRITE;
access_dev = READ_ONLY;
};
};
reg {
name = "Raw Input Events Counter Register ";
prefix = "IECRAW";
field {
name = "Number of raw events";
description = "Number of all input pulses detected by the timestamper";
type = SLV;
size = 32;
clock = "clk_ref_i";
access_bus = READ_ONLY;
access_dev= WRITE_ONLY;
};
};
reg {
name = "Tagged Input Events Counter Register ";
prefix = "IECTAG";
field {
name = "Number of tagged events";
description = "Number of all input pulses which passed the width checks and have produced valid timestamps.";
type = SLV;
size = 32;
clock = "clk_ref_i";
access_bus = READ_ONLY;
access_dev= WRITE_ONLY;
};
};
reg {
name = "Input Event Processing Delay Register";
prefix = "IEPD";
};
};
reg {
prefix = "ATMCR";
name = "Acam Timestamp Merging Control Register";
description = "Register controlling the merging of the fine timestamps prouced by Acam with the coarse timestamps gatheret by the FPGA. These values are hardware-specific. The register should be loaded with the paramete 'ATMCR' from the mezzanine's configuration EEPROM";
field {
name = "Wraparound Coarse Threshold";
prefix = "C_THR";
size = 4;
type = SLV;
clock = "clk_ref_i";
access_bus = READ_WRITE;
access_dev = READ_ONLY;
};
field {
name = "Wraparound Fine Threshold";
prefix = "F_THR";
size = 23;
type = SLV;
clock = "clk_ref_i";
access_bus = READ_WRITE;
access_dev = READ_ONLY;
};
};
reg {
prefix = "ASOR";
name = "Acam Start Offset Register";
description = "";
field {
name = "Start Offset";
prefix = "OFFSET";
size = 23;
type = SLV;
clock = "clk_ref_i";
access_bus = READ_WRITE;
access_dev = READ_ONLY;
};
};
reg {
name = "Raw Input Events Counter Register ";
prefix = "IECRAW";
field {
name = "Number of raw events";
description = "Number of all input pulses detected by the timestamper";
type = SLV;
size = 32;
clock = "clk_ref_i";
access_bus = READ_ONLY;
access_dev= WRITE_ONLY;
};
};
reg {
name = "Tagged Input Events Counter Register ";
prefix = "IECTAG";
field {
name = "Number of tagged events";
description = "Number of all input pulses which passed the width checks and have produced valid timestamps.";
type = SLV;
size = 32;
clock = "clk_ref_i";
access_bus = READ_ONLY;
access_dev= WRITE_ONLY;
};
};
reg {
name = "Input Event Processing Delay Register";
prefix = "IEPD";
field {
name = "Reset stats";
......@@ -302,20 +334,20 @@ peripheral {
description = "Write 1: resets the delay/pulse count counters (IECRAW, IECTAG and IEPD_WDELAY)\
write 0: no effect";
type = MONOSTABLE;
clock = "clk_ref_i";
clock = "clk_ref_i";
};
field {
name = "Processing delay";
description = "Worst-case delay between the input event and the generation of its timestamp. Expressed as a number of 125 MHz clock cycles.";
field {
name = "Processing delay";
description = "Worst-case delay between the input event and the generation of its timestamp. Expressed as a number of 125 MHz clock cycles.";
prefix = "PDELAY";
type = SLV;
size = 8;
clock = "clk_ref_i";
access_bus = READ_ONLY;
access_dev = WRITE_ONLY;
};
};
type = SLV;
size = 8;
clock = "clk_ref_i";
access_bus = READ_ONLY;
access_dev = WRITE_ONLY;
};
};
-- reg {
-- name = "SPI Control Register";
......@@ -332,7 +364,7 @@ peripheral {
-- access_dev = READ_WRITE;
-- access_bus = READ_WRITE;
-- };
-- field {
-- name = "Select DAC";
-- prefix = "SEL_DAC";
......@@ -405,7 +437,7 @@ peripheral {
};
reg {
reg {
name = "Reference Clock Frequency Register";
prefix = "RCFR";
description = "Current frequency of the reference clock. Used for testing/calibration purposes.";
......@@ -420,55 +452,55 @@ peripheral {
}
};
reg {
name = "Timestamp Buffer Control Register";
prefix = "TSBCR";
field {
name = "Buffer enable";
prefix = "ENABLE";
type = BIT;
access_bus = READ_WRITE;
access_dev = READ_ONLY;
};
field {
name = "Buffer purge";
prefix = "PURGE";
type = MONOSTABLE;
};
field {
name = "Reset TS Sequence Number";
prefix = "RST_SEQ";
clock = "clk_ref_i";
type = MONOSTABLE;
};
field {
name = "Buffer full";
prefix = "FULL";
type = BIT;
access_bus = READ_ONLY;
access_dev = WRITE_ONLY;
};
field {
name = "Buffer empty";
prefix = "EMPTY";
type = BIT;
access_bus = READ_ONLY;
access_dev = WRITE_ONLY;
};
reg {
name = "Timestamp Buffer Control Register";
prefix = "TSBCR";
field {
name = "Buffer enable";
prefix = "ENABLE";
type = BIT;
access_bus = READ_WRITE;
access_dev = READ_ONLY;
};
field {
name = "Buffer purge";
prefix = "PURGE";
type = MONOSTABLE;
};
field {
name = "Reset TS Sequence Number";
prefix = "RST_SEQ";
clock = "clk_ref_i";
type = MONOSTABLE;
};
field {
name = "Buffer full";
prefix = "FULL";
type = BIT;
access_bus = READ_ONLY;
access_dev = WRITE_ONLY;
};
field {
name = "Buffer empty";
prefix = "EMPTY";
type = BIT;
access_bus = READ_ONLY;
access_dev = WRITE_ONLY;
};
};
irq {
name = "TS Buffer not empty";
trigger = LEVEL_0;
prefix = "ts_buf_notempty";
};
irq {
name = "TS Buffer not empty";
trigger = LEVEL_0;
prefix = "ts_buf_notempty";
};
reg {
name = "Timestamp Buffer Readout UTC Register";
......@@ -479,7 +511,7 @@ peripheral {
size = 32;
type = SLV;
access_bus = READ_ONLY;
access_dev = WRITE_ONLY;
access_dev = WRITE_ONLY;
};
};
......@@ -492,60 +524,60 @@ peripheral {
size = 28;
type = SLV;
access_bus = READ_ONLY;
access_dev = WRITE_ONLY;
access_dev = WRITE_ONLY;
};
};
reg {
name = "Timestamp Buffer Readout Fine / Seq ID Register";
prefix = "TSBR_FID";
field {
name = "Fine Value [in phase units]";
prefix = "FINE";
size = 12;
type = SLV;
access_bus = READ_ONLY;
access_dev = WRITE_ONLY;
};
field {
name = "Timestamp Sequence ID";
prefix = "SEQID";
align = 16;
size = 16;
type = SLV;
access_bus = READ_ONLY;
access_dev = WRITE_ONLY;
ack_read = "advance_rbuf_o";
};
};
fifo_reg {
direction = CORE_TO_BUS;
size = 256;
prefix = "RAWFIFO";
name = "RAW FIFO";
flags_bus = {FIFO_EMPTY};
flags_dev = {FIFO_FULL};
clock = "clk_ref_i";
field {
name = "RawFrac";
prefix = "FRAC";
size = 28;
type = SLV;
};
field {
name = "RawCoarse";
prefix = "COARSE";
size = 28;
type = SLV;
};
};
reg {
name = "Timestamp Buffer Readout Fine / Seq ID Register";
prefix = "TSBR_FID";
field {
name = "Fine Value [in phase units]";
prefix = "FINE";
size = 12;
type = SLV;
access_bus = READ_ONLY;
access_dev = WRITE_ONLY;
};
field {
name = "Timestamp Sequence ID";
prefix = "SEQID";
align = 16;
size = 16;
type = SLV;
access_bus = READ_ONLY;
access_dev = WRITE_ONLY;
ack_read = "advance_rbuf_o";
};
};
fifo_reg {
direction = CORE_TO_BUS;
size = 256;
prefix = "RAWFIFO";
name = "RAW FIFO";
flags_bus = {FIFO_EMPTY};
flags_dev = {FIFO_FULL};
clock = "clk_ref_i";
field {
name = "RawFrac";
prefix = "FRAC";
size = 28;
type = SLV;
};
field {
name = "RawCoarse";
prefix = "COARSE";
size = 28;
type = SLV;
};
};
};
channel_template = {
......@@ -587,176 +619,176 @@ channel_template = {
Note that the time written to [U/C/F]START must be bigger by at least 200 ns than the value of the UTC counter at the moment of arming the pulse generator. In practice, the safety margin should be much bigger, as it's affected by the non-determinism of the operating system.";
type = BIT;
access_bus = READ_WRITE;
access_dev = READ_WRITE;
access_dev = READ_WRITE;
load = LOAD_EXT;
clock = "clk_ref_i";
};
field {
name = "Pulse generator triggered";
prefix = "PG_TRIG";
description = "read 1: pulse generator has been triggered and produced a pulse\
read 0: pulse generator is busy or hasn't triggered yet";
type = BIT;
clock = "clk_ref_i";
access_bus = READ_ONLY;
access_dev = WRITE_ONLY;
};
field {
name = "Start Delay Update";
prefix = "UPDATE";
description = "write 1: Starts delay update procedure. The start and end times from [U/C/F][START/END] will be transferred in an atomic way to the internal delay/pulse generator registers\
clock = "clk_ref_i";
access_bus = READ_ONLY;
access_dev = WRITE_ONLY;
};
field {
name = "Start Delay Update";
prefix = "UPDATE";
description = "write 1: Starts delay update procedure. The start and end times from [U/C/F][START/END] will be transferred in an atomic way to the internal delay/pulse generator registers\
write 0: no effect.";
type = MONOSTABLE;
clock = "clk_ref_i";
};
field {
name = "Delay Update Done";
prefix = "UPD_DONE";
description = "read 1: The delays from [U/C/F][START/END] have been loaded into internal registers\
type = MONOSTABLE;
clock = "clk_ref_i";
};
field {
name = "Delay Update Done";
prefix = "UPD_DONE";
description = "read 1: The delays from [U/C/F][START/END] have been loaded into internal registers\
read 0: update operation in progress";
clock = "clk_ref_i";
type = BIT;
access_bus = READ_ONLY;
access_dev = WRITE_ONLY;
};
field {
name = "Force Calibration Pulse";
prefix = "FORCE_CP";
description = "write 1: preloads the delay line with the contents of FRR register and produces a single-cycle (8ns) pulse at the beginning of the ACAM Start period. Used for self-calibration purposes\
clock = "clk_ref_i";
type = BIT;
access_bus = READ_ONLY;
access_dev = WRITE_ONLY;
};
field {
name = "Force Calibration Delay";
prefix = "FORCE_DLY";
description = "write 1: preloads the delay line with the contents of FRR register. Used for self-calibration purposes.\
write 0: no effect";
clock = "clk_ref_i";
type = MONOSTABLE;
};
clock = "clk_ref_i";
type = MONOSTABLE;
};
field {
name = "Output Polarity";
prefix = "POL";
description = "1: output is active HIGH\
field {
name = "Output Polarity";
prefix = "POL";
description = "1: output is active HIGH\
0: output is active LOW";
clock = "clk_ref_i";
type = BIT;
access_bus = READ_WRITE;
access_dev = READ_ONLY;
};
};
reg {
name = "Fine Range Register (channel %d)";
prefix = "FRR%d";
description = "Delay line tap setting at which the line generates an 8 ns (one cycle) longer delay than when set to 0.";
field {
name = "Fine Range";
size = 10;
type = SLV;
clock = "clk_ref_i";
access_bus = READ_WRITE;
access_dev = READ_ONLY;
};
};
reg {
name = "Pulse start time / offset (UTC part, channel %d)";
prefix = "U_START%d";
description = "UTC part of the pulse start absolute time (when in PG mode) / offset from trigger (when in delay mode).";
field {
name = "UTC seconds";
size = 32;
type = SLV;
clock = "clk_ref_i";
access_bus = READ_WRITE;
access_dev = READ_ONLY;
};
};
reg {
name = "Pulse start time / offset (8 ns cycles, channel %d)";
prefix = "C_START%d";
description = "Sub-second part of the pulse start absolute time (when in PG mode) / offset from trigger (when in delay mode). Expressed as a number of 125 MHz clock cycles. Acceptable range: 0 to 124999999.";
field {
name = "Refclk cycles";
size = 28;
type = SLV;
clock = "clk_ref_i";
access_bus = READ_WRITE;
access_dev = READ_ONLY;
};
};
reg {
name = "Pulse start time / offset (sub-cycle fine part, channel %d)";
prefix = "F_START%d";
description = "Sub-clock cycle part of the pulse start absolute time (when in PG mode) / offset from trigger (when in delay mode). Scales linearly to <0..8 ns>: 0 = 0 ps, 4095 = 7999 ps.";
field {
name = "Fractional part";
size = 12;
type = SLV;
clock = "clk_ref_i";
access_bus = READ_WRITE;
access_dev = READ_ONLY;
};
};
clock = "clk_ref_i";
type = BIT;
access_bus = READ_WRITE;
access_dev = READ_ONLY;
};
};
reg {
name = "Fine Range Register (channel %d)";
prefix = "FRR%d";
description = "Delay line tap setting at which the line generates an 8 ns (one cycle) longer delay than when set to 0.";
field {
name = "Fine Range";
size = 10;
type = SLV;
clock = "clk_ref_i";
access_bus = READ_WRITE;
access_dev = READ_ONLY;
};
};
reg {
name = "Pulse start time / offset (UTC part, channel %d)";
prefix = "U_START%d";
description = "UTC part of the pulse start absolute time (when in PG mode) / offset from trigger (when in delay mode).";
field {
name = "UTC seconds";
size = 32;
type = SLV;
clock = "clk_ref_i";
access_bus = READ_WRITE;
access_dev = READ_ONLY;
};
};
reg {
name = "Pulse start time / offset (8 ns cycles, channel %d)";
prefix = "C_START%d";
description = "Sub-second part of the pulse start absolute time (when in PG mode) / offset from trigger (when in delay mode). Expressed as a number of 125 MHz clock cycles. Acceptable range: 0 to 124999999.";
field {
name = "Refclk cycles";
size = 28;
type = SLV;
clock = "clk_ref_i";
access_bus = READ_WRITE;
access_dev = READ_ONLY;
};
};
reg {
name = "Pulse start time / offset (sub-cycle fine part, channel %d)";
prefix = "F_START%d";
description = "Sub-clock cycle part of the pulse start absolute time (when in PG mode) / offset from trigger (when in delay mode). Scales linearly to <0..8 ns>: 0 = 0 ps, 4095 = 7999 ps.";
field {
name = "Fractional part";
size = 12;
type = SLV;
clock = "clk_ref_i";
access_bus = READ_WRITE;
access_dev = READ_ONLY;
};
};
reg {
name = "Pulse end time / offset (UTC part, channel %d)";
prefix = "U_END%d";
description = "UTC part of the pulse end absolute time (when in PG mode) / offset from trigger (when in delay mode).";
field {
name = "UTC seconds";
size = 32;
type = SLV;
clock = "clk_ref_i";
access_bus = READ_WRITE;
access_dev = READ_ONLY;
};
};
reg {
name = "Pulse end time / offset (8 ns cycles, channel %d)";
prefix = "C_END%d";
description = "Sub-second part of the pulse end absolute time (when in PG mode) / offset from trigger (when in delay mode). Expressed as a number of 125 MHz clock cycles. Acceptable range: 0 to 124999999.";
field {
name = "Refclk cycles";
size = 28;
type = SLV;
clock = "clk_ref_i";
access_bus = READ_WRITE;
access_dev = READ_ONLY;
};
};
reg {
name = "Pulse end time / offset (sub-cycle fine part, channel %d)";
prefix = "F_END%d";
description = "Sub-clock cycle part of the pulse end absolute time (when in PG mode) / offset from trigger (when in delay mode). Scales linearly to <0..8 ns>: 0 = 0 ps, 4095 = 7999 ps.";
field {
name = "Fractional part";
size = 12;
type = SLV;
clock = "clk_ref_i";
access_bus = READ_WRITE;
access_dev = READ_ONLY;
};
};
reg {
name = "Pulse end time / offset (UTC part, channel %d)";
prefix = "U_END%d";
description = "UTC part of the pulse end absolute time (when in PG mode) / offset from trigger (when in delay mode).";
field {
name = "UTC seconds";
size = 32;
type = SLV;
clock = "clk_ref_i";
access_bus = READ_WRITE;
access_dev = READ_ONLY;
};
};
reg {
name = "Pulse end time / offset (8 ns cycles, channel %d)";
prefix = "C_END%d";
description = "Sub-second part of the pulse end absolute time (when in PG mode) / offset from trigger (when in delay mode). Expressed as a number of 125 MHz clock cycles. Acceptable range: 0 to 124999999.";
field {
name = "Refclk cycles";
size = 28;
type = SLV;
clock = "clk_ref_i";
access_bus = READ_WRITE;
access_dev = READ_ONLY;
};
};
reg {
name = "Pulse end time / offset (sub-cycle fine part, channel %d)";
prefix = "F_END%d";
description = "Sub-clock cycle part of the pulse end absolute time (when in PG mode) / offset from trigger (when in delay mode). Scales linearly to <0..8 ns>: 0 = 0 ps, 4095 = 7999 ps.";
field {
name = "Fractional part";
size = 12;
type = SLV;
clock = "clk_ref_i";
access_bus = READ_WRITE;
access_dev = READ_ONLY;
};
};
};
......@@ -769,10 +801,10 @@ function generate_channels(n)
foreach_reg({TYPE_REG}, function(r)
r.name = string.format(r.name, i);
r.prefix = string.format(r.prefix, i);
print(r.name)
end, T);
r.name = string.format(r.name, i);
r.prefix = string.format(r.prefix, i);
print(r.name)
end, T);
table_join(periph, T);
end
......
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