]> jspc29.x-matter.uni-frankfurt.de Git - adcm.git/commitdiff
*** empty log message ***
authorhadaq <hadaq>
Wed, 28 Apr 2010 12:17:49 +0000 (12:17 +0000)
committerhadaq <hadaq>
Wed, 28 Apr 2010 12:17:49 +0000 (12:17 +0000)
56 files changed:
lookup_adc.txt
src/adc_channel_select.vhd
src/adc_crossover.vhd
src/adc_data_handler_new.vhd
src/adc_twochannels.vhd
src/adcmv3.vhd
src/adcmv3_components.vhd
src/apv_digital.vhd
src/apv_lock_sm.vhd
src/apv_locker.vhd
src/apv_pc_nc_alu.vhd
src/apv_raw_buffer.vhd
src/apv_sync_handler.vhd
src/apv_trg_handler.vhd
src/apv_trgctrl.vhd
src/buf_toc.vhd
src/dhdr_buf.vhd
src/eds_buf.vhd
src/fifo_16x11.lpc
src/fifo_16x11.vhd
src/fifo_16x11_tmpl.vhd
src/frmctr_check.vhd
src/i2c_gstart.vhd
src/i2c_master.vhd
src/i2c_sendb.vhd
src/i2c_slim.vhd
src/ipu_fifo_stage.vhd
src/logic_analyzer.vhd
src/max_data.vhd
src/msg_file.log
src/onewire_master.vhd
src/ped_corr_ctrl.vhd
src/pulse_stretch.vhd
src/pulse_sync.vhd
src/raw_buf_stage_new.vhd
src/real_trg_handler.vhd
src/reboot_handler.vhd
src/ref_row_sel.vhd
src/reset_handler.vhd
src/rich_trb.vhd
src/slave_bus.vhd
src/slv_adc_la.vhd
src/slv_adc_snoop.vhd
src/slv_half_register.vhd
src/slv_onewire_memory.vhd
src/slv_ped_thr_mem.vhd
src/slv_register.vhd
src/slv_register_bank.vhd
src/spi_adc_master.vhd
src/spi_real_slim.vhd
src/state_sync.vhd
src/tb_apv_trgctrl.vhd
src/tb_ipu_fifo_stage.vhd
src/tb_ped_corr_ctrl.vhd
src/tb_real_trg_handler.vhd
src/version.vhd

index b07211d3c5f91284878669bedbaaa681683d7c56..53043ac169f74b97c40f43143994800a959563e3 100755 (executable)
-Backplane 0\r
-===========\r
-\r
-ADC0/0   0  0/6     3        0xb000  0x20030001\r
-ADC0/1   1  0/7     5        0xb001  0x20050001\r
-ADC0/2   2  0/0    10        0xb002  0x200a0001\r
-ADC0/3   3  0/2    12        0xb003  0x200c0001\r
-ADC0/4   4  0/1     9        0xb004  0x20090001\r
-ADC0/5   5  0/3     7        0xb005  0x20070001\r
-ADC0/6   6  0/5     0        0xb006  0x20000001\r
-ADC0/7   7  -/-    --        0xb007  0x200f0001\r
-                             \r
-ADC1/0   8  1/6     4        0xb008  0x20040001\r
-ADC1/1   9  1/7     6        0xb009  0x20060001\r
-ADC1/2  10  1/1    11        0xb00a  0x200b0001\r
-ADC1/3  11  1/0     8        0xb00b  0x20080001\r
-ADC1/4  12  1/3    14        0xb00c  0x200e0001\r
-ADC1/5  13  1/2    13        0xb00d  0x200d0001\r
-ADC1/6  14  1/5     2        0xb00e  0x20020001\r
-ADC1/7  15  1/4     1        0xb00f  0x20010001\r
-\r
-realADC   0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15\r
-mapAPV    3   5  10  12   9   7   0   -   4   6  11   8  14  13   2   1\r
-\r
-Backplane 1\r
-==========\r
-\r
-ADC0/0   0  0/6    12        0xb000  0x200c0001\r
-ADC0/1   1  0/7    11        0xb001  0x200b0001\r
-ADC0/2   2  0/0    10        0xb002  0x200a0001\r
-ADC0/3   3  0/2     9        0xb003  0x20090001\r
-ADC0/4   4  0/1     8        0xb004  0x20080001\r
-ADC0/5   5  0/3     7        0xb005  0x20070001\r
-ADC0/6   6  0/5    13        0xb006  0x200d0001\r
-ADC0/7   7  0/4    14        0xb007  0x200e0001\r
-                             \r
-ADC1/0   8  1/6     3        0xb008  0x20030001\r
-ADC1/1   9  1/7     2        0xb009  0x20020001\r
-ADC1/2  10  1/1     1        0xb00a  0x20010001\r
-ADC1/3  11  1/0     0        0xb00b  0x20000001\r
-ADC1/4  12  1/3     6        0xb00c  0x20060001\r
-ADC1/5  13  1/2     5        0xb00d  0x20050001\r
-ADC1/6  14  1/5     4        0xb00e  0x20040001\r
-ADC1/7  15  -/-    --        0xb00f  0x200f0001\r
-\r
-realADC   0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15\r
-mapAPV   12  11  10   9   8   7  13  14   3   2   1   0   6   5   4   -\r
-\r
-Backplane 2\r
-===========\r
-\r
-ADC0/0   0  -/-    --        0xb000  0x200f0001  \r
-ADC0/1   1  0/7     4        0xb001  0x20040001\r
-ADC0/2   2  0/0     5        0xb002  0x20050001\r
-ADC0/3   3  0/2     6        0xb003  0x20060001\r
-ADC0/4   4  0/1     0        0xb004  0x20000001\r
-ADC0/5   5  0/3     1        0xb005  0x20010001\r
-ADC0/6   6  0/5     2        0xb006  0x20020001\r
-ADC0/7   7  0/4     3        0xb007  0x20030001\r
-                             \r
-ADC1/0   8  1/6    14        0xb008  0x200e0001\r
-ADC1/1   9  1/7    13        0xb009  0x200d0001\r
-ADC1/2  10  1/1     7        0xb00a  0x20070001\r
-ADC1/3  11  1/0     8        0xb00b  0x20080001\r
-ADC1/4  12  1/3     9        0xb00c  0x20090001\r
-ADC1/5  13  1/2    10        0xb00d  0x200a0001\r
-ADC1/6  14  1/5    11        0xb00e  0x200b0001\r
-ADC1/7  15  1/4    12        0xb00f  0x200c0001\r
-\r
-realADC   0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15\r
-mapAPV    -   4   5   6   0   1   2   3  14  13   7   8   9  10  11  12\r
-\r
-Backplane 3\r
-===========\r
-\r
-ADC0/0   0  0/6    10        0xb000  0x200a0001\r
-ADC0/1   1  0/7     9        0xb001  0x20090001\r
-ADC0/2   2  0/0     8        0xb002  0x20080001\r
-ADC0/3   3  0/2     7        0xb003  0x20070001\r
-ADC0/4   4  0/1     6        0xb004  0x20060001\r
-ADC0/5   5  0/3     5        0xb005  0x20050001\r
-ADC0/6   6  0/5    12        0xb006  0x200c0001\r
-ADC0/7   7  0/4    11        0xb007  0x200b0001\r
-                             \r
-ADC1/0   8  1/6     4        0xb008  0x20040001\r
-ADC1/1   9  1/7     3        0xb009  0x20030001\r
-ADC1/2  10  1/1     0        0xb00a  0x20000001\r
-ADC1/3  11  1/0     2        0xb00b  0x20020001\r
-ADC1/4  12  1/3     1        0xb00c  0x20010001\r
-ADC1/5  13  -/-    --        0xb00d  0x200f0001\r
-ADC1/6  14  1/5    13        0xb00e  0x200d0001\r
-ADC1/7  15  1/4    14        0xb00f  0x200e0001\r
-\r
-realADC   0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15\r
-mapAPV   10   9   8   7   6   5  12  11   4   3   0   2   1   -  13  14\r
-\r
-Backplane 4\r
-===========\r
-\r
-ADC0/0   0  0/6    14        0xb000  0x200e0001\r
-ADC0/1   1  0/7    13        0xb001  0x200d0001\r
-ADC0/2   2  -/-    --        0xb002  0x200f0001\r
-ADC0/3   3  0/2     1        0xb003  0x20010001\r
-ADC0/4   4  0/1     2        0xb004  0x20020001\r
-ADC0/5   5  0/3     0        0xb005  0x20000001\r
-ADC0/6   6  0/5     3        0xb006  0x20030001\r
-ADC0/7   7  0/4     4        0xb007  0x20040001\r
-                             \r
-ADC1/0   8  1/6    11        0xb008  0x200b0001\r
-ADC1/1   9  1/7    12        0xb009  0x200c0001\r
-ADC1/2  10  1/1     5        0xb00a  0x20050001\r
-ADC1/3  11  1/0     6        0xb00b  0x20060001\r
-ADC1/4  12  1/3     7        0xb00c  0x20070001\r
-ADC1/5  13  1/2     8        0xb00d  0x20080001\r
-ADC1/6  14  1/5     9        0xb00e  0x20090001\r
-ADC1/7  15  1/4    10        0xb00f  0x200a0001\r
-\r
-realADC   0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15\r
-mapAPV   14  13   -   1   2   0   3   4  11  12   5   6   7   8   9  10\r
+Backplane 0
+===========
+
+ADC0/0   0  0/6     3        0xb000  0x20030001
+ADC0/1   1  0/7     5        0xb001  0x20050001
+ADC0/2   2  0/0    10        0xb002  0x200a0001
+ADC0/3   3  0/2    12        0xb003  0x200c0001
+ADC0/4   4  0/1     9        0xb004  0x20090001
+ADC0/5   5  0/3     7        0xb005  0x20070001
+ADC0/6   6  0/5     0        0xb006  0x20000001
+ADC0/7   7  -/-    --        0xb007  0x200f0001
+                             
+ADC1/0   8  1/6     4        0xb008  0x20040001
+ADC1/1   9  1/7     6        0xb009  0x20060001
+ADC1/2  10  1/1    11        0xb00a  0x200b0001
+ADC1/3  11  1/0     8        0xb00b  0x20080001
+ADC1/4  12  1/3    14        0xb00c  0x200e0001
+ADC1/5  13  1/2    13        0xb00d  0x200d0001
+ADC1/6  14  1/5     2        0xb00e  0x20020001
+ADC1/7  15  1/4     1        0xb00f  0x20010001
+
+realADC   0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15
+mapAPV    3   5  10  12   9   7   0   -   4   6  11   8  14  13   2   1
+
+Backplane 1
+==========
+
+ADC0/0   0  0/6    12        0xb000  0x200c0001
+ADC0/1   1  0/7    11        0xb001  0x200b0001
+ADC0/2   2  0/0    10        0xb002  0x200a0001
+ADC0/3   3  0/2     9        0xb003  0x20090001
+ADC0/4   4  0/1     8        0xb004  0x20080001
+ADC0/5   5  0/3     7        0xb005  0x20070001
+ADC0/6   6  0/5    13        0xb006  0x200d0001
+ADC0/7   7  0/4    14        0xb007  0x200e0001
+                             
+ADC1/0   8  1/6     3        0xb008  0x20030001
+ADC1/1   9  1/7     2        0xb009  0x20020001
+ADC1/2  10  1/1     1        0xb00a  0x20010001
+ADC1/3  11  1/0     0        0xb00b  0x20000001
+ADC1/4  12  1/3     6        0xb00c  0x20060001
+ADC1/5  13  1/2     5        0xb00d  0x20050001
+ADC1/6  14  1/5     4        0xb00e  0x20040001
+ADC1/7  15  -/-    --        0xb00f  0x200f0001
+
+realADC   0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15
+mapAPV   12  11  10   9   8   7  13  14   3   2   1   0   6   5   4   -
+
+Backplane 2
+===========
+
+ADC0/0   0  -/-    --        0xb000  0x200f0001  
+ADC0/1   1  0/7     4        0xb001  0x20040001
+ADC0/2   2  0/0     5        0xb002  0x20050001
+ADC0/3   3  0/2     6        0xb003  0x20060001
+ADC0/4   4  0/1     0        0xb004  0x20000001
+ADC0/5   5  0/3     1        0xb005  0x20010001
+ADC0/6   6  0/5     2        0xb006  0x20020001
+ADC0/7   7  0/4     3        0xb007  0x20030001
+                             
+ADC1/0   8  1/6    14        0xb008  0x200e0001
+ADC1/1   9  1/7    13        0xb009  0x200d0001
+ADC1/2  10  1/1     7        0xb00a  0x20070001
+ADC1/3  11  1/0     8        0xb00b  0x20080001
+ADC1/4  12  1/3     9        0xb00c  0x20090001
+ADC1/5  13  1/2    10        0xb00d  0x200a0001
+ADC1/6  14  1/5    11        0xb00e  0x200b0001
+ADC1/7  15  1/4    12        0xb00f  0x200c0001
+
+realADC   0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15
+mapAPV    -   4   5   6   0   1   2   3  14  13   7   8   9  10  11  12
+
+Backplane 3
+===========
+
+ADC0/0   0  0/6    10        0xb000  0x200a0001
+ADC0/1   1  0/7     9        0xb001  0x20090001
+ADC0/2   2  0/0     8        0xb002  0x20080001
+ADC0/3   3  0/2     7        0xb003  0x20070001
+ADC0/4   4  0/1     6        0xb004  0x20060001
+ADC0/5   5  0/3     5        0xb005  0x20050001
+ADC0/6   6  0/5    12        0xb006  0x200c0001
+ADC0/7   7  0/4    11        0xb007  0x200b0001
+                             
+ADC1/0   8  1/6     4        0xb008  0x20040001
+ADC1/1   9  1/7     3        0xb009  0x20030001
+ADC1/2  10  1/1     0        0xb00a  0x20000001
+ADC1/3  11  1/0     2        0xb00b  0x20020001
+ADC1/4  12  1/3     1        0xb00c  0x20010001
+ADC1/5  13  -/-    --        0xb00d  0x200f0001
+ADC1/6  14  1/5    13        0xb00e  0x200d0001
+ADC1/7  15  1/4    14        0xb00f  0x200e0001
+
+realADC   0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15
+mapAPV   10   9   8   7   6   5  12  11   4   3   0   2   1   -  13  14
+
+Backplane 4
+===========
+
+ADC0/0   0  0/6    14        0xb000  0x200e0001
+ADC0/1   1  0/7    13        0xb001  0x200d0001
+ADC0/2   2  -/-    --        0xb002  0x200f0001
+ADC0/3   3  0/2     1        0xb003  0x20010001
+ADC0/4   4  0/1     2        0xb004  0x20020001
+ADC0/5   5  0/3     0        0xb005  0x20000001
+ADC0/6   6  0/5     3        0xb006  0x20030001
+ADC0/7   7  0/4     4        0xb007  0x20040001
+                             
+ADC1/0   8  1/6    11        0xb008  0x200b0001
+ADC1/1   9  1/7    12        0xb009  0x200c0001
+ADC1/2  10  1/1     5        0xb00a  0x20050001
+ADC1/3  11  1/0     6        0xb00b  0x20060001
+ADC1/4  12  1/3     7        0xb00c  0x20070001
+ADC1/5  13  1/2     8        0xb00d  0x20080001
+ADC1/6  14  1/5     9        0xb00e  0x20090001
+ADC1/7  15  1/4    10        0xb00f  0x200a0001
+
+realADC   0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15
+mapAPV   14  13   -   1   2   0   3   4  11  12   5   6   7   8   9  10
index 20e653b866004b1a363d2fa09ecff4db779fa26c..743a41aa1dca6a90991f442c8909810d117cf37b 100644 (file)
@@ -1,71 +1,76 @@
-library ieee; \r
-use ieee.std_logic_1164.all; \r
-use ieee.std_logic_arith.all; \r
+library ieee;\r
+use ieee.std_logic_1164.all;\r
+use ieee.std_logic_arith.all;\r
 use ieee.std_logic_unsigned.all;\r
 \r
 library work;\r
 use work.adcmv3_components.all;\r
 \r
 entity adc_channel_select is\r
-       port( RESET_IN                  : in    std_logic;\r
-                 ADC_CLK_IN            : in    std_logic;\r
-                 ADC_SEL_IN            : in    std_logic_vector(2 downto 0);\r
-                 ADC_7_IN                      : in    std_logic_vector(11 downto 0);\r
-                 ADC_6_IN                      : in    std_logic_vector(11 downto 0);\r
-                 ADC_5_IN                      : in    std_logic_vector(11 downto 0);\r
-                 ADC_4_IN                      : in    std_logic_vector(11 downto 0);\r
-                 ADC_3_IN                      : in    std_logic_vector(11 downto 0);\r
-                 ADC_2_IN                      : in    std_logic_vector(11 downto 0);\r
-                 ADC_1_IN                      : in    std_logic_vector(11 downto 0);\r
-                 ADC_0_IN                      : in    std_logic_vector(11 downto 0);\r
-                 ADC_CH_OUT            : out   std_logic_vector(11 downto 0);\r
-                 DEBUG_OUT                     : out   std_logic_vector(15 downto 0)\r
-               );\r
+port(\r
+       RESET_IN        : in    std_logic;\r
+       ADC_CLK_IN      : in    std_logic;\r
+       ADC_SEL_IN      : in    std_logic_vector(2 downto 0);\r
+       ADC_7_IN        : in    std_logic_vector(11 downto 0);\r
+       ADC_6_IN        : in    std_logic_vector(11 downto 0);\r
+       ADC_5_IN        : in    std_logic_vector(11 downto 0);\r
+       ADC_4_IN        : in    std_logic_vector(11 downto 0);\r
+       ADC_3_IN        : in    std_logic_vector(11 downto 0);\r
+       ADC_2_IN        : in    std_logic_vector(11 downto 0);\r
+       ADC_1_IN        : in    std_logic_vector(11 downto 0);\r
+       ADC_0_IN        : in    std_logic_vector(11 downto 0);\r
+       ADC_CH_OUT      : out   std_logic_vector(11 downto 0);\r
+       DEBUG_OUT       : out   std_logic_vector(15 downto 0)\r
+);\r
 end;\r
 \r
 architecture behavioral of adc_channel_select is\r
 \r
-       -- Placer Directives\r
+-- Placer Directives\r
 \r
-       -- normal signals              \r
-       signal adc_ch                   : std_logic_vector(11 downto 0);\r
-       signal adc_sel                  : std_logic_vector(2 downto 0);\r
-       signal reset                    : std_logic;\r
+-- normal signals\r
+signal adc_ch           : std_logic_vector(11 downto 0);\r
+signal adc_sel          : std_logic_vector(2 downto 0);\r
+signal reset            : std_logic;\r
 \r
-       signal debug                    : std_logic_vector(15 downto 0);\r
+signal debug            : std_logic_vector(15 downto 0);\r
 \r
 \r
-begin                                          \r
+begin\r
 \r
 -- Reset synchronizer\r
 THE_RESET_SYNC: state_sync\r
-port map( STATE_A_IN           => reset_in,\r
-                 CLK_B_IN                      => adc_clk_in,\r
-                 RESET_B_IN            => '0',\r
-                 STATE_B_OUT           => reset\r
-               );\r
+port map(\r
+       STATE_A_IN      => reset_in,\r
+       CLK_B_IN        => adc_clk_in,\r
+       RESET_B_IN      => '0',\r
+       STATE_B_OUT     => reset\r
+);\r
 \r
 -- select signals are from 100MHz clock domain!\r
 THE_SEL2_SYNC: state_sync\r
-port map( STATE_A_IN           => adc_sel_in(2),\r
-                 CLK_B_IN                      => adc_clk_in,\r
-                 RESET_B_IN            => reset,\r
-                 STATE_B_OUT           => adc_sel(2)\r
-               );\r
+port map(\r
+       STATE_A_IN      => adc_sel_in(2),\r
+       CLK_B_IN        => adc_clk_in,\r
+       RESET_B_IN      => reset,\r
+       STATE_B_OUT     => adc_sel(2)\r
+);\r
 THE_SEL1_SYNC: state_sync\r
-port map( STATE_A_IN           => adc_sel_in(1),\r
-                 CLK_B_IN                      => adc_clk_in,\r
-                 RESET_B_IN            => reset,\r
-                 STATE_B_OUT           => adc_sel(1)\r
-               );\r
+port map(\r
+       STATE_A_IN      => adc_sel_in(1),\r
+       CLK_B_IN        => adc_clk_in,\r
+       RESET_B_IN      => reset,\r
+       STATE_B_OUT     => adc_sel(1)\r
+);\r
 THE_SEL0_SYNC: state_sync\r
-port map( STATE_A_IN           => adc_sel_in(0),\r
-                 CLK_B_IN                      => adc_clk_in,\r
-                 RESET_B_IN            => reset,\r
-                 STATE_B_OUT           => adc_sel(0)\r
-               );\r
+port map(\r
+       STATE_A_IN      => adc_sel_in(0),\r
+       CLK_B_IN        => adc_clk_in,\r
+       RESET_B_IN      => reset,\r
+       STATE_B_OUT     => adc_sel(0)\r
+);\r
+\r
 \r
-               \r
 -- registered multiplexer\r
 THE_SEL_PROC: process( adc_clk_in )\r
 begin\r
@@ -74,18 +79,18 @@ begin
                        adc_ch <= (others => '0');\r
                else\r
                        case adc_sel is\r
-                               when b"000"     =>      adc_ch <= adc_0_in;\r
-                               when b"001"     =>      adc_ch <= adc_1_in;\r
-                               when b"010"     =>      adc_ch <= adc_2_in;\r
-                               when b"011"     =>      adc_ch <= adc_3_in;\r
-                               when b"100"     =>      adc_ch <= adc_4_in;\r
-                               when b"101"     =>      adc_ch <= adc_5_in;\r
-                               when b"110"     =>      adc_ch <= adc_6_in;\r
-                               when b"111"     =>      adc_ch <= adc_7_in;\r
-                               when others     =>      adc_ch <= x"000"; -- never\r
+                               when b"000" =>  adc_ch <= adc_0_in;\r
+                               when b"001" =>  adc_ch <= adc_1_in;\r
+                               when b"010" =>  adc_ch <= adc_2_in;\r
+                               when b"011" =>  adc_ch <= adc_3_in;\r
+                               when b"100" =>  adc_ch <= adc_4_in;\r
+                               when b"101" =>  adc_ch <= adc_5_in;\r
+                               when b"110" =>  adc_ch <= adc_6_in;\r
+                               when b"111" =>  adc_ch <= adc_7_in;\r
+                               when others =>  adc_ch <= x"000"; -- never\r
                        end case;\r
                end if;\r
-       end if; \r
+       end if;\r
 end process THE_SEL_PROC;\r
 \r
 -- debug signals\r
@@ -93,6 +98,6 @@ debug(15 downto 0)  <= (others => '0');
 \r
 -- output signals\r
 adc_ch_out    <= adc_ch;\r
-debug_out     <= debug;  \r
+debug_out     <= debug;\r
 \r
-end behavioral;                                \r
+end behavioral;\r
index 870c9905f908f816591aff8cf67c570108d51208..2d970ea5a857b05ec46f6b858dd27bc47fb9b19b 100644 (file)
@@ -7,51 +7,52 @@ library work;
 use work.adcmv3_components.all;\r
 \r
 entity adc_crossover is\r
-       port( CLK_APV_IN                        : in    std_logic; -- APV 40MHz local clock\r
-                 RESET_IN                              : in    std_logic; -- general reset (100MHz)\r
-                 -- ADC clock domain signals\r
-                 ADC_CLK_IN                    : in    std_logic;\r
-                 ADC_CE_IN                     : in    std_logic; -- in case we use 240MHz + write pulse...\r
-                 ADC_DATA_VALID_IN             : in    std_logic;\r
-                 ADC_DATA_7_IN                 : in    std_logic_vector(11 downto 0);\r
-                 ADC_DATA_6_IN                 : in    std_logic_vector(11 downto 0);\r
-                 ADC_DATA_5_IN                 : in    std_logic_vector(11 downto 0);\r
-                 ADC_DATA_4_IN                 : in    std_logic_vector(11 downto 0);\r
-                 ADC_DATA_3_IN                 : in    std_logic_vector(11 downto 0);\r
-                 ADC_DATA_2_IN                 : in    std_logic_vector(11 downto 0);\r
-                 ADC_DATA_1_IN                 : in    std_logic_vector(11 downto 0);\r
-                 ADC_DATA_0_IN                 : in    std_logic_vector(11 downto 0);\r
-                 LEVEL_WR_OUT                  : out   std_logic_vector(4 downto 0);\r
-                 -- APV clock domain signals\r
-                 APV_DATA_7_OUT                : out   std_logic_vector(11 downto 0);\r
-                 APV_DATA_6_OUT                : out   std_logic_vector(11 downto 0);\r
-                 APV_DATA_5_OUT                : out   std_logic_vector(11 downto 0);\r
-                 APV_DATA_4_OUT                : out   std_logic_vector(11 downto 0);\r
-                 APV_DATA_3_OUT                : out   std_logic_vector(11 downto 0);\r
-                 APV_DATA_2_OUT                : out   std_logic_vector(11 downto 0);\r
-                 APV_DATA_1_OUT                : out   std_logic_vector(11 downto 0);\r
-                 APV_DATA_0_OUT                : out   std_logic_vector(11 downto 0);\r
-                 APV_DATA_VALID_OUT    : out   std_logic;\r
-                 LEVEL_RD_OUT                  : out   std_logic_vector(4 downto 0);\r
-                 -- Debug signals\r
-                 DEBUG_OUT                     : out   std_logic_vector(31 downto 0)\r
-               );\r
+port(\r
+       CLK_APV_IN          : in    std_logic; -- APV 40MHz local clock\r
+       RESET_IN            : in    std_logic; -- general reset (100MHz)\r
+       -- ADC clock domain signals\r
+       ADC_CLK_IN          : in    std_logic;\r
+       ADC_CE_IN           : in    std_logic; -- in case we use 240MHz + write pulse...\r
+       ADC_DATA_VALID_IN   : in    std_logic;\r
+       ADC_DATA_7_IN       : in    std_logic_vector(11 downto 0);\r
+       ADC_DATA_6_IN       : in    std_logic_vector(11 downto 0);\r
+       ADC_DATA_5_IN       : in    std_logic_vector(11 downto 0);\r
+       ADC_DATA_4_IN       : in    std_logic_vector(11 downto 0);\r
+       ADC_DATA_3_IN       : in    std_logic_vector(11 downto 0);\r
+       ADC_DATA_2_IN       : in    std_logic_vector(11 downto 0);\r
+       ADC_DATA_1_IN       : in    std_logic_vector(11 downto 0);\r
+       ADC_DATA_0_IN       : in    std_logic_vector(11 downto 0);\r
+       LEVEL_WR_OUT        : out   std_logic_vector(4 downto 0);\r
+       -- APV clock domain signals\r
+       APV_DATA_7_OUT      : out   std_logic_vector(11 downto 0);\r
+       APV_DATA_6_OUT      : out   std_logic_vector(11 downto 0);\r
+       APV_DATA_5_OUT      : out   std_logic_vector(11 downto 0);\r
+       APV_DATA_4_OUT      : out   std_logic_vector(11 downto 0);\r
+       APV_DATA_3_OUT      : out   std_logic_vector(11 downto 0);\r
+       APV_DATA_2_OUT      : out   std_logic_vector(11 downto 0);\r
+       APV_DATA_1_OUT      : out   std_logic_vector(11 downto 0);\r
+       APV_DATA_0_OUT      : out   std_logic_vector(11 downto 0);\r
+       APV_DATA_VALID_OUT  : out   std_logic;\r
+       LEVEL_RD_OUT        : out   std_logic_vector(4 downto 0);\r
+       -- Debug signals\r
+       DEBUG_OUT           : out   std_logic_vector(31 downto 0)\r
+);\r
 end;\r
 \r
 architecture behavioral of adc_crossover is\r
 \r
-       signal debug                            : std_logic_vector(31 downto 0);\r
-\r
-       signal fifo_rd_level            : std_logic_vector(4 downto 0);\r
-       signal fifo_wr_level            : std_logic_vector(4 downto 0);\r
-       signal next_fifo_rd_ena         : std_logic;\r
-       signal fifo_rd_ena                      : std_logic;\r
-       signal next_fifo_wr_ena         : std_logic;\r
-       signal fifo_wr_ena                      : std_logic;\r
-       signal next_reset                       : std_logic;\r
-       signal reset                            : std_logic;\r
-       signal apv_data_valid           : std_logic_vector(2 downto 0);\r
-       \r
+signal debug                : std_logic_vector(31 downto 0);\r
+\r
+signal fifo_rd_level        : std_logic_vector(4 downto 0);\r
+signal fifo_wr_level        : std_logic_vector(4 downto 0);\r
+signal next_fifo_rd_ena     : std_logic;\r
+signal fifo_rd_ena          : std_logic;\r
+signal next_fifo_wr_ena     : std_logic;\r
+signal fifo_wr_ena          : std_logic;\r
+signal next_reset           : std_logic;\r
+signal reset                : std_logic;\r
+signal apv_data_valid       : std_logic_vector(2 downto 0);\r
+\r
 begin\r
 \r
 ---------------------------------------------------------------------------\r
@@ -66,27 +67,28 @@ debug(31 downto 0) <= (others => '0');
 next_reset <= reset_in or not adc_data_valid_in;\r
 \r
 THE_RESET_STATE_SYNC: state_sync\r
-port map( STATE_A_IN           => next_reset,\r
-                 CLK_B_IN                      => clk_apv_in,\r
-                 RESET_B_IN            => '0',\r
-                 STATE_B_OUT           => reset\r
-               );\r
+port map(\r
+       STATE_A_IN      => next_reset,\r
+       CLK_B_IN        => clk_apv_in,\r
+       RESET_B_IN      => '0',\r
+       STATE_B_OUT     => reset\r
+);\r
 \r
 \r
 ---------------------------------------------------------------------------\r
--- Crossover fifo for ADC \r
+-- Crossover fifo for ADC\r
 ---------------------------------------------------------------------------\r
 next_fifo_wr_ena <= adc_ce_in and adc_data_valid_in;\r
 next_fifo_rd_ena <= '1' when ( fifo_rd_level > b"0_0101" ) else '0';\r
 \r
-SYNC_WRCLK_PROC: process( adc_clk_in ) \r
+SYNC_WRCLK_PROC: process( adc_clk_in )\r
 begin\r
        if( rising_edge(adc_clk_in) ) then\r
                fifo_wr_ena <= next_fifo_wr_ena;\r
        end if;\r
 end process SYNC_WRCLK_PROC;\r
 \r
-SYNC_RDCLK_PROC: process( clk_apv_in ) \r
+SYNC_RDCLK_PROC: process( clk_apv_in )\r
 begin\r
        if( rising_edge(clk_apv_in) ) then\r
                fifo_rd_ena    <= next_fifo_rd_ena;\r
@@ -95,33 +97,34 @@ begin
 end process SYNC_RDCLK_PROC;\r
 \r
 THE_CROSSOVER: crossover\r
-port map( DATA(95 downto 84)   => adc_data_7_in,\r
-                 DATA(83 downto 72)    => adc_data_6_in,\r
-                 DATA(71 downto 60)    => adc_data_5_in,\r
-                 DATA(59 downto 48)    => adc_data_4_in,\r
-                 DATA(47 downto 36)    => adc_data_3_in,\r
-                 DATA(35 downto 24)    => adc_data_2_in,\r
-                 DATA(23 downto 12)    => adc_data_1_in,\r
-                 DATA(11 downto 0)             => adc_data_0_in,\r
-                 WRCLOCK                               => adc_clk_in,\r
-                 RDCLOCK                               => clk_apv_in,\r
-                 WREN                                  => fifo_wr_ena,\r
-                 RDEN                                  => fifo_rd_ena,\r
-                 RESET                                 => reset, -- this is an async clear input!\r
-                 RPRESET                               => '0', -- not needed, as OR'ed with RESET\r
-                 Q(95 downto 84)               => apv_data_7_out,\r
-                 Q(83 downto 72)               => apv_data_6_out,\r
-                 Q(71 downto 60)               => apv_data_5_out,\r
-                 Q(59 downto 48)               => apv_data_4_out,\r
-                 Q(47 downto 36)               => apv_data_3_out,\r
-                 Q(35 downto 24)               => apv_data_2_out,\r
-                 Q(23 downto 12)               => apv_data_1_out,\r
-                 Q(11 downto 0)                => apv_data_0_out,\r
-                 WCNT                                  => fifo_wr_level,\r
-                 RCNT                                  => fifo_rd_level,\r
-                 EMPTY                                 => open,\r
-                 FULL                                  => open\r
-               );\r
+port map(\r
+       DATA(95 downto 84)  => adc_data_7_in,\r
+       DATA(83 downto 72)  => adc_data_6_in,\r
+       DATA(71 downto 60)  => adc_data_5_in,\r
+       DATA(59 downto 48)  => adc_data_4_in,\r
+       DATA(47 downto 36)  => adc_data_3_in,\r
+       DATA(35 downto 24)  => adc_data_2_in,\r
+       DATA(23 downto 12)  => adc_data_1_in,\r
+       DATA(11 downto 0)   => adc_data_0_in,\r
+       WRCLOCK             => adc_clk_in,\r
+       RDCLOCK             => clk_apv_in,\r
+       WREN                => fifo_wr_ena,\r
+       RDEN                => fifo_rd_ena,\r
+       RESET               => reset, -- this is an async clear input!\r
+       RPRESET             => '0', -- not needed, as OR'ed with RESET\r
+       Q(95 downto 84)     => apv_data_7_out,\r
+       Q(83 downto 72)     => apv_data_6_out,\r
+       Q(71 downto 60)     => apv_data_5_out,\r
+       Q(59 downto 48)     => apv_data_4_out,\r
+       Q(47 downto 36)     => apv_data_3_out,\r
+       Q(35 downto 24)     => apv_data_2_out,\r
+       Q(23 downto 12)     => apv_data_1_out,\r
+       Q(11 downto 0)      => apv_data_0_out,\r
+       WCNT                => fifo_wr_level,\r
+       RCNT                => fifo_rd_level,\r
+       EMPTY               => open,\r
+       FULL                => open\r
+);\r
 \r
 \r
 ---------------------------------------------------------------------------\r
index d4b7a179f288402f471c828ed6c3572f18f1dbb0..772a5317f7a251eef2a9a4dca8865646b48608dc 100644 (file)
-library ieee; \r
-use ieee.std_logic_1164.all; \r
-use ieee.std_logic_arith.all; \r
+library ieee;\r
+use ieee.std_logic_1164.all;\r
+use ieee.std_logic_arith.all;\r
 use ieee.std_logic_unsigned.all;\r
 \r
 library work;\r
 use work.adcmv3_components.all;\r
 \r
 entity adc_data_handler_new is\r
-       port( RESET_IN                  : in    std_logic;\r
-                 ADC_LCLK_IN           : in    std_logic; -- LCLK from ADC\r
-                 ADC_ADCLK_IN          : in    std_logic; -- ADCLK from ADC\r
-                 ADC_CHNL_IN           : in    std_logic_vector(7 downto 0);\r
-                 PLL_CTRL_IN           : in    std_logic_vector(3 downto 0);\r
-                 ADC_DATA7_OUT         : out   std_logic_vector(11 downto 0);\r
-                 ADC_DATA6_OUT         : out   std_logic_vector(11 downto 0);\r
-                 ADC_DATA5_OUT         : out   std_logic_vector(11 downto 0);\r
-                 ADC_DATA4_OUT         : out   std_logic_vector(11 downto 0);\r
-                 ADC_DATA3_OUT         : out   std_logic_vector(11 downto 0);\r
-                 ADC_DATA2_OUT         : out   std_logic_vector(11 downto 0);\r
-                 ADC_DATA1_OUT         : out   std_logic_vector(11 downto 0);\r
-                 ADC_DATA0_OUT         : out   std_logic_vector(11 downto 0);\r
-                 ADC_CE_OUT            : out   std_logic;\r
-                 ADC_VALID_OUT         : out   std_logic;\r
-                 DEBUG_OUT                     : out   std_logic_vector(15 downto 0)\r
-               );\r
+port(\r
+       RESET_IN        : in    std_logic;\r
+       ADC_LCLK_IN     : in    std_logic; -- LCLK from ADC\r
+       ADC_ADCLK_IN    : in    std_logic; -- ADCLK from ADC\r
+       ADC_CHNL_IN     : in    std_logic_vector(7 downto 0);\r
+       PLL_CTRL_IN     : in    std_logic_vector(3 downto 0);\r
+       ADC_DATA7_OUT   : out   std_logic_vector(11 downto 0);\r
+       ADC_DATA6_OUT   : out   std_logic_vector(11 downto 0);\r
+       ADC_DATA5_OUT   : out   std_logic_vector(11 downto 0);\r
+       ADC_DATA4_OUT   : out   std_logic_vector(11 downto 0);\r
+       ADC_DATA3_OUT   : out   std_logic_vector(11 downto 0);\r
+       ADC_DATA2_OUT   : out   std_logic_vector(11 downto 0);\r
+       ADC_DATA1_OUT   : out   std_logic_vector(11 downto 0);\r
+       ADC_DATA0_OUT   : out   std_logic_vector(11 downto 0);\r
+       ADC_CE_OUT      : out   std_logic;\r
+       ADC_VALID_OUT   : out   std_logic;\r
+       DEBUG_OUT       : out   std_logic_vector(15 downto 0)\r
+);\r
 end;\r
 \r
 architecture behavioral of adc_data_handler_new is\r
 \r
-       -- Placer Directives\r
-       attribute HGROUP : string;\r
-       -- for whole architecture\r
-       attribute HGROUP of behavioral : architecture  is "ADC_DATA_HANDLER_group";\r
-\r
-       -- normal signals                          \r
-       signal adc_adclk_vec    : std_logic_vector(0 downto 0);\r
-       signal adc_adclk                : std_logic_vector(1 downto 0);\r
-       \r
-       signal adc_ch_7_mux             : std_logic_vector(1 downto 0);\r
-       signal adc_ch_6_mux             : std_logic_vector(1 downto 0);\r
-       signal adc_ch_5_mux             : std_logic_vector(1 downto 0);\r
-       signal adc_ch_4_mux             : std_logic_vector(1 downto 0);\r
-       signal adc_ch_3_mux             : std_logic_vector(1 downto 0);\r
-       signal adc_ch_2_mux             : std_logic_vector(1 downto 0);\r
-       signal adc_ch_1_mux             : std_logic_vector(1 downto 0);\r
-       signal adc_ch_0_mux             : std_logic_vector(1 downto 0);\r
-       \r
-       signal last_adc_7_ch    : std_logic_vector(11 downto 0);\r
-       signal last_adc_6_ch    : std_logic_vector(11 downto 0);\r
-       signal last_adc_5_ch    : std_logic_vector(11 downto 0);\r
-       signal last_adc_4_ch    : std_logic_vector(11 downto 0);\r
-       signal last_adc_3_ch    : std_logic_vector(11 downto 0);\r
-       signal last_adc_2_ch    : std_logic_vector(11 downto 0);\r
-       signal last_adc_1_ch    : std_logic_vector(11 downto 0);\r
-       signal last_adc_0_ch    : std_logic_vector(11 downto 0);\r
-\r
-       signal buf_adc_7_ch             : std_logic_vector(11 downto 0);\r
-       signal buf_adc_6_ch             : std_logic_vector(11 downto 0);\r
-       signal buf_adc_5_ch             : std_logic_vector(11 downto 0);\r
-       signal buf_adc_4_ch             : std_logic_vector(11 downto 0);\r
-       signal buf_adc_3_ch             : std_logic_vector(11 downto 0);\r
-       signal buf_adc_2_ch             : std_logic_vector(11 downto 0);\r
-       signal buf_adc_1_ch             : std_logic_vector(11 downto 0);\r
-       signal buf_adc_0_ch             : std_logic_vector(11 downto 0);\r
-\r
-       signal realstore                : std_logic_vector(3 downto 0);\r
-       signal next_recstore    : std_logic;\r
-       signal recstore                 : std_logic_vector(3 downto 0);\r
-\r
-       signal reset                    : std_logic; -- synchronized to 240MHz local clock\r
-\r
-       signal input_delay              : std_logic_vector(3 downto 0);\r
-\r
-       signal bitcounter               : std_logic_vector(2 downto 0);\r
-       signal synccounter              : std_logic_vector(2 downto 0);\r
-       signal next_ce_inc              : std_logic;\r
-       signal ce_inc                   : std_logic;\r
-       signal next_ce_dec              : std_logic;\r
-       signal ce_dec                   : std_logic;\r
-       signal next_sync_low    : std_logic;\r
-       signal sync_low                 : std_logic;\r
-       signal next_sync_high   : std_logic;\r
-       signal sync_high                : std_logic;\r
-\r
-       signal debug                    : std_logic_vector(15 downto 0);\r
-       \r
-begin                                          \r
+-- Placer Directives\r
+attribute HGROUP : string;\r
+-- for whole architecture\r
+attribute HGROUP of behavioral : architecture  is "ADC_DATA_HANDLER_group";\r
+\r
+-- normal signals\r
+signal adc_adclk_vec    : std_logic_vector(0 downto 0);\r
+signal adc_adclk        : std_logic_vector(1 downto 0);\r
+\r
+signal adc_ch_7_mux     : std_logic_vector(1 downto 0);\r
+signal adc_ch_6_mux     : std_logic_vector(1 downto 0);\r
+signal adc_ch_5_mux     : std_logic_vector(1 downto 0);\r
+signal adc_ch_4_mux     : std_logic_vector(1 downto 0);\r
+signal adc_ch_3_mux     : std_logic_vector(1 downto 0);\r
+signal adc_ch_2_mux     : std_logic_vector(1 downto 0);\r
+signal adc_ch_1_mux     : std_logic_vector(1 downto 0);\r
+signal adc_ch_0_mux     : std_logic_vector(1 downto 0);\r
+\r
+signal last_adc_7_ch    : std_logic_vector(11 downto 0);\r
+signal last_adc_6_ch    : std_logic_vector(11 downto 0);\r
+signal last_adc_5_ch    : std_logic_vector(11 downto 0);\r
+signal last_adc_4_ch    : std_logic_vector(11 downto 0);\r
+signal last_adc_3_ch    : std_logic_vector(11 downto 0);\r
+signal last_adc_2_ch    : std_logic_vector(11 downto 0);\r
+signal last_adc_1_ch    : std_logic_vector(11 downto 0);\r
+signal last_adc_0_ch    : std_logic_vector(11 downto 0);\r
+\r
+signal buf_adc_7_ch     : std_logic_vector(11 downto 0);\r
+signal buf_adc_6_ch     : std_logic_vector(11 downto 0);\r
+signal buf_adc_5_ch     : std_logic_vector(11 downto 0);\r
+signal buf_adc_4_ch     : std_logic_vector(11 downto 0);\r
+signal buf_adc_3_ch     : std_logic_vector(11 downto 0);\r
+signal buf_adc_2_ch     : std_logic_vector(11 downto 0);\r
+signal buf_adc_1_ch     : std_logic_vector(11 downto 0);\r
+signal buf_adc_0_ch     : std_logic_vector(11 downto 0);\r
+\r
+signal realstore        : std_logic_vector(3 downto 0);\r
+signal next_recstore    : std_logic;\r
+signal recstore         : std_logic_vector(3 downto 0);\r
+\r
+signal reset            : std_logic; -- synchronized to 240MHz local clock\r
+\r
+signal input_delay      : std_logic_vector(3 downto 0);\r
+\r
+signal bitcounter       : std_logic_vector(2 downto 0);\r
+signal synccounter      : std_logic_vector(2 downto 0);\r
+signal next_ce_inc      : std_logic;\r
+signal ce_inc           : std_logic;\r
+signal next_ce_dec      : std_logic;\r
+signal ce_dec           : std_logic;\r
+signal next_sync_low    : std_logic;\r
+signal sync_low         : std_logic;\r
+signal next_sync_high   : std_logic;\r
+signal sync_high        : std_logic;\r
+\r
+signal debug            : std_logic_vector(15 downto 0);\r
+\r
+begin\r
 \r
 -- input delay for IDDR, 50ps / unit\r
 input_delay <= pll_ctrl_in;\r
 \r
--- Reset synchronizer                                               \r
+-- Reset synchronizer\r
 THE_RESET_SYNC: state_sync\r
-port map( STATE_A_IN           => reset_in,\r
-                 CLK_B_IN                      => adc_lclk_in,\r
-                 RESET_B_IN            => '0',\r
-                 STATE_B_OUT           => reset\r
-               );\r
+port map(\r
+       STATE_A_IN      => reset_in,\r
+       CLK_B_IN        => adc_lclk_in,\r
+       RESET_B_IN      => '0',\r
+       STATE_B_OUT     => reset\r
+);\r
 \r
 -- We have to reconstruct the ADC word clock (ADCLK).\r
--- Mind the vector!                            \r
-adc_adclk_vec(0) <= adc_adclk_in;              \r
-  \r
-THE_ADC_ADCLK_IN: adc_ch_in                    \r
-port map( DEL  => input_delay,\r
-                 ECLK  => adc_lclk_in,                \r
-                 SCLK  => adc_lclk_in,                \r
-                 RST   => '0',      \r
-                 DATA  => adc_adclk_vec,              \r
-                 Q             => adc_adclk                   \r
-               );                                     \r
+-- Mind the vector!\r
+adc_adclk_vec(0) <= adc_adclk_in;\r
+\r
+THE_ADC_ADCLK_IN: adc_ch_in\r
+port map(\r
+       DEL     => input_delay,\r
+       ECLK    => adc_lclk_in,\r
+       SCLK    => adc_lclk_in,\r
+       RST     => '0',\r
+       DATA    => adc_adclk_vec,\r
+       Q       => adc_adclk\r
+);\r
 \r
 -- First group of channels (0 and 1)\r
-THE_DIN_0: adc_ch_in                   \r
-port map( DEL  => input_delay,\r
-                 ECLK  => adc_lclk_in,                \r
-                 SCLK  => adc_lclk_in,                \r
-                 RST   => '0',   \r
-                 DATA  => adc_chnl_in(0 downto 0),    \r
-                 Q             => adc_ch_0_mux                 \r
-               );                                     \r
-THE_DIN_1: adc_ch_in                   \r
-port map( DEL  => input_delay,\r
-                 ECLK  => adc_lclk_in,                \r
-                 SCLK  => adc_lclk_in,                \r
-                 RST   => '0',   \r
-                 DATA  => adc_chnl_in(1 downto 1),    \r
-                 Q             => adc_ch_1_mux                 \r
-               );                                     \r
+THE_DIN_0: adc_ch_in\r
+port map(\r
+       DEL     => input_delay,\r
+       ECLK    => adc_lclk_in,\r
+       SCLK    => adc_lclk_in,\r
+       RST     => '0',\r
+       DATA    => adc_chnl_in(0 downto 0),\r
+       Q       => adc_ch_0_mux\r
+);\r
+THE_DIN_1: adc_ch_in\r
+port map(\r
+       DEL     => input_delay,\r
+       ECLK    => adc_lclk_in,\r
+       SCLK    => adc_lclk_in,\r
+       RST     => '0',\r
+       DATA    => adc_chnl_in(1 downto 1),\r
+       Q       => adc_ch_1_mux\r
+);\r
 THE_ADC_0_1_CH: adc_twochannels\r
-port map( CLK_IN               => adc_lclk_in,\r
-                 RESET_IN              => reset,\r
-                 CLOCK_IN              => adc_adclk,\r
-                 DATA_0_IN     => adc_ch_0_mux,\r
-                 DATA_1_IN     => adc_ch_1_mux,\r
-                 DATA_0_OUT    => last_adc_0_ch,\r
-                 DATA_1_OUT    => last_adc_1_ch,\r
-                 STORE_OUT             => realstore(0),\r
-                 SWAP_OUT              => open,\r
-                 CLOCK_OUT             => open,\r
-                 DEBUG_OUT             => open\r
-               );\r
+port map(\r
+       CLK_IN      => adc_lclk_in,\r
+       RESET_IN    => reset,\r
+       CLOCK_IN    => adc_adclk,\r
+       DATA_0_IN   => adc_ch_0_mux,\r
+       DATA_1_IN   => adc_ch_1_mux,\r
+       DATA_0_OUT  => last_adc_0_ch,\r
+       DATA_1_OUT  => last_adc_1_ch,\r
+       STORE_OUT   => realstore(0),\r
+       SWAP_OUT    => open,\r
+       CLOCK_OUT   => open,\r
+       DEBUG_OUT   => open\r
+);\r
 \r
 -- Second group of channels (2 and 3)\r
-THE_DIN_2: adc_ch_in                   \r
-port map( DEL  => input_delay,\r
-                 ECLK  => adc_lclk_in,                \r
-                 SCLK  => adc_lclk_in,                \r
-                 RST   => '0',   \r
-                 DATA  => adc_chnl_in(2 downto 2),    \r
-                 Q             => adc_ch_2_mux                 \r
-               );                                     \r
-THE_DIN_3: adc_ch_in                   \r
-port map( DEL  => input_delay,\r
-                 ECLK  => adc_lclk_in,                \r
-                 SCLK  => adc_lclk_in,                \r
-                 RST   => '0',   \r
-                 DATA  => adc_chnl_in(3 downto 3),    \r
-                 Q             => adc_ch_3_mux                 \r
-               );                                     \r
+THE_DIN_2: adc_ch_in\r
+port map(\r
+       DEL     => input_delay,\r
+       ECLK    => adc_lclk_in,\r
+       SCLK    => adc_lclk_in,\r
+       RST     => '0',\r
+       DATA    => adc_chnl_in(2 downto 2),\r
+       Q       => adc_ch_2_mux\r
+);\r
+THE_DIN_3: adc_ch_in\r
+port map(\r
+       DEL     => input_delay,\r
+       ECLK    => adc_lclk_in,\r
+       SCLK    => adc_lclk_in,\r
+       RST     => '0',\r
+       DATA    => adc_chnl_in(3 downto 3),\r
+       Q       => adc_ch_3_mux\r
+);\r
 THE_ADC_2_3_CH: adc_twochannels\r
-port map( CLK_IN               => adc_lclk_in,\r
-                 RESET_IN              => reset,\r
-                 CLOCK_IN              => adc_adclk,\r
-                 DATA_0_IN     => adc_ch_2_mux,\r
-                 DATA_1_IN     => adc_ch_3_mux,\r
-                 DATA_0_OUT    => last_adc_2_ch,\r
-                 DATA_1_OUT    => last_adc_3_ch,\r
-                 STORE_OUT             => realstore(1),\r
-                 SWAP_OUT              => open,\r
-                 CLOCK_OUT             => open,\r
-                 DEBUG_OUT             => open\r
-               );\r
+port map(\r
+       CLK_IN      => adc_lclk_in,\r
+       RESET_IN    => reset,\r
+       CLOCK_IN    => adc_adclk,\r
+       DATA_0_IN   => adc_ch_2_mux,\r
+       DATA_1_IN   => adc_ch_3_mux,\r
+       DATA_0_OUT  => last_adc_2_ch,\r
+       DATA_1_OUT  => last_adc_3_ch,\r
+       STORE_OUT   => realstore(1),\r
+       SWAP_OUT    => open,\r
+       CLOCK_OUT   => open,\r
+       DEBUG_OUT   => open\r
+);\r
 \r
 -- Third group of channels (4 and 5)\r
-THE_DIN_4: adc_ch_in                   \r
-port map( DEL  => input_delay,\r
-                 ECLK  => adc_lclk_in,                \r
-                 SCLK  => adc_lclk_in,                \r
-                 RST   => '0',  \r
-                 DATA  => adc_chnl_in(4 downto 4),    \r
-                 Q             => adc_ch_4_mux                 \r
-               );                                     \r
-THE_DIN_5: adc_ch_in                   \r
-port map( DEL  => input_delay,\r
-                 ECLK  => adc_lclk_in,                \r
-                 SCLK  => adc_lclk_in,                \r
-                 RST   => '0',  \r
-                 DATA  => adc_chnl_in(5 downto 5),    \r
-                 Q             => adc_ch_5_mux                 \r
-               );                                     \r
+THE_DIN_4: adc_ch_in\r
+port map(\r
+       DEL     => input_delay,\r
+       ECLK    => adc_lclk_in,\r
+       SCLK    => adc_lclk_in,\r
+       RST     => '0',\r
+       DATA    => adc_chnl_in(4 downto 4),\r
+       Q       => adc_ch_4_mux\r
+);\r
+THE_DIN_5: adc_ch_in\r
+port map(\r
+       DEL     => input_delay,\r
+       ECLK    => adc_lclk_in,\r
+       SCLK    => adc_lclk_in,\r
+       RST     => '0',\r
+       DATA    => adc_chnl_in(5 downto 5),\r
+       Q       => adc_ch_5_mux\r
+);\r
 THE_ADC_4_5_CH: adc_twochannels\r
-port map( CLK_IN               => adc_lclk_in,\r
-                 RESET_IN              => reset,\r
-                 CLOCK_IN              => adc_adclk,\r
-                 DATA_0_IN     => adc_ch_4_mux,\r
-                 DATA_1_IN     => adc_ch_5_mux,\r
-                 DATA_0_OUT    => last_adc_4_ch,\r
-                 DATA_1_OUT    => last_adc_5_ch,\r
-                 STORE_OUT             => realstore(2),\r
-                 SWAP_OUT              => open,\r
-                 CLOCK_OUT             => open,\r
-                 DEBUG_OUT             => open\r
-               );\r
+port map(\r
+       CLK_IN      => adc_lclk_in,\r
+       RESET_IN    => reset,\r
+       CLOCK_IN    => adc_adclk,\r
+       DATA_0_IN   => adc_ch_4_mux,\r
+       DATA_1_IN   => adc_ch_5_mux,\r
+       DATA_0_OUT  => last_adc_4_ch,\r
+       DATA_1_OUT  => last_adc_5_ch,\r
+       STORE_OUT   => realstore(2),\r
+       SWAP_OUT    => open,\r
+       CLOCK_OUT   => open,\r
+       DEBUG_OUT   => open\r
+);\r
 \r
 -- Fourth group of channels (6 and 7)\r
-THE_DIN_6: adc_ch_in                   \r
-port map( DEL  => input_delay,\r
-                 ECLK  => adc_lclk_in,                \r
-                 SCLK  => adc_lclk_in,                \r
-                 RST   => '0', \r
-                 DATA  => adc_chnl_in(6 downto 6),    \r
-                 Q             => adc_ch_6_mux                 \r
-               );                                     \r
-THE_DIN_7: adc_ch_in                   \r
-port map( DEL  => input_delay,\r
-                 ECLK  => adc_lclk_in,                \r
-                 SCLK  => adc_lclk_in,                \r
-                 RST   => '0',  \r
-                 DATA  => adc_chnl_in(7 downto 7),    \r
-                 Q             => adc_ch_7_mux                 \r
-               );                                     \r
+THE_DIN_6: adc_ch_in\r
+port map(\r
+       DEL     => input_delay,\r
+       ECLK    => adc_lclk_in,\r
+       SCLK    => adc_lclk_in,\r
+       RST     => '0',\r
+       DATA    => adc_chnl_in(6 downto 6),\r
+       Q       => adc_ch_6_mux\r
+);\r
+THE_DIN_7: adc_ch_in\r
+port map(\r
+       DEL     => input_delay,\r
+       ECLK    => adc_lclk_in,\r
+       SCLK    => adc_lclk_in,\r
+       RST     => '0',\r
+       DATA    => adc_chnl_in(7 downto 7),\r
+       Q       => adc_ch_7_mux\r
+);\r
 THE_ADC_6_7_CH: adc_twochannels\r
-port map( CLK_IN               => adc_lclk_in,\r
-                 RESET_IN              => reset,\r
-                 CLOCK_IN              => adc_adclk,\r
-                 DATA_0_IN     => adc_ch_6_mux,\r
-                 DATA_1_IN     => adc_ch_7_mux,\r
-                 DATA_0_OUT    => last_adc_6_ch,\r
-                 DATA_1_OUT    => last_adc_7_ch,\r
-                 STORE_OUT             => realstore(3),\r
-                 SWAP_OUT              => open,\r
-                 CLOCK_OUT             => open,\r
-                 DEBUG_OUT             => open\r
-               );\r
+port map(\r
+       CLK_IN      => adc_lclk_in,\r
+       RESET_IN    => reset,\r
+       CLOCK_IN    => adc_adclk,\r
+       DATA_0_IN   => adc_ch_6_mux,\r
+       DATA_1_IN   => adc_ch_7_mux,\r
+       DATA_0_OUT  => last_adc_6_ch,\r
+       DATA_1_OUT  => last_adc_7_ch,\r
+       STORE_OUT   => realstore(3),\r
+       SWAP_OUT    => open,\r
+       CLOCK_OUT   => open,\r
+       DEBUG_OUT   => open\r
+);\r
 \r
 -- Clock reconstruction (will only work if all four units work in perfect alignment)\r
 next_recstore <= '1' when ( realstore = b"1111" ) else '0';\r
@@ -308,18 +323,18 @@ end process THE_DATA_DELAY_PROC;
 \r
 \r
 -- output signals\r
-adc_data7_out    <= buf_adc_7_ch;               \r
-adc_data6_out    <= buf_adc_6_ch;               \r
-adc_data5_out    <= buf_adc_5_ch;               \r
-adc_data4_out    <= buf_adc_4_ch;               \r
-adc_data3_out    <= buf_adc_3_ch;               \r
-adc_data2_out    <= buf_adc_2_ch;               \r
-adc_data1_out    <= buf_adc_1_ch;               \r
-adc_data0_out    <= buf_adc_0_ch;               \r
+adc_data7_out    <= buf_adc_7_ch;\r
+adc_data6_out    <= buf_adc_6_ch;\r
+adc_data5_out    <= buf_adc_5_ch;\r
+adc_data4_out    <= buf_adc_4_ch;\r
+adc_data3_out    <= buf_adc_3_ch;\r
+adc_data2_out    <= buf_adc_2_ch;\r
+adc_data1_out    <= buf_adc_1_ch;\r
+adc_data0_out    <= buf_adc_0_ch;\r
 adc_ce_out       <= recstore(3);\r
 adc_valid_out    <= sync_high;\r
-                                               \r
-debug_out(15 downto 0)  <= debug;  \r
-                                               \r
-end behavioral;                                \r
-                                              
\ No newline at end of file
+\r
+debug_out(15 downto 0)  <= debug;\r
+\r
+end behavioral;\r
+                                                                                         
\ No newline at end of file
index f48f729695ca72d1a1a08a8f1aedece3e39aee83..c54e175c305fc0dcf67d94271794e938d6155b03 100644 (file)
@@ -7,45 +7,46 @@ library work;
 use work.adcmv3_components.all;\r
 \r
 entity adc_twochannels is\r
-       port( CLK_IN            : in    std_logic;                                         -- DDR bit clock\r
-                 RESET_IN              : in    std_logic;\r
-                 CLOCK_IN              : in    std_logic_vector(1 downto 0);  -- word clock\r
-                 DATA_0_IN     : in    std_logic_vector(1 downto 0);  -- ADC channel one\r
-                 DATA_1_IN     : in    std_logic_vector(1 downto 0);  -- ADC channel two\r
-                 DATA_0_OUT    : out   std_logic_vector(11 downto 0); -- demultiplexed ADC channel one\r
-                 DATA_1_OUT    : out   std_logic_vector(11 downto 0); -- demultiplexed ADC channel two\r
-                 STORE_OUT             : out   std_logic;\r
-                 SWAP_OUT              : out   std_logic;\r
-                 CLOCK_OUT             : out   std_logic;\r
-                 DEBUG_OUT             : out   std_logic_vector(15 downto 0)\r
-               );\r
+port(\r
+       CLK_IN      : in    std_logic;                     -- DDR bit clock\r
+       RESET_IN    : in    std_logic;\r
+       CLOCK_IN    : in    std_logic_vector(1 downto 0);  -- word clock\r
+       DATA_0_IN   : in    std_logic_vector(1 downto 0);  -- ADC channel one\r
+       DATA_1_IN   : in    std_logic_vector(1 downto 0);  -- ADC channel two\r
+       DATA_0_OUT  : out   std_logic_vector(11 downto 0); -- demultiplexed ADC channel one\r
+       DATA_1_OUT  : out   std_logic_vector(11 downto 0); -- demultiplexed ADC channel two\r
+       STORE_OUT   : out   std_logic;\r
+       SWAP_OUT    : out   std_logic;\r
+       CLOCK_OUT   : out   std_logic;\r
+       DEBUG_OUT   : out   std_logic_vector(15 downto 0)\r
+);\r
 end;\r
 \r
 architecture behaviour of adc_twochannels is\r
 \r
-       -- Placer Directives\r
-       attribute HGROUP : string;\r
-       -- for whole architecture\r
-       attribute HGROUP of behaviour : architecture  is "TWOCHANNELS_group";\r
-\r
-       type half_data_t is array (0 to 1) of std_logic_vector(5 downto 0);\r
-       signal qda                      : half_data_t; -- serial input data, raising edge\r
-       signal qdb                      : half_data_t; -- serial input data, falling edge\r
-       signal parda            : half_data_t; -- parallel input data, raising edge\r
-       signal pardb            : half_data_t; -- parallel input data, falling edge\r
-       signal qc                       : half_data_t; -- serial ADCLK signal, (0) raising edge, (1) falling edge\r
-       type full_data_t is array (0 to 1) of std_logic_vector(11 downto 0);\r
-       signal muxed            : full_data_t;\r
-       signal data                     : full_data_t;\r
-\r
-       signal next_store_a     : std_logic;\r
-       signal store_a          : std_logic; -- store serial data A to parallel temp register\r
-       signal next_store_b     : std_logic;\r
-       signal store_b          : std_logic; -- store serial data B to parallel temp register\r
-       signal check            : std_logic; -- auxiliary signal for swapping\r
-       signal next_swap        : std_logic;\r
-       signal swap                     : std_logic; -- swap half words before assembling\r
-       signal store            : std_logic; -- assemble full word\r
+-- Placer Directives\r
+attribute HGROUP : string;\r
+-- for whole architecture\r
+attribute HGROUP of behaviour : architecture  is "TWOCHANNELS_group";\r
+\r
+type half_data_t is array (0 to 1) of std_logic_vector(5 downto 0);\r
+signal qda          : half_data_t; -- serial input data, raising edge\r
+signal qdb          : half_data_t; -- serial input data, falling edge\r
+signal parda        : half_data_t; -- parallel input data, raising edge\r
+signal pardb        : half_data_t; -- parallel input data, falling edge\r
+signal qc           : half_data_t; -- serial ADCLK signal, (0) raising edge, (1) falling edge\r
+type full_data_t is array (0 to 1) of std_logic_vector(11 downto 0);\r
+signal muxed        : full_data_t;\r
+signal data         : full_data_t;\r
+\r
+signal next_store_a : std_logic;\r
+signal store_a      : std_logic; -- store serial data A to parallel temp register\r
+signal next_store_b : std_logic;\r
+signal store_b      : std_logic; -- store serial data B to parallel temp register\r
+signal check        : std_logic; -- auxiliary signal for swapping\r
+signal next_swap    : std_logic;\r
+signal swap         : std_logic; -- swap half words before assembling\r
+signal store        : std_logic; -- assemble full word\r
 \r
 begin\r
 \r
@@ -84,11 +85,11 @@ begin
                if( store_a = '1' ) then\r
                        parda(0) <= qda(0);\r
                        parda(1) <= qda(1);\r
-               end if;\r
+               end if;\r
                if( store_b = '1' ) then\r
                        pardb(0) <= qdb(0);\r
                        pardb(1) <= qdb(1);\r
-               end if;\r
+               end if;\r
        end if;\r
 end process THE_PARALLEL_STORE_PROC;\r
 \r
@@ -115,7 +116,7 @@ next_swap <= '1' when ( (store_a = '1') and (store_b = '0') and (check = '1') )
 THE_SWAP_PROC: process( parda, pardb, swap )\r
 begin\r
        case swap is\r
-               when '1'        =>      -- first channel\r
+               when '1'    =>  -- first channel\r
                                                muxed(0)(0)  <= pardb(0)(5);\r
                                                muxed(0)(1)  <= parda(0)(5);\r
                                                muxed(0)(2)  <= pardb(0)(4);\r
@@ -141,7 +142,7 @@ begin
                                                muxed(1)(9)  <= parda(1)(1);\r
                                                muxed(1)(10) <= pardb(1)(0);\r
                                                muxed(1)(11) <= parda(1)(0);\r
-               when '0'        =>      -- first channel\r
+               when '0'    =>  -- first channel\r
                                                muxed(0)(0)  <= parda(0)(5);\r
                                                muxed(0)(1)  <= pardb(0)(5);\r
                                                muxed(0)(2)  <= parda(0)(4);\r
@@ -199,13 +200,5 @@ debug_out(13)          <= store_b;
 debug_out(12)          <= store_a;\r
 debug_out(11 downto 0) <= data(0);\r
 \r
---debug_out(15 downto 15) <= (others => '0');\r
---debug_out(14)           <= swap;\r
---debug_out(13)           <= store_b;\r
---debug_out(12)           <= store_a;\r
---debug_out(11 downto 6)  <= parda(0);\r
---debug_out(5 downto 0)   <= pardb(0);\r
-\r
-\r
 end behaviour;\r
 \r
index 83a52c450591da431ba73fde42176880f43d8fd9..7f80ddfe1ecbf7e437160120ca160391c24150f4 100755 (executable)
@@ -7,257 +7,256 @@ use work.trb_net_std.all;
 use work.adcmv3_components.all;\r
 \r
 entity adcmv3 is\r
-       port( CLK100M           : in    std_logic; -- OK -- 100MHz LVDS clock \r
-                 -- trigger inputs\r
-                 EXT_IN        : in    std_logic_vector(3 downto 0); -- OK -- external triggers\r
-                 -- APV stuff\r
-                 APV0A_CLK             : out   std_logic; -- OK -- APV bank 0: 40MHz phase adjustable clock \r
-                 APV0B_CLK             : out   std_logic; -- OK -- APV bank 0: 40MHz phase adjustable clock \r
-                 APV0A_TRG             : out   std_logic; -- OK -- APV bank 0: trigger pulse out\r
-                 APV0B_TRG             : out   std_logic; -- OK -- APV bank 0: trigger pulse out\r
-                 APV0_RST              : out   std_logic; -- OK -- APV bank 0: reset signal, low active\r
-                 APV0_SDA              : inout std_logic; -- OK -- APV bank 0: I2C bus SDA\r
-                 APV0_SCL              : inout std_logic; -- OK -- APV bank 0: I2C bus SCL\r
-                 ENA_LVDS              : out   std_logic_vector(7 downto 0); -- OK -- enable LVDS drivers\r
-                 APV1A_CLK             : out   std_logic; -- OK -- APV bank 1: 40MHz phase adjustable clock\r
-                 APV1B_CLK             : out   std_logic; -- OK -- APV bank 1: 40MHz phase adjustable clock\r
-                 APV1A_TRG             : out   std_logic; -- OK -- APV bank 1: trigger pulse out\r
-                 APV1B_TRG             : out   std_logic; -- OK -- APV bank 1: trigger pulse out\r
-                 APV1_RST              : out   std_logic; -- OK -- APV bank 1: reset signal, low active\r
-                 APV1_SDA              : inout std_logic; -- OK -- APV bank 1: I2C bus SDA\r
-                 APV1_SCL              : inout std_logic; -- OK -- APV bank 1: I2C bus SCL\r
-                 ENB_LVDS              : out   std_logic_vector(7 downto 0); -- OK -- enable LVDS drivers\r
-                 -- ADC0 stuff\r
-                 ADC0_CLK              : out   std_logic; -- OK -- ADC clock, 40MHz LVTTL\r
-                 ADC0_RST              : out   std_logic; -- OK -- ADC reset signal\r
-                 ADC0_PD               : out   std_logic; -- OK -- ADC powerdown signal\r
-                 ADC0_CS               : out   std_logic; -- OK -- ADC /CS signal\r
-                 ADC0_SDI              : out   std_logic; -- OK -- ADC serial data in\r
-                 ADC0_SCK              : out   std_logic; -- OK -- ADC serial clock\r
-                 ADC0_LCLK             : in    std_logic; -- OK -- ADC 240MHz DDR clock\r
-                 ADC0_ADCLK    : in    std_logic; -- OK -- ADC 40MHz frame clock\r
-                 ADC0_OUT              : in    std_logic_vector(7 downto 0); -- OK -- serial LVDS data streams\r
-                 -- ADC1 stuff\r
-                 ADC1_CLK              : out   std_logic; -- OK -- ADC clock, 40MHz LVTTL\r
-                 ADC1_RST              : out   std_logic; -- OK -- ADC reset signal\r
-                 ADC1_PD               : out   std_logic; -- OK -- ADC powerdown signal\r
-                 ADC1_CS               : out   std_logic; -- OK -- ADC /CS signal\r
-                 ADC1_SDI              : out   std_logic; -- OK -- ADC serial data in\r
-                 ADC1_SCK              : out   std_logic; -- OK -- ADC serial clock\r
-                 ADC1_LCLK             : in    std_logic; -- OK -- ADC 240MHz DDR clock\r
-                 ADC1_ADCLK    : in    std_logic; -- OK -- ADC 40MHz frame clock\r
-                 ADC1_OUT              : in    std_logic_vector(7 downto 0); -- OK -- serial LVDS data streams\r
-                 -- uC connections\r
-                 UC_RESET              : in    std_logic; -- OK -- uC reset, high active\r
-                 UC_REBOOT             : out   std_logic; -- OK -- was UC_FPGA(3), requests FPGA reboot\r
-                 -- SerDes pins        \r
-                 HDINN2                : in    std_logic; -- highspeed INPUT\r
-                 HDINP2                : in    std_logic; --\r
-                 HDOUTN2               : out   std_logic; -- highspeed OUTPUT\r
-                 HDOUTP2               : out   std_logic; -- \r
-                 SD_PRESENT    : in    std_logic; -- OK -- Present signal from SFP\r
-                 SD_LOS                : in    std_logic; -- OK -- Loss Of Signal from SFP\r
-                 SD_TXDIS              : out   std_logic; -- OK -- SFP transmitter disable\r
-                 ADCM_ONEWIRE  : inout std_logic; -- OK -- OneWire ID chip on ADCM\r
-                 -- Backplane sense wires\r
-                 BP_MODULE             : in    std_logic_vector(3 downto 0); -- OK -- module number input from backplane\r
-                 BP_SECTOR             : in    std_logic_vector(3 downto 0); -- OK -- sector number input from backplane\r
-                 BP_ONEWIRE    : inout std_logic; -- OK -- OneWire ID chip on backplane \r
-                 BP_LED                : out   std_logic; -- OK -- backplane LED \r
-                 -- LEDs\r
-                 FPGA_LED              : out   std_logic_vector(6 downto 3);  -- OK -- general purpose LEDS\r
-                 FPGA_LED_RXD  : out   std_logic; -- OK -- FPGA_LED(2)\r
-                 FPGA_LED_TXD  : out   std_logic; -- OK -- FPGA_LED(1)\r
-                 FPGA_LED_LINK : out   std_logic; -- OK -- FPGA_LED(0)\r
-                 FPGA_LED_PLL  : out   std_logic; -- OK -- PLL locked \r
-                 FPGA_LED_ADC  : out   std_logic_vector(1 downto 0);  -- OK -- ADCx OK LED \r
-                 -- 1Wire chips on APV FEs\r
-                 APV0_1W               : inout std_logic_vector(7 downto 0);\r
-                 APV1_1W               : inout std_logic_vector(7 downto 0);\r
-                 -- SPI FlashROM connections\r
-                 U_SPI_CS              : out   std_logic; -- OK -- chip select for SPI boot FlashROM\r
-                 U_SPI_SCK             : out   std_logic; -- OK -- clock\r
-                 U_SPI_SDI             : out   std_logic; -- OK -- connects to SI on the FlashROM\r
-                 U_SPI_SDO             : in    std_logic; -- OK -- connects to SO on the FlashROM\r
-                 -- Debug connections\r
-                 DBG_EXP               : out   std_logic_vector(43 downto 0)  -- OK -- SMC50 debug header\r
-               );\r
+port( CLK100M       : in    std_logic; -- OK -- 100MHz LVDS clock \r
+         -- trigger inputs\r
+         EXT_IN        : in    std_logic_vector(3 downto 0); -- OK -- external triggers\r
+         -- APV stuff\r
+         APV0A_CLK     : out   std_logic; -- OK -- APV bank 0: 40MHz phase adjustable clock \r
+         APV0B_CLK     : out   std_logic; -- OK -- APV bank 0: 40MHz phase adjustable clock \r
+         APV0A_TRG     : out   std_logic; -- OK -- APV bank 0: trigger pulse out\r
+         APV0B_TRG     : out   std_logic; -- OK -- APV bank 0: trigger pulse out\r
+         APV0_RST      : out   std_logic; -- OK -- APV bank 0: reset signal, low active\r
+         APV0_SDA      : inout std_logic; -- OK -- APV bank 0: I2C bus SDA\r
+         APV0_SCL      : inout std_logic; -- OK -- APV bank 0: I2C bus SCL\r
+         ENA_LVDS      : out   std_logic_vector(7 downto 0); -- OK -- enable LVDS drivers\r
+         APV1A_CLK     : out   std_logic; -- OK -- APV bank 1: 40MHz phase adjustable clock\r
+         APV1B_CLK     : out   std_logic; -- OK -- APV bank 1: 40MHz phase adjustable clock\r
+         APV1A_TRG     : out   std_logic; -- OK -- APV bank 1: trigger pulse out\r
+         APV1B_TRG     : out   std_logic; -- OK -- APV bank 1: trigger pulse out\r
+         APV1_RST      : out   std_logic; -- OK -- APV bank 1: reset signal, low active\r
+         APV1_SDA      : inout std_logic; -- OK -- APV bank 1: I2C bus SDA\r
+         APV1_SCL      : inout std_logic; -- OK -- APV bank 1: I2C bus SCL\r
+         ENB_LVDS      : out   std_logic_vector(7 downto 0); -- OK -- enable LVDS drivers\r
+         -- ADC0 stuff\r
+         ADC0_CLK      : out   std_logic; -- OK -- ADC clock, 40MHz LVTTL\r
+         ADC0_RST      : out   std_logic; -- OK -- ADC reset signal\r
+         ADC0_PD       : out   std_logic; -- OK -- ADC powerdown signal\r
+         ADC0_CS       : out   std_logic; -- OK -- ADC /CS signal\r
+         ADC0_SDI      : out   std_logic; -- OK -- ADC serial data in\r
+         ADC0_SCK      : out   std_logic; -- OK -- ADC serial clock\r
+         ADC0_LCLK     : in    std_logic; -- OK -- ADC 240MHz DDR clock\r
+         ADC0_ADCLK    : in    std_logic; -- OK -- ADC 40MHz frame clock\r
+         ADC0_OUT      : in    std_logic_vector(7 downto 0); -- OK -- serial LVDS data streams\r
+         -- ADC1 stuff\r
+         ADC1_CLK      : out   std_logic; -- OK -- ADC clock, 40MHz LVTTL\r
+         ADC1_RST      : out   std_logic; -- OK -- ADC reset signal\r
+         ADC1_PD       : out   std_logic; -- OK -- ADC powerdown signal\r
+         ADC1_CS       : out   std_logic; -- OK -- ADC /CS signal\r
+         ADC1_SDI      : out   std_logic; -- OK -- ADC serial data in\r
+         ADC1_SCK      : out   std_logic; -- OK -- ADC serial clock\r
+         ADC1_LCLK     : in    std_logic; -- OK -- ADC 240MHz DDR clock\r
+         ADC1_ADCLK    : in    std_logic; -- OK -- ADC 40MHz frame clock\r
+         ADC1_OUT      : in    std_logic_vector(7 downto 0); -- OK -- serial LVDS data streams\r
+         -- uC connections\r
+         UC_RESET      : in    std_logic; -- OK -- uC reset, high active\r
+         UC_REBOOT     : out   std_logic; -- OK -- was UC_FPGA(3), requests FPGA reboot\r
+         -- SerDes pins        \r
+         HDINN2        : in    std_logic; -- highspeed INPUT\r
+         HDINP2        : in    std_logic; --\r
+         HDOUTN2       : out   std_logic; -- highspeed OUTPUT\r
+         HDOUTP2       : out   std_logic; -- \r
+         SD_PRESENT    : in    std_logic; -- OK -- Present signal from SFP\r
+         SD_LOS        : in    std_logic; -- OK -- Loss Of Signal from SFP\r
+         SD_TXDIS      : out   std_logic; -- OK -- SFP transmitter disable\r
+         ADCM_ONEWIRE  : inout std_logic; -- OK -- OneWire ID chip on ADCM\r
+         -- Backplane sense wires\r
+         BP_MODULE     : in    std_logic_vector(3 downto 0); -- OK -- module number input from backplane\r
+         BP_SECTOR     : in    std_logic_vector(3 downto 0); -- OK -- sector number input from backplane\r
+         BP_ONEWIRE    : inout std_logic; -- OK -- OneWire ID chip on backplane \r
+         BP_LED        : out   std_logic; -- OK -- backplane LED \r
+         -- LEDs\r
+         FPGA_LED      : out   std_logic_vector(6 downto 3);  -- OK -- general purpose LEDS\r
+         FPGA_LED_RXD  : out   std_logic; -- OK -- FPGA_LED(2)\r
+         FPGA_LED_TXD  : out   std_logic; -- OK -- FPGA_LED(1)\r
+         FPGA_LED_LINK : out   std_logic; -- OK -- FPGA_LED(0)\r
+         FPGA_LED_PLL  : out   std_logic; -- OK -- PLL locked \r
+         FPGA_LED_ADC  : out   std_logic_vector(1 downto 0);  -- OK -- ADCx OK LED \r
+         -- 1Wire chips on APV FEs\r
+         APV0_1W       : inout std_logic_vector(7 downto 0);\r
+         APV1_1W       : inout std_logic_vector(7 downto 0);\r
+         -- SPI FlashROM connections\r
+         U_SPI_CS      : out   std_logic; -- OK -- chip select for SPI boot FlashROM\r
+         U_SPI_SCK     : out   std_logic; -- OK -- clock\r
+         U_SPI_SDI     : out   std_logic; -- OK -- connects to SI on the FlashROM\r
+         U_SPI_SDO     : in    std_logic; -- OK -- connects to SO on the FlashROM\r
+         -- Debug connections\r
+         DBG_EXP       : out   std_logic_vector(43 downto 0)  -- OK -- SMC50 debug header\r
+);\r
 end;\r
 \r
 architecture adcmv3 of adcmv3 is\r
 \r
---     Signals\r
-       -- Clock related signals\r
-       signal clk100m_locked                   : std_logic; -- not needed at the moment\r
-       signal sysclk                                   : std_logic; -- clean 100MHz for distribution\r
-\r
-       signal adc0_ce                                  : std_logic;\r
-       signal adc0_valid                               : std_logic;\r
-       signal adc0_reset                               : std_logic;\r
-       signal adc0_powerdown                   : std_logic;\r
-       signal adc1_ce                                  : std_logic;\r
-       signal adc1_valid                               : std_logic;\r
-       signal adc1_reset                               : std_logic;\r
-       signal adc1_powerdown                   : std_logic;\r
-\r
-       signal clk_adc                                  : std_logic; -- 40MHz for ADC operation\r
-       signal clk_apv                                  : std_logic; -- 40MHz for APV operation (phase shiftable!)\r
-       signal clk40m_locked                    : std_logic;\r
-       signal clk40m_reset                             : std_logic;\r
-\r
-       signal async_reset                              : std_logic;\r
-\r
-       -- APV related signals\r
-       signal apv_sda_out                              : std_logic; -- APV SDA\r
-       signal apv_sda_in                               : std_logic;\r
-       signal apv_scl_out                              : std_logic; -- APV SCL\r
-       signal apv_scl_in                               : std_logic;\r
-       signal apv_trg                                  : std_logic; -- real APV trigger signal\r
-       signal apv_sync                                 : std_logic; -- artificial signal\r
-       signal apv_frame_reqd                   : std_logic; -- one 100MHz pulse per requested frame\r
-       signal apv0_reset                               : std_logic;\r
-       signal apv1_reset                               : std_logic;\r
-       signal apv_reset                                : std_logic;\r
-       signal adc_on                                   : std_logic_vector(15 downto 0); -- ordered after ADC0[7:0] and ADC1[15:8]\r
-       signal lvds_on                                  : std_logic_vector(15 downto 0); -- ordered after ADC0[7:0] and ADC1[15:8]\r
-\r
-       -- Control signals\r
-       signal ctrl_pll                                 : std_logic_vector(15 downto 0); -- PLL control register\r
-       signal status_pll                               : std_logic_vector(15 downto 0); -- PLL status register\r
-       signal ctrl_trg                                 : std_logic_vector(31 downto 0); -- TRG control register\r
-       signal ctrl_lvl                                 : std_logic_vector(31 downto 0); -- LVL control register\r
-                                       \r
-       signal ctrl_bitlow                              : std_logic_vector(11 downto 0); -- BIT_LOW setting for APV digital header\r
-       signal ctrl_bithigh                             : std_logic_vector(11 downto 0); -- BIT_HIGH setting for APV digital header\r
-       signal ctrl_flatlow                             : std_logic_vector(11 downto 0); -- FLAT_LOW setting\r
-       signal ctrl_flathigh                    : std_logic_vector(11 downto 0); -- FLAT_HIGH setting\r
-\r
-       signal maximum_trg                              : std_logic_vector(3 downto 0);\r
-\r
-       signal raw_buf_full                             : std_logic;\r
-       signal eds_buf_full                             : std_logic;\r
-       signal eds_buf_level                    : std_logic_vector(4 downto 0);\r
-\r
-       -- regIO data bus\r
-       signal regio_addr                               : std_logic_vector(c_REGIO_ADDRESS_WIDTH-1 downto 0);\r
-       signal regio_read_enable                : std_logic;\r
-       signal regio_write_enable               : std_logic;\r
-       signal regio_data_wr                    : std_logic_vector(c_REGIO_REGISTER_WIDTH-1 downto 0);\r
-       signal regio_data_rd                    : std_logic_vector(c_REGIO_REGISTER_WIDTH-1 downto 0);\r
-       signal regio_dataready                  : std_logic;\r
-       signal regio_no_more_data               : std_logic;\r
-       signal regio_write_ack                  : std_logic;\r
-       signal regio_unknown_addr               : std_logic;\r
-       signal regio_timeout                    : std_logic;\r
-\r
-       -- common status / control registers from RegIO\r
-       signal common_stat_reg                  : std_logic_vector(63 downto 0);\r
-       signal common_ctrl_reg                  : std_logic_vector(63 downto 0);\r
-\r
-       -- user defined "quick'n'dirty" registers\r
-       signal simple_status                    : std_logic_vector(127 downto 0);\r
-       signal simple_control                   : std_logic_vector(63 downto 0);\r
-\r
-       -- debug signals\r
-       signal test_reg                                 : std_logic_vector(31 downto 0);\r
-       signal trbrich_debug                    : std_logic_vector(63 downto 0);\r
-       signal trgctrl_debug                    : std_logic_vector(63 downto 0);\r
-       signal slave_debug                              : std_logic_vector(63 downto 0);\r
-       signal fifo_debug                               : std_logic_vector(63 downto 0);\r
-       signal raw_buf_debug                    : std_logic_vector(63 downto 0);\r
-\r
-       -- EDS / BUFFER signals (raw buf -> ped corr)\r
-       signal eds_data                                 : std_logic_vector(39 downto 0);\r
-       signal eds_avail                                : std_logic;\r
-       signal eds_done                                 : std_logic;\r
-       signal buf_addr                                 : std_logic_vector(6 downto 0);\r
-       signal buf_done                                 : std_logic;\r
-       signal buf_tick                                 : std_logic_vector(15 downto 0);\r
-       signal buf_start                                : std_logic_vector(15 downto 0);\r
-       signal buf_ready                                : std_logic_vector(15 downto 0); -- just for debugging!\r
-\r
-       type reg_38bit_t is array (0 to 15) of std_logic_vector(37 downto 0);\r
-       signal buf_data                                 : reg_38bit_t;\r
-\r
-       signal thr_addr                                 : std_logic_vector(6 downto 0);\r
-       type reg_18bit_t is array (0 to 15) of std_logic_vector(17 downto 0);\r
-       signal thr_data                                 : reg_18bit_t;\r
-       signal ped_data                                 : reg_18bit_t;\r
-\r
-       -- FIFO / DHDR signals (ped corr -> ipu stage)\r
-       signal dhdr_data                                : std_logic_vector(31 downto 0);\r
-       signal dhdr_length                              : std_logic_vector(15 downto 0);\r
-       signal dhdr_store                               : std_logic;\r
-       signal dhdr_buf_full                    : std_logic;\r
-\r
-       signal fifo_start                               : std_logic;\r
-       signal fifo_done                                : std_logic;\r
-       signal fifo_we                                  : std_logic_vector(15 downto 0);\r
-       type reg_40bit_t is array (0 to 15) of std_logic_vector(39 downto 0);\r
-       signal fifo_data                                : reg_40bit_t;\r
-\r
-       -- APV control / status signals\r
-       type reg_16bit_t is array (0 to 15) of std_logic_vector(15 downto 0);\r
-       signal adc_ctrl_reg                             : reg_16bit_t;\r
-       signal adc_stat_reg                             : reg_16bit_t;\r
-\r
-       signal debug                                    : std_logic_vector(42 downto 0);\r
-       signal debug_q                                  : std_logic_vector(42 downto 0);\r
-       signal debug_qq                                 : std_logic_vector(42 downto 0);\r
-       signal debug_clk                                : std_logic;\r
+--  Signals\r
+-- Clock related signals\r
+signal clk100m_locked           : std_logic; -- not needed at the moment\r
+signal sysclk                   : std_logic; -- clean 100MHz for distribution\r
+\r
+signal adc0_ce                  : std_logic;\r
+signal adc0_valid               : std_logic;\r
+signal adc0_reset               : std_logic;\r
+signal adc0_powerdown           : std_logic;\r
+signal adc1_ce                  : std_logic;\r
+signal adc1_valid               : std_logic;\r
+signal adc1_reset               : std_logic;\r
+signal adc1_powerdown           : std_logic;\r
+\r
+signal clk_adc                  : std_logic; -- 40MHz for ADC operation\r
+signal clk_apv                  : std_logic; -- 40MHz for APV operation (phase shiftable!)\r
+signal clk40m_locked            : std_logic;\r
+signal clk40m_reset             : std_logic;\r
+\r
+signal async_reset              : std_logic;\r
+\r
+-- APV related signals\r
+signal apv_sda_out              : std_logic; -- APV SDA\r
+signal apv_sda_in               : std_logic;\r
+signal apv_scl_out              : std_logic; -- APV SCL\r
+signal apv_scl_in               : std_logic;\r
+signal apv_trg                  : std_logic; -- real APV trigger signal\r
+signal apv_sync                 : std_logic; -- artificial signal\r
+signal apv_frame_reqd           : std_logic; -- one 100MHz pulse per requested frame\r
+signal apv0_reset               : std_logic;\r
+signal apv1_reset               : std_logic;\r
+signal apv_reset                : std_logic;\r
+signal adc_on                   : std_logic_vector(15 downto 0); -- ordered after ADC0[7:0] and ADC1[15:8]\r
+signal lvds_on                  : std_logic_vector(15 downto 0); -- ordered after ADC0[7:0] and ADC1[15:8]\r
+\r
+-- Control signals\r
+signal ctrl_pll                 : std_logic_vector(15 downto 0); -- PLL control register\r
+signal status_pll               : std_logic_vector(15 downto 0); -- PLL status register\r
+signal ctrl_trg                 : std_logic_vector(31 downto 0); -- TRG control register\r
+signal ctrl_lvl                 : std_logic_vector(31 downto 0); -- LVL control register\r
+                                                                       \r
+signal ctrl_bitlow              : std_logic_vector(11 downto 0); -- BIT_LOW setting for APV digital header\r
+signal ctrl_bithigh             : std_logic_vector(11 downto 0); -- BIT_HIGH setting for APV digital header\r
+signal ctrl_flatlow             : std_logic_vector(11 downto 0); -- FLAT_LOW setting\r
+signal ctrl_flathigh            : std_logic_vector(11 downto 0); -- FLAT_HIGH setting\r
+\r
+signal maximum_trg              : std_logic_vector(3 downto 0);\r
+\r
+signal raw_buf_full             : std_logic;\r
+signal eds_buf_full             : std_logic;\r
+signal eds_buf_level            : std_logic_vector(4 downto 0);\r
+\r
+-- regIO data bus\r
+signal regio_addr               : std_logic_vector(c_REGIO_ADDRESS_WIDTH-1 downto 0);\r
+signal regio_read_enable        : std_logic;\r
+signal regio_write_enable       : std_logic;\r
+signal regio_data_wr            : std_logic_vector(c_REGIO_REGISTER_WIDTH-1 downto 0);\r
+signal regio_data_rd            : std_logic_vector(c_REGIO_REGISTER_WIDTH-1 downto 0);\r
+signal regio_dataready          : std_logic;\r
+signal regio_no_more_data       : std_logic;\r
+signal regio_write_ack          : std_logic;\r
+signal regio_unknown_addr       : std_logic;\r
+signal regio_timeout            : std_logic;\r
+\r
+-- common status / control registers from RegIO\r
+signal common_stat_reg          : std_logic_vector(63 downto 0);\r
+signal common_ctrl_reg          : std_logic_vector(63 downto 0);\r
+\r
+-- user defined "quick'n'dirty" registers\r
+signal simple_status            : std_logic_vector(127 downto 0);\r
+signal simple_control           : std_logic_vector(63 downto 0);\r
+\r
+-- debug signals\r
+signal test_reg                 : std_logic_vector(31 downto 0);\r
+signal trbrich_debug            : std_logic_vector(63 downto 0);\r
+signal trgctrl_debug            : std_logic_vector(63 downto 0);\r
+signal slave_debug              : std_logic_vector(63 downto 0);\r
+signal fifo_debug               : std_logic_vector(63 downto 0);\r
+signal raw_buf_debug            : std_logic_vector(63 downto 0);\r
+\r
+-- EDS / BUFFER signals (raw buf -> ped corr)\r
+signal eds_data                 : std_logic_vector(39 downto 0);\r
+signal eds_avail                : std_logic;\r
+signal eds_done                 : std_logic;\r
+signal buf_addr                 : std_logic_vector(6 downto 0);\r
+signal buf_done                 : std_logic;\r
+signal buf_tick                 : std_logic_vector(15 downto 0);\r
+signal buf_start                : std_logic_vector(15 downto 0);\r
+signal buf_ready                : std_logic_vector(15 downto 0); -- just for debugging!\r
+\r
+type reg_38bit_t is array (0 to 15) of std_logic_vector(37 downto 0);\r
+signal buf_data                 : reg_38bit_t;\r
+\r
+signal thr_addr                 : std_logic_vector(6 downto 0);\r
+type reg_18bit_t is array (0 to 15) of std_logic_vector(17 downto 0);\r
+signal thr_data                 : reg_18bit_t;\r
+signal ped_data                 : reg_18bit_t;\r
+\r
+-- FIFO / DHDR signals (ped corr -> ipu stage)\r
+signal dhdr_data                : std_logic_vector(31 downto 0);\r
+signal dhdr_length              : std_logic_vector(15 downto 0);\r
+signal dhdr_store               : std_logic;\r
+signal dhdr_buf_full            : std_logic;\r
+\r
+signal fifo_start               : std_logic;\r
+signal fifo_done                : std_logic;\r
+signal fifo_we                  : std_logic_vector(15 downto 0);\r
+signal fifo_space_req           : std_logic_vector(11 downto 0);\r
+type reg_40bit_t is array (0 to 15) of std_logic_vector(39 downto 0);\r
+signal fifo_data                : reg_40bit_t;\r
+\r
+-- APV control / status signals\r
+type reg_16bit_t is array (0 to 15) of std_logic_vector(15 downto 0);\r
+signal adc_ctrl_reg             : reg_16bit_t;\r
+signal adc_stat_reg             : reg_16bit_t;\r
+\r
+signal debug                    : std_logic_vector(42 downto 0);\r
+signal debug_q                  : std_logic_vector(42 downto 0);\r
+signal debug_qq                 : std_logic_vector(42 downto 0);\r
+signal debug_clk                : std_logic;\r
        \r
-       -- LVL1 application interface\r
-       signal lvl1_trg_type                    : std_logic_vector(3 downto 0);\r
-       signal lvl1_trg_received                : std_logic;\r
-       signal lvl1_trg_number                  : std_logic_vector(15 downto 0);\r
-       signal lvl1_trg_code                    : std_logic_vector(7 downto 0);\r
-       signal lvl1_trg_information             : std_logic_vector(23 downto 0);\r
-       signal lvl1_error_pattern               : std_logic_vector(31 downto 0);\r
-       signal lvl1_trg_release                 : std_logic;\r
-       signal lvl1_trg_missing                 : std_logic;\r
-       signal timing_trg_found                 : std_logic;\r
-\r
-       -- IPU application interface\r
-       signal ipu_number                               : std_logic_vector(15 downto 0);\r
-       signal ipu_information                  : std_logic_vector(7 downto 0);\r
-       signal ipu_start_readout                : std_logic;\r
-       signal ipu_data                                 : std_logic_vector(31 downto 0);\r
-       signal ipu_dataready                    : std_logic;\r
-       signal ipu_readout_finished             : std_logic;\r
-       signal ipu_read                                 : std_logic;\r
-       signal ipu_length                               : std_logic_vector(15 downto 0);\r
-       signal ipu_error_pattern                : std_logic_vector(31 downto 0);\r
-\r
-       signal local_lvl1_counter               : std_logic_vector(15 downto 0);\r
-       signal local_lvl2_counter               : std_logic_vector(15 downto 0);\r
-\r
-       -- ADC signals\r
-       type reg_12bit_t is array (0 to 15) of std_logic_vector(11 downto 0);\r
-       signal adc_raw_data                             : reg_12bit_t; -- ADC specific clock domain\r
-       signal adc_data                                 : reg_12bit_t; -- common APV clock domain\r
-\r
-       signal adc1_testdata                    : std_logic_vector(11 downto 0);\r
-       signal adc0_testdata                    : std_logic_vector(11 downto 0);\r
-       signal adc1_select                              : std_logic_vector(2 downto 0);\r
-       signal adc0_select                              : std_logic_vector(2 downto 0);\r
-\r
-       -- input synchronizing\r
-       signal bp_sector_q                              : std_logic_vector(3 downto 0);\r
-       signal bp_sector_qq                             : std_logic_vector(3 downto 0);\r
-       signal bp_module_q                              : std_logic_vector(3 downto 0);\r
-       signal bp_module_qq                             : std_logic_vector(3 downto 0);\r
-\r
-       signal lsm_state_bits                   : std_logic_vector(3 downto 0);\r
-       signal reset_by_trb                             : std_logic;\r
-       signal global_sync_reset                : std_logic;\r
-\r
-       signal adc0_iodelay                             : std_logic_vector(3 downto 0);\r
-       signal adc1_iodelay                             : std_logic_vector(3 downto 0);\r
-\r
-\r
-\r
--- Components\r
-       -- are now in adcmv2_components.vhd\r
+-- LVL1 application interface\r
+signal lvl1_trg_type            : std_logic_vector(3 downto 0);\r
+signal lvl1_trg_received        : std_logic;\r
+signal lvl1_trg_number          : std_logic_vector(15 downto 0);\r
+signal lvl1_trg_code            : std_logic_vector(7 downto 0);\r
+signal lvl1_trg_information     : std_logic_vector(23 downto 0);\r
+signal lvl1_error_pattern       : std_logic_vector(31 downto 0);\r
+signal lvl1_trg_release         : std_logic;\r
+signal lvl1_trg_missing         : std_logic;\r
+signal lvl1_int_trg_number      : std_logic_vector(15 downto 0);\r
+signal lvl1_int_trg_update      : std_logic;\r
+signal timing_trg_found         : std_logic;\r
+\r
+-- IPU application interface\r
+signal ipu_number               : std_logic_vector(15 downto 0);\r
+signal ipu_information          : std_logic_vector(7 downto 0);\r
+signal ipu_start_readout        : std_logic;\r
+signal ipu_data                 : std_logic_vector(31 downto 0);\r
+signal ipu_dataready            : std_logic;\r
+signal ipu_readout_finished     : std_logic;\r
+signal ipu_read                 : std_logic;\r
+signal ipu_length               : std_logic_vector(15 downto 0);\r
+signal ipu_error_pattern        : std_logic_vector(31 downto 0);\r
+\r
+signal local_lvl1_counter       : std_logic_vector(15 downto 0);\r
+signal local_lvl2_counter       : std_logic_vector(15 downto 0);\r
+\r
+-- ADC signals\r
+type reg_12bit_t is array (0 to 15) of std_logic_vector(11 downto 0);\r
+signal adc_raw_data             : reg_12bit_t; -- ADC specific clock domain\r
+signal adc_data                 : reg_12bit_t; -- common APV clock domain\r
+\r
+signal adc1_testdata            : std_logic_vector(11 downto 0);\r
+signal adc0_testdata            : std_logic_vector(11 downto 0);\r
+signal adc1_select              : std_logic_vector(2 downto 0);\r
+signal adc0_select              : std_logic_vector(2 downto 0);\r
+\r
+-- input synchronizing\r
+signal bp_sector_q              : std_logic_vector(3 downto 0);\r
+signal bp_sector_qq             : std_logic_vector(3 downto 0);\r
+signal bp_module_q              : std_logic_vector(3 downto 0);\r
+signal bp_module_qq             : std_logic_vector(3 downto 0);\r
+\r
+signal lsm_state_bits           : std_logic_vector(3 downto 0);\r
+signal reset_by_trb             : std_logic;\r
+signal global_sync_reset        : std_logic;\r
+\r
+signal adc0_iodelay             : std_logic_vector(3 downto 0);\r
+signal adc1_iodelay             : std_logic_vector(3 downto 0);\r
+\r
        \r
 begin\r
 \r
@@ -272,13 +271,14 @@ async_reset <= uc_reset; -- uC reset pin
 -- Reset handler / spike surpression  --\r
 ----------------------------------------\r
 THE_RESET_HANDLER: reset_handler\r
-port map( CLEAR_IN                     => async_reset,\r
-                 RESET_IN                      => '0',\r
-                 CLK_IN                        => sysclk,\r
-                 TRB_RESET_IN          => reset_by_trb,\r
-                 RESET_OUT                     => global_sync_reset,\r
-                 DEBUG_OUT                     => open\r
-               );\r
+port map( \r
+       CLEAR_IN        => async_reset,\r
+       RESET_IN        => '0',\r
+       CLK_IN          => sysclk,\r
+       TRB_RESET_IN    => reset_by_trb,\r
+       RESET_OUT       => global_sync_reset,\r
+       DEBUG_OUT       => open\r
+);\r
 \r
 \r
 ----------------------------------------\r
@@ -286,96 +286,114 @@ port map( CLEAR_IN                       => async_reset,
 ----------------------------------------\r
 -- 100MHz PLL, generating 40MHz and phase shifted 40MHz\r
 THE_40M_PLL: PLL_40M\r
-port map( CLK          => clk100m,\r
-                 RESET         => clk40m_reset,\r
-                 DPAMODE       => '1', -- dynamic control \r
-                 DPHASE0       => ctrl_pll(0),\r
-                 DPHASE1       => ctrl_pll(1),\r
-                 DPHASE2       => ctrl_pll(2),\r
-                 DPHASE3       => ctrl_pll(3),\r
-                 CLKOP         => clk_apv, -- fixed phase, used for logic \r
-                 CLKOS         => clk_adc, -- phase adjustable, for ODDRXC only\r
-                 LOCK          => clk40m_locked\r
-               );\r
+port map( \r
+       CLK         => clk100m,\r
+       RESET       => clk40m_reset,\r
+       DPAMODE     => '1', -- dynamic control \r
+       DPHASE0     => ctrl_pll(0),\r
+       DPHASE1     => ctrl_pll(1),\r
+       DPHASE2     => ctrl_pll(2),\r
+       DPHASE3     => ctrl_pll(3),\r
+       CLKOP       => clk_apv, -- fixed phase, used for logic \r
+       CLKOS       => clk_adc, -- phase adjustable, for ODDRXC only\r
+       LOCK        => clk40m_locked\r
+);\r
 clk40m_reset <= ctrl_pll(7);\r
 \r
 -- 100MHz DLL, used for clock injection delay removal\r
 THE_100M_DLL: dll_100m\r
-port map( CLK          => clk100m,\r
-                 RESETN        => '1',\r
-                 ALUHOLD       => '0',\r
-                 CLKOP         => sysclk,\r
-                 CLKOS         => open,\r
-                 LOCK          => clk100m_locked\r
-               );\r
+port map( \r
+       CLK         => clk100m,\r
+       RESETN      => '1',\r
+       ALUHOLD     => '0',\r
+       CLKOP       => sysclk,\r
+       CLKOS       => open,\r
+       LOCK        => clk100m_locked\r
+);\r
 \r
 \r
 ----------------------------------------\r
 -- TRB endpoint                       --\r
 ----------------------------------------\r
 THE_RICH_TRB: rich_trb\r
-port map( CLK100M_IN                           => clk100m, -- SerDes exclusive clock\r
-                 SYSCLK_IN                                     => sysclk, -- fabric clock\r
-                 RESET_IN                                      => global_sync_reset,\r
-                 SD_RXD_P_IN                           => hdinp2,\r
-                 SD_RXD_N_IN                           => hdinn2,\r
-                 SD_TXD_P_OUT                          => hdoutp2,     \r
-                 SD_TXD_N_OUT                          => hdoutn2,\r
-                 SD_PRESENT_IN                         => sd_present,\r
-                 SD_TXDIS_OUT                          => sd_txdis,\r
-                 SD_LOS_IN                                     => sd_los,\r
-                 ONEWIRE_INOUT                         => adcm_onewire,\r
-                 -- common regIO status / control registers\r
-             COMMON_STAT_REG_IN                => common_stat_reg,\r
-             COMMON_CTRL_REG_OUT               => common_ctrl_reg,\r
-             -- status register input to regIO / control register output from regIO\r
-             CONTROL_OUT                               => simple_control,\r
-                 STATUS_IN                                     => simple_status,\r
-                 -- LVL1 signals\r
-                 LVL1_TRG_TYPE_OUT                     => lvl1_trg_type,\r
-                 LVL1_TRG_RECEIVED_OUT         => lvl1_trg_received,\r
-                 LVL1_TRG_NUMBER_OUT           => lvl1_trg_number,\r
-                 LVL1_TRG_CODE_OUT                     => lvl1_trg_code,\r
-                 LVL1_TRG_INFORMATION_OUT      => lvl1_trg_information,\r
-                 LVL1_ERROR_PATTERN_IN         => lvl1_error_pattern,\r
-                 LVL1_TRG_RELEASE_IN           => lvl1_trg_release,\r
-             TIMING_TRG_FOUND_IN               => timing_trg_found,\r
-                 -- IPU data channel signals (yes, we will use ComputeNodes (tm) (R) (C) one day... :-)\r
-                 IPU_NUMBER_OUT                        => ipu_number,\r
-                 IPU_INFORMATION_OUT           => ipu_information,\r
-                 IPU_START_READOUT_OUT         => ipu_start_readout,\r
-                 IPU_DATA_IN                           => ipu_data,\r
-                 IPU_DATAREADY_IN                      => ipu_dataready,\r
-                 IPU_READOUT_FINISHED_IN       => ipu_readout_finished,\r
-                 IPU_READ_OUT                          => ipu_read,\r
-                 IPU_LENGTH_IN                         => ipu_length,\r
-                 IPU_ERROR_PATTERN_IN          => ipu_error_pattern,\r
-                 -- regIO bus\r
-             REGIO_ADDR_OUT                    => regio_addr,\r
-             REGIO_READ_ENABLE_OUT             => regio_read_enable,\r
-             REGIO_WRITE_ENABLE_OUT    => regio_write_enable,\r
-             REGIO_DATA_OUT                    => regio_data_wr,\r
-             REGIO_DATA_IN                             => regio_data_rd,\r
-             REGIO_DATAREADY_IN                => regio_dataready,\r
-             REGIO_NO_MORE_DATA_IN             => regio_no_more_data,\r
-             REGIO_WRITE_ACK_IN                => regio_write_ack,\r
-             REGIO_UNKNOWN_ADDR_IN             => regio_unknown_addr,\r
-             REGIO_TIMEOUT_OUT                 => regio_timeout,\r
-             -- status LEDs\r
-                 LED_LINK_STAT                         => fpga_led_link,\r
-                 LED_LINK_TXD                          => fpga_led_txd,\r
-                 LED_LINK_RXD                          => fpga_led_rxd,\r
-                 LINK_BSM_OUT                          => lsm_state_bits, -- LinkStateMachine bits\r
-                 RESET_OUT                                     => reset_by_trb,\r
-                 DEBUG                                         => trbrich_debug --open \r
-               );\r
+port map( \r
+       CLK100M_IN                  => clk100m, -- SerDes exclusive clock\r
+       SYSCLK_IN                   => sysclk, -- fabric clock\r
+       RESET_IN                    => global_sync_reset,\r
+       SD_RXD_P_IN                 => hdinp2,\r
+       SD_RXD_N_IN                 => hdinn2,\r
+       SD_TXD_P_OUT                => hdoutp2, \r
+       SD_TXD_N_OUT                => hdoutn2,\r
+       SD_PRESENT_IN               => sd_present,\r
+       SD_TXDIS_OUT                => sd_txdis,\r
+       SD_LOS_IN                   => sd_los,\r
+       ONEWIRE_INOUT               => adcm_onewire,\r
+       -- common regIO status / control registers\r
+       COMMON_STAT_REG_IN          => common_stat_reg,\r
+       COMMON_CTRL_REG_OUT         => common_ctrl_reg,\r
+       -- status register input to regIO / control register output from regIO\r
+       CONTROL_OUT                 => simple_control,\r
+       STATUS_IN                   => simple_status,\r
+       -- LVL1 signals\r
+       LVL1_TRG_TYPE_OUT           => lvl1_trg_type,\r
+       LVL1_TRG_RECEIVED_OUT       => lvl1_trg_received,\r
+       LVL1_TRG_NUMBER_OUT         => lvl1_trg_number,\r
+       LVL1_TRG_CODE_OUT           => lvl1_trg_code,\r
+       LVL1_TRG_INFORMATION_OUT    => lvl1_trg_information,\r
+       LVL1_ERROR_PATTERN_IN       => lvl1_error_pattern,\r
+       LVL1_TRG_RELEASE_IN         => lvl1_trg_release,\r
+       LVL1_INT_TRG_NUMBER_OUT     => lvl1_int_trg_number, -- internal trigger counter\r
+       LVL1_INT_TRG_UPDATE_OUT     => lvl1_int_trg_update, -- update on internal trigger counter\r
+       TIMING_TRG_FOUND_IN         => timing_trg_found,\r
+       -- IPU data channel signals (yes, we will use ComputeNodes (tm) (R) (C) one day... :-)\r
+       IPU_NUMBER_OUT              => ipu_number,\r
+       IPU_INFORMATION_OUT         => ipu_information,\r
+       IPU_START_READOUT_OUT       => ipu_start_readout,\r
+       IPU_DATA_IN                 => ipu_data,\r
+       IPU_DATAREADY_IN            => ipu_dataready,\r
+       IPU_READOUT_FINISHED_IN     => ipu_readout_finished,\r
+       IPU_READ_OUT                => ipu_read,\r
+       IPU_LENGTH_IN               => ipu_length,\r
+       IPU_ERROR_PATTERN_IN        => ipu_error_pattern,\r
+       -- regIO bus\r
+       REGIO_ADDR_OUT              => regio_addr,\r
+       REGIO_READ_ENABLE_OUT       => regio_read_enable,\r
+       REGIO_WRITE_ENABLE_OUT      => regio_write_enable,\r
+       REGIO_DATA_OUT              => regio_data_wr,\r
+       REGIO_DATA_IN               => regio_data_rd,\r
+       REGIO_DATAREADY_IN          => regio_dataready,\r
+       REGIO_NO_MORE_DATA_IN       => regio_no_more_data,\r
+       REGIO_WRITE_ACK_IN          => regio_write_ack,\r
+       REGIO_UNKNOWN_ADDR_IN       => regio_unknown_addr,\r
+       REGIO_TIMEOUT_OUT           => regio_timeout,\r
+       -- status LEDs\r
+       LED_LINK_STAT               => fpga_led_link,\r
+       LED_LINK_TXD                => fpga_led_txd,\r
+       LED_LINK_RXD                => fpga_led_rxd,\r
+       LINK_BSM_OUT                => lsm_state_bits, -- LinkStateMachine bits\r
+       RESET_OUT                   => reset_by_trb,\r
+       DEBUG                       => trbrich_debug --open \r
+);\r
+\r
+-- common control register bit definitions\r
+-- [31:24] ---\r
+-- [23:16] fake timing trigger\r
+-- [15]    reboot FPGA\r
+-- [14:11] --- \r
+-- [10]    reset sequence counter\r
+-- [9:4]   ---\r
+-- [3]     master reset, reset the whole endpoint\r
+-- [2]     empty IPU chain, reset IPU logic\r
+-- [1]     reset trigger logic\r
+-- [0]     reset frontends\r
 \r
 -- LVL1 error pattern, to be sent back to CTS with each trigger\r
-lvl1_error_pattern(31 downto 22) <= (others => '0');\r
+lvl1_error_pattern(31 downto 23) <= (others => '0');\r
+lvl1_error_pattern(22)           <= '0'; -- not configured\r
 lvl1_error_pattern(21)           <= '0'; -- buffers almost full\r
 lvl1_error_pattern(20)           <= '0'; -- buffers half full\r
 lvl1_error_pattern(19 downto 18) <= (others => '0');\r
-lvl1_error_pattern(17)           <= '0'; -- lvl1_trg_missing; -- missing timing trigger\r
+lvl1_error_pattern(17)           <= '0'; -- missing timing trigger (done by Jan)\r
 lvl1_error_pattern(16)           <= '0'; -- LVL1 tag mismatch with local counters (done by Jan)\r
 lvl1_error_pattern(15 downto 0)  <= (others => '0'); \r
 \r
@@ -447,7 +465,7 @@ ena_lvds(4) <= adc_on(6)  or lvds_on(6);
 ena_lvds(5) <= adc_on(1)  or lvds_on(1);\r
 ena_lvds(6) <= adc_on(7)  or lvds_on(7);\r
 ena_lvds(7) <= adc_on(0)  or lvds_on(0);\r
-                                    \r
+                                                                       \r
 enb_lvds(0) <= adc_on(13) or lvds_on(13);\r
 enb_lvds(1) <= adc_on(10) or lvds_on(10);\r
 enb_lvds(2) <= adc_on(12) or lvds_on(12);\r
@@ -464,141 +482,142 @@ bp_led <= '1'; -- LED is against GND!
 -- internal slave bus -> slow control --\r
 ----------------------------------------\r
 THE_SLAVE_BUS: slave_bus\r
-port map( CLK_IN                                               => sysclk,\r
-                 RESET_IN                                              => global_sync_reset,\r
-                 -- RegIO signals\r
-                 REGIO_ADDR_IN                                 => regio_addr,\r
-                 REGIO_DATA_IN                                 => regio_data_wr,\r
-                 REGIO_DATA_OUT                                => regio_data_rd,\r
-                 REGIO_READ_ENABLE_IN                  => regio_read_enable,\r
-                 REGIO_WRITE_ENABLE_IN                 => regio_write_enable,\r
-                 REGIO_TIMEOUT_IN                              => regio_timeout,\r
-                 REGIO_DATAREADY_OUT                   => regio_dataready,\r
-                 REGIO_WRITE_ACK_OUT                   => regio_write_ack,\r
-                 REGIO_NO_MORE_DATA_OUT                => regio_no_more_data,\r
-                 REGIO_UNKNOWN_ADDR_OUT                => regio_unknown_addr,\r
-                 -- I2C connections\r
-                 SDA_IN                                                => apv_sda_in,\r
-                 SDA_OUT                                               => apv_sda_out,\r
-                 SCL_IN                                                => apv_scl_in,\r
-                 SCL_OUT                                               => apv_scl_out,\r
-                 -- 1Wire connections\r
-                 ONEWIRE_START_IN                              => '0', -- not used yet\r
-                 ONEWIRE_INOUT(15 downto 8)    => apv1_1w(7 downto 0),\r
-                 ONEWIRE_INOUT(7 downto 0)             => apv0_1w(7 downto 0),\r
-                 BP_ONEWIRE_INOUT                              => bp_onewire,\r
-                 -- SPI connections\r
-                 SPI_CS_OUT                                    => u_spi_cs,\r
-                 SPI_SCK_OUT                                   => u_spi_sck,\r
-                 SPI_SDI_IN                                    => u_spi_sdo,\r
-                 SPI_SDO_OUT                                   => u_spi_sdi,\r
-                 -- ADC 0 SPI connections\r
-                 SPI_ADC0_CS_OUT                               => adc0_cs,\r
-                 SPI_ADC0_SCK_OUT                              => adc0_sck,\r
-                 SPI_ADC0_SDO_OUT                              => adc0_sdi,\r
-                 ADC0_PLL_LOCKED_IN                    => adc0_valid,\r
-                 ADC0_PD_OUT                                   => adc0_powerdown,\r
-                 ADC0_RST_OUT                                  => adc0_reset,\r
-                 ADC0_DEL_OUT                                  => adc0_iodelay,\r
-                 ADC0_CLK_IN                                   => clk_apv,\r
-                 ADC0_DATA_IN                                  => adc0_testdata,\r
-                 ADC0_SEL_OUT                                  => adc0_select,\r
-                 APV0_RST_OUT                                  => apv0_reset,\r
-                 -- ADC 0 SPI connections\r
-                 SPI_ADC1_CS_OUT                               => adc1_cs,\r
-                 SPI_ADC1_SCK_OUT                              => adc1_sck,\r
-                 SPI_ADC1_SDO_OUT                              => adc1_sdi,\r
-                 ADC1_PLL_LOCKED_IN                    => adc1_valid,\r
-                 ADC1_PD_OUT                                   => adc1_powerdown,\r
-                 ADC1_RST_OUT                                  => adc1_reset,\r
-                 ADC1_DEL_OUT                                  => adc1_iodelay,\r
-                 ADC1_CLK_IN                                   => clk_apv,\r
-                 ADC1_DATA_IN                                  => adc1_testdata,\r
-                 ADC1_SEL_OUT                                  => adc1_select,\r
-                 APV1_RST_OUT                                  => apv1_reset,\r
-                 -- backplane identifier\r
-                 BACKPLANE_IN                                  => bp_module_qq(2 downto 0),\r
-                 -- pedestal interface\r
-                 PED_ADDR_IN                                   => buf_addr,\r
-                 PED_DATA_0_OUT                                => ped_data(0),\r
-                 PED_DATA_1_OUT                                => ped_data(1),\r
-                 PED_DATA_2_OUT                                => ped_data(2),\r
-                 PED_DATA_3_OUT                                => ped_data(3),\r
-                 PED_DATA_4_OUT                                => ped_data(4),\r
-                 PED_DATA_5_OUT                                => ped_data(5),\r
-                 PED_DATA_6_OUT                                => ped_data(6),\r
-                 PED_DATA_7_OUT                                => ped_data(7),\r
-                 PED_DATA_8_OUT                                => ped_data(8),\r
-                 PED_DATA_9_OUT                                => ped_data(9),\r
-                 PED_DATA_10_OUT                               => ped_data(10),\r
-                 PED_DATA_11_OUT                               => ped_data(11),\r
-                 PED_DATA_12_OUT                               => ped_data(12),\r
-                 PED_DATA_13_OUT                               => ped_data(13),\r
-                 PED_DATA_14_OUT                               => ped_data(14),\r
-                 PED_DATA_15_OUT                               => ped_data(15),\r
-                 -- threshold interface\r
-                 THR_ADDR_IN                                   => thr_addr,\r
-                 THR_DATA_0_OUT                                => thr_data(0),\r
-                 THR_DATA_1_OUT                                => thr_data(1),\r
-                 THR_DATA_2_OUT                                => thr_data(2),\r
-                 THR_DATA_3_OUT                                => thr_data(3),\r
-                 THR_DATA_4_OUT                                => thr_data(4),\r
-                 THR_DATA_5_OUT                                => thr_data(5),\r
-                 THR_DATA_6_OUT                                => thr_data(6),\r
-                 THR_DATA_7_OUT                                => thr_data(7),\r
-                 THR_DATA_8_OUT                                => thr_data(8),\r
-                 THR_DATA_9_OUT                                => thr_data(9),\r
-                 THR_DATA_10_OUT                               => thr_data(10),\r
-                 THR_DATA_11_OUT                               => thr_data(11),\r
-                 THR_DATA_12_OUT                               => thr_data(12),\r
-                 THR_DATA_13_OUT                               => thr_data(13),\r
-                 THR_DATA_14_OUT                               => thr_data(14),\r
-                 THR_DATA_15_OUT                               => thr_data(15),\r
-                 -- APV control / status\r
-                 CTRL_0_OUT                                    => adc_ctrl_reg(0),\r
-                 CTRL_1_OUT                                    => adc_ctrl_reg(1),\r
-                 CTRL_2_OUT                                    => adc_ctrl_reg(2),\r
-                 CTRL_3_OUT                                    => adc_ctrl_reg(3),\r
-                 CTRL_4_OUT                                    => adc_ctrl_reg(4),\r
-                 CTRL_5_OUT                                    => adc_ctrl_reg(5),\r
-                 CTRL_6_OUT                                    => adc_ctrl_reg(6),\r
-                 CTRL_7_OUT                                    => adc_ctrl_reg(7),\r
-                 CTRL_8_OUT                                    => adc_ctrl_reg(8),\r
-                 CTRL_9_OUT                                    => adc_ctrl_reg(9),\r
-                 CTRL_10_OUT                                   => adc_ctrl_reg(10),\r
-                 CTRL_11_OUT                                   => adc_ctrl_reg(11),\r
-                 CTRL_12_OUT                                   => adc_ctrl_reg(12),\r
-                 CTRL_13_OUT                                   => adc_ctrl_reg(13),\r
-                 CTRL_14_OUT                                   => adc_ctrl_reg(14),\r
-                 CTRL_15_OUT                                   => adc_ctrl_reg(15),\r
-                 STAT_0_IN                                             => adc_stat_reg(0),\r
-                 STAT_1_IN                                             => adc_stat_reg(1),\r
-                 STAT_2_IN                                             => adc_stat_reg(2),\r
-                 STAT_3_IN                                             => adc_stat_reg(3),\r
-                 STAT_4_IN                                             => adc_stat_reg(4),\r
-                 STAT_5_IN                                             => adc_stat_reg(5),\r
-                 STAT_6_IN                                             => adc_stat_reg(6),\r
-                 STAT_7_IN                                             => adc_stat_reg(7),\r
-                 STAT_8_IN                                             => adc_stat_reg(8),\r
-                 STAT_9_IN                                             => adc_stat_reg(9),\r
-                 STAT_10_IN                                    => adc_stat_reg(10),\r
-                 STAT_11_IN                                    => adc_stat_reg(11),\r
-                 STAT_12_IN                                    => adc_stat_reg(12),\r
-                 STAT_13_IN                                    => adc_stat_reg(13),\r
-                 STAT_14_IN                                    => adc_stat_reg(14),\r
-                 STAT_15_IN                                    => adc_stat_reg(15),\r
-                 -- some control signals\r
-                 CTRL_LVL_OUT                                  => ctrl_lvl,\r
-                 CTRL_TRG_OUT                                  => ctrl_trg,\r
-                 CTRL_PLL_OUT                                  => ctrl_pll,\r
-                 STATUS_PLL_IN                                 => status_pll,\r
-                 -- temporary stuff \r
-                 TEST_REG_IN                                   => test_reg, -- short cut \r
-                 TEST_REG_OUT                                  => test_reg,\r
-                 -- Debug \r
-                 DEBUG_OUT                                             => slave_debug, --open\r
-                 STAT                                                  => open\r
-               ); \r
+port map( \r
+       CLK_IN                      => sysclk,\r
+       RESET_IN                    => global_sync_reset,\r
+       -- RegIO signals\r
+       REGIO_ADDR_IN               => regio_addr,\r
+       REGIO_DATA_IN               => regio_data_wr,\r
+       REGIO_DATA_OUT              => regio_data_rd,\r
+       REGIO_READ_ENABLE_IN        => regio_read_enable,\r
+       REGIO_WRITE_ENABLE_IN       => regio_write_enable,\r
+       REGIO_TIMEOUT_IN            => regio_timeout,\r
+       REGIO_DATAREADY_OUT         => regio_dataready,\r
+       REGIO_WRITE_ACK_OUT         => regio_write_ack,\r
+       REGIO_NO_MORE_DATA_OUT      => regio_no_more_data,\r
+       REGIO_UNKNOWN_ADDR_OUT      => regio_unknown_addr,\r
+       -- I2C connections\r
+       SDA_IN                      => apv_sda_in,\r
+       SDA_OUT                     => apv_sda_out,\r
+       SCL_IN                      => apv_scl_in,\r
+       SCL_OUT                     => apv_scl_out,\r
+       -- 1Wire connections\r
+       ONEWIRE_START_IN            => '0', -- not used yet\r
+       ONEWIRE_INOUT(15 downto 8)  => apv1_1w(7 downto 0),\r
+       ONEWIRE_INOUT(7 downto 0)   => apv0_1w(7 downto 0),\r
+       BP_ONEWIRE_INOUT            => bp_onewire,\r
+       -- SPI connections\r
+       SPI_CS_OUT                  => u_spi_cs,\r
+       SPI_SCK_OUT                 => u_spi_sck,\r
+       SPI_SDI_IN                  => u_spi_sdo,\r
+       SPI_SDO_OUT                 => u_spi_sdi,\r
+       -- ADC 0 SPI connections\r
+       SPI_ADC0_CS_OUT             => adc0_cs,\r
+       SPI_ADC0_SCK_OUT            => adc0_sck,\r
+       SPI_ADC0_SDO_OUT            => adc0_sdi,\r
+       ADC0_PLL_LOCKED_IN          => adc0_valid,\r
+       ADC0_PD_OUT                 => adc0_powerdown,\r
+       ADC0_RST_OUT                => adc0_reset,\r
+       ADC0_DEL_OUT                => adc0_iodelay,\r
+       ADC0_CLK_IN                 => clk_apv,\r
+       ADC0_DATA_IN                => adc0_testdata,\r
+       ADC0_SEL_OUT                => adc0_select,\r
+       APV0_RST_OUT                => apv0_reset,\r
+       -- ADC 0 SPI connections\r
+       SPI_ADC1_CS_OUT             => adc1_cs,\r
+       SPI_ADC1_SCK_OUT            => adc1_sck,\r
+       SPI_ADC1_SDO_OUT            => adc1_sdi,\r
+       ADC1_PLL_LOCKED_IN          => adc1_valid,\r
+       ADC1_PD_OUT                 => adc1_powerdown,\r
+       ADC1_RST_OUT                => adc1_reset,\r
+       ADC1_DEL_OUT                => adc1_iodelay,\r
+       ADC1_CLK_IN                 => clk_apv,\r
+       ADC1_DATA_IN                => adc1_testdata,\r
+       ADC1_SEL_OUT                => adc1_select,\r
+       APV1_RST_OUT                => apv1_reset,\r
+       -- backplane identifier\r
+       BACKPLANE_IN                => bp_module_qq(2 downto 0),\r
+       -- pedestal interface\r
+       PED_ADDR_IN                 => buf_addr,\r
+       PED_DATA_0_OUT              => ped_data(0),\r
+       PED_DATA_1_OUT              => ped_data(1),\r
+       PED_DATA_2_OUT              => ped_data(2),\r
+       PED_DATA_3_OUT              => ped_data(3),\r
+       PED_DATA_4_OUT              => ped_data(4),\r
+       PED_DATA_5_OUT              => ped_data(5),\r
+       PED_DATA_6_OUT              => ped_data(6),\r
+       PED_DATA_7_OUT              => ped_data(7),\r
+       PED_DATA_8_OUT              => ped_data(8),\r
+       PED_DATA_9_OUT              => ped_data(9),\r
+       PED_DATA_10_OUT             => ped_data(10),\r
+       PED_DATA_11_OUT             => ped_data(11),\r
+       PED_DATA_12_OUT             => ped_data(12),\r
+       PED_DATA_13_OUT             => ped_data(13),\r
+       PED_DATA_14_OUT             => ped_data(14),\r
+       PED_DATA_15_OUT             => ped_data(15),\r
+       -- threshold interface\r
+       THR_ADDR_IN                 => thr_addr,\r
+       THR_DATA_0_OUT              => thr_data(0),\r
+       THR_DATA_1_OUT              => thr_data(1),\r
+       THR_DATA_2_OUT              => thr_data(2),\r
+       THR_DATA_3_OUT              => thr_data(3),\r
+       THR_DATA_4_OUT              => thr_data(4),\r
+       THR_DATA_5_OUT              => thr_data(5),\r
+       THR_DATA_6_OUT              => thr_data(6),\r
+       THR_DATA_7_OUT              => thr_data(7),\r
+       THR_DATA_8_OUT              => thr_data(8),\r
+       THR_DATA_9_OUT              => thr_data(9),\r
+       THR_DATA_10_OUT             => thr_data(10),\r
+       THR_DATA_11_OUT             => thr_data(11),\r
+       THR_DATA_12_OUT             => thr_data(12),\r
+       THR_DATA_13_OUT             => thr_data(13),\r
+       THR_DATA_14_OUT             => thr_data(14),\r
+       THR_DATA_15_OUT             => thr_data(15),\r
+       -- APV control / status\r
+       CTRL_0_OUT                  => adc_ctrl_reg(0),\r
+       CTRL_1_OUT                  => adc_ctrl_reg(1),\r
+       CTRL_2_OUT                  => adc_ctrl_reg(2),\r
+       CTRL_3_OUT                  => adc_ctrl_reg(3),\r
+       CTRL_4_OUT                  => adc_ctrl_reg(4),\r
+       CTRL_5_OUT                  => adc_ctrl_reg(5),\r
+       CTRL_6_OUT                  => adc_ctrl_reg(6),\r
+       CTRL_7_OUT                  => adc_ctrl_reg(7),\r
+       CTRL_8_OUT                  => adc_ctrl_reg(8),\r
+       CTRL_9_OUT                  => adc_ctrl_reg(9),\r
+       CTRL_10_OUT                 => adc_ctrl_reg(10),\r
+       CTRL_11_OUT                 => adc_ctrl_reg(11),\r
+       CTRL_12_OUT                 => adc_ctrl_reg(12),\r
+       CTRL_13_OUT                 => adc_ctrl_reg(13),\r
+       CTRL_14_OUT                 => adc_ctrl_reg(14),\r
+       CTRL_15_OUT                 => adc_ctrl_reg(15),\r
+       STAT_0_IN                   => adc_stat_reg(0),\r
+       STAT_1_IN                   => adc_stat_reg(1),\r
+       STAT_2_IN                   => adc_stat_reg(2),\r
+       STAT_3_IN                   => adc_stat_reg(3),\r
+       STAT_4_IN                   => adc_stat_reg(4),\r
+       STAT_5_IN                   => adc_stat_reg(5),\r
+       STAT_6_IN                   => adc_stat_reg(6),\r
+       STAT_7_IN                   => adc_stat_reg(7),\r
+       STAT_8_IN                   => adc_stat_reg(8),\r
+       STAT_9_IN                   => adc_stat_reg(9),\r
+       STAT_10_IN                  => adc_stat_reg(10),\r
+       STAT_11_IN                  => adc_stat_reg(11),\r
+       STAT_12_IN                  => adc_stat_reg(12),\r
+       STAT_13_IN                  => adc_stat_reg(13),\r
+       STAT_14_IN                  => adc_stat_reg(14),\r
+       STAT_15_IN                  => adc_stat_reg(15),\r
+       -- some control signals\r
+       CTRL_LVL_OUT                => ctrl_lvl,\r
+       CTRL_TRG_OUT                => ctrl_trg,\r
+       CTRL_PLL_OUT                => ctrl_pll,\r
+       STATUS_PLL_IN               => status_pll,\r
+       -- temporary stuff \r
+       TEST_REG_IN                 => test_reg, -- short cut \r
+       TEST_REG_OUT                => test_reg,\r
+       -- Debug \r
+       DEBUG_OUT                   => slave_debug, --open\r
+       STAT                        => open\r
+); \r
 \r
 -- PLL status register \r
 status_pll(15)          <= clk100m_locked;\r
@@ -679,420 +698,434 @@ lvds_on(0)       <= adc_ctrl_reg(0)(1);
 -- IPU endpoint for data transport    --\r
 ----------------------------------------\r
 THE_IPU_STAGE: ipu_fifo_stage \r
-port map( CLK_IN                                       => sysclk,\r
-                 RESET_IN                                      => global_sync_reset,\r
-                 -- Slow control signals        \r
-                 SECTOR_IN                                     => bp_sector_qq(2 downto 0), \r
-                 MODULE_IN                                     => bp_module_qq(2 downto 0), \r
-                 -- IPU channel connections \r
-                 IPU_NUMBER_IN                         => ipu_number,\r
-                 IPU_INFORMATION_IN            => ipu_information,\r
-                 IPU_START_READOUT_IN          => ipu_start_readout,\r
-                 IPU_DATA_OUT                          => ipu_data,\r
-                 IPU_DATAREADY_OUT                     => ipu_dataready,\r
-                 IPU_READOUT_FINISHED_OUT      => ipu_readout_finished,\r
-                 IPU_READ_IN                           => ipu_read,\r
-                 IPU_LENGTH_OUT                        => ipu_length,\r
-                 IPU_ERROR_PATTERN_OUT         => ipu_error_pattern,\r
-                 LVL2_COUNTER_OUT                      => local_lvl2_counter,\r
-                 -- DHDR buffer input \r
-                 DHDR_DATA_IN                          => dhdr_data,\r
-                 DHDR_LENGTH_IN                        => dhdr_length,\r
-                 DHDR_STORE_IN                         => dhdr_store,\r
-                 DHDR_BUF_FULL_OUT                     => dhdr_buf_full,\r
-                 -- processed data input\r
-                 FIFO_START_IN                         => fifo_start,\r
-                 FIFO_0_DATA_IN                        => fifo_data(0),\r
-                 FIFO_1_DATA_IN                        => fifo_data(1),\r
-                 FIFO_2_DATA_IN                        => fifo_data(2),\r
-                 FIFO_3_DATA_IN                        => fifo_data(3),\r
-                 FIFO_4_DATA_IN                        => fifo_data(4),\r
-                 FIFO_5_DATA_IN                        => fifo_data(5),\r
-                 FIFO_6_DATA_IN                        => fifo_data(6),\r
-                 FIFO_7_DATA_IN                        => fifo_data(7),\r
-                 FIFO_8_DATA_IN                        => fifo_data(8),\r
-                 FIFO_9_DATA_IN                        => fifo_data(9),\r
-                 FIFO_10_DATA_IN                       => fifo_data(10),\r
-                 FIFO_11_DATA_IN                       => fifo_data(11),\r
-                 FIFO_12_DATA_IN                       => fifo_data(12),\r
-                 FIFO_13_DATA_IN                       => fifo_data(13),\r
-                 FIFO_14_DATA_IN                       => fifo_data(14),\r
-                 FIFO_15_DATA_IN                       => fifo_data(15),\r
-                 FIFO_WE_IN                            => fifo_we,\r
-                 FIFO_DONE_IN                          => fifo_done,\r
-                 -- Debug signals\r
-                 DBG_BSM_OUT                           => open,\r
-                 DBG_OUT                                       => fifo_debug --open\r
-               );\r
+port map( \r
+       CLK_IN                      => sysclk,\r
+       RESET_IN                    => global_sync_reset,\r
+       -- Slow control signals  \r
+       SECTOR_IN                   => bp_sector_qq(2 downto 0), \r
+       MODULE_IN                   => bp_module_qq(2 downto 0), \r
+       -- IPU channel connections \r
+       IPU_NUMBER_IN               => ipu_number,\r
+       IPU_INFORMATION_IN          => ipu_information,\r
+       IPU_START_READOUT_IN        => ipu_start_readout,\r
+       IPU_DATA_OUT                => ipu_data,\r
+       IPU_DATAREADY_OUT           => ipu_dataready,\r
+       IPU_READOUT_FINISHED_OUT    => ipu_readout_finished,\r
+       IPU_READ_IN                 => ipu_read,\r
+       IPU_LENGTH_OUT              => ipu_length,\r
+       IPU_ERROR_PATTERN_OUT       => ipu_error_pattern,\r
+       LVL2_COUNTER_OUT            => local_lvl2_counter,\r
+       -- DHDR buffer input \r
+       DHDR_DATA_IN                => dhdr_data,\r
+       DHDR_LENGTH_IN              => dhdr_length,\r
+       DHDR_STORE_IN               => dhdr_store,\r
+       DHDR_BUF_FULL_OUT           => dhdr_buf_full,\r
+       -- processed data input\r
+       FIFO_SPACE_REQ_IN           => fifo_space_req,\r
+       FIFO_START_IN               => fifo_start,\r
+       FIFO_0_DATA_IN              => fifo_data(0),\r
+       FIFO_1_DATA_IN              => fifo_data(1),\r
+       FIFO_2_DATA_IN              => fifo_data(2),\r
+       FIFO_3_DATA_IN              => fifo_data(3),\r
+       FIFO_4_DATA_IN              => fifo_data(4),\r
+       FIFO_5_DATA_IN              => fifo_data(5),\r
+       FIFO_6_DATA_IN              => fifo_data(6),\r
+       FIFO_7_DATA_IN              => fifo_data(7),\r
+       FIFO_8_DATA_IN              => fifo_data(8),\r
+       FIFO_9_DATA_IN              => fifo_data(9),\r
+       FIFO_10_DATA_IN             => fifo_data(10),\r
+       FIFO_11_DATA_IN             => fifo_data(11),\r
+       FIFO_12_DATA_IN             => fifo_data(12),\r
+       FIFO_13_DATA_IN             => fifo_data(13),\r
+       FIFO_14_DATA_IN             => fifo_data(14),\r
+       FIFO_15_DATA_IN             => fifo_data(15),\r
+       FIFO_WE_IN                  => fifo_we,\r
+       FIFO_DONE_IN                => fifo_done,\r
+       -- Debug signals\r
+       DBG_BSM_OUT                 => open,\r
+       DBG_OUT                     => fifo_debug --open\r
+);\r
 \r
 \r
 ----------------------------------------\r
 -- Data processing unit               --\r
 ----------------------------------------\r
 THE_PED_CORR_STAGE: ped_corr_ctrl\r
-port map( CLK_IN                       => sysclk,\r
-                 RESET_IN                      => global_sync_reset,\r
-                 EDS_DATA_IN           => eds_data,\r
-                 EDS_AVAIL_IN          => eds_avail,\r
-                 EDS_DONE_OUT          => eds_done,\r
-                 EVT_TYPE_IN           => b"000", -- BUG\r
-                 -- DHDR information -- to next stage\r
-                 DHDR_DATA_OUT         => dhdr_data,\r
-                 DHDR_LENGTH_OUT       => dhdr_length,\r
-                 DHDR_STORE_OUT        => dhdr_store,\r
-                 DHDR_BUF_FULL_IN      => dhdr_buf_full,\r
-                 -- data buffers -- from raw_buf_stage\r
-                 BUF_ADDR_OUT          => buf_addr,\r
-                 BUF_DONE_OUT          => buf_done,\r
-                 BUF_TICK_IN           => buf_tick,\r
-                 BUF_START_IN          => buf_start,\r
-                 -- raw data\r
-                 BUF_0_DATA_IN         => buf_data(0),\r
-                 BUF_1_DATA_IN         => buf_data(1),\r
-                 BUF_2_DATA_IN         => buf_data(2),\r
-                 BUF_3_DATA_IN         => buf_data(3),\r
-                 BUF_4_DATA_IN         => buf_data(4),\r
-                 BUF_5_DATA_IN         => buf_data(5),\r
-                 BUF_6_DATA_IN         => buf_data(6),\r
-                 BUF_7_DATA_IN         => buf_data(7),\r
-                 BUF_8_DATA_IN         => buf_data(8),\r
-                 BUF_9_DATA_IN         => buf_data(9),\r
-                 BUF_10_DATA_IN        => buf_data(10),\r
-                 BUF_11_DATA_IN        => buf_data(11),\r
-                 BUF_12_DATA_IN        => buf_data(12),\r
-                 BUF_13_DATA_IN        => buf_data(13),\r
-                 BUF_14_DATA_IN        => buf_data(14),\r
-                 BUF_15_DATA_IN        => buf_data(15),\r
-                 -- Pedestal data \r
-                 PED_ADDR_OUT          => open, -- BUGBUGBUG\r
-                 PED_0_DATA_IN         => ped_data(0),\r
-                 PED_1_DATA_IN         => ped_data(1),\r
-                 PED_2_DATA_IN         => ped_data(2),\r
-                 PED_3_DATA_IN         => ped_data(3),\r
-                 PED_4_DATA_IN         => ped_data(4),\r
-                 PED_5_DATA_IN         => ped_data(5),\r
-                 PED_6_DATA_IN         => ped_data(6),\r
-                 PED_7_DATA_IN         => ped_data(7),\r
-                 PED_8_DATA_IN         => ped_data(8),\r
-                 PED_9_DATA_IN         => ped_data(9),\r
-                 PED_10_DATA_IN        => ped_data(10),\r
-                 PED_11_DATA_IN        => ped_data(11),\r
-                 PED_12_DATA_IN        => ped_data(12),\r
-                 PED_13_DATA_IN        => ped_data(13),\r
-                 PED_14_DATA_IN        => ped_data(14),\r
-                 PED_15_DATA_IN        => ped_data(15),\r
-                 -- Threshold data\r
-                 THR_ADDR_OUT          => thr_addr,\r
-                 THR_0_DATA_IN         => thr_data(0),\r
-                 THR_1_DATA_IN         => thr_data(1),\r
-                 THR_2_DATA_IN         => thr_data(2),\r
-                 THR_3_DATA_IN         => thr_data(3),\r
-                 THR_4_DATA_IN         => thr_data(4),\r
-                 THR_5_DATA_IN         => thr_data(5),\r
-                 THR_6_DATA_IN         => thr_data(6),\r
-                 THR_7_DATA_IN         => thr_data(7),\r
-                 THR_8_DATA_IN         => thr_data(8),\r
-                 THR_9_DATA_IN         => thr_data(9),\r
-                 THR_10_DATA_IN        => thr_data(10),\r
-                 THR_11_DATA_IN        => thr_data(11),\r
-                 THR_12_DATA_IN        => thr_data(12),\r
-                 THR_13_DATA_IN        => thr_data(13),\r
-                 THR_14_DATA_IN        => thr_data(14),\r
-                 THR_15_DATA_IN        => thr_data(15),\r
-                 -- processed data\r
-                 FIFO_START_OUT        => fifo_start,\r
-                 FIFO_0_DATA_OUT       => fifo_data(0),\r
-                 FIFO_1_DATA_OUT       => fifo_data(1),\r
-                 FIFO_2_DATA_OUT       => fifo_data(2),\r
-                 FIFO_3_DATA_OUT       => fifo_data(3),\r
-                 FIFO_4_DATA_OUT       => fifo_data(4),\r
-                 FIFO_5_DATA_OUT       => fifo_data(5),\r
-                 FIFO_6_DATA_OUT       => fifo_data(6),\r
-                 FIFO_7_DATA_OUT       => fifo_data(7),\r
-                 FIFO_8_DATA_OUT       => fifo_data(8),\r
-                 FIFO_9_DATA_OUT       => fifo_data(9),\r
-                 FIFO_10_DATA_OUT      => fifo_data(10),\r
-                 FIFO_11_DATA_OUT      => fifo_data(11),\r
-                 FIFO_12_DATA_OUT      => fifo_data(12),\r
-                 FIFO_13_DATA_OUT      => fifo_data(13),\r
-                 FIFO_14_DATA_OUT      => fifo_data(14),\r
-                 FIFO_15_DATA_OUT      => fifo_data(15),\r
-                 FIFO_WE_OUT           => fifo_we,\r
-                 FIFO_DONE_OUT         => fifo_done,\r
-                 -- Debug signals\r
-                 DBG_BSM_OUT           => open,\r
-                 DBG_OUT                       => open\r
-               );\r
+port map( \r
+       CLK_IN              => sysclk,\r
+       RESET_IN            => global_sync_reset,\r
+       EDS_DATA_IN         => eds_data,\r
+       EDS_AVAIL_IN        => eds_avail,\r
+       EDS_DONE_OUT        => eds_done,\r
+       -- DHDR information -- to next stage\r
+       DHDR_DATA_OUT       => dhdr_data,\r
+       DHDR_LENGTH_OUT     => dhdr_length,\r
+       DHDR_STORE_OUT      => dhdr_store,\r
+       DHDR_BUF_FULL_IN    => dhdr_buf_full,\r
+       FIFO_SPACE_REQ_OUT  => fifo_space_req, \r
+       -- data buffers -- from raw_buf_stage\r
+       BUF_ADDR_OUT        => buf_addr,\r
+       BUF_DONE_OUT        => buf_done,\r
+       BUF_TICK_IN         => buf_tick,\r
+       BUF_START_IN        => buf_start,\r
+       -- raw data\r
+       BUF_0_DATA_IN       => buf_data(0),\r
+       BUF_1_DATA_IN       => buf_data(1),\r
+       BUF_2_DATA_IN       => buf_data(2),\r
+       BUF_3_DATA_IN       => buf_data(3),\r
+       BUF_4_DATA_IN       => buf_data(4),\r
+       BUF_5_DATA_IN       => buf_data(5),\r
+       BUF_6_DATA_IN       => buf_data(6),\r
+       BUF_7_DATA_IN       => buf_data(7),\r
+       BUF_8_DATA_IN       => buf_data(8),\r
+       BUF_9_DATA_IN       => buf_data(9),\r
+       BUF_10_DATA_IN      => buf_data(10),\r
+       BUF_11_DATA_IN      => buf_data(11),\r
+       BUF_12_DATA_IN      => buf_data(12),\r
+       BUF_13_DATA_IN      => buf_data(13),\r
+       BUF_14_DATA_IN      => buf_data(14),\r
+       BUF_15_DATA_IN      => buf_data(15),\r
+       -- Pedestal data \r
+       PED_ADDR_OUT        => open, -- BUGBUGBUG\r
+       PED_0_DATA_IN       => ped_data(0),\r
+       PED_1_DATA_IN       => ped_data(1),\r
+       PED_2_DATA_IN       => ped_data(2),\r
+       PED_3_DATA_IN       => ped_data(3),\r
+       PED_4_DATA_IN       => ped_data(4),\r
+       PED_5_DATA_IN       => ped_data(5),\r
+       PED_6_DATA_IN       => ped_data(6),\r
+       PED_7_DATA_IN       => ped_data(7),\r
+       PED_8_DATA_IN       => ped_data(8),\r
+       PED_9_DATA_IN       => ped_data(9),\r
+       PED_10_DATA_IN      => ped_data(10),\r
+       PED_11_DATA_IN      => ped_data(11),\r
+       PED_12_DATA_IN      => ped_data(12),\r
+       PED_13_DATA_IN      => ped_data(13),\r
+       PED_14_DATA_IN      => ped_data(14),\r
+       PED_15_DATA_IN      => ped_data(15),\r
+       -- Threshold data\r
+       THR_ADDR_OUT        => thr_addr,\r
+       THR_0_DATA_IN       => thr_data(0),\r
+       THR_1_DATA_IN       => thr_data(1),\r
+       THR_2_DATA_IN       => thr_data(2),\r
+       THR_3_DATA_IN       => thr_data(3),\r
+       THR_4_DATA_IN       => thr_data(4),\r
+       THR_5_DATA_IN       => thr_data(5),\r
+       THR_6_DATA_IN       => thr_data(6),\r
+       THR_7_DATA_IN       => thr_data(7),\r
+       THR_8_DATA_IN       => thr_data(8),\r
+       THR_9_DATA_IN       => thr_data(9),\r
+       THR_10_DATA_IN      => thr_data(10),\r
+       THR_11_DATA_IN      => thr_data(11),\r
+       THR_12_DATA_IN      => thr_data(12),\r
+       THR_13_DATA_IN      => thr_data(13),\r
+       THR_14_DATA_IN      => thr_data(14),\r
+       THR_15_DATA_IN      => thr_data(15),\r
+       -- processed data\r
+       FIFO_START_OUT      => fifo_start,\r
+       FIFO_0_DATA_OUT     => fifo_data(0),\r
+       FIFO_1_DATA_OUT     => fifo_data(1),\r
+       FIFO_2_DATA_OUT     => fifo_data(2),\r
+       FIFO_3_DATA_OUT     => fifo_data(3),\r
+       FIFO_4_DATA_OUT     => fifo_data(4),\r
+       FIFO_5_DATA_OUT     => fifo_data(5),\r
+       FIFO_6_DATA_OUT     => fifo_data(6),\r
+       FIFO_7_DATA_OUT     => fifo_data(7),\r
+       FIFO_8_DATA_OUT     => fifo_data(8),\r
+       FIFO_9_DATA_OUT     => fifo_data(9),\r
+       FIFO_10_DATA_OUT    => fifo_data(10),\r
+       FIFO_11_DATA_OUT    => fifo_data(11),\r
+       FIFO_12_DATA_OUT    => fifo_data(12),\r
+       FIFO_13_DATA_OUT    => fifo_data(13),\r
+       FIFO_14_DATA_OUT    => fifo_data(14),\r
+       FIFO_15_DATA_OUT    => fifo_data(15),\r
+       FIFO_WE_OUT         => fifo_we,\r
+       FIFO_DONE_OUT       => fifo_done,\r
+       -- Debug signals\r
+       DBG_BSM_OUT         => open,\r
+       DBG_OUT             => open\r
+);\r
 \r
 \r
 ------------------------------------------\r
 -- Raw data processing and storage unit --\r
 ------------------------------------------\r
 THE_RAW_BUF_STAGE: raw_buf_stage_new\r
-port map( CLK_IN                       => sysclk,\r
-                 CLK_APV_IN            => clk_apv,\r
-                 RESET_IN                      => reset_by_trb,\r
-                 -- trigger related signals\r
-                 APV_RESET_IN          => apv_reset,           -- (100MHz clock)\r
-                 APV_SYNC_IN           => apv_sync,            -- (40MHz APV clock)\r
-                 APV_FRAME_REQD_IN     => apv_frame_reqd,      -- (100MHz clock)\r
-                 -- ADC0 signals\r
-                 ADC0_VALID_IN         => adc0_valid,\r
-                 ADC0_0_DATA_IN        => adc_data(0),\r
-                 ADC0_1_DATA_IN        => adc_data(1),\r
-                 ADC0_2_DATA_IN        => adc_data(2),\r
-                 ADC0_3_DATA_IN        => adc_data(3),\r
-                 ADC0_4_DATA_IN        => adc_data(4),\r
-                 ADC0_5_DATA_IN        => adc_data(5),\r
-                 ADC0_6_DATA_IN        => adc_data(6),\r
-                 ADC0_7_DATA_IN        => adc_data(7),\r
-                 -- ADC1 signals\r
-                 ADC1_VALID_IN         => adc1_valid,\r
-                 ADC1_0_DATA_IN        => adc_data(8),\r
-                 ADC1_1_DATA_IN        => adc_data(9),\r
-                 ADC1_2_DATA_IN        => adc_data(10),\r
-                 ADC1_3_DATA_IN        => adc_data(11),\r
-                 ADC1_4_DATA_IN        => adc_data(12),\r
-                 ADC1_5_DATA_IN        => adc_data(13),\r
-                 ADC1_6_DATA_IN        => adc_data(14),\r
-                 ADC1_7_DATA_IN        => adc_data(15),\r
-                 -- Slow control registers\r
-                 MAX_TRG_NUM_IN        => maximum_trg,         -- automatically determined\r
-                 BIT_LOW_IN            => ctrl_bitlow,         -- from slow control\r
-                 BIT_HIGH_IN           => ctrl_bithigh,        -- from slow control\r
-                 FL_LOW_IN                     => ctrl_flatlow,        -- from slow control\r
-                 FL_HIGH_IN            => ctrl_flathigh,       -- from slow control\r
-                 APV_ON_IN                     => adc_on,\r
-                 -- 100MHZ synchronous interface\r
-                 -- APV raw buffers\r
-                 BUF_FULL_OUT          => raw_buf_full, -- NEW NEW NEW\r
-                 BUF_ADDR_IN           => buf_addr, -- from ped_corr_ctrl\r
-                 BUF_DONE_IN           => buf_done, -- from ped_corr_ctrl\r
-                 BUF_TICK_OUT          => buf_tick,\r
-                 BUF_START_OUT         => buf_start,\r
-                 BUF_READY_OUT         => buf_ready,\r
-                 BUF_0_DATA_OUT        => buf_data(0),         -- to ped_corr_ctrl \r
-                 BUF_1_DATA_OUT        => buf_data(1),         -- to ped_corr_ctrl\r
-                 BUF_2_DATA_OUT        => buf_data(2),         -- to ped_corr_ctrl\r
-                 BUF_3_DATA_OUT        => buf_data(3),         -- to ped_corr_ctrl\r
-                 BUF_4_DATA_OUT        => buf_data(4),         -- to ped_corr_ctrl\r
-                 BUF_5_DATA_OUT        => buf_data(5),         -- to ped_corr_ctrl\r
-                 BUF_6_DATA_OUT        => buf_data(6),         -- to ped_corr_ctrl\r
-                 BUF_7_DATA_OUT        => buf_data(7),         -- to ped_corr_ctrl\r
-                 BUF_8_DATA_OUT        => buf_data(8),         -- to ped_corr_ctrl\r
-                 BUF_9_DATA_OUT        => buf_data(9),         -- to ped_corr_ctrl\r
-                 BUF_10_DATA_OUT       => buf_data(10),        -- to ped_corr_ctrl\r
-                 BUF_11_DATA_OUT       => buf_data(11),        -- to ped_corr_ctrl\r
-                 BUF_12_DATA_OUT       => buf_data(12),        -- to ped_corr_ctrl\r
-                 BUF_13_DATA_OUT       => buf_data(13),        -- to ped_corr_ctrl\r
-                 BUF_14_DATA_OUT       => buf_data(14),        -- to ped_corr_ctrl\r
-                 BUF_15_DATA_OUT       => buf_data(15),        -- to ped_corr_ctrl\r
-                 -- Debug signals\r
-                 DEBUG_OUT                     => raw_buf_debug --open\r
-               );\r
+port map( \r
+       CLK_IN              => sysclk,\r
+       CLK_APV_IN          => clk_apv,\r
+       RESET_IN            => reset_by_trb,\r
+       -- trigger related signals\r
+       APV_RESET_IN        => apv_reset,       -- (100MHz clock)\r
+       APV_SYNC_IN         => apv_sync,        -- (40MHz APV clock)\r
+       APV_FRAME_REQD_IN   => apv_frame_reqd,  -- (100MHz clock)\r
+       -- ADC0 signals\r
+       ADC0_VALID_IN       => adc0_valid,\r
+       ADC0_0_DATA_IN      => adc_data(0),\r
+       ADC0_1_DATA_IN      => adc_data(1),\r
+       ADC0_2_DATA_IN      => adc_data(2),\r
+       ADC0_3_DATA_IN      => adc_data(3),\r
+       ADC0_4_DATA_IN      => adc_data(4),\r
+       ADC0_5_DATA_IN      => adc_data(5),\r
+       ADC0_6_DATA_IN      => adc_data(6),\r
+       ADC0_7_DATA_IN      => adc_data(7),\r
+       -- ADC1 signals\r
+       ADC1_VALID_IN       => adc1_valid,\r
+       ADC1_0_DATA_IN      => adc_data(8),\r
+       ADC1_1_DATA_IN      => adc_data(9),\r
+       ADC1_2_DATA_IN      => adc_data(10),\r
+       ADC1_3_DATA_IN      => adc_data(11),\r
+       ADC1_4_DATA_IN      => adc_data(12),\r
+       ADC1_5_DATA_IN      => adc_data(13),\r
+       ADC1_6_DATA_IN      => adc_data(14),\r
+       ADC1_7_DATA_IN      => adc_data(15),\r
+       -- Slow control registers\r
+       MAX_TRG_NUM_IN      => maximum_trg,     -- automatically determined\r
+       BIT_LOW_IN          => ctrl_bitlow,     -- from slow control\r
+       BIT_HIGH_IN         => ctrl_bithigh,    -- from slow control\r
+       FL_LOW_IN           => ctrl_flatlow,    -- from slow control\r
+       FL_HIGH_IN          => ctrl_flathigh,   -- from slow control\r
+       APV_ON_IN           => adc_on,\r
+       -- 100MHZ synchronous interface\r
+       -- APV raw buffers\r
+       BUF_FULL_OUT        => raw_buf_full, -- NEW NEW NEW\r
+       BUF_ADDR_IN         => buf_addr, -- from ped_corr_ctrl\r
+       BUF_DONE_IN         => buf_done, -- from ped_corr_ctrl\r
+       BUF_TICK_OUT        => buf_tick,\r
+       BUF_START_OUT       => buf_start,\r
+       BUF_READY_OUT       => buf_ready,\r
+       BUF_0_DATA_OUT      => buf_data(0),     -- to ped_corr_ctrl \r
+       BUF_1_DATA_OUT      => buf_data(1),     -- to ped_corr_ctrl\r
+       BUF_2_DATA_OUT      => buf_data(2),     -- to ped_corr_ctrl\r
+       BUF_3_DATA_OUT      => buf_data(3),     -- to ped_corr_ctrl\r
+       BUF_4_DATA_OUT      => buf_data(4),     -- to ped_corr_ctrl\r
+       BUF_5_DATA_OUT      => buf_data(5),     -- to ped_corr_ctrl\r
+       BUF_6_DATA_OUT      => buf_data(6),     -- to ped_corr_ctrl\r
+       BUF_7_DATA_OUT      => buf_data(7),     -- to ped_corr_ctrl\r
+       BUF_8_DATA_OUT      => buf_data(8),     -- to ped_corr_ctrl\r
+       BUF_9_DATA_OUT      => buf_data(9),     -- to ped_corr_ctrl\r
+       BUF_10_DATA_OUT     => buf_data(10),    -- to ped_corr_ctrl\r
+       BUF_11_DATA_OUT     => buf_data(11),    -- to ped_corr_ctrl\r
+       BUF_12_DATA_OUT     => buf_data(12),    -- to ped_corr_ctrl\r
+       BUF_13_DATA_OUT     => buf_data(13),    -- to ped_corr_ctrl\r
+       BUF_14_DATA_OUT     => buf_data(14),    -- to ped_corr_ctrl\r
+       BUF_15_DATA_OUT     => buf_data(15),    -- to ped_corr_ctrl\r
+       -- Debug signals\r
+       DEBUG_OUT           => raw_buf_debug --open\r
+);\r
 \r
 \r
 ----------------------------------------\r
 -- ADC1 data handler                  --\r
 ----------------------------------------\r
 THE_ADC1_HANDLER: adc_data_handler_new \r
-port map( RESET_IN                     => reset_by_trb,\r
-                 ADC_LCLK_IN           => adc1_lclk,\r
-                 ADC_ADCLK_IN          => adc1_adclk,\r
-                 ADC_CHNL_IN           => adc1_out,\r
-                 PLL_CTRL_IN           => adc1_iodelay,\r
-                 ADC_DATA7_OUT         => adc_raw_data(15),\r
-                 ADC_DATA6_OUT         => adc_raw_data(14),\r
-                 ADC_DATA5_OUT         => adc_raw_data(13),\r
-                 ADC_DATA4_OUT         => adc_raw_data(12),\r
-                 ADC_DATA3_OUT         => adc_raw_data(11),\r
-                 ADC_DATA2_OUT         => adc_raw_data(10),\r
-                 ADC_DATA1_OUT         => adc_raw_data(9),\r
-                 ADC_DATA0_OUT         => adc_raw_data(8),\r
-                 ADC_CE_OUT            => adc1_ce,\r
-                 ADC_VALID_OUT         => adc1_valid,\r
-                 DEBUG_OUT                     => open\r
-               );\r
+port map( \r
+       RESET_IN        => reset_by_trb,\r
+       ADC_LCLK_IN     => adc1_lclk,\r
+       ADC_ADCLK_IN    => adc1_adclk,\r
+       ADC_CHNL_IN     => adc1_out,\r
+       PLL_CTRL_IN     => adc1_iodelay,\r
+       ADC_DATA7_OUT   => adc_raw_data(15),\r
+       ADC_DATA6_OUT   => adc_raw_data(14),\r
+       ADC_DATA5_OUT   => adc_raw_data(13),\r
+       ADC_DATA4_OUT   => adc_raw_data(12),\r
+       ADC_DATA3_OUT   => adc_raw_data(11),\r
+       ADC_DATA2_OUT   => adc_raw_data(10),\r
+       ADC_DATA1_OUT   => adc_raw_data(9),\r
+       ADC_DATA0_OUT   => adc_raw_data(8),\r
+       ADC_CE_OUT      => adc1_ce,\r
+       ADC_VALID_OUT   => adc1_valid,\r
+       DEBUG_OUT       => open\r
+);\r
 \r
 \r
 ----------------------------------------\r
 -- ADC1 clock domain crossover        --\r
 ----------------------------------------\r
-THE_ADC1_CROSSOVER:    adc_crossover\r
-port map( CLK_APV_IN                   => clk_apv,\r
-                 RESET_IN                              => global_sync_reset,\r
-                 -- ADC clock domain signals\r
-                 ADC_CLK_IN                    => adc1_lclk,\r
-                 ADC_CE_IN                     => adc1_ce,\r
-                 ADC_DATA_VALID_IN             => adc1_valid,\r
-                 ADC_DATA_7_IN                 => adc_raw_data(15),\r
-                 ADC_DATA_6_IN                 => adc_raw_data(14),\r
-                 ADC_DATA_5_IN                 => adc_raw_data(13),\r
-                 ADC_DATA_4_IN                 => adc_raw_data(12),\r
-                 ADC_DATA_3_IN                 => adc_raw_data(11),\r
-                 ADC_DATA_2_IN                 => adc_raw_data(10),\r
-                 ADC_DATA_1_IN                 => adc_raw_data(9),\r
-                 ADC_DATA_0_IN                 => adc_raw_data(8),\r
-                 LEVEL_WR_OUT                  => open,\r
-                 -- APV clock domain signals\r
-                 APV_DATA_7_OUT                => adc_data(15),\r
-                 APV_DATA_6_OUT                => adc_data(14),\r
-                 APV_DATA_5_OUT                => adc_data(13),\r
-                 APV_DATA_4_OUT                => adc_data(12),\r
-                 APV_DATA_3_OUT                => adc_data(11),\r
-                 APV_DATA_2_OUT                => adc_data(10),\r
-                 APV_DATA_1_OUT                => adc_data(9),\r
-                 APV_DATA_0_OUT                => adc_data(8),\r
-                 APV_DATA_VALID_OUT    => open,\r
-                 LEVEL_RD_OUT                  => open,\r
-                 -- Debug signals\r
-                 DEBUG_OUT                             => open\r
-               );\r
+THE_ADC1_CROSSOVER: adc_crossover\r
+port map( \r
+       CLK_APV_IN          => clk_apv,\r
+       RESET_IN            => global_sync_reset,\r
+       -- ADC clock domain signals\r
+       ADC_CLK_IN          => adc1_lclk,\r
+       ADC_CE_IN           => adc1_ce,\r
+       ADC_DATA_VALID_IN   => adc1_valid,\r
+       ADC_DATA_7_IN       => adc_raw_data(15),\r
+       ADC_DATA_6_IN       => adc_raw_data(14),\r
+       ADC_DATA_5_IN       => adc_raw_data(13),\r
+       ADC_DATA_4_IN       => adc_raw_data(12),\r
+       ADC_DATA_3_IN       => adc_raw_data(11),\r
+       ADC_DATA_2_IN       => adc_raw_data(10),\r
+       ADC_DATA_1_IN       => adc_raw_data(9),\r
+       ADC_DATA_0_IN       => adc_raw_data(8),\r
+       LEVEL_WR_OUT        => open,\r
+       -- APV clock domain signals\r
+       APV_DATA_7_OUT      => adc_data(15),\r
+       APV_DATA_6_OUT      => adc_data(14),\r
+       APV_DATA_5_OUT      => adc_data(13),\r
+       APV_DATA_4_OUT      => adc_data(12),\r
+       APV_DATA_3_OUT      => adc_data(11),\r
+       APV_DATA_2_OUT      => adc_data(10),\r
+       APV_DATA_1_OUT      => adc_data(9),\r
+       APV_DATA_0_OUT      => adc_data(8),\r
+       APV_DATA_VALID_OUT  => open,\r
+       LEVEL_RD_OUT        => open,\r
+       -- Debug signals\r
+       DEBUG_OUT           => open\r
+);\r
 \r
 \r
 ----------------------------------------\r
 -- ADC1 test data multiplexer         --\r
 ----------------------------------------\r
 THE_ADC_1_SELECT: adc_channel_select\r
-port map( RESET_IN                     => reset_by_trb,\r
-                 ADC_CLK_IN            => clk_apv,\r
-                 ADC_SEL_IN            => adc1_select,\r
-                 ADC_7_IN                      => adc_data(15),\r
-                 ADC_6_IN                      => adc_data(14),\r
-                 ADC_5_IN                      => adc_data(13),\r
-                 ADC_4_IN                      => adc_data(12),\r
-                 ADC_3_IN                      => adc_data(11),\r
-                 ADC_2_IN                      => adc_data(10),\r
-                 ADC_1_IN                      => adc_data(9),\r
-                 ADC_0_IN                      => adc_data(8),\r
-                 ADC_CH_OUT            => adc1_testdata,\r
-                 DEBUG_OUT                     => open\r
-               );\r
+port map( \r
+       RESET_IN        => reset_by_trb,\r
+       ADC_CLK_IN      => clk_apv,\r
+       ADC_SEL_IN      => adc1_select,\r
+       ADC_7_IN        => adc_data(15),\r
+       ADC_6_IN        => adc_data(14),\r
+       ADC_5_IN        => adc_data(13),\r
+       ADC_4_IN        => adc_data(12),\r
+       ADC_3_IN        => adc_data(11),\r
+       ADC_2_IN        => adc_data(10),\r
+       ADC_1_IN        => adc_data(9),\r
+       ADC_0_IN        => adc_data(8),\r
+       ADC_CH_OUT      => adc1_testdata,\r
+       DEBUG_OUT       => open\r
+);\r
 \r
 \r
 ----------------------------------------\r
 -- ADC0 data handler                  --\r
 ----------------------------------------\r
 THE_ADC0_HANDLER: adc_data_handler_new \r
-port map( RESET_IN                     => reset_by_trb,\r
-                 ADC_LCLK_IN           => adc0_lclk,\r
-                 ADC_ADCLK_IN          => adc0_adclk,\r
-                 ADC_CHNL_IN           => adc0_out,\r
-                 PLL_CTRL_IN           => adc0_iodelay,\r
-                 ADC_DATA7_OUT         => adc_raw_data(7),\r
-                 ADC_DATA6_OUT         => adc_raw_data(6),\r
-                 ADC_DATA5_OUT         => adc_raw_data(5),\r
-                 ADC_DATA4_OUT         => adc_raw_data(4),\r
-                 ADC_DATA3_OUT         => adc_raw_data(3),\r
-                 ADC_DATA2_OUT         => adc_raw_data(2),\r
-                 ADC_DATA1_OUT         => adc_raw_data(1),\r
-                 ADC_DATA0_OUT         => adc_raw_data(0),\r
-                 ADC_CE_OUT            => adc0_ce,\r
-                 ADC_VALID_OUT         => adc0_valid,\r
-                 DEBUG_OUT                     => open\r
-               );\r
+port map( \r
+       RESET_IN        => reset_by_trb,\r
+       ADC_LCLK_IN     => adc0_lclk,\r
+       ADC_ADCLK_IN    => adc0_adclk,\r
+       ADC_CHNL_IN     => adc0_out,\r
+       PLL_CTRL_IN     => adc0_iodelay,\r
+       ADC_DATA7_OUT   => adc_raw_data(7),\r
+       ADC_DATA6_OUT   => adc_raw_data(6),\r
+       ADC_DATA5_OUT   => adc_raw_data(5),\r
+       ADC_DATA4_OUT   => adc_raw_data(4),\r
+       ADC_DATA3_OUT   => adc_raw_data(3),\r
+       ADC_DATA2_OUT   => adc_raw_data(2),\r
+       ADC_DATA1_OUT   => adc_raw_data(1),\r
+       ADC_DATA0_OUT   => adc_raw_data(0),\r
+       ADC_CE_OUT      => adc0_ce,\r
+       ADC_VALID_OUT   => adc0_valid,\r
+       DEBUG_OUT       => open\r
+);\r
 \r
 \r
 ----------------------------------------\r
 -- ADC0 clock domain crossover        --\r
 ----------------------------------------\r
-THE_ADC0_CROSSOVER:    adc_crossover\r
-port map( CLK_APV_IN                   => clk_apv,\r
-                 RESET_IN                              => global_sync_reset,\r
-                 -- ADC clock domain signals\r
-                 ADC_CLK_IN                    => adc0_lclk,\r
-                 ADC_CE_IN                     => adc0_ce,\r
-                 ADC_DATA_VALID_IN             => adc0_valid,\r
-                 ADC_DATA_7_IN                 => adc_raw_data(7),\r
-                 ADC_DATA_6_IN                 => adc_raw_data(6),\r
-                 ADC_DATA_5_IN                 => adc_raw_data(5),\r
-                 ADC_DATA_4_IN                 => adc_raw_data(4),\r
-                 ADC_DATA_3_IN                 => adc_raw_data(3),\r
-                 ADC_DATA_2_IN                 => adc_raw_data(2),\r
-                 ADC_DATA_1_IN                 => adc_raw_data(1),\r
-                 ADC_DATA_0_IN                 => adc_raw_data(0),\r
-                 LEVEL_WR_OUT                  => open,\r
-                 -- APV clock domain signals\r
-                 APV_DATA_7_OUT                => adc_data(7),\r
-                 APV_DATA_6_OUT                => adc_data(6),\r
-                 APV_DATA_5_OUT                => adc_data(5),\r
-                 APV_DATA_4_OUT                => adc_data(4),\r
-                 APV_DATA_3_OUT                => adc_data(3),\r
-                 APV_DATA_2_OUT                => adc_data(2),\r
-                 APV_DATA_1_OUT                => adc_data(1),\r
-                 APV_DATA_0_OUT                => adc_data(0),\r
-                 APV_DATA_VALID_OUT    => open,\r
-                 LEVEL_RD_OUT                  => open,\r
-                 -- Debug signals\r
-                 DEBUG_OUT                             => open\r
-               );\r
+THE_ADC0_CROSSOVER: adc_crossover\r
+port map( \r
+       CLK_APV_IN          => clk_apv,\r
+       RESET_IN            => global_sync_reset,\r
+       -- ADC clock domain signals\r
+       ADC_CLK_IN          => adc0_lclk,\r
+       ADC_CE_IN           => adc0_ce,\r
+       ADC_DATA_VALID_IN   => adc0_valid,\r
+       ADC_DATA_7_IN       => adc_raw_data(7),\r
+       ADC_DATA_6_IN       => adc_raw_data(6),\r
+       ADC_DATA_5_IN       => adc_raw_data(5),\r
+       ADC_DATA_4_IN       => adc_raw_data(4),\r
+       ADC_DATA_3_IN       => adc_raw_data(3),\r
+       ADC_DATA_2_IN       => adc_raw_data(2),\r
+       ADC_DATA_1_IN       => adc_raw_data(1),\r
+       ADC_DATA_0_IN       => adc_raw_data(0),\r
+       LEVEL_WR_OUT        => open,\r
+       -- APV clock domain signals\r
+       APV_DATA_7_OUT      => adc_data(7),\r
+       APV_DATA_6_OUT      => adc_data(6),\r
+       APV_DATA_5_OUT      => adc_data(5),\r
+       APV_DATA_4_OUT      => adc_data(4),\r
+       APV_DATA_3_OUT      => adc_data(3),\r
+       APV_DATA_2_OUT      => adc_data(2),\r
+       APV_DATA_1_OUT      => adc_data(1),\r
+       APV_DATA_0_OUT      => adc_data(0),\r
+       APV_DATA_VALID_OUT  => open,\r
+       LEVEL_RD_OUT        => open,\r
+       -- Debug signals\r
+       DEBUG_OUT           => open\r
+);\r
 \r
                \r
 ----------------------------------------\r
 -- ADC0 test data multiplexer         --\r
 ----------------------------------------\r
 THE_ADC_0_SELECT: adc_channel_select\r
-port map( RESET_IN                     => reset_by_trb,\r
-                 ADC_CLK_IN            => clk_apv,\r
-                 ADC_SEL_IN            => adc0_select,\r
-                 ADC_7_IN                      => adc_data(7),\r
-                 ADC_6_IN                      => adc_data(6),\r
-                 ADC_5_IN                      => adc_data(5),\r
-                 ADC_4_IN                      => adc_data(4),\r
-                 ADC_3_IN                      => adc_data(3),\r
-                 ADC_2_IN                      => adc_data(2),\r
-                 ADC_1_IN                      => adc_data(1),\r
-                 ADC_0_IN                      => adc_data(0),\r
-                 ADC_CH_OUT            => adc0_testdata,\r
-                 DEBUG_OUT                     => open\r
-               );\r
+port map( \r
+       RESET_IN        => reset_by_trb,\r
+       ADC_CLK_IN      => clk_apv,\r
+       ADC_SEL_IN      => adc0_select,\r
+       ADC_7_IN        => adc_data(7),\r
+       ADC_6_IN        => adc_data(6),\r
+       ADC_5_IN        => adc_data(5),\r
+       ADC_4_IN        => adc_data(4),\r
+       ADC_3_IN        => adc_data(3),\r
+       ADC_2_IN        => adc_data(2),\r
+       ADC_1_IN        => adc_data(1),\r
+       ADC_0_IN        => adc_data(0),\r
+       ADC_CH_OUT      => adc0_testdata,\r
+       DEBUG_OUT       => open\r
+);\r
 \r
 \r
 ----------------------------------------\r
 -- Trigger handler (APV specific)     --\r
 ----------------------------------------\r
 THE_APV_TRGCTRL: apv_trgctrl\r
-port map( CLK_IN                               => sysclk,\r
-                 RESET_IN                              => global_sync_reset,\r
-                 CLK_APV_IN                    => clk_apv,\r
-                 -- Triggers\r
-                 SYNC_TRG_IN                   => common_ctrl_reg(31),         -- slow control pulse\r
-                 TIME_TRG_IN                   => ext_in,                                      -- external trigger inputs\r
-                 TRB_TRG_IN                    => common_ctrl_reg(19 downto 16), -- slow control triggers\r
-                 STILL_BUSY_IN                 => raw_buf_full,                        -- if no more frames are free in first stage buffer we must cease triggers.\r
-                 TRG_FOUND_OUT                 => timing_trg_found,            -- to TRB LVL1 endpoint\r
-                 -- slow control settings\r
-                 TRG_MAX_OUT                   => maximum_trg,\r
-                 TRG_3_TODO_IN                 => ctrl_trg(31 downto 28),      -- from slow control\r
-                 TRG_3_DELAY_IN                => ctrl_trg(27 downto 24),      -- from slow control\r
-                 TRG_2_TODO_IN                 => ctrl_trg(23 downto 20),      -- from slow control\r
-                 TRG_2_DELAY_IN                => ctrl_trg(19 downto 16),      -- from slow control\r
-                 TRG_1_TODO_IN                 => ctrl_trg(15 downto 12),      -- from slow control\r
-                 TRG_1_DELAY_IN                => ctrl_trg(11 downto 8),       -- from slow control\r
-                 TRG_0_TODO_IN                 => ctrl_trg(7 downto 4),        -- from slow control\r
-                 TRG_0_DELAY_IN                => ctrl_trg(3 downto 0),        -- from slow control\r
-                 TRG_SETUP_IN                  => ctrl_pll(15 downto 8),       -- from slow control\r
-                 -- TRB LVL1 signals\r
-                 TRB_TTAG_IN                   => lvl1_trg_number,                     -- from TRB LVL1 endpoint\r
-                 TRB_TRND_IN                   => lvl1_trg_code,                       -- from TRB LVL1 endpoint\r
-                 TRB_TTYPE_IN                  => lvl1_trg_type,                       -- from TRB LVL1 endpoint\r
-                 TRB_TRGRCVD_IN                => lvl1_trg_received,           -- from TRB LVL1 endpoint\r
-                 TRB_MISSING_OUT               => lvl1_trg_missing,\r
-                 TRB_RELEASE_OUT               => lvl1_trg_release,            -- to TRB LVL1 endpoint\r
-                 TRB_RST_COUNTER_IN    => common_ctrl_reg(30),         -- depreciated!\r
-                 TRB_COUNTER_OUT               => local_lvl1_counter,\r
-                 -- EDS signals\r
-                 EDS_DATA_OUT                  => eds_data,                            -- to ped_corr_stage\r
-                 EDS_AVAIL_OUT                 => eds_avail,                           -- to ped_corr_stage\r
-                 EDS_DONE_IN                   => eds_done,                            -- from ped_corr_stage\r
-                 EDS_FULL_OUT                  => eds_buf_full,\r
-                 EDS_LEVEL_OUT                 => eds_buf_level,\r
-                 FRM_REQD_OUT                  => apv_frame_reqd,                      -- to raw_buf_stage (100MHz clock)\r
-                 -- APV signals        \r
-                 APV_TRG_OUT                   => apv_trg,                                     -- to APV frontends (40MHz APV clock)\r
-                 APV_SYNC_OUT                  => apv_sync,                            -- to raw_buf_stage (40MHz APV clock)\r
-                 DEBUG_OUT                             => trgctrl_debug\r
-               );\r
+port map( \r
+       CLK_IN              => sysclk,\r
+       RESET_IN            => global_sync_reset,\r
+       CLK_APV_IN          => clk_apv,\r
+       -- Triggers\r
+       SYNC_TRG_IN         => common_ctrl_reg(31),     -- slow control pulse\r
+       TIME_TRG_IN         => ext_in,                  -- external trigger inputs\r
+       TRB_TRG_IN          => common_ctrl_reg(19 downto 16), -- slow control triggers\r
+       STILL_BUSY_IN       => raw_buf_full,            -- if no more frames are free in first stage buffer we must cease triggers.\r
+       TRG_FOUND_OUT       => timing_trg_found,        -- to TRB LVL1 endpoint\r
+       SECTOR_IN           => bp_sector_qq(2 downto 0), \r
+       -- slow control settings\r
+       TRG_MAX_OUT         => maximum_trg,\r
+       TRG_3_TODO_IN       => ctrl_trg(31 downto 28),  -- from slow control\r
+       TRG_3_DELAY_IN      => ctrl_trg(27 downto 24),  -- from slow control\r
+       TRG_2_TODO_IN       => ctrl_trg(23 downto 20),  -- from slow control\r
+       TRG_2_DELAY_IN      => ctrl_trg(19 downto 16),  -- from slow control\r
+       TRG_1_TODO_IN       => ctrl_trg(15 downto 12),  -- from slow control\r
+       TRG_1_DELAY_IN      => ctrl_trg(11 downto 8),   -- from slow control\r
+       TRG_0_TODO_IN       => ctrl_trg(7 downto 4),    -- from slow control\r
+       TRG_0_DELAY_IN      => ctrl_trg(3 downto 0),    -- from slow control\r
+       TRG_SETUP_IN        => ctrl_pll(15 downto 8),   -- from slow control\r
+       -- TRB LVL1 signals\r
+       TRB_TTAG_IN         => lvl1_trg_number,         -- from TRB LVL1 endpoint\r
+       TRB_TRND_IN         => lvl1_trg_code,           -- from TRB LVL1 endpoint\r
+       TRB_TTYPE_IN        => lvl1_trg_type,           -- from TRB LVL1 endpoint\r
+       TRB_TINFO_IN        => lvl1_trg_information,    -- from TRB LVL1 endpoint\r
+       TRB_TRGRCVD_IN      => lvl1_trg_received,       -- from TRB LVL1 endpoint\r
+       TRB_MISSING_OUT     => lvl1_trg_missing,\r
+       TRB_RELEASE_OUT     => lvl1_trg_release,        -- to TRB LVL1 endpoint\r
+       TRB_COUNTER_OUT     => local_lvl1_counter,              -- own trigger counter\r
+       TRB_COUNTER_IN      => lvl1_int_trg_number,     -- official TRB trigger counter\r
+       TRB_LD_COUNTER_IN   => lvl1_int_trg_update,     -- load TRB counter value\r
+       -- EDS signals\r
+       EDS_DATA_OUT        => eds_data,                -- to ped_corr_stage\r
+       EDS_AVAIL_OUT       => eds_avail,               -- to ped_corr_stage\r
+       EDS_DONE_IN         => eds_done,                -- from ped_corr_stage\r
+       EDS_FULL_OUT        => eds_buf_full,\r
+       EDS_LEVEL_OUT       => eds_buf_level,\r
+       FRM_REQD_OUT        => apv_frame_reqd,          -- to raw_buf_stage (100MHz clock)\r
+       -- APV signals  \r
+       APV_TRG_OUT         => apv_trg,                 -- to APV frontends (40MHz APV clock)\r
+       APV_SYNC_OUT        => apv_sync,                -- to raw_buf_stage (40MHz APV clock)\r
+       DEBUG_OUT           => trgctrl_debug\r
+);\r
 \r
 \r
 ----------------------------------------\r
@@ -1102,23 +1135,25 @@ adc1_rst <= adc1_reset;
 adc1_pd  <= adc1_powerdown;\r
 \r
 THE_ADC1CLK_OUT: ODDRXC\r
-port map( DA => '1',\r
-                 DB => '0',\r
-                 CLK => clk_adc,\r
-                 RST => '0',\r
-                 Q => adc1_clk\r
-               );\r
+port map( \r
+       DA => '1',\r
+       DB => '0',\r
+       CLK => clk_adc,\r
+       RST => '0',\r
+       Q => adc1_clk\r
+);\r
 \r
 adc0_rst <= adc0_reset;\r
 adc0_pd  <= adc0_powerdown;\r
 \r
 THE_ADC0CLK_OUT: ODDRXC\r
-port map( DA => '1',\r
-                 DB => '0',\r
-                 CLK => clk_adc,\r
-                 RST => '0',\r
-                 Q => adc0_clk\r
-               );\r
+port map( \r
+       DA => '1',\r
+       DB => '0',\r
+       CLK => clk_adc,\r
+       RST => '0',\r
+       Q => adc0_clk\r
+);\r
 \r
 \r
 ----------------------------------------\r
@@ -1143,65 +1178,73 @@ apv1_rst    <= not apv_reset;
 -- CLK and TRG signal\r
 -- CLK is shifted to meet timing constraints of APV\r
 THE_APV0ACLK_OUT: ODDRXC\r
-port map( DA => '0', \r
-                 DB => '1', \r
-                 CLK => clk_apv,\r
-                 RST => '0',\r
-                 Q => apv0a_clk\r
-               );\r
+port map( \r
+       DA => '0', \r
+       DB => '1', \r
+       CLK => clk_apv,\r
+       RST => '0',\r
+       Q => apv0a_clk\r
+);\r
 \r
 THE_APV0BCLK_OUT: ODDRXC\r
-port map( DA => '0',\r
-                 DB => '1',\r
-                 CLK => clk_apv,\r
-                 RST => '0',\r
-                 Q => apv0b_clk\r
-               );\r
+port map( \r
+       DA => '0',\r
+       DB => '1',\r
+       CLK => clk_apv,\r
+       RST => '0',\r
+       Q => apv0b_clk\r
+);\r
 \r
 THE_APV1ACLK_OUT: ODDRXC\r
-port map( DA => '0',\r
-                 DB => '1',\r
-                 CLK => clk_apv,\r
-                 RST => '0',\r
-                 Q => apv1a_clk\r
-               );\r
+port map( \r
+       DA => '0',\r
+       DB => '1',\r
+       CLK => clk_apv,\r
+       RST => '0',\r
+       Q => apv1a_clk\r
+);\r
 \r
 THE_APV1BCLK_OUT: ODDRXC\r
-port map( DA => '0',\r
-                 DB => '1',\r
-                 CLK => clk_apv,\r
-                 RST => '0',\r
-                 Q => apv1b_clk\r
-               );\r
+port map( \r
+       DA => '0',\r
+       DB => '1',\r
+       CLK => clk_apv,\r
+       RST => '0',\r
+       Q => apv1b_clk\r
+);\r
 \r
 THE_APV0ATRG_OUT: ODDRXC\r
-port map( DA => apv_trg,\r
-                 DB => apv_trg,\r
-                 CLK => clk_apv,\r
-                 RST => '0',\r
-                 Q => apv0a_trg\r
-               );\r
+port map( \r
+       DA => apv_trg,\r
+       DB => apv_trg,\r
+       CLK => clk_apv,\r
+       RST => '0',\r
+       Q => apv0a_trg\r
+);\r
 THE_APV0BTRG_OUT: ODDRXC\r
-port map( DA => apv_trg,\r
-                 DB => apv_trg,\r
-                 CLK => clk_apv,\r
-                 RST => '0',\r
-                 Q => apv0b_trg\r
-               );\r
+port map( \r
+       DA => apv_trg,\r
+       DB => apv_trg,\r
+       CLK => clk_apv,\r
+       RST => '0',\r
+       Q => apv0b_trg\r
+);\r
 THE_APV1ATRG_OUT: ODDRXC\r
-port map( DA => apv_trg,\r
-                 DB => apv_trg,\r
-                 CLK => clk_apv,\r
-                 RST => '0',\r
-                 Q => apv1a_trg\r
-               );\r
+port map( \r
+       DA => apv_trg,\r
+       DB => apv_trg,\r
+       CLK => clk_apv,\r
+       RST => '0',\r
+       Q => apv1a_trg\r
+);\r
 THE_APV1BTRG_OUT: ODDRXC\r
-port map( DA => apv_trg,\r
-                 DB => apv_trg,\r
-                 CLK => clk_apv,\r
-                 RST => '0',\r
-                 Q => apv1b_trg\r
-               );\r
+port map( \r
+       DA => apv_trg,\r
+       DB => apv_trg,\r
+       CLK => clk_apv,\r
+       RST => '0',\r
+       Q => apv1b_trg\r
+);\r
 \r
 \r
 ----------------------------------------\r
@@ -1223,24 +1266,26 @@ end process THE_BP_SYNC_PROC;
 -- Reboot handler (pulse triggered)   --\r
 ----------------------------------------\r
 THE_REBOOT_HANDLER: reboot_handler\r
-port map( RESET_IN                     => reset_by_trb,\r
-                 CLK_IN                        => sysclk,\r
-                 START_IN                      => common_ctrl_reg(15),\r
-                 REBOOT_OUT            => uc_reboot,\r
-                 DEBUG_OUT                     => open\r
-               );\r
+port map( \r
+       RESET_IN        => reset_by_trb,\r
+       CLK_IN          => sysclk,\r
+       START_IN        => common_ctrl_reg(15),\r
+       REBOOT_OUT      => uc_reboot,\r
+       DEBUG_OUT       => open\r
+);\r
 \r
 \r
 ----------------------------------------\r
 -- FPGA debug header driver           --\r
 ----------------------------------------\r
 THE_DBG_CLK_OUT: ODDRXC\r
-port map( DA => '1',\r
-                 DB => '0',\r
-                 CLK => debug_clk,\r
-                 RST => '0',\r
-                 Q => dbg_exp(43)\r
-               );\r
+port map( \r
+       DA => '1',\r
+       DB => '0',\r
+       CLK => debug_clk,\r
+       RST => '0',\r
+       Q => dbg_exp(43)\r
+);\r
                \r
 THE_DEBUG_REG_PROC: process( debug_clk )\r
 begin\r
index f09bf78a0ed63a711cf18e8a692c64aa05d6f6bf..136d0b1b17b291bfd8252c627c69fed033f1d0fe 100755 (executable)
@@ -8,1580 +8,1694 @@ use IEEE.std_logic_UNSIGNED.ALL;
 \r
 package adcmv3_components is\r
 \r
-       component raw_buf_stage_new is\r
-       port( CLK_IN                    : in    std_logic; -- 100MHz local clock\r
-                 CLK_APV_IN            : in    std_logic; -- 40MHz APV clock\r
-                 RESET_IN                      : in    std_logic; -- general reset (100MHz)\r
-                 -- trigger related signals\r
-                 APV_RESET_IN          : in    std_logic; -- APV reset signal (100MHz)\r
-                 APV_SYNC_IN           : in    std_logic; -- APV sync trigger has been sent (40MHz)\r
-                 APV_FRAME_REQD_IN     : in    std_logic; -- one APV frame has been requested (100MHz)\r
-                 -- ADC0 signals\r
-                 ADC0_VALID_IN         : in    std_logic; -- 40M reconstructed clock is valid\r
-                 ADC0_0_DATA_IN        : in    std_logic_vector(11 downto 0); -- parallel data from ADC0 channel 0\r
-                 ADC0_1_DATA_IN        : in    std_logic_vector(11 downto 0); -- parallel data from ADC0 channel 1\r
-                 ADC0_2_DATA_IN        : in    std_logic_vector(11 downto 0); -- parallel data from ADC0 channel 2\r
-                 ADC0_3_DATA_IN        : in    std_logic_vector(11 downto 0); -- parallel data from ADC0 channel 3\r
-                 ADC0_4_DATA_IN        : in    std_logic_vector(11 downto 0); -- parallel data from ADC0 channel 4\r
-                 ADC0_5_DATA_IN        : in    std_logic_vector(11 downto 0); -- parallel data from ADC0 channel 5\r
-                 ADC0_6_DATA_IN        : in    std_logic_vector(11 downto 0); -- parallel data from ADC0 channel 6\r
-                 ADC0_7_DATA_IN        : in    std_logic_vector(11 downto 0); -- parallel data from ADC0 channel 7\r
-                 -- ADC1 signals\r
-                 ADC1_VALID_IN         : in    std_logic; -- 40M reconstructed clock is valid\r
-                 ADC1_0_DATA_IN        : in    std_logic_vector(11 downto 0); -- parallel data from ADC1 channel 0\r
-                 ADC1_1_DATA_IN        : in    std_logic_vector(11 downto 0); -- parallel data from ADC1 channel 1\r
-                 ADC1_2_DATA_IN        : in    std_logic_vector(11 downto 0); -- parallel data from ADC1 channel 2\r
-                 ADC1_3_DATA_IN        : in    std_logic_vector(11 downto 0); -- parallel data from ADC1 channel 3\r
-                 ADC1_4_DATA_IN        : in    std_logic_vector(11 downto 0); -- parallel data from ADC1 channel 4\r
-                 ADC1_5_DATA_IN        : in    std_logic_vector(11 downto 0); -- parallel data from ADC1 channel 5\r
-                 ADC1_6_DATA_IN        : in    std_logic_vector(11 downto 0); -- parallel data from ADC1 channel 6\r
-                 ADC1_7_DATA_IN        : in    std_logic_vector(11 downto 0); -- parallel data from ADC1 channel 7\r
-                 -- Slow control registers\r
-                 MAX_TRG_NUM_IN        : in    std_logic_vector(3 downto 0); -- maximum number of triggers / event\r
-                 BIT_LOW_IN            : in    std_logic_vector(11 downto 0); -- "bit low" threshold\r
-                 BIT_HIGH_IN           : in    std_logic_vector(11 downto 0); -- "bit high" threshold\r
-                 FL_LOW_IN                     : in    std_logic_vector(11 downto 0); -- "flatline low" threshold\r
-                 FL_HIGH_IN            : in    std_logic_vector(11 downto 0); -- "flatline high" threshold\r
-                 APV_ON_IN                     : in    std_logic_vector(15 downto 0); -- APV on/off bits from slow control\r
-                 -- 100MHZ synchronous interface\r
-                 -- APV raw buffers\r
-                 BUF_FULL_OUT          : out   std_logic;\r
-                 BUF_ADDR_IN           : in    std_logic_vector(6 downto 0);\r
-                 BUF_DONE_IN           : in    std_logic;\r
-                 BUF_TICK_OUT          : out   std_logic_vector(15 downto 0);\r
-                 BUF_START_OUT         : out   std_logic_vector(15 downto 0);\r
-                 BUF_READY_OUT         : out   std_logic_vector(15 downto 0);\r
-                 BUF_0_DATA_OUT        : out   std_logic_vector(37 downto 0);\r
-                 BUF_1_DATA_OUT        : out   std_logic_vector(37 downto 0);\r
-                 BUF_2_DATA_OUT        : out   std_logic_vector(37 downto 0);\r
-                 BUF_3_DATA_OUT        : out   std_logic_vector(37 downto 0);\r
-                 BUF_4_DATA_OUT        : out   std_logic_vector(37 downto 0);\r
-                 BUF_5_DATA_OUT        : out   std_logic_vector(37 downto 0);\r
-                 BUF_6_DATA_OUT        : out   std_logic_vector(37 downto 0);\r
-                 BUF_7_DATA_OUT        : out   std_logic_vector(37 downto 0);\r
-                 BUF_8_DATA_OUT        : out   std_logic_vector(37 downto 0);\r
-                 BUF_9_DATA_OUT        : out   std_logic_vector(37 downto 0);\r
-                 BUF_10_DATA_OUT       : out   std_logic_vector(37 downto 0);\r
-                 BUF_11_DATA_OUT       : out   std_logic_vector(37 downto 0);\r
-                 BUF_12_DATA_OUT       : out   std_logic_vector(37 downto 0);\r
-                 BUF_13_DATA_OUT       : out   std_logic_vector(37 downto 0);\r
-                 BUF_14_DATA_OUT       : out   std_logic_vector(37 downto 0);\r
-                 BUF_15_DATA_OUT       : out   std_logic_vector(37 downto 0);\r
-                 -- Debug signals\r
-                 DEBUG_OUT                     : out   std_logic_vector(63 downto 0)\r
-               );\r
-       end component raw_buf_stage_new;\r
-       \r
-       component adc_data_handler_new is\r
-       port( RESET_IN                  : in    std_logic;\r
-                 ADC_LCLK_IN           : in    std_logic; -- LCLK from ADC\r
-                 ADC_ADCLK_IN          : in    std_logic; -- ADCLK from ADC\r
-                 ADC_CHNL_IN           : in    std_logic_vector(7 downto 0);\r
-                 PLL_CTRL_IN           : in    std_logic_vector(3 downto 0);\r
-                 ADC_DATA7_OUT         : out   std_logic_vector(11 downto 0);\r
-                 ADC_DATA6_OUT         : out   std_logic_vector(11 downto 0);\r
-                 ADC_DATA5_OUT         : out   std_logic_vector(11 downto 0);\r
-                 ADC_DATA4_OUT         : out   std_logic_vector(11 downto 0);\r
-                 ADC_DATA3_OUT         : out   std_logic_vector(11 downto 0);\r
-                 ADC_DATA2_OUT         : out   std_logic_vector(11 downto 0);\r
-                 ADC_DATA1_OUT         : out   std_logic_vector(11 downto 0);\r
-                 ADC_DATA0_OUT         : out   std_logic_vector(11 downto 0);\r
-                 ADC_CE_OUT            : out   std_logic;\r
-                 ADC_VALID_OUT         : out   std_logic;\r
-                 DEBUG_OUT                     : out   std_logic_vector(15 downto 0)\r
-               );\r
-       end component adc_data_handler_new;\r
-\r
-       component adc_crossover is\r
-       port( CLK_APV_IN                        : in    std_logic; -- APV 40MHz local clock\r
-                 RESET_IN                              : in    std_logic; -- general reset (100MHz)\r
-                 -- ADC clock domain signals\r
-                 ADC_CLK_IN                    : in    std_logic;\r
-                 ADC_CE_IN                     : in    std_logic; -- in case we use 240MHz + write pulse...\r
-                 ADC_DATA_VALID_IN             : in    std_logic;\r
-                 ADC_DATA_7_IN                 : in    std_logic_vector(11 downto 0);\r
-                 ADC_DATA_6_IN                 : in    std_logic_vector(11 downto 0);\r
-                 ADC_DATA_5_IN                 : in    std_logic_vector(11 downto 0);\r
-                 ADC_DATA_4_IN                 : in    std_logic_vector(11 downto 0);\r
-                 ADC_DATA_3_IN                 : in    std_logic_vector(11 downto 0);\r
-                 ADC_DATA_2_IN                 : in    std_logic_vector(11 downto 0);\r
-                 ADC_DATA_1_IN                 : in    std_logic_vector(11 downto 0);\r
-                 ADC_DATA_0_IN                 : in    std_logic_vector(11 downto 0);\r
-                 LEVEL_WR_OUT                  : out   std_logic_vector(4 downto 0);\r
-                 -- APV clock domain signals\r
-                 APV_DATA_7_OUT                : out   std_logic_vector(11 downto 0);\r
-                 APV_DATA_6_OUT                : out   std_logic_vector(11 downto 0);\r
-                 APV_DATA_5_OUT                : out   std_logic_vector(11 downto 0);\r
-                 APV_DATA_4_OUT                : out   std_logic_vector(11 downto 0);\r
-                 APV_DATA_3_OUT                : out   std_logic_vector(11 downto 0);\r
-                 APV_DATA_2_OUT                : out   std_logic_vector(11 downto 0);\r
-                 APV_DATA_1_OUT                : out   std_logic_vector(11 downto 0);\r
-                 APV_DATA_0_OUT                : out   std_logic_vector(11 downto 0);\r
-                 APV_DATA_VALID_OUT    : out   std_logic;\r
-                 LEVEL_RD_OUT                  : out   std_logic_vector(4 downto 0);\r
-                 -- Debug signals\r
-                 DEBUG_OUT                             : out   std_logic_vector(31 downto 0)\r
-               );\r
-       end component adc_crossover;\r
-               \r
-       component crossover is\r
-       port( DATA                      : in    std_logic_vector(95 downto 0);\r
-                 WRCLOCK               : in    std_logic;\r
-                 RDCLOCK               : in    std_logic;\r
-                 WREN                  : in    std_logic;\r
-                 RDEN                  : in    std_logic;\r
-                 RESET                 : in    std_logic; -- asynchronous reset! \r
-                 RPRESET               : in    std_logic;\r
-                 Q                             : out   std_logic_vector(95 downto 0);\r
-                 WCNT                  : out   std_logic_vector(4 downto 0);\r
-                 RCNT                  : out   std_logic_vector(4 downto 0);\r
-                 EMPTY                 : out   std_logic;\r
-                 FULL                  : out   std_logic\r
-               );\r
-       end component crossover;\r
-\r
-       component slv_adc_la is\r
-       port( CLK_IN            : in    std_logic;\r
-                 RESET_IN              : in    std_logic;\r
-                 -- Slave bus\r
-                 SLV_ADDR_IN   : in    std_logic_vector(9 downto 0);\r
-                 SLV_READ_IN   : in    std_logic;\r
-                 SLV_WRITE_IN  : in    std_logic;\r
-                 SLV_ACK_OUT   : out   std_logic;\r
-                 SLV_DATA_IN   : in    std_logic_vector(31 downto 0);\r
-                 SLV_DATA_OUT  : out   std_logic_vector(31 downto 0);\r
-                 -- I/O to the backend\r
-                 ADC_SEL_OUT   : out   std_logic_vector(2 downto 0);   -- selects the ADC channel to snoop from\r
-                 ADC_CLK_IN    : in    std_logic;                                              -- ADC reconstructed clock\r
-                 ADC_DATA_IN   : in    std_logic_vector(11 downto 0);  -- ADC selected channel data\r
-                 -- Status lines\r
-                 STAT                  : out   std_logic_vector(31 downto 0) -- DEBUG\r
-               );\r
-       end component slv_adc_la;\r
+component raw_buf_stage_new is\r
+port(\r
+       CLK_IN                          : in    std_logic; -- 100MHz local clock\r
+       CLK_APV_IN                      : in    std_logic; -- 40MHz APV clock\r
+       RESET_IN                        : in    std_logic; -- general reset (100MHz)\r
+       -- trigger related signals\r
+       APV_RESET_IN            : in    std_logic; -- APV reset signal (100MHz)\r
+       APV_SYNC_IN                     : in    std_logic; -- APV sync trigger has been sent (40MHz)\r
+       APV_FRAME_REQD_IN       : in    std_logic; -- one APV frame has been requested (100MHz)\r
+       -- ADC0 signals\r
+       ADC0_VALID_IN           : in    std_logic; -- 40M reconstructed clock is valid\r
+       ADC0_0_DATA_IN          : in    std_logic_vector(11 downto 0); -- parallel data from ADC0 channel 0\r
+       ADC0_1_DATA_IN          : in    std_logic_vector(11 downto 0); -- parallel data from ADC0 channel 1\r
+       ADC0_2_DATA_IN          : in    std_logic_vector(11 downto 0); -- parallel data from ADC0 channel 2\r
+       ADC0_3_DATA_IN          : in    std_logic_vector(11 downto 0); -- parallel data from ADC0 channel 3\r
+       ADC0_4_DATA_IN          : in    std_logic_vector(11 downto 0); -- parallel data from ADC0 channel 4\r
+       ADC0_5_DATA_IN          : in    std_logic_vector(11 downto 0); -- parallel data from ADC0 channel 5\r
+       ADC0_6_DATA_IN          : in    std_logic_vector(11 downto 0); -- parallel data from ADC0 channel 6\r
+       ADC0_7_DATA_IN          : in    std_logic_vector(11 downto 0); -- parallel data from ADC0 channel 7\r
+       -- ADC1 signals\r
+       ADC1_VALID_IN           : in    std_logic; -- 40M reconstructed clock is valid\r
+       ADC1_0_DATA_IN          : in    std_logic_vector(11 downto 0); -- parallel data from ADC1 channel 0\r
+       ADC1_1_DATA_IN          : in    std_logic_vector(11 downto 0); -- parallel data from ADC1 channel 1\r
+       ADC1_2_DATA_IN          : in    std_logic_vector(11 downto 0); -- parallel data from ADC1 channel 2\r
+       ADC1_3_DATA_IN          : in    std_logic_vector(11 downto 0); -- parallel data from ADC1 channel 3\r
+       ADC1_4_DATA_IN          : in    std_logic_vector(11 downto 0); -- parallel data from ADC1 channel 4\r
+       ADC1_5_DATA_IN          : in    std_logic_vector(11 downto 0); -- parallel data from ADC1 channel 5\r
+       ADC1_6_DATA_IN          : in    std_logic_vector(11 downto 0); -- parallel data from ADC1 channel 6\r
+       ADC1_7_DATA_IN          : in    std_logic_vector(11 downto 0); -- parallel data from ADC1 channel 7\r
+       -- Slow control registers\r
+       MAX_TRG_NUM_IN          : in    std_logic_vector(3 downto 0); -- maximum number of triggers / event\r
+       BIT_LOW_IN                      : in    std_logic_vector(11 downto 0); -- "bit low" threshold\r
+       BIT_HIGH_IN                     : in    std_logic_vector(11 downto 0); -- "bit high" threshold\r
+       FL_LOW_IN                       : in    std_logic_vector(11 downto 0); -- "flatline low" threshold\r
+       FL_HIGH_IN                      : in    std_logic_vector(11 downto 0); -- "flatline high" threshold\r
+       APV_ON_IN                       : in    std_logic_vector(15 downto 0); -- APV on/off bits from slow control\r
+       -- 100MHZ synchronous interface\r
+       -- APV raw buffers\r
+       BUF_FULL_OUT            : out   std_logic;\r
+       BUF_ADDR_IN                     : in    std_logic_vector(6 downto 0);\r
+       BUF_DONE_IN                     : in    std_logic;\r
+       BUF_TICK_OUT            : out   std_logic_vector(15 downto 0);\r
+       BUF_START_OUT           : out   std_logic_vector(15 downto 0);\r
+       BUF_READY_OUT           : out   std_logic_vector(15 downto 0);\r
+       BUF_0_DATA_OUT          : out   std_logic_vector(37 downto 0);\r
+       BUF_1_DATA_OUT          : out   std_logic_vector(37 downto 0);\r
+       BUF_2_DATA_OUT          : out   std_logic_vector(37 downto 0);\r
+       BUF_3_DATA_OUT          : out   std_logic_vector(37 downto 0);\r
+       BUF_4_DATA_OUT          : out   std_logic_vector(37 downto 0);\r
+       BUF_5_DATA_OUT          : out   std_logic_vector(37 downto 0);\r
+       BUF_6_DATA_OUT          : out   std_logic_vector(37 downto 0);\r
+       BUF_7_DATA_OUT          : out   std_logic_vector(37 downto 0);\r
+       BUF_8_DATA_OUT          : out   std_logic_vector(37 downto 0);\r
+       BUF_9_DATA_OUT          : out   std_logic_vector(37 downto 0);\r
+       BUF_10_DATA_OUT         : out   std_logic_vector(37 downto 0);\r
+       BUF_11_DATA_OUT         : out   std_logic_vector(37 downto 0);\r
+       BUF_12_DATA_OUT         : out   std_logic_vector(37 downto 0);\r
+       BUF_13_DATA_OUT         : out   std_logic_vector(37 downto 0);\r
+       BUF_14_DATA_OUT         : out   std_logic_vector(37 downto 0);\r
+       BUF_15_DATA_OUT         : out   std_logic_vector(37 downto 0);\r
+       -- Debug signals\r
+       DEBUG_OUT                       : out   std_logic_vector(63 downto 0)\r
+);\r
+end component raw_buf_stage_new;\r
+\r
+component adc_data_handler_new is\r
+port(\r
+       RESET_IN                : in    std_logic;\r
+       ADC_LCLK_IN             : in    std_logic; -- LCLK from ADC\r
+       ADC_ADCLK_IN    : in    std_logic; -- ADCLK from ADC\r
+       ADC_CHNL_IN             : in    std_logic_vector(7 downto 0);\r
+       PLL_CTRL_IN             : in    std_logic_vector(3 downto 0);\r
+       ADC_DATA7_OUT   : out   std_logic_vector(11 downto 0);\r
+       ADC_DATA6_OUT   : out   std_logic_vector(11 downto 0);\r
+       ADC_DATA5_OUT   : out   std_logic_vector(11 downto 0);\r
+       ADC_DATA4_OUT   : out   std_logic_vector(11 downto 0);\r
+       ADC_DATA3_OUT   : out   std_logic_vector(11 downto 0);\r
+       ADC_DATA2_OUT   : out   std_logic_vector(11 downto 0);\r
+       ADC_DATA1_OUT   : out   std_logic_vector(11 downto 0);\r
+       ADC_DATA0_OUT   : out   std_logic_vector(11 downto 0);\r
+       ADC_CE_OUT              : out   std_logic;\r
+       ADC_VALID_OUT   : out   std_logic;\r
+       DEBUG_OUT               : out   std_logic_vector(15 downto 0)\r
+);\r
+end component adc_data_handler_new;\r
+\r
+component adc_crossover is\r
+port(\r
+       CLK_APV_IN                      : in    std_logic; -- APV 40MHz local clock\r
+       RESET_IN                        : in    std_logic; -- general reset (100MHz)\r
+       -- ADC clock domain signals\r
+       ADC_CLK_IN                      : in    std_logic;\r
+       ADC_CE_IN                       : in    std_logic; -- in case we use 240MHz + write pulse...\r
+       ADC_DATA_VALID_IN       : in    std_logic;\r
+       ADC_DATA_7_IN           : in    std_logic_vector(11 downto 0);\r
+       ADC_DATA_6_IN           : in    std_logic_vector(11 downto 0);\r
+       ADC_DATA_5_IN           : in    std_logic_vector(11 downto 0);\r
+       ADC_DATA_4_IN           : in    std_logic_vector(11 downto 0);\r
+       ADC_DATA_3_IN           : in    std_logic_vector(11 downto 0);\r
+       ADC_DATA_2_IN           : in    std_logic_vector(11 downto 0);\r
+       ADC_DATA_1_IN           : in    std_logic_vector(11 downto 0);\r
+       ADC_DATA_0_IN           : in    std_logic_vector(11 downto 0);\r
+       LEVEL_WR_OUT            : out   std_logic_vector(4 downto 0);\r
+       -- APV clock domain signals\r
+       APV_DATA_7_OUT          : out   std_logic_vector(11 downto 0);\r
+       APV_DATA_6_OUT          : out   std_logic_vector(11 downto 0);\r
+       APV_DATA_5_OUT          : out   std_logic_vector(11 downto 0);\r
+       APV_DATA_4_OUT          : out   std_logic_vector(11 downto 0);\r
+       APV_DATA_3_OUT          : out   std_logic_vector(11 downto 0);\r
+       APV_DATA_2_OUT          : out   std_logic_vector(11 downto 0);\r
+       APV_DATA_1_OUT          : out   std_logic_vector(11 downto 0);\r
+       APV_DATA_0_OUT          : out   std_logic_vector(11 downto 0);\r
+       APV_DATA_VALID_OUT      : out   std_logic;\r
+       LEVEL_RD_OUT            : out   std_logic_vector(4 downto 0);\r
+       -- Debug signals\r
+       DEBUG_OUT                       : out   std_logic_vector(31 downto 0)\r
+);\r
+end component adc_crossover;\r
+\r
+component crossover is\r
+port(\r
+       DATA            : in    std_logic_vector(95 downto 0);\r
+       WRCLOCK         : in    std_logic;\r
+       RDCLOCK         : in    std_logic;\r
+       WREN            : in    std_logic;\r
+       RDEN            : in    std_logic;\r
+       RESET           : in    std_logic; -- asynchronous reset!\r
+       RPRESET         : in    std_logic;\r
+       Q                       : out   std_logic_vector(95 downto 0);\r
+       WCNT            : out   std_logic_vector(4 downto 0);\r
+       RCNT            : out   std_logic_vector(4 downto 0);\r
+       EMPTY           : out   std_logic;\r
+       FULL            : out   std_logic\r
+);\r
+end component crossover;\r
+\r
+component slv_adc_la is\r
+port(\r
+       CLK_IN                  : in    std_logic;\r
+       RESET_IN                : in    std_logic;\r
+       -- Slave bus\r
+       SLV_ADDR_IN     : in    std_logic_vector(9 downto 0);\r
+       SLV_READ_IN             : in    std_logic;\r
+       SLV_WRITE_IN    : in    std_logic;\r
+       SLV_ACK_OUT             : out   std_logic;\r
+       SLV_DATA_IN             : in    std_logic_vector(31 downto 0);\r
+       SLV_DATA_OUT    : out   std_logic_vector(31 downto 0);\r
+       -- I/O to the backend\r
+       ADC_SEL_OUT             : out   std_logic_vector(2 downto 0);   -- selects the ADC channel to snoop from\r
+       ADC_CLK_IN              : in    std_logic;                                              -- ADC reconstructed clock\r
+       ADC_DATA_IN             : in    std_logic_vector(11 downto 0);  -- ADC selected channel data\r
+       -- Status lines\r
+       STAT                    : out   std_logic_vector(31 downto 0) -- DEBUG\r
+);\r
+end component slv_adc_la;\r
 \r
 -- NOT USED YET\r
-       component logic_analyzer is\r
-       port( CLK_IN            : in    std_logic;\r
-                 RESET_IN              : in    std_logic;\r
-                 -- control signals\r
-                 ARM_IN                : in    std_logic; -- arm the machine\r
-                 TRG_IN                : in    std_logic; -- trigger the data acquisition\r
-                 MAX_SAMPLE_IN : in    std_logic_vector(9 downto 0); \r
-                 -- status signals\r
-                 SM_ADDR_OUT   : out   std_logic_vector(9 downto 0); -- sample RAM addresses\r
-                 SM_CE_OUT             : out   std_logic;\r
-                 SM_WE_OUT             : out   std_logic; -- write enable for sample RAM\r
-                 CLEAR_OUT             : out   std_logic; -- sample memory is being cleared\r
-                 RUN_OUT               : out   std_logic; -- ready for trigger\r
-                 SAMPLE_OUT    : out   std_logic; -- data acquisition running\r
-                 READY_OUT             : out   std_logic; -- data acquisition is finished\r
-                 LAST_OUT              : out   std_logic; -- last data word of sampling\r
-                 -- Status lines\r
-                 BSM_OUT               : out   std_logic_vector(3 downto 0);\r
-                 STAT                  : out   std_logic_vector(31 downto 0) -- DEBUG\r
-               );\r
-       end component logic_analyzer;\r
-\r
-       component onewire_spare_one is\r
-       port( ADDRESS   : in    std_logic_vector(2 downto 0); \r
-                 Q                     : out   std_logic_vector(3 downto 0)\r
-               );\r
-       end component onewire_spare_one;\r
-\r
-       component adc_onewire_map_mem is\r
-       port( ADDRESS   : in    std_logic_vector(6 downto 0); \r
-                 Q                     : out   std_logic_vector(3 downto 0)\r
-               );\r
-       end component adc_onewire_map_mem;\r
-\r
-       component adc_channel_select is\r
-       port( RESET_IN                  : in    std_logic;\r
-                 ADC_CLK_IN            : in    std_logic;\r
-                 ADC_SEL_IN            : in    std_logic_vector(2 downto 0);\r
-                 ADC_7_IN                      : in    std_logic_vector(11 downto 0);\r
-                 ADC_6_IN                      : in    std_logic_vector(11 downto 0);\r
-                 ADC_5_IN                      : in    std_logic_vector(11 downto 0);\r
-                 ADC_4_IN                      : in    std_logic_vector(11 downto 0);\r
-                 ADC_3_IN                      : in    std_logic_vector(11 downto 0);\r
-                 ADC_2_IN                      : in    std_logic_vector(11 downto 0);\r
-                 ADC_1_IN                      : in    std_logic_vector(11 downto 0);\r
-                 ADC_0_IN                      : in    std_logic_vector(11 downto 0);\r
-                 ADC_CH_OUT            : out   std_logic_vector(11 downto 0);\r
-                 DEBUG_OUT                     : out   std_logic_vector(15 downto 0)\r
-               );\r
-       end component;\r
-\r
-       component slv_adc_snoop is\r
-       port( CLK_IN            : in    std_logic;\r
-                 RESET_IN              : in    std_logic;\r
-                 -- Slave bus\r
-                 SLV_ADDR_IN   : in    std_logic_vector(9 downto 0);\r
-                 SLV_READ_IN   : in    std_logic;\r
-                 SLV_WRITE_IN  : in    std_logic;\r
-                 SLV_ACK_OUT   : out   std_logic;\r
-                 SLV_DATA_IN   : in    std_logic_vector(31 downto 0);\r
-                 SLV_DATA_OUT  : out   std_logic_vector(31 downto 0);\r
-                 -- I/O to the backend\r
-                 ADC_SEL_OUT   : out   std_logic_vector(2 downto 0);   -- selects the ADC channel to snoop from\r
-                 ADC_CLK_IN    : in    std_logic;                                              -- ADC reconstructed clock\r
-                 ADC_DATA_IN   : in    std_logic_vector(11 downto 0);  -- ADC selected channel data\r
-                 -- Status lines\r
-                 STAT                  : out   std_logic_vector(31 downto 0) -- DEBUG\r
-               );\r
-       end component;\r
-\r
-       component adc_snoop_mem is\r
-       port( WRADDRESS : in    std_logic_vector(9 downto 0); \r
-                 RDADDRESS     : in    std_logic_vector(9 downto 0); \r
-                 DATA          : in    std_logic_vector(15 downto 0); \r
-                 WE            : in    std_logic; \r
-                 RDCLOCK       : in    std_logic; \r
-                 RDCLOCKEN     : in    std_logic; \r
-                 RESET         : in    std_logic; \r
-                 WRCLOCK       : in    std_logic; \r
-                 WRCLOCKEN     : in    std_logic; \r
-                 Q                     : out   std_logic_vector(15 downto 0)\r
-               );\r
-       end component;\r
-\r
-\r
-       component max_data is\r
-       port( CLK_IN                    : in    std_logic;\r
-                 RESET_IN                      : in    std_logic;\r
-                 TODO_3_IN                     : in    std_logic_vector(3 downto 0);\r
-                 TODO_2_IN                     : in    std_logic_vector(3 downto 0);\r
-                 TODO_1_IN                     : in    std_logic_vector(3 downto 0);\r
-                 TODO_0_IN                     : in    std_logic_vector(3 downto 0);\r
-                 TODO_MAX_OUT          : out   std_logic_vector(3 downto 0);\r
-                 DEBUG_OUT                     : out   std_logic_vector(15 downto 0)\r
-               );\r
-       end component;\r
-\r
-       component comp4bit is\r
-       port( DATAA             : in    std_logic_vector(3 downto 0); \r
-                 DATAB         : in    std_logic_vector(3 downto 0); \r
-                 AGTB          : out   std_logic\r
-               );\r
-       end component;\r
-\r
-       component slv_register_bank is\r
-       generic( RESET_VALUE    : std_logic_vector(15 downto 0) := x"0001" );\r
-       port( CLK_IN            : in    std_logic;\r
-                 RESET_IN              : in    std_logic;\r
-                 -- Slave bus\r
-                 SLV_ADDR_IN   : in    std_logic_vector(3 downto 0);\r
-                 SLV_READ_IN   : in    std_logic;\r
-                 SLV_WRITE_IN  : in    std_logic;\r
-                 SLV_ACK_OUT   : out   std_logic;\r
-                 SLV_DATA_IN   : in    std_logic_vector(31 downto 0);\r
-                 SLV_DATA_OUT  : out   std_logic_vector(31 downto 0);\r
-                 -- I/O to the backend\r
-                 BACKPLANE_IN  : in    std_logic_vector(2 downto 0);\r
-                 CTRL_0_OUT    : out   std_logic_vector(15 downto 0);\r
-                 CTRL_1_OUT    : out   std_logic_vector(15 downto 0);\r
-                 CTRL_2_OUT    : out   std_logic_vector(15 downto 0);\r
-                 CTRL_3_OUT    : out   std_logic_vector(15 downto 0);\r
-                 CTRL_4_OUT    : out   std_logic_vector(15 downto 0);\r
-                 CTRL_5_OUT    : out   std_logic_vector(15 downto 0);\r
-                 CTRL_6_OUT    : out   std_logic_vector(15 downto 0);\r
-                 CTRL_7_OUT    : out   std_logic_vector(15 downto 0);\r
-                 CTRL_8_OUT    : out   std_logic_vector(15 downto 0);\r
-                 CTRL_9_OUT    : out   std_logic_vector(15 downto 0);\r
-                 CTRL_10_OUT   : out   std_logic_vector(15 downto 0);\r
-                 CTRL_11_OUT   : out   std_logic_vector(15 downto 0);\r
-                 CTRL_12_OUT   : out   std_logic_vector(15 downto 0);\r
-                 CTRL_13_OUT   : out   std_logic_vector(15 downto 0);\r
-                 CTRL_14_OUT   : out   std_logic_vector(15 downto 0);\r
-                 CTRL_15_OUT   : out   std_logic_vector(15 downto 0);\r
-                 STAT_0_IN             : in    std_logic_vector(15 downto 0);\r
-                 STAT_1_IN             : in    std_logic_vector(15 downto 0);\r
-                 STAT_2_IN             : in    std_logic_vector(15 downto 0);\r
-                 STAT_3_IN             : in    std_logic_vector(15 downto 0);\r
-                 STAT_4_IN             : in    std_logic_vector(15 downto 0);\r
-                 STAT_5_IN             : in    std_logic_vector(15 downto 0);\r
-                 STAT_6_IN             : in    std_logic_vector(15 downto 0);\r
-                 STAT_7_IN             : in    std_logic_vector(15 downto 0);\r
-                 STAT_8_IN             : in    std_logic_vector(15 downto 0);\r
-                 STAT_9_IN             : in    std_logic_vector(15 downto 0);\r
-                 STAT_10_IN    : in    std_logic_vector(15 downto 0);\r
-                 STAT_11_IN    : in    std_logic_vector(15 downto 0);\r
-                 STAT_12_IN    : in    std_logic_vector(15 downto 0);\r
-                 STAT_13_IN    : in    std_logic_vector(15 downto 0);\r
-                 STAT_14_IN    : in    std_logic_vector(15 downto 0);\r
-                 STAT_15_IN    : in    std_logic_vector(15 downto 0);\r
-                 -- Status lines\r
-                 STAT                  : out   std_logic_vector(31 downto 0) -- DEBUG\r
-               );\r
-       end component;\r
-\r
-       component pulse_stretch is\r
-       port( CLK_IN                    : in    std_logic;\r
-                 RESET_IN                      : in    std_logic;\r
-                 START_IN                      : in    std_logic;\r
-                 PULSE_OUT                     : out   std_logic;\r
-                 DEBUG_OUT                     : out   std_logic_vector(15 downto 0)\r
-               );\r
-       end component;\r
-\r
-       component apv_adc_map_mem is\r
-       port( ADDRESS   : in    std_logic_vector(6 downto 0); \r
-                 Q                     : out   std_logic_vector(3 downto 0)\r
-                );\r
-       end component;\r
-\r
-       component adc_apv_map_mem is\r
-       port( ADDRESS   : in    std_logic_vector(6 downto 0); \r
-                 Q                     : out   std_logic_vector(3 downto 0)\r
-                );\r
-       end component;\r
-\r
-\r
-       component ped_thr_true is\r
-       port( DATAINA   : in    std_logic_vector(17 downto 0); \r
-                 DATAINB       : in    std_logic_vector(17 downto 0); \r
-                 ADDRESSA      : in    std_logic_vector(6 downto 0); \r
-                 ADDRESSB      : in    std_logic_vector(6 downto 0); \r
-                 CLOCKA        : in    std_logic; \r
-                 CLOCKB        : in    std_logic; \r
-                 CLOCKENA      : in    std_logic; \r
-                 CLOCKENB      : in    std_logic; \r
-                 WRA           : in    std_logic; \r
-                 WRB           : in    std_logic; \r
-                 RESETA        : in    std_logic; \r
-                 RESETB        : in    std_logic; \r
-                 QA            : out   std_logic_vector(17 downto 0); \r
-                 QB            : out   std_logic_vector(17 downto 0)\r
-               );\r
-       end component;\r
-\r
-       component slv_ped_thr_mem is\r
-       port( CLK_IN            : in    std_logic;\r
-                 RESET_IN              : in    std_logic;\r
-                 -- Slave bus\r
-                 SLV_ADDR_IN   : in    std_logic_vector(10 downto 0);\r
-                 SLV_READ_IN   : in    std_logic;\r
-                 SLV_WRITE_IN  : in    std_logic;\r
-                 SLV_ACK_OUT   : out   std_logic;\r
-                 SLV_DATA_IN   : in    std_logic_vector(31 downto 0);\r
-                 SLV_DATA_OUT  : out   std_logic_vector(31 downto 0);\r
-                 -- backplane identifier\r
-                 BACKPLANE_IN  : in    std_logic_vector(2 downto 0);\r
-                 -- I/O to the backend\r
-                 MEM_CLK_IN    : in    std_logic;\r
-                 MEM_ADDR_IN   : in    std_logic_vector(6 downto 0);\r
-                 MEM_0_D_OUT   : out   std_logic_vector(17 downto 0);\r
-                 MEM_1_D_OUT   : out   std_logic_vector(17 downto 0);\r
-                 MEM_2_D_OUT   : out   std_logic_vector(17 downto 0);\r
-                 MEM_3_D_OUT   : out   std_logic_vector(17 downto 0);\r
-                 MEM_4_D_OUT   : out   std_logic_vector(17 downto 0);\r
-                 MEM_5_D_OUT   : out   std_logic_vector(17 downto 0);\r
-                 MEM_6_D_OUT   : out   std_logic_vector(17 downto 0);\r
-                 MEM_7_D_OUT   : out   std_logic_vector(17 downto 0);\r
-                 MEM_8_D_OUT   : out   std_logic_vector(17 downto 0);\r
-                 MEM_9_D_OUT   : out   std_logic_vector(17 downto 0);\r
-                 MEM_10_D_OUT  : out   std_logic_vector(17 downto 0);\r
-                 MEM_11_D_OUT  : out   std_logic_vector(17 downto 0);\r
-                 MEM_12_D_OUT  : out   std_logic_vector(17 downto 0);\r
-                 MEM_13_D_OUT  : out   std_logic_vector(17 downto 0);\r
-                 MEM_14_D_OUT  : out   std_logic_vector(17 downto 0);\r
-                 MEM_15_D_OUT  : out   std_logic_vector(17 downto 0);\r
-                 -- Status lines\r
-                 STAT                  : out   std_logic_vector(31 downto 0) -- DEBUG\r
-               );\r
-       end component;\r
-\r
-       component reset_handler is\r
-       port( CLEAR_IN                  : in    std_logic; -- async reset from outside, if available (otherwise '0')\r
-                 RESET_IN                      : in    std_logic; -- for testing, if not needed, set to '0'\r
-                 CLK_IN                        : in    std_logic;\r
-                 TRB_RESET_IN          : in    std_logic;\r
-                 RESET_OUT                     : out   std_logic;\r
-                 DEBUG_OUT                     : out   std_logic_vector(15 downto 0)\r
-               );\r
-       end component;\r
-\r
-       component pll_40m is\r
-       port( CLK               : in    std_logic;\r
-                 RESET         : in    std_logic; \r
-                 DPAMODE       : in    std_logic;\r
-                 DPHASE0       : in    std_logic;\r
-                 DPHASE1       : in    std_logic;\r
-                 DPHASE2       : in    std_logic;\r
-                 DPHASE3       : in    std_logic;\r
-                 CLKOP         : out   std_logic;\r
-                 CLKOS         : out   std_logic;\r
-                 LOCK          : out   std_logic\r
-               );\r
-       end component;\r
-\r
-       component dll_100m is\r
-       port( CLK               : in    std_logic; \r
-                 RESETN        : in    std_logic; \r
-                 ALUHOLD       : in    std_logic; \r
-                 CLKOP         : out   std_logic; \r
-                 CLKOS         : out   std_logic; \r
-                 LOCK          : out   std_logic\r
-               );\r
-       end component;\r
-\r
-       component state_sync is\r
-       port( STATE_A_IN                : in    std_logic;\r
-                 CLK_B_IN                      : in    std_logic;\r
-                 RESET_B_IN            : in    std_logic;\r
-                 STATE_B_OUT           : out   std_logic\r
-               );\r
-       end component;\r
-\r
-       component pulse_sync is\r
-       port( CLK_A_IN                  : in    std_logic;\r
-                 RESET_A_IN            : in    std_logic;\r
-                 PULSE_A_IN            : in    std_logic;\r
-                 CLK_B_IN                      : in    std_logic;\r
-                 RESET_B_IN            : in    std_logic;\r
-                 PULSE_B_OUT           : out   std_logic\r
-               );\r
-       end component;  \r
-\r
-       component rich_trb is\r
-       port( CLK100M_IN                                : in    std_logic;\r
-                 SYSCLK_IN                                     : in    std_logic;\r
-                 RESET_IN                                      : in    std_logic;\r
-                 SD_RXD_P_IN                           : in    std_logic;\r
-                 SD_RXD_N_IN                           : in    std_logic;\r
-                 SD_TXD_P_OUT                          : out   std_logic;      \r
-                 SD_TXD_N_OUT                          : out   std_logic;\r
-                 SD_PRESENT_IN                         : in    std_logic;\r
-                 SD_TXDIS_OUT                          : out   std_logic;\r
-                 SD_LOS_IN                                     : in    std_logic;\r
-                 ONEWIRE_INOUT                         : inout std_logic;\r
-                 -- common regIO status / control registers\r
---               COMMON_STAT_REG_IN            : in    std_logic_vector(std_COMSTATREG*c_REGIO_REGISTER_WIDTH-1 downto 0); -- common status register, bit definitions like in WIKI\r
-                 COMMON_STAT_REG_IN            : in    std_logic_vector(2*32-1 downto 0); -- common status register, bit definitions like in WIKI\r
---               COMMON_CTRL_REG_OUT           : out   std_logic_vector(std_COMCTRLREG*c_REGIO_REGISTER_WIDTH-1 downto 0); -- common control register, bit definitions like in WIKI\r
-                 COMMON_CTRL_REG_OUT           : out   std_logic_vector(2*32-1 downto 0); -- common control register, bit definitions like in WIKI\r
-             -- status register input to regIO / control register output from regIO\r
-             CONTROL_OUT                               : out   std_logic_vector(63 downto 0);\r
-                 STATUS_IN                                     : in    std_logic_vector(127 downto 0); \r
-                 -- LVL1 signals\r
-                 LVL1_TRG_TYPE_OUT                     : out   std_logic_vector(3 downto 0);\r
-                 LVL1_TRG_RECEIVED_OUT         : out   std_logic;\r
-                 LVL1_TRG_NUMBER_OUT           : out   std_logic_vector(15 downto 0);\r
-                 LVL1_TRG_CODE_OUT                     : out   std_logic_vector(7 downto 0);\r
-                 LVL1_TRG_INFORMATION_OUT      : out   std_logic_vector(23 downto 0);\r
-                 LVL1_ERROR_PATTERN_IN         : in    std_logic_vector(31 downto 0);\r
-                 LVL1_TRG_RELEASE_IN           : in    std_logic;\r
-             TIMING_TRG_FOUND_IN               : in    std_logic;\r
-                 -- IPU data channel signals (yes, we will use ComputeNodes (tm) (R) (C) one day... :-)\r
-                 IPU_NUMBER_OUT                        : out   std_logic_vector(15 downto 0); -- trigger tag\r
-                 IPU_INFORMATION_OUT           : out   std_logic_vector(7 downto 0); -- trigger information\r
-                 IPU_START_READOUT_OUT         : out   std_logic; -- gimme data!\r
-                 IPU_DATA_IN                           : in    std_logic_vector(31 downto 0); -- detector data, equipped with DHDR\r
-                 IPU_DATAREADY_IN                      : in    std_logic; -- data is valid\r
-                 IPU_READOUT_FINISHED_IN       : in    std_logic; -- no more data, end transfer, send TRM\r
-                 IPU_READ_OUT                          : out   std_logic; -- read strobe, low every second cycle \r
-                 IPU_LENGTH_IN                         : in    std_logic_vector(15 downto 0); -- length of data packet (32bit words) (?)\r
-                 IPU_ERROR_PATTERN_IN          : in    std_logic_vector(31 downto 0); -- error pattern\r
-                 -- regIO bus\r
---           REGIO_ADDR_OUT                    : out   std_logic_vector(c_REGIO_ADDRESS_WIDTH-1 downto 0);\r
-             REGIO_ADDR_OUT                    : out   std_logic_vector(16-1 downto 0);\r
-             REGIO_READ_ENABLE_OUT             : out   std_logic;\r
-             REGIO_WRITE_ENABLE_OUT    : out   std_logic;\r
---           REGIO_DATA_OUT                    : out   std_logic_vector(c_REGIO_REGISTER_WIDTH-1 downto 0);\r
-             REGIO_DATA_OUT                    : out   std_logic_vector(32-1 downto 0);\r
---           REGIO_DATA_IN                             : in    std_logic_vector(c_REGIO_REGISTER_WIDTH-1 downto 0);\r
-             REGIO_DATA_IN                             : in    std_logic_vector(32-1 downto 0);\r
-             REGIO_DATAREADY_IN                : in    std_logic;\r
-             REGIO_NO_MORE_DATA_IN             : in    std_logic;\r
-             REGIO_WRITE_ACK_IN                : in    std_logic;\r
-             REGIO_UNKNOWN_ADDR_IN             : in    std_logic;\r
-             REGIO_TIMEOUT_OUT                 : out   std_logic;\r
-             -- status LEDs\r
-                 LED_LINK_STAT                         : out   std_logic;\r
-                 LED_LINK_TXD                          : out   std_logic;\r
-                 LED_LINK_RXD                          : out   std_logic;\r
-             LINK_BSM_OUT                              : out   std_logic_vector(3 downto 0);\r
-             RESET_OUT                                 : out   std_logic;\r
-                 -- Debug\r
-                 DEBUG                                         : out   std_logic_vector(63 downto 0)\r
-               );\r
-       end component;\r
-\r
-       component slave_bus is\r
-       port( CLK_IN                                    : in    std_logic;\r
-                 RESET_IN                                      : in    std_logic;\r
-                 -- RegIO signals\r
-                 REGIO_ADDR_IN                         : in    std_logic_vector(15 downto 0); -- address bus \r
-                 REGIO_DATA_IN                         : in    std_logic_vector(31 downto 0); -- data from TRB endpoint\r
-                 REGIO_DATA_OUT                        : out   std_logic_vector(31 downto 0); -- data to TRB endpoint\r
-                 REGIO_READ_ENABLE_IN          : in    std_logic; -- read pulse\r
-                 REGIO_WRITE_ENABLE_IN         : in    std_logic; -- write pulse\r
-                 REGIO_TIMEOUT_IN                      : in    std_logic; -- access timed out\r
-                 REGIO_DATAREADY_OUT           : out   std_logic; -- your data, master, as requested\r
-                 REGIO_WRITE_ACK_OUT           : out   std_logic; -- data accepted\r
-                 REGIO_NO_MORE_DATA_OUT        : out   std_logic; -- don't disturb me now\r
-                 REGIO_UNKNOWN_ADDR_OUT        : out   std_logic; -- noone here to answer your request\r
-                 -- I2C connections\r
-                 SDA_IN                                        : in    std_logic;\r
-                 SDA_OUT                                       : out   std_logic;\r
-                 SCL_IN                                        : in    std_logic;\r
-                 SCL_OUT                                       : out   std_logic;\r
-                 -- 1Wire connections\r
-                 ONEWIRE_START_IN                      : in    std_logic; -- start 1Wire scan (pulse)\r
-                 ONEWIRE_INOUT                         : inout std_logic_vector(15 downto 0); -- 1Wire ID on APV FEs\r
-                 BP_ONEWIRE_INOUT                      : inout std_logic; -- 1Wire ID on backplane\r
-                 -- SPI connections\r
-                 SPI_CS_OUT                            : out   std_logic;\r
-                 SPI_SCK_OUT                           : out   std_logic;\r
-                 SPI_SDI_IN                            : in    std_logic;\r
-                 SPI_SDO_OUT                           : out   std_logic;\r
-                 -- ADC 0 SPI connections\r
-                 SPI_ADC0_CS_OUT                       : out   std_logic;\r
-                 SPI_ADC0_SCK_OUT                      : out   std_logic;\r
-                 SPI_ADC0_SDO_OUT                      : out   std_logic;\r
-                 ADC0_PLL_LOCKED_IN            : in    std_logic;\r
-                 ADC0_PD_OUT                           : out   std_logic;\r
-                 ADC0_RST_OUT                          : out   std_logic;\r
-                 ADC0_DEL_OUT                          : out   std_logic_vector(3 downto 0);\r
-                 ADC0_CLK_IN                           : in    std_logic;\r
-                 ADC0_DATA_IN                          : in    std_logic_vector(11 downto 0);\r
-                 ADC0_SEL_OUT                          : out   std_logic_vector(2 downto 0);\r
-                 APV0_RST_OUT                          : out   std_logic;\r
-                 -- ADC 0 SPI connections\r
-                 SPI_ADC1_CS_OUT                       : out   std_logic;\r
-                 SPI_ADC1_SCK_OUT                      : out   std_logic;\r
-                 SPI_ADC1_SDO_OUT                      : out   std_logic;\r
-                 ADC1_PLL_LOCKED_IN            : in    std_logic;\r
-                 ADC1_PD_OUT                           : out   std_logic;\r
-                 ADC1_RST_OUT                          : out   std_logic;\r
-                 ADC1_DEL_OUT                          : out   std_logic_vector(3 downto 0);\r
-                 ADC1_CLK_IN                           : in    std_logic;\r
-                 ADC1_DATA_IN                          : in    std_logic_vector(11 downto 0);\r
-                 ADC1_SEL_OUT                          : out   std_logic_vector(2 downto 0);\r
-                 APV1_RST_OUT                          : out   std_logic;\r
-                 -- User specific inputs / outputs\r
-                 BACKPLANE_IN                          : in    std_logic_vector(2 downto 0);\r
-                 -- pedestal interface\r
-                 PED_ADDR_IN                           : in    std_logic_vector(6 downto 0); -- pedestal addressing from data handlers\r
-                 PED_DATA_0_OUT                        : out   std_logic_vector(17 downto 0);\r
-                 PED_DATA_1_OUT                        : out   std_logic_vector(17 downto 0);\r
-                 PED_DATA_2_OUT                        : out   std_logic_vector(17 downto 0);\r
-                 PED_DATA_3_OUT                        : out   std_logic_vector(17 downto 0);\r
-                 PED_DATA_4_OUT                        : out   std_logic_vector(17 downto 0);\r
-                 PED_DATA_5_OUT                        : out   std_logic_vector(17 downto 0);\r
-                 PED_DATA_6_OUT                        : out   std_logic_vector(17 downto 0);\r
-                 PED_DATA_7_OUT                        : out   std_logic_vector(17 downto 0);\r
-                 PED_DATA_8_OUT                        : out   std_logic_vector(17 downto 0);\r
-                 PED_DATA_9_OUT                        : out   std_logic_vector(17 downto 0);\r
-                 PED_DATA_10_OUT                       : out   std_logic_vector(17 downto 0);\r
-                 PED_DATA_11_OUT                       : out   std_logic_vector(17 downto 0);\r
-                 PED_DATA_12_OUT                       : out   std_logic_vector(17 downto 0);\r
-                 PED_DATA_13_OUT                       : out   std_logic_vector(17 downto 0);\r
-                 PED_DATA_14_OUT                       : out   std_logic_vector(17 downto 0);\r
-                 PED_DATA_15_OUT                       : out   std_logic_vector(17 downto 0);\r
-                 -- threshold interface\r
-                 THR_ADDR_IN                           : in    std_logic_vector(6 downto 0); -- threshold addressing from data handlers\r
-                 THR_DATA_0_OUT                        : out   std_logic_vector(17 downto 0);\r
-                 THR_DATA_1_OUT                        : out   std_logic_vector(17 downto 0);\r
-                 THR_DATA_2_OUT                        : out   std_logic_vector(17 downto 0);\r
-                 THR_DATA_3_OUT                        : out   std_logic_vector(17 downto 0);\r
-                 THR_DATA_4_OUT                        : out   std_logic_vector(17 downto 0);\r
-                 THR_DATA_5_OUT                        : out   std_logic_vector(17 downto 0);\r
-                 THR_DATA_6_OUT                        : out   std_logic_vector(17 downto 0);\r
-                 THR_DATA_7_OUT                        : out   std_logic_vector(17 downto 0);\r
-                 THR_DATA_8_OUT                        : out   std_logic_vector(17 downto 0);\r
-                 THR_DATA_9_OUT                        : out   std_logic_vector(17 downto 0);\r
-                 THR_DATA_10_OUT                       : out   std_logic_vector(17 downto 0);\r
-                 THR_DATA_11_OUT                       : out   std_logic_vector(17 downto 0);\r
-                 THR_DATA_12_OUT                       : out   std_logic_vector(17 downto 0);\r
-                 THR_DATA_13_OUT                       : out   std_logic_vector(17 downto 0);\r
-                 THR_DATA_14_OUT                       : out   std_logic_vector(17 downto 0);\r
-                 THR_DATA_15_OUT                       : out   std_logic_vector(17 downto 0);\r
-                 -- APV control / status\r
-                 CTRL_0_OUT                            : out   std_logic_vector(15 downto 0);\r
-                 CTRL_1_OUT                            : out   std_logic_vector(15 downto 0);\r
-                 CTRL_2_OUT                            : out   std_logic_vector(15 downto 0);\r
-                 CTRL_3_OUT                            : out   std_logic_vector(15 downto 0);\r
-                 CTRL_4_OUT                            : out   std_logic_vector(15 downto 0);\r
-                 CTRL_5_OUT                            : out   std_logic_vector(15 downto 0);\r
-                 CTRL_6_OUT                            : out   std_logic_vector(15 downto 0);\r
-                 CTRL_7_OUT                            : out   std_logic_vector(15 downto 0);\r
-                 CTRL_8_OUT                            : out   std_logic_vector(15 downto 0);\r
-                 CTRL_9_OUT                            : out   std_logic_vector(15 downto 0);\r
-                 CTRL_10_OUT                           : out   std_logic_vector(15 downto 0);\r
-                 CTRL_11_OUT                           : out   std_logic_vector(15 downto 0);\r
-                 CTRL_12_OUT                           : out   std_logic_vector(15 downto 0);\r
-                 CTRL_13_OUT                           : out   std_logic_vector(15 downto 0);\r
-                 CTRL_14_OUT                           : out   std_logic_vector(15 downto 0);\r
-                 CTRL_15_OUT                           : out   std_logic_vector(15 downto 0);\r
-                 STAT_0_IN                                     : in    std_logic_vector(15 downto 0);\r
-                 STAT_1_IN                                     : in    std_logic_vector(15 downto 0);\r
-                 STAT_2_IN                                     : in    std_logic_vector(15 downto 0);\r
-                 STAT_3_IN                                     : in    std_logic_vector(15 downto 0);\r
-                 STAT_4_IN                                     : in    std_logic_vector(15 downto 0);\r
-                 STAT_5_IN                                     : in    std_logic_vector(15 downto 0);\r
-                 STAT_6_IN                                     : in    std_logic_vector(15 downto 0);\r
-                 STAT_7_IN                                     : in    std_logic_vector(15 downto 0);\r
-                 STAT_8_IN                                     : in    std_logic_vector(15 downto 0);\r
-                 STAT_9_IN                                     : in    std_logic_vector(15 downto 0);\r
-                 STAT_10_IN                            : in    std_logic_vector(15 downto 0);\r
-                 STAT_11_IN                            : in    std_logic_vector(15 downto 0);\r
-                 STAT_12_IN                            : in    std_logic_vector(15 downto 0);\r
-                 STAT_13_IN                            : in    std_logic_vector(15 downto 0);\r
-                 STAT_14_IN                            : in    std_logic_vector(15 downto 0);\r
-                 STAT_15_IN                            : in    std_logic_vector(15 downto 0);\r
-                 -- some control signals\r
-                 CTRL_LVL_OUT                          : out   std_logic_vector(31 downto 0);\r
-                 CTRL_TRG_OUT                          : out   std_logic_vector(31 downto 0);\r
-                 CTRL_PLL_OUT                          : out   std_logic_vector(15 downto 0);\r
-                 STATUS_PLL_IN                         : in    std_logic_vector(15 downto 0);\r
-                 -- temporary stuff\r
-                 TEST_REG_IN                           : in    std_logic_vector(31 downto 0); -- just for testing!\r
-                 TEST_REG_OUT                          : out   std_logic_vector(31 downto 0); -- just for testing!\r
-                 -- Debug\r
-                 DEBUG_OUT                                     : out   std_logic_vector(63 downto 0);\r
-                 STAT                                          : out   std_logic_vector(31 downto 0)\r
-               );\r
-       end component;\r
-\r
-       component oddrxc is\r
-       port( DA   : in    std_logic;\r
-                 DB   : in    std_logic;\r
-                 CLK  : in    std_logic;\r
-                 RST  : in    std_logic;\r
-                 Q    : out   std_logic\r
-               );\r
-       end component;\r
-\r
-       component apv_trgctrl is\r
-       port( CLK_IN                            : in    std_logic; -- 100MHz master clock\r
-                 RESET_IN                              : in    std_logic; \r
-                 CLK_APV_IN                    : in    std_logic; -- 40MHz phase shifted clock\r
-                 -- Triggers\r
-                 SYNC_TRG_IN                   : in    std_logic; -- 100MHz signal to SYNC APVs\r
-                 TIME_TRG_IN                   : in    std_logic_vector(3 downto 0); -- timing trigger inputs\r
-                 TRB_TRG_IN                    : in    std_logic_vector(3 downto 0); -- TRB trigger inputs\r
-                 STILL_BUSY_IN                 : in    std_logic; -- set to '1' if any buffer is in danger of overflow\r
-                 TRG_FOUND_OUT                 : out   std_logic; -- trigger found\r
-                 -- slow control settings\r
-                 TRG_MAX_OUT                   : out   std_logic_vector(3 downto 0); -- maximum number of triggers/event\r
-                 TRG_3_TODO_IN                 : in    std_logic_vector(3 downto 0); -- APV triggers on trigger 3\r
-                 TRG_3_DELAY_IN                : in    std_logic_vector(3 downto 0); -- delay between triggers\r
-                 TRG_2_TODO_IN                 : in    std_logic_vector(3 downto 0); -- APV triggers on trigger 2\r
-                 TRG_2_DELAY_IN                : in    std_logic_vector(3 downto 0); -- delay between triggers\r
-                 TRG_1_TODO_IN                 : in    std_logic_vector(3 downto 0); -- APV triggers on trigger 1\r
-                 TRG_1_DELAY_IN                : in    std_logic_vector(3 downto 0); -- delay between triggers\r
-                 TRG_0_TODO_IN                 : in    std_logic_vector(3 downto 0); -- APV triggers on trigger 0\r
-                 TRG_0_DELAY_IN                : in    std_logic_vector(3 downto 0); -- delay between triggers\r
-                 TRG_SETUP_IN                  : in    std_logic_vector(7 downto 0); -- setup of external triggers\r
-                 -- TRB LVL1 signals\r
-                 TRB_TTAG_IN                   : in    std_logic_vector(15 downto 0); -- TRB LVL1 trigger tag\r
-                 TRB_TRND_IN                   : in    std_logic_vector(7 downto 0); -- TRB LVL1 random tag\r
-                 TRB_TTYPE_IN                  : in    std_logic_vector(3 downto 0); -- TRB LVL1 trigger type\r
-                 TRB_TRGRCVD_IN                : in    std_logic; -- TRB LVL1 trigger received\r
-                 TRB_MISSING_OUT               : out   std_logic; -- TRB LVL1 trigger arrived, but has no corresponding timing trigger\r
-                 TRB_RELEASE_OUT               : out   std_logic; -- release TRB LVL1 channel\r
-                 TRB_RST_COUNTER_IN    : in    std_logic; -- reset timing trigger counter\r
-                 TRB_COUNTER_OUT               : out   std_logic_vector(15 downto 0);\r
-                 -- EDS signals\r
-                 EDS_DATA_OUT                  : out   std_logic_vector(39 downto 0); -- EventDataSheet (tm) data word\r
-                 EDS_AVAIL_OUT                 : out   std_logic; -- EDS valid, APV trigger done\r
-                 EDS_DONE_IN                   : in    std_logic; -- release current EDS buffer\r
-                 EDS_FULL_OUT                  : out   std_logic; -- EDS buffer is full\r
-                 EDS_LEVEL_OUT                 : out   std_logic_vector(4 downto 0);\r
-                 FRM_REQD_OUT                  : out   std_logic; -- frame requested, (level counter decrement)\r
-                 -- APV signals        \r
-                 APV_TRG_OUT                   : out   std_logic;\r
-                 APV_SYNC_OUT                  : out   std_logic;\r
-                 DEBUG_OUT                             : out   std_logic_vector(63 downto 0)\r
-               );\r
-       end component;\r
-\r
-       component ped_corr_ctrl is\r
-       port( CLK_IN                    : in    std_logic; -- 100MHz local clock\r
-                 RESET_IN                      : in    std_logic; -- synchronous reset\r
-                 -- Slow control registers\r
-                 -- EDS buffer -- back to previous source stage\r
-                 EDS_DATA_IN           : in    std_logic_vector(39 downto 0);\r
-                 EDS_AVAIL_IN          : in    std_logic;\r
-                 EDS_DONE_OUT          : out   std_logic;\r
-                 EVT_TYPE_IN           : in    std_logic_vector(2 downto 0);\r
-                 -- DHDR information -- to next stage\r
-                 DHDR_DATA_OUT         : out   std_logic_vector(31 downto 0);\r
-                 DHDR_LENGTH_OUT       : out   std_logic_vector(15 downto 0);\r
-                 DHDR_STORE_OUT        : out   std_logic;\r
-                 DHDR_BUF_FULL_IN      : in    std_logic;\r
-                 -- data buffers -- from raw_buf_stage\r
-                 BUF_ADDR_OUT          : out   std_logic_vector(6 downto 0);\r
-                 BUF_DONE_OUT          : out   std_logic;\r
-                 BUF_TICK_IN           : in    std_logic_vector(15 downto 0);\r
-                 BUF_START_IN          : in    std_logic_vector(15 downto 0);\r
-                 -- raw data\r
-                 BUF_0_DATA_IN         : in    std_logic_vector(37 downto 0);\r
-                 BUF_1_DATA_IN         : in    std_logic_vector(37 downto 0);\r
-                 BUF_2_DATA_IN         : in    std_logic_vector(37 downto 0);\r
-                 BUF_3_DATA_IN         : in    std_logic_vector(37 downto 0);\r
-                 BUF_4_DATA_IN         : in    std_logic_vector(37 downto 0);\r
-                 BUF_5_DATA_IN         : in    std_logic_vector(37 downto 0);\r
-                 BUF_6_DATA_IN         : in    std_logic_vector(37 downto 0);\r
-                 BUF_7_DATA_IN         : in    std_logic_vector(37 downto 0);\r
-                 BUF_8_DATA_IN         : in    std_logic_vector(37 downto 0);\r
-                 BUF_9_DATA_IN         : in    std_logic_vector(37 downto 0);\r
-                 BUF_10_DATA_IN        : in    std_logic_vector(37 downto 0);\r
-                 BUF_11_DATA_IN        : in    std_logic_vector(37 downto 0);\r
-                 BUF_12_DATA_IN        : in    std_logic_vector(37 downto 0);\r
-                 BUF_13_DATA_IN        : in    std_logic_vector(37 downto 0);\r
-                 BUF_14_DATA_IN        : in    std_logic_vector(37 downto 0);\r
-                 BUF_15_DATA_IN        : in    std_logic_vector(37 downto 0);\r
-                 -- Pedestal data \r
-                 PED_ADDR_OUT          : out   std_logic_vector(6 downto 0);\r
-                 PED_0_DATA_IN         : in    std_logic_vector(17 downto 0);\r
-                 PED_1_DATA_IN         : in    std_logic_vector(17 downto 0);\r
-                 PED_2_DATA_IN         : in    std_logic_vector(17 downto 0);\r
-                 PED_3_DATA_IN         : in    std_logic_vector(17 downto 0);\r
-                 PED_4_DATA_IN         : in    std_logic_vector(17 downto 0);\r
-                 PED_5_DATA_IN         : in    std_logic_vector(17 downto 0);\r
-                 PED_6_DATA_IN         : in    std_logic_vector(17 downto 0);\r
-                 PED_7_DATA_IN         : in    std_logic_vector(17 downto 0);\r
-                 PED_8_DATA_IN         : in    std_logic_vector(17 downto 0);\r
-                 PED_9_DATA_IN         : in    std_logic_vector(17 downto 0);\r
-                 PED_10_DATA_IN        : in    std_logic_vector(17 downto 0);\r
-                 PED_11_DATA_IN        : in    std_logic_vector(17 downto 0);\r
-                 PED_12_DATA_IN        : in    std_logic_vector(17 downto 0);\r
-                 PED_13_DATA_IN        : in    std_logic_vector(17 downto 0);\r
-                 PED_14_DATA_IN        : in    std_logic_vector(17 downto 0);\r
-                 PED_15_DATA_IN        : in    std_logic_vector(17 downto 0);\r
-                 -- Threshold data\r
-                 THR_ADDR_OUT          : out   std_logic_vector(6 downto 0);\r
-                 THR_0_DATA_IN         : in    std_logic_vector(17 downto 0);\r
-                 THR_1_DATA_IN         : in    std_logic_vector(17 downto 0);\r
-                 THR_2_DATA_IN         : in    std_logic_vector(17 downto 0);\r
-                 THR_3_DATA_IN         : in    std_logic_vector(17 downto 0);\r
-                 THR_4_DATA_IN         : in    std_logic_vector(17 downto 0);\r
-                 THR_5_DATA_IN         : in    std_logic_vector(17 downto 0);\r
-                 THR_6_DATA_IN         : in    std_logic_vector(17 downto 0);\r
-                 THR_7_DATA_IN         : in    std_logic_vector(17 downto 0);\r
-                 THR_8_DATA_IN         : in    std_logic_vector(17 downto 0);\r
-                 THR_9_DATA_IN         : in    std_logic_vector(17 downto 0);\r
-                 THR_10_DATA_IN        : in    std_logic_vector(17 downto 0);\r
-                 THR_11_DATA_IN        : in    std_logic_vector(17 downto 0);\r
-                 THR_12_DATA_IN        : in    std_logic_vector(17 downto 0);\r
-                 THR_13_DATA_IN        : in    std_logic_vector(17 downto 0);\r
-                 THR_14_DATA_IN        : in    std_logic_vector(17 downto 0);\r
-                 THR_15_DATA_IN        : in    std_logic_vector(17 downto 0);\r
-                 -- processed data\r
-                 FIFO_START_OUT        : out   std_logic;\r
-                 FIFO_0_DATA_OUT       : out   std_logic_vector(39 downto 0);\r
-                 FIFO_1_DATA_OUT       : out   std_logic_vector(39 downto 0);\r
-                 FIFO_2_DATA_OUT       : out   std_logic_vector(39 downto 0);\r
-                 FIFO_3_DATA_OUT       : out   std_logic_vector(39 downto 0);\r
-                 FIFO_4_DATA_OUT       : out   std_logic_vector(39 downto 0);\r
-                 FIFO_5_DATA_OUT       : out   std_logic_vector(39 downto 0);\r
-                 FIFO_6_DATA_OUT       : out   std_logic_vector(39 downto 0);\r
-                 FIFO_7_DATA_OUT       : out   std_logic_vector(39 downto 0);\r
-                 FIFO_8_DATA_OUT       : out   std_logic_vector(39 downto 0);\r
-                 FIFO_9_DATA_OUT       : out   std_logic_vector(39 downto 0);\r
-                 FIFO_10_DATA_OUT      : out   std_logic_vector(39 downto 0);\r
-                 FIFO_11_DATA_OUT      : out   std_logic_vector(39 downto 0);\r
-                 FIFO_12_DATA_OUT      : out   std_logic_vector(39 downto 0);\r
-                 FIFO_13_DATA_OUT      : out   std_logic_vector(39 downto 0);\r
-                 FIFO_14_DATA_OUT      : out   std_logic_vector(39 downto 0);\r
-                 FIFO_15_DATA_OUT      : out   std_logic_vector(39 downto 0);\r
-                 FIFO_WE_OUT           : out   std_logic_vector(15 downto 0);\r
-                 FIFO_DONE_OUT         : out   std_logic; -- write level information into small FIFOs\r
-                 -- Debug signals\r
-                 DBG_BSM_OUT           : out   std_logic_vector(7 downto 0);\r
-                 DBG_OUT                       : out   std_logic_vector(15 downto 0)\r
-               );\r
-       end component;\r
-\r
-       component ipu_fifo_stage is\r
-       port( CLK_IN                                    : in    std_logic; -- 100MHz local clock\r
-                 RESET_IN                                      : in    std_logic; -- synchronous reset\r
-                 -- Slow control signals       \r
-                 SECTOR_IN                                     : in    std_logic_vector(2 downto 0);\r
-                 MODULE_IN                                     : in    std_logic_vector(2 downto 0);\r
-                 -- IPU channel connections\r
-                 IPU_NUMBER_IN                         : in    std_logic_vector(15 downto 0); -- trigger tag\r
-                 IPU_INFORMATION_IN            : in    std_logic_vector(7 downto 0); -- trigger information\r
-                 IPU_START_READOUT_IN          : in    std_logic; -- gimme data!\r
-                 IPU_DATA_OUT                          : out   std_logic_vector(31 downto 0); -- detector data, equipped with DHDR\r
-                 IPU_DATAREADY_OUT                     : out   std_logic; -- data is valid\r
-                 IPU_READOUT_FINISHED_OUT      : out   std_logic; -- no more data, end transfer, send TRM\r
-                 IPU_READ_IN                           : in    std_logic; -- read strobe, low every second cycle \r
-                 IPU_LENGTH_OUT                        : out   std_logic_vector(15 downto 0); -- length of data packet (32bit words) (?)\r
-                 IPU_ERROR_PATTERN_OUT         : out   std_logic_vector(31 downto 0); -- error pattern\r
-                 LVL2_COUNTER_OUT                      : out   std_logic_vector(15 downto 0); -- local IPU cycle counter\r
-                 -- DHDR buffer input\r
-                 DHDR_DATA_IN                          : in    std_logic_vector(31 downto 0);\r
-                 DHDR_LENGTH_IN                        : in    std_logic_vector(15 downto 0);\r
-                 DHDR_STORE_IN                         : in    std_logic;\r
-                 DHDR_BUF_FULL_OUT                     : out   std_logic;\r
-                 -- processed data input\r
-                 FIFO_START_IN                         : in    std_logic;\r
-                 FIFO_0_DATA_IN                        : in    std_logic_vector(39 downto 0);\r
-                 FIFO_1_DATA_IN                        : in    std_logic_vector(39 downto 0);\r
-                 FIFO_2_DATA_IN                        : in    std_logic_vector(39 downto 0);\r
-                 FIFO_3_DATA_IN                        : in    std_logic_vector(39 downto 0);\r
-                 FIFO_4_DATA_IN                        : in    std_logic_vector(39 downto 0);\r
-                 FIFO_5_DATA_IN                        : in    std_logic_vector(39 downto 0);\r
-                 FIFO_6_DATA_IN                        : in    std_logic_vector(39 downto 0);\r
-                 FIFO_7_DATA_IN                        : in    std_logic_vector(39 downto 0);\r
-                 FIFO_8_DATA_IN                        : in    std_logic_vector(39 downto 0);\r
-                 FIFO_9_DATA_IN                        : in    std_logic_vector(39 downto 0);\r
-                 FIFO_10_DATA_IN                       : in    std_logic_vector(39 downto 0);\r
-                 FIFO_11_DATA_IN                       : in    std_logic_vector(39 downto 0);\r
-                 FIFO_12_DATA_IN                       : in    std_logic_vector(39 downto 0);\r
-                 FIFO_13_DATA_IN                       : in    std_logic_vector(39 downto 0);\r
-                 FIFO_14_DATA_IN                       : in    std_logic_vector(39 downto 0);\r
-                 FIFO_15_DATA_IN                       : in    std_logic_vector(39 downto 0);\r
-                 FIFO_WE_IN                            : in    std_logic_vector(15 downto 0);\r
-                 FIFO_DONE_IN                          : in    std_logic; -- write level information into small FIFOs\r
-                 -- Debug signals\r
-                 DBG_BSM_OUT                           : out   std_logic_vector(7 downto 0);\r
-                 DBG_OUT                                       : out   std_logic_vector(63 downto 0)\r
-               );\r
-       end component;\r
-\r
-       component ipu_dummy is\r
-       port( CLK_IN                                    : in    std_logic; -- 100MHz local clock\r
-                 RESET_IN                                      : in    std_logic; -- synchronous reset\r
-                 -- Slow control signals       \r
-                 MIN_COUNT_IN                          : in    std_logic_vector(15 downto 0); -- minimum counter value\r
-                 MAX_COUNT_IN                          : in    std_logic_vector(15 downto 0); -- maximum counter value\r
-                 CTRL_IN                                       : in    std_logic_vector(7 downto 0); -- control bits from slow control\r
-                 -- IPU channel connections\r
-                 IPU_NUMBER_IN                         : in    std_logic_vector(15 downto 0); -- trigger tag\r
-                 IPU_INFORMATION_IN            : in    std_logic_vector(7 downto 0); -- trigger information\r
-                 IPU_START_READOUT_IN          : in    std_logic; -- gimme data!\r
-                 IPU_DATA_OUT                          : out   std_logic_vector(31 downto 0); -- detector data, equipped with DHDR\r
-                 IPU_DATAREADY_OUT                     : out   std_logic; -- data is valid\r
-                 IPU_READOUT_FINISHED_OUT      : out   std_logic; -- no more data, end transfer, send TRM\r
-                 IPU_READ_IN                           : in    std_logic; -- read strobe, low every second cycle \r
-                 IPU_LENGTH_OUT                        : out   std_logic_vector(15 downto 0); -- length of data packet (32bit words) (?)\r
-                 IPU_ERROR_PATTERN_OUT         : out   std_logic_vector(31 downto 0); -- error pattern\r
-                 -- DHDR buffer\r
-                 LVL1_FIFO_RD_OUT                      : out   std_logic;\r
-                 LVL1_FIFO_EMPTY_IN            : in    std_logic;\r
-                 LVL1_FIFO_NUMBER_IN           : in    std_logic_vector(15 downto 0);\r
-                 LVL1_FIFO_CODE_IN                     : in    std_logic_vector(7 downto 0);\r
-                 LVL1_FIFO_INFORMATION_IN      : in    std_logic_vector(7 downto 0);\r
-                 LVL1_FIFO_TYPE_IN                     : in    std_logic_vector(3 downto 0);\r
-                 -- Debug signals\r
-                 DBG_BSM_OUT                           : out   std_logic_vector(7 downto 0);\r
-                 DBG_OUT                                       : out   std_logic_vector(63 downto 0)\r
-               );\r
-       end component;\r
-\r
-       component reboot_handler is\r
-       port( RESET_IN                  : in    std_logic;\r
-                 CLK_IN                        : in    std_logic;\r
-                 START_IN                      : in    std_logic;\r
-                 REBOOT_OUT            : out   std_logic;\r
-                 DEBUG_OUT                     : out   std_logic_vector(15 downto 0)\r
-               );\r
-       end component;\r
-\r
-       component real_trg_handler is\r
-       port( CLK_IN                            : in    std_logic; -- 100MHz master clock\r
-                 RESET_IN                              : in    std_logic; \r
-                 TIME_TRG_IN                   : in    std_logic_vector(3 downto 0); -- timing trigger inputs\r
-                 TRB_TRG_IN                    : in    std_logic_vector(3 downto 0); -- TRB trigger inputs\r
-                 APV_TRGDONE_IN                : in    std_logic; -- APV trigger statemachine finished (one pulse)\r
-                 TRG_3_TODO_IN                 : in    std_logic_vector(3 downto 0); -- APV triggers on trigger 3\r
-                 TRG_2_TODO_IN                 : in    std_logic_vector(3 downto 0); -- APV triggers on trigger 2\r
-                 TRG_1_TODO_IN                 : in    std_logic_vector(3 downto 0); -- APV triggers on trigger 1\r
-                 TRG_0_TODO_IN                 : in    std_logic_vector(3 downto 0); -- APV triggers on trigger 0\r
-                 TRG_SETUP_IN                  : in    std_logic_vector(7 downto 0); -- setup of external triggers\r
-                 TRG_FOUND_OUT                 : out   std_logic; -- single pulse for endpoint\r
-                 TRB_TTAG_IN                   : in    std_logic_vector(15 downto 0); -- LVL1 16bit trigger tag \r
-                 TRB_TRND_IN                   : in    std_logic_vector(7 downto 0); -- LVL1 8bit random number \r
-                 TRB_TTYPE_IN                  : in    std_logic_vector(3 downto 0); -- LVL1 trigger type\r
-                 TRB_TRGRCVD_IN                : in    std_logic; -- LVL1 trigger has been received on TRB\r
-                 TRB_MISSING_OUT               : out   std_logic; -- LVL1 trigger without timing trigger\r
-                 RST_LVL1_COUNTER_IN   : in    std_logic; -- reset LVL1 counter\r
-                 LVL1_COUNTER_OUT              : out   std_logic_vector(15 downto 0); -- LVL1 counter\r
-                 BUSY_RELEASE_IN               : in    std_logic; -- common signal from busy calculator\r
-                 APV_TRGSEL_OUT                : out   std_logic_vector(3 downto 0); -- select one APV trigger state machine\r
-                 APV_TRGSTART_OUT              : out   std_logic; -- start one APV trigger state machine\r
-                 EDS_DATA_OUT                  : out   std_logic_vector(39 downto 0); -- EDS data\r
-                 EDS_WE_OUT                    : out   std_logic; -- EDS write enable (general interface)\r
-                 EDS_START_OUT                 : out   std_logic; -- separate increment signal for EDS buffer level\r
-                 EDS_READY_OUT                 : out   std_logic; -- APV trigger sequence done, TERMinate the TRB LVL1 trigger\r
-                 DBG_FRMCTR_OUT                : out   std_logic_vector(3 downto 0); -- framecounter itself\r
-                 BSM_OUT                               : out   std_logic_vector(7 downto 0);\r
-                 DEBUG_OUT                             : out   std_logic_vector(63 downto 0)\r
-               );\r
-       end component;\r
-\r
-       component apv_trg_handler is\r
-       port( CLK_APV_IN                : in    std_logic; -- 40MHz phase shifted clock\r
-                 RESET_APV_IN          : in    std_logic; -- synced reset signal (40MHz APV)\r
-                 CLK_IN                        : in    std_logic; -- 100MHz master clock\r
-                 RESET_IN                      : in    std_logic; -- synced reset signal (100MHz)\r
-                 APV_TRGSTART_IN       : in    std_logic; -- start signal for one sequence\r
-                 APV_TRGSEL_IN         : in    std_logic; -- select signal for one sequence\r
-                 APV_TRG_TODO_IN       : in    std_logic_vector(3 downto 0); -- number of APV triggers\r
-                 APV_TRG_DELAY_IN      : in    std_logic_vector(3 downto 0); -- delay between APV triggers\r
-                 APV_TRGDONE_OUT       : out   std_logic; -- APV trigger statemachine finished\r
-                 APV_TRG_OUT           : out   std_logic;\r
-                 APV_TRGSENT_OUT       : out   std_logic;\r
-                 BSM_OUT                       : out   std_logic_vector(3 downto 0);\r
-                 DEBUG_OUT                     : out   std_logic_vector(15 downto 0)\r
-               );\r
-       end component;\r
-\r
-       component apv_sync_handler is\r
-       port( CLK_APV_IN                : in    std_logic; -- 40MHz phase shifted clock\r
-                 RESET_APV_IN          : in    std_logic; -- synced reset signal (40MHz APV)\r
-                 CLK_IN                        : in    std_logic; -- 100MHz master clock\r
-                 RESET_IN                      : in    std_logic; -- synced reset signal (100MHz)\r
-                 APV_TRGSTART_IN       : in    std_logic; -- start signal for one sequence\r
-                 APV_TRGSEL_IN         : in    std_logic; -- select signal for one sequence\r
-                 APV_TRGDONE_OUT       : out   std_logic; -- APV trigger statemachine finished\r
-                 APV_TRG_OUT           : out   std_logic;\r
-                 APV_SYNC_OUT          : out   std_logic; -- signal for statemachines\r
-                 BSM_OUT                       : out   std_logic_vector(3 downto 0);\r
-                 DEBUG_OUT                     : out   std_logic_vector(15 downto 0)\r
-               );\r
-       end component;\r
-\r
-       component eds_buf is\r
-       port( CLK_IN                    : in    std_logic; -- 100MHz master clock\r
-                 RESET_IN                      : in    std_logic; \r
-                 -- EDS input, all synced to CLK_IN\r
-                 EDS_DATA_IN           : in    std_logic_vector(39 downto 0); -- EDS data input\r
-                 EDS_WE_IN                     : in    std_logic; -- EDS write enable\r
-                 EDS_DONE_IN           : in    std_logic; -- release EDS \r
-                 EDS_DATA_OUT          : out   std_logic_vector(39 downto 0);\r
-                 EDS_AVAILABLE_OUT     : out   std_logic;\r
-                 -- trigger busy information\r
-                 BUF_FULL_OUT          : out   std_logic;\r
-                 BUF_LEVEL_OUT         : out   std_logic_vector(4 downto 0);\r
-                 -- Debug signals\r
-                 DEBUG_OUT                     : out   std_logic_vector(15 downto 0)\r
-               );\r
-       end component;\r
-\r
-       component adc_pll is\r
-    port( CLK  : in    std_logic;\r
-         RESET : in    std_logic;\r
-         CLKOP : out   std_logic;      \r
-         LOCK  : out   std_logic\r
-        );\r
-       end component;\r
-                                               \r
-       component adc_ch_in is                     \r
-    port( DEL  : in    std_logic_vector(3 downto 0);\r
-         ECLK  : in    std_logic; \r
-         SCLK  : in    std_logic; \r
-                 RST   : in    std_logic;             \r
-                 DATA  : in    std_logic_vector(0 downto 0); \r
-                 Q             : out   std_logic_vector(1 downto 0)\r
-               );                                     \r
-       end component;                             \r
-\r
-       component adc_twochannels is\r
-       port( CLK_IN            : in    std_logic;\r
-                 RESET_IN              : in    std_logic;\r
-                 CLOCK_IN              : in    std_logic_vector(1 downto 0);  -- DDR bit clock\r
-                 DATA_0_IN     : in    std_logic_vector(1 downto 0);  -- ADC channel one\r
-                 DATA_1_IN     : in    std_logic_vector(1 downto 0);  -- ADC channel two\r
-                 DATA_0_OUT    : out   std_logic_vector(11 downto 0); -- demultiplexed ADC channel one\r
-                 DATA_1_OUT    : out   std_logic_vector(11 downto 0); -- demultiplexed ADC channel two\r
-                 STORE_OUT             : out   std_logic;\r
-                 SWAP_OUT              : out   std_logic;\r
-                 CLOCK_OUT             : out   std_logic;\r
-                 DEBUG_OUT             : out   std_logic_vector(15 downto 0)\r
-               );\r
-       end component;\r
-\r
-       component apv_locker is\r
-       port( CLK_APV_IN                        : in    std_logic;\r
-                 RESET_IN                              : in    std_logic;\r
-                 ADC_RAW_IN                    : in    std_logic_vector(11 downto 0);  -- ADC: raw data, synchronous to ADC_CLK_IN\r
-                 ADC_VALID_IN                  : in    std_logic;                                              -- ADC: ser2par data is valid\r
-                 SYNC_IN                               : in    std_logic;                                              -- sync trigger input \r
-                 APV_ON_IN                             : in    std_logic;                                              -- this APV channel is switched on\r
-                 BIT_LOW_IN                    : in    std_logic_vector(11 downto 0);  -- slow control: threshold for digital '0'\r
-                 BIT_HIGH_IN                   : in    std_logic_vector(11 downto 0);  -- slow control: threshold for digital '1'\r
-                 FL_LOW_IN                             : in    std_logic_vector(11 downto 0);  -- lower threshold for ADC flatline\r
-                 FL_HIGH_IN                    : in    std_logic_vector(11 downto 0);  -- upper threshold for ADC flatline\r
-                 STATUS_IGNORE_OUT             : out   std_logic;                                              -- APV is to be ignored (effectively => switched off)\r
-                 STATUS_UNKNOWN_OUT    : out   std_logic;                                              -- APV is not initialized yet\r
-                 STATUS_BADADC_OUT             : out   std_logic;                                              -- ADC ser2par data is invalid\r
-                 STATUS_LOCKED_OUT             : out   std_logic;                                              -- APV locked successfully\r
-                 STATUS_LOST_OUT               : out   std_logic;                                              -- APV tickmark missing or wrong\r
-                 STATUS_NOSYNC_OUT             : out   std_logic;                                              -- APV did not lock successfully\r
-                 STATUS_MISSING_OUT    : out   std_logic;                                              -- APV is missing, ADC flatline detected\r
-                 STATUS_TICKMARK_OUT   : out   std_logic;\r
-                 FRAME_ROW_OUT                 : out   std_logic_vector(7 downto 0);   -- decoded row from APV header\r
-                 FRAME_ERROR_OUT               : out   std_logic;                                              -- decoded error bit from APV header\r
-                 FRAME_FLAT_OUT                : out   std_logic;                                              -- APV sends a flat line (analog dead?)\r
-                 FRAME_OVF_OUT                 : out   std_logic;                                              -- at least one channel in frame was overflow\r
-                 FRAME_UDF_OUT                 : out   std_logic;                                              -- at least one channel in frame was underflow\r
-                 FRAME_CTR_OUT                 : out   std_logic_vector(3 downto 0);   -- frame counter for incoming data frames\r
-                 APV_CHANNEL_OUT               : out   std_logic_vector(6 downto 0);   -- physical channel ID\r
-                 APV_OVERFLOW_OUT              : out   std_logic;                                              -- channel is truncated high\r
-                 APV_UNDERFLOW_OUT             : out   std_logic;                                              -- channel is truncated low\r
-                 APV_RAW_OUT                   : out   std_logic_vector(11 downto 0);  -- APV raw data\r
-                 APV_ANALOG_OUT                : out   std_logic;                                              -- APV analog data is valid\r
-                 APV_START_OUT                 : out   std_logic;                                              -- valid data frame found, reserve one buffer \r
-                 APV_LAST_OUT                  : out   std_logic;                                              -- last APV channel of dataframe\r
-                 DEBUG_OUT                             : out   std_logic_vector(15 downto 0)\r
-               );\r
-       end component;\r
-\r
-       component apv_raw_buffer is\r
-       port( CLK_APV_IN                : in    std_logic; -- write clock from APV handling stage\r
-                 RESET_IN                      : in    std_logic;\r
-                 FRM_REQD_IN           : in    std_logic; -- one data frame has been requested from APV\r
-                 MAX_TRG_NUM_IN        : in    std_logic_vector(3 downto 0); -- maximum number of triggers per event\r
-                 ADC_ANALOG_IN         : in    std_logic; -- write enable for ADC data\r
-                 ADC_START_IN          : in    std_logic; -- data frame detected, block the buffer page\r
-                 ADC_LAST_IN           : in    std_logic; -- last channel signal\r
-                 ADC_CHANNEL_IN        : in    std_logic_vector(6 downto 0); -- physical channel ID\r
-                 ADC_RAW_IN            : in    std_logic_vector(17 downto 0); -- raw ADC data, UDF, OVF, ERROR\r
-                 ADC_STATUS_IN         : in    std_logic_vector(7 downto 0); -- status information for APV\r
-                 ADC_FRAME_IN          : in    std_logic_vector(11 downto 0); -- status information for frame\r
-                 BUF_CLK_IN            : in    std_logic; -- read clock\r
-                 BUF_RESET_IN          : in    std_logic; -- 100MHz reset\r
-                 BUF_START_OUT         : out   std_logic; -- one block starts writing\r
-                 BUF_READY_OUT         : out   std_logic; -- one block has been written\r
-                 BUF_ADDR_IN           : in    std_logic_vector(6 downto 0); -- address inside current buffer\r
-                 BUF_DONE_IN           : in    std_logic; -- buffer has been read (discard buffer)\r
-                 BUF_DATA_OUT          : out   std_logic_vector(17 downto 0); -- data from buffer\r
-                 BUF_STATUS_OUT        : out   std_logic_vector(7 downto 0); -- generic APV status output\r
-                 BUF_FRAME_OUT         : out   std_logic_vector(11 downto 0); -- current frame status output\r
-                 BUF_GOOD_OUT          : out   std_logic; -- APV is active and synced -> GOOD situation\r
-                 BUF_BROKEN_OUT        : out   std_logic; -- APV is active, but not synced -> BAD situation\r
-                 BUF_IGNORE_OUT        : out   std_logic; -- APV is switched off -> switched off\r
-                 BUF_LEVEL_OUT         : out   std_logic_vector(4 downto 0); -- number of stored frames inside buffer\r
-                 BUF_TICKMARK_OUT      : out   std_logic; -- tickmark signal for timeouts in the EDS handler\r
-                 BUF_FULL_OUT          : out   std_logic; -- inhibit any next trigger if set!\r
-                 DEBUG_OUT                     : out   std_logic_vector(15 downto 0)\r
-               );\r
-       end component;\r
-\r
-       component slv_register is\r
-       generic( RESET_VALUE    : std_logic_vector(31 downto 0) := x"0000_0000" );\r
-       port( CLK_IN            : in    std_logic;\r
-                 RESET_IN              : in    std_logic;\r
-                 BUSY_IN               : in    std_logic;\r
-                 -- Slave bus\r
-                 SLV_READ_IN   : in    std_logic;\r
-                 SLV_WRITE_IN  : in    std_logic;\r
-                 SLV_BUSY_OUT  : out   std_logic;\r
-                 SLV_ACK_OUT   : out   std_logic;\r
-                 SLV_DATA_IN   : in    std_logic_vector(31 downto 0);\r
-                 SLV_DATA_OUT  : out   std_logic_vector(31 downto 0);\r
-                 -- I/O to the backend\r
-                 REG_DATA_IN   : in    std_logic_vector(31 downto 0);\r
-                 REG_DATA_OUT  : out   std_logic_vector(31 downto 0);\r
-                 -- Status lines\r
-                 STAT                  : out   std_logic_vector(31 downto 0) -- DEBUG\r
-               );\r
-       end component;\r
-\r
-       component slv_half_register is\r
-       generic( RESET_VALUE    : std_logic_vector(15 downto 0) := x"0000" );\r
-       port( CLK_IN            : in    std_logic;\r
-                 RESET_IN              : in    std_logic;\r
-                 -- Slave bus\r
-                 SLV_READ_IN   : in    std_logic;\r
-                 SLV_WRITE_IN  : in    std_logic;\r
-                 SLV_ACK_OUT   : out   std_logic;\r
-                 SLV_DATA_IN   : in    std_logic_vector(31 downto 0);\r
-                 SLV_DATA_OUT  : out   std_logic_vector(31 downto 0);\r
-                 -- I/O to the backend\r
-                 STATUS_REG_IN : in    std_logic_vector(15 downto 0);\r
-                 CTRL_REG_OUT  : out   std_logic_vector(15 downto 0);\r
-                 -- Status lines\r
-                 STAT                  : out   std_logic_vector(31 downto 0) -- DEBUG\r
-               );\r
-       end component;\r
-\r
-       component i2c_master is\r
-       port( CLK_IN            : in    std_logic;\r
-                 RESET_IN              : in    std_logic;\r
-                 -- Slave bus\r
-                 SLV_READ_IN   : in    std_logic;\r
-                 SLV_WRITE_IN  : in    std_logic;\r
-                 SLV_BUSY_OUT  : out   std_logic;\r
-                 SLV_ACK_OUT   : out   std_logic;\r
-                 SLV_DATA_IN   : in    std_logic_vector(31 downto 0);\r
-                 SLV_DATA_OUT  : out   std_logic_vector(31 downto 0);\r
-                 -- I2C connections\r
-                 SDA_IN                : in    std_logic;\r
-                 SDA_OUT               : out   std_logic;\r
-                 SCL_IN                : in    std_logic;\r
-                 SCL_OUT               : out   std_logic;\r
-                 -- Status lines\r
-                 STAT                  : out   std_logic_vector(31 downto 0) -- DEBUG\r
-               );\r
-       end component;\r
-\r
-       component slv_onewire_memory is\r
-       port( CLK_IN                    : in    std_logic;\r
-                 RESET_IN                      : in    std_logic;\r
-                 -- Slave bus\r
-                 SLV_ADDR_IN           : in    std_logic_vector(5 downto 0);\r
-                 SLV_READ_IN           : in    std_logic;\r
-                 SLV_WRITE_IN          : in    std_logic;\r
-                 SLV_ACK_OUT           : out   std_logic;\r
-                 SLV_BUSY_OUT          : out   std_logic;\r
-                 SLV_DATA_OUT          : out   std_logic_vector(31 downto 0);\r
-                 -- backplane identifier\r
-                 BACKPLANE_IN          : in    std_logic_vector(2 downto 0);\r
-                 -- 1Wire lines\r
-                 ONEWIRE_START_IN      : in    std_logic;\r
-                 ONEWIRE_INOUT         : inout std_logic_vector(15 downto 0);\r
-                 BP_ONEWIRE_INOUT      : inout std_logic;\r
-                 -- Status lines\r
-                 STAT                          : out   std_logic_vector(63 downto 0) -- DEBUG\r
-               );\r
-       end component;\r
-\r
-       component spi_real_slim is\r
-       port( SYSCLK            : in    std_logic; -- 100MHz sysclock\r
-                 RESET                 : in    std_logic; -- synchronous reset\r
-                 -- Command interface\r
-                 START_IN              : in    std_logic; -- one start pulse\r
-                 BUSY_OUT              : out   std_logic; -- SPI transactions are ongoing\r
-                 CMD_IN                : in    std_logic_vector(7 downto 0); -- SPI command byte\r
-                 -- SPI interface\r
-                 SPI_SCK_OUT   : out   std_logic;\r
-                 SPI_CS_OUT    : out   std_logic;\r
-                 SPI_SDO_OUT   : out   std_logic;\r
-                 -- DEBUG\r
-                 CLK_EN_OUT    : out   std_logic;\r
-                 BSM_OUT               : out   std_logic_vector(7 downto 0);\r
-                 DEBUG_OUT             : out   std_logic_vector(31 downto 0)\r
-               );\r
-       end component;\r
-\r
-       component spi_adc_master is\r
-       generic( RESET_VALUE_CTRL       : std_logic_vector(7 downto 0) := x"60" );\r
-       port( CLK_IN            : in    std_logic;\r
-                 RESET_IN              : in    std_logic;\r
-                 -- Slave bus\r
-                 SLV_READ_IN   : in    std_logic;\r
-                 SLV_WRITE_IN  : in    std_logic;\r
-                 SLV_BUSY_OUT  : out   std_logic;\r
-                 SLV_ACK_OUT   : out   std_logic;\r
-                 SLV_DATA_IN   : in    std_logic_vector(31 downto 0);\r
-                 SLV_DATA_OUT  : out   std_logic_vector(31 downto 0);\r
-                 -- SPI connections\r
-                 SPI_CS_OUT    : out   std_logic;\r
-                 SPI_SDO_OUT   : out   std_logic;\r
-                 SPI_SCK_OUT   : out   std_logic;\r
-                 -- ADC connections\r
-                 ADC_LOCKED_IN : in    std_logic;\r
-                 ADC_PD_OUT    : out   std_logic;\r
-                 ADC_RST_OUT   : out   std_logic;\r
-                 ADC_DEL_OUT   : out   std_logic_vector(3 downto 0);\r
-                 -- APV connections\r
-                 APV_RST_OUT   : out   std_logic;\r
-                 -- Status lines\r
-                 STAT                  : out   std_logic_vector(31 downto 0) -- DEBUG\r
-               );\r
-       end component;\r
-\r
-       component i2c_slim is\r
-       port( CLK_IN            : in    std_logic;\r
-                 RESET_IN              : in    std_logic;      \r
-                 -- I2C command / setup\r
-                 I2C_GO_IN             : in    std_logic; -- startbit to trigger I2C actions\r
-                 ACTION_IN             : in    std_logic; -- '0' -> write, '1' -> read\r
-                 I2C_SPEED_IN  : in    std_logic_vector( 5 downto 0 ); -- speed adjustment (to be defined)\r
-                 I2C_ADR_IN    : in    std_logic_vector( 7 downto 0 ); -- I2C address byte (R/W bit is ignored)\r
-                 I2C_CMD_IN    : in    std_logic_vector( 7 downto 0 ); -- I2C command byte (sent after address byte)\r
-                 I2C_DW_IN             : in    std_logic_vector( 7 downto 0 ); -- data word for write command\r
-                 I2C_DR_OUT    : out   std_logic_vector( 7 downto 0 ); -- data word from read command\r
-                 STATUS_OUT    : out   std_logic_vector( 7 downto 0 ); -- status and error bits\r
-                 I2C_BUSY_OUT  : out   std_logic;\r
-                 -- I2C connections\r
-                 SDA_IN                : in    std_logic;\r
-                 SDA_OUT               : out   std_logic;\r
-                 SCL_IN                : in    std_logic;\r
-                 SCL_OUT               : out   std_logic;\r
-                 -- Debug\r
-                 STAT                  : out   std_logic_vector(31 downto 0) -- DEBUG\r
-               );\r
-       end component;\r
-       \r
-       component i2c_gstart is\r
-       port( CLK_IN            : in    std_logic;\r
-                 RESET_IN              : in    std_logic;\r
-                 START_IN              : in    std_logic;      \r
-             DOSTART_IN        : in    std_logic;      \r
-                 I2C_SPEED_IN  : in    std_logic_vector(7 downto 0);\r
-                 SDONE_OUT             : out   std_logic;\r
-                 SOK_OUT               : out   std_logic;\r
-             SDA_IN            : in    std_logic;\r
-                 SCL_IN                : in    std_logic;\r
-                 R_SCL_OUT             : out   std_logic;\r
-                 S_SCL_OUT             : out   std_logic;\r
-             R_SDA_OUT         : out   std_logic;\r
-             S_SDA_OUT         : out   std_logic;\r
-                 BSM_OUT               : out   std_logic_vector(3 downto 0)\r
-         );\r
-       end component;\r
-\r
-       component i2c_sendb is\r
-       port( CLK_IN            : in    std_logic;\r
-                 RESET_IN              : in    std_logic;\r
-                 DOBYTE_IN             : in    std_logic; \r
-                 I2C_SPEED_IN  : in    std_logic_vector(7 downto 0);\r
-                 I2C_BYTE_IN   : in    std_logic_vector(8 downto 0); \r
-                 I2C_BACK_OUT  : out   std_logic_vector(8 downto 0);\r
-                 SDA_IN                : in    std_logic;\r
-                 R_SDA_OUT             : out   std_logic;\r
-                 S_SDA_OUT             : out   std_logic;\r
---               SCL_IN                : in    std_logic;\r
-                 R_SCL_OUT             : out   std_logic;\r
-                 S_SCL_OUT             : out   std_logic;\r
-                 BDONE_OUT             : out   std_logic;\r
-                 BOK_OUT               : out   std_logic;\r
-                 BSM_OUT               : out   std_logic_vector(3 downto 0)\r
-           );\r
-       end component;\r
-\r
-       component onewire_master is\r
-       generic( CLK_PERIOD             : integer := 10 ); -- clock perion in nanoseconds\r
-       port( CLK                               : in    std_logic;\r
-                 RESET                         : in    std_logic;\r
-                 READOUT_ENABLE_IN     : in    std_logic;\r
-                 -- connection to 1-wire interface (16 APV FEs)\r
-                 ONEWIRE                       : inout std_logic_vector(15 downto 0);\r
-                 BP_ONEWIRE            : inout std_logic;\r
-                 -- connection to external DPRAM for slow control readout\r
-                 BP_DATA_OUT           : out   std_logic_vector(15 downto 0);\r
-                 DATA_OUT                      : out   std_logic_vector(15 downto 0);\r
-                 ADDR_OUT                      : out   std_logic_vector(6 downto 0);\r
-                 WRITE_OUT                     : out   std_logic;\r
-                 BUSY_OUT                      : out   std_logic;\r
-                 -- debug\r
-                 BSM_OUT                       : out   std_logic_vector(7 downto 0);\r
-                 STAT                          : out   std_logic_vector(15 downto 0)\r
-                );\r
-       end component;\r
-\r
-       component slv_onewire_dpram\r
-       port( WRADDRESS : in    std_logic_vector(6 downto 0); \r
-                 RDADDRESS     : in    std_logic_vector(5 downto 0); \r
-                 DATA          : in    std_logic_vector(15 downto 0);\r
-                 WE            : in    std_logic; \r
-                 RDCLOCK       : in    std_logic;\r
-                 RDCLOCKEN     : in    std_logic; \r
-                 RESET         : in    std_logic;\r
-                 WRCLOCK       : in    std_logic; \r
-                 WRCLOCKEN     : in    std_logic;\r
-                 Q                     : out   std_logic_vector(31 downto 0)\r
-                );\r
-       end component;\r
-\r
-       component dhdr_buf is\r
-       port( CLK_IN                            : in    std_logic; -- 100MHz master clock\r
-                 RESET_IN                              : in    std_logic; \r
-                 -- DHDR information block\r
-                 DHDR_DATA_IN                  : in    std_logic_vector(47 downto 0); -- EDS data input\r
-                 DHDR_WE_IN                    : in    std_logic; -- EDS write enable\r
-                 DHDR_DONE_IN                  : in    std_logic; -- release EDS \r
-                 DHDR_DATA_OUT                 : out   std_logic_vector(47 downto 0);\r
-                 DHDR_AVAILABLE_OUT    : out   std_logic;\r
-                 -- trigger busy information\r
-                 BUF_FULL_OUT                  : out   std_logic;\r
-                 BUF_LEVEL_OUT                 : out   std_logic_vector(4 downto 0);\r
-                 -- Debug signals\r
-                 DEBUG_OUT                             : out   std_logic_vector(15 downto 0)\r
-               );\r
-       end component;\r
-\r
-       component fifo_2kx27 is\r
-       port( DATA              : in    std_logic_vector(26 downto 0); \r
-                 CLOCK         : in    std_logic; \r
-                 WREN          : in    std_logic; \r
-                 RDEN          : in    std_logic; \r
-                 RESET         : in    std_logic; \r
-                 Q                     : out   std_logic_vector(26 downto 0); \r
-                 WCNT          : out   std_logic_vector(11 downto 0); \r
-                 EMPTY         : out   std_logic; \r
-                 FULL          : out   std_logic\r
-               );\r
-       end component fifo_2kx27;\r
-\r
-       component fifo_16x11 is\r
-       port( DATA              : in    std_logic_vector(10 downto 0); \r
-                 CLOCK         : in    std_logic; \r
-                 WREN          : in    std_logic; \r
-                 RDEN          : in    std_logic; \r
-                 RESET         : in    std_logic; \r
-                 Q                     : out   std_logic_vector(10 downto 0); \r
-                 WCNT          : out   std_logic_vector(4 downto 0); \r
-                 EMPTY         : out   std_logic; \r
-                 FULL          : out   std_logic\r
-               );\r
-       end component fifo_16x11;\r
-\r
-       component dhdr_buffer_dpram is\r
-       port( WRADDRESS         : in    std_logic_vector(3 downto 0); \r
-                 DATA                  : in    std_logic_vector(47 downto 0); \r
-                 WRCLOCK               : in    std_logic; \r
-                 WE                    : in    std_logic; \r
-                 WRCLOCKEN             : in    std_logic; \r
-                 RDADDRESS             : in    std_logic_vector(3 downto 0); \r
-                 RDCLOCK               : in    std_logic; \r
-                 RDCLOCKEN             : in    std_logic; \r
-                 RESET                 : in    std_logic; \r
-                 Q                             : out   std_logic_vector(47 downto 0)\r
-               );\r
-       end component;\r
-\r
-       component decoder_8bit is\r
-       port( ADDRESS   : in    std_logic_vector(7 downto 0); \r
-                 Q                     : out   std_logic_vector(3 downto 0)\r
-               );\r
-       end component decoder_8bit;\r
-\r
-       component adder_5bit is\r
-       port( DATAA             : in    std_logic_vector(4 downto 0); \r
-                 DATAB         : in    std_logic_vector(4 downto 0); \r
-                 CLOCK         : in    std_logic; \r
-                 RESET         : in    std_logic; \r
-                 CLOCKEN       : in    std_logic; \r
-                 RESULT        : out   std_logic_vector(4 downto 0)\r
-               );\r
-       end component adder_5bit;\r
-\r
-       component adder_16bit is\r
-       port( DATAA             : in    std_logic_vector(15 downto 0); \r
-                 DATAB         : in    std_logic_vector(15 downto 0); \r
-                 CLOCK         : in    std_logic; \r
-                 RESET         : in    std_logic; \r
-                 CLOCKEN       : in    std_logic; \r
-                 RESULT        : out   std_logic_vector(15 downto 0)\r
-               );\r
-       end component adder_16bit;\r
-\r
-       component suber_12bit is\r
-       port( DATAA             : in    std_logic_vector(11 downto 0); \r
-                 DATAB         : in    std_logic_vector(11 downto 0); \r
-                 CLOCK         : in    std_logic; \r
-                 RESET         : in    std_logic; \r
-                 CLOCKEN       : in    std_logic; \r
-                 RESULT        : out   std_logic_vector(11 downto 0)\r
-               );\r
-       end component suber_12bit;\r
-\r
-\r
-       component buf_toc is\r
-       port( CLK_IN                    : in    std_logic;\r
-                 RESET_IN                      : in    std_logic;\r
-                 BUF_TICK_IN           : in    std_logic; -- tickmark from raw buffer\r
-                 BUF_START_IN          : in    std_logic; -- start of frame from raw buffer\r
-                 WAITFRAME_IN          : in    std_logic; -- statemachine is in "wait for frame" mode\r
-                 FRAMES_REQD_IN        : in    std_logic_vector(3 downto 0); -- number of frames requested from EDS\r
-                 BUF_LVL_IN            : in    std_logic_vector(7 downto 0);\r
-                 GOODDATA_OUT          : out   std_logic;\r
-                 BADDATA_OUT           : out   std_logic;\r
-                 NODATA_OUT            : out   std_logic;\r
-                 READY_OUT                     : out   std_logic;\r
-                 BSM_OUT                       : out   std_logic_vector(7 downto 0);\r
-                 DBG_OUT                       : out   std_logic_vector(15 downto 0)\r
-               );\r
-       end component buf_toc;\r
-\r
-       component ref_row_sel is\r
-       port( CLK_IN                            : in    std_logic;\r
-                 READY_IN                              : in    std_logic_vector(15 downto 0);\r
-                 GOODDATA_IN                   : in    std_logic_vector(15 downto 0);\r
-                 FRAME_0_IN                    : in    std_logic_vector(11 downto 0);\r
-                 FRAME_1_IN                    : in    std_logic_vector(11 downto 0);\r
-                 FRAME_2_IN                    : in    std_logic_vector(11 downto 0);\r
-                 FRAME_3_IN                    : in    std_logic_vector(11 downto 0);\r
-                 FRAME_4_IN                    : in    std_logic_vector(11 downto 0);\r
-                 FRAME_5_IN                    : in    std_logic_vector(11 downto 0);\r
-                 FRAME_6_IN                    : in    std_logic_vector(11 downto 0);\r
-                 FRAME_7_IN                    : in    std_logic_vector(11 downto 0);\r
-                 FRAME_8_IN                    : in    std_logic_vector(11 downto 0);\r
-                 FRAME_9_IN                    : in    std_logic_vector(11 downto 0);\r
-                 FRAME_10_IN                   : in    std_logic_vector(11 downto 0);\r
-                 FRAME_11_IN                   : in    std_logic_vector(11 downto 0);\r
-                 FRAME_12_IN                   : in    std_logic_vector(11 downto 0);\r
-                 FRAME_13_IN                   : in    std_logic_vector(11 downto 0);\r
-                 FRAME_14_IN                   : in    std_logic_vector(11 downto 0);\r
-                 FRAME_15_IN                   : in    std_logic_vector(11 downto 0);\r
-                 VALID_BUFS_OUT                : out   std_logic;\r
-                 READY_OUT                             : out   std_logic;\r
-                 ROW_ERROR_OUT                 : out   std_logic; -- at least one row number is wrong\r
-                 APV_ERROR_OUT                 : out   std_logic; -- at least one APV sent ERROR bit\r
-                 APV_ERROR_BITS_OUT    : out   std_logic_vector(15 downto 0);\r
-                 REF_ROW_OUT                   : out   std_logic_vector(7 downto 0); -- selected reference row\r
-                 DBG_OUT                               : out   std_logic_vector(15 downto 0)\r
-               );\r
-       end component ref_row_sel;\r
-\r
-       component frmctr_check is\r
-       port( CLK_IN                    : in    std_logic;\r
-                 GOODDATA_IN           : in    std_logic_vector(15 downto 0);\r
-                 FRAMECOUNTER_IN       : in    std_logic_vector(3 downto 0);\r
-                 FRM_NR_0_IN           : in    std_logic_vector(3 downto 0);\r
-                 FRM_NR_1_IN           : in    std_logic_vector(3 downto 0);\r
-                 FRM_NR_2_IN           : in    std_logic_vector(3 downto 0);\r
-                 FRM_NR_3_IN           : in    std_logic_vector(3 downto 0);\r
-                 FRM_NR_4_IN           : in    std_logic_vector(3 downto 0);\r
-                 FRM_NR_5_IN           : in    std_logic_vector(3 downto 0);\r
-                 FRM_NR_6_IN           : in    std_logic_vector(3 downto 0);\r
-                 FRM_NR_7_IN           : in    std_logic_vector(3 downto 0);\r
-                 FRM_NR_8_IN           : in    std_logic_vector(3 downto 0);\r
-                 FRM_NR_9_IN           : in    std_logic_vector(3 downto 0);\r
-                 FRM_NR_10_IN          : in    std_logic_vector(3 downto 0);\r
-                 FRM_NR_11_IN          : in    std_logic_vector(3 downto 0);\r
-                 FRM_NR_12_IN          : in    std_logic_vector(3 downto 0);\r
-                 FRM_NR_13_IN          : in    std_logic_vector(3 downto 0);\r
-                 FRM_NR_14_IN          : in    std_logic_vector(3 downto 0);\r
-                 FRM_NR_15_IN          : in    std_logic_vector(3 downto 0);\r
-                 FRC_ERROR_OUT         : out   std_logic; -- at least one framecounter is wrong\r
-                 DBG_OUT                       : out   std_logic_vector(15 downto 0)\r
-               );\r
-       end component frmctr_check;\r
-\r
-       component apv_pc_nc_alu is\r
-       port( CLK_IN                    : in    std_logic; -- 100MHz master clock\r
-                 RESET_IN                      : in    std_logic;\r
-                 START_IN                      : in    std_logic;\r
-                 MAX_FRAMES_IN         : in    std_logic_vector(3 downto 0); -- number of frames requested\r
-                 CURR_FRAME_IN         : in    std_logic_vector(3 downto 0); -- current frame number\r
-                 LOC_FRM_CTR_IN        : in    std_logic_vector(3 downto 0); -- DEBUG\r
-                 EDS_FRM_CTR_IN        : in    std_logic_vector(3 downto 0); -- DEBUG\r
-                 BUF_GOOD_IN           : in    std_logic;\r
-                 BUF_BAD_IN            : in    std_logic;\r
-                 BUF_IGNORE_IN         : in    std_logic;\r
-                 ERROR_IN                      : in    std_logic_vector(3 downto 0); -- buffer status, errors from checkers\r
-                 DO_HEADER_IN          : in    std_logic;\r
-                 DO_ERROR_IN           : in    std_logic;\r
-                 EVT_TYPE_IN           : in    std_logic_vector(2 downto 0);\r
-                 RAW_ADDR_IN           : in    std_logic_vector(6 downto 0);\r
-                 RAW_DATA_IN           : in    std_logic_vector(37 downto 0);\r
-                 PED_DATA_IN           : in    std_logic_vector(17 downto 0);\r
-                 THR_DATA_IN           : in    std_logic_vector(17 downto 0);\r
-                 FRAME_IN                      : in    std_logic;\r
-                 FIFO_DATA_OUT         : out   std_logic_vector(26 downto 0); -- [21] -> [31], [20:0] -> [20:0]\r
-                 WE_OUT                        : out   std_logic;\r
-                 COUNT_OUT                     : out   std_logic_vector(9 downto 0);\r
-                 ANYDATA_OUT           : out   std_logic; -- this FIFO needs attention during readout\r
-                 DBG_OUT                       : out   std_logic_vector(15 downto 0)\r
-               );\r
-       end component apv_pc_nc_alu;\r
-\r
-       component comp14bit is\r
-       port( DATAA             : in    std_logic_vector(13 downto 0); \r
-                 DATAB         : in    std_logic_vector(13 downto 0); \r
-                 CLOCK         : in    std_logic; \r
-                 CLOCKEN       : in    std_logic; \r
-                 ACLR          : in    std_logic; \r
-                 AGEB          : out   std_logic\r
-               );\r
-       end component;\r
-\r
-       component input_bram is\r
-       port( WRADDRESS : in    std_logic_vector(10 downto 0); \r
-                 RDADDRESS     : in    std_logic_vector(10 downto 0);  \r
-                 DATA          : in    std_logic_vector(17 downto 0); \r
-                 WE            : in    std_logic;\r
-                 RDCLOCK       : in    std_logic; \r
-                 RDCLOCKEN     : in    std_logic; \r
-                 RESET         : in    std_logic; \r
-                 WRCLOCK       : in    std_logic; \r
-                 WRCLOCKEN     : in    std_logic; \r
-                 Q                     : out   std_logic_vector(17 downto 0)\r
-               );\r
-       end component;\r
-\r
-       component frame_status_mem is\r
-       port( WRADDRESS : in    std_logic_vector(3 downto 0); \r
-                 DATA          : in    std_logic_vector(11 downto 0);\r
-                 WRCLOCK       : in    std_logic;\r
-                 WE            : in    std_logic;\r
-                 WRCLOCKEN     : in    std_logic;\r
-                 RDADDRESS     : in    std_logic_vector(3 downto 0);\r
-                 RDCLOCK       : in    std_logic;\r
-                 RDCLOCKEN     : in    std_logic;\r
-                 RESET         : in    std_logic;\r
-                 Q                     : out   std_logic_vector(11 downto 0)\r
-               );\r
-       end component;\r
-\r
-       component adder_6bit is\r
-       port( DATAA   : in   std_logic_vector(5 downto 0); \r
-                 DATAB   : in   std_logic_vector(5 downto 0); \r
-                 CLOCK   : in   std_logic; \r
-                 RESET   : in   std_logic; \r
-                 CLOCKEN : in   std_logic; \r
-                 RESULT  : out  std_logic_vector(5 downto 0)\r
-                );\r
-       end component;\r
-\r
-       component apv_lock_sm is\r
-       port( CLK_APV_IN        : in    std_logic;\r
-                 RESET_IN              : in    std_logic;\r
-                 SYNC_IN               : in    std_logic; -- start APV synchronisation\r
-                 ADC_VALID_IN  : in    std_logic; -- ADC delivers valid data\r
-                 TIMED_IN              : in    std_logic; -- synchronisation timeout\r
-                 MATCH_IN              : in    std_logic; -- artifical tickmark from synchronized counter\r
-                 LOCKED_IN             : in    std_logic; -- enough good tickmarks\r
-                 TICK_IN               : in    std_logic; -- tickmark from digital parser\r
-                 HEADER_IN             : in    std_logic; -- header from digital parser\r
-                 FLATLINE_IN   : in    std_logic; -- flatline from digital parser\r
-                 RST_PC_OUT    : out   std_logic; -- reset period counter\r
-                 RST_TC_OUT    : out   std_logic; -- reset timeout counter\r
-                 INC_TC_OUT    : out   std_logic;\r
-                 RST_LC_OUT    : out   std_logic; -- reset lock counter\r
-                 INC_LC_OUT    : out   std_logic;\r
-                 UNKNOWN_OUT   : out   std_logic;\r
-                 BADADC_OUT    : out   std_logic; -- ADC data invalid\r
-                 LOCKED_OUT    : out   std_logic;\r
-                 LOST_OUT              : out   std_logic;\r
-                 NOSYNC_OUT    : out   std_logic;\r
-                 NOAPV_OUT             : out   std_logic;\r
-                 BSM_OUT               : out   std_logic_vector(7 downto 0);\r
-                 DEBUG_OUT             : out   std_logic_vector(15 downto 0)\r
-               );\r
-       end component;\r
-\r
-       component apv_digital is\r
-       port( CLK_APV_IN        : in    std_logic;\r
-                 RESET_IN              : in    std_logic;\r
-                 ADC_RAW_IN    : in    std_logic_vector(11 downto 0);\r
-                 BIT_LOW_IN    : in    std_logic_vector(11 downto 0);\r
-                 BIT_HIGH_IN   : in    std_logic_vector(11 downto 0);\r
-                 FL_LOW_IN             : in    std_logic_vector(11 downto 0);\r
-                 FL_HIGH_IN    : in    std_logic_vector(11 downto 0);\r
-                 BIT_DATA_OUT  : out   std_logic_vector(11 downto 0);\r
-                 BIT_VALID_OUT : out   std_logic_vector(11 downto 0);\r
-                 BIT_HIGH_OUT  : out   std_logic;\r
-                 BIT_LOW_OUT   : out   std_logic;\r
-                 TICKMARK_OUT  : out   std_logic;\r
-                 HEADER_OUT    : out   std_logic;\r
-                 FLAT_LINE_OUT : out   std_logic\r
-               );\r
-       end component;\r
-\r
-       component eds_buffer_dpram is\r
-       port( WRADDRESS         : in    std_logic_vector(3 downto 0); \r
-                 DATA                  : in    std_logic_vector(39 downto 0); \r
-                 WRCLOCK               : in    std_logic; \r
-                 WE                    : in    std_logic; \r
-                 WRCLOCKEN             : in    std_logic; \r
-                 RDADDRESS             : in    std_logic_vector(3 downto 0); \r
-                 RDCLOCK               : in    std_logic; \r
-                 RDCLOCKEN             : in    std_logic; \r
-                 RESET                 : in    std_logic; \r
-                 Q                             : out   std_logic_vector(39 downto 0)\r
-               );\r
-       end component;\r
+component logic_analyzer is\r
+port(\r
+       CLK_IN                  : in    std_logic;\r
+       RESET_IN                : in    std_logic;\r
+       -- control signals\r
+       ARM_IN                  : in    std_logic; -- arm the machine\r
+       TRG_IN                  : in    std_logic; -- trigger the data acquisition\r
+       MAX_SAMPLE_IN   : in    std_logic_vector(9 downto 0);\r
+       -- status signals\r
+       SM_ADDR_OUT             : out   std_logic_vector(9 downto 0); -- sample RAM addresses\r
+       SM_CE_OUT               : out   std_logic;\r
+       SM_WE_OUT               : out   std_logic; -- write enable for sample RAM\r
+       CLEAR_OUT               : out   std_logic; -- sample memory is being cleared\r
+       RUN_OUT                 : out   std_logic; -- ready for trigger\r
+       SAMPLE_OUT              : out   std_logic; -- data acquisition running\r
+       READY_OUT               : out   std_logic; -- data acquisition is finished\r
+       LAST_OUT                : out   std_logic; -- last data word of sampling\r
+       -- Status lines\r
+       BSM_OUT                 : out   std_logic_vector(3 downto 0);\r
+       STAT                    : out   std_logic_vector(31 downto 0) -- DEBUG\r
+);\r
+end component logic_analyzer;\r
+\r
+component onewire_spare_one is\r
+port(\r
+       ADDRESS : in    std_logic_vector(2 downto 0);\r
+       Q               : out   std_logic_vector(3 downto 0)\r
+);\r
+end component onewire_spare_one;\r
+\r
+component adc_onewire_map_mem is\r
+port(\r
+       ADDRESS : in    std_logic_vector(6 downto 0);\r
+       Q               : out   std_logic_vector(3 downto 0)\r
+);\r
+end component adc_onewire_map_mem;\r
+\r
+component adc_channel_select is\r
+port(\r
+       RESET_IN                : in    std_logic;\r
+       ADC_CLK_IN              : in    std_logic;\r
+       ADC_SEL_IN              : in    std_logic_vector(2 downto 0);\r
+       ADC_7_IN                : in    std_logic_vector(11 downto 0);\r
+       ADC_6_IN                : in    std_logic_vector(11 downto 0);\r
+       ADC_5_IN                : in    std_logic_vector(11 downto 0);\r
+       ADC_4_IN                : in    std_logic_vector(11 downto 0);\r
+       ADC_3_IN                : in    std_logic_vector(11 downto 0);\r
+       ADC_2_IN                : in    std_logic_vector(11 downto 0);\r
+       ADC_1_IN                : in    std_logic_vector(11 downto 0);\r
+       ADC_0_IN                : in    std_logic_vector(11 downto 0);\r
+       ADC_CH_OUT              : out   std_logic_vector(11 downto 0);\r
+       DEBUG_OUT               : out   std_logic_vector(15 downto 0)\r
+);\r
+end component adc_channel_select;\r
+\r
+component slv_adc_snoop is\r
+port(\r
+       CLK_IN                  : in    std_logic;\r
+       RESET_IN                : in    std_logic;\r
+       -- Slave bus\r
+       SLV_ADDR_IN     : in    std_logic_vector(9 downto 0);\r
+       SLV_READ_IN             : in    std_logic;\r
+       SLV_WRITE_IN    : in    std_logic;\r
+       SLV_ACK_OUT             : out   std_logic;\r
+       SLV_DATA_IN             : in    std_logic_vector(31 downto 0);\r
+       SLV_DATA_OUT    : out   std_logic_vector(31 downto 0);\r
+       -- I/O to the backend\r
+       ADC_SEL_OUT             : out   std_logic_vector(2 downto 0);   -- selects the ADC channel to snoop from\r
+       ADC_CLK_IN              : in    std_logic;                                              -- ADC reconstructed clock\r
+       ADC_DATA_IN             : in    std_logic_vector(11 downto 0);  -- ADC selected channel data\r
+       -- Status lines\r
+       STAT                    : out   std_logic_vector(31 downto 0) -- DEBUG\r
+);\r
+end component slv_adc_snoop;\r
+\r
+component adc_snoop_mem is\r
+port(\r
+       WRADDRESS       : in    std_logic_vector(9 downto 0);\r
+       RDADDRESS       : in    std_logic_vector(9 downto 0);\r
+       DATA            : in    std_logic_vector(15 downto 0);\r
+       WE                      : in    std_logic;\r
+       RDCLOCK         : in    std_logic;\r
+       RDCLOCKEN       : in    std_logic;\r
+       RESET           : in    std_logic;\r
+       WRCLOCK         : in    std_logic;\r
+       WRCLOCKEN       : in    std_logic;\r
+       Q                       : out   std_logic_vector(15 downto 0)\r
+);\r
+end component adc_snoop_mem;\r
+\r
+component max_data is\r
+port(\r
+       CLK_IN                  : in    std_logic;\r
+       RESET_IN                : in    std_logic;\r
+       TODO_3_IN               : in    std_logic_vector(3 downto 0);\r
+       TODO_2_IN               : in    std_logic_vector(3 downto 0);\r
+       TODO_1_IN               : in    std_logic_vector(3 downto 0);\r
+       TODO_0_IN               : in    std_logic_vector(3 downto 0);\r
+       TODO_MAX_OUT    : out   std_logic_vector(3 downto 0);\r
+       DEBUG_OUT               : out   std_logic_vector(15 downto 0)\r
+);\r
+end component max_data;\r
+\r
+component comp4bit is\r
+port(\r
+       DATAA           : in    std_logic_vector(3 downto 0);\r
+       DATAB           : in    std_logic_vector(3 downto 0);\r
+       AGTB            : out   std_logic\r
+);\r
+end component comp4bit;\r
+\r
+component slv_register_bank is\r
+generic(\r
+       RESET_VALUE     : std_logic_vector(15 downto 0) := x"0001"\r
+);\r
+port(\r
+       CLK_IN                  : in    std_logic;\r
+       RESET_IN                : in    std_logic;\r
+       -- Slave bus\r
+       SLV_ADDR_IN     : in    std_logic_vector(3 downto 0);\r
+       SLV_READ_IN             : in    std_logic;\r
+       SLV_WRITE_IN    : in    std_logic;\r
+       SLV_ACK_OUT             : out   std_logic;\r
+       SLV_DATA_IN             : in    std_logic_vector(31 downto 0);\r
+       SLV_DATA_OUT    : out   std_logic_vector(31 downto 0);\r
+       -- I/O to the backend\r
+       BACKPLANE_IN    : in    std_logic_vector(2 downto 0);\r
+       CTRL_0_OUT              : out   std_logic_vector(15 downto 0);\r
+       CTRL_1_OUT              : out   std_logic_vector(15 downto 0);\r
+       CTRL_2_OUT              : out   std_logic_vector(15 downto 0);\r
+       CTRL_3_OUT              : out   std_logic_vector(15 downto 0);\r
+       CTRL_4_OUT              : out   std_logic_vector(15 downto 0);\r
+       CTRL_5_OUT              : out   std_logic_vector(15 downto 0);\r
+       CTRL_6_OUT              : out   std_logic_vector(15 downto 0);\r
+       CTRL_7_OUT              : out   std_logic_vector(15 downto 0);\r
+       CTRL_8_OUT              : out   std_logic_vector(15 downto 0);\r
+       CTRL_9_OUT              : out   std_logic_vector(15 downto 0);\r
+       CTRL_10_OUT             : out   std_logic_vector(15 downto 0);\r
+       CTRL_11_OUT             : out   std_logic_vector(15 downto 0);\r
+       CTRL_12_OUT             : out   std_logic_vector(15 downto 0);\r
+       CTRL_13_OUT             : out   std_logic_vector(15 downto 0);\r
+       CTRL_14_OUT             : out   std_logic_vector(15 downto 0);\r
+       CTRL_15_OUT             : out   std_logic_vector(15 downto 0);\r
+       STAT_0_IN               : in    std_logic_vector(15 downto 0);\r
+       STAT_1_IN               : in    std_logic_vector(15 downto 0);\r
+       STAT_2_IN               : in    std_logic_vector(15 downto 0);\r
+       STAT_3_IN               : in    std_logic_vector(15 downto 0);\r
+       STAT_4_IN               : in    std_logic_vector(15 downto 0);\r
+       STAT_5_IN               : in    std_logic_vector(15 downto 0);\r
+       STAT_6_IN               : in    std_logic_vector(15 downto 0);\r
+       STAT_7_IN               : in    std_logic_vector(15 downto 0);\r
+       STAT_8_IN               : in    std_logic_vector(15 downto 0);\r
+       STAT_9_IN               : in    std_logic_vector(15 downto 0);\r
+       STAT_10_IN              : in    std_logic_vector(15 downto 0);\r
+       STAT_11_IN              : in    std_logic_vector(15 downto 0);\r
+       STAT_12_IN              : in    std_logic_vector(15 downto 0);\r
+       STAT_13_IN              : in    std_logic_vector(15 downto 0);\r
+       STAT_14_IN              : in    std_logic_vector(15 downto 0);\r
+       STAT_15_IN              : in    std_logic_vector(15 downto 0);\r
+       -- Status lines\r
+       STAT                    : out   std_logic_vector(31 downto 0) -- DEBUG\r
+);\r
+end component slv_register_bank;\r
+\r
+component pulse_stretch is\r
+port(\r
+       CLK_IN                  : in    std_logic;\r
+       RESET_IN                : in    std_logic;\r
+       START_IN                : in    std_logic;\r
+       PULSE_OUT               : out   std_logic;\r
+       DEBUG_OUT               : out   std_logic_vector(15 downto 0)\r
+);\r
+end component pulse_stretch;\r
+\r
+component apv_adc_map_mem is\r
+port(\r
+       ADDRESS : in    std_logic_vector(6 downto 0);\r
+       Q               : out   std_logic_vector(3 downto 0)\r
+);\r
+end component apv_adc_map_mem;\r
+\r
+component adc_apv_map_mem is\r
+port(\r
+       ADDRESS : in    std_logic_vector(6 downto 0);\r
+       Q               : out   std_logic_vector(3 downto 0)\r
+);\r
+end component adc_apv_map_mem;\r
+\r
+component ped_thr_true is\r
+port(\r
+       DATAINA         : in    std_logic_vector(17 downto 0);\r
+       DATAINB         : in    std_logic_vector(17 downto 0);\r
+       ADDRESSA        : in    std_logic_vector(6 downto 0);\r
+       ADDRESSB        : in    std_logic_vector(6 downto 0);\r
+       CLOCKA          : in    std_logic;\r
+       CLOCKB          : in    std_logic;\r
+       CLOCKENA        : in    std_logic;\r
+       CLOCKENB        : in    std_logic;\r
+       WRA                     : in    std_logic;\r
+       WRB                     : in    std_logic;\r
+       RESETA          : in    std_logic;\r
+       RESETB          : in    std_logic;\r
+       QA                      : out   std_logic_vector(17 downto 0);\r
+       QB                      : out   std_logic_vector(17 downto 0)\r
+);\r
+end component ped_thr_true;\r
+\r
+component slv_ped_thr_mem is\r
+port(\r
+       CLK_IN                  : in    std_logic;\r
+       RESET_IN                : in    std_logic;\r
+       -- Slave bus\r
+       SLV_ADDR_IN     : in    std_logic_vector(10 downto 0);\r
+       SLV_READ_IN             : in    std_logic;\r
+       SLV_WRITE_IN    : in    std_logic;\r
+       SLV_ACK_OUT             : out   std_logic;\r
+       SLV_DATA_IN             : in    std_logic_vector(31 downto 0);\r
+       SLV_DATA_OUT    : out   std_logic_vector(31 downto 0);\r
+       -- backplane identifier\r
+       BACKPLANE_IN    : in    std_logic_vector(2 downto 0);\r
+       -- I/O to the backend\r
+       MEM_CLK_IN              : in    std_logic;\r
+       MEM_ADDR_IN             : in    std_logic_vector(6 downto 0);\r
+       MEM_0_D_OUT             : out   std_logic_vector(17 downto 0);\r
+       MEM_1_D_OUT             : out   std_logic_vector(17 downto 0);\r
+       MEM_2_D_OUT             : out   std_logic_vector(17 downto 0);\r
+       MEM_3_D_OUT             : out   std_logic_vector(17 downto 0);\r
+       MEM_4_D_OUT             : out   std_logic_vector(17 downto 0);\r
+       MEM_5_D_OUT             : out   std_logic_vector(17 downto 0);\r
+       MEM_6_D_OUT             : out   std_logic_vector(17 downto 0);\r
+       MEM_7_D_OUT             : out   std_logic_vector(17 downto 0);\r
+       MEM_8_D_OUT             : out   std_logic_vector(17 downto 0);\r
+       MEM_9_D_OUT             : out   std_logic_vector(17 downto 0);\r
+       MEM_10_D_OUT    : out   std_logic_vector(17 downto 0);\r
+       MEM_11_D_OUT    : out   std_logic_vector(17 downto 0);\r
+       MEM_12_D_OUT    : out   std_logic_vector(17 downto 0);\r
+       MEM_13_D_OUT    : out   std_logic_vector(17 downto 0);\r
+       MEM_14_D_OUT    : out   std_logic_vector(17 downto 0);\r
+       MEM_15_D_OUT    : out   std_logic_vector(17 downto 0);\r
+       -- Status lines\r
+       STAT                    : out   std_logic_vector(31 downto 0) -- DEBUG\r
+);\r
+end component slv_ped_thr_mem;\r
+\r
+component reset_handler is\r
+port( \r
+       CLEAR_IN                : in    std_logic; -- async reset from outside, if available (otherwise '0')\r
+       RESET_IN                : in    std_logic; -- for testing, if not needed, set to '0'\r
+       CLK_IN                  : in    std_logic;\r
+       TRB_RESET_IN    : in    std_logic;\r
+       RESET_OUT               : out   std_logic;\r
+       DEBUG_OUT               : out   std_logic_vector(15 downto 0)\r
+);\r
+end component reset_handler;\r
+\r
+component pll_40m is\r
+port( \r
+       CLK             : in    std_logic;\r
+       RESET   : in    std_logic;\r
+       DPAMODE : in    std_logic;\r
+       DPHASE0 : in    std_logic;\r
+       DPHASE1 : in    std_logic;\r
+       DPHASE2 : in    std_logic;\r
+       DPHASE3 : in    std_logic;\r
+       CLKOP   : out   std_logic;\r
+       CLKOS   : out   std_logic;\r
+       LOCK    : out   std_logic\r
+);\r
+end component pll_40m;\r
+\r
+component dll_100m is\r
+port( \r
+       CLK             : in    std_logic;\r
+       RESETN  : in    std_logic;\r
+       ALUHOLD : in    std_logic;\r
+       CLKOP   : out   std_logic;\r
+       CLKOS   : out   std_logic;\r
+       LOCK    : out   std_logic\r
+);\r
+end component dll_100m;\r
+\r
+component state_sync is\r
+port( \r
+       STATE_A_IN              : in    std_logic;\r
+       CLK_B_IN                : in    std_logic;\r
+       RESET_B_IN              : in    std_logic;\r
+       STATE_B_OUT             : out   std_logic\r
+       );\r
+end component state_sync;\r
+\r
+component pulse_sync is\r
+port( \r
+       CLK_A_IN                : in    std_logic;\r
+       RESET_A_IN              : in    std_logic;\r
+       PULSE_A_IN              : in    std_logic;\r
+       CLK_B_IN                : in    std_logic;\r
+       RESET_B_IN              : in    std_logic;\r
+       PULSE_B_OUT             : out   std_logic\r
+);\r
+end component pulse_sync;\r
+\r
+component rich_trb is\r
+port( \r
+       CLK100M_IN                                      : in    std_logic;\r
+       SYSCLK_IN                                       : in    std_logic;\r
+       RESET_IN                                        : in    std_logic;\r
+       SD_RXD_P_IN                                     : in    std_logic;\r
+       SD_RXD_N_IN                                     : in    std_logic;\r
+       SD_TXD_P_OUT                            : out   std_logic;\r
+       SD_TXD_N_OUT                            : out   std_logic;\r
+       SD_PRESENT_IN                           : in    std_logic;\r
+       SD_TXDIS_OUT                            : out   std_logic;\r
+       SD_LOS_IN                                       : in    std_logic;\r
+       ONEWIRE_INOUT                           : inout std_logic;\r
+       -- common regIO status / control registers\r
+--     COMMON_STAT_REG_IN                      : in    std_logic_vector(std_COMSTATREG*c_REGIO_REGISTER_WIDTH-1 downto 0); -- common status register, bit definitions like in WIKI\r
+       COMMON_STAT_REG_IN                      : in    std_logic_vector(2*32-1 downto 0); -- common status register, bit definitions like in WIKI\r
+--     COMMON_CTRL_REG_OUT                     : out   std_logic_vector(std_COMCTRLREG*c_REGIO_REGISTER_WIDTH-1 downto 0); -- common control register, bit definitions like in WIKI\r
+       COMMON_CTRL_REG_OUT                     : out   std_logic_vector(2*32-1 downto 0); -- common control register, bit definitions like in WIKI\r
+    -- status register input to regIO / control register output from regIO\r
+    CONTROL_OUT                                        : out   std_logic_vector(63 downto 0);\r
+       STATUS_IN                                       : in    std_logic_vector(127 downto 0);\r
+       -- LVL1 signals\r
+       LVL1_TRG_TYPE_OUT                       : out   std_logic_vector(3 downto 0);\r
+       LVL1_TRG_RECEIVED_OUT           : out   std_logic;\r
+       LVL1_TRG_NUMBER_OUT                     : out   std_logic_vector(15 downto 0);\r
+       LVL1_TRG_CODE_OUT                       : out   std_logic_vector(7 downto 0);\r
+       LVL1_TRG_INFORMATION_OUT        : out   std_logic_vector(23 downto 0);\r
+       LVL1_ERROR_PATTERN_IN           : in    std_logic_vector(31 downto 0);\r
+       LVL1_TRG_RELEASE_IN                     : in    std_logic;\r
+       LVL1_INT_TRG_NUMBER_OUT     : out   std_logic_vector(15 downto 0);\r
+       LVL1_INT_TRG_UPDATE_OUT     : out   std_logic;\r
+    TIMING_TRG_FOUND_IN                        : in    std_logic;\r
+       -- IPU data channel signals (yes, we will use ComputeNodes (tm) (R) (C) one day... :-)\r
+       IPU_NUMBER_OUT                          : out   std_logic_vector(15 downto 0); -- trigger tag\r
+       IPU_INFORMATION_OUT                     : out   std_logic_vector(7 downto 0); -- trigger information\r
+       IPU_START_READOUT_OUT           : out   std_logic; -- gimme data!\r
+       IPU_DATA_IN                                     : in    std_logic_vector(31 downto 0); -- detector data, equipped with DHDR\r
+       IPU_DATAREADY_IN                        : in    std_logic; -- data is valid\r
+       IPU_READOUT_FINISHED_IN         : in    std_logic; -- no more data, end transfer, send TRM\r
+       IPU_READ_OUT                            : out   std_logic; -- read strobe, low every second cycle\r
+       IPU_LENGTH_IN                           : in    std_logic_vector(15 downto 0); -- length of data packet (32bit words) (?)\r
+       IPU_ERROR_PATTERN_IN            : in    std_logic_vector(31 downto 0); -- error pattern\r
+       -- regIO bus\r
+--     REGIO_ADDR_OUT                          : out   std_logic_vector(c_REGIO_ADDRESS_WIDTH-1 downto 0);\r
+    REGIO_ADDR_OUT                             : out   std_logic_vector(16-1 downto 0);\r
+       REGIO_READ_ENABLE_OUT           : out   std_logic;\r
+       REGIO_WRITE_ENABLE_OUT          : out   std_logic;\r
+--     REGIO_DATA_OUT                          : out   std_logic_vector(c_REGIO_REGISTER_WIDTH-1 downto 0);\r
+       REGIO_DATA_OUT                          : out   std_logic_vector(32-1 downto 0);\r
+--     REGIO_DATA_IN                           : in    std_logic_vector(c_REGIO_REGISTER_WIDTH-1 downto 0);\r
+       REGIO_DATA_IN                           : in    std_logic_vector(32-1 downto 0);\r
+       REGIO_DATAREADY_IN                      : in    std_logic;\r
+       REGIO_NO_MORE_DATA_IN           : in    std_logic;\r
+       REGIO_WRITE_ACK_IN                      : in    std_logic;\r
+       REGIO_UNKNOWN_ADDR_IN           : in    std_logic;\r
+       REGIO_TIMEOUT_OUT                       : out   std_logic;\r
+       -- status LEDs\r
+       LED_LINK_STAT                           : out   std_logic;\r
+       LED_LINK_TXD                            : out   std_logic;\r
+       LED_LINK_RXD                            : out   std_logic;\r
+       LINK_BSM_OUT                            : out   std_logic_vector(3 downto 0);\r
+       RESET_OUT                                       : out   std_logic;\r
+       -- Debug\r
+       DEBUG                                           : out   std_logic_vector(63 downto 0)\r
+);\r
+end component rich_trb;\r
+\r
+component slave_bus is\r
+port( \r
+       CLK_IN                                  : in    std_logic;\r
+       RESET_IN                                : in    std_logic;\r
+       -- RegIO signals\r
+       REGIO_ADDR_IN                   : in    std_logic_vector(15 downto 0); -- address bus\r
+       REGIO_DATA_IN                   : in    std_logic_vector(31 downto 0); -- data from TRB endpoint\r
+       REGIO_DATA_OUT                  : out   std_logic_vector(31 downto 0); -- data to TRB endpoint\r
+       REGIO_READ_ENABLE_IN    : in    std_logic; -- read pulse\r
+       REGIO_WRITE_ENABLE_IN   : in    std_logic; -- write pulse\r
+       REGIO_TIMEOUT_IN                : in    std_logic; -- access timed out\r
+       REGIO_DATAREADY_OUT             : out   std_logic; -- your data, master, as requested\r
+       REGIO_WRITE_ACK_OUT             : out   std_logic; -- data accepted\r
+       REGIO_NO_MORE_DATA_OUT  : out   std_logic; -- don't disturb me now\r
+       REGIO_UNKNOWN_ADDR_OUT  : out   std_logic; -- noone here to answer your request\r
+       -- I2C connections\r
+       SDA_IN                                  : in    std_logic;\r
+       SDA_OUT                                 : out   std_logic;\r
+       SCL_IN                                  : in    std_logic;\r
+       SCL_OUT                                 : out   std_logic;\r
+       -- 1Wire connections\r
+       ONEWIRE_START_IN                : in    std_logic; -- start 1Wire scan (pulse)\r
+       ONEWIRE_INOUT                   : inout std_logic_vector(15 downto 0); -- 1Wire ID on APV FEs\r
+       BP_ONEWIRE_INOUT                : inout std_logic; -- 1Wire ID on backplane\r
+       -- SPI connections\r
+       SPI_CS_OUT                              : out   std_logic;\r
+       SPI_SCK_OUT                             : out   std_logic;\r
+       SPI_SDI_IN                              : in    std_logic;\r
+       SPI_SDO_OUT                             : out   std_logic;\r
+       -- ADC 0 SPI connections\r
+       SPI_ADC0_CS_OUT                 : out   std_logic;\r
+       SPI_ADC0_SCK_OUT                : out   std_logic;\r
+       SPI_ADC0_SDO_OUT                : out   std_logic;\r
+       ADC0_PLL_LOCKED_IN              : in    std_logic;\r
+       ADC0_PD_OUT                             : out   std_logic;\r
+       ADC0_RST_OUT                    : out   std_logic;\r
+       ADC0_DEL_OUT                    : out   std_logic_vector(3 downto 0);\r
+       ADC0_CLK_IN                             : in    std_logic;\r
+       ADC0_DATA_IN                    : in    std_logic_vector(11 downto 0);\r
+       ADC0_SEL_OUT                    : out   std_logic_vector(2 downto 0);\r
+       APV0_RST_OUT                    : out   std_logic;\r
+       -- ADC 0 SPI connections\r
+       SPI_ADC1_CS_OUT                 : out   std_logic;\r
+       SPI_ADC1_SCK_OUT                : out   std_logic;\r
+       SPI_ADC1_SDO_OUT                : out   std_logic;\r
+       ADC1_PLL_LOCKED_IN              : in    std_logic;\r
+       ADC1_PD_OUT                             : out   std_logic;\r
+       ADC1_RST_OUT                    : out   std_logic;\r
+       ADC1_DEL_OUT                    : out   std_logic_vector(3 downto 0);\r
+       ADC1_CLK_IN                             : in    std_logic;\r
+       ADC1_DATA_IN                    : in    std_logic_vector(11 downto 0);\r
+       ADC1_SEL_OUT                    : out   std_logic_vector(2 downto 0);\r
+       APV1_RST_OUT                    : out   std_logic;\r
+       -- User specific inputs / outputs\r
+       BACKPLANE_IN                    : in    std_logic_vector(2 downto 0);\r
+       -- pedestal interface\r
+       PED_ADDR_IN                             : in    std_logic_vector(6 downto 0); -- pedestal addressing from data handlers\r
+       PED_DATA_0_OUT                  : out   std_logic_vector(17 downto 0);\r
+       PED_DATA_1_OUT                  : out   std_logic_vector(17 downto 0);\r
+       PED_DATA_2_OUT                  : out   std_logic_vector(17 downto 0);\r
+       PED_DATA_3_OUT                  : out   std_logic_vector(17 downto 0);\r
+       PED_DATA_4_OUT                  : out   std_logic_vector(17 downto 0);\r
+       PED_DATA_5_OUT                  : out   std_logic_vector(17 downto 0);\r
+       PED_DATA_6_OUT                  : out   std_logic_vector(17 downto 0);\r
+       PED_DATA_7_OUT                  : out   std_logic_vector(17 downto 0);\r
+       PED_DATA_8_OUT                  : out   std_logic_vector(17 downto 0);\r
+       PED_DATA_9_OUT                  : out   std_logic_vector(17 downto 0);\r
+       PED_DATA_10_OUT                 : out   std_logic_vector(17 downto 0);\r
+       PED_DATA_11_OUT                 : out   std_logic_vector(17 downto 0);\r
+       PED_DATA_12_OUT                 : out   std_logic_vector(17 downto 0);\r
+       PED_DATA_13_OUT                 : out   std_logic_vector(17 downto 0);\r
+       PED_DATA_14_OUT                 : out   std_logic_vector(17 downto 0);\r
+       PED_DATA_15_OUT                 : out   std_logic_vector(17 downto 0);\r
+       -- threshold interface\r
+       THR_ADDR_IN                             : in    std_logic_vector(6 downto 0); -- threshold addressing from data handlers\r
+       THR_DATA_0_OUT                  : out   std_logic_vector(17 downto 0);\r
+       THR_DATA_1_OUT                  : out   std_logic_vector(17 downto 0);\r
+       THR_DATA_2_OUT                  : out   std_logic_vector(17 downto 0);\r
+       THR_DATA_3_OUT                  : out   std_logic_vector(17 downto 0);\r
+       THR_DATA_4_OUT                  : out   std_logic_vector(17 downto 0);\r
+       THR_DATA_5_OUT                  : out   std_logic_vector(17 downto 0);\r
+       THR_DATA_6_OUT                  : out   std_logic_vector(17 downto 0);\r
+       THR_DATA_7_OUT                  : out   std_logic_vector(17 downto 0);\r
+       THR_DATA_8_OUT                  : out   std_logic_vector(17 downto 0);\r
+       THR_DATA_9_OUT                  : out   std_logic_vector(17 downto 0);\r
+       THR_DATA_10_OUT                 : out   std_logic_vector(17 downto 0);\r
+       THR_DATA_11_OUT                 : out   std_logic_vector(17 downto 0);\r
+       THR_DATA_12_OUT                 : out   std_logic_vector(17 downto 0);\r
+       THR_DATA_13_OUT                 : out   std_logic_vector(17 downto 0);\r
+       THR_DATA_14_OUT                 : out   std_logic_vector(17 downto 0);\r
+       THR_DATA_15_OUT                 : out   std_logic_vector(17 downto 0);\r
+       -- APV control / status\r
+       CTRL_0_OUT                              : out   std_logic_vector(15 downto 0);\r
+       CTRL_1_OUT                              : out   std_logic_vector(15 downto 0);\r
+       CTRL_2_OUT                              : out   std_logic_vector(15 downto 0);\r
+       CTRL_3_OUT                              : out   std_logic_vector(15 downto 0);\r
+       CTRL_4_OUT                              : out   std_logic_vector(15 downto 0);\r
+       CTRL_5_OUT                              : out   std_logic_vector(15 downto 0);\r
+       CTRL_6_OUT                              : out   std_logic_vector(15 downto 0);\r
+       CTRL_7_OUT                              : out   std_logic_vector(15 downto 0);\r
+       CTRL_8_OUT                              : out   std_logic_vector(15 downto 0);\r
+       CTRL_9_OUT                              : out   std_logic_vector(15 downto 0);\r
+       CTRL_10_OUT                             : out   std_logic_vector(15 downto 0);\r
+       CTRL_11_OUT                             : out   std_logic_vector(15 downto 0);\r
+       CTRL_12_OUT                             : out   std_logic_vector(15 downto 0);\r
+       CTRL_13_OUT                             : out   std_logic_vector(15 downto 0);\r
+       CTRL_14_OUT                             : out   std_logic_vector(15 downto 0);\r
+       CTRL_15_OUT                             : out   std_logic_vector(15 downto 0);\r
+       STAT_0_IN                               : in    std_logic_vector(15 downto 0);\r
+       STAT_1_IN                               : in    std_logic_vector(15 downto 0);\r
+       STAT_2_IN                               : in    std_logic_vector(15 downto 0);\r
+       STAT_3_IN                               : in    std_logic_vector(15 downto 0);\r
+       STAT_4_IN                               : in    std_logic_vector(15 downto 0);\r
+       STAT_5_IN                               : in    std_logic_vector(15 downto 0);\r
+       STAT_6_IN                               : in    std_logic_vector(15 downto 0);\r
+       STAT_7_IN                               : in    std_logic_vector(15 downto 0);\r
+       STAT_8_IN                               : in    std_logic_vector(15 downto 0);\r
+       STAT_9_IN                               : in    std_logic_vector(15 downto 0);\r
+       STAT_10_IN                              : in    std_logic_vector(15 downto 0);\r
+       STAT_11_IN                              : in    std_logic_vector(15 downto 0);\r
+       STAT_12_IN                              : in    std_logic_vector(15 downto 0);\r
+       STAT_13_IN                              : in    std_logic_vector(15 downto 0);\r
+       STAT_14_IN                              : in    std_logic_vector(15 downto 0);\r
+       STAT_15_IN                              : in    std_logic_vector(15 downto 0);\r
+       -- some control signals\r
+       CTRL_LVL_OUT                    : out   std_logic_vector(31 downto 0);\r
+       CTRL_TRG_OUT                    : out   std_logic_vector(31 downto 0);\r
+       CTRL_PLL_OUT                    : out   std_logic_vector(15 downto 0);\r
+       STATUS_PLL_IN                   : in    std_logic_vector(15 downto 0);\r
+       -- temporary stuff\r
+       TEST_REG_IN                             : in    std_logic_vector(31 downto 0); -- just for testing!\r
+       TEST_REG_OUT                    : out   std_logic_vector(31 downto 0); -- just for testing!\r
+       -- Debug\r
+       DEBUG_OUT                               : out   std_logic_vector(63 downto 0);\r
+       STAT                                    : out   std_logic_vector(31 downto 0)\r
+);\r
+end component slave_bus;\r
+\r
+component oddrxc is\r
+port( \r
+       DA   : in    std_logic;\r
+       DB   : in    std_logic;\r
+       CLK  : in    std_logic;\r
+       RST  : in    std_logic;\r
+       Q    : out   std_logic\r
+);\r
+end component oddrxc;\r
+\r
+component apv_trgctrl is\r
+port( \r
+       CLK_IN                          : in    std_logic; -- 100MHz master clock\r
+       RESET_IN                        : in    std_logic;\r
+       CLK_APV_IN                      : in    std_logic; -- 40MHz phase shifted clock\r
+       -- Triggers\r
+       SYNC_TRG_IN                     : in    std_logic; -- 100MHz signal to SYNC APVs\r
+       TIME_TRG_IN                     : in    std_logic_vector(3 downto 0); -- timing trigger inputs\r
+       TRB_TRG_IN                      : in    std_logic_vector(3 downto 0); -- TRB trigger inputs\r
+       STILL_BUSY_IN           : in    std_logic; -- set to '1' if any buffer is in danger of overflow\r
+       TRG_FOUND_OUT           : out   std_logic; -- trigger found\r
+       SECTOR_IN           : in    std_logic_vector(2 downto 0); -- sector number\r
+       -- slow control settings\r
+       TRG_MAX_OUT                     : out   std_logic_vector(3 downto 0); -- maximum number of triggers/event\r
+       TRG_3_TODO_IN           : in    std_logic_vector(3 downto 0); -- APV triggers on trigger 3\r
+       TRG_3_DELAY_IN          : in    std_logic_vector(3 downto 0); -- delay between triggers\r
+       TRG_2_TODO_IN           : in    std_logic_vector(3 downto 0); -- APV triggers on trigger 2\r
+       TRG_2_DELAY_IN          : in    std_logic_vector(3 downto 0); -- delay between triggers\r
+       TRG_1_TODO_IN           : in    std_logic_vector(3 downto 0); -- APV triggers on trigger 1\r
+       TRG_1_DELAY_IN          : in    std_logic_vector(3 downto 0); -- delay between triggers\r
+       TRG_0_TODO_IN           : in    std_logic_vector(3 downto 0); -- APV triggers on trigger 0\r
+       TRG_0_DELAY_IN          : in    std_logic_vector(3 downto 0); -- delay between triggers\r
+       TRG_SETUP_IN            : in    std_logic_vector(7 downto 0); -- setup of external triggers\r
+       -- TRB LVL1 signals\r
+       TRB_TTAG_IN                     : in    std_logic_vector(15 downto 0); -- TRB LVL1 trigger tag\r
+       TRB_TRND_IN                     : in    std_logic_vector(7 downto 0); -- TRB LVL1 random tag\r
+       TRB_TTYPE_IN            : in    std_logic_vector(3 downto 0); -- TRB LVL1 trigger type\r
+       TRB_TINFO_IN        : in    std_logic_vector(23 downto 0); -- TRB LVL1 trigger information\r
+       TRB_TRGRCVD_IN          : in    std_logic; -- TRB LVL1 trigger received\r
+       TRB_MISSING_OUT         : out   std_logic; -- TRB LVL1 trigger arrived, but has no corresponding timing trigger\r
+       TRB_RELEASE_OUT         : out   std_logic; -- release TRB LVL1 channel\r
+       TRB_COUNTER_OUT         : out   std_logic_vector(15 downto 0);\r
+       TRB_COUNTER_IN      : in    std_logic_vector(15 downto 0);\r
+       TRB_LD_COUNTER_IN   : in    std_logic;\r
+       -- EDS signals\r
+       EDS_DATA_OUT            : out   std_logic_vector(39 downto 0); -- EventDataSheet (tm) data word\r
+       EDS_AVAIL_OUT           : out   std_logic; -- EDS valid, APV trigger done\r
+       EDS_DONE_IN                     : in    std_logic; -- release current EDS buffer\r
+       EDS_FULL_OUT            : out   std_logic; -- EDS buffer is full\r
+       EDS_LEVEL_OUT           : out   std_logic_vector(4 downto 0);\r
+       FRM_REQD_OUT            : out   std_logic; -- frame requested, (level counter decrement)\r
+       -- APV signals\r
+       APV_TRG_OUT                     : out   std_logic;\r
+       APV_SYNC_OUT            : out   std_logic;\r
+       DEBUG_OUT                       : out   std_logic_vector(63 downto 0)\r
+);\r
+end component apv_trgctrl;\r
+\r
+component ped_corr_ctrl is\r
+port( \r
+       CLK_IN                          : in    std_logic; -- 100MHz local clock\r
+       RESET_IN                        : in    std_logic; -- synchronous reset\r
+       -- Slow control registers\r
+       -- EDS buffer -- back to previous source stage\r
+       EDS_DATA_IN                     : in    std_logic_vector(39 downto 0);\r
+       EDS_AVAIL_IN            : in    std_logic;\r
+       EDS_DONE_OUT            : out   std_logic;\r
+       -- DHDR information -- to next stage\r
+       DHDR_DATA_OUT           : out   std_logic_vector(31 downto 0);\r
+       DHDR_LENGTH_OUT         : out   std_logic_vector(15 downto 0);\r
+       DHDR_STORE_OUT          : out   std_logic;\r
+       DHDR_BUF_FULL_IN        : in    std_logic;\r
+       FIFO_SPACE_REQ_OUT  : out   std_logic_vector(11 downto 0);\r
+       -- data buffers -- from raw_buf_stage\r
+       BUF_ADDR_OUT            : out   std_logic_vector(6 downto 0);\r
+       BUF_DONE_OUT            : out   std_logic;\r
+       BUF_TICK_IN                     : in    std_logic_vector(15 downto 0);\r
+       BUF_START_IN            : in    std_logic_vector(15 downto 0);\r
+       -- raw data\r
+       BUF_0_DATA_IN           : in    std_logic_vector(37 downto 0);\r
+       BUF_1_DATA_IN           : in    std_logic_vector(37 downto 0);\r
+       BUF_2_DATA_IN           : in    std_logic_vector(37 downto 0);\r
+       BUF_3_DATA_IN           : in    std_logic_vector(37 downto 0);\r
+       BUF_4_DATA_IN           : in    std_logic_vector(37 downto 0);\r
+       BUF_5_DATA_IN           : in    std_logic_vector(37 downto 0);\r
+       BUF_6_DATA_IN           : in    std_logic_vector(37 downto 0);\r
+       BUF_7_DATA_IN           : in    std_logic_vector(37 downto 0);\r
+       BUF_8_DATA_IN           : in    std_logic_vector(37 downto 0);\r
+       BUF_9_DATA_IN           : in    std_logic_vector(37 downto 0);\r
+       BUF_10_DATA_IN          : in    std_logic_vector(37 downto 0);\r
+       BUF_11_DATA_IN          : in    std_logic_vector(37 downto 0);\r
+       BUF_12_DATA_IN          : in    std_logic_vector(37 downto 0);\r
+       BUF_13_DATA_IN          : in    std_logic_vector(37 downto 0);\r
+       BUF_14_DATA_IN          : in    std_logic_vector(37 downto 0);\r
+       BUF_15_DATA_IN          : in    std_logic_vector(37 downto 0);\r
+       -- Pedestal data\r
+       PED_ADDR_OUT            : out   std_logic_vector(6 downto 0);\r
+       PED_0_DATA_IN           : in    std_logic_vector(17 downto 0);\r
+       PED_1_DATA_IN           : in    std_logic_vector(17 downto 0);\r
+       PED_2_DATA_IN           : in    std_logic_vector(17 downto 0);\r
+       PED_3_DATA_IN           : in    std_logic_vector(17 downto 0);\r
+       PED_4_DATA_IN           : in    std_logic_vector(17 downto 0);\r
+       PED_5_DATA_IN           : in    std_logic_vector(17 downto 0);\r
+       PED_6_DATA_IN           : in    std_logic_vector(17 downto 0);\r
+       PED_7_DATA_IN           : in    std_logic_vector(17 downto 0);\r
+       PED_8_DATA_IN           : in    std_logic_vector(17 downto 0);\r
+       PED_9_DATA_IN           : in    std_logic_vector(17 downto 0);\r
+       PED_10_DATA_IN          : in    std_logic_vector(17 downto 0);\r
+       PED_11_DATA_IN          : in    std_logic_vector(17 downto 0);\r
+       PED_12_DATA_IN          : in    std_logic_vector(17 downto 0);\r
+       PED_13_DATA_IN          : in    std_logic_vector(17 downto 0);\r
+       PED_14_DATA_IN          : in    std_logic_vector(17 downto 0);\r
+       PED_15_DATA_IN          : in    std_logic_vector(17 downto 0);\r
+       -- Threshold data\r
+       THR_ADDR_OUT            : out   std_logic_vector(6 downto 0);\r
+       THR_0_DATA_IN           : in    std_logic_vector(17 downto 0);\r
+       THR_1_DATA_IN           : in    std_logic_vector(17 downto 0);\r
+       THR_2_DATA_IN           : in    std_logic_vector(17 downto 0);\r
+       THR_3_DATA_IN           : in    std_logic_vector(17 downto 0);\r
+       THR_4_DATA_IN           : in    std_logic_vector(17 downto 0);\r
+       THR_5_DATA_IN           : in    std_logic_vector(17 downto 0);\r
+       THR_6_DATA_IN           : in    std_logic_vector(17 downto 0);\r
+       THR_7_DATA_IN           : in    std_logic_vector(17 downto 0);\r
+       THR_8_DATA_IN           : in    std_logic_vector(17 downto 0);\r
+       THR_9_DATA_IN           : in    std_logic_vector(17 downto 0);\r
+       THR_10_DATA_IN          : in    std_logic_vector(17 downto 0);\r
+       THR_11_DATA_IN          : in    std_logic_vector(17 downto 0);\r
+       THR_12_DATA_IN          : in    std_logic_vector(17 downto 0);\r
+       THR_13_DATA_IN          : in    std_logic_vector(17 downto 0);\r
+       THR_14_DATA_IN          : in    std_logic_vector(17 downto 0);\r
+       THR_15_DATA_IN          : in    std_logic_vector(17 downto 0);\r
+       -- processed data\r
+       FIFO_START_OUT          : out   std_logic;\r
+       FIFO_0_DATA_OUT         : out   std_logic_vector(39 downto 0);\r
+       FIFO_1_DATA_OUT         : out   std_logic_vector(39 downto 0);\r
+       FIFO_2_DATA_OUT         : out   std_logic_vector(39 downto 0);\r
+       FIFO_3_DATA_OUT         : out   std_logic_vector(39 downto 0);\r
+       FIFO_4_DATA_OUT         : out   std_logic_vector(39 downto 0);\r
+       FIFO_5_DATA_OUT         : out   std_logic_vector(39 downto 0);\r
+       FIFO_6_DATA_OUT         : out   std_logic_vector(39 downto 0);\r
+       FIFO_7_DATA_OUT         : out   std_logic_vector(39 downto 0);\r
+       FIFO_8_DATA_OUT         : out   std_logic_vector(39 downto 0);\r
+       FIFO_9_DATA_OUT         : out   std_logic_vector(39 downto 0);\r
+       FIFO_10_DATA_OUT        : out   std_logic_vector(39 downto 0);\r
+       FIFO_11_DATA_OUT        : out   std_logic_vector(39 downto 0);\r
+       FIFO_12_DATA_OUT        : out   std_logic_vector(39 downto 0);\r
+       FIFO_13_DATA_OUT        : out   std_logic_vector(39 downto 0);\r
+       FIFO_14_DATA_OUT        : out   std_logic_vector(39 downto 0);\r
+       FIFO_15_DATA_OUT        : out   std_logic_vector(39 downto 0);\r
+       FIFO_WE_OUT                     : out   std_logic_vector(15 downto 0);\r
+       FIFO_DONE_OUT           : out   std_logic; -- write level information into small FIFOs\r
+       -- Debug signals\r
+       DBG_BSM_OUT                     : out   std_logic_vector(7 downto 0);\r
+       DBG_OUT                         : out   std_logic_vector(15 downto 0)\r
+);\r
+end component ped_corr_ctrl;\r
+\r
+component ipu_fifo_stage is\r
+port( \r
+       CLK_IN                                          : in    std_logic; -- 100MHz local clock\r
+       RESET_IN                                        : in    std_logic; -- synchronous reset\r
+       -- Slow control signals\r
+       SECTOR_IN                                       : in    std_logic_vector(2 downto 0);\r
+       MODULE_IN                                       : in    std_logic_vector(2 downto 0);\r
+       -- IPU channel connections\r
+       IPU_NUMBER_IN                           : in    std_logic_vector(15 downto 0); -- trigger tag\r
+       IPU_INFORMATION_IN                      : in    std_logic_vector(7 downto 0); -- trigger information\r
+       IPU_START_READOUT_IN            : in    std_logic; -- gimme data!\r
+       IPU_DATA_OUT                            : out   std_logic_vector(31 downto 0); -- detector data, equipped with DHDR\r
+       IPU_DATAREADY_OUT                       : out   std_logic; -- data is valid\r
+       IPU_READOUT_FINISHED_OUT        : out   std_logic; -- no more data, end transfer, send TRM\r
+       IPU_READ_IN                                     : in    std_logic; -- read strobe, low every second cycle\r
+       IPU_LENGTH_OUT                          : out   std_logic_vector(15 downto 0); -- length of data packet (32bit words) (?)\r
+       IPU_ERROR_PATTERN_OUT           : out   std_logic_vector(31 downto 0); -- error pattern\r
+       LVL2_COUNTER_OUT                        : out   std_logic_vector(15 downto 0); -- local IPU cycle counter\r
+       -- DHDR buffer input\r
+       DHDR_DATA_IN                            : in    std_logic_vector(31 downto 0);\r
+       DHDR_LENGTH_IN                          : in    std_logic_vector(15 downto 0);\r
+       DHDR_STORE_IN                           : in    std_logic;\r
+       DHDR_BUF_FULL_OUT                       : out   std_logic;\r
+       -- processed data input\r
+       FIFO_SPACE_REQ_IN           : in    std_logic_vector(11 downto 0);\r
+       FIFO_START_IN                           : in    std_logic;\r
+       FIFO_0_DATA_IN                          : in    std_logic_vector(39 downto 0);\r
+       FIFO_1_DATA_IN                          : in    std_logic_vector(39 downto 0);\r
+       FIFO_2_DATA_IN                          : in    std_logic_vector(39 downto 0);\r
+       FIFO_3_DATA_IN                          : in    std_logic_vector(39 downto 0);\r
+       FIFO_4_DATA_IN                          : in    std_logic_vector(39 downto 0);\r
+       FIFO_5_DATA_IN                          : in    std_logic_vector(39 downto 0);\r
+       FIFO_6_DATA_IN                          : in    std_logic_vector(39 downto 0);\r
+       FIFO_7_DATA_IN                          : in    std_logic_vector(39 downto 0);\r
+       FIFO_8_DATA_IN                          : in    std_logic_vector(39 downto 0);\r
+       FIFO_9_DATA_IN                          : in    std_logic_vector(39 downto 0);\r
+       FIFO_10_DATA_IN                         : in    std_logic_vector(39 downto 0);\r
+       FIFO_11_DATA_IN                         : in    std_logic_vector(39 downto 0);\r
+       FIFO_12_DATA_IN                         : in    std_logic_vector(39 downto 0);\r
+       FIFO_13_DATA_IN                         : in    std_logic_vector(39 downto 0);\r
+       FIFO_14_DATA_IN                         : in    std_logic_vector(39 downto 0);\r
+       FIFO_15_DATA_IN                         : in    std_logic_vector(39 downto 0);\r
+       FIFO_WE_IN                                      : in    std_logic_vector(15 downto 0);\r
+       FIFO_DONE_IN                            : in    std_logic; -- write level information into small FIFOs\r
+       -- Debug signals\r
+       DBG_BSM_OUT                                     : out   std_logic_vector(7 downto 0);\r
+       DBG_OUT                                         : out   std_logic_vector(63 downto 0)\r
+);\r
+end component ipu_fifo_stage;\r
+\r
+component ipu_dummy is\r
+port( \r
+       CLK_IN                                          : in    std_logic; -- 100MHz local clock\r
+       RESET_IN                                        : in    std_logic; -- synchronous reset\r
+       -- Slow control signals\r
+       MIN_COUNT_IN                            : in    std_logic_vector(15 downto 0); -- minimum counter value\r
+       MAX_COUNT_IN                            : in    std_logic_vector(15 downto 0); -- maximum counter value\r
+       CTRL_IN                                         : in    std_logic_vector(7 downto 0); -- control bits from slow control\r
+       -- IPU channel connections\r
+       IPU_NUMBER_IN                           : in    std_logic_vector(15 downto 0); -- trigger tag\r
+       IPU_INFORMATION_IN                      : in    std_logic_vector(7 downto 0); -- trigger information\r
+       IPU_START_READOUT_IN            : in    std_logic; -- gimme data!\r
+       IPU_DATA_OUT                            : out   std_logic_vector(31 downto 0); -- detector data, equipped with DHDR\r
+       IPU_DATAREADY_OUT                       : out   std_logic; -- data is valid\r
+       IPU_READOUT_FINISHED_OUT        : out   std_logic; -- no more data, end transfer, send TRM\r
+       IPU_READ_IN                                     : in    std_logic; -- read strobe, low every second cycle\r
+       IPU_LENGTH_OUT                          : out   std_logic_vector(15 downto 0); -- length of data packet (32bit words) (?)\r
+       IPU_ERROR_PATTERN_OUT           : out   std_logic_vector(31 downto 0); -- error pattern\r
+       -- DHDR buffer\r
+       LVL1_FIFO_RD_OUT                        : out   std_logic;\r
+       LVL1_FIFO_EMPTY_IN                      : in    std_logic;\r
+       LVL1_FIFO_NUMBER_IN                     : in    std_logic_vector(15 downto 0);\r
+       LVL1_FIFO_CODE_IN                       : in    std_logic_vector(7 downto 0);\r
+       LVL1_FIFO_INFORMATION_IN        : in    std_logic_vector(7 downto 0);\r
+       LVL1_FIFO_TYPE_IN                       : in    std_logic_vector(3 downto 0);\r
+       -- Debug signals\r
+       DBG_BSM_OUT                                     : out   std_logic_vector(7 downto 0);\r
+       DBG_OUT                                         : out   std_logic_vector(63 downto 0)\r
+);\r
+end component ipu_dummy;\r
+\r
+component reboot_handler is\r
+port( \r
+       RESET_IN                : in    std_logic;\r
+       CLK_IN                  : in    std_logic;\r
+       START_IN                : in    std_logic;\r
+       REBOOT_OUT              : out   std_logic;\r
+       DEBUG_OUT               : out   std_logic_vector(15 downto 0)\r
+);\r
+end component reboot_handler;\r
+\r
+component real_trg_handler is\r
+port( \r
+       CLK_IN                          : in    std_logic; -- 100MHz master clock\r
+       RESET_IN                        : in    std_logic;\r
+       TIME_TRG_IN                     : in    std_logic_vector(3 downto 0); -- timing trigger inputs\r
+       TRB_TRG_IN                      : in    std_logic_vector(3 downto 0); -- TRB trigger inputs\r
+       APV_TRGDONE_IN          : in    std_logic; -- APV trigger statemachine finished (one pulse)\r
+       TRG_3_TODO_IN           : in    std_logic_vector(3 downto 0); -- APV triggers on trigger 3\r
+       TRG_2_TODO_IN           : in    std_logic_vector(3 downto 0); -- APV triggers on trigger 2\r
+       TRG_1_TODO_IN           : in    std_logic_vector(3 downto 0); -- APV triggers on trigger 1\r
+       TRG_0_TODO_IN           : in    std_logic_vector(3 downto 0); -- APV triggers on trigger 0\r
+       TRG_SETUP_IN            : in    std_logic_vector(7 downto 0); -- setup of external triggers\r
+       TRG_FOUND_OUT           : out   std_logic; -- single pulse for endpoint\r
+       SECTOR_IN           : in    std_logic_vector(2 downto 0); -- sector number\r
+       TRB_TTAG_IN                     : in    std_logic_vector(15 downto 0); -- LVL1 16bit trigger tag\r
+       TRB_TRND_IN                     : in    std_logic_vector(7 downto 0); -- LVL1 8bit random number\r
+       TRB_TTYPE_IN            : in    std_logic_vector(3 downto 0); -- LVL1 trigger type\r
+       TRB_TINFO_IN        : in    std_logic_vector(23 downto 0); -- LVL1 24bit trigger information\r
+       TRB_TRGRCVD_IN          : in    std_logic; -- LVL1 trigger has been received on TRB\r
+       TRB_MISSING_OUT         : out   std_logic; -- LVL1 trigger without timing trigger\r
+       LVL1_COUNTER_OUT        : out   std_logic_vector(15 downto 0); -- LVL1 counter\r
+       LVL1_COUNTER_IN     : in    std_logic_vector(15 downto 0);\r
+       LVL1_LD_COUNTER_IN  : in    std_logic;\r
+       BUSY_RELEASE_IN         : in    std_logic; -- common signal from busy calculator\r
+       APV_TRGSEL_OUT          : out   std_logic_vector(3 downto 0); -- select one APV trigger state machine\r
+       APV_TRGSTART_OUT        : out   std_logic; -- start one APV trigger state machine\r
+       EDS_DATA_OUT            : out   std_logic_vector(39 downto 0); -- EDS data\r
+       EDS_WE_OUT                      : out   std_logic; -- EDS write enable (general interface)\r
+       EDS_START_OUT           : out   std_logic; -- separate increment signal for EDS buffer level\r
+       EDS_READY_OUT           : out   std_logic; -- APV trigger sequence done, TERMinate the TRB LVL1 trigger\r
+       DBG_FRMCTR_OUT          : out   std_logic_vector(3 downto 0); -- framecounter itself\r
+       BSM_OUT                         : out   std_logic_vector(7 downto 0);\r
+       DEBUG_OUT                       : out   std_logic_vector(63 downto 0)\r
+);\r
+end component real_trg_handler;\r
+\r
+component apv_trg_handler is\r
+port( \r
+       CLK_APV_IN                      : in    std_logic; -- 40MHz phase shifted clock\r
+       RESET_APV_IN            : in    std_logic; -- synced reset signal (40MHz APV)\r
+       CLK_IN                          : in    std_logic; -- 100MHz master clock\r
+       RESET_IN                        : in    std_logic; -- synced reset signal (100MHz)\r
+       APV_TRGSTART_IN         : in    std_logic; -- start signal for one sequence\r
+       APV_TRGSEL_IN           : in    std_logic; -- select signal for one sequence\r
+       APV_TRG_TODO_IN         : in    std_logic_vector(3 downto 0); -- number of APV triggers\r
+       APV_TRG_DELAY_IN        : in    std_logic_vector(3 downto 0); -- delay between APV triggers\r
+       APV_TRGDONE_OUT         : out   std_logic; -- APV trigger statemachine finished\r
+       APV_TRG_OUT                     : out   std_logic;\r
+       APV_TRGSENT_OUT         : out   std_logic;\r
+       BSM_OUT                         : out   std_logic_vector(3 downto 0);\r
+       DEBUG_OUT                       : out   std_logic_vector(15 downto 0)\r
+);\r
+end component apv_trg_handler;\r
+\r
+component apv_sync_handler is\r
+port( \r
+       CLK_APV_IN              : in    std_logic; -- 40MHz phase shifted clock\r
+       RESET_APV_IN    : in    std_logic; -- synced reset signal (40MHz APV)\r
+       CLK_IN                  : in    std_logic; -- 100MHz master clock\r
+       RESET_IN                : in    std_logic; -- synced reset signal (100MHz)\r
+       APV_TRGSTART_IN : in    std_logic; -- start signal for one sequence\r
+       APV_TRGSEL_IN   : in    std_logic; -- select signal for one sequence\r
+       APV_TRGDONE_OUT : out   std_logic; -- APV trigger statemachine finished\r
+       APV_TRG_OUT             : out   std_logic;\r
+       APV_SYNC_OUT    : out   std_logic; -- signal for statemachines\r
+       BSM_OUT                 : out   std_logic_vector(3 downto 0);\r
+       DEBUG_OUT               : out   std_logic_vector(15 downto 0)\r
+);\r
+end component apv_sync_handler;\r
+\r
+component eds_buf is\r
+port( \r
+       CLK_IN                          : in    std_logic; -- 100MHz master clock\r
+       RESET_IN                        : in    std_logic;\r
+       -- EDS input, all synced to CLK_IN\r
+       EDS_DATA_IN                     : in    std_logic_vector(39 downto 0); -- EDS data input\r
+       EDS_WE_IN                       : in    std_logic; -- EDS write enable\r
+       EDS_DONE_IN                     : in    std_logic; -- release EDS\r
+       EDS_DATA_OUT            : out   std_logic_vector(39 downto 0);\r
+       EDS_AVAILABLE_OUT       : out   std_logic;\r
+       -- trigger busy information\r
+       BUF_FULL_OUT            : out   std_logic;\r
+       BUF_LEVEL_OUT           : out   std_logic_vector(4 downto 0);\r
+       -- Debug signals\r
+       DEBUG_OUT                       : out   std_logic_vector(15 downto 0)\r
+);\r
+end component eds_buf;\r
+\r
+component adc_pll is\r
+port( \r
+       CLK             : in    std_logic;\r
+       RESET   : in    std_logic;\r
+       CLKOP   : out   std_logic;\r
+       LOCK    : out   std_logic\r
+);\r
+end component adc_pll;\r
+\r
+component adc_ch_in is\r
+port( \r
+       DEL             : in    std_logic_vector(3 downto 0);\r
+       ECLK    : in    std_logic;\r
+       SCLK    : in    std_logic;\r
+       RST             : in    std_logic;\r
+       DATA    : in    std_logic_vector(0 downto 0);\r
+       Q               : out   std_logic_vector(1 downto 0)\r
+);\r
+End component adc_ch_in;\r
+\r
+component adc_twochannels is\r
+port( \r
+       CLK_IN          : in    std_logic;\r
+       RESET_IN        : in    std_logic;\r
+       CLOCK_IN        : in    std_logic_vector(1 downto 0);  -- DDR bit clock\r
+       DATA_0_IN   : in        std_logic_vector(1 downto 0);  -- ADC channel one\r
+       DATA_1_IN   : in        std_logic_vector(1 downto 0);  -- ADC channel two\r
+       DATA_0_OUT      : out   std_logic_vector(11 downto 0); -- demultiplexed ADC channel one\r
+       DATA_1_OUT      : out   std_logic_vector(11 downto 0); -- demultiplexed ADC channel two\r
+       STORE_OUT       : out   std_logic;\r
+       SWAP_OUT        : out   std_logic;\r
+       CLOCK_OUT       : out   std_logic;\r
+       DEBUG_OUT       : out   std_logic_vector(15 downto 0)\r
+);\r
+end component adc_twochannels;\r
+\r
+component apv_locker is\r
+port( \r
+       CLK_APV_IN                      : in    std_logic;\r
+       RESET_IN                        : in    std_logic;\r
+       ADC_RAW_IN                      : in    std_logic_vector(11 downto 0);  -- ADC: raw data, synchronous to ADC_CLK_IN\r
+       ADC_VALID_IN            : in    std_logic;                                              -- ADC: ser2par data is valid\r
+       SYNC_IN                         : in    std_logic;                                              -- sync trigger input\r
+       APV_ON_IN                       : in    std_logic;                                              -- this APV channel is switched on\r
+       BIT_LOW_IN                      : in    std_logic_vector(11 downto 0);  -- slow control: threshold for digital '0'\r
+       BIT_HIGH_IN                     : in    std_logic_vector(11 downto 0);  -- slow control: threshold for digital '1'\r
+       FL_LOW_IN                       : in    std_logic_vector(11 downto 0);  -- lower threshold for ADC flatline\r
+       FL_HIGH_IN                      : in    std_logic_vector(11 downto 0);  -- upper threshold for ADC flatline\r
+       STATUS_IGNORE_OUT       : out   std_logic;                                              -- APV is to be ignored (effectively => switched off)\r
+       STATUS_UNKNOWN_OUT      : out   std_logic;                                              -- APV is not initialized yet\r
+       STATUS_BADADC_OUT       : out   std_logic;                                              -- ADC ser2par data is invalid\r
+       STATUS_LOCKED_OUT       : out   std_logic;                                              -- APV locked successfully\r
+       STATUS_LOST_OUT         : out   std_logic;                                              -- APV tickmark missing or wrong\r
+       STATUS_NOSYNC_OUT       : out   std_logic;                                              -- APV did not lock successfully\r
+       STATUS_MISSING_OUT      : out   std_logic;                                              -- APV is missing, ADC flatline detected\r
+       STATUS_TICKMARK_OUT     : out   std_logic;\r
+       FRAME_ROW_OUT           : out   std_logic_vector(7 downto 0);   -- decoded row from APV header\r
+       FRAME_ERROR_OUT         : out   std_logic;                                              -- decoded error bit from APV header\r
+       FRAME_FLAT_OUT          : out   std_logic;                                              -- APV sends a flat line (analog dead?)\r
+       FRAME_OVF_OUT           : out   std_logic;                                              -- at least one channel in frame was overflow\r
+       FRAME_UDF_OUT           : out   std_logic;                                              -- at least one channel in frame was underflow\r
+       FRAME_CTR_OUT           : out   std_logic_vector(3 downto 0);   -- frame counter for incoming data frames\r
+       APV_CHANNEL_OUT         : out   std_logic_vector(6 downto 0);   -- physical channel ID\r
+       APV_OVERFLOW_OUT        : out   std_logic;                                              -- channel is truncated high\r
+       APV_UNDERFLOW_OUT       : out   std_logic;                                              -- channel is truncated low\r
+       APV_RAW_OUT                     : out   std_logic_vector(11 downto 0);  -- APV raw data\r
+       APV_ANALOG_OUT          : out   std_logic;                                              -- APV analog data is valid\r
+       APV_START_OUT           : out   std_logic;                                              -- valid data frame found, reserve one buffer\r
+       APV_LAST_OUT            : out   std_logic;                                              -- last APV channel of dataframe\r
+       DEBUG_OUT                       : out   std_logic_vector(15 downto 0)\r
+);\r
+end component apv_locker;\r
+\r
+component apv_raw_buffer is\r
+port( \r
+       CLK_APV_IN                      : in    std_logic; -- write clock from APV handling stage\r
+       RESET_IN                        : in    std_logic;\r
+       FRM_REQD_IN                     : in    std_logic; -- one data frame has been requested from APV\r
+       MAX_TRG_NUM_IN          : in    std_logic_vector(3 downto 0); -- maximum number of triggers per event\r
+       ADC_ANALOG_IN           : in    std_logic; -- write enable for ADC data\r
+       ADC_START_IN            : in    std_logic; -- data frame detected, block the buffer page\r
+       ADC_LAST_IN                     : in    std_logic; -- last channel signal\r
+       ADC_CHANNEL_IN          : in    std_logic_vector(6 downto 0); -- physical channel ID\r
+       ADC_RAW_IN                      : in    std_logic_vector(17 downto 0); -- raw ADC data, UDF, OVF, ERROR\r
+       ADC_STATUS_IN           : in    std_logic_vector(7 downto 0); -- status information for APV\r
+       ADC_FRAME_IN            : in    std_logic_vector(11 downto 0); -- status information for frame\r
+       BUF_CLK_IN                      : in    std_logic; -- read clock\r
+       BUF_RESET_IN            : in    std_logic; -- 100MHz reset\r
+       BUF_START_OUT           : out   std_logic; -- one block starts writing\r
+       BUF_READY_OUT           : out   std_logic; -- one block has been written\r
+       BUF_ADDR_IN                     : in    std_logic_vector(6 downto 0); -- address inside current buffer\r
+       BUF_DONE_IN                     : in    std_logic; -- buffer has been read (discard buffer)\r
+       BUF_DATA_OUT            : out   std_logic_vector(17 downto 0); -- data from buffer\r
+       BUF_STATUS_OUT          : out   std_logic_vector(7 downto 0); -- generic APV status output\r
+       BUF_FRAME_OUT           : out   std_logic_vector(11 downto 0); -- current frame status output\r
+       BUF_GOOD_OUT            : out   std_logic; -- APV is active and synced -> GOOD situation\r
+       BUF_BROKEN_OUT          : out   std_logic; -- APV is active, but not synced -> BAD situation\r
+       BUF_IGNORE_OUT          : out   std_logic; -- APV is switched off -> switched off\r
+       BUF_LEVEL_OUT           : out   std_logic_vector(4 downto 0); -- number of stored frames inside buffer\r
+       BUF_TICKMARK_OUT        : out   std_logic; -- tickmark signal for timeouts in the EDS handler\r
+       BUF_FULL_OUT            : out   std_logic; -- inhibit any next trigger if set!\r
+       DEBUG_OUT                       : out   std_logic_vector(15 downto 0)\r
+);\r
+end component apv_raw_buffer;\r
+\r
+-- moved to trb_net_components.vhd\r
+--\r
+--component slv_register is\r
+--generic(\r
+--     RESET_VALUE     : std_logic_vector(31 downto 0) := x"0000_0000" \r
+--);\r
+--port( \r
+--     CLK_IN                  : in    std_logic;\r
+--     RESET_IN                : in    std_logic;\r
+--     BUSY_IN                 : in    std_logic;\r
+--     -- Slave bus\r
+--     SLV_READ_IN             : in    std_logic;\r
+--     SLV_WRITE_IN    : in    std_logic;\r
+--     SLV_BUSY_OUT    : out   std_logic;\r
+--     SLV_ACK_OUT             : out   std_logic;\r
+--     SLV_DATA_IN             : in    std_logic_vector(31 downto 0);\r
+--     SLV_DATA_OUT    : out   std_logic_vector(31 downto 0);\r
+--     -- I/O to the backend\r
+--     REG_DATA_IN             : in    std_logic_vector(31 downto 0);\r
+--     REG_DATA_OUT    : out   std_logic_vector(31 downto 0);\r
+--     -- Status lines\r
+--     STAT                    : out   std_logic_vector(31 downto 0) -- DEBUG\r
+--);\r
+--end component slv_register;\r
+\r
+component slv_half_register is\r
+generic( \r
+       RESET_VALUE     : std_logic_vector(15 downto 0) := x"0000" \r
+);\r
+port( \r
+       CLK_IN                  : in    std_logic;\r
+       RESET_IN                : in    std_logic;\r
+       -- Slave bus\r
+       SLV_READ_IN             : in    std_logic;\r
+       SLV_WRITE_IN    : in    std_logic;\r
+       SLV_ACK_OUT             : out   std_logic;\r
+       SLV_DATA_IN             : in    std_logic_vector(31 downto 0);\r
+       SLV_DATA_OUT    : out   std_logic_vector(31 downto 0);\r
+       -- I/O to the backend\r
+       STATUS_REG_IN   : in    std_logic_vector(15 downto 0);\r
+       CTRL_REG_OUT    : out   std_logic_vector(15 downto 0);\r
+       -- Status lines\r
+       STAT                    : out   std_logic_vector(31 downto 0) -- DEBUG\r
+);\r
+end component slv_half_register;\r
+\r
+component i2c_master is\r
+port( \r
+       CLK_IN                  : in    std_logic;\r
+       RESET_IN                : in    std_logic;\r
+       -- Slave bus\r
+       SLV_READ_IN             : in    std_logic;\r
+       SLV_WRITE_IN    : in    std_logic;\r
+       SLV_BUSY_OUT    : out   std_logic;\r
+       SLV_ACK_OUT             : out   std_logic;\r
+       SLV_DATA_IN             : in    std_logic_vector(31 downto 0);\r
+       SLV_DATA_OUT    : out   std_logic_vector(31 downto 0);\r
+       -- I2C connections\r
+       SDA_IN                  : in    std_logic;\r
+       SDA_OUT                 : out   std_logic;\r
+       SCL_IN                  : in    std_logic;\r
+       SCL_OUT                 : out   std_logic;\r
+       -- Status lines\r
+       STAT                    : out   std_logic_vector(31 downto 0) -- DEBUG\r
+);\r
+end component i2c_master;\r
+\r
+component slv_onewire_memory is\r
+port( \r
+       CLK_IN                          : in    std_logic;\r
+       RESET_IN                        : in    std_logic;\r
+       -- Slave bus\r
+       SLV_ADDR_IN                     : in    std_logic_vector(5 downto 0);\r
+       SLV_READ_IN                     : in    std_logic;\r
+       SLV_WRITE_IN            : in    std_logic;\r
+       SLV_ACK_OUT                     : out   std_logic;\r
+       SLV_BUSY_OUT            : out   std_logic;\r
+       SLV_DATA_OUT            : out   std_logic_vector(31 downto 0);\r
+       -- backplane identifier\r
+       BACKPLANE_IN            : in    std_logic_vector(2 downto 0);\r
+       -- 1Wire lines\r
+       ONEWIRE_START_IN        : in    std_logic;\r
+       ONEWIRE_INOUT           : inout std_logic_vector(15 downto 0);\r
+       BP_ONEWIRE_INOUT        : inout std_logic;\r
+       -- Status lines\r
+       STAT                            : out   std_logic_vector(63 downto 0) -- DEBUG\r
+);\r
+end component slv_onewire_memory;\r
+\r
+component spi_real_slim is\r
+port( \r
+       SYSCLK                  : in    std_logic; -- 100MHz sysclock\r
+       RESET                   : in    std_logic; -- synchronous reset\r
+       -- Command interface\r
+       START_IN                : in    std_logic; -- one start pulse\r
+       BUSY_OUT                : out   std_logic; -- SPI transactions are ongoing\r
+       CMD_IN                  : in    std_logic_vector(7 downto 0); -- SPI command byte\r
+       -- SPI interface\r
+       SPI_SCK_OUT             : out   std_logic;\r
+       SPI_CS_OUT              : out   std_logic;\r
+       SPI_SDO_OUT             : out   std_logic;\r
+       -- DEBUG\r
+       CLK_EN_OUT              : out   std_logic;\r
+       BSM_OUT                 : out   std_logic_vector(7 downto 0);\r
+       DEBUG_OUT               : out   std_logic_vector(31 downto 0)\r
+);\r
+end component spi_real_slim;\r
+\r
+component spi_adc_master is\r
+generic( \r
+       RESET_VALUE_CTRL        : std_logic_vector(7 downto 0) := x"60" \r
+);\r
+port( \r
+       CLK_IN                  : in    std_logic;\r
+       RESET_IN                : in    std_logic;\r
+       -- Slave bus\r
+       SLV_READ_IN             : in    std_logic;\r
+       SLV_WRITE_IN    : in    std_logic;\r
+       SLV_BUSY_OUT    : out   std_logic;\r
+       SLV_ACK_OUT             : out   std_logic;\r
+       SLV_DATA_IN             : in    std_logic_vector(31 downto 0);\r
+       SLV_DATA_OUT    : out   std_logic_vector(31 downto 0);\r
+       -- SPI connections\r
+       SPI_CS_OUT              : out   std_logic;\r
+       SPI_SDO_OUT             : out   std_logic;\r
+       SPI_SCK_OUT             : out   std_logic;\r
+       -- ADC connections\r
+       ADC_LOCKED_IN   : in    std_logic;\r
+       ADC_PD_OUT              : out   std_logic;\r
+       ADC_RST_OUT             : out   std_logic;\r
+       ADC_DEL_OUT             : out   std_logic_vector(3 downto 0);\r
+       -- APV connections\r
+       APV_RST_OUT             : out   std_logic;\r
+       -- Status lines\r
+       STAT                    : out   std_logic_vector(31 downto 0) -- DEBUG\r
+);\r
+end component spi_adc_master;\r
+\r
+component i2c_slim is\r
+port( \r
+       CLK_IN                  : in    std_logic;\r
+       RESET_IN                : in    std_logic;\r
+       -- I2C command / setup\r
+       I2C_GO_IN               : in    std_logic; -- startbit to trigger I2C actions\r
+       ACTION_IN               : in    std_logic; -- '0' -> write, '1' -> read\r
+       I2C_SPEED_IN    : in    std_logic_vector( 5 downto 0 ); -- speed adjustment (to be defined)\r
+       I2C_ADR_IN              : in    std_logic_vector( 7 downto 0 ); -- I2C address byte (R/W bit is ignored)\r
+       I2C_CMD_IN              : in    std_logic_vector( 7 downto 0 ); -- I2C command byte (sent after address byte)\r
+       I2C_DW_IN               : in    std_logic_vector( 7 downto 0 ); -- data word for write command\r
+       I2C_DR_OUT              : out   std_logic_vector( 7 downto 0 ); -- data word from read command\r
+       STATUS_OUT              : out   std_logic_vector( 7 downto 0 ); -- status and error bits\r
+       I2C_BUSY_OUT    : out   std_logic;\r
+       -- I2C connections\r
+       SDA_IN                  : in    std_logic;\r
+       SDA_OUT                 : out   std_logic;\r
+       SCL_IN                  : in    std_logic;\r
+       SCL_OUT                 : out   std_logic;\r
+       -- Debug\r
+       STAT                    : out   std_logic_vector(31 downto 0) -- DEBUG\r
+);\r
+end component i2c_slim;\r
+\r
+component i2c_gstart is\r
+port( \r
+       CLK_IN                  : in    std_logic;\r
+       RESET_IN                : in    std_logic;\r
+       START_IN                : in    std_logic;\r
+    DOSTART_IN         : in    std_logic;\r
+       I2C_SPEED_IN    : in    std_logic_vector(7 downto 0);\r
+       SDONE_OUT               : out   std_logic;\r
+       SOK_OUT                 : out   std_logic;\r
+    SDA_IN                     : in    std_logic;\r
+       SCL_IN                  : in    std_logic;\r
+       R_SCL_OUT               : out   std_logic;\r
+       S_SCL_OUT               : out   std_logic;\r
+    R_SDA_OUT          : out   std_logic;\r
+    S_SDA_OUT          : out   std_logic;\r
+       BSM_OUT                 : out   std_logic_vector(3 downto 0)\r
+);\r
+end component i2c_gstart;\r
+\r
+component i2c_sendb is\r
+port( \r
+       CLK_IN                  : in    std_logic;\r
+       RESET_IN                : in    std_logic;\r
+       DOBYTE_IN               : in    std_logic;\r
+       I2C_SPEED_IN    : in    std_logic_vector(7 downto 0);\r
+       I2C_BYTE_IN             : in    std_logic_vector(8 downto 0);\r
+       I2C_BACK_OUT    : out   std_logic_vector(8 downto 0);\r
+       SDA_IN                  : in    std_logic;\r
+       R_SDA_OUT               : out   std_logic;\r
+       S_SDA_OUT               : out   std_logic;\r
+--     SCL_IN                  : in    std_logic;\r
+       R_SCL_OUT               : out   std_logic;\r
+       S_SCL_OUT               : out   std_logic;\r
+       BDONE_OUT               : out   std_logic;\r
+       BOK_OUT                 : out   std_logic;\r
+       BSM_OUT                 : out   std_logic_vector(3 downto 0)\r
+);\r
+end component i2c_sendb;\r
+\r
+component onewire_master is\r
+generic( \r
+       CLK_PERIOD              : integer := 10 -- clock perion in nanoseconds\r
+);\r
+port( \r
+       CLK                                     : in    std_logic;\r
+       RESET                           : in    std_logic;\r
+       READOUT_ENABLE_IN       : in    std_logic;\r
+       -- connection to 1-wire interface (16 APV FEs)\r
+       ONEWIRE                         : inout std_logic_vector(15 downto 0);\r
+       BP_ONEWIRE                      : inout std_logic;\r
+       -- connection to external DPRAM for slow control readout\r
+       BP_DATA_OUT                     : out   std_logic_vector(15 downto 0);\r
+       DATA_OUT                        : out   std_logic_vector(15 downto 0);\r
+       ADDR_OUT                        : out   std_logic_vector(6 downto 0);\r
+       WRITE_OUT                       : out   std_logic;\r
+       BUSY_OUT                        : out   std_logic;\r
+       -- debug\r
+       BSM_OUT                         : out   std_logic_vector(7 downto 0);\r
+       STAT                            : out   std_logic_vector(15 downto 0)\r
+);\r
+end component onewire_master;\r
+\r
+component slv_onewire_dpram\r
+port( \r
+       WRADDRESS       : in    std_logic_vector(6 downto 0);\r
+       RDADDRESS       : in    std_logic_vector(5 downto 0);\r
+       DATA            : in    std_logic_vector(15 downto 0);\r
+       WE                      : in    std_logic;\r
+       RDCLOCK         : in    std_logic;\r
+       RDCLOCKEN       : in    std_logic;\r
+       RESET           : in    std_logic;\r
+       WRCLOCK         : in    std_logic;\r
+       WRCLOCKEN       : in    std_logic;\r
+       Q                       : out   std_logic_vector(31 downto 0)\r
+);\r
+end component slv_onewire_dpram;\r
+\r
+component fifo_2kx27 is\r
+port( \r
+       DATA            : in    std_logic_vector(26 downto 0);\r
+       CLOCK           : in    std_logic;\r
+       WREN            : in    std_logic;\r
+       RDEN            : in    std_logic;\r
+       RESET           : in    std_logic;\r
+       Q                       : out   std_logic_vector(26 downto 0);\r
+       WCNT            : out   std_logic_vector(11 downto 0);\r
+       EMPTY           : out   std_logic;\r
+       FULL            : out   std_logic\r
+);\r
+end component fifo_2kx27;\r
+\r
+component fifo_1kx18 is\r
+port(\r
+       DATA    : in    std_logic_vector(17 downto 0); \r
+       CLOCK   : in    std_logic; \r
+       WREN    : in    std_logic; \r
+       RDEN    : in    std_logic; \r
+       RESET   : in    std_logic; \r
+       Q       : out   std_logic_vector(17 downto 0); \r
+       WCNT    : out   std_logic_vector(10 downto 0); \r
+       EMPTY   : out   std_logic; \r
+       FULL    : out   std_logic\r
+);\r
+end component fifo_1kx18;\r
+\r
+component decoder_8bit is\r
+port( \r
+       ADDRESS : in    std_logic_vector(7 downto 0);\r
+       Q               : out   std_logic_vector(3 downto 0)\r
+);\r
+end component decoder_8bit;\r
+\r
+component adder_5bit is\r
+port( \r
+       DATAA           : in    std_logic_vector(4 downto 0);\r
+       DATAB           : in    std_logic_vector(4 downto 0);\r
+       CLOCK           : in    std_logic;\r
+       RESET           : in    std_logic;\r
+       CLOCKEN         : in    std_logic;\r
+       RESULT          : out   std_logic_vector(4 downto 0)\r
+);\r
+end component adder_5bit;\r
+\r
+component adder_16bit is\r
+port( \r
+       DATAA           : in    std_logic_vector(15 downto 0);\r
+       DATAB           : in    std_logic_vector(15 downto 0);\r
+       CLOCK           : in    std_logic;\r
+       RESET           : in    std_logic;\r
+       CLOCKEN         : in    std_logic;\r
+       RESULT          : out   std_logic_vector(15 downto 0)\r
+);\r
+end component adder_16bit;\r
+\r
+component suber_12bit is\r
+port( \r
+       DATAA           : in    std_logic_vector(11 downto 0);\r
+       DATAB           : in    std_logic_vector(11 downto 0);\r
+       CLOCK           : in    std_logic;\r
+       RESET           : in    std_logic;\r
+       CLOCKEN         : in    std_logic;\r
+       RESULT          : out   std_logic_vector(11 downto 0)\r
+);\r
+end component suber_12bit;\r
+\r
+component comp_12bit is\r
+port(\r
+       DATAA   : in    std_logic_vector(11 downto 0); \r
+       DATAB   : in    std_logic_vector(11 downto 0); \r
+       CLOCK   : in    std_logic; \r
+       CLOCKEN : in    std_logic; \r
+       ACLR    : in    std_logic; \r
+       AGTB    : out   std_logic\r
+);\r
+end component comp_12bit;\r
+\r
+component buf_toc is\r
+port( \r
+       CLK_IN                  : in    std_logic;\r
+       RESET_IN                : in    std_logic;\r
+       BUF_TICK_IN             : in    std_logic; -- tickmark from raw buffer\r
+       BUF_START_IN    : in    std_logic; -- start of frame from raw buffer\r
+       WAITFRAME_IN    : in    std_logic; -- statemachine is in "wait for frame" mode\r
+       FRAMES_REQD_IN  : in    std_logic_vector(3 downto 0); -- number of frames requested from EDS\r
+       BUF_LVL_IN              : in    std_logic_vector(7 downto 0);\r
+       GOODDATA_OUT    : out   std_logic;\r
+       BADDATA_OUT             : out   std_logic;\r
+       NODATA_OUT              : out   std_logic;\r
+       READY_OUT               : out   std_logic;\r
+       BSM_OUT                 : out   std_logic_vector(7 downto 0);\r
+       DBG_OUT                 : out   std_logic_vector(15 downto 0)\r
+);\r
+end component buf_toc;\r
+\r
+component ref_row_sel is\r
+port( \r
+       CLK_IN                          : in    std_logic;\r
+       READY_IN                        : in    std_logic_vector(15 downto 0);\r
+       GOODDATA_IN                     : in    std_logic_vector(15 downto 0);\r
+       FRAME_0_IN                      : in    std_logic_vector(11 downto 0);\r
+       FRAME_1_IN                      : in    std_logic_vector(11 downto 0);\r
+       FRAME_2_IN                      : in    std_logic_vector(11 downto 0);\r
+       FRAME_3_IN                      : in    std_logic_vector(11 downto 0);\r
+       FRAME_4_IN                      : in    std_logic_vector(11 downto 0);\r
+       FRAME_5_IN                      : in    std_logic_vector(11 downto 0);\r
+       FRAME_6_IN                      : in    std_logic_vector(11 downto 0);\r
+       FRAME_7_IN                      : in    std_logic_vector(11 downto 0);\r
+       FRAME_8_IN                      : in    std_logic_vector(11 downto 0);\r
+       FRAME_9_IN                      : in    std_logic_vector(11 downto 0);\r
+       FRAME_10_IN                     : in    std_logic_vector(11 downto 0);\r
+       FRAME_11_IN                     : in    std_logic_vector(11 downto 0);\r
+       FRAME_12_IN                     : in    std_logic_vector(11 downto 0);\r
+       FRAME_13_IN                     : in    std_logic_vector(11 downto 0);\r
+       FRAME_14_IN                     : in    std_logic_vector(11 downto 0);\r
+       FRAME_15_IN                     : in    std_logic_vector(11 downto 0);\r
+       VALID_BUFS_OUT          : out   std_logic;\r
+       READY_OUT                       : out   std_logic;\r
+       ROW_ERROR_OUT           : out   std_logic; -- at least one row number is wrong\r
+       APV_ERROR_OUT           : out   std_logic; -- at least one APV sent ERROR bit\r
+       APV_ERROR_BITS_OUT      : out   std_logic_vector(15 downto 0);\r
+       REF_ROW_OUT                     : out   std_logic_vector(7 downto 0); -- selected reference row\r
+       DBG_OUT                         : out   std_logic_vector(15 downto 0)\r
+);\r
+end component ref_row_sel;\r
+\r
+component frmctr_check is\r
+port( \r
+       CLK_IN                  : in    std_logic;\r
+       GOODDATA_IN             : in    std_logic_vector(15 downto 0);\r
+       FRAMECOUNTER_IN : in    std_logic_vector(3 downto 0);\r
+       FRM_NR_0_IN             : in    std_logic_vector(3 downto 0);\r
+       FRM_NR_1_IN             : in    std_logic_vector(3 downto 0);\r
+       FRM_NR_2_IN             : in    std_logic_vector(3 downto 0);\r
+       FRM_NR_3_IN             : in    std_logic_vector(3 downto 0);\r
+       FRM_NR_4_IN             : in    std_logic_vector(3 downto 0);\r
+       FRM_NR_5_IN             : in    std_logic_vector(3 downto 0);\r
+       FRM_NR_6_IN             : in    std_logic_vector(3 downto 0);\r
+       FRM_NR_7_IN             : in    std_logic_vector(3 downto 0);\r
+       FRM_NR_8_IN             : in    std_logic_vector(3 downto 0);\r
+       FRM_NR_9_IN             : in    std_logic_vector(3 downto 0);\r
+       FRM_NR_10_IN    : in    std_logic_vector(3 downto 0);\r
+       FRM_NR_11_IN    : in    std_logic_vector(3 downto 0);\r
+       FRM_NR_12_IN    : in    std_logic_vector(3 downto 0);\r
+       FRM_NR_13_IN    : in    std_logic_vector(3 downto 0);\r
+       FRM_NR_14_IN    : in    std_logic_vector(3 downto 0);\r
+       FRM_NR_15_IN    : in    std_logic_vector(3 downto 0);\r
+       FRC_ERROR_OUT   : out   std_logic; -- at least one framecounter is wrong\r
+       DBG_OUT                 : out   std_logic_vector(15 downto 0)\r
+);\r
+end component frmctr_check;\r
+\r
+component apv_pc_nc_alu is\r
+port( \r
+       CLK_IN                  : in    std_logic; -- 100MHz master clock\r
+       RESET_IN                : in    std_logic;\r
+       START_IN                : in    std_logic;\r
+       MAX_FRAMES_IN   : in    std_logic_vector(3 downto 0); -- number of frames requested\r
+       CURR_FRAME_IN   : in    std_logic_vector(3 downto 0); -- current frame number\r
+       LOC_FRM_CTR_IN  : in    std_logic_vector(3 downto 0); -- DEBUG\r
+       EDS_FRM_CTR_IN  : in    std_logic_vector(3 downto 0); -- DEBUG\r
+       BUF_GOOD_IN             : in    std_logic;\r
+       BUF_BAD_IN              : in    std_logic;\r
+       BUF_IGNORE_IN   : in    std_logic;\r
+       ERROR_IN                : in    std_logic_vector(3 downto 0); -- buffer status, errors from checkers\r
+       DO_HEADER_IN    : in    std_logic;\r
+       DO_ERROR_IN             : in    std_logic;\r
+       SUPPRESS_IN     : in    std_logic;\r
+       EVT_TYPE_IN             : in    std_logic_vector(2 downto 0);\r
+       RAW_ADDR_IN             : in    std_logic_vector(6 downto 0);\r
+       RAW_DATA_IN             : in    std_logic_vector(37 downto 0);\r
+       PED_DATA_IN             : in    std_logic_vector(17 downto 0);\r
+       THR_DATA_IN             : in    std_logic_vector(17 downto 0);\r
+       FRAME_IN                : in    std_logic;\r
+       FIFO_DATA_OUT   : out   std_logic_vector(26 downto 0); -- [21] -> [31], [20:0] -> [20:0]\r
+       WE_OUT                  : out   std_logic;\r
+       COUNT_OUT               : out   std_logic_vector(9 downto 0);\r
+       ANYDATA_OUT             : out   std_logic; -- this FIFO needs attention during readout\r
+       DBG_OUT                 : out   std_logic_vector(15 downto 0)\r
+);\r
+end component apv_pc_nc_alu;\r
+\r
+component comp14bit is\r
+port( \r
+       DATAA   : in    std_logic_vector(13 downto 0);\r
+       DATAB   : in    std_logic_vector(13 downto 0);\r
+       CLOCK   : in    std_logic;\r
+       CLOCKEN : in    std_logic;\r
+       ACLR    : in    std_logic;\r
+       AGEB    : out   std_logic\r
+); \r
+end component comp14bit;\r
+\r
+component input_bram is\r
+port( \r
+       WRADDRESS       : in    std_logic_vector(10 downto 0);\r
+       RDADDRESS       : in    std_logic_vector(10 downto 0);\r
+       DATA            : in    std_logic_vector(17 downto 0);\r
+       WE                      : in    std_logic;\r
+       RDCLOCK         : in    std_logic;\r
+       RDCLOCKEN       : in    std_logic;\r
+       RESET           : in    std_logic;\r
+       WRCLOCK         : in    std_logic;\r
+       WRCLOCKEN       : in    std_logic;\r
+       Q                       : out   std_logic_vector(17 downto 0)\r
+);\r
+end component input_bram;\r
+\r
+component frame_status_mem is\r
+port( \r
+       WRADDRESS       : in    std_logic_vector(3 downto 0);\r
+       DATA            : in    std_logic_vector(11 downto 0);\r
+       WRCLOCK         : in    std_logic;\r
+       WE                      : in    std_logic;\r
+       WRCLOCKEN       : in    std_logic;\r
+       RDADDRESS       : in    std_logic_vector(3 downto 0);\r
+       RDCLOCK         : in    std_logic;\r
+       RDCLOCKEN       : in    std_logic;\r
+       RESET           : in    std_logic;\r
+       Q                       : out   std_logic_vector(11 downto 0)\r
+);\r
+end component frame_status_mem;\r
+\r
+component adder_6bit is\r
+port( \r
+       DATAA   : in   std_logic_vector(5 downto 0);\r
+       DATAB   : in   std_logic_vector(5 downto 0);\r
+       CLOCK   : in   std_logic;\r
+       RESET   : in   std_logic;\r
+       CLOCKEN : in   std_logic;\r
+       RESULT  : out  std_logic_vector(5 downto 0)\r
+);\r
+end component adder_6bit;\r
+\r
+component apv_lock_sm is\r
+port( \r
+       CLK_APV_IN              : in    std_logic;\r
+       RESET_IN                : in    std_logic;\r
+       SYNC_IN                 : in    std_logic; -- start APV synchronisation\r
+       ADC_VALID_IN    : in    std_logic; -- ADC delivers valid data\r
+       TIMED_IN                : in    std_logic; -- synchronisation timeout\r
+       MATCH_IN                : in    std_logic; -- artifical tickmark from synchronized counter\r
+       LOCKED_IN               : in    std_logic; -- enough good tickmarks\r
+       TICK_IN                 : in    std_logic; -- tickmark from digital parser\r
+       HEADER_IN               : in    std_logic; -- header from digital parser\r
+       FLATLINE_IN             : in    std_logic; -- flatline from digital parser\r
+       RST_PC_OUT              : out   std_logic; -- reset period counter\r
+       RST_TC_OUT              : out   std_logic; -- reset timeout counter\r
+       INC_TC_OUT              : out   std_logic;\r
+       RST_LC_OUT              : out   std_logic; -- reset lock counter\r
+       INC_LC_OUT              : out   std_logic;\r
+       UNKNOWN_OUT             : out   std_logic;\r
+       BADADC_OUT              : out   std_logic; -- ADC data invalid\r
+       LOCKED_OUT              : out   std_logic;\r
+       LOST_OUT                : out   std_logic;\r
+       NOSYNC_OUT              : out   std_logic;\r
+       NOAPV_OUT               : out   std_logic;\r
+       BSM_OUT                 : out   std_logic_vector(7 downto 0);\r
+       DEBUG_OUT               : out   std_logic_vector(15 downto 0)\r
+);\r
+end component apv_lock_sm;\r
+\r
+component apv_digital is\r
+port( \r
+       CLK_APV_IN              : in    std_logic;\r
+       RESET_IN                : in    std_logic;\r
+       ADC_RAW_IN              : in    std_logic_vector(11 downto 0);\r
+       BIT_LOW_IN              : in    std_logic_vector(11 downto 0);\r
+       BIT_HIGH_IN             : in    std_logic_vector(11 downto 0);\r
+       FL_LOW_IN               : in    std_logic_vector(11 downto 0);\r
+       FL_HIGH_IN              : in    std_logic_vector(11 downto 0);\r
+       BIT_DATA_OUT    : out   std_logic_vector(11 downto 0);\r
+       BIT_VALID_OUT   : out   std_logic_vector(11 downto 0);\r
+       BIT_HIGH_OUT    : out   std_logic;\r
+       BIT_LOW_OUT             : out   std_logic;\r
+       TICKMARK_OUT    : out   std_logic;\r
+       HEADER_OUT              : out   std_logic;\r
+       FLAT_LINE_OUT   : out   std_logic\r
+);\r
+end component apv_digital;\r
+\r
+component eds_buffer_dpram is\r
+port( \r
+       WRADDRESS               : in    std_logic_vector(3 downto 0);\r
+       DATA                    : in    std_logic_vector(39 downto 0);\r
+       WRCLOCK                 : in    std_logic;\r
+       WE                              : in    std_logic;\r
+       WRCLOCKEN               : in    std_logic;\r
+       RDADDRESS               : in    std_logic_vector(3 downto 0);\r
+       RDCLOCK                 : in    std_logic;\r
+       RDCLOCKEN               : in    std_logic;\r
+       RESET                   : in    std_logic;\r
+       Q                               : out   std_logic_vector(39 downto 0)\r
+);\r
+end component eds_buffer_dpram;\r
 \r
 end package;\r
 \r
 -- Down in the Dumps...\r
 \r
+--component fifo_16x11 is\r
+--port( \r
+--     DATA            : in    std_logic_vector(10 downto 0);\r
+--     CLOCK           : in    std_logic;\r
+--     WREN            : in    std_logic;\r
+--     RDEN            : in    std_logic;\r
+--     RESET           : in    std_logic;\r
+--     Q                       : out   std_logic_vector(10 downto 0);\r
+--     WCNT            : out   std_logic_vector(4 downto 0);\r
+--     EMPTY           : out   std_logic;\r
+--     FULL            : out   std_logic\r
+--);\r
+--end component fifo_16x11;\r
+\r
+--component dhdr_buf is\r
+--port( \r
+--     CLK_IN                                  : in    std_logic; -- 100MHz master clock\r
+--     RESET_IN                                : in    std_logic;\r
+--     -- DHDR information block\r
+--     DHDR_DATA_IN                    : in    std_logic_vector(47 downto 0); -- EDS data input\r
+--     DHDR_WE_IN                              : in    std_logic; -- EDS write enable\r
+--     DHDR_DONE_IN                    : in    std_logic; -- release EDS\r
+--     DHDR_DATA_OUT                   : out   std_logic_vector(47 downto 0);\r
+--     DHDR_AVAILABLE_OUT              : out   std_logic;\r
+--     -- trigger busy information\r
+--     BUF_FULL_OUT                    : out   std_logic;\r
+--     BUF_LEVEL_OUT                   : out   std_logic_vector(4 downto 0);\r
+--     -- Debug signals\r
+--     DEBUG_OUT                               : out   std_logic_vector(15 downto 0)\r
+--);\r
+--end component dhdr_buf;\r
+\r
+--component dhdr_buffer_dpram is\r
+--port( \r
+--     WRADDRESS               : in    std_logic_vector(3 downto 0);\r
+--     DATA                    : in    std_logic_vector(47 downto 0);\r
+--     WRCLOCK                 : in    std_logic;\r
+--     WE                              : in    std_logic;\r
+--     WRCLOCKEN               : in    std_logic;\r
+--     RDADDRESS               : in    std_logic_vector(3 downto 0);\r
+--     RDCLOCK                 : in    std_logic;\r
+--     RDCLOCKEN               : in    std_logic;\r
+--     RESET                   : in    std_logic;\r
+--     Q                               : out   std_logic_vector(47 downto 0)\r
+--);\r
+--end component;\r
index a7dedc70a43ff57d28c01e50edcdf2275eda8cca..5b33a8b51d874d9efff9209f2c22dc96418115f0 100755 (executable)
@@ -7,52 +7,53 @@ library work;
 use work.adcmv3_components.all;\r
 \r
 entity apv_digital is\r
-       port( CLK_APV_IN        : in    std_logic;\r
-                 RESET_IN              : in    std_logic;\r
-                 ADC_RAW_IN    : in    std_logic_vector(11 downto 0);\r
-                 BIT_LOW_IN    : in    std_logic_vector(11 downto 0);\r
-                 BIT_HIGH_IN   : in    std_logic_vector(11 downto 0);\r
-                 FL_LOW_IN             : in    std_logic_vector(11 downto 0);\r
-                 FL_HIGH_IN    : in    std_logic_vector(11 downto 0);\r
-                 BIT_DATA_OUT  : out   std_logic_vector(11 downto 0);\r
-                 BIT_VALID_OUT : out   std_logic_vector(11 downto 0);\r
-                 BIT_HIGH_OUT  : out   std_logic;\r
-                 BIT_LOW_OUT   : out   std_logic;\r
-                 TICKMARK_OUT  : out   std_logic;\r
-                 HEADER_OUT    : out   std_logic;\r
-                 FLAT_LINE_OUT : out   std_logic\r
-               );\r
+port(\r
+       CLK_APV_IN      : in    std_logic;\r
+       RESET_IN        : in    std_logic;\r
+       ADC_RAW_IN      : in    std_logic_vector(11 downto 0);\r
+       BIT_LOW_IN      : in    std_logic_vector(11 downto 0);\r
+       BIT_HIGH_IN     : in    std_logic_vector(11 downto 0);\r
+       FL_LOW_IN       : in    std_logic_vector(11 downto 0);\r
+       FL_HIGH_IN      : in    std_logic_vector(11 downto 0);\r
+       BIT_DATA_OUT    : out   std_logic_vector(11 downto 0);\r
+       BIT_VALID_OUT   : out   std_logic_vector(11 downto 0);\r
+       BIT_HIGH_OUT    : out   std_logic;\r
+       BIT_LOW_OUT     : out   std_logic;\r
+       TICKMARK_OUT    : out   std_logic;\r
+       HEADER_OUT      : out   std_logic;\r
+       FLAT_LINE_OUT   : out   std_logic\r
+       );\r
 end;\r
 \r
 architecture behavioral of apv_digital is\r
 \r
-       signal next_bit_low             : std_logic;\r
-       signal bit_low                  : std_logic;\r
-       signal next_bit_high    : std_logic;\r
-       signal bit_high                 : std_logic;\r
-       signal next_bit_data    : std_logic;\r
-       signal bit_data                 : std_logic_vector(11 downto 0);\r
-       signal next_bit_valid   : std_logic;\r
-       signal bit_valid                : std_logic_vector(11 downto 0);\r
-       signal next_fl_low              : std_logic;\r
-       signal fl_low                   : std_logic;\r
-       signal next_fl_high             : std_logic;\r
-       signal fl_high                  : std_logic;\r
-       signal next_fl_found    : std_logic;\r
-       signal fl_found                 : std_logic_vector(2 downto 0);\r
-       signal next_flat_line   : std_logic;\r
-       signal flat_line                : std_logic;\r
-       signal next_tickmark    : std_logic;\r
-       signal tickmark                 : std_logic;\r
-       signal next_header              : std_logic;\r
-       signal header                   : std_logic;\r
-       \r
+signal next_bit_low     : std_logic;\r
+signal bit_low          : std_logic;\r
+signal next_bit_high    : std_logic;\r
+signal bit_high         : std_logic;\r
+signal next_bit_data    : std_logic;\r
+signal bit_data         : std_logic_vector(11 downto 0);\r
+signal next_bit_valid   : std_logic;\r
+signal bit_valid        : std_logic_vector(11 downto 0);\r
+signal next_fl_low      : std_logic;\r
+signal fl_low           : std_logic;\r
+signal next_fl_high     : std_logic;\r
+signal fl_high          : std_logic;\r
+signal next_fl_found    : std_logic;\r
+signal fl_found         : std_logic_vector(2 downto 0);\r
+signal next_flat_line   : std_logic;\r
+signal flat_line        : std_logic;\r
+signal next_tickmark    : std_logic;\r
+signal tickmark         : std_logic;\r
+signal next_header      : std_logic;\r
+signal header           : std_logic;\r
+\r
 begin\r
 \r
 -- ADC data is registered already, so we can operate on the inputs directly.\r
 \r
 --------------------------------------------------------------------------------------\r
--- compare ADC raw data against "bit low" threshold, \r
+-- compare ADC raw data against "bit low" threshold,\r
 -- generate combinatorial "low" bit\r
 THE_BL_COMP: process( adc_raw_in, bit_low_in )\r
 begin\r
@@ -63,7 +64,7 @@ begin
        end if;\r
 end process THE_BL_COMP;\r
 \r
--- compare ADC raw data against "bit high" threshold, \r
+-- compare ADC raw data against "bit high" threshold,\r
 --generate combinatorial "high" bit\r
 THE_BH_COMP: process( adc_raw_in, bit_high_in )\r
 begin\r
index 57b56f7a4ce5429cc35c207fd20901d2083511f2..c4b5f5492c9547d6893d18bba4110bb56404ae16 100755 (executable)
@@ -7,99 +7,100 @@ library work;
 use work.adcmv3_components.all;\r
 \r
 entity apv_lock_sm is\r
-       port( CLK_APV_IN        : in    std_logic;\r
-                 RESET_IN              : in    std_logic;\r
-                 SYNC_IN               : in    std_logic; -- start APV synchronisation\r
-                 ADC_VALID_IN  : in    std_logic; -- ADC delivers valid data\r
-                 TIMED_IN              : in    std_logic; -- synchronisation timeout\r
-                 MATCH_IN              : in    std_logic; -- artifical tickmark from synchronized counter\r
-                 LOCKED_IN             : in    std_logic; -- enough good tickmarks\r
-                 TICK_IN               : in    std_logic; -- tickmark from digital parser\r
-                 HEADER_IN             : in    std_logic; -- header from digital parser\r
-                 FLATLINE_IN   : in    std_logic; -- flatline from digital parser\r
-                 RST_PC_OUT    : out   std_logic; -- reset period counter\r
-                 RST_TC_OUT    : out   std_logic; -- reset timeout counter\r
-                 INC_TC_OUT    : out   std_logic;\r
-                 RST_LC_OUT    : out   std_logic; -- reset lock counter\r
-                 INC_LC_OUT    : out   std_logic;\r
-                 UNKNOWN_OUT   : out   std_logic; -- status unknown\r
-                 BADADC_OUT    : out   std_logic; -- ADC data invalid\r
-                 LOCKED_OUT    : out   std_logic; -- APV locked successfully\r
-                 LOST_OUT              : out   std_logic; -- APV sync is lost\r
-                 NOSYNC_OUT    : out   std_logic; -- APV sync failed\r
-                 NOAPV_OUT             : out   std_logic; -- no APV connected\r
-                 BSM_OUT               : out   std_logic_vector(7 downto 0);\r
-                 DEBUG_OUT             : out   std_logic_vector(15 downto 0)\r
-               );\r
+port(\r
+       CLK_APV_IN      : in    std_logic;\r
+       RESET_IN        : in    std_logic;\r
+       SYNC_IN         : in    std_logic; -- start APV synchronisation\r
+       ADC_VALID_IN    : in    std_logic; -- ADC delivers valid data\r
+       TIMED_IN        : in    std_logic; -- synchronisation timeout\r
+       MATCH_IN        : in    std_logic; -- artifical tickmark from synchronized counter\r
+       LOCKED_IN       : in    std_logic; -- enough good tickmarks\r
+       TICK_IN         : in    std_logic; -- tickmark from digital parser\r
+       HEADER_IN       : in    std_logic; -- header from digital parser\r
+       FLATLINE_IN     : in    std_logic; -- flatline from digital parser\r
+       RST_PC_OUT      : out   std_logic; -- reset period counter\r
+       RST_TC_OUT      : out   std_logic; -- reset timeout counter\r
+       INC_TC_OUT      : out   std_logic;\r
+       RST_LC_OUT      : out   std_logic; -- reset lock counter\r
+       INC_LC_OUT      : out   std_logic;\r
+       UNKNOWN_OUT     : out   std_logic; -- status unknown\r
+       BADADC_OUT      : out   std_logic; -- ADC data invalid\r
+       LOCKED_OUT      : out   std_logic; -- APV locked successfully\r
+       LOST_OUT        : out   std_logic; -- APV sync is lost\r
+       NOSYNC_OUT      : out   std_logic; -- APV sync failed\r
+       NOAPV_OUT       : out   std_logic; -- no APV connected\r
+       BSM_OUT         : out   std_logic_vector(7 downto 0);\r
+       DEBUG_OUT       : out   std_logic_vector(15 downto 0)\r
+       );\r
 end;\r
 \r
 architecture behavioral of apv_lock_sm is\r
 \r
-       -- State definition\r
-       -- SLEEP  : initial reset state\r
-       -- CLEAR  : clear counters and registers\r
-       -- UWSYNC : wait for SYNC_IN to deassert\r
-       -- USYNC  : teaching phase, not synchronized yet\r
-       -- U_BADM : tickmark found, but local counter mismatch\r
-       -- U_BADP : local counter match, but no tickmark found\r
-       -- U_GOOD : local counter and tickmark match\r
-       -- U_TIME : locking timed out\r
-       -- U_FLAT : no APV connected (open input)\r
-       -- U_ADC  : ADC data is marked invaled (ser2par failed)\r
-       -- SYNCED : APV is locked, normal operation state\r
-       -- S_BADM : spurious tickmark found => fatal\r
-       -- S_BADM : missing tickmark => fatal\r
-       -- S_BADD : spurious data frame found, or bad tickmark after dataframe => fatal\r
-       -- S_GOOD : local counter and tickmark match\r
-       -- S_DATA : data frame header found at correct position\r
-       -- S_FR0  : first tickmark period of data frame\r
-       -- S_FR1  : second tickmark period of data frame\r
-       -- S_FR2  : third tickmark period of data frame\r
-       -- S_FR3  : fourth tickmark period of data frame\r
-       -- S_ADC  : ADC data is marked invalid (ser2par failed)\r
-       -- S_LOST : lock lost in normal operation => fatal\r
+-- State definition\r
+-- SLEEP  : initial reset state\r
+-- CLEAR  : clear counters and registers\r
+-- UWSYNC : wait for SYNC_IN to deassert\r
+-- USYNC  : teaching phase, not synchronized yet\r
+-- U_BADM : tickmark found, but local counter mismatch\r
+-- U_BADP : local counter match, but no tickmark found\r
+-- U_GOOD : local counter and tickmark match\r
+-- U_TIME : locking timed out\r
+-- U_FLAT : no APV connected (open input)\r
+-- U_ADC  : ADC data is marked invaled (ser2par failed)\r
+-- SYNCED : APV is locked, normal operation state\r
+-- S_BADM : spurious tickmark found => fatal\r
+-- S_BADM : missing tickmark => fatal\r
+-- S_BADD : spurious data frame found, or bad tickmark after dataframe => fatal\r
+-- S_GOOD : local counter and tickmark match\r
+-- S_DATA : data frame header found at correct position\r
+-- S_FR0  : first tickmark period of data frame\r
+-- S_FR1  : second tickmark period of data frame\r
+-- S_FR2  : third tickmark period of data frame\r
+-- S_FR3  : fourth tickmark period of data frame\r
+-- S_ADC  : ADC data is marked invalid (ser2par failed)\r
+-- S_LOST : lock lost in normal operation => fatal\r
 \r
-       -- state machine signals\r
-       type STATES is (SLEEP, CLEAR, USYNC, UWSYNC, U_BADM, U_BADP, U_GOOD, U_TIME, U_FLAT, U_ADC,\r
-                                       SYNCED, S_BADP, S_BADM, S_GOOD, S_DATA, S_FR0, S_FR1, S_FR2, S_FR3,\r
-                                       S_BADD, S_LOST, S_ADC);\r
-       signal CURRENT_STATE, NEXT_STATE: STATES;\r
+-- state machine signals\r
+type STATES is (SLEEP, CLEAR, USYNC, UWSYNC, U_BADM, U_BADP, U_GOOD, U_TIME, U_FLAT, U_ADC,\r
+                               SYNCED, S_BADP, S_BADM, S_GOOD, S_DATA, S_FR0, S_FR1, S_FR2, S_FR3,\r
+                               S_BADD, S_LOST, S_ADC);\r
+signal CURRENT_STATE, NEXT_STATE: STATES;\r
+\r
+-- normal signals\r
+signal bsm              : std_logic_vector(7 downto 0);\r
+signal debug            : std_logic_vector(15 downto 0);\r
+signal next_rst_tc      : std_logic;\r
+signal rst_tc           : std_logic;\r
+signal next_inc_tc      : std_logic;\r
+signal inc_tc           : std_logic;\r
+signal next_rst_lc      : std_logic;\r
+signal rst_lc           : std_logic;\r
+signal next_inc_lc      : std_logic;\r
+signal inc_lc           : std_logic;\r
+signal next_rst_pc      : std_logic;\r
+signal rst_pc           : std_logic;\r
+signal next_unknown     : std_logic;\r
+signal unknown          : std_logic;\r
+signal next_badadc      : std_logic;\r
+signal badadc           : std_logic;\r
+signal next_locked      : std_logic;\r
+signal locked           : std_logic;\r
+signal next_lost        : std_logic;\r
+signal lost             : std_logic;\r
+signal next_nosync      : std_logic;\r
+signal nosync           : std_logic;\r
+signal next_noapv       : std_logic;\r
+signal noapv            : std_logic;\r
+signal next_dataframe   : std_logic;\r
+signal dataframe        : std_logic;\r
 \r
-       -- normal signals\r
-       signal bsm                              : std_logic_vector(7 downto 0);\r
-       signal debug                    : std_logic_vector(15 downto 0);\r
-       signal next_rst_tc              : std_logic;\r
-       signal rst_tc                   : std_logic;\r
-       signal next_inc_tc              : std_logic;\r
-       signal inc_tc                   : std_logic;\r
-       signal next_rst_lc              : std_logic;\r
-       signal rst_lc                   : std_logic;\r
-       signal next_inc_lc              : std_logic;\r
-       signal inc_lc                   : std_logic;\r
-       signal next_rst_pc              : std_logic;\r
-       signal rst_pc                   : std_logic;\r
-       signal next_unknown             : std_logic;\r
-       signal unknown                  : std_logic;\r
-       signal next_badadc              : std_logic;\r
-       signal badadc                   : std_logic;\r
-       signal next_locked              : std_logic;\r
-       signal locked                   : std_logic;\r
-       signal next_lost                : std_logic;\r
-       signal lost                             : std_logic;\r
-       signal next_nosync              : std_logic;\r
-       signal nosync                   : std_logic;\r
-       signal next_noapv               : std_logic;\r
-       signal noapv                    : std_logic;    \r
-       signal next_dataframe   : std_logic;\r
-       signal dataframe                : std_logic;\r
-       \r
 begin\r
 \r
 debug <= (others => '0');\r
 \r
 -- state machine for handling synchronisation\r
 -- state registers\r
-STATE_MEM: process( clk_apv_in ) \r
+STATE_MEM: process( clk_apv_in )\r
 begin\r
        if( rising_edge(clk_apv_in) ) then\r
                if( reset_in = '1' ) then\r
@@ -138,10 +139,10 @@ end process STATE_MEM;
 STATE_TRANSFORM: process( CURRENT_STATE, sync_in, match_in, tick_in, header_in, timed_in, locked_in, flatline_in, adc_valid_in )\r
 begin\r
        NEXT_STATE  <= SLEEP; -- avoid latches\r
-       next_rst_pc    <= '0'; \r
-       next_rst_lc    <= '0'; \r
+       next_rst_pc    <= '0';\r
+       next_rst_lc    <= '0';\r
        next_inc_lc    <= '0';\r
-       next_rst_tc    <= '0'; \r
+       next_rst_tc    <= '0';\r
        next_inc_tc    <= '0';\r
        next_unknown   <= '0';\r
        next_badadc    <= '0';\r
@@ -151,7 +152,7 @@ begin
        next_noapv     <= '0';\r
        next_dataframe <= '0';\r
        case CURRENT_STATE is\r
-               when SLEEP      =>      if( sync_in = '1' ) then\r
+               when SLEEP  =>  if( sync_in = '1' ) then\r
                                                        NEXT_STATE   <= CLEAR; -- start synchronisation\r
                                                        next_rst_pc  <= '1';\r
                                                        next_rst_lc  <= '1';\r
@@ -161,9 +162,9 @@ begin
                                                        NEXT_STATE   <= SLEEP;\r
                                                        next_unknown <= '1';\r
                                                end if;\r
-               when CLEAR      =>      NEXT_STATE   <= UWSYNC;\r
+               when CLEAR  =>  NEXT_STATE   <= UWSYNC;\r
                                                next_unknown <= '1';\r
-               when UWSYNC     =>      if   ( (sync_in = '0') and (adc_valid_in = '1') ) then\r
+               when UWSYNC =>  if   ( (sync_in = '0') and (adc_valid_in = '1') ) then\r
                                                        NEXT_STATE   <= USYNC;\r
                                                        next_unknown <= '1';\r
                                                elsif( (sync_in = '0') and (adc_valid_in = '0') ) then\r
@@ -173,7 +174,7 @@ begin
                                                        NEXT_STATE   <= UWSYNC;\r
                                                        next_unknown <= '1';\r
                                                end if;\r
-               when USYNC      =>      if   ( (timed_in = '0') and (tick_in = '1') and (match_in = '0') ) then\r
+               when USYNC  =>  if   ( (timed_in = '0') and (tick_in = '1') and (match_in = '0') ) then\r
                                                        NEXT_STATE   <= U_BADM; -- local timer not correct\r
                                                        next_rst_pc  <= '1';\r
                                                        next_inc_tc  <= '1';\r
@@ -202,13 +203,13 @@ begin
                                                        NEXT_STATE   <= USYNC; -- wait for events\r
                                                        next_unknown <= '1';\r
                                                end if;\r
-               when U_BADM     =>      NEXT_STATE   <= USYNC;\r
+               when U_BADM =>  NEXT_STATE   <= USYNC;\r
                                                next_unknown <= '1';\r
-               when U_BADP     =>      NEXT_STATE   <= USYNC;\r
+               when U_BADP =>  NEXT_STATE   <= USYNC;\r
                                                next_unknown <= '1';\r
-               when U_GOOD     =>      NEXT_STATE   <= USYNC;\r
+               when U_GOOD =>  NEXT_STATE   <= USYNC;\r
                                                next_unknown <= '1';\r
-               when U_FLAT     =>      if( sync_in = '1' ) then\r
+               when U_FLAT =>  if( sync_in = '1' ) then\r
                                                        NEXT_STATE   <= CLEAR; -- next try\r
                                                        next_rst_pc  <= '1';\r
                                                        next_rst_lc  <= '1';\r
@@ -222,7 +223,7 @@ begin
                                                        NEXT_STATE   <= U_FLAT;\r
                                                        next_noapv   <= '1';\r
                                                end if;\r
-               when U_TIME     =>      if( sync_in = '1' ) then\r
+               when U_TIME =>  if( sync_in = '1' ) then\r
                                                        NEXT_STATE   <= CLEAR; -- next try\r
                                                        next_rst_pc  <= '1';\r
                                                        next_rst_lc  <= '1';\r
@@ -236,7 +237,7 @@ begin
                                                        NEXT_STATE   <= U_TIME;\r
                                                        next_nosync  <= '1';\r
                                                end if;\r
-               when U_ADC      =>      if( sync_in = '1' ) then\r
+               when U_ADC  =>  if( sync_in = '1' ) then\r
                                                        NEXT_STATE   <= CLEAR; -- next try\r
                                                        next_rst_pc  <= '1';\r
                                                        next_rst_lc  <= '1';\r
@@ -250,7 +251,7 @@ begin
                                                        NEXT_STATE   <= U_ADC;\r
                                                        next_badadc  <= '1';\r
                                                end if;\r
-               when SYNCED     =>      if   ( sync_in = '1' ) then\r
+               when SYNCED =>  if   ( sync_in = '1' ) then\r
                                                        NEXT_STATE   <= CLEAR;\r
                                                        next_rst_pc  <= '1';\r
                                                        next_rst_lc  <= '1';\r
@@ -282,9 +283,9 @@ begin
                                                        NEXT_STATE   <= SYNCED;\r
                                                        next_locked  <= '1';\r
                                                end if;\r
-               when S_GOOD     =>      NEXT_STATE   <= SYNCED;\r
+               when S_GOOD =>  NEXT_STATE   <= SYNCED;\r
                                                next_locked  <= '1';\r
-               when S_DATA     =>      if( sync_in = '1' ) then\r
+               when S_DATA =>  if( sync_in = '1' ) then\r
                                                        NEXT_STATE     <= CLEAR;\r
                                                        next_rst_pc    <= '1';\r
                                                        next_rst_lc    <= '1';\r
@@ -299,7 +300,7 @@ begin
                                                        next_dataframe <= '1';\r
                                                        next_locked    <= '1';\r
                                                end if;\r
-               when S_FR0      =>      if   ( sync_in = '1' ) then\r
+               when S_FR0  =>  if   ( sync_in = '1' ) then\r
                                                        NEXT_STATE     <= CLEAR;\r
                                                        next_rst_pc    <= '1';\r
                                                        next_rst_lc    <= '1';\r
@@ -318,7 +319,7 @@ begin
                                                        next_dataframe <= '1';\r
                                                        next_locked    <= '1';\r
                                                end if;\r
-               when S_FR1      =>      if   ( sync_in = '1' ) then\r
+               when S_FR1  =>  if   ( sync_in = '1' ) then\r
                                                        NEXT_STATE <= CLEAR;\r
                                                        next_rst_pc    <= '1';\r
                                                        next_rst_lc    <= '1';\r
@@ -337,7 +338,7 @@ begin
                                                        next_dataframe <= '1';\r
                                                        next_locked    <= '1';\r
                                                end if;\r
-               when S_FR2      =>      if   ( sync_in = '1' ) then\r
+               when S_FR2  =>  if   ( sync_in = '1' ) then\r
                                                        NEXT_STATE     <= CLEAR;\r
                                                        next_rst_pc    <= '1';\r
                                                        next_rst_lc    <= '1';\r
@@ -356,7 +357,7 @@ begin
                                                        next_dataframe <= '1';\r
                                                        next_locked    <= '1';\r
                                                end if;\r
-               when S_FR3      =>      if   ( sync_in = '1' ) then\r
+               when S_FR3  =>  if   ( sync_in = '1' ) then\r
                                                        NEXT_STATE     <= CLEAR;\r
                                                        next_rst_pc    <= '1';\r
                                                        next_rst_lc    <= '1';\r
@@ -379,15 +380,15 @@ begin
                                                        next_dataframe <= '1';\r
                                                        next_locked    <= '1';\r
                                                end if;\r
-               when S_BADD     =>      NEXT_STATE   <= S_LOST;\r
+               when S_BADD =>  NEXT_STATE   <= S_LOST;\r
                                                next_lost    <= '1';\r
-               when S_BADM     =>      NEXT_STATE   <= S_LOST;\r
+               when S_BADM =>  NEXT_STATE   <= S_LOST;\r
                                                next_lost    <= '1';\r
-               when S_BADP     =>      NEXT_STATE   <= S_LOST;\r
+               when S_BADP =>  NEXT_STATE   <= S_LOST;\r
                                                next_lost    <= '1';\r
-               when S_ADC      =>      NEXT_STATE   <= S_LOST;\r
+               when S_ADC  =>  NEXT_STATE   <= S_LOST;\r
                                                next_lost    <= '1';\r
-               when S_LOST     =>      if( sync_in = '1' ) then\r
+               when S_LOST =>  if( sync_in = '1' ) then\r
                                                        NEXT_STATE    <= CLEAR; -- next try\r
                                                        next_rst_pc   <= '1';\r
                                                        next_rst_lc   <= '1';\r
@@ -401,7 +402,7 @@ begin
                                                        NEXT_STATE    <= S_LOST;\r
                                                        next_lost     <= '1';\r
                                                end if;\r
-               when others     =>      NEXT_STATE   <= SLEEP;\r
+               when others =>  NEXT_STATE   <= SLEEP;\r
                                                next_unknown <= '1';\r
        end case;\r
 end process STATE_TRANSFORM;\r
@@ -410,29 +411,29 @@ end process STATE_TRANSFORM;
 STATE_DECODE: process( CURRENT_STATE )\r
 begin\r
        case CURRENT_STATE is\r
-               when SLEEP      =>      bsm <= x"00";\r
-               when CLEAR      =>      bsm <= x"01";\r
-               when UWSYNC     =>      bsm <= x"20"; \r
-               when USYNC      =>      bsm <= x"02";\r
-               when U_BADM     =>      bsm <= x"03";\r
-               when U_BADP     =>      bsm <= x"04";\r
-               when U_FLAT     =>      bsm <= x"05";\r
-               when U_GOOD     =>      bsm <= x"06";\r
-               when U_TIME     =>      bsm <= x"07";\r
-               when U_ADC      =>      bsm <= x"08";\r
-               when SYNCED     =>      bsm <= x"09";\r
-               when S_BADP     =>      bsm <= x"0a";\r
-               when S_BADM     =>      bsm <= x"0b";\r
-               when S_GOOD     =>      bsm <= x"0c";\r
-               when S_DATA     =>      bsm <= x"0d";\r
-               when S_FR0      =>      bsm <= x"0e";\r
-               when S_FR1      =>      bsm <= x"0f";\r
-               when S_FR2      =>      bsm <= x"10";\r
-               when S_FR3      =>      bsm <= x"11";\r
-               when S_BADD     =>      bsm <= x"12";\r
-               when S_ADC      =>      bsm <= x"13";\r
-               when S_LOST     =>      bsm <= x"14";\r
-               when others     =>      bsm <= x"ff";\r
+               when SLEEP  =>  bsm <= x"00";\r
+               when CLEAR  =>  bsm <= x"01";\r
+               when UWSYNC =>  bsm <= x"20";\r
+               when USYNC  =>  bsm <= x"02";\r
+               when U_BADM =>  bsm <= x"03";\r
+               when U_BADP =>  bsm <= x"04";\r
+               when U_FLAT =>  bsm <= x"05";\r
+               when U_GOOD =>  bsm <= x"06";\r
+               when U_TIME =>  bsm <= x"07";\r
+               when U_ADC  =>  bsm <= x"08";\r
+               when SYNCED =>  bsm <= x"09";\r
+               when S_BADP =>  bsm <= x"0a";\r
+               when S_BADM =>  bsm <= x"0b";\r
+               when S_GOOD =>  bsm <= x"0c";\r
+               when S_DATA =>  bsm <= x"0d";\r
+               when S_FR0  =>  bsm <= x"0e";\r
+               when S_FR1  =>  bsm <= x"0f";\r
+               when S_FR2  =>  bsm <= x"10";\r
+               when S_FR3  =>  bsm <= x"11";\r
+               when S_BADD =>  bsm <= x"12";\r
+               when S_ADC  =>  bsm <= x"13";\r
+               when S_LOST =>  bsm <= x"14";\r
+               when others =>  bsm <= x"ff";\r
        end case;\r
 end process STATE_DECODE;\r
 \r
index ee48a4761cc19e72c55e692f59e79af3a5dd10f2..e40cff3ee08d6a95f3fc632667243dcab5d9b6bf 100755 (executable)
@@ -6,128 +6,129 @@ use ieee.std_logic_unsigned.all;
 library work;\r
 use work.adcmv3_components.all;\r
 \r
--- This block takes care of syncing in the APVs. Only "synced" APVs are allowed to deliver data streams \r
--- to the processing units. \r
+-- This block takes care of syncing in the APVs. Only "synced" APVs are allowed to deliver data streams\r
+-- to the processing units.\r
 \r
 entity apv_locker is\r
-       port( CLK_APV_IN                        : in    std_logic;\r
-                 RESET_IN                              : in    std_logic;\r
-                 ADC_RAW_IN                    : in    std_logic_vector(11 downto 0);  -- ADC: raw data, synchronous to CLK_APV_IN\r
-                 ADC_VALID_IN                  : in    std_logic;                                              -- ADC: ser2par data is valid\r
-                 -- Slow control input, mainly digital thresholds here\r
-                 SYNC_IN                               : in    std_logic;                                              -- sync pulse input \r
-                 APV_ON_IN                             : in    std_logic;                                              -- this APV channel is switched on\r
-                 BIT_LOW_IN                    : in    std_logic_vector(11 downto 0);  -- slow control: threshold for digital '0'\r
-                 BIT_HIGH_IN                   : in    std_logic_vector(11 downto 0);  -- slow control: threshold for digital '1'\r
-                 FL_LOW_IN                             : in    std_logic_vector(11 downto 0);  -- lower threshold for ADC flatline\r
-                 FL_HIGH_IN                    : in    std_logic_vector(11 downto 0);  -- upper threshold for ADC flatline\r
-                 -- Generic APV status outputs (valid only if ADC_CLK_IN is working!)\r
-                 STATUS_IGNORE_OUT             : out   std_logic;                                              -- APV is to be ignored (effectively => switched off)\r
-                 STATUS_BADADC_OUT             : out   std_logic;                                              -- ADC ser2par data is invalid\r
-                 STATUS_UNKNOWN_OUT    : out   std_logic;                                              -- APV is not initialized yet\r
-                 STATUS_LOCKED_OUT             : out   std_logic;                                              -- APV locked successfully\r
-                 STATUS_LOST_OUT               : out   std_logic;                                              -- APV tickmark missing or wrong\r
-                 STATUS_NOSYNC_OUT             : out   std_logic;                                              -- APV did not lock successfully\r
-                 STATUS_MISSING_OUT    : out   std_logic;                                              -- APV is missing, ADC flatline detected\r
-                 STATUS_TICKMARK_OUT   : out   std_logic;\r
-                 -- Frame related status, to be stored in the raw status buffer\r
-                 -- Information is valid with APV_LAST_OUT, except FRAME_ERROR_OUT, FRAME_ROW_OUT and \r
-                 -- FRAME_CTR_OUT which are valid with beginning of APV_ANALOG_OUT.\r
-                 FRAME_ROW_OUT                 : out   std_logic_vector(7 downto 0);   -- decoded row from APV header\r
-                 FRAME_ERROR_OUT               : out   std_logic;                                              -- decoded error bit from APV header\r
-                 FRAME_FLAT_OUT                : out   std_logic;                                              -- APV sends a flat line (analog dead?)\r
-                 FRAME_OVF_OUT                 : out   std_logic;                                              -- at least one channel in frame was overflow\r
-                 FRAME_UDF_OUT                 : out   std_logic;                                              -- at least one channel in frame was underflow\r
-                 FRAME_CTR_OUT                 : out   std_logic_vector(3 downto 0);   -- frame counter for incoming data frames\r
-                 -- Channel related information, to be stored in the raw data buffer\r
-                 APV_CHANNEL_OUT               : out   std_logic_vector(6 downto 0);   -- physical channel ID\r
-                 APV_OVERFLOW_OUT              : out   std_logic;                                              -- channel is truncated high\r
-                 APV_UNDERFLOW_OUT             : out   std_logic;                                              -- channel is truncated low\r
-                 APV_RAW_OUT                   : out   std_logic_vector(11 downto 0);  -- APV raw data\r
-                 APV_ANALOG_OUT                : out   std_logic;                                              -- APV analog data is valid\r
-                 APV_START_OUT                 : out   std_logic;                                              -- valid data frame found, reserve one buffer \r
-                 APV_LAST_OUT                  : out   std_logic;                                              -- last APV channel of dataframe\r
-                 -- Debug information\r
-                 DEBUG_OUT                             : out   std_logic_vector(15 downto 0)\r
-               );\r
+port(\r
+       CLK_APV_IN          : in    std_logic;\r
+       RESET_IN            : in    std_logic;\r
+       ADC_RAW_IN          : in    std_logic_vector(11 downto 0);  -- ADC: raw data, synchronous to CLK_APV_IN\r
+       ADC_VALID_IN        : in    std_logic;                      -- ADC: ser2par data is valid\r
+       -- Slow control input, mainly digital thresholds here\r
+       SYNC_IN             : in    std_logic;                      -- sync pulse input\r
+       APV_ON_IN           : in    std_logic;                      -- this APV channel is switched on\r
+       BIT_LOW_IN          : in    std_logic_vector(11 downto 0);  -- slow control: threshold for digital '0'\r
+       BIT_HIGH_IN         : in    std_logic_vector(11 downto 0);  -- slow control: threshold for digital '1'\r
+       FL_LOW_IN           : in    std_logic_vector(11 downto 0);  -- lower threshold for ADC flatline\r
+       FL_HIGH_IN          : in    std_logic_vector(11 downto 0);  -- upper threshold for ADC flatline\r
+       -- Generic APV status outputs (valid only if ADC_CLK_IN is working!)\r
+       STATUS_IGNORE_OUT   : out   std_logic;                      -- APV is to be ignored (effectively => switched off)\r
+       STATUS_BADADC_OUT   : out   std_logic;                      -- ADC ser2par data is invalid\r
+       STATUS_UNKNOWN_OUT  : out   std_logic;                      -- APV is not initialized yet\r
+       STATUS_LOCKED_OUT   : out   std_logic;                      -- APV locked successfully\r
+       STATUS_LOST_OUT     : out   std_logic;                      -- APV tickmark missing or wrong\r
+       STATUS_NOSYNC_OUT   : out   std_logic;                      -- APV did not lock successfully\r
+       STATUS_MISSING_OUT  : out   std_logic;                      -- APV is missing, ADC flatline detected\r
+       STATUS_TICKMARK_OUT : out   std_logic;\r
+       -- Frame related status, to be stored in the raw status buffer\r
+       -- Information is valid with APV_LAST_OUT, except FRAME_ERROR_OUT, FRAME_ROW_OUT and\r
+       -- FRAME_CTR_OUT which are valid with beginning of APV_ANALOG_OUT.\r
+       FRAME_ROW_OUT       : out   std_logic_vector(7 downto 0);   -- decoded row from APV header\r
+       FRAME_ERROR_OUT     : out   std_logic;                      -- decoded error bit from APV header\r
+       FRAME_FLAT_OUT      : out   std_logic;                      -- APV sends a flat line (analog dead?)\r
+       FRAME_OVF_OUT       : out   std_logic;                      -- at least one channel in frame was overflow\r
+       FRAME_UDF_OUT       : out   std_logic;                      -- at least one channel in frame was underflow\r
+       FRAME_CTR_OUT       : out   std_logic_vector(3 downto 0);   -- frame counter for incoming data frames\r
+       -- Channel related information, to be stored in the raw data buffer\r
+       APV_CHANNEL_OUT     : out   std_logic_vector(6 downto 0);   -- physical channel ID\r
+       APV_OVERFLOW_OUT    : out   std_logic;                      -- channel is truncated high\r
+       APV_UNDERFLOW_OUT   : out   std_logic;                      -- channel is truncated low\r
+       APV_RAW_OUT         : out   std_logic_vector(11 downto 0);  -- APV raw data\r
+       APV_ANALOG_OUT      : out   std_logic;                      -- APV analog data is valid\r
+       APV_START_OUT       : out   std_logic;                      -- valid data frame found, reserve one buffer\r
+       APV_LAST_OUT        : out   std_logic;                      -- last APV channel of dataframe\r
+       -- Debug information\r
+       DEBUG_OUT           : out   std_logic_vector(15 downto 0)\r
+);\r
 end;\r
 \r
 architecture behavioral of apv_locker is\r
 \r
-       -- normal signals\r
-       signal lock_bsm                         : std_logic_vector(7 downto 0);\r
-       signal tickmark_found           : std_logic;\r
-       signal header_found                     : std_logic;\r
-       signal flatline_found           : std_logic;\r
-       signal status_unknown           : std_logic;\r
-       signal status_badadc            : std_logic;\r
-       signal status_locked            : std_logic;\r
-       signal status_lost                      : std_logic;\r
-       signal status_nosync            : std_logic;\r
-       signal status_missing           : std_logic;\r
-       signal next_status_ignore       : std_logic;\r
-       signal status_ignore            : std_logic;\r
-       signal frame_flat                       : std_logic;\r
-       signal next_frame_ovf           : std_logic;\r
-       signal frame_ovf                        : std_logic;\r
-       signal next_frame_udf           : std_logic;\r
-       signal frame_udf                        : std_logic;\r
-       signal frame_row                        : std_logic_vector(7 downto 0);\r
-       signal frame_error                      : std_logic;\r
-       signal bit_data                         : std_logic_vector(11 downto 0);\r
-       signal bit_valid                        : std_logic_vector(11 downto 0);\r
-\r
-       signal rst_pc_sm                        : std_logic;\r
-       signal rst_pc_ctr                       : std_logic;\r
-       signal pc_ctr                           : std_logic_vector(5 downto 0);\r
-       signal next_pc_match            : std_logic;\r
-       signal pc_match                         : std_logic;\r
-\r
-       signal rst_tc_sm                        : std_logic;\r
-       signal inc_tc_sm                        : std_logic;\r
-       signal tc_ctr                           : std_logic_vector(3 downto 0);\r
-       signal next_sync_timeout        : std_logic;\r
-       signal sync_timeout                     : std_logic;\r
-\r
-       signal rst_lc_sm                        : std_logic;\r
-       signal inc_lc_sm                        : std_logic;\r
-       signal lc_ctr                           : std_logic_vector(3 downto 0);\r
-       signal next_sync_success        : std_logic;\r
-       signal sync_success                     : std_logic;\r
-       \r
-       signal delay_store                      : std_logic_vector(7 downto 0);\r
-       signal store_header                     : std_logic;\r
-       \r
-       signal apv_channel                      : std_logic_vector(6 downto 0);\r
-       signal ce_chnl_ctr                      : std_logic;\r
-       signal frame_analog                     : std_logic;\r
-       signal set_frame_analog         : std_logic;\r
-       signal rst_frame_analog         : std_logic;\r
-       signal next_apv_last            : std_logic;\r
-       signal apv_last                         : std_logic;\r
-       signal apv_start                        : std_logic;\r
-       \r
-       signal adc_raw_one                      : std_logic_vector(11 downto 0);\r
-       signal adc_raw_two                      : std_logic_vector(11 downto 0);\r
-       \r
-       signal bit_high                         : std_logic;\r
-       signal bit_low                          : std_logic;\r
-       signal apv_overflow                     : std_logic;\r
-       signal apv_underflow            : std_logic;\r
-       \r
-       signal next_ce_underflow        : std_logic;\r
-       signal next_ce_overflow         : std_logic;\r
-\r
-       signal sum_ovf                          : std_logic_vector(7 downto 0);\r
-       signal sum_udf                          : std_logic_vector(7 downto 0);\r
-\r
-       signal frame_ctr                        : std_logic_vector(3 downto 0);\r
-       signal comb_ce_frame_ctr        : std_logic;\r
-       \r
-       signal debug                            : std_logic_vector(15 downto 0);\r
-       \r
-       signal apv_on                           : std_logic; -- 40MHz clock domain register\r
-       \r
+-- normal signals\r
+signal lock_bsm             : std_logic_vector(7 downto 0);\r
+signal tickmark_found       : std_logic;\r
+signal header_found         : std_logic;\r
+signal flatline_found       : std_logic;\r
+signal status_unknown       : std_logic;\r
+signal status_badadc        : std_logic;\r
+signal status_locked        : std_logic;\r
+signal status_lost          : std_logic;\r
+signal status_nosync        : std_logic;\r
+signal status_missing       : std_logic;\r
+signal next_status_ignore   : std_logic;\r
+signal status_ignore        : std_logic;\r
+signal frame_flat           : std_logic;\r
+signal next_frame_ovf       : std_logic;\r
+signal frame_ovf            : std_logic;\r
+signal next_frame_udf       : std_logic;\r
+signal frame_udf            : std_logic;\r
+signal frame_row            : std_logic_vector(7 downto 0);\r
+signal frame_error          : std_logic;\r
+signal bit_data             : std_logic_vector(11 downto 0);\r
+signal bit_valid            : std_logic_vector(11 downto 0);\r
+\r
+signal rst_pc_sm            : std_logic;\r
+signal rst_pc_ctr           : std_logic;\r
+signal pc_ctr               : std_logic_vector(5 downto 0);\r
+signal next_pc_match        : std_logic;\r
+signal pc_match             : std_logic;\r
+\r
+signal rst_tc_sm            : std_logic;\r
+signal inc_tc_sm            : std_logic;\r
+signal tc_ctr               : std_logic_vector(3 downto 0);\r
+signal next_sync_timeout    : std_logic;\r
+signal sync_timeout         : std_logic;\r
+\r
+signal rst_lc_sm            : std_logic;\r
+signal inc_lc_sm            : std_logic;\r
+signal lc_ctr               : std_logic_vector(3 downto 0);\r
+signal next_sync_success    : std_logic;\r
+signal sync_success         : std_logic;\r
+\r
+signal delay_store          : std_logic_vector(7 downto 0);\r
+signal store_header         : std_logic;\r
+\r
+signal apv_channel          : std_logic_vector(6 downto 0);\r
+signal ce_chnl_ctr          : std_logic;\r
+signal frame_analog         : std_logic;\r
+signal set_frame_analog     : std_logic;\r
+signal rst_frame_analog     : std_logic;\r
+signal next_apv_last        : std_logic;\r
+signal apv_last             : std_logic;\r
+signal apv_start            : std_logic;\r
+\r
+signal adc_raw_one          : std_logic_vector(11 downto 0);\r
+signal adc_raw_two          : std_logic_vector(11 downto 0);\r
+\r
+signal bit_high             : std_logic;\r
+signal bit_low              : std_logic;\r
+signal apv_overflow         : std_logic;\r
+signal apv_underflow        : std_logic;\r
+\r
+signal next_ce_underflow    : std_logic;\r
+signal next_ce_overflow     : std_logic;\r
+\r
+signal sum_ovf              : std_logic_vector(7 downto 0);\r
+signal sum_udf              : std_logic_vector(7 downto 0);\r
+\r
+signal frame_ctr            : std_logic_vector(3 downto 0);\r
+signal comb_ce_frame_ctr    : std_logic;\r
+\r
+signal debug                : std_logic_vector(15 downto 0);\r
+\r
+signal apv_on               : std_logic; -- 40MHz clock domain register\r
+\r
 begin\r
 \r
 -- Debug signals\r
@@ -135,30 +136,32 @@ debug <= (others => '0');
 \r
 -- Clock domain crossing\r
 THE_APVON_SYNCER: state_sync\r
-port map( STATE_A_IN           => apv_on_in,\r
-                 CLK_B_IN                      => clk_apv_in,\r
-                 RESET_B_IN            => reset_in,\r
-                 STATE_B_OUT           => apv_on\r
-               );\r
+port map(\r
+       STATE_A_IN      => apv_on_in,\r
+       CLK_B_IN        => clk_apv_in,\r
+       RESET_B_IN      => reset_in,\r
+       STATE_B_OUT     => apv_on\r
+);\r
 \r
 -- Input stage, for tickmark and header recognition, and bit decoding.\r
 -- Also detects missing APVs by flatline.\r
 THE_APV_DIGITAL: apv_digital\r
-port map( CLK_APV_IN   => clk_apv_in,\r
-                 RESET_IN              => reset_in,\r
-                 ADC_RAW_IN    => adc_raw_in,\r
-                 BIT_LOW_IN    => bit_low_in,\r
-                 BIT_HIGH_IN   => bit_high_in,\r
-                 FL_LOW_IN             => fl_low_in,\r
-                 FL_HIGH_IN    => fl_high_in,\r
-                 BIT_DATA_OUT  => bit_data,\r
-                 BIT_VALID_OUT => bit_valid, -- for testing!\r
-                 BIT_HIGH_OUT  => bit_high, -- for analog off recognition, one cycle earlier\r
-                 BIT_LOW_OUT   => bit_low, -- for analog off recognition, one cycle earlier\r
-                 TICKMARK_OUT  => tickmark_found,\r
-                 HEADER_OUT    => header_found,\r
-                 FLAT_LINE_OUT => flatline_found\r
-               );\r
+port map(\r
+       CLK_APV_IN      => clk_apv_in,\r
+       RESET_IN        => reset_in,\r
+       ADC_RAW_IN      => adc_raw_in,\r
+       BIT_LOW_IN      => bit_low_in,\r
+       BIT_HIGH_IN     => bit_high_in,\r
+       FL_LOW_IN       => fl_low_in,\r
+       FL_HIGH_IN      => fl_high_in,\r
+       BIT_DATA_OUT    => bit_data,\r
+       BIT_VALID_OUT   => bit_valid, -- for testing!\r
+       BIT_HIGH_OUT    => bit_high, -- for analog off recognition, one cycle earlier\r
+       BIT_LOW_OUT     => bit_low, -- for analog off recognition, one cycle earlier\r
+       TICKMARK_OUT    => tickmark_found,\r
+       HEADER_OUT      => header_found,\r
+       FLAT_LINE_OUT   => flatline_found\r
+);\r
 \r
 -- Count enables for the underflow / overflow counters\r
 next_ce_underflow <= '1' when (bit_high = '0' and bit_low = '1' and frame_analog = '1') else '0';\r
@@ -166,12 +169,12 @@ next_ce_overflow  <= '1' when (bit_high = '1' and bit_low = '0' and frame_analog
 \r
 -- Counter for underflow channels\r
 THE_UNDERFLOW_CTR_PROC: process( clk_apv_in )\r
-begin \r
+begin\r
        if( rising_edge(clk_apv_in) ) then\r
                if( (reset_in = '1') or (delay_store(1) = '1') ) then\r
                        sum_udf <= (others => '0');\r
                elsif( next_ce_underflow = '1' ) then\r
-                       sum_udf <= sum_udf + 1; \r
+                       sum_udf <= sum_udf + 1;\r
                end if;\r
        end if;\r
 end process THE_UNDERFLOW_CTR_PROC;\r
@@ -183,12 +186,12 @@ frame_flat      <= sum_udf(7);
 \r
 -- Counter for Overflow channels\r
 THE_OVERFLOW_CTR_PROC: process( clk_apv_in )\r
-begin \r
+begin\r
        if( rising_edge(clk_apv_in) ) then\r
                if( (reset_in = '1') or (delay_store(1) = '1') ) then\r
                        sum_ovf <= (others => '0');\r
                elsif( next_ce_overflow = '1' ) then\r
-                       sum_ovf <= sum_ovf + 1; \r
+                       sum_ovf <= sum_ovf + 1;\r
                end if;\r
        end if;\r
 end process THE_OVERFLOW_CTR_PROC;\r
@@ -209,30 +212,31 @@ end process THE_SYNC_PROC;
 \r
 -- locking state machine\r
 THE_APV_LOCK_SM: apv_lock_sm\r
-port map( CLK_APV_IN   => clk_apv_in,\r
-                 RESET_IN              => reset_in,\r
-                 SYNC_IN               => sync_in, -- 40 MHz signal!\r
-                 ADC_VALID_IN  => adc_valid_in,\r
-                 TIMED_IN              => sync_timeout,\r
-                 MATCH_IN              => pc_match,\r
-                 LOCKED_IN             => sync_success,\r
-                 TICK_IN               => tickmark_found,\r
-                 HEADER_IN             => header_found,\r
-                 FLATLINE_IN   => flatline_found,\r
-                 RST_PC_OUT    => rst_pc_sm,\r
-                 RST_TC_OUT    => rst_tc_sm,\r
-                 INC_TC_OUT    => inc_tc_sm,\r
-                 RST_LC_OUT    => rst_lc_sm,\r
-                 INC_LC_OUT    => inc_lc_sm,\r
-                 UNKNOWN_OUT   => status_unknown,\r
-                 BADADC_OUT    => status_badadc,\r
-                 LOCKED_OUT    => status_locked,\r
-                 LOST_OUT              => status_lost,\r
-                 NOSYNC_OUT    => status_nosync,\r
-                 NOAPV_OUT             => status_missing,\r
-                 BSM_OUT               => lock_bsm,\r
-                 DEBUG_OUT             => open\r
-               );\r
+port map(\r
+       CLK_APV_IN      => clk_apv_in,\r
+       RESET_IN        => reset_in,\r
+       SYNC_IN         => sync_in, -- 40 MHz signal!\r
+       ADC_VALID_IN    => adc_valid_in,\r
+       TIMED_IN        => sync_timeout,\r
+       MATCH_IN        => pc_match,\r
+       LOCKED_IN       => sync_success,\r
+       TICK_IN         => tickmark_found,\r
+       HEADER_IN       => header_found,\r
+       FLATLINE_IN     => flatline_found,\r
+       RST_PC_OUT      => rst_pc_sm,\r
+       RST_TC_OUT      => rst_tc_sm,\r
+       INC_TC_OUT      => inc_tc_sm,\r
+       RST_LC_OUT      => rst_lc_sm,\r
+       INC_LC_OUT      => inc_lc_sm,\r
+       UNKNOWN_OUT     => status_unknown,\r
+       BADADC_OUT      => status_badadc,\r
+       LOCKED_OUT      => status_locked,\r
+       LOST_OUT        => status_lost,\r
+       NOSYNC_OUT      => status_nosync,\r
+       NOAPV_OUT       => status_missing,\r
+       BSM_OUT         => lock_bsm,\r
+       DEBUG_OUT       => open\r
+);\r
 \r
 next_status_ignore <= not apv_on;\r
 \r
@@ -252,7 +256,7 @@ begin
                        pc_ctr     <= pc_ctr + 1;\r
                        pc_match   <= next_pc_match;\r
                        rst_pc_ctr <= pc_match;\r
-               end if;         \r
+               end if;\r
        end if;\r
 end process THE_PERIOD_COUNTER;\r
 \r
@@ -273,7 +277,7 @@ begin
        end if;\r
 end process THE_TIMEOUT_COUNTER;\r
 \r
--- watermark for the successful synchronisation \r
+-- watermark for the successful synchronisation\r
 next_sync_success <= '1' when ( lc_ctr = x"8" ) else '0';\r
 \r
 -- lock counter for the lock process\r
@@ -298,7 +302,7 @@ begin
                        delay_store <= (others => '0');\r
                else\r
                        delay_store(7 downto 1) <= delay_store(6 downto 0);\r
-                       -- we only accept data frames when they arrive at a well defined tickmark place, \r
+                       -- we only accept data frames when they arrive at a well defined tickmark place,\r
                        -- when the APV is really switched on, and it is in locked state.\r
                        delay_store(0)          <= header_found and pc_match and apv_on and status_locked;\r
                end if;\r
@@ -373,7 +377,7 @@ begin
        if( rising_edge(clk_apv_in) ) then\r
                if   ( reset_in = '1' ) then\r
                        frame_error <= '0'; -- bit is inverted!\r
-                       frame_row   <= (others => '0');                 \r
+                       frame_row   <= (others => '0');\r
                elsif( store_header = '1' ) then\r
                        frame_error <= not bit_data(0); -- bit is inverted!\r
                        frame_row   <= bit_data(8 downto 1);\r
@@ -418,7 +422,7 @@ apv_raw_out         <= adc_raw_two;
 apv_overflow_out    <= apv_overflow;\r
 apv_underflow_out   <= apv_underflow;\r
 apv_analog_out      <= ce_chnl_ctr;\r
-apv_start_out          <= apv_start;\r
+apv_start_out       <= apv_start;\r
 apv_last_out        <= apv_last;\r
 \r
 frame_flat_out      <= frame_flat;\r
index 04668c7fe6485b77d9777853d86df85825d08f93..723e82f6098c41642925ad294abf8630c2bc65ad 100644 (file)
@@ -14,31 +14,33 @@ use work.adcmv3_components.all;
 -- Data is piped out directly.\r
 \r
 entity apv_pc_nc_alu is\r
-       port( CLK_IN                    : in    std_logic; -- 100MHz master clock\r
-                 RESET_IN                      : in    std_logic;\r
-                 START_IN                      : in    std_logic; -- start signal, used for initialisation of counters\r
-                 MAX_FRAMES_IN         : in    std_logic_vector(3 downto 0); -- number of frames requested\r
-                 CURR_FRAME_IN         : in    std_logic_vector(3 downto 0); -- current frame number\r
-                 LOC_FRM_CTR_IN        : in    std_logic_vector(3 downto 0); -- DEBUG\r
-                 EDS_FRM_CTR_IN        : in    std_logic_vector(3 downto 0); -- DEBUG\r
-                 BUF_GOOD_IN           : in    std_logic; -- process buffer\r
-                 BUF_BAD_IN            : in    std_logic; -- write only error header\r
-                 BUF_IGNORE_IN         : in    std_logic; -- do not write anything\r
-                 ERROR_IN                      : in    std_logic_vector(3 downto 0); -- buffer status, errors from checkers\r
-                 DO_HEADER_IN          : in    std_logic;\r
-                 DO_ERROR_IN           : in    std_logic;\r
-                 EVT_TYPE_IN           : in    std_logic_vector(2 downto 0);\r
-                 RAW_ADDR_IN           : in    std_logic_vector(6 downto 0);\r
-                 RAW_DATA_IN           : in    std_logic_vector(37 downto 0);\r
-                 PED_DATA_IN           : in    std_logic_vector(17 downto 0); \r
-                 THR_DATA_IN           : in    std_logic_vector(17 downto 0);\r
-                 FRAME_IN                      : in    std_logic;\r
-                 FIFO_DATA_OUT         : out   std_logic_vector(26 downto 0); -- [21] -> [31], [20:0] -> [20:0]\r
-                 WE_OUT                        : out   std_logic;\r
-                 COUNT_OUT                     : out   std_logic_vector(9 downto 0);\r
-                 ANYDATA_OUT           : out   std_logic; -- this FIFO needs attention during readout\r
-                 DBG_OUT                       : out   std_logic_vector(15 downto 0)\r
-               );\r
+port(\r
+       CLK_IN          : in    std_logic; -- 100MHz master clock\r
+       RESET_IN        : in    std_logic;\r
+       START_IN        : in    std_logic; -- start signal, used for initialisation of counters\r
+       MAX_FRAMES_IN   : in    std_logic_vector(3 downto 0); -- number of frames requested\r
+       CURR_FRAME_IN   : in    std_logic_vector(3 downto 0); -- current frame number\r
+       LOC_FRM_CTR_IN  : in    std_logic_vector(3 downto 0); -- DEBUG\r
+       EDS_FRM_CTR_IN  : in    std_logic_vector(3 downto 0); -- DEBUG\r
+       BUF_GOOD_IN     : in    std_logic; -- process buffer\r
+       BUF_BAD_IN      : in    std_logic; -- write only error header\r
+       BUF_IGNORE_IN   : in    std_logic; -- do not write anything\r
+       ERROR_IN        : in    std_logic_vector(3 downto 0); -- buffer status, errors from checkers\r
+       DO_HEADER_IN    : in    std_logic;\r
+       DO_ERROR_IN     : in    std_logic;\r
+       SUPPRESS_IN     : in    std_logic; -- suppress bit\r
+       EVT_TYPE_IN     : in    std_logic_vector(2 downto 0); -- RICH data configuration bits\r
+       RAW_ADDR_IN     : in    std_logic_vector(6 downto 0);\r
+       RAW_DATA_IN     : in    std_logic_vector(37 downto 0);\r
+       PED_DATA_IN     : in    std_logic_vector(17 downto 0);\r
+       THR_DATA_IN     : in    std_logic_vector(17 downto 0);\r
+       FRAME_IN        : in    std_logic;\r
+       FIFO_DATA_OUT   : out   std_logic_vector(26 downto 0); -- [21] -> [31], [20:0] -> [20:0]\r
+       WE_OUT          : out   std_logic;\r
+       COUNT_OUT       : out   std_logic_vector(9 downto 0);\r
+       ANYDATA_OUT     : out   std_logic; -- this FIFO needs attention during readout\r
+       DBG_OUT         : out   std_logic_vector(15 downto 0)\r
+);\r
 end;\r
 \r
 ----------------------------------------------------------------------\r
@@ -48,49 +50,50 @@ end;
 \r
 architecture behavioral of apv_pc_nc_alu is\r
 \r
-       -- normal signals\r
-       signal raw_data_q                       : std_logic_vector(12 downto 0); -- input register\r
-       signal ped_data_q                       : std_logic_vector(12 downto 0); -- input register\r
-       signal ped_corr_data_q          : std_logic_vector(12 downto 0); -- registered pedestal corrected value\r
-       signal ped_corr_data_qq         : std_logic_vector(12 downto 0); -- registered pedestal corrected value\r
-       signal ped_corr_data_qqq        : std_logic_vector(12 downto 0); -- registered pedestal corrected value\r
-       signal loc_baseline_q           : std_logic_vector(13 downto 0);\r
-       signal nc_corr_data_q           : std_logic_vector(13 downto 0);\r
-       signal nc_corr_data_qq          : std_logic_vector(13 downto 0);\r
-       signal nc_corr_data_qqq         : std_logic_vector(21 downto 0);\r
-       signal thr_data_q                       : std_logic_vector(13 downto 0);\r
-       signal udf_int                          : std_logic_vector(6 downto 0);\r
-       signal ovf_int                          : std_logic_vector(6 downto 0); \r
-       signal frame_int                        : std_logic_vector(6 downto 0);\r
-       signal off_int                          : std_logic_vector(6 downto 0);\r
-       signal next_data_we                     : std_logic;\r
-       signal data_we                          : std_logic;\r
-\r
-       signal thr_pass                         : std_logic;\r
-\r
-       -- data steering signals\r
-       signal next_ped_off                     : std_logic;\r
-       signal ped_off                          : std_logic; -- switch off pedestals\r
-       signal next_lcb_off                     : std_logic;\r
-       signal lcb_off                          : std_logic; -- switch off local baseline correction\r
-       signal next_clip_max            : std_logic;\r
-       signal clip_max                         : std_logic; -- clip OVF values to maximum \r
-       signal next_clip_min            : std_logic;\r
-       signal clip_min                         : std_logic; -- clip UDF values to minimum\r
-       signal next_bad_corr            : std_logic_vector(6 downto 2);\r
-       signal bad_corr                         : std_logic_vector(6 downto 2);\r
-       signal toggle                           : std_logic_vector(6 downto 0);\r
-       \r
-       -- Channel counter\r
-       signal channel                          : std_logic_vector(6 downto 0);\r
-\r
-       signal count                            : std_logic_vector(9 downto 0);\r
-\r
-       signal anydata                          : std_logic;\r
-\r
-       -- Debug signals\r
-       signal debug                            : std_logic_vector(15 downto 0);\r
-               \r
+-- normal signals\r
+signal raw_data_q           : std_logic_vector(12 downto 0); -- input register\r
+signal ped_data_q           : std_logic_vector(12 downto 0); -- input register\r
+signal ped_corr_data_q      : std_logic_vector(12 downto 0); -- registered pedestal corrected value\r
+signal ped_corr_data_qq     : std_logic_vector(12 downto 0); -- registered pedestal corrected value\r
+signal ped_corr_data_qqq    : std_logic_vector(12 downto 0); -- registered pedestal corrected value\r
+signal loc_baseline_q       : std_logic_vector(13 downto 0);\r
+signal nc_corr_data_q       : std_logic_vector(13 downto 0);\r
+signal nc_corr_data_qq      : std_logic_vector(13 downto 0);\r
+signal nc_corr_data_qqq     : std_logic_vector(21 downto 0);\r
+signal thr_data_q           : std_logic_vector(13 downto 0);\r
+signal udf_int              : std_logic_vector(6 downto 0);\r
+signal ovf_int              : std_logic_vector(6 downto 0);\r
+signal frame_int            : std_logic_vector(6 downto 0);\r
+signal off_int              : std_logic_vector(6 downto 0);\r
+signal next_data_we         : std_logic;\r
+signal data_we              : std_logic;\r
+signal adjust_data          : std_logic_vector(13 downto 0);\r
+\r
+signal thr_pass             : std_logic;\r
+\r
+-- data steering signals\r
+signal next_ped_off         : std_logic;\r
+signal ped_off              : std_logic; -- switch off pedestals\r
+signal next_lcb_off         : std_logic;\r
+signal lcb_off              : std_logic; -- switch off local baseline correction\r
+signal next_clip_max        : std_logic;\r
+signal clip_max             : std_logic; -- clip OVF values to maximum\r
+signal next_clip_min        : std_logic;\r
+signal clip_min             : std_logic; -- clip UDF values to minimum\r
+signal next_bad_corr        : std_logic_vector(6 downto 2);\r
+signal bad_corr             : std_logic_vector(6 downto 2);\r
+signal toggle               : std_logic_vector(6 downto 0);\r
+\r
+-- Channel counter\r
+signal channel              : std_logic_vector(6 downto 0);\r
+\r
+signal count                : std_logic_vector(9 downto 0);\r
+\r
+signal anydata              : std_logic;\r
+\r
+-- Debug signals\r
+signal debug                : std_logic_vector(15 downto 0);\r
+\r
 begin\r
 \r
 ---------------------------------------------------------------------------------\r
@@ -100,42 +103,46 @@ begin
 -- 000          RAW128          128   raw data (+ 4096 + 8192)\r
 -- 001          PED128          128   pedestal data (+ 4096 - pedestal)\r
 -- 010          PED128THR     <=128   pedestal data above threshold\r
--- 011          ---             ---   ---\r
+-- 011          RAW64            64   raw data \r
 -- 100          NC64PED64       128   do NC on physic channels, corr. channels pedestal corrected\r
 -- 101          NC64             64   only NC physic channels\r
 -- 110          NC64GOOD       <=64   only good NC channels\r
 -- 111          NC64THR        <=64   only good NC channels above threshold\r
 ---------------------------------------------------------------------------------\r
 \r
--- Switch off pedestals (RAW128 mode)\r
-next_ped_off  <= '1' when ( evt_type_in = "000" ) else '0';\r
+-- Switch off pedestals (RAW128 and RAW64 mode)\r
+next_ped_off  <= '1' when ( (evt_type_in = b"000") or (evt_type_in = b"011") ) else '0';\r
 \r
--- Switch off local baseline (RAW128, PED128, PED128THR modes)\r
-next_lcb_off  <= '1' when ( (evt_type_in = "000") or (evt_type_in = "001") or (evt_type_in = "010") ) else '0';\r
+-- Switch off local baseline (RAW128, PED128, PED128THR, RAW64 modes)\r
+next_lcb_off  <= '1' when ( (evt_type_in = b"000") or (evt_type_in = b"001") or (evt_type_in = b"010") or (evt_type_in = b"011") ) \r
+                                        else '0';\r
 \r
--- Clipping function for neighbour corrected values (all modes except RAW128)\r
-next_clip_min <= '1' when ( ((evt_type_in = "001") or (evt_type_in = "010") or (evt_type_in = "011") or \r
-                                                        (evt_type_in(2) = '1') ) and (udf_int(2) = '1') ) \r
+-- Clipping function for neighbour corrected values (all modes except RAW128 and RAW64)\r
+next_clip_min <= '1' when ( ((evt_type_in = "001") or (evt_type_in = "010") or\r
+                                                        (evt_type_in(2) = '1') ) and (udf_int(2) = '1') )\r
                                         else '0';\r
-next_clip_max <= '1' when ( ((evt_type_in = "001") or (evt_type_in = "010") or (evt_type_in = "011") or \r
-                                                        (evt_type_in(2) = '1') ) and (ovf_int(2) = '1') ) \r
+next_clip_max <= '1' when ( ((evt_type_in = "001") or (evt_type_in = "010") or\r
+                                                        (evt_type_in(2) = '1') ) and (ovf_int(2) = '1') )\r
                                         else '0';\r
 \r
 -- Neighbour correction: handle broken or switched off correction channels.\r
 -- A broken (UDF/OVF) or switched off (OFF) correction channel kills its two physical neighbour channels.\r
 next_bad_corr(2) <= '1' when ( (udf_int(0) = '1') or (udf_int(2) = '1') or\r
-                                                          (ovf_int(0) = '1') or (ovf_int(2) = '1') or\r
-                                                          (off_int(0) = '1') or (off_int(2) = '1') ) \r
-                                       else '0';\r
+                                                          (ovf_int(0) = '1') or (ovf_int(2) = '1') or\r
+                                                          (off_int(0) = '1') or (off_int(2) = '1') )\r
+                                               else '0';\r
 \r
 next_bad_corr(3) <= '1' when ( (bad_corr(2) = '1') and (evt_type_in(2) = '1') ) else '0';\r
 \r
-next_bad_corr(4) <= '1' when ( ((bad_corr(3) = '1') and (toggle(3) = '1') and (frame_int(3) = '1')) or \r
-                                                      (off_int(3) = '1') ) \r
-                                           else '0';\r
+next_bad_corr(4) <= '1' when ( ((bad_corr(3) = '1') and (toggle(3) = '1') and (frame_int(3) = '1')) or\r
+                                                          (off_int(3) = '1') )\r
+                                               else '0';\r
 next_bad_corr(5) <= bad_corr(4);\r
 next_bad_corr(6) <= bad_corr(5);\r
 \r
+-- baseline shifting for raw modes (4096)\r
+adjust_data <= b"01_0000_0000_0000" when evt_type_in(2) = '0' else b"00_0000_0000_0000";\r
+\r
 -- We carry the OVF/UDF/OFF information all through the chain!\r
 THE_SYNC_PROC: process( clk_in )\r
 begin\r
@@ -158,7 +165,7 @@ end process THE_SYNC_PROC;
 THE_RAW_INPUT_PROC: process( clk_in )\r
 begin\r
        if( rising_edge(clk_in) ) then\r
-               raw_data_q <= '1' & raw_data_in(11 downto 0); \r
+               raw_data_q <= '1' & raw_data_in(11 downto 0);\r
        end if;\r
 end process THE_RAW_INPUT_PROC;\r
 \r
@@ -169,7 +176,7 @@ begin
                if( (reset_in = '1') or (ped_off = '1') ) then\r
                        ped_data_q <= (others => '0');\r
                else\r
-                       ped_data_q <= '0' & ped_data_in(11 downto 0); \r
+                       ped_data_q <= '0' & ped_data_in(11 downto 0);\r
                end if;\r
        end if;\r
 end process THE_PED_INPUT_PROC;\r
@@ -196,7 +203,7 @@ THE_MEAN_CALC_PROC: process( clk_in )
 begin\r
        if( rising_edge(clk_in) ) then\r
                if( (reset_in = '1') or (lcb_off = '1') ) then\r
-                       loc_baseline_q <= (others => '0');      \r
+                       loc_baseline_q <= (others => '0');\r
                else\r
                        loc_baseline_q <= ('0' & ped_corr_data_q) + ('0' & ped_corr_data_qqq);\r
                end if;\r
@@ -212,24 +219,34 @@ begin
                elsif( clip_max = '1' ) then\r
                        nc_corr_data_q <= (others => '1'); -- channel is overflow\r
                else\r
-                       nc_corr_data_q <= ('1' & ped_corr_data_qqq) - ('0' & loc_baseline_q(13 downto 1));      \r
+                       nc_corr_data_q <= ('1' & ped_corr_data_qqq) - ('0' & loc_baseline_q(13 downto 1));\r
                end if;\r
        end if;\r
 end process THE_NC_CORR_PROC;\r
 \r
 -- One caveat: in PED128 our artificial baseline is 4096, in NC64THR it is 8192.\r
-thr_data_q(13) <= '1'; --'1' when (evt_type_in = "111") else '0';\r
+thr_data_q(13) <= '1';\r
 thr_data_q(12) <= '0' when (evt_type_in = "111") else '1';\r
 \r
 -- Threshold comparison\r
 THE_THR_COMP: comp14bit\r
-port map( DATAA                => nc_corr_data_q,\r
-                 DATAB         => thr_data_q,\r
-                 CLOCK         => clk_in, \r
-                 CLOCKEN       => '1', \r
-                 ACLR          => reset_in, -- BUG 10092009 \r
-                 AGEB          => thr_pass\r
-               );\r
+port map(\r
+       DATAA   => nc_corr_data_q,\r
+       DATAB   => thr_data_q,\r
+       CLOCK   => clk_in,\r
+       CLOCKEN => '1',\r
+       ACLR    => reset_in,\r
+       AGEB    => thr_pass\r
+);\r
+\r
+-- in raw modes, we must shift back to "normal" nominal baseline\r
+THE_ADJUSTMENT_PROC: process( clk_in )\r
+begin\r
+       if( rising_edge(clk_in) ) then\r
+               nc_corr_data_qq <= nc_corr_data_q - adjust_data; \r
+       end if;\r
+end process THE_ADJUSTMENT_PROC;\r
+\r
 \r
 -- Delay NCD by one cycle, store THR data\r
 THE_NC_DELAY_PROC: process( clk_in )\r
@@ -237,21 +254,21 @@ begin
        if( rising_edge(clk_in) ) then\r
                if( reset_in = '1' ) then\r
                        nc_corr_data_qqq        <= (others => '0');\r
-                       nc_corr_data_qq         <= (others => '0');\r
+--                     nc_corr_data_qq         <= (others => '0');\r
                        thr_data_q(11 downto 0) <= (others => '0');\r
                else\r
                        if   ( (do_header_in = '0') and (do_error_in = '0') ) then\r
                                nc_corr_data_qqq(21)           <= '0'; -- DATA\r
                                nc_corr_data_qqq(20 downto 14) <= channel;\r
                                nc_corr_data_qqq(13 downto 0)  <= nc_corr_data_qq;\r
-                       elsif( (do_header_in = '1') ) then \r
+                       elsif( (do_header_in = '1') ) then\r
                                nc_corr_data_qqq(21)           <= '1'; -- HEADER\r
                                nc_corr_data_qqq(20)           <= buf_bad_in;\r
                                nc_corr_data_qqq(19 downto 16) <= error_in;\r
                                nc_corr_data_qqq(15 downto 12) <= max_frames_in;\r
                                nc_corr_data_qqq(11 downto 8)  <= curr_frame_in;\r
                                nc_corr_data_qqq(7 downto 0)   <= raw_data_in(25 downto 18);\r
-                       elsif( (do_error_in = '1') ) then \r
+                       elsif( (do_error_in = '1') ) then\r
                                nc_corr_data_qqq(21)           <= '1'; -- HEADER\r
                                nc_corr_data_qqq(20)           <= raw_data_in(26); -- error\r
                                nc_corr_data_qqq(19 downto 16) <= eds_frm_ctr_in; -- EDS start frame\r
@@ -259,25 +276,26 @@ begin
                                nc_corr_data_qqq(11 downto 8)  <= raw_data_in(17 downto 14); -- frame counter\r
                                nc_corr_data_qqq(7 downto 0)   <= raw_data_in(25 downto 18); -- row\r
                        end if;\r
-                       nc_corr_data_qq         <= nc_corr_data_q;\r
+--                     nc_corr_data_qq         <= nc_corr_data_q;\r
                        thr_data_q(11 downto 0) <= thr_data_in(11 downto 0);\r
                end if;\r
        end if;\r
 end process THE_NC_DELAY_PROC;\r
 \r
 -- Judgement day: will data survive?\r
-next_data_we <= '1' when ( ((buf_good_in = '1') and (evt_type_in = "000") and (frame_int(5) = '1')) or \r
-                                                  ((buf_good_in = '1') and (evt_type_in = "001") and (frame_int(5) = '1')) or\r
-                                                  ((buf_good_in = '1') and (evt_type_in = "010") and (frame_int(5) = '1') and (thr_pass = '1') and (bad_corr(5) = '0')) or\r
-                                                  ((buf_good_in = '1') and (evt_type_in = "100") and (frame_int(5) = '1')) or\r
-                                                  ((buf_good_in = '1') and (evt_type_in = "101") and (frame_int(5) = '1') and (toggle(5) = '1')) or\r
-                                                  ((buf_good_in = '1') and (evt_type_in = "110") and (frame_int(5) = '1') and (toggle(5) = '1') and (bad_corr(5) = '0')) or\r
-                                                  ((buf_good_in = '1') and (evt_type_in = "111") and (frame_int(5) = '1') and (toggle(5) = '1') and (bad_corr(5) = '0') and (thr_pass = '1')) or\r
-                                                  (((buf_good_in = '1') or (buf_bad_in = '1')) and (do_header_in = '1')) or\r
---                                                ((buf_bad_in  = '1') and (do_error_in = '1'))\r
-                                                  ((do_error_in = '1'))\r
-                                                ) \r
-                                       else '0';\r
+next_data_we <= '1' when ( \r
+       ((suppress_in = '0') and (buf_good_in = '1') and (evt_type_in = "000") and (frame_int(5) = '1')) or\r
+       ((suppress_in = '0') and (buf_good_in = '1') and (evt_type_in = "001") and (frame_int(5) = '1')) or\r
+       ((suppress_in = '0') and (buf_good_in = '1') and (evt_type_in = "010") and (frame_int(5) = '1') and (thr_pass = '1') and (bad_corr(5) = '0')) or\r
+       ((suppress_in = '0') and (buf_good_in = '1') and (evt_type_in = "011") and (frame_int(5) = '1') and (toggle(5) = '1')) or\r
+       ((suppress_in = '0') and (buf_good_in = '1') and (evt_type_in = "100") and (frame_int(5) = '1')) or\r
+       ((suppress_in = '0') and (buf_good_in = '1') and (evt_type_in = "101") and (frame_int(5) = '1') and (toggle(5) = '1')) or\r
+       ((suppress_in = '0') and (buf_good_in = '1') and (evt_type_in = "110") and (frame_int(5) = '1') and (toggle(5) = '1') and (bad_corr(5) = '0')) or\r
+       ((suppress_in = '0') and (buf_good_in = '1') and (evt_type_in = "111") and (frame_int(5) = '1') and (toggle(5) = '1') and (bad_corr(5) = '0') and (thr_pass = '1')) or\r
+       (((buf_good_in = '1') or (buf_bad_in = '1')) and (do_header_in = '1')) or\r
+--     ((buf_bad_in  = '1') and (do_error_in = '1'))\r
+       ((do_error_in = '1'))\r
+) else '0';\r
 \r
 -- Channel counter for outgoing data\r
 THE_CHANNEL_CTR_PROC: process( clk_in )\r
@@ -291,7 +309,10 @@ begin
        end if;\r
 end process THE_CHANNEL_CTR_PROC;\r
 \r
--- Channel counter for outgoing data\r
+-- Data word counter, including all words written (i.e. also headers and debug words)\r
+--\r
+-- NB: we have 10 bits for COUNT. So we can use up to 1023 data words per event, including\r
+--     all debug words.  \r
 THE_DATA_CTR_PROC: process( clk_in )\r
 begin\r
        if( rising_edge(clk_in) ) then\r
@@ -300,6 +321,7 @@ begin
                        anydata <= '0';\r
                elsif( (data_we = '1') and (anydata = '0') ) then\r
                        anydata <= '1';\r
+                       count   <= count + 1; -- changed\r
                elsif( (data_we = '1') and (anydata = '1') ) then\r
                        count   <= count + 1;\r
                end if;\r
@@ -307,7 +329,7 @@ begin
 end process THE_DATA_CTR_PROC;\r
 \r
 -- output signals (most of them are only needed for simulation!)\r
-we_out            <= data_we; \r
+we_out            <= data_we;\r
 count_out         <= count;\r
 anydata_out       <= anydata;\r
 \r
@@ -321,7 +343,7 @@ fifo_data_out(25)           <= data_we;
 fifo_data_out(24)           <= bad_corr(6);\r
 fifo_data_out(23)           <= ovf_int(6);\r
 fifo_data_out(22)           <= udf_int(6);\r
-fifo_data_out(21 downto 0)  <= nc_corr_data_qqq; \r
+fifo_data_out(21 downto 0)  <= nc_corr_data_qqq;\r
 \r
 -- Debug signals\r
 --debug(31 downto 16)  <= (others => '0');\r
@@ -331,30 +353,4 @@ debug(13 downto 0)   <= thr_data_q;
 \r
 dbg_out              <= debug;\r
 \r
-end behavioral;\r
-\r
---THE_NC_DELAY_PROC: process( clk_in )\r
---begin\r
---     if( rising_edge(clk_in) ) then\r
---             if( reset_in = '1' ) then\r
---                     nc_corr_data_qqq        <= (others => '0');\r
---                     nc_corr_data_qq         <= (others => '0');\r
---                     thr_data_q(11 downto 0) <= (others => '0');\r
---             else\r
---                     if( (do_header_in = '0') and (do_error_in = '0') ) then\r
---                             nc_corr_data_qqq(21)           <= '0'; -- DATA\r
---                             nc_corr_data_qqq(20 downto 14) <= channel;\r
---                             nc_corr_data_qqq(13 downto 0)  <= nc_corr_data_qq;\r
---                     else\r
---                             nc_corr_data_qqq(21)           <= '1'; -- HEADER\r
---                             nc_corr_data_qqq(20)           <= buf_bad_in;\r
---                             nc_corr_data_qqq(19 downto 16) <= error_in;\r
---                             nc_corr_data_qqq(15 downto 12) <= max_frames_in;\r
---                             nc_corr_data_qqq(11 downto 8)  <= curr_frame_in;\r
---                             nc_corr_data_qqq(7 downto 0)   <= raw_data_in(25 downto 18);\r
---                     end if;\r
---                     nc_corr_data_qq         <= nc_corr_data_q;\r
---                     thr_data_q(11 downto 0) <= thr_data_in(11 downto 0);\r
---             end if;\r
---     end if;\r
---end process THE_NC_DELAY_PROC;\r
+end behavioral;
\ No newline at end of file
index 47d3f24fdc058607ce3a45c3e00cc9a42b685b89..b76d4ec8cec4272f89aa433fe57021466fa76900 100755 (executable)
@@ -6,7 +6,7 @@ use ieee.std_logic_unsigned.all;
 library work;\r
 use work.adcmv3_components.all;\r
 \r
--- This entity is used to decouple the ADC/APV part (with 40MHz) from the data \r
+-- This entity is used to decouple the ADC/APV part (with 40MHz) from the data\r
 -- handling part (which runs with 100MHz).\r
 -- Signals:\r
 -- - all signals starting with ADC_* are synchronous to CLK_APV_IN\r
@@ -16,110 +16,111 @@ use work.adcmv3_components.all;
 -- - take care of the one clock delay between BUF_ADDR_IN and BUF_DATA_OUT.\r
 \r
 entity apv_raw_buffer is\r
-       port( CLK_APV_IN                : in    std_logic; -- write clock from APV handling stage\r
-                 RESET_IN                      : in    std_logic;\r
-                 -- buffer level control signals\r
-                 FRM_REQD_IN           : in    std_logic; -- one data frame has been requested from APV\r
-                 MAX_TRG_NUM_IN        : in    std_logic_vector(3 downto 0); -- maximum number of triggers per event\r
-                 -- CLK_APV_IN sync'ed signals from APV_LOCKER\r
-                 ADC_ANALOG_IN         : in    std_logic; -- write enable for ADC data\r
-                 ADC_START_IN          : in    std_logic; -- data frame detected, block the buffer page\r
-                 ADC_LAST_IN           : in    std_logic; -- last channel signal\r
-                 ADC_CHANNEL_IN        : in    std_logic_vector(6 downto 0); -- physical channel ID\r
-                 ADC_RAW_IN            : in    std_logic_vector(17 downto 0); -- raw ADC data, UDF, OVF, ERROR\r
-                 ADC_STATUS_IN         : in    std_logic_vector(7 downto 0); -- status information for APV\r
-                 ADC_FRAME_IN          : in    std_logic_vector(11 downto 0); -- status information for frame\r
-                 -- BUF_CLK_IN sync'ed signals from back side logic \r
-                 BUF_CLK_IN            : in    std_logic; -- read clock\r
-                 BUF_RESET_IN          : in    std_logic; -- 100MHz reset\r
-                 BUF_START_OUT         : out   std_logic; -- one block starts writing (aka ADC_START)\r
-                 BUF_READY_OUT         : out   std_logic; -- one block has been written (aka ADC_LAST)\r
-                 BUF_ADDR_IN           : in    std_logic_vector(6 downto 0); -- address inside current buffer\r
-                 BUF_DONE_IN           : in    std_logic; -- buffer has been read (discard buffer)\r
-                 BUF_DATA_OUT          : out   std_logic_vector(17 downto 0); -- data from buffer\r
-                 BUF_STATUS_OUT        : out   std_logic_vector(7 downto 0); -- generic APV status output\r
-                 BUF_FRAME_OUT         : out   std_logic_vector(11 downto 0); -- current frame status output\r
-                 BUF_GOOD_OUT          : out   std_logic; -- APV is active and synced -> GOOD situation\r
-                 BUF_BROKEN_OUT        : out   std_logic; -- APV is active, but not synced -> BAD situation\r
-                 BUF_IGNORE_OUT        : out   std_logic; -- APV is switched off -> switched off\r
-                 BUF_LEVEL_OUT         : out   std_logic_vector(4 downto 0); -- number of stored frames inside buffer\r
-                 BUF_TICKMARK_OUT      : out   std_logic; -- tickmark signal for timeouts in the EDS handler+\r
-                 BUF_FULL_OUT          : out   std_logic; -- inhibit any next trigger if set!\r
-                 -- Debug signals\r
-                 DEBUG_OUT                     : out   std_logic_vector(15 downto 0)\r
-               );\r
+port(\r
+       CLK_APV_IN          : in    std_logic; -- write clock from APV handling stage\r
+       RESET_IN            : in    std_logic;\r
+       -- buffer level control signals\r
+       FRM_REQD_IN         : in    std_logic; -- one data frame has been requested from APV\r
+       MAX_TRG_NUM_IN      : in    std_logic_vector(3 downto 0); -- maximum number of triggers per event\r
+       -- CLK_APV_IN sync'ed signals from APV_LOCKER\r
+       ADC_ANALOG_IN       : in    std_logic; -- write enable for ADC data\r
+       ADC_START_IN        : in    std_logic; -- data frame detected, block the buffer page\r
+       ADC_LAST_IN         : in    std_logic; -- last channel signal\r
+       ADC_CHANNEL_IN      : in    std_logic_vector(6 downto 0); -- physical channel ID\r
+       ADC_RAW_IN          : in    std_logic_vector(17 downto 0); -- raw ADC data, UDF, OVF, ERROR\r
+       ADC_STATUS_IN       : in    std_logic_vector(7 downto 0); -- status information for APV\r
+       ADC_FRAME_IN        : in    std_logic_vector(11 downto 0); -- status information for frame\r
+       -- BUF_CLK_IN sync'ed signals from back side logic\r
+       BUF_CLK_IN          : in    std_logic; -- read clock\r
+       BUF_RESET_IN        : in    std_logic; -- 100MHz reset\r
+       BUF_START_OUT       : out   std_logic; -- one block starts writing (aka ADC_START)\r
+       BUF_READY_OUT       : out   std_logic; -- one block has been written (aka ADC_LAST)\r
+       BUF_ADDR_IN         : in    std_logic_vector(6 downto 0); -- address inside current buffer\r
+       BUF_DONE_IN         : in    std_logic; -- buffer has been read (discard buffer)\r
+       BUF_DATA_OUT        : out   std_logic_vector(17 downto 0); -- data from buffer\r
+       BUF_STATUS_OUT      : out   std_logic_vector(7 downto 0); -- generic APV status output\r
+       BUF_FRAME_OUT       : out   std_logic_vector(11 downto 0); -- current frame status output\r
+       BUF_GOOD_OUT        : out   std_logic; -- APV is active and synced -> GOOD situation\r
+       BUF_BROKEN_OUT      : out   std_logic; -- APV is active, but not synced -> BAD situation\r
+       BUF_IGNORE_OUT      : out   std_logic; -- APV is switched off -> switched off\r
+       BUF_LEVEL_OUT       : out   std_logic_vector(4 downto 0); -- number of stored frames inside buffer\r
+       BUF_TICKMARK_OUT    : out   std_logic; -- tickmark signal for timeouts in the EDS handler+\r
+       BUF_FULL_OUT        : out   std_logic; -- inhibit any next trigger if set!\r
+       -- Debug signals\r
+       DEBUG_OUT           : out   std_logic_vector(15 downto 0)\r
+);\r
 end;\r
 \r
 architecture behavioral of apv_raw_buffer is\r
 \r
-       -- Placer Directives\r
-       attribute HGROUP : string;\r
-       -- for whole architecture\r
-       attribute HGROUP of behavioral : architecture  is "APV_RAW_BUF_group";\r
-\r
-       -- normal signals\r
-       signal adc_status_q             : std_logic_vector(7 downto 0);\r
-       signal adc_status_qq    : std_logic_vector(7 downto 0);\r
-\r
-       signal adc_start_x              : std_logic;\r
-       signal adc_start                : std_logic;\r
-       signal adc_last_x               : std_logic;\r
-       signal adc_last                 : std_logic;\r
-\r
-       signal ce_wr_pointer    : std_logic;\r
-       signal wr_pointer               : std_logic_vector(3 downto 0);\r
-       signal ce_rd_pointer    : std_logic;\r
-       signal rd_pointer               : std_logic_vector(3 downto 0);\r
-       \r
-       signal buf_good_x               : std_logic;\r
-       signal buf_good                 : std_logic;\r
-       signal buf_broken_x             : std_logic;\r
-       signal buf_broken               : std_logic;\r
-       signal buf_ignore_x             : std_logic;\r
-       signal buf_ignore               : std_logic;\r
-       \r
-       signal buf_level                : std_logic_vector(4 downto 0);\r
-       signal buf_level_up_x   : std_logic;\r
-       signal buf_level_down_x : std_logic;\r
-       \r
-       signal wr_data_addr             : std_logic_vector(10 downto 0);\r
-       signal wr_data_d                : std_logic_vector(17 downto 0);\r
-       signal wr_data_ena              : std_logic;\r
-       signal rd_data_addr             : std_logic_vector(10 downto 0);\r
-       signal rd_data_d                : std_logic_vector(17 downto 0);\r
-       signal rd_data_ena              : std_logic;\r
-\r
-       signal buf_frame                : std_logic_vector(11 downto 0);\r
-       \r
-       signal adc_tickmark             : std_logic;\r
-       signal buf_tickmark             : std_logic;\r
-\r
-       -- Alias names for status bits\r
-       signal apv_on_x                 : std_logic; -- 40MHz clock domain signal\r
-       signal apv_on                   : std_logic;\r
-       signal apv_adcok_x              : std_logic; -- 40MHz clock domain signal\r
-       signal apv_adcok                : std_logic;\r
-       signal apv_locked_x             : std_logic; -- 40MHz clock domain signal\r
-       signal apv_locked               : std_logic;\r
-\r
-       -- from old APV_BUFHANDLER block\r
-       signal apv_free_ctr                     : std_logic_vector(4 downto 0);\r
-       signal apv_free_up                      : std_logic;\r
-       signal apv_free_down            : std_logic;\r
-       signal buf_free_ctr                     : std_logic_vector(4 downto 0);\r
-       signal buf_free_up                      : std_logic;\r
-       signal buf_free_down            : std_logic;\r
-       \r
-       signal sum_apv_buf                      : std_logic_vector(5 downto 0);\r
-       signal sum_apv                          : std_logic_vector(5 downto 0);\r
-       signal sum_buf                          : std_logic_vector(5 downto 0);\r
-       signal trg_limit                        : std_logic_vector(5 downto 0);\r
-       \r
-       signal debug                            : std_logic_vector(15 downto 0);\r
-       \r
-       signal apv_or_buf_full_x        : std_logic;\r
-       signal apv_or_buf_full          : std_logic;\r
-       \r
+-- Placer Directives\r
+attribute HGROUP : string;\r
+-- for whole architecture\r
+attribute HGROUP of behavioral : architecture  is "APV_RAW_BUF_group";\r
+\r
+-- normal signals\r
+signal adc_status_q         : std_logic_vector(7 downto 0);\r
+signal adc_status_qq        : std_logic_vector(7 downto 0);\r
+\r
+signal adc_start_x          : std_logic;\r
+signal adc_start            : std_logic;\r
+signal adc_last_x           : std_logic;\r
+signal adc_last             : std_logic;\r
+\r
+signal ce_wr_pointer        : std_logic;\r
+signal wr_pointer           : std_logic_vector(3 downto 0);\r
+signal ce_rd_pointer        : std_logic;\r
+signal rd_pointer           : std_logic_vector(3 downto 0);\r
+\r
+signal buf_good_x           : std_logic;\r
+signal buf_good             : std_logic;\r
+signal buf_broken_x         : std_logic;\r
+signal buf_broken           : std_logic;\r
+signal buf_ignore_x         : std_logic;\r
+signal buf_ignore           : std_logic;\r
+\r
+signal buf_level            : std_logic_vector(4 downto 0);\r
+signal buf_level_up_x       : std_logic;\r
+signal buf_level_down_x     : std_logic;\r
+\r
+signal wr_data_addr         : std_logic_vector(10 downto 0);\r
+signal wr_data_d            : std_logic_vector(17 downto 0);\r
+signal wr_data_ena          : std_logic;\r
+signal rd_data_addr         : std_logic_vector(10 downto 0);\r
+signal rd_data_d            : std_logic_vector(17 downto 0);\r
+signal rd_data_ena          : std_logic;\r
+\r
+signal buf_frame            : std_logic_vector(11 downto 0);\r
+\r
+signal adc_tickmark         : std_logic;\r
+signal buf_tickmark         : std_logic;\r
+\r
+-- Alias names for status bits\r
+signal apv_on_x             : std_logic; -- 40MHz clock domain signal\r
+signal apv_on               : std_logic;\r
+signal apv_adcok_x          : std_logic; -- 40MHz clock domain signal\r
+signal apv_adcok            : std_logic;\r
+signal apv_locked_x         : std_logic; -- 40MHz clock domain signal\r
+signal apv_locked           : std_logic;\r
+\r
+-- from old APV_BUFHANDLER block\r
+signal apv_free_ctr         : std_logic_vector(4 downto 0);\r
+signal apv_free_up          : std_logic;\r
+signal apv_free_down        : std_logic;\r
+signal buf_free_ctr         : std_logic_vector(4 downto 0);\r
+signal buf_free_up          : std_logic;\r
+signal buf_free_down        : std_logic;\r
+\r
+signal sum_apv_buf          : std_logic_vector(5 downto 0);\r
+signal sum_apv              : std_logic_vector(5 downto 0);\r
+signal sum_buf              : std_logic_vector(5 downto 0);\r
+signal trg_limit            : std_logic_vector(5 downto 0);\r
+\r
+signal debug                : std_logic_vector(15 downto 0);\r
+\r
+signal apv_or_buf_full_x    : std_logic;\r
+signal apv_or_buf_full      : std_logic;\r
+\r
 begin\r
 \r
 -- Debugging signals\r
@@ -131,25 +132,28 @@ apv_locked_x <= adc_status_in(5);     -- '0' = not locked, '1' = locked
 apv_on_x     <= not adc_status_in(1); -- '0' = "off" means "ignore", '1' = "on" means "look at me"\r
 \r
 THE_APV_ON_SYNC: state_sync\r
-port map( STATE_A_IN           => apv_on_x,\r
-                 CLK_B_IN                      => buf_clk_in,\r
-                 RESET_B_IN            => buf_reset_in,\r
-                 STATE_B_OUT           => apv_on\r
-               );\r
+port map(\r
+       STATE_A_IN      => apv_on_x,\r
+       CLK_B_IN        => buf_clk_in,\r
+       RESET_B_IN      => buf_reset_in,\r
+       STATE_B_OUT     => apv_on\r
+);\r
 \r
 THE_APV_LOCKED_SYNC: state_sync\r
-port map( STATE_A_IN           => apv_locked_x,\r
-                 CLK_B_IN                      => buf_clk_in,\r
-                 RESET_B_IN            => buf_reset_in,\r
-                 STATE_B_OUT           => apv_locked\r
-               );\r
+port map(\r
+       STATE_A_IN      => apv_locked_x,\r
+       CLK_B_IN        => buf_clk_in,\r
+       RESET_B_IN      => buf_reset_in,\r
+       STATE_B_OUT     => apv_locked\r
+);\r
 \r
 THE_APV_ADCOK_SYNC: state_sync\r
-port map( STATE_A_IN           => apv_adcok_x,\r
-                 CLK_B_IN                      => buf_clk_in,\r
-                 RESET_B_IN            => buf_reset_in,\r
-                 STATE_B_OUT           => apv_adcok\r
-               );\r
+port map(\r
+       STATE_A_IN      => apv_adcok_x,\r
+       CLK_B_IN        => buf_clk_in,\r
+       RESET_B_IN      => buf_reset_in,\r
+       STATE_B_OUT     => apv_adcok\r
+);\r
 \r
 -- We deliver three status signals to the data handler:\r
 -- BUF_GOOD_OUT  : APV is switched on and alive, so data packets can be expected in case of triggers.\r
@@ -162,10 +166,10 @@ port map( STATE_A_IN              => apv_adcok_x,
 \r
 -- CLOCK DOMAINS!\r
 buf_good_x   <= '1' when ((apv_on = '1') and (apv_adcok = '1') and (apv_locked = '1')) else '0';\r
-buf_broken_x <= '1' when ((apv_on = '1') and (apv_adcok = '0'  or   apv_locked = '0')) else '0'; \r
+buf_broken_x <= '1' when ((apv_on = '1') and (apv_adcok = '0'  or   apv_locked = '0')) else '0';\r
 buf_ignore_x <= '1' when ( apv_on = '0' ) else '0';\r
 \r
-THE_BUF_SYNCER_PROC: process( buf_clk_in ) \r
+THE_BUF_SYNCER_PROC: process( buf_clk_in )\r
 begin\r
        if( rising_edge(buf_clk_in) ) then\r
                buf_good      <= buf_good_x;\r
@@ -181,35 +185,38 @@ end process THE_BUF_SYNCER_PROC;
 adc_start_x <= (adc_start_in and buf_good_x);\r
 \r
 THE_ADC_START_SYNCER: pulse_sync\r
-port map( CLK_A_IN             => clk_apv_in,\r
-                 RESET_A_IN    => reset_in,\r
-                 PULSE_A_IN    => adc_start_x,\r
-                 CLK_B_IN              => buf_clk_in,\r
-                 RESET_B_IN    => buf_reset_in,\r
-                 PULSE_B_OUT   => adc_start\r
-               );\r
+port map(\r
+       CLK_A_IN    => clk_apv_in,\r
+       RESET_A_IN  => reset_in,\r
+       PULSE_A_IN  => adc_start_x,\r
+       CLK_B_IN    => buf_clk_in,\r
+       RESET_B_IN  => buf_reset_in,\r
+       PULSE_B_OUT => adc_start\r
+);\r
 \r
 adc_last_x <= (adc_last_in and buf_good_x);\r
 \r
 THE_ADC_LAST_SYNCER: pulse_sync\r
-port map( CLK_A_IN             => clk_apv_in,\r
-                 RESET_A_IN    => reset_in,\r
-                 PULSE_A_IN    => adc_last_x,\r
-                 CLK_B_IN              => buf_clk_in,\r
-                 RESET_B_IN    => buf_reset_in,\r
-                 PULSE_B_OUT   => adc_last\r
-               );\r
+port map(\r
+       CLK_A_IN    => clk_apv_in,\r
+       RESET_A_IN  => reset_in,\r
+       PULSE_A_IN  => adc_last_x,\r
+       CLK_B_IN    => buf_clk_in,\r
+       RESET_B_IN  => buf_reset_in,\r
+       PULSE_B_OUT => adc_last\r
+);\r
 \r
 -- The tickmark signal is also transfered from 40M to 100M clock domain\r
 adc_tickmark <= adc_status_in(0); -- alias\r
 THE_TICKMARK_SYNCER: pulse_sync\r
-port map( CLK_A_IN             => clk_apv_in,\r
-                 RESET_A_IN    => reset_in,\r
-                 PULSE_A_IN    => adc_tickmark,\r
-                 CLK_B_IN              => buf_clk_in,\r
-                 RESET_B_IN    => buf_reset_in,\r
-                 PULSE_B_OUT   => buf_tickmark\r
-               );\r
+port map(\r
+       CLK_A_IN    => clk_apv_in,\r
+       RESET_A_IN  => reset_in,\r
+       PULSE_A_IN  => adc_tickmark,\r
+       CLK_B_IN    => buf_clk_in,\r
+       RESET_B_IN  => buf_reset_in,\r
+       PULSE_B_OUT => buf_tickmark\r
+);\r
 \r
 \r
 -- Control signals for the write pointer counter\r
@@ -243,7 +250,7 @@ begin
 end process THE_RD_POINTER;\r
 \r
 -- We need a level counter for the EDS handler, anyhow\r
-buf_level_up_x   <= adc_last; \r
+buf_level_up_x   <= adc_last;\r
 buf_level_down_x <= (buf_done_in and buf_good);\r
 \r
 THE_BUF_LEVEL_COUNTER_PROC: process( buf_clk_in )\r
@@ -268,44 +275,46 @@ wr_data_d     <= adc_raw_in;
 \r
 -- We have two EBRs to implement a 2kx18 ring buffer\r
 THE_INPUT_BRAM: input_bram\r
-port map( WRADDRESS => wr_data_addr,\r
-                 RDADDRESS     => rd_data_addr,\r
-                 DATA => wr_data_d, \r
-                 WE => wr_data_ena,\r
-                 RDCLOCK => buf_clk_in,\r
-                 RDCLOCKEN => rd_data_ena,\r
-                 RESET => reset_in,\r
-                 WRCLOCK => clk_apv_in,\r
-                 WRCLOCKEN     => '1',\r
-                 Q => rd_data_d\r
-               );\r
+port map(\r
+       WRADDRESS   => wr_data_addr,\r
+       RDADDRESS   => rd_data_addr,\r
+       DATA        => wr_data_d,\r
+       WE          => wr_data_ena,\r
+       RDCLOCK     => buf_clk_in,\r
+       RDCLOCKEN   => rd_data_ena,\r
+       RESET       => reset_in,\r
+       WRCLOCK     => clk_apv_in,\r
+       WRCLOCKEN   => '1',\r
+       Q           => rd_data_d\r
+);\r
 \r
 -- We use a LUT based DPRAM for the 16x12b status memory\r
 THE_FRAME_STATUS_MEM: frame_status_mem\r
-port map( WRADDRESS    => wr_pointer, \r
-                 DATA          => adc_frame_in,\r
-                 WRCLOCK       => clk_apv_in,\r
-                 WE            => ce_wr_pointer, -- we store the frame status with the last ADC word\r
-                 WRCLOCKEN     => '1',\r
-                 RDADDRESS     => rd_pointer,\r
-                 RDCLOCK       => buf_clk_in,\r
-                 RDCLOCKEN     => '1',\r
-                 RESET         => reset_in,\r
-                 Q                     => buf_frame\r
-               );\r
+port map(\r
+       WRADDRESS   => wr_pointer,\r
+       DATA        => adc_frame_in,\r
+       WRCLOCK     => clk_apv_in,\r
+       WE          => ce_wr_pointer, -- we store the frame status with the last ADC word\r
+       WRCLOCKEN   => '1',\r
+       RDADDRESS   => rd_pointer,\r
+       RDCLOCK     => buf_clk_in,\r
+       RDCLOCKEN   => '1',\r
+       RESET       => reset_in,\r
+       Q           => buf_frame\r
+);\r
 \r
 ------------------------------------------------------------------------------------------\r
 -- Buffer fill levels, busy generation\r
 ------------------------------------------------------------------------------------------\r
 \r
 -- We need to keep track of the APV analog fifo fill level.\r
--- Two signals are used: \r
+-- Two signals are used:\r
 -- - an early "FRAME_REQD" to decrement to number of free entries,\r
--- - a late "FRAME_RCVD" to notify that a requested frame has been transfered \r
+-- - a late "FRAME_RCVD" to notify that a requested frame has been transfered\r
 --   from APV to the raw buffer.\r
 \r
 apv_free_down <= frm_reqd_in;\r
-apv_free_up   <= adc_last;    \r
+apv_free_up   <= adc_last;\r
 \r
 THE_APV_FREE_COUNTER_PROC: process( buf_clk_in )\r
 begin\r
@@ -313,14 +322,14 @@ begin
                if   ( buf_reset_in = '1' ) then\r
                        apv_free_ctr <= "10000";\r
                elsif( apv_free_down = '1' and apv_free_up = '0' ) then\r
-                       apv_free_ctr <= apv_free_ctr - 1; \r
+                       apv_free_ctr <= apv_free_ctr - 1;\r
                elsif( apv_free_down = '0' and apv_free_up = '1' ) then\r
                        apv_free_ctr <= apv_free_ctr + 1;\r
                end if;\r
        end if;\r
 end process THE_APV_FREE_COUNTER_PROC;\r
 \r
--- The raw data buffer is also to be watched carefully. \r
+-- The raw data buffer is also to be watched carefully.\r
 -- An early signal reserved on raw buffer page, while a late one releases one\r
 -- page to the buffer pool again.\r
 \r
@@ -333,7 +342,7 @@ begin
                if   ( buf_reset_in = '1' ) then\r
                        buf_free_ctr <= "10000";\r
                elsif( buf_free_down = '1' and buf_free_up = '0' ) then\r
-                       buf_free_ctr <= buf_free_ctr - 1; \r
+                       buf_free_ctr <= buf_free_ctr - 1;\r
                elsif( buf_free_down = '0' and buf_free_up = '1' ) then\r
                        buf_free_ctr <= buf_free_ctr + 1;\r
                end if;\r
@@ -351,8 +360,8 @@ THE_APV_BUF_ADDER: adder_6bit
 port map( DATAA   => sum_apv,\r
                  DATAB   => sum_buf,\r
                  CLOCK   => buf_clk_in,\r
-                 RESET   => buf_reset_in, \r
-                 CLOCKEN => '1', \r
+                 RESET   => buf_reset_in,\r
+                 CLOCKEN => '1',\r
                  RESULT  => sum_apv_buf\r
                 );\r
 \r
index 53606755295534210228fc751ccf78555deb3aaf..33e3ee7f069f1f90130c9a723c7b6c4d4c457b25 100644 (file)
@@ -7,56 +7,58 @@ library work;
 use work.adcmv3_components.all;\r
 \r
 entity apv_sync_handler is\r
-       port( CLK_APV_IN                : in    std_logic; -- 40MHz phase shifted clock\r
-                 RESET_APV_IN          : in    std_logic; -- synced reset signal (40MHz APV)\r
-                 CLK_IN                        : in    std_logic; -- 100MHz master clock\r
-                 RESET_IN                      : in    std_logic; \r
-                 APV_TRGSTART_IN       : in    std_logic; -- start signal for one sequence\r
-                 APV_TRGSEL_IN         : in    std_logic; -- select signal for one sequence\r
-                 APV_TRGDONE_OUT       : out   std_logic; -- APV trigger statemachine finished (100MHz)\r
-                 APV_TRG_OUT           : out   std_logic; -- TRG line signal (40MHz APV)\r
-                 APV_SYNC_OUT          : out   std_logic; -- signal for statemachines (40MHz APV)\r
-                 BSM_OUT                       : out   std_logic_vector(3 downto 0);\r
-                 DEBUG_OUT                     : out   std_logic_vector(15 downto 0)\r
-               );\r
+port(\r
+       CLK_APV_IN      : in    std_logic; -- 40MHz phase shifted clock\r
+       RESET_APV_IN    : in    std_logic; -- synced reset signal (40MHz APV)\r
+       CLK_IN          : in    std_logic; -- 100MHz master clock\r
+       RESET_IN        : in    std_logic;\r
+       APV_TRGSTART_IN : in    std_logic; -- start signal for one sequence\r
+       APV_TRGSEL_IN   : in    std_logic; -- select signal for one sequence\r
+       APV_TRGDONE_OUT : out   std_logic; -- APV trigger statemachine finished (100MHz)\r
+       APV_TRG_OUT     : out   std_logic; -- TRG line signal (40MHz APV)\r
+       APV_SYNC_OUT    : out   std_logic; -- signal for statemachines (40MHz APV)\r
+       BSM_OUT         : out   std_logic_vector(3 downto 0);\r
+       DEBUG_OUT       : out   std_logic_vector(15 downto 0)\r
+);\r
 end;\r
 \r
 architecture behavioral of apv_sync_handler is\r
 \r
-       -- state machine signals\r
-       type STATES is (SLEEP,START,T2,T1,T0,DLY0,DLY1,DLY2,DLY3,DONE);\r
-       signal CURRENT_STATE, NEXT_STATE: STATES;\r
+-- state machine signals\r
+type STATES is (SLEEP,START,T2,T1,T0,DLY0,DLY1,DLY2,DLY3,DONE);\r
+signal CURRENT_STATE, NEXT_STATE: STATES;\r
 \r
-       -- normal signals\r
-       signal apv_trgdone                      : std_logic;\r
-       signal apv_trgstart                     : std_logic;\r
-       signal comb_apv_trgstart        : std_logic;\r
-       -- state machine generated signals\r
-       signal next_apv_done            : std_logic;\r
-       signal apv_done                         : std_logic;\r
-       signal next_apv_trg                     : std_logic;\r
-       signal apv_trg                          : std_logic;\r
-       signal next_apv_sync            : std_logic;\r
-       signal apv_sync                         : std_logic;\r
+-- normal signals\r
+signal apv_trgdone          : std_logic;\r
+signal apv_trgstart         : std_logic;\r
+signal comb_apv_trgstart    : std_logic;\r
+-- state machine generated signals\r
+signal next_apv_done        : std_logic;\r
+signal apv_done             : std_logic;\r
+signal next_apv_trg         : std_logic;\r
+signal apv_trg              : std_logic;\r
+signal next_apv_sync        : std_logic;\r
+signal apv_sync             : std_logic;\r
 \r
 \r
 begin\r
 \r
 -- APV_TRGSTART_IN crosses a clock domain (100M -> 40M).\r
-comb_apv_trgstart <= apv_trgstart_in and apv_trgsel_in; \r
+comb_apv_trgstart <= apv_trgstart_in and apv_trgsel_in;\r
 \r
 THE_APVTRGSTART_SYNC: pulse_sync\r
-port map( CLK_A_IN             => clk_in,\r
-                 RESET_A_IN    => reset_in,\r
-                 PULSE_A_IN    => comb_apv_trgstart,\r
-                 CLK_B_IN              => clk_apv_in,\r
-                 RESET_B_IN    => reset_apv_in,\r
-                 PULSE_B_OUT   => apv_trgstart\r
-               );\r
+port map(\r
+       CLK_A_IN    => clk_in,\r
+       RESET_A_IN  => reset_in,\r
+       PULSE_A_IN  => comb_apv_trgstart,\r
+       CLK_B_IN    => clk_apv_in,\r
+       RESET_B_IN  => reset_apv_in,\r
+       PULSE_B_OUT => apv_trgstart\r
+);\r
 \r
 -- A statemachine handles all actions for creating the trigger sequence\r
 -- state registers\r
-STATE_MEM: process( clk_apv_in ) \r
+STATE_MEM: process( clk_apv_in )\r
 begin\r
        if( rising_edge(clk_apv_in) ) then\r
                if( reset_apv_in = '1' ) then\r
@@ -81,29 +83,29 @@ begin
        next_apv_trg   <= '0';\r
        next_apv_sync  <= '0';\r
        case CURRENT_STATE is\r
-               when SLEEP      =>      if( apv_trgstart = '1' ) then\r
+               when SLEEP  =>  if( apv_trgstart = '1' ) then\r
                                                        NEXT_STATE <= START;\r
                                                else\r
                                                        NEXT_STATE <= SLEEP;\r
                                                end if;\r
-               when START      =>      NEXT_STATE    <= T2;\r
+               when START  =>  NEXT_STATE    <= T2;\r
                                                next_apv_trg  <= '1';\r
-               when T2         =>      NEXT_STATE    <= T1;\r
-               when T1         =>      NEXT_STATE    <= T0;\r
+               when T2     =>  NEXT_STATE    <= T1;\r
+               when T1     =>  NEXT_STATE    <= T0;\r
                                                next_apv_trg  <= '1';\r
-               when T0         =>      NEXT_STATE    <= DLY0;\r
+               when T0     =>  NEXT_STATE    <= DLY0;\r
                                                next_apv_sync <= '1';\r
-               when DLY0       =>      NEXT_STATE    <= DLY1;\r
+               when DLY0   =>  NEXT_STATE    <= DLY1;\r
                                                next_apv_sync <= '1';\r
-               when DLY1       =>      NEXT_STATE    <= DLY2;\r
+               when DLY1   =>  NEXT_STATE    <= DLY2;\r
                                                next_apv_sync <= '1';\r
-               when DLY2       =>      NEXT_STATE    <= DLY3;\r
+               when DLY2   =>  NEXT_STATE    <= DLY3;\r
                                                next_apv_sync <= '1';\r
-               when DLY3       =>      NEXT_STATE    <= DONE;\r
+               when DLY3   =>  NEXT_STATE    <= DONE;\r
                                                next_apv_done <= '1';\r
                                                next_apv_sync <= '1';\r
-               when DONE       =>      NEXT_STATE <= SLEEP;\r
-               when others     =>      NEXT_STATE <= SLEEP;\r
+               when DONE   =>  NEXT_STATE <= SLEEP;\r
+               when others =>  NEXT_STATE <= SLEEP;\r
        end case;\r
 end process STATE_TRANSFORM;\r
 \r
@@ -111,36 +113,37 @@ end process STATE_TRANSFORM;
 STATE_DECODE: process( CURRENT_STATE )\r
 begin\r
        case CURRENT_STATE is\r
-               when SLEEP      =>      bsm_out <= x"0";\r
-               when START      =>      bsm_out <= x"1";\r
-               when T2         =>      bsm_out <= x"2";\r
-               when T1         =>      bsm_out <= x"3";\r
-               when T0         =>      bsm_out <= x"4";\r
-               when DLY0       =>      bsm_out <= x"5";\r
-               when DLY1       =>      bsm_out <= x"6";\r
-               when DLY2       =>      bsm_out <= x"7";\r
-               when DLY3       =>      bsm_out <= x"8";\r
-               when DONE       =>      bsm_out <= x"9";\r
-               when others     =>      bsm_out <= x"f";\r
+               when SLEEP  =>  bsm_out <= x"0";\r
+               when START  =>  bsm_out <= x"1";\r
+               when T2     =>  bsm_out <= x"2";\r
+               when T1     =>  bsm_out <= x"3";\r
+               when T0     =>  bsm_out <= x"4";\r
+               when DLY0   =>  bsm_out <= x"5";\r
+               when DLY1   =>  bsm_out <= x"6";\r
+               when DLY2   =>  bsm_out <= x"7";\r
+               when DLY3   =>  bsm_out <= x"8";\r
+               when DONE   =>  bsm_out <= x"9";\r
+               when others =>  bsm_out <= x"f";\r
        end case;\r
 end process STATE_DECODE;\r
 \r
 -- APV_TRGDONE_OUT crosses a clock domain (40M -> 100M).\r
 THE_APVTRGDONE_SYNC: pulse_sync\r
-port map( CLK_A_IN             => clk_apv_in,\r
-                 RESET_A_IN    => reset_apv_in,\r
-                 PULSE_A_IN    => apv_done,\r
-                 CLK_B_IN              => clk_in,\r
-                 RESET_B_IN    => reset_in,\r
-                 PULSE_B_OUT   => apv_trgdone\r
-               );\r
+port map(\r
+       CLK_A_IN    => clk_apv_in,\r
+       RESET_A_IN  => reset_apv_in,\r
+       PULSE_A_IN  => apv_done,\r
+       CLK_B_IN    => clk_in,\r
+       RESET_B_IN  => reset_in,\r
+       PULSE_B_OUT => apv_trgdone\r
+);\r
 \r
 -- output signals\r
 apv_trgdone_out <= apv_trgdone;\r
 apv_trg_out     <= apv_trg;\r
 apv_sync_out    <= apv_sync;\r
 \r
-debug_out(15 downto 0)  <= (others => '0');    \r
+debug_out(15 downto 0)  <= (others => '0');\r
 \r
 end behavioral;\r
 \r
index af130f0c50e4e608d8f93ab87219a8b846571c08..36063b423f1f97b779560056658b449f51bde9e7 100644 (file)
@@ -7,74 +7,76 @@ library work;
 use work.adcmv3_components.all;\r
 \r
 entity apv_trg_handler is\r
-       port( CLK_APV_IN                : in    std_logic; -- 40MHz phase shifted clock\r
-                 RESET_APV_IN          : in    std_logic; -- synced reset signal (40MHz APV)\r
-                 CLK_IN                        : in    std_logic; -- 100MHz master clock\r
-                 RESET_IN                      : in    std_logic; -- synced reset signal (100MHz master clock)\r
-                 APV_TRGSTART_IN       : in    std_logic; -- start signal for one sequence\r
-                 APV_TRGSEL_IN         : in    std_logic; -- select signal for one sequence\r
-                 APV_TRG_TODO_IN       : in    std_logic_vector(3 downto 0); -- number of APV triggers\r
-                 APV_TRG_DELAY_IN      : in    std_logic_vector(3 downto 0); -- delay between APV triggers\r
-                 APV_TRGDONE_OUT       : out   std_logic; -- APV trigger statemachine finished\r
-                 APV_TRG_OUT           : out   std_logic;\r
-                 APV_TRGSENT_OUT       : out   std_logic;\r
-                 BSM_OUT                       : out   std_logic_vector(3 downto 0);\r
-                 DEBUG_OUT                     : out   std_logic_vector(15 downto 0)\r
-               );\r
+port(\r
+       CLK_APV_IN          : in    std_logic; -- 40MHz phase shifted clock\r
+       RESET_APV_IN        : in    std_logic; -- synced reset signal (40MHz APV)\r
+       CLK_IN              : in    std_logic; -- 100MHz master clock\r
+       RESET_IN            : in    std_logic; -- synced reset signal (100MHz master clock)\r
+       APV_TRGSTART_IN     : in    std_logic; -- start signal for one sequence\r
+       APV_TRGSEL_IN       : in    std_logic; -- select signal for one sequence\r
+       APV_TRG_TODO_IN     : in    std_logic_vector(3 downto 0); -- number of APV triggers\r
+       APV_TRG_DELAY_IN    : in    std_logic_vector(3 downto 0); -- delay between APV triggers\r
+       APV_TRGDONE_OUT     : out   std_logic; -- APV trigger statemachine finished\r
+       APV_TRG_OUT         : out   std_logic;\r
+       APV_TRGSENT_OUT     : out   std_logic;\r
+       BSM_OUT             : out   std_logic_vector(3 downto 0);\r
+       DEBUG_OUT           : out   std_logic_vector(15 downto 0)\r
+);\r
 end;\r
 \r
 architecture behavioral of apv_trg_handler is\r
 \r
-       -- state machine signals\r
-       type STATES is (SLEEP,START,T2,T1,T0,DEL,DONE);\r
-       signal CURRENT_STATE, NEXT_STATE: STATES;\r
-\r
-       -- normal signals\r
-       signal apv_trgstart                     : std_logic;\r
-       signal next_apv_trgstart        : std_logic;\r
-       signal todo_ctr                         : std_logic_vector(3 downto 0);\r
-       signal comb_todo_done           : std_logic;\r
-       signal delay_ctr                        : std_logic_vector(3 downto 0);\r
-       signal comb_delay_done          : std_logic;\r
-       signal apv_trgsent                      : std_logic;\r
-       signal apv_trgdone                      : std_logic;\r
-\r
-       -- State machine generates signals\r
-       signal next_todo_ctr_ce         : std_logic;\r
-       signal todo_ctr_ce                      : std_logic;\r
-       signal next_delay_ctr_ce        : std_logic;\r
-       signal delay_ctr_ce                     : std_logic;\r
-       signal next_delay_ctr_ld        : std_logic;\r
-       signal delay_ctr_ld                     : std_logic;\r
-       signal next_apv_done            : std_logic;\r
-       signal apv_done                         : std_logic;\r
-       signal next_apv_trgcnt          : std_logic;\r
-       signal apv_trgcnt                       : std_logic;\r
-       signal next_apv_trg                     : std_logic;\r
-       signal apv_trg                          : std_logic;\r
+-- state machine signals\r
+type STATES is (SLEEP,START,T2,T1,T0,DEL,DONE);\r
+signal CURRENT_STATE, NEXT_STATE: STATES;\r
+\r
+-- normal signals\r
+signal apv_trgstart         : std_logic;\r
+signal next_apv_trgstart    : std_logic;\r
+signal todo_ctr             : std_logic_vector(3 downto 0);\r
+signal comb_todo_done       : std_logic;\r
+signal delay_ctr            : std_logic_vector(3 downto 0);\r
+signal comb_delay_done      : std_logic;\r
+signal apv_trgsent          : std_logic;\r
+signal apv_trgdone          : std_logic;\r
+\r
+-- State machine generates signals\r
+signal next_todo_ctr_ce     : std_logic;\r
+signal todo_ctr_ce          : std_logic;\r
+signal next_delay_ctr_ce    : std_logic;\r
+signal delay_ctr_ce         : std_logic;\r
+signal next_delay_ctr_ld    : std_logic;\r
+signal delay_ctr_ld         : std_logic;\r
+signal next_apv_done        : std_logic;\r
+signal apv_done             : std_logic;\r
+signal next_apv_trgcnt      : std_logic;\r
+signal apv_trgcnt           : std_logic;\r
+signal next_apv_trg         : std_logic;\r
+signal apv_trg              : std_logic;\r
 \r
 begin\r
 \r
 -- APV_TRGSTART_IN crosses a clock domain (100M -> 40M).\r
-next_apv_trgstart <= apv_trgstart_in and apv_trgsel_in; \r
+next_apv_trgstart <= apv_trgstart_in and apv_trgsel_in;\r
 \r
 THE_APVTRGSTART_SYNC: pulse_sync\r
-port map( CLK_A_IN             => clk_in,\r
-                 RESET_A_IN    => reset_in,\r
-                 PULSE_A_IN    => next_apv_trgstart,\r
-                 CLK_B_IN              => clk_apv_in,\r
-                 RESET_B_IN    => reset_apv_in,\r
-                 PULSE_B_OUT   => apv_trgstart\r
-               );\r
+port map(\r
+       CLK_A_IN    => clk_in,\r
+       RESET_A_IN  => reset_in,\r
+       PULSE_A_IN  => next_apv_trgstart,\r
+       CLK_B_IN    => clk_apv_in,\r
+       RESET_B_IN  => reset_apv_in,\r
+       PULSE_B_OUT => apv_trgstart\r
+);\r
 \r
 -- A statemachine handles all actions for creating the trigger sequence (40MHz domain)\r
 -- state registers\r
-STATE_MEM: process( clk_apv_in ) \r
+STATE_MEM: process( clk_apv_in )\r
 begin\r
        if( rising_edge(clk_apv_in) ) then\r
                if( reset_apv_in = '1' ) then\r
                        CURRENT_STATE  <= SLEEP;\r
-                       todo_ctr_ce        <= '0';\r
+                       todo_ctr_ce    <= '0';\r
                        delay_ctr_ce   <= '0';\r
                        delay_ctr_ld   <= '0';\r
                        apv_done       <= '0';\r
@@ -103,12 +105,12 @@ begin
        next_apv_trg      <= '0';\r
        next_apv_trgcnt   <= '0';\r
        case CURRENT_STATE is\r
-               when SLEEP      =>      if( apv_trgstart = '1' ) then\r
+               when SLEEP  =>  if( apv_trgstart = '1' ) then\r
                                                        NEXT_STATE <= START;\r
                                                else\r
                                                        NEXT_STATE <= SLEEP;\r
                                                end if;\r
-               when START      =>      if( comb_todo_done = '1' ) then\r
+               when START  =>  if( comb_todo_done = '1' ) then\r
                                                        NEXT_STATE    <= DONE;\r
                                                        next_apv_done <= '1';\r
                                                else\r
@@ -116,12 +118,12 @@ begin
                                                        next_delay_ctr_ld <= '1';\r
                                                        next_apv_trg      <= '1';\r
                                                end if;\r
-               when T2         =>      NEXT_STATE       <= T1;\r
+               when T2     =>  NEXT_STATE       <= T1;\r
                                                next_todo_ctr_ce <= '1';\r
                                                next_apv_trgcnt  <= '1';\r
-               when T1         =>      NEXT_STATE        <= T0;\r
+               when T1     =>  NEXT_STATE        <= T0;\r
                                                next_delay_ctr_ce <= '1';\r
-               when T0         =>      if   ( (comb_todo_done = '1') ) then\r
+               when T0     =>  if   ( (comb_todo_done = '1') ) then\r
                                                        NEXT_STATE    <= DONE;\r
                                                        next_apv_done <= '1';\r
                                                elsif( (comb_todo_done = '0') and (comb_delay_done = '0') ) then\r
@@ -132,7 +134,7 @@ begin
                                                        next_delay_ctr_ld <= '1';\r
                                                        next_apv_trg      <= '1';\r
                                                end if;\r
-               when DEL        =>      if( comb_delay_done = '1' ) then\r
+               when DEL    =>  if( comb_delay_done = '1' ) then\r
                                                        NEXT_STATE        <= T2;\r
                                                        next_delay_ctr_ld <= '1';\r
                                                        next_apv_trg      <= '1';\r
@@ -140,8 +142,8 @@ begin
                                                        NEXT_STATE        <= DEL;\r
                                                        next_delay_ctr_ce <= '1';\r
                                                end if;\r
-               when DONE       =>      NEXT_STATE <= SLEEP;\r
-               when others     =>      NEXT_STATE <= SLEEP;\r
+               when DONE   =>  NEXT_STATE <= SLEEP;\r
+               when others =>  NEXT_STATE <= SLEEP;\r
        end case;\r
 end process STATE_TRANSFORM;\r
 \r
@@ -149,14 +151,14 @@ end process STATE_TRANSFORM;
 STATE_DECODE: process( CURRENT_STATE )\r
 begin\r
        case CURRENT_STATE is\r
-               when SLEEP      =>      bsm_out <= x"0";\r
-               when START      =>      bsm_out <= x"1";\r
-               when T2         =>      bsm_out <= x"2";\r
-               when T1         =>      bsm_out <= x"3";\r
-               when T0         =>      bsm_out <= x"4";\r
-               when DEL        =>      bsm_out <= x"5";\r
-               when DONE       =>      bsm_out <= x"6";\r
-               when others     =>      bsm_out <= x"f";\r
+               when SLEEP  =>  bsm_out <= x"0";\r
+               when START  =>  bsm_out <= x"1";\r
+               when T2     =>  bsm_out <= x"2";\r
+               when T1     =>  bsm_out <= x"3";\r
+               when T0     =>  bsm_out <= x"4";\r
+               when DEL    =>  bsm_out <= x"5";\r
+               when DONE   =>  bsm_out <= x"6";\r
+               when others =>  bsm_out <= x"f";\r
        end case;\r
 end process STATE_DECODE;\r
 \r
@@ -192,31 +194,33 @@ comb_delay_done <= '1' when (delay_ctr = x"0") else '0';
 \r
 -- APV_TRGSENT_OUT crosses a clock domain (40M -> 100M).\r
 THE_APVTRGSENT_SYNC: pulse_sync\r
-port map( CLK_A_IN             => clk_apv_in,\r
-                 RESET_A_IN    => reset_apv_in, \r
-                 PULSE_A_IN    => apv_trgcnt,\r
-                 CLK_B_IN              => clk_in,\r
-                 RESET_B_IN    => reset_in,\r
-                 PULSE_B_OUT   => apv_trgsent\r
-               );\r
+port map(\r
+       CLK_A_IN    => clk_apv_in,\r
+       RESET_A_IN  => reset_apv_in,\r
+       PULSE_A_IN  => apv_trgcnt,\r
+       CLK_B_IN    => clk_in,\r
+       RESET_B_IN  => reset_in,\r
+       PULSE_B_OUT => apv_trgsent\r
+);\r
 \r
 -- APV_TRGDONE_OUT crosses a clock domain (40M -> 100M).\r
 THE_APVTRGDONE_SYNC: pulse_sync\r
-port map( CLK_A_IN             => clk_apv_in,\r
-                 RESET_A_IN    => reset_apv_in,\r
-                 PULSE_A_IN    => apv_done,\r
-                 CLK_B_IN              => clk_in,\r
-                 RESET_B_IN    => reset_in,\r
-                 PULSE_B_OUT   => apv_trgdone\r
-               );\r
+port map(\r
+       CLK_A_IN    => clk_apv_in,\r
+       RESET_A_IN  => reset_apv_in,\r
+       PULSE_A_IN  => apv_done,\r
+       CLK_B_IN    => clk_in,\r
+       RESET_B_IN  => reset_in,\r
+       PULSE_B_OUT => apv_trgdone\r
+);\r
 \r
 -- output signals\r
 apv_trgdone_out <= apv_trgdone;\r
 apv_trg_out     <= apv_trg;\r
 apv_trgsent_out <= apv_trgsent;\r
 \r
-debug_out(15 downto 12) <= todo_ctr;   \r
-debug_out(11 downto 8)  <= delay_ctr;  \r
+debug_out(15 downto 12) <= todo_ctr;\r
+debug_out(11 downto 8)  <= delay_ctr;\r
 debug_out(7)            <= delay_ctr_ld;\r
 debug_out(6)            <= '0';\r
 debug_out(5)            <= comb_delay_done;\r
index 8b43a329b4c2915a3eb53aad155772b52b8d230e..2ce29601e2dba024b877c30e9d97e2cbdd49f238 100644 (file)
@@ -7,97 +7,101 @@ library work;
 use work.adcmv3_components.all;\r
 \r
 entity apv_trgctrl is\r
-       port( CLK_IN                            : in    std_logic; -- 100MHz master clock\r
-                 RESET_IN                              : in    std_logic; -- 100MHz clock domain reset\r
-                 CLK_APV_IN                    : in    std_logic; -- 40MHz phase shifted clock\r
-                 -- Triggers\r
-                 SYNC_TRG_IN                   : in    std_logic; -- 100MHz signal to SYNC APVs\r
-                 TIME_TRG_IN                   : in    std_logic_vector(3 downto 0); -- timing trigger inputs\r
-                 TRB_TRG_IN                    : in    std_logic_vector(3 downto 0); -- TRB trigger inputs\r
-                 STILL_BUSY_IN                 : in    std_logic; -- set to '1' if any buffer is in danger of overflow\r
-                 TRG_FOUND_OUT                 : out   std_logic; \r
-                 -- slow control settings\r
-                 TRG_MAX_OUT                   : out   std_logic_vector(3 downto 0); -- maximum number of triggers/event\r
-                 TRG_3_TODO_IN                 : in    std_logic_vector(3 downto 0); -- APV triggers on trigger 3\r
-                 TRG_3_DELAY_IN                : in    std_logic_vector(3 downto 0); -- delay between triggers\r
-                 TRG_2_TODO_IN                 : in    std_logic_vector(3 downto 0); -- APV triggers on trigger 2\r
-                 TRG_2_DELAY_IN                : in    std_logic_vector(3 downto 0); -- delay between triggers\r
-                 TRG_1_TODO_IN                 : in    std_logic_vector(3 downto 0); -- APV triggers on trigger 1\r
-                 TRG_1_DELAY_IN                : in    std_logic_vector(3 downto 0); -- delay between triggers\r
-                 TRG_0_TODO_IN                 : in    std_logic_vector(3 downto 0); -- APV triggers on trigger 0\r
-                 TRG_0_DELAY_IN                : in    std_logic_vector(3 downto 0); -- delay between triggers\r
-                 TRG_SETUP_IN                  : in    std_logic_vector(7 downto 0); -- setup of external triggers\r
-                 -- TRB LVL1 signals\r
-                 TRB_TTAG_IN                   : in    std_logic_vector(15 downto 0); -- TRB LVL1 trigger tag\r
-                 TRB_TRND_IN                   : in    std_logic_vector(7 downto 0); -- TRB LVL1 random tag\r
-                 TRB_TTYPE_IN                  : in    std_logic_vector(3 downto 0); -- TRB LVL1 trigger type\r
-                 TRB_TRGRCVD_IN                : in    std_logic; -- TRB LVL1 trigger received\r
-                 TRB_MISSING_OUT               : out   std_logic; -- TRB LVL1 trigger arrived, but has no corresponding timing trigger\r
-                 TRB_RELEASE_OUT               : out   std_logic; -- release TRB LVL1 channel\r
-                 TRB_RST_COUNTER_IN    : in    std_logic; -- reset timing trigger counter\r
-                 TRB_COUNTER_OUT               : out   std_logic_vector(15 downto 0); -- timing trigger counter\r
-                 -- EDS signals\r
-                 EDS_DATA_OUT                  : out   std_logic_vector(39 downto 0); -- EventDataSheet (tm) data word\r
-                 EDS_AVAIL_OUT                 : out   std_logic; -- EDS valid, APV trigger done\r
-                 EDS_DONE_IN                   : in    std_logic; -- release current EDS buffer\r
-                 EDS_FULL_OUT                  : out   std_logic; -- EDS buffer is full\r
-                 EDS_LEVEL_OUT                 : out   std_logic_vector(4 downto 0);\r
-                 FRM_REQD_OUT                  : out   std_logic; -- frame requested, (level counter decrement)\r
-                 -- APV signals        \r
-                 APV_TRG_OUT                   : out   std_logic;\r
-                 APV_SYNC_OUT                  : out   std_logic;\r
-                 DEBUG_OUT                             : out   std_logic_vector(63 downto 0)\r
-               );\r
+port(\r
+       CLK_IN              : in    std_logic; -- 100MHz master clock\r
+       RESET_IN            : in    std_logic; -- 100MHz clock domain reset\r
+       CLK_APV_IN          : in    std_logic; -- 40MHz phase shifted clock\r
+       -- Triggers\r
+       SYNC_TRG_IN         : in    std_logic; -- 100MHz signal to SYNC APVs\r
+       TIME_TRG_IN         : in    std_logic_vector(3 downto 0); -- timing trigger inputs\r
+       TRB_TRG_IN          : in    std_logic_vector(3 downto 0); -- TRB trigger inputs\r
+       STILL_BUSY_IN       : in    std_logic; -- set to '1' if any buffer is in danger of overflow\r
+       TRG_FOUND_OUT       : out   std_logic;\r
+       SECTOR_IN           : in    std_logic_vector(2 downto 0); -- sector number\r
+       -- slow control settings\r
+       TRG_MAX_OUT         : out   std_logic_vector(3 downto 0); -- maximum number of triggers/event\r
+       TRG_3_TODO_IN       : in    std_logic_vector(3 downto 0); -- APV triggers on trigger 3\r
+       TRG_3_DELAY_IN      : in    std_logic_vector(3 downto 0); -- delay between triggers\r
+       TRG_2_TODO_IN       : in    std_logic_vector(3 downto 0); -- APV triggers on trigger 2\r
+       TRG_2_DELAY_IN      : in    std_logic_vector(3 downto 0); -- delay between triggers\r
+       TRG_1_TODO_IN       : in    std_logic_vector(3 downto 0); -- APV triggers on trigger 1\r
+       TRG_1_DELAY_IN      : in    std_logic_vector(3 downto 0); -- delay between triggers\r
+       TRG_0_TODO_IN       : in    std_logic_vector(3 downto 0); -- APV triggers on trigger 0\r
+       TRG_0_DELAY_IN      : in    std_logic_vector(3 downto 0); -- delay between triggers\r
+       TRG_SETUP_IN        : in    std_logic_vector(7 downto 0); -- setup of external triggers\r
+       -- TRB LVL1 signals\r
+       TRB_TTAG_IN         : in    std_logic_vector(15 downto 0); -- TRB LVL1 trigger tag\r
+       TRB_TRND_IN         : in    std_logic_vector(7 downto 0); -- TRB LVL1 random tag\r
+       TRB_TTYPE_IN        : in    std_logic_vector(3 downto 0); -- TRB LVL1 trigger type\r
+       TRB_TINFO_IN        : in    std_logic_vector(23 downto 0); -- TRB LVL1 trigger information\r
+       TRB_TRGRCVD_IN      : in    std_logic; -- TRB LVL1 trigger received\r
+       TRB_MISSING_OUT     : out   std_logic; -- TRB LVL1 trigger arrived, but has no corresponding timing trigger\r
+       TRB_RELEASE_OUT     : out   std_logic; -- release TRB LVL1 channel\r
+       TRB_COUNTER_OUT     : out   std_logic_vector(15 downto 0); -- local timing trigger counter\r
+       TRB_COUNTER_IN      : in    std_logic_vector(15 downto 0); -- TRB counter input\r
+       TRB_LD_COUNTER_IN   : in    std_logic; -- load local counter with TRB counter value\r
+       -- EDS signals\r
+       EDS_DATA_OUT        : out   std_logic_vector(39 downto 0); -- EventDataSheet (tm) data word\r
+       EDS_AVAIL_OUT       : out   std_logic; -- EDS valid, APV trigger done\r
+       EDS_DONE_IN         : in    std_logic; -- release current EDS buffer\r
+       EDS_FULL_OUT        : out   std_logic; -- EDS buffer is full\r
+       EDS_LEVEL_OUT       : out   std_logic_vector(4 downto 0);\r
+       FRM_REQD_OUT        : out   std_logic; -- frame requested, (level counter decrement)\r
+       -- APV signals\r
+       APV_TRG_OUT         : out   std_logic;\r
+       APV_SYNC_OUT        : out   std_logic;\r
+       DEBUG_OUT           : out   std_logic_vector(63 downto 0)\r
+);\r
 end;\r
 \r
 architecture behavioral of apv_trgctrl is\r
 \r
-       -- Placer Directives\r
-       attribute HGROUP : string;\r
-       -- for whole architecture\r
-       attribute HGROUP of behavioral : architecture  is "APV_TRG_CTRL_group";\r
-\r
-       -- normal signals\r
-       signal apv_trgsel                       : std_logic_vector(3 downto 0);\r
-       signal apv_trgstart                     : std_logic;\r
-       signal apv_trgdone                      : std_logic_vector(3 downto 0);\r
-       signal next_apv_trgdone_all     : std_logic;\r
-       signal apv_trgdone_all          : std_logic;\r
-       signal apv_trg                          : std_logic_vector(3 downto 0);\r
-       signal next_apv_trg_all         : std_logic;\r
-       signal apv_trg_all                      : std_logic;\r
-       signal apv_clk_rst                      : std_logic; -- 40MHz sync'ed reset signal\r
-\r
-       signal sc_trg_stretch           : std_logic_vector(3 downto 0);\r
-       signal maximum_trg                      : std_logic_vector(3 downto 0);\r
-\r
-       -- EDS fill signals\r
-       signal atc_eds_data                     : std_logic_vector(39 downto 0);\r
-       signal atc_eds_start            : std_logic;\r
-       signal atc_eds_we                       : std_logic;\r
-       signal eds_data                         : std_logic_vector(39 downto 0);\r
-       signal eds_full                         : std_logic;\r
-       signal eds_avail                        : std_logic;\r
-       signal eds_level                        : std_logic_vector(4 downto 0);\r
-       signal trb_release                      : std_logic;\r
-       signal trb_missing                      : std_logic;\r
-       signal trg_found                        : std_logic;\r
-\r
-       signal test_eds_data            : std_logic_vector(39 downto 0);\r
-\r
-       -- APV signals  \r
-       signal apv_trgsent                      : std_logic_vector(3 downto 0);\r
-       signal next_apv_trgsent_all     : std_logic;\r
-       signal apv_trgsent_all          : std_logic;\r
-       signal apv_sync                         : std_logic;\r
-       signal apv_sync_signal          : std_logic;\r
-       \r
-       signal trb_counter                      : std_logic_vector(15 downto 0);\r
-       signal busy_release                     : std_logic;\r
-\r
-       signal debug                            : std_logic_vector(63 downto 0);\r
-       signal bsm                                      : std_logic_vector(7 downto 0);\r
-       \r
+-- Placer Directives\r
+attribute HGROUP : string;\r
+-- for whole architecture\r
+attribute HGROUP of behavioral : architecture  is "APV_TRG_CTRL_group";\r
+\r
+-- normal signals\r
+signal apv_trgsel           : std_logic_vector(3 downto 0);\r
+signal apv_trgstart         : std_logic;\r
+signal apv_trgdone          : std_logic_vector(3 downto 0);\r
+signal next_apv_trgdone_all : std_logic;\r
+signal apv_trgdone_all      : std_logic;\r
+signal apv_trg              : std_logic_vector(3 downto 0);\r
+signal next_apv_trg_all     : std_logic;\r
+signal apv_trg_all          : std_logic;\r
+signal apv_clk_rst          : std_logic; -- 40MHz sync'ed reset signal\r
+\r
+signal sc_trg_stretch       : std_logic_vector(3 downto 0);\r
+signal maximum_trg          : std_logic_vector(3 downto 0);\r
+\r
+-- EDS fill signals\r
+signal atc_eds_data         : std_logic_vector(39 downto 0);\r
+signal atc_eds_start        : std_logic;\r
+signal atc_eds_we           : std_logic;\r
+signal eds_data             : std_logic_vector(39 downto 0);\r
+signal eds_full             : std_logic;\r
+signal eds_avail            : std_logic;\r
+signal eds_level            : std_logic_vector(4 downto 0);\r
+signal trb_release          : std_logic;\r
+signal trb_missing          : std_logic;\r
+signal trg_found            : std_logic;\r
+\r
+signal test_eds_data        : std_logic_vector(39 downto 0);\r
+\r
+-- APV signals\r
+signal apv_trgsent          : std_logic_vector(3 downto 0);\r
+signal next_apv_trgsent_all : std_logic;\r
+signal apv_trgsent_all      : std_logic;\r
+signal apv_sync             : std_logic;\r
+signal apv_sync_signal      : std_logic;\r
+\r
+signal trb_counter          : std_logic_vector(15 downto 0);\r
+signal busy_release         : std_logic;\r
+\r
+signal debug                : std_logic_vector(63 downto 0);\r
+signal bsm                  : std_logic_vector(7 downto 0);\r
+\r
 begin\r
 \r
 ---------------------------------------------------------------------------\r
@@ -111,43 +115,48 @@ debug(39 downto 0)  <= test_eds_data;
 -- RESET signal clock domain crossing (100MHz sysclk -> 40MHz APV clock)\r
 ---------------------------------------------------------------------------\r
 THE_RESET_SYNC: state_sync\r
-port map( STATE_A_IN           => reset_in,\r
-                 CLK_B_IN                      => clk_apv_in,\r
-                 RESET_B_IN            => '0',\r
-                 STATE_B_OUT           => apv_clk_rst\r
-               );\r
-               \r
+port map(\r
+       STATE_A_IN      => reset_in,\r
+       CLK_B_IN        => clk_apv_in,\r
+       RESET_B_IN      => '0',\r
+       STATE_B_OUT     => apv_clk_rst\r
+);\r
+\r
 ---------------------------------------------------------------------------\r
 -- TRB trigger (one clock pulse) stretchers\r
 ---------------------------------------------------------------------------\r
 SC_TRG0_STRECH: pulse_stretch\r
-port map( CLK_IN                       => clk_in,\r
-                 RESET_IN                      => reset_in,\r
-                 START_IN                      => trb_trg_in(0),\r
-                 PULSE_OUT                     => sc_trg_stretch(0),\r
-                 DEBUG_OUT                     => open\r
-               );\r
+port map(\r
+       CLK_IN      => clk_in,\r
+       RESET_IN    => reset_in,\r
+       START_IN    => trb_trg_in(0),\r
+       PULSE_OUT   => sc_trg_stretch(0),\r
+       DEBUG_OUT   => open\r
+);\r
 SC_TRG1_STRECH: pulse_stretch\r
-port map( CLK_IN                       => clk_in,\r
-                 RESET_IN                      => reset_in,\r
-                 START_IN                      => trb_trg_in(1),\r
-                 PULSE_OUT                     => sc_trg_stretch(1),\r
-                 DEBUG_OUT                     => open\r
-               );\r
+port map(\r
+       CLK_IN      => clk_in,\r
+       RESET_IN    => reset_in,\r
+       START_IN    => trb_trg_in(1),\r
+       PULSE_OUT   => sc_trg_stretch(1),\r
+       DEBUG_OUT   => open\r
+);\r
 SC_TRG2_STRECH: pulse_stretch\r
-port map( CLK_IN                       => clk_in,\r
-                 RESET_IN                      => reset_in,\r
-                 START_IN                      => trb_trg_in(2),\r
-                 PULSE_OUT                     => sc_trg_stretch(2),\r
-                 DEBUG_OUT                     => open\r
-               );\r
+port map(\r
+       CLK_IN      => clk_in,\r
+       RESET_IN    => reset_in,\r
+       START_IN    => trb_trg_in(2),\r
+       PULSE_OUT   => sc_trg_stretch(2),\r
+       DEBUG_OUT   => open\r
+);\r
 SC_TRG3_STRECH: pulse_stretch\r
-port map( CLK_IN                       => clk_in,\r
-                 RESET_IN                      => reset_in,\r
-                 START_IN                      => trb_trg_in(3),\r
-                 PULSE_OUT                     => sc_trg_stretch(3),\r
-                 DEBUG_OUT                     => open\r
-               );\r
+port map(\r
+       CLK_IN      => clk_in,\r
+       RESET_IN    => reset_in,\r
+       START_IN    => trb_trg_in(3),\r
+       PULSE_OUT   => sc_trg_stretch(3),\r
+       DEBUG_OUT   => open\r
+);\r
 \r
 ---------------------------------------------------------------------------\r
 -- Busy handling\r
@@ -165,48 +174,53 @@ end process THE_SYNC_PROC;
 -- for generation of APV TRG pulse sequences (like 1-0-0, or 1-0-1, etc.)\r
 ---------------------------------------------------------------------------\r
 THE_REAL_TRG_HANDLER: real_trg_handler\r
-port map( CLK_IN                               => clk_in,\r
-                 RESET_IN                              => reset_in, \r
-                 TIME_TRG_IN                   => time_trg_in,\r
-                 TRB_TRG_IN                    => sc_trg_stretch,\r
-                 APV_TRGDONE_IN                => apv_trgdone_all,\r
-                 TRG_3_TODO_IN                 => trg_3_todo_in,\r
-                 TRG_2_TODO_IN                 => trg_2_todo_in,\r
-                 TRG_1_TODO_IN                 => trg_1_todo_in,\r
-                 TRG_0_TODO_IN                 => trg_0_todo_in,\r
-                 TRG_SETUP_IN                  => trg_setup_in,\r
-                 TRG_FOUND_OUT                 => trg_found,\r
-                 TRB_TTAG_IN                   => trb_ttag_in,\r
-                 TRB_TRND_IN                   => trb_trnd_in,\r
-                 TRB_TTYPE_IN                  => trb_ttype_in,\r
-                 TRB_TRGRCVD_IN                => trb_trgrcvd_in,\r
-                 TRB_MISSING_OUT               => trb_missing,\r
-                 BUSY_RELEASE_IN               => busy_release,\r
-                 RST_LVL1_COUNTER_IN   => trb_rst_counter_in,\r
-                 LVL1_COUNTER_OUT              => trb_counter,\r
-                 APV_TRGSEL_OUT                => apv_trgsel,\r
-                 APV_TRGSTART_OUT              => apv_trgstart,\r
-                 EDS_DATA_OUT                  => atc_eds_data,\r
-                 EDS_START_OUT                 => atc_eds_start, -- just for debugging\r
-                 EDS_WE_OUT                    => atc_eds_we,\r
-                 EDS_READY_OUT                 => trb_release,\r
-                 DBG_FRMCTR_OUT                => open,\r
-                 BSM_OUT                               => bsm, --open,\r
-                 DEBUG_OUT                             => open --debug\r
-               );\r
+port map(\r
+       CLK_IN              => clk_in,\r
+       RESET_IN            => reset_in,\r
+       TIME_TRG_IN         => time_trg_in,\r
+       TRB_TRG_IN          => sc_trg_stretch,\r
+       APV_TRGDONE_IN      => apv_trgdone_all,\r
+       TRG_3_TODO_IN       => trg_3_todo_in,\r
+       TRG_2_TODO_IN       => trg_2_todo_in,\r
+       TRG_1_TODO_IN       => trg_1_todo_in,\r
+       TRG_0_TODO_IN       => trg_0_todo_in,\r
+       TRG_SETUP_IN        => trg_setup_in,\r
+       TRG_FOUND_OUT       => trg_found,\r
+       SECTOR_IN           => sector_in,\r
+       TRB_TTAG_IN         => trb_ttag_in,\r
+       TRB_TRND_IN         => trb_trnd_in,\r
+       TRB_TTYPE_IN        => trb_ttype_in,\r
+       TRB_TINFO_IN        => trb_tinfo_in,\r
+       TRB_TRGRCVD_IN      => trb_trgrcvd_in,\r
+       TRB_MISSING_OUT     => trb_missing,\r
+       BUSY_RELEASE_IN     => busy_release,\r
+       LVL1_COUNTER_OUT    => trb_counter,\r
+       LVL1_COUNTER_IN     => trb_counter_in,\r
+       LVL1_LD_COUNTER_IN  => trb_ld_counter_in,\r
+       APV_TRGSEL_OUT      => apv_trgsel,\r
+       APV_TRGSTART_OUT    => apv_trgstart,\r
+       EDS_DATA_OUT        => atc_eds_data,\r
+       EDS_START_OUT       => atc_eds_start, -- just for debugging\r
+       EDS_WE_OUT          => atc_eds_we,\r
+       EDS_READY_OUT       => trb_release,\r
+       DBG_FRMCTR_OUT      => open,\r
+       BSM_OUT             => bsm, --open,\r
+       DEBUG_OUT           => open --debug\r
+);\r
 \r
 -- automatically determine the maximum amount of APV frames per trigger\r
 -- mind the delay in this block!\r
 THE_MAX_TRG: max_data\r
-port map( CLK_IN                               => clk_in,\r
-                 RESET_IN                              => reset_in,\r
-                 TODO_3_IN                             => trg_3_todo_in,\r
-                 TODO_2_IN                             => trg_2_todo_in,\r
-                 TODO_1_IN                             => trg_1_todo_in,\r
-                 TODO_0_IN                             => trg_0_todo_in,\r
-                 TODO_MAX_OUT                  => maximum_trg,\r
-                 DEBUG_OUT                             => open\r
-               );\r
+port map(\r
+       CLK_IN          => clk_in,\r
+       RESET_IN        => reset_in,\r
+       TODO_3_IN       => trg_3_todo_in,\r
+       TODO_2_IN       => trg_2_todo_in,\r
+       TODO_1_IN       => trg_1_todo_in,\r
+       TODO_0_IN       => trg_0_todo_in,\r
+       TODO_MAX_OUT    => maximum_trg,\r
+       DEBUG_OUT       => open\r
+);\r
 \r
 -- Only for storing last EDS for debugging!\r
 THE_TEST_EDS_DATA_PROC: process( clk_in )\r
@@ -222,110 +236,116 @@ end process THE_TEST_EDS_DATA_PROC;
 -- EDS buffer with fill level information\r
 ---------------------------------------------------------------------------\r
 THE_EDS_BUF: eds_buf\r
-port map( CLK_IN                       => clk_in,\r
-                 RESET_IN                      => reset_in,\r
-                 EDS_DATA_IN           => atc_eds_data,                -- data from trigger handler\r
-                 EDS_WE_IN                     => atc_eds_we,                  -- write enable from trigger handler\r
-                 EDS_DONE_IN           => eds_done_in,                 -- release current EDS page\r
-                 EDS_DATA_OUT          => eds_data,                    -- current EDS data out\r
-                 EDS_AVAILABLE_OUT     => eds_avail,                   -- current EDS is valid\r
-                 BUF_FULL_OUT          => eds_full,                    -- EDS buffer is full\r
-                 BUF_LEVEL_OUT         => eds_level,                   -- for debugging\r
-                 DEBUG_OUT                     => open\r
-               );\r
+port map(\r
+       CLK_IN              => clk_in,\r
+       RESET_IN            => reset_in,\r
+       EDS_DATA_IN         => atc_eds_data,        -- data from trigger handler\r
+       EDS_WE_IN           => atc_eds_we,          -- write enable from trigger handler\r
+       EDS_DONE_IN         => eds_done_in,         -- release current EDS page\r
+       EDS_DATA_OUT        => eds_data,            -- current EDS data out\r
+       EDS_AVAILABLE_OUT   => eds_avail,           -- current EDS is valid\r
+       BUF_FULL_OUT        => eds_full,            -- EDS buffer is full\r
+       BUF_LEVEL_OUT       => eds_level,           -- for debugging\r
+       DEBUG_OUT           => open\r
+);\r
 \r
 ---------------------------------------------------------------------------\r
 -- Trigger input 3: normal trigger\r
 ---------------------------------------------------------------------------\r
 THE_APV_TRG_HANDLER_3: apv_trg_handler\r
-port map( CLK_APV_IN           => clk_apv_in,\r
-                 RESET_APV_IN          => apv_clk_rst,\r
-                 CLK_IN                        => clk_in,\r
-                 RESET_IN                      => reset_in,\r
-                 APV_TRGSTART_IN       => apv_trgstart,\r
-                 APV_TRGSEL_IN         => apv_trgsel(3),\r
-                 APV_TRG_TODO_IN       => trg_3_todo_in,\r
-                 APV_TRG_DELAY_IN      => trg_3_delay_in,\r
-                 APV_TRGDONE_OUT       => apv_trgdone(3),\r
-                 APV_TRG_OUT           => apv_trg(3),\r
-                 APV_TRGSENT_OUT       => apv_trgsent(3),\r
-                 BSM_OUT                       => open,\r
-                 DEBUG_OUT                     => open\r
-               );\r
+port map(\r
+       CLK_APV_IN          => clk_apv_in,\r
+       RESET_APV_IN        => apv_clk_rst,\r
+       CLK_IN              => clk_in,\r
+       RESET_IN            => reset_in,\r
+       APV_TRGSTART_IN     => apv_trgstart,\r
+       APV_TRGSEL_IN       => apv_trgsel(3),\r
+       APV_TRG_TODO_IN     => trg_3_todo_in,\r
+       APV_TRG_DELAY_IN    => trg_3_delay_in,\r
+       APV_TRGDONE_OUT     => apv_trgdone(3),\r
+       APV_TRG_OUT         => apv_trg(3),\r
+       APV_TRGSENT_OUT     => apv_trgsent(3),\r
+       BSM_OUT             => open,\r
+       DEBUG_OUT           => open\r
+);\r
 \r
 ---------------------------------------------------------------------------\r
 -- Trigger input 2: normal trigger\r
 ---------------------------------------------------------------------------\r
 THE_APV_TRG_HANDLER_2: apv_trg_handler\r
-port map( CLK_APV_IN           => clk_apv_in,\r
-                 RESET_APV_IN          => apv_clk_rst,\r
-                 CLK_IN                        => clk_in,\r
-                 RESET_IN                      => reset_in,\r
-                 APV_TRGSTART_IN       => apv_trgstart,\r
-                 APV_TRGSEL_IN         => apv_trgsel(2),\r
-                 APV_TRG_TODO_IN       => trg_2_todo_in,\r
-                 APV_TRG_DELAY_IN      => trg_2_delay_in,\r
-                 APV_TRGDONE_OUT       => apv_trgdone(2),\r
-                 APV_TRG_OUT           => apv_trg(2),\r
-                 APV_TRGSENT_OUT       => apv_trgsent(2),\r
-                 BSM_OUT                       => open,\r
-                 DEBUG_OUT                     => open\r
-               );\r
+port map(\r
+       CLK_APV_IN          => clk_apv_in,\r
+       RESET_APV_IN        => apv_clk_rst,\r
+       CLK_IN              => clk_in,\r
+       RESET_IN            => reset_in,\r
+       APV_TRGSTART_IN     => apv_trgstart,\r
+       APV_TRGSEL_IN       => apv_trgsel(2),\r
+       APV_TRG_TODO_IN     => trg_2_todo_in,\r
+       APV_TRG_DELAY_IN    => trg_2_delay_in,\r
+       APV_TRGDONE_OUT     => apv_trgdone(2),\r
+       APV_TRG_OUT         => apv_trg(2),\r
+       APV_TRGSENT_OUT     => apv_trgsent(2),\r
+       BSM_OUT             => open,\r
+       DEBUG_OUT           => open\r
+);\r
 \r
 ---------------------------------------------------------------------------\r
 -- Trigger input 1: normal trigger\r
 ---------------------------------------------------------------------------\r
 THE_APV_TRG_HANDLER_1: apv_trg_handler\r
-port map( CLK_APV_IN           => clk_apv_in,\r
-                 RESET_APV_IN          => apv_clk_rst,\r
-                 CLK_IN                        => clk_in,\r
-                 RESET_IN                      => reset_in,\r
-                 APV_TRGSTART_IN       => apv_trgstart,\r
-                 APV_TRGSEL_IN         => apv_trgsel(1),\r
-                 APV_TRG_TODO_IN       => trg_1_todo_in,\r
-                 APV_TRG_DELAY_IN      => trg_1_delay_in,\r
-                 APV_TRGDONE_OUT       => apv_trgdone(1),\r
-                 APV_TRG_OUT           => apv_trg(1),\r
-                 APV_TRGSENT_OUT       => apv_trgsent(1),\r
-                 BSM_OUT                       => open,\r
-                 DEBUG_OUT                     => open\r
-               );\r
+port map(\r
+       CLK_APV_IN          => clk_apv_in,\r
+       RESET_APV_IN        => apv_clk_rst,\r
+       CLK_IN              => clk_in,\r
+       RESET_IN            => reset_in,\r
+       APV_TRGSTART_IN     => apv_trgstart,\r
+       APV_TRGSEL_IN       => apv_trgsel(1),\r
+       APV_TRG_TODO_IN     => trg_1_todo_in,\r
+       APV_TRG_DELAY_IN    => trg_1_delay_in,\r
+       APV_TRGDONE_OUT     => apv_trgdone(1),\r
+       APV_TRG_OUT         => apv_trg(1),\r
+       APV_TRGSENT_OUT     => apv_trgsent(1),\r
+       BSM_OUT             => open,\r
+       DEBUG_OUT           => open\r
+);\r
 \r
 ---------------------------------------------------------------------------\r
 -- Trigger input 0: normal trigger\r
 ---------------------------------------------------------------------------\r
 THE_APV_TRG_HANDLER_0: apv_trg_handler\r
-port map( CLK_APV_IN           => clk_apv_in,\r
-                 RESET_APV_IN          => apv_clk_rst,\r
-                 CLK_IN                        => clk_in,\r
-                 RESET_IN                      => reset_in,\r
-                 APV_TRGSTART_IN       => apv_trgstart,\r
-                 APV_TRGSEL_IN         => apv_trgsel(0),\r
-                 APV_TRG_TODO_IN       => trg_0_todo_in,\r
-                 APV_TRG_DELAY_IN      => trg_0_delay_in,\r
-                 APV_TRGDONE_OUT       => apv_trgdone(0),\r
-                 APV_TRG_OUT           => apv_trg(0),\r
-                 APV_TRGSENT_OUT       => apv_trgsent(0),\r
-                 BSM_OUT                       => open,\r
-                 DEBUG_OUT                     => open\r
-               );\r
+port map(\r
+       CLK_APV_IN          => clk_apv_in,\r
+       RESET_APV_IN        => apv_clk_rst,\r
+       CLK_IN              => clk_in,\r
+       RESET_IN            => reset_in,\r
+       APV_TRGSTART_IN     => apv_trgstart,\r
+       APV_TRGSEL_IN       => apv_trgsel(0),\r
+       APV_TRG_TODO_IN     => trg_0_todo_in,\r
+       APV_TRG_DELAY_IN    => trg_0_delay_in,\r
+       APV_TRGDONE_OUT     => apv_trgdone(0),\r
+       APV_TRG_OUT         => apv_trg(0),\r
+       APV_TRGSENT_OUT     => apv_trgsent(0),\r
+       BSM_OUT             => open,\r
+       DEBUG_OUT           => open\r
+);\r
 \r
 ---------------------------------------------------------------------------\r
 -- APV SYNC trigger signal -- NOT CLEAN, outside trigger logic!\r
 ---------------------------------------------------------------------------\r
 THE_APV_SYNC_HANDLER: apv_sync_handler\r
-port map( CLK_APV_IN           => clk_apv_in,\r
-                 RESET_APV_IN          => apv_clk_rst,\r
-                 CLK_IN                        => clk_in,\r
-                 RESET_IN                      => reset_in, \r
-                 APV_TRGSTART_IN       => sync_trg_in,\r
-                 APV_TRGSEL_IN         => '1',\r
-                 APV_TRGDONE_OUT       => open,\r
-                 APV_TRG_OUT           => apv_sync_signal,\r
-                 APV_SYNC_OUT          => apv_sync,\r
-                 BSM_OUT                       => open,\r
-                 DEBUG_OUT                     => open\r
-               );\r
+port map(\r
+       CLK_APV_IN          => clk_apv_in,\r
+       RESET_APV_IN        => apv_clk_rst,\r
+       CLK_IN              => clk_in,\r
+       RESET_IN            => reset_in,\r
+       APV_TRGSTART_IN     => sync_trg_in,\r
+       APV_TRGSEL_IN       => '1',\r
+       APV_TRGDONE_OUT     => open,\r
+       APV_TRG_OUT         => apv_sync_signal,\r
+       APV_SYNC_OUT        => apv_sync,\r
+       BSM_OUT             => open,\r
+       DEBUG_OUT           => open\r
+);\r
 \r
 -- combine all DONE and SENT signals for feedback\r
 next_apv_trgdone_all <= apv_trgdone(3) or apv_trgdone(2) or apv_trgdone(1) or apv_trgdone(0);\r
index 0cc2fc867d9254ef411e282916f9eedebfa867e5..4026f02986827b35d897a03b3c452139fd48a640 100644 (file)
@@ -10,68 +10,67 @@ use work.adcmv3_components.all;
 -- ddmmyy - blafasel\r
 \r
 entity buf_toc is\r
-       port( CLK_IN                    : in    std_logic;\r
-                 RESET_IN                      : in    std_logic;\r
-                 BUF_TICK_IN           : in    std_logic; -- tickmark from raw buffer\r
-                 BUF_START_IN          : in    std_logic; -- start of frame from raw buffer\r
-                 WAITFRAME_IN          : in    std_logic; -- statemachine is in "wait for frame" mode\r
-                 FRAMES_REQD_IN        : in    std_logic_vector(3 downto 0); -- number of frames requested from EDS\r
-                 BUF_LVL_IN            : in    std_logic_vector(7 downto 0);\r
-                 GOODDATA_OUT          : out   std_logic; -- APV is on, sent data, process it\r
-                 BADDATA_OUT           : out   std_logic; -- APV is on, broken buffer, NO processing, only ERROR HDR\r
-                 NODATA_OUT            : out   std_logic; -- APV is off, do not send anything!\r
-                 READY_OUT                     : out   std_logic;\r
-                 BSM_OUT                       : out   std_logic_vector(7 downto 0);\r
-                 DBG_OUT                       : out   std_logic_vector(15 downto 0)\r
-               );\r
+port(\r
+       CLK_IN          : in    std_logic;\r
+       RESET_IN        : in    std_logic;\r
+       BUF_TICK_IN     : in    std_logic; -- tickmark from raw buffer\r
+       BUF_START_IN    : in    std_logic; -- start of frame from raw buffer\r
+       WAITFRAME_IN    : in    std_logic; -- statemachine is in "wait for frame" mode\r
+       FRAMES_REQD_IN  : in    std_logic_vector(3 downto 0); -- number of frames requested from EDS\r
+       BUF_LVL_IN      : in    std_logic_vector(7 downto 0);\r
+       GOODDATA_OUT    : out   std_logic; -- APV is on, sent data, process it\r
+       BADDATA_OUT     : out   std_logic; -- APV is on, broken buffer, NO processing, only ERROR HDR\r
+       NODATA_OUT      : out   std_logic; -- APV is off, do not send anything!\r
+       READY_OUT       : out   std_logic;\r
+       BSM_OUT         : out   std_logic_vector(7 downto 0);\r
+       DBG_OUT         : out   std_logic_vector(15 downto 0)\r
+);\r
 end;\r
 \r
 architecture behavioral of buf_toc is\r
 \r
-       -- components\r
+-- state machine signals\r
+type STATES is (SLEEP,CLEAR,RSTTOC,WATCH,COUNT,GDATA,BDATA,IDATA,DONE);\r
+signal CURRENT_STATE, NEXT_STATE: STATES;\r
 \r
-       -- state machine signals\r
-       type STATES is (SLEEP,CLEAR,RSTTOC,WATCH,COUNT,GDATA,BDATA,IDATA,DONE);\r
-       signal CURRENT_STATE, NEXT_STATE: STATES;\r
+-- normal signals\r
+signal bsm_x                : std_logic_vector(7 downto 0);\r
+signal debug_x              : std_logic_vector(15 downto 0);\r
 \r
-       -- normal signals\r
-       signal bsm_x                            : std_logic_vector(7 downto 0);\r
-       signal debug_x                          : std_logic_vector(15 downto 0);\r
+signal buf_lvl              : std_logic_vector(4 downto 0);\r
+signal buf_good             : std_logic;\r
+signal buf_broken           : std_logic;\r
+signal buf_ignore           : std_logic;\r
 \r
-       signal buf_lvl                          : std_logic_vector(4 downto 0);\r
-       signal buf_good                         : std_logic;\r
-       signal buf_broken                       : std_logic;\r
-       signal buf_ignore                       : std_logic;\r
-       \r
-       signal next_gooddata            : std_logic;\r
-       signal gooddata                         : std_logic;\r
-       signal next_baddata                     : std_logic;\r
-       signal baddata                          : std_logic;\r
-       signal next_nodata                      : std_logic;\r
-       signal nodata                           : std_logic;\r
-       signal next_ready                       : std_logic;\r
-       signal ready                            : std_logic;\r
+signal next_gooddata        : std_logic;\r
+signal gooddata             : std_logic;\r
+signal next_baddata         : std_logic;\r
+signal baddata              : std_logic;\r
+signal next_nodata          : std_logic;\r
+signal nodata               : std_logic;\r
+signal next_ready           : std_logic;\r
+signal ready                : std_logic;\r
 \r
-       signal frames_needed            : std_logic_vector(4 downto 0);\r
+signal frames_needed        : std_logic_vector(4 downto 0);\r
 \r
-       signal next_frames_avail        : std_logic;\r
-       signal frames_avail                     : std_logic;\r
+signal next_frames_avail    : std_logic;\r
+signal frames_avail         : std_logic;\r
+\r
+signal toc_ctr              : std_logic_vector(3 downto 0);\r
+signal next_toc_rst         : std_logic;\r
+signal toc_rst              : std_logic;\r
+signal next_toc_ce          : std_logic;\r
+signal toc_ce               : std_logic;\r
+signal next_toc_hit         : std_logic;\r
+signal toc_hit              : std_logic;\r
+\r
+signal next_stat_clr        : std_logic;\r
+signal stat_clr             : std_logic;\r
+\r
+signal stat_good            : std_logic;\r
+signal stat_bad             : std_logic;\r
+signal stat_ignore          : std_logic;\r
 \r
-       signal toc_ctr                          : std_logic_vector(3 downto 0);\r
-       signal next_toc_rst                     : std_logic;\r
-       signal toc_rst                          : std_logic;\r
-       signal next_toc_ce                      : std_logic;\r
-       signal toc_ce                           : std_logic;\r
-       signal next_toc_hit                     : std_logic;\r
-       signal toc_hit                          : std_logic;\r
-       \r
-       signal next_stat_clr            : std_logic;\r
-       signal stat_clr                         : std_logic;\r
-       \r
-       signal stat_good                        : std_logic;\r
-       signal stat_bad                         : std_logic;\r
-       signal stat_ignore                      : std_logic;\r
-       \r
 begin\r
 \r
 -- Aliasing\r
@@ -109,7 +108,7 @@ end process THE_SYNC_PROC;
 \r
 -- state machine for handling synchronisation\r
 -- state registers\r
-STATE_MEM: process( clk_in ) \r
+STATE_MEM: process( clk_in )\r
 begin\r
        if( rising_edge(clk_in) ) then\r
                if( reset_in = '1' ) then\r
@@ -136,7 +135,7 @@ end process STATE_MEM;
 \r
 \r
 -- state transitions\r
-STATE_TRANSFORM: process( CURRENT_STATE, waitframe_in, buf_good, buf_ignore, \r
+STATE_TRANSFORM: process( CURRENT_STATE, waitframe_in, buf_good, buf_ignore,\r
                                                  buf_start_in, buf_tick_in, frames_avail, toc_hit )\r
 begin\r
        NEXT_STATE    <= SLEEP; -- avoid latches\r
@@ -148,13 +147,13 @@ begin
        next_ready    <= '0';\r
        next_stat_clr <= '0';\r
        case CURRENT_STATE is\r
-               when SLEEP      =>      if( waitframe_in = '1' ) then\r
+               when SLEEP  =>  if( waitframe_in = '1' ) then\r
                                                        NEXT_STATE    <= CLEAR;\r
                                                        next_stat_clr <= '1';\r
                                                else\r
                                                        NEXT_STATE <= SLEEP;\r
                                                end if;\r
-               when CLEAR      =>      if   ( buf_ignore = '1' ) then\r
+               when CLEAR  =>  if   ( buf_ignore = '1' ) then\r
                                                        NEXT_STATE   <= IDATA; -- switched off buffer, ignore it\r
                                                        next_nodata  <= '1';\r
                                                elsif( buf_good = '1' ) then\r
@@ -164,8 +163,8 @@ begin
                                                        NEXT_STATE   <= BDATA; -- bad buffer, so we skip it immediatly\r
                                                        next_baddata <= '1';\r
                                                end if;\r
-               when RSTTOC     =>      NEXT_STATE <= WATCH;\r
-               when WATCH      =>      if   ( frames_avail = '1' ) then\r
+               when RSTTOC =>  NEXT_STATE <= WATCH;\r
+               when WATCH  =>  if   ( frames_avail = '1' ) then\r
                                                        NEXT_STATE    <= GDATA; -- all frames did arrive\r
                                                        next_gooddata <= '1';\r
                                                elsif( (toc_hit = '1') or (buf_good = '0') ) then\r
@@ -180,21 +179,21 @@ begin
                                                else\r
                                                        NEXT_STATE <= WATCH;\r
                                                end if;\r
-               when COUNT      =>      NEXT_STATE <= WATCH;\r
-               when GDATA      =>      NEXT_STATE <= DONE;\r
+               when COUNT  =>  NEXT_STATE <= WATCH;\r
+               when GDATA  =>  NEXT_STATE <= DONE;\r
                                                next_ready <= '1';\r
-               when BDATA      =>      NEXT_STATE <= DONE;\r
+               when BDATA  =>  NEXT_STATE <= DONE;\r
                                                next_ready <= '1';\r
-               when IDATA      =>      NEXT_STATE <= DONE;\r
+               when IDATA  =>  NEXT_STATE <= DONE;\r
                                                next_ready <= '1';\r
-               when DONE       =>      if( waitframe_in = '1' ) then\r
+               when DONE   =>  if( waitframe_in = '1' ) then\r
                                                        NEXT_STATE <= DONE;\r
                                                        next_ready <= '1';\r
                                                else\r
                                                        NEXT_STATE <= SLEEP;\r
                                                end if;\r
-               \r
-               when others     =>      NEXT_STATE <= SLEEP;\r
+\r
+               when others =>  NEXT_STATE <= SLEEP;\r
        end case;\r
 end process STATE_TRANSFORM;\r
 \r
@@ -202,16 +201,16 @@ end process STATE_TRANSFORM;
 STATE_DECODE: process( CURRENT_STATE )\r
 begin\r
        case CURRENT_STATE is\r
-               when SLEEP      =>      bsm_x <= x"00";\r
-               when CLEAR      =>      bsm_x <= x"01"; \r
-               when RSTTOC     =>      bsm_x <= x"02"; \r
-               when WATCH      =>      bsm_x <= x"03";\r
-               when COUNT      =>      bsm_x <= x"04";\r
-               when GDATA      =>      bsm_x <= x"05";\r
-               when BDATA      =>      bsm_x <= x"06";\r
-               when IDATA      =>      bsm_x <= x"07";\r
-               when DONE       =>      bsm_x <= x"08";\r
-               when others     =>      bsm_x <= x"ff";\r
+               when SLEEP  =>  bsm_x <= x"00";\r
+               when CLEAR  =>  bsm_x <= x"01";\r
+               when RSTTOC =>  bsm_x <= x"02";\r
+               when WATCH  =>  bsm_x <= x"03";\r
+               when COUNT  =>  bsm_x <= x"04";\r
+               when GDATA  =>  bsm_x <= x"05";\r
+               when BDATA  =>  bsm_x <= x"06";\r
+               when IDATA  =>  bsm_x <= x"07";\r
+               when DONE   =>  bsm_x <= x"08";\r
+               when others =>  bsm_x <= x"ff";\r
        end case;\r
 end process STATE_DECODE;\r
 \r
index 8a18c7e91668beacce8b374baa06fae4e9a10118..bb3c0974f37f1296bef1ec7d2c27da9fa576c034 100644 (file)
@@ -7,41 +7,42 @@ library work;
 use work.adcmv3_components.all;\r
 \r
 entity dhdr_buf is\r
-       port( CLK_IN                            : in    std_logic; -- 100MHz master clock\r
-                 RESET_IN                              : in    std_logic; \r
-                 -- DHDR information block\r
-                 DHDR_DATA_IN                  : in    std_logic_vector(47 downto 0); -- EDS data input\r
-                 DHDR_WE_IN                    : in    std_logic; -- EDS write enable\r
-                 DHDR_DONE_IN                  : in    std_logic; -- release EDS \r
-                 DHDR_DATA_OUT                 : out   std_logic_vector(47 downto 0);\r
-                 DHDR_AVAILABLE_OUT    : out   std_logic;\r
-                 -- trigger busy information\r
-                 BUF_FULL_OUT                  : out   std_logic;\r
-                 BUF_LEVEL_OUT                 : out   std_logic_vector(4 downto 0);\r
-                 -- Debug signals\r
-                 DEBUG_OUT                             : out   std_logic_vector(15 downto 0)\r
-               );\r
+port(\r
+       CLK_IN              : in    std_logic; -- 100MHz master clock\r
+       RESET_IN            : in    std_logic;\r
+       -- DHDR information block\r
+       DHDR_DATA_IN        : in    std_logic_vector(47 downto 0); -- EDS data input\r
+       DHDR_WE_IN          : in    std_logic; -- EDS write enable\r
+       DHDR_DONE_IN        : in    std_logic; -- release EDS\r
+       DHDR_DATA_OUT       : out   std_logic_vector(47 downto 0);\r
+       DHDR_AVAILABLE_OUT  : out   std_logic;\r
+       -- trigger busy information\r
+       BUF_FULL_OUT        : out   std_logic;\r
+       BUF_LEVEL_OUT       : out   std_logic_vector(4 downto 0);\r
+       -- Debug signals\r
+       DEBUG_OUT           : out   std_logic_vector(15 downto 0)\r
+);\r
 end;\r
 \r
 architecture behavioral of dhdr_buf is\r
 \r
-       -- normal signals\r
-       signal debug                    : std_logic_vector(15 downto 0);\r
-\r
-       -- Signals for controlling the DHDR buffer memory\r
-       signal dhdr_data                : std_logic_vector(47 downto 0);\r
-       signal dhdr_rd_addr             : std_logic_vector(3 downto 0);\r
-       signal dhdr_wr_addr             : std_logic_vector(3 downto 0);\r
-       signal dhdr_wr                  : std_logic;\r
-       signal dhdr_rd                  : std_logic;\r
-       signal dhdr_free_ctr    : std_logic_vector(4 downto 0); -- fill level counter\r
-       signal dhdr_free_up             : std_logic;\r
-       signal dhdr_free_down   : std_logic;\r
-       signal dhdr_available_x : std_logic; \r
-       signal dhdr_available   : std_logic; -- at least one valid EDS entry is available\r
-       signal dhdr_full_x              : std_logic;\r
-       signal dhdr_full                : std_logic;\r
-       \r
+-- normal signals\r
+signal debug            : std_logic_vector(15 downto 0);\r
+\r
+-- Signals for controlling the DHDR buffer memory\r
+signal dhdr_data        : std_logic_vector(47 downto 0);\r
+signal dhdr_rd_addr     : std_logic_vector(3 downto 0);\r
+signal dhdr_wr_addr     : std_logic_vector(3 downto 0);\r
+signal dhdr_wr          : std_logic;\r
+signal dhdr_rd          : std_logic;\r
+signal dhdr_free_ctr    : std_logic_vector(4 downto 0); -- fill level counter\r
+signal dhdr_free_up     : std_logic;\r
+signal dhdr_free_down   : std_logic;\r
+signal dhdr_available_x : std_logic;\r
+signal dhdr_available   : std_logic; -- at least one valid EDS entry is available\r
+signal dhdr_full_x      : std_logic;\r
+signal dhdr_full        : std_logic;\r
+\r
 begin\r
 \r
 -- General process for syncing combinatorial signals\r
@@ -89,33 +90,41 @@ THE_DHDR_FREE_COUNTER_PROC: process( clk_in )
 begin\r
        if( rising_edge(clk_in) ) then\r
                if   ( reset_in = '1' ) then\r
-                       dhdr_free_ctr <= "10000";\r
+                       dhdr_free_ctr <= b"10000";\r
                elsif( (dhdr_free_down = '1') and (dhdr_free_up = '0') ) then\r
-                       dhdr_free_ctr <= dhdr_free_ctr - 1; \r
+                       dhdr_free_ctr <= dhdr_free_ctr - 1;\r
                elsif( (dhdr_free_down = '0') and (dhdr_free_up = '1') ) then\r
                        dhdr_free_ctr <= dhdr_free_ctr + 1;\r
                end if;\r
        end if;\r
 end process THE_DHDR_FREE_COUNTER_PROC;\r
 \r
-dhdr_full_x        <= '1' when (dhdr_free_ctr = "00000") else '0';\r
+dhdr_full_x      <= '1' when (dhdr_free_ctr  = b"00001") else '0'; -- was zero before\r
+dhdr_available_x <= '1' when (dhdr_free_ctr /= b"10000") else '0'; \r
+-- danger. may also fail in case you release an entry before reserving it!\r
+\r
+-- replace this ugly rd/wr/free counters and the DPRAM by a FIFO.\r
 \r
 -- A 16x32b DPRAM is used for buffering the DataHeaDeR (DHDR)\r
 THE_DHDR_BUFFER: dhdr_buffer_dpram\r
-port map( WRADDRESS            => dhdr_wr_addr,\r
-                 DATA                  => dhdr_data_in,\r
-                 WRCLOCK               => clk_in, \r
-                 WE                    => dhdr_we_in, \r
-                 WRCLOCKEN             => '1', \r
-                 RDADDRESS             => dhdr_rd_addr, \r
-                 RDCLOCK               => clk_in, \r
-                 RDCLOCKEN             => '1', \r
-                 RESET                 => reset_in, \r
-                 Q                             => dhdr_data\r
-               );\r
+port map(\r
+       WRADDRESS   => dhdr_wr_addr,\r
+       DATA        => dhdr_data_in,\r
+       WRCLOCK     => clk_in,\r
+       WE          => dhdr_we_in,\r
+       WRCLOCKEN   => '1',\r
+       RDADDRESS   => dhdr_rd_addr,\r
+       RDCLOCK     => clk_in,\r
+       RDCLOCKEN   => '1',\r
+       RESET       => reset_in,\r
+       Q           => dhdr_data\r
+);\r
 \r
 -- Are there any EDS to work on?\r
-dhdr_available_x <= '1' when (dhdr_wr_addr /= dhdr_rd_addr) else '0';\r
+--dhdr_available_x <= '1' when (dhdr_wr_addr /= dhdr_rd_addr) else '0';\r
+-- Epic fail: take 17 fast triggers => WR_ADDR = 1.\r
+--            one slow IPU transfer => RD_ADDR = 1.\r
+-- and as (1 /= 1) is false, the buffer is empty, blocking the next IPU transfer.\r
 \r
 -- Debug signals\r
 debug(15 downto 0)  <= (others => '0');\r
index 446ffbba44dc5edcbdf155145b7d661b41c2b4ab..5962967c56be2a0116ac3f38398d0574b57dc390 100644 (file)
@@ -7,41 +7,42 @@ library work;
 use work.adcmv3_components.all;\r
 \r
 entity eds_buf is\r
-       port( CLK_IN                    : in    std_logic; -- 100MHz master clock\r
-                 RESET_IN                      : in    std_logic; \r
-                 -- EDS input, all synced to CLK_IN\r
-                 EDS_DATA_IN           : in    std_logic_vector(39 downto 0); -- EDS data input\r
-                 EDS_WE_IN                     : in    std_logic; -- EDS write enable\r
-                 EDS_DONE_IN           : in    std_logic; -- release EDS \r
-                 EDS_DATA_OUT          : out   std_logic_vector(39 downto 0);\r
-                 EDS_AVAILABLE_OUT     : out   std_logic;\r
-                 -- trigger busy information\r
-                 BUF_FULL_OUT          : out   std_logic;\r
-                 BUF_LEVEL_OUT         : out   std_logic_vector(4 downto 0);\r
-                 -- Debug signals\r
-                 DEBUG_OUT                     : out   std_logic_vector(15 downto 0)\r
-               );\r
+port(\r
+       CLK_IN              : in    std_logic; -- 100MHz master clock\r
+       RESET_IN            : in    std_logic;\r
+       -- EDS input, all synced to CLK_IN\r
+       EDS_DATA_IN         : in    std_logic_vector(39 downto 0); -- EDS data input\r
+       EDS_WE_IN           : in    std_logic; -- EDS write enable\r
+       EDS_DONE_IN         : in    std_logic; -- release EDS\r
+       EDS_DATA_OUT        : out   std_logic_vector(39 downto 0);\r
+       EDS_AVAILABLE_OUT   : out   std_logic;\r
+       -- trigger busy information\r
+       BUF_FULL_OUT        : out   std_logic;\r
+       BUF_LEVEL_OUT       : out   std_logic_vector(4 downto 0);\r
+       -- Debug signals\r
+       DEBUG_OUT           : out   std_logic_vector(15 downto 0)\r
+);\r
 end;\r
 \r
 architecture behavioral of eds_buf is\r
 \r
-       -- normal signals\r
-       signal debug                    : std_logic_vector(15 downto 0);\r
-\r
-       -- Signals for controlling the EDS buffer memory\r
-       signal eds_data                 : std_logic_vector(39 downto 0);\r
-       signal eds_rd_addr              : std_logic_vector(3 downto 0);\r
-       signal eds_wr_addr              : std_logic_vector(3 downto 0);\r
-       signal eds_wr                   : std_logic;\r
-       signal eds_rd                   : std_logic;\r
-       signal eds_free_ctr             : std_logic_vector(4 downto 0); -- fill level counter\r
-       signal eds_free_up              : std_logic;\r
-       signal eds_free_down    : std_logic;\r
-       signal eds_available_x  : std_logic; \r
-       signal eds_available    : std_logic; -- at least one valid EDS entry is available\r
-       signal eds_full_x               : std_logic;\r
-       signal eds_full                 : std_logic;\r
-       \r
+-- normal signals\r
+signal debug            : std_logic_vector(15 downto 0);\r
+\r
+-- Signals for controlling the EDS buffer memory\r
+signal eds_data         : std_logic_vector(39 downto 0);\r
+signal eds_rd_addr      : std_logic_vector(3 downto 0);\r
+signal eds_wr_addr      : std_logic_vector(3 downto 0);\r
+signal eds_wr           : std_logic;\r
+signal eds_rd           : std_logic;\r
+signal eds_free_ctr     : std_logic_vector(4 downto 0); -- fill level counter\r
+signal eds_free_up      : std_logic;\r
+signal eds_free_down    : std_logic;\r
+signal eds_available_x  : std_logic;\r
+signal eds_available    : std_logic; -- at least one valid EDS entry is available\r
+signal eds_full_x       : std_logic;\r
+signal eds_full         : std_logic;\r
+\r
 begin\r
 \r
 -- General process for syncing combinatorial signals\r
@@ -89,33 +90,39 @@ THE_EDS_FREE_COUNTER_PROC: process( clk_in )
 begin\r
        if( rising_edge(clk_in) ) then\r
                if   ( reset_in = '1' ) then\r
-                       eds_free_ctr <= "10000";\r
+                       eds_free_ctr <= b"10000";\r
                elsif( eds_free_down = '1' and eds_free_up = '0' ) then\r
-                       eds_free_ctr <= eds_free_ctr - 1; \r
+                       eds_free_ctr <= eds_free_ctr - 1;\r
                elsif( eds_free_down = '0' and eds_free_up = '1' ) then\r
                        eds_free_ctr <= eds_free_ctr + 1;\r
                end if;\r
        end if;\r
 end process THE_EDS_FREE_COUNTER_PROC;\r
 \r
-eds_full_x        <= '1' when (eds_free_ctr = "00000") else '0';\r
+eds_full_x        <= '1' when (eds_free_ctr =  b"00000") else '0';\r
+eds_available_x   <= '1' when (eds_free_ctr /= b"10000") else '0'; \r
+-- danger. may also fail in case you release an entry before reserving it!\r
+\r
+-- replace this ugly rd/wr/free counters and the DPRAM by a FIFO.\r
 \r
 -- A 16x40b DPRAM is used for buffering the EventDataSheets (EDS)\r
 THE_EDS_BUFFER: eds_buffer_dpram\r
-port map( WRADDRESS            => eds_wr_addr,\r
-                 DATA                  => eds_data_in,\r
-                 WRCLOCK               => clk_in, \r
-                 WE                    => eds_we_in, \r
-                 WRCLOCKEN             => '1', \r
-                 RDADDRESS             => eds_rd_addr, \r
-                 RDCLOCK               => clk_in, \r
-                 RDCLOCKEN             => '1', \r
-                 RESET                 => reset_in, \r
-                 Q                             => eds_data\r
-               );\r
+port map(\r
+       WRADDRESS   => eds_wr_addr,\r
+       DATA        => eds_data_in,\r
+       WRCLOCK     => clk_in,\r
+       WE          => eds_we_in,\r
+       WRCLOCKEN   => '1',\r
+       RDADDRESS   => eds_rd_addr,\r
+       RDCLOCK     => clk_in,\r
+       RDCLOCKEN   => '1',\r
+       RESET       => reset_in,\r
+       Q           => eds_data\r
+);\r
 \r
 -- Are there any EDS to work on?\r
-eds_available_x <= '1' when (eds_wr_addr /= eds_rd_addr) else '0';\r
+--eds_available_x <= '1' when (eds_wr_addr /= eds_rd_addr) else '0';\r
+-- epic fail: cut'n'paste error from dhdr_buf.vhd\r
 \r
 -- Debug signals\r
 debug(15 downto 0)  <= (others => '0');\r
index 49a7243a5b059632719ffe32f323c90e7b007cc7..ece4afe8192394b64759d4d87652edce4024cf37 100644 (file)
@@ -12,12 +12,12 @@ VendorName=Lattice Semiconductor Corporation
 CoreType=LPM\r
 CoreStatus=Demo\r
 CoreName=FIFO\r
-CoreRevision=4.5\r
+CoreRevision=4.7\r
 ModuleName=fifo_16x11\r
 SourceFormat=VHDL\r
 ParameterFileVersion=1.0\r
-Date=03/03/2009\r
-Time=16:26:00\r
+Date=03/11/2010\r
+Time=10:33:40\r
 \r
 [Parameters]\r
 Verilog=0\r
@@ -37,8 +37,8 @@ PeMode=Static - Single Threshold
 PeAssert=10\r
 PeDeassert=12\r
 FullFlg=0\r
-PfMode=Static - Single Threshold\r
-PfAssert=508\r
+PfMode=Dynamic - Single Threshold\r
+PfAssert=15\r
 PfDeassert=506\r
 RDataCount=1\r
 EnECC=0\r
index 6214fe8a9b20f76b784b293a89d7099aeae3b9e9..cd5ff67a7be24d1888908c4f26d1119647e19e64 100644 (file)
@@ -1,8 +1,8 @@
--- VHDL netlist generated by SCUBA ispLever_v72_SP1_Build (24)
--- Module  Version: 4.5
---X:\Programme\ispTOOLS_72\ispfpga\bin\nt\scuba.exe -w -lang vhdl -synth synplify -bus_exp 7 -bb -arch ep5m00 -type ebfifo -pfu_fifo -depth 16 -width 11 -depth 16 -no_enable -pe -1 -pf -1 -fill -e 
+-- VHDL netlist generated by SCUBA ispLever_v8.0_PROD_Build (41)
+-- Module  Version: 4.7
+--X:\Programme\ispTOOLS_80\ispfpga\bin\nt\scuba.exe -w -lang vhdl -synth synplify -bus_exp 7 -bb -arch ep5m00 -type ebfifo -pfu_fifo -depth 16 -width 11 -depth 16 -no_enable -pe -1 -pf -1 -fill -e 
 
--- Tue Mar 03 16:26:00 2009
+-- Thu Mar 11 10:33:40 2010
 
 library IEEE;
 use IEEE.std_logic_1164.all;
index 5e157c8932a523fb7592ad21dade26153b09ba75..ca37eece720f6e2d48a19900b151851d4297e2ac 100644 (file)
@@ -1,6 +1,6 @@
--- VHDL module instantiation generated by SCUBA ispLever_v72_SP1_Build (24)
--- Module  Version: 4.5
--- Tue Mar 03 16:26:00 2009
+-- VHDL module instantiation generated by SCUBA ispLever_v8.0_PROD_Build (41)
+-- Module  Version: 4.7
+-- Thu Mar 11 10:33:40 2010
 
 -- parameterized module component declaration
 component fifo_16x11
index 7eaae72f50af6fb51c17adf861b47597032cd3ed..7df04d5474abae47e12886a922eedb3f59fce42d 100755 (executable)
@@ -10,40 +10,41 @@ use work.adcmv3_components.all;
 -- Only channels with GOODDATA are taken into account.\r
 \r
 entity frmctr_check is\r
-       port( CLK_IN                    : in    std_logic;\r
-                 GOODDATA_IN           : in    std_logic_vector(15 downto 0);\r
-                 FRAMECOUNTER_IN       : in    std_logic_vector(3 downto 0);\r
-                 FRM_NR_0_IN           : in    std_logic_vector(3 downto 0);\r
-                 FRM_NR_1_IN           : in    std_logic_vector(3 downto 0);\r
-                 FRM_NR_2_IN           : in    std_logic_vector(3 downto 0);\r
-                 FRM_NR_3_IN           : in    std_logic_vector(3 downto 0);\r
-                 FRM_NR_4_IN           : in    std_logic_vector(3 downto 0);\r
-                 FRM_NR_5_IN           : in    std_logic_vector(3 downto 0);\r
-                 FRM_NR_6_IN           : in    std_logic_vector(3 downto 0);\r
-                 FRM_NR_7_IN           : in    std_logic_vector(3 downto 0);\r
-                 FRM_NR_8_IN           : in    std_logic_vector(3 downto 0);\r
-                 FRM_NR_9_IN           : in    std_logic_vector(3 downto 0);\r
-                 FRM_NR_10_IN          : in    std_logic_vector(3 downto 0);\r
-                 FRM_NR_11_IN          : in    std_logic_vector(3 downto 0);\r
-                 FRM_NR_12_IN          : in    std_logic_vector(3 downto 0);\r
-                 FRM_NR_13_IN          : in    std_logic_vector(3 downto 0);\r
-                 FRM_NR_14_IN          : in    std_logic_vector(3 downto 0);\r
-                 FRM_NR_15_IN          : in    std_logic_vector(3 downto 0);\r
-                 FRC_ERROR_OUT         : out   std_logic; -- at least one framecounter is wrong\r
-                 DBG_OUT                       : out   std_logic_vector(15 downto 0)\r
-               );\r
+port(\r
+       CLK_IN          : in    std_logic;\r
+       GOODDATA_IN     : in    std_logic_vector(15 downto 0);\r
+       FRAMECOUNTER_IN : in    std_logic_vector(3 downto 0);\r
+       FRM_NR_0_IN     : in    std_logic_vector(3 downto 0);\r
+       FRM_NR_1_IN     : in    std_logic_vector(3 downto 0);\r
+       FRM_NR_2_IN     : in    std_logic_vector(3 downto 0);\r
+       FRM_NR_3_IN     : in    std_logic_vector(3 downto 0);\r
+       FRM_NR_4_IN     : in    std_logic_vector(3 downto 0);\r
+       FRM_NR_5_IN     : in    std_logic_vector(3 downto 0);\r
+       FRM_NR_6_IN     : in    std_logic_vector(3 downto 0);\r
+       FRM_NR_7_IN     : in    std_logic_vector(3 downto 0);\r
+       FRM_NR_8_IN     : in    std_logic_vector(3 downto 0);\r
+       FRM_NR_9_IN     : in    std_logic_vector(3 downto 0);\r
+       FRM_NR_10_IN    : in    std_logic_vector(3 downto 0);\r
+       FRM_NR_11_IN    : in    std_logic_vector(3 downto 0);\r
+       FRM_NR_12_IN    : in    std_logic_vector(3 downto 0);\r
+       FRM_NR_13_IN    : in    std_logic_vector(3 downto 0);\r
+       FRM_NR_14_IN    : in    std_logic_vector(3 downto 0);\r
+       FRM_NR_15_IN    : in    std_logic_vector(3 downto 0);\r
+       FRC_ERROR_OUT   : out   std_logic; -- at least one framecounter is wrong\r
+       DBG_OUT         : out   std_logic_vector(15 downto 0)\r
+);\r
 end;\r
 \r
 architecture behavioral of frmctr_check is\r
 \r
-       -- normal signals\r
-       signal debug_x                  : std_logic_vector(15 downto 0);\r
+-- normal signals\r
+signal debug_x          : std_logic_vector(15 downto 0);\r
+\r
+signal next_frc_match   : std_logic_vector(15 downto 0);\r
+signal frc_match        : std_logic_vector(15 downto 0);\r
+signal next_frc_error   : std_logic;\r
+signal frc_error        : std_logic;\r
 \r
-       signal next_frc_match   : std_logic_vector(15 downto 0);        \r
-       signal frc_match                : std_logic_vector(15 downto 0);        \r
-       signal next_frc_error   : std_logic;\r
-       signal frc_error                : std_logic;\r
-       \r
 begin\r
 \r
 -- Sync process\r
index ec4d6961b4b6f1430173b70e0e4cda751807f475..6cc460238f2c05573b3f0778e95cf23e85b0102b 100644 (file)
@@ -7,48 +7,49 @@ library work;
 use work.adcmv3_components.all;\r
 \r
 entity I2C_GSTART is\r
-port( CLK_IN           : in    std_logic;\r
-         RESET_IN              : in    std_logic;\r
-         START_IN              : in    std_logic; \r
-      DOSTART_IN       : in    std_logic;      \r
-         I2C_SPEED_IN  : in    std_logic_vector(7 downto 0);\r
-         SDONE_OUT             : out   std_logic;\r
-         SOK_OUT               : out   std_logic;\r
-      SDA_IN           : in    std_logic;\r
-         SCL_IN                : in    std_logic;\r
-         R_SCL_OUT             : out   std_logic;\r
-         S_SCL_OUT             : out   std_logic;\r
-      R_SDA_OUT                : out   std_logic;\r
-      S_SDA_OUT                : out   std_logic;\r
-         BSM_OUT               : out   std_logic_vector(3 downto 0)\r
-    );\r
+port(\r
+       CLK_IN          : in    std_logic;\r
+       RESET_IN        : in    std_logic;\r
+       START_IN        : in    std_logic;\r
+       DOSTART_IN      : in    std_logic;\r
+       I2C_SPEED_IN    : in    std_logic_vector(7 downto 0);\r
+       SDONE_OUT       : out   std_logic;\r
+       SOK_OUT         : out   std_logic;\r
+       SDA_IN          : in    std_logic;\r
+       SCL_IN          : in    std_logic;\r
+       R_SCL_OUT       : out   std_logic;\r
+       S_SCL_OUT       : out   std_logic;\r
+       R_SDA_OUT       : out   std_logic;\r
+       S_SDA_OUT       : out   std_logic;\r
+       BSM_OUT         : out   std_logic_vector(3 downto 0)\r
+);\r
 end entity;\r
 \r
 architecture Behavioral of I2C_GSTART is\r
 \r
 -- Signals\r
-       type STATES is (SLEEP,P_SCL,WCTR0,P_SDA,WCTR1,P_CHK,S_CHK0,RS_SDA,S_CHK1,ERROR,DONE);\r
-       signal CURRENT_STATE, NEXT_STATE: STATES;\r
+type STATES is (SLEEP,P_SCL,WCTR0,P_SDA,WCTR1,P_CHK,S_CHK0,RS_SDA,S_CHK1,ERROR,DONE);\r
+signal CURRENT_STATE, NEXT_STATE: STATES;\r
 \r
-       signal bsm                      : std_logic_vector(3 downto 0);\r
-       signal cctr                     : std_logic_vector(7 downto 0); -- counter for bit length\r
+signal bsm          : std_logic_vector(3 downto 0);\r
+signal cctr         : std_logic_vector(7 downto 0); -- counter for bit length\r
 \r
-       signal cycdone_x        : std_logic;\r
-       signal cycdone          : std_logic; -- one counter period done\r
+signal cycdone_x    : std_logic;\r
+signal cycdone      : std_logic; -- one counter period done\r
 \r
-       signal load_cyc_x       : std_logic;\r
-       signal load_cyc         : std_logic;\r
-       signal dec_cyc_x        : std_logic;\r
-       signal dec_cyc          : std_logic; \r
-       signal sdone_x          : std_logic;\r
-       signal sdone            : std_logic; -- Start/Stop done\r
-       signal sok_x            : std_logic;\r
-       signal sok                      : std_logic; -- Start/Stop OK\r
+signal load_cyc_x   : std_logic;\r
+signal load_cyc     : std_logic;\r
+signal dec_cyc_x    : std_logic;\r
+signal dec_cyc      : std_logic;\r
+signal sdone_x      : std_logic;\r
+signal sdone        : std_logic; -- Start/Stop done\r
+signal sok_x        : std_logic;\r
+signal sok          : std_logic; -- Start/Stop OK\r
 \r
-       signal r_scl            : std_logic;\r
-       signal s_scl            : std_logic;\r
-       signal r_sda            : std_logic;\r
-       signal s_sda            : std_logic;\r
+signal r_scl        : std_logic;\r
+signal s_scl        : std_logic;\r
+signal r_sda        : std_logic;\r
+signal s_sda        : std_logic;\r
 \r
 -- Moduls\r
 \r
@@ -60,7 +61,7 @@ begin
        if( rising_edge(clk_in) ) then\r
                if( reset_in = '1' ) then\r
                        cctr <= (others => '0');\r
-               elsif( load_cyc = '1' ) then \r
+               elsif( load_cyc = '1' ) then\r
                        cctr <= i2c_speed_in;\r
                elsif( dec_cyc = '1' ) then\r
                        cctr <= cctr - 1;\r
@@ -103,7 +104,7 @@ begin
        sdone_x    <= '0';\r
        sok_x      <= '1';\r
        case CURRENT_STATE is\r
-               when SLEEP      =>      if   ( (dostart_in = '1') and (start_in = '1') ) then\r
+               when SLEEP  =>  if   ( (dostart_in = '1') and (start_in = '1') ) then\r
                                                        NEXT_STATE <= S_CHK0; -- generate a start condition\r
                                                        load_cyc_x <= '1';\r
                                                elsif( (dostart_in = '1') and (start_in = '0') ) then\r
@@ -112,17 +113,17 @@ begin
                                                else\r
                                                        NEXT_STATE <= SLEEP;\r
                                                end if;\r
-               when P_SCL      =>      NEXT_STATE <= WCTR0;\r
+               when P_SCL  =>  NEXT_STATE <= WCTR0;\r
                                                dec_cyc_x  <= '1';\r
-               when S_CHK0 =>  if( (sda_in = '1') and (scl_in = '1') ) then\r
+               when S_CHK0 =>  if( (sda_in = '1') and (scl_in = '1') ) then\r
                                                        NEXT_STATE <= RS_SDA;\r
                                                else\r
                                                        NEXT_STATE <= ERROR;\r
                                                        sok_x      <= '0';\r
                                                end if;\r
-               when RS_SDA     =>      NEXT_STATE <= WCTR0;\r
+               when RS_SDA =>  NEXT_STATE <= WCTR0;\r
                                                dec_cyc_x  <= '1';\r
-               when WCTR0      =>      if   ( (cycdone = '1') and (start_in = '1') ) then\r
+               when WCTR0  =>  if   ( (cycdone = '1') and (start_in = '1') ) then\r
                                                        NEXT_STATE <= S_CHK1;\r
                                                elsif( (cycdone = '1') and (start_in = '0') ) then\r
                                                        NEXT_STATE <= P_SDA;\r
@@ -131,41 +132,41 @@ begin
                                                        NEXT_STATE <= WCTR0;\r
                                                        dec_cyc_x  <= '1';\r
                                                end if;\r
-               when S_CHK1     =>      if( (sda_in = '0') and (scl_in = '1') ) then\r
+               when S_CHK1 =>  if( (sda_in = '0') and (scl_in = '1') ) then\r
                                                        NEXT_STATE <= DONE;\r
                                                else\r
                                                        NEXT_STATE <= ERROR;\r
                                                        sok_x      <= '0';\r
                                                end if;\r
-               when P_SDA      =>      NEXT_STATE <= WCTR1;\r
+               when P_SDA  =>  NEXT_STATE <= WCTR1;\r
                                                dec_cyc_x  <= '1';\r
-               when WCTR1      =>      if( (cycdone = '1') ) then\r
+               when WCTR1  =>  if( (cycdone = '1') ) then\r
                                                        NEXT_STATE <= P_CHK;\r
                                                else\r
                                                        NEXT_STATE <= WCTR1;\r
                                                        dec_cyc_x  <= '1';\r
                                                end if;\r
-               when P_CHK      =>      if( (sda_in = '1') and (scl_in = '1') ) then\r
+               when P_CHK  =>  if( (sda_in = '1') and (scl_in = '1') ) then\r
                                                        NEXT_STATE <= DONE;\r
                                                        sdone_x    <= '1';\r
                                                else\r
                                                        NEXT_STATE <= ERROR;\r
                                                        sok_x      <= '0';\r
                                                end if;\r
-               when ERROR      =>      if( dostart_in = '0' ) then\r
+               when ERROR  =>  if( dostart_in = '0' ) then\r
                                                        NEXT_STATE <= SLEEP;\r
                                                else\r
                                                        NEXT_STATE <= ERROR;\r
                                                        sdone_x    <= '1';\r
                                                        sok_x      <= '0';\r
                                                end if;\r
-               when DONE       =>      if( dostart_in = '0' ) then\r
+               when DONE   =>  if( dostart_in = '0' ) then\r
                                                        NEXT_STATE <= SLEEP;\r
                                                else\r
                                                        NEXT_STATE <= DONE;\r
                                                        sdone_x    <= '1';\r
                                                end if;\r
-               when others     =>      NEXT_STATE <= SLEEP;\r
+               when others =>  NEXT_STATE <= SLEEP;\r
        end case;\r
 end process TRANSFORM;\r
 \r
@@ -173,18 +174,18 @@ end process TRANSFORM;
 DECODE: process(CURRENT_STATE)\r
 begin\r
        case CURRENT_STATE is\r
-               when SLEEP      =>      bsm <= x"0";\r
-               when S_CHK0     =>      bsm <= x"1";\r
-               when RS_SDA     =>      bsm <= x"2";\r
-               when P_SCL      =>      bsm <= x"3";\r
-               when WCTR0      =>      bsm <= x"4";\r
-               when S_CHK1     =>      bsm <= x"5";\r
-               when P_SDA      =>      bsm <= x"6";\r
-               when WCTR1      =>      bsm <= x"7";\r
-               when P_CHK      =>      bsm <= x"8";\r
-               when DONE       =>      bsm <= x"9";\r
-               when ERROR      =>      bsm <= x"e";\r
-               when others     =>      bsm <= x"f";\r
+               when SLEEP  =>  bsm <= x"0";\r
+               when S_CHK0 =>  bsm <= x"1";\r
+               when RS_SDA =>  bsm <= x"2";\r
+               when P_SCL  =>  bsm <= x"3";\r
+               when WCTR0  =>  bsm <= x"4";\r
+               when S_CHK1 =>  bsm <= x"5";\r
+               when P_SDA  =>  bsm <= x"6";\r
+               when WCTR1  =>  bsm <= x"7";\r
+               when P_CHK  =>  bsm <= x"8";\r
+               when DONE   =>  bsm <= x"9";\r
+               when ERROR  =>  bsm <= x"e";\r
+               when others =>  bsm <= x"f";\r
        end case;\r
 end process DECODE;\r
 \r
index e843b62c5c6c11bba1f7a333c160a0882b436ff0..80f197c882d6b9f640e7315394450afbb5bf8328 100644 (file)
@@ -7,47 +7,48 @@ library work;
 use work.adcmv3_components.all;\r
 \r
 entity i2c_master is\r
-port( CLK_IN           : in    std_logic;\r
-         RESET_IN              : in    std_logic;\r
-         -- Slave bus\r
-         SLV_READ_IN   : in    std_logic;\r
-         SLV_WRITE_IN  : in    std_logic;\r
-         SLV_BUSY_OUT  : out   std_logic;\r
-         SLV_ACK_OUT   : out   std_logic;\r
-         SLV_DATA_IN   : in    std_logic_vector(31 downto 0);\r
-         SLV_DATA_OUT  : out   std_logic_vector(31 downto 0);\r
-         -- I2C connections\r
-         SDA_IN                : in    std_logic;\r
-         SDA_OUT               : out   std_logic;\r
-         SCL_IN                : in    std_logic;\r
-         SCL_OUT               : out   std_logic;\r
-         -- Status lines\r
-         STAT                  : out   std_logic_vector(31 downto 0) -- DEBUG\r
-       );\r
+port(\r
+       CLK_IN          : in    std_logic;\r
+       RESET_IN        : in    std_logic;\r
+       -- Slave bus\r
+       SLV_READ_IN     : in    std_logic;\r
+       SLV_WRITE_IN    : in    std_logic;\r
+       SLV_BUSY_OUT    : out   std_logic;\r
+       SLV_ACK_OUT     : out   std_logic;\r
+       SLV_DATA_IN     : in    std_logic_vector(31 downto 0);\r
+       SLV_DATA_OUT    : out   std_logic_vector(31 downto 0);\r
+       -- I2C connections\r
+       SDA_IN          : in    std_logic;\r
+       SDA_OUT         : out   std_logic;\r
+       SCL_IN          : in    std_logic;\r
+       SCL_OUT         : out   std_logic;\r
+       -- Status lines\r
+       STAT            : out   std_logic_vector(31 downto 0) -- DEBUG\r
+);\r
 end entity;\r
 \r
 architecture Behavioral of i2c_master is\r
 \r
 -- Signals\r
-       type STATES is (SLEEP,RD_BSY,WR_BSY,RD_RDY,WR_RDY,RD_ACK,WR_ACK,DONE);\r
-       signal CURRENT_STATE, NEXT_STATE: STATES;\r
-\r
-       -- slave bus signals\r
-       signal slv_busy_x               : std_logic;\r
-       signal slv_busy                 : std_logic;\r
-       signal slv_ack_x                : std_logic;\r
-       signal slv_ack                  : std_logic;\r
-       signal store_wr_x               : std_logic;\r
-       signal store_wr                 : std_logic;\r
-       signal store_rd_x               : std_logic;\r
-       signal store_rd                 : std_logic;\r
-\r
-       signal reg_slv_data_in  : std_logic_vector(31 downto 0); -- registered data input\r
-       signal reg_slv_data_out : std_logic_vector(31 downto 0); -- read back data\r
-       signal reg_busy                 : std_logic;\r
-\r
-       signal status_data              : std_logic_vector(31 downto 0);\r
-       signal i2c_debug                : std_logic_vector(31 downto 0);\r
+type STATES is (SLEEP,RD_BSY,WR_BSY,RD_RDY,WR_RDY,RD_ACK,WR_ACK,DONE);\r
+signal CURRENT_STATE, NEXT_STATE: STATES;\r
+\r
+-- slave bus signals\r
+signal slv_busy_x       : std_logic;\r
+signal slv_busy         : std_logic;\r
+signal slv_ack_x        : std_logic;\r
+signal slv_ack          : std_logic;\r
+signal store_wr_x       : std_logic;\r
+signal store_wr         : std_logic;\r
+signal store_rd_x       : std_logic;\r
+signal store_rd         : std_logic;\r
+\r
+signal reg_slv_data_in  : std_logic_vector(31 downto 0); -- registered data input\r
+signal reg_slv_data_out : std_logic_vector(31 downto 0); -- read back data\r
+signal reg_busy         : std_logic;\r
+\r
+signal status_data      : std_logic_vector(31 downto 0);\r
+signal i2c_debug        : std_logic_vector(31 downto 0);\r
 \r
 begin\r
 \r
@@ -56,26 +57,27 @@ begin
 ---------------------------------------------------------\r
 \r
 THE_I2C_SLIM: i2c_slim\r
-port map( CLK_IN               => clk_in,\r
-                 RESET_IN              => reset_in,\r
-                 -- I2C command / setup\r
-                 I2C_GO_IN             => reg_slv_data_in(31),\r
-                 ACTION_IN             => reg_slv_data_in(30),\r
-                 I2C_SPEED_IN  => reg_slv_data_in(29 downto 24),\r
-                 I2C_ADR_IN    => reg_slv_data_in(23 downto 16),\r
-                 I2C_CMD_IN    => reg_slv_data_in(15 downto 8),\r
-                 I2C_DW_IN             => reg_slv_data_in(7 downto 0),\r
-                 I2C_DR_OUT    => status_data(7 downto 0),\r
-                 STATUS_OUT    => status_data(31 downto 24),\r
-                 I2C_BUSY_OUT  => reg_busy,\r
-                 -- I2C connections\r
-                 SDA_IN                => sda_in,\r
-                 SDA_OUT               => sda_out,\r
-                 SCL_IN                => scl_in,\r
-                 SCL_OUT               => scl_out,\r
-                 -- Debug\r
-                 STAT                  => i2c_debug\r
-               );\r
+port map(\r
+       CLK_IN          => clk_in,\r
+       RESET_IN        => reset_in,\r
+       -- I2C command / setup\r
+       I2C_GO_IN       => reg_slv_data_in(31),\r
+       ACTION_IN       => reg_slv_data_in(30),\r
+       I2C_SPEED_IN    => reg_slv_data_in(29 downto 24),\r
+       I2C_ADR_IN      => reg_slv_data_in(23 downto 16),\r
+       I2C_CMD_IN      => reg_slv_data_in(15 downto 8),\r
+       I2C_DW_IN       => reg_slv_data_in(7 downto 0),\r
+       I2C_DR_OUT      => status_data(7 downto 0),\r
+       STATUS_OUT      => status_data(31 downto 24),\r
+       I2C_BUSY_OUT    => reg_busy,\r
+       -- I2C connections\r
+       SDA_IN          => sda_in,\r
+       SDA_OUT         => sda_out,\r
+       SCL_IN          => scl_in,\r
+       SCL_OUT         => scl_out,\r
+       -- Debug\r
+       STAT            => i2c_debug\r
+);\r
 \r
 status_data(23 downto 21) <= (others => '0');\r
 status_data(20 downto 16) <= i2c_debug(4 downto 0);\r
@@ -116,7 +118,7 @@ begin
        store_wr_x <= '0';\r
        store_rd_x <= '0';\r
        case CURRENT_STATE is\r
-               when SLEEP              =>      if   ( (reg_busy = '0') and (slv_read_in = '1') ) then\r
+               when SLEEP      =>  if   ( (reg_busy = '0') and (slv_read_in = '1') ) then\r
                                                                NEXT_STATE <= RD_RDY;\r
                                                                store_rd_x <= '1';\r
                                                        elsif( (reg_busy = '0') and (slv_write_in = '1') ) then\r
@@ -128,40 +130,40 @@ begin
                                                        elsif( (reg_busy = '1') and (slv_write_in = '1') ) then\r
                                                                NEXT_STATE <= WR_BSY;\r
                                                                slv_busy_x <= '1';\r
-                                                       else    \r
+                                                       else\r
                                                                NEXT_STATE <= SLEEP;\r
                                                        end if;\r
-               when RD_RDY             =>      NEXT_STATE <= RD_ACK;\r
+               when RD_RDY     =>  NEXT_STATE <= RD_ACK;\r
                                                        slv_ack_x  <= '1';\r
-               when WR_RDY             =>      NEXT_STATE <= WR_ACK;\r
+               when WR_RDY     =>  NEXT_STATE <= WR_ACK;\r
                                                        slv_ack_x  <= '1';\r
-               when RD_ACK             =>      if( slv_read_in = '0' ) then\r
+               when RD_ACK     =>  if( slv_read_in = '0' ) then\r
                                                                NEXT_STATE <= DONE;\r
                                                        else\r
                                                                NEXT_STATE <= RD_ACK;\r
                                                                slv_ack_x  <= '1';\r
                                                        end if;\r
-               when WR_ACK             =>      if( slv_write_in = '0' ) then\r
+               when WR_ACK     =>  if( slv_write_in = '0' ) then\r
                                                                NEXT_STATE <= DONE;\r
                                                        else\r
                                                                NEXT_STATE <= WR_ACK;\r
                                                                slv_ack_x  <= '1';\r
                                                        end if;\r
-               when RD_BSY             =>      if( slv_read_in = '0' ) then\r
+               when RD_BSY     =>  if( slv_read_in = '0' ) then\r
                                                                NEXT_STATE <= DONE;\r
                                                        else\r
                                                                NEXT_STATE <= RD_BSY;\r
                                                                slv_busy_x <= '1';\r
                                                        end if;\r
-               when WR_BSY             =>      if( slv_write_in = '0' ) then\r
+               when WR_BSY     =>  if( slv_write_in = '0' ) then\r
                                                                NEXT_STATE <= DONE;\r
                                                        else\r
                                                                NEXT_STATE <= WR_BSY;\r
                                                                slv_busy_x <= '1';\r
                                                        end if;\r
-               when DONE               =>      NEXT_STATE <= SLEEP;\r
-                       \r
-               when others             =>      NEXT_STATE <= SLEEP;\r
+               when DONE       =>  NEXT_STATE <= SLEEP;\r
+\r
+               when others     =>  NEXT_STATE <= SLEEP;\r
        end case;\r
 end process TRANSFORM;\r
 \r
index 42d8187791cc5c1db748f3d3e0f5a1d7ade8137d..42e22a97695716a5b4647e26cfcf0cfb3678284e 100644 (file)
@@ -6,72 +6,73 @@ use IEEE.STD_LOGIC_UNSIGNED.ALL;
 library work;\r
 use work.adcmv3_components.all;\r
 \r
-entity I2C_SENDB is\r
-port( CLK_IN           : in    std_logic;\r
-         RESET_IN              : in    std_logic;\r
-         DOBYTE_IN             : in    std_logic; \r
-         I2C_SPEED_IN  : in    std_logic_vector( 7 downto 0 );\r
-         I2C_BYTE_IN   : in    std_logic_vector( 8 downto 0 ); \r
-         I2C_BACK_OUT  : out   std_logic_vector( 8 downto 0 );\r
-      SDA_IN           : in    std_logic;\r
-      R_SDA_OUT                : out   std_logic;\r
-      S_SDA_OUT                : out   std_logic;\r
---       SCL_IN                : in    std_logic;\r
-         R_SCL_OUT             : out   std_logic;\r
-         S_SCL_OUT             : out   std_logic;\r
-         BDONE_OUT             : out   std_logic;\r
-         BOK_OUT               : out   std_logic;\r
-         BSM_OUT               : out   std_logic_vector( 3 downto 0 )\r
-    );\r
+entity i2c_sendb is\r
+port(\r
+       CLK_IN          : in    std_logic;\r
+       RESET_IN        : in    std_logic;\r
+       DOBYTE_IN       : in    std_logic;\r
+       I2C_SPEED_IN    : in    std_logic_vector( 7 downto 0 );\r
+       I2C_BYTE_IN     : in    std_logic_vector( 8 downto 0 );\r
+       I2C_BACK_OUT    : out   std_logic_vector( 8 downto 0 );\r
+       SDA_IN          : in    std_logic;\r
+       R_SDA_OUT       : out   std_logic;\r
+       S_SDA_OUT       : out   std_logic;\r
+--  SCL_IN          : in    std_logic;\r
+       R_SCL_OUT       : out   std_logic;\r
+       S_SCL_OUT       : out   std_logic;\r
+       BDONE_OUT       : out   std_logic;\r
+       BOK_OUT         : out   std_logic;\r
+       BSM_OUT         : out   std_logic_vector( 3 downto 0 )\r
+);\r
 end entity;\r
 \r
-architecture Behavioral of I2C_SENDB is\r
+architecture Behavioral of i2c_sendb is\r
 \r
 -- Signals\r
-       type STATES is (SLEEP,LCL,WCL,LCH,WCH,FREE,DONE);\r
-       signal CURRENT_STATE, NEXT_STATE: STATES;\r
+type STATES is (SLEEP,LCL,WCL,LCH,WCH,FREE,DONE);\r
+signal CURRENT_STATE, NEXT_STATE: STATES;\r
 \r
-       signal bsm                      : std_logic_vector( 3 downto 0 );\r
+signal bsm          : std_logic_vector( 3 downto 0 );\r
 \r
-       signal inc_bit_x        : std_logic;\r
-       signal inc_bit          : std_logic; -- increment bit counter for byte to send\r
-       signal rst_bit_x        : std_logic;\r
-       signal rst_bit          : std_logic; -- reset bit counter for byte to send\r
-       signal load_cyc_x       : std_logic;\r
-       signal load_cyc         : std_logic; -- load cycle counter (SCL length)\r
-       signal dec_cyc_x        : std_logic;\r
-       signal dec_cyc          : std_logic; -- decrement cycle counter (SCL length)\r
-       signal load_sr_x        : std_logic;\r
-       signal load_sr          : std_logic; -- load output shift register\r
-       signal shift_o_x        : std_logic;\r
-       signal shift_o          : std_logic; -- output shift register control\r
-       signal shift_i_x        : std_logic;\r
-       signal shift_i          : std_logic; -- input shift register control\r
-       signal bdone_x          : std_logic;\r
-       signal bdone            : std_logic;\r
-       signal r_scl_x          : std_logic;\r
-       signal r_scl            : std_logic; -- output for SCL \r
-       signal s_scl_x          : std_logic;\r
-       signal s_scl            : std_logic; -- output for SCL\r
+signal inc_bit_x    : std_logic;\r
+signal inc_bit      : std_logic; -- increment bit counter for byte to send\r
+signal rst_bit_x    : std_logic;\r
+signal rst_bit      : std_logic; -- reset bit counter for byte to send\r
+signal load_cyc_x   : std_logic;\r
+signal load_cyc     : std_logic; -- load cycle counter (SCL length)\r
+signal dec_cyc_x    : std_logic;\r
+signal dec_cyc      : std_logic; -- decrement cycle counter (SCL length)\r
+signal load_sr_x    : std_logic;\r
+signal load_sr      : std_logic; -- load output shift register\r
+signal shift_o_x    : std_logic;\r
+signal shift_o      : std_logic; -- output shift register control\r
+signal shift_i_x    : std_logic;\r
+signal shift_i      : std_logic; -- input shift register control\r
+signal bdone_x      : std_logic;\r
+signal bdone        : std_logic;\r
+signal r_scl_x      : std_logic;\r
+signal r_scl        : std_logic; -- output for SCL\r
+signal s_scl_x      : std_logic;\r
+signal s_scl        : std_logic; -- output for SCL\r
 \r
-       signal bctr                     : std_logic_vector( 3 downto 0 ); -- bit counter        (1...9)\r
-       signal cctr                     : std_logic_vector( 7 downto 0 ); -- counter for bit length\r
-       signal bok                      : std_logic;\r
-       signal cycdone          : std_logic; -- one counter period done\r
-       signal bytedone         : std_logic; -- all bits sents\r
-       signal in_sr            : std_logic_vector( 8 downto 0 ); -- shift register for byte in\r
-       signal out_sr           : std_logic_vector( 8 downto 0 ); -- shift register for byte out\r
-       signal i2c_back         : std_logic_vector( 8 downto 0 ); -- shift register for byte in\r
-       signal r_sda            : std_logic; -- output for SDA\r
-       signal s_sda            : std_logic; -- output for SDA\r
-       signal load                     : std_logic; -- delay register\r
-       signal i2c_d            : std_logic; -- auxiliary register\r
+signal bctr         : std_logic_vector( 3 downto 0 ); -- bit counter    (1...9)\r
+signal cctr         : std_logic_vector( 7 downto 0 ); -- counter for bit length\r
+signal bok          : std_logic;\r
+signal cycdone      : std_logic; -- one counter period done\r
+signal bytedone     : std_logic; -- all bits sents\r
+signal in_sr        : std_logic_vector( 8 downto 0 ); -- shift register for byte in\r
+signal out_sr       : std_logic_vector( 8 downto 0 ); -- shift register for byte out\r
+signal i2c_back     : std_logic_vector( 8 downto 0 ); -- shift register for byte in\r
+signal r_sda        : std_logic; -- output for SDA\r
+signal s_sda        : std_logic; -- output for SDA\r
+signal load         : std_logic; -- delay register\r
+signal i2c_d        : std_logic; -- auxiliary register\r
 \r
 -- Moduls\r
 \r
 begin\r
 \r
--- Bit counter (for byte to send)\r
+-- Bit counter  (for byte to send)\r
 THE_BIT_CTR_PROC: process( clk_in )\r
 begin\r
        if( rising_edge(clk_in) ) then\r
@@ -94,7 +95,7 @@ begin
        if( rising_edge(clk_in) ) then\r
                if( reset_in = '1' ) then\r
                        cctr <= (others => '0');\r
-               elsif( load_cyc = '1' ) then \r
+               elsif( load_cyc = '1' ) then\r
                        cctr <= i2c_speed_in;\r
                elsif( dec_cyc = '1' ) then\r
                        cctr <= cctr - 1;\r
@@ -104,7 +105,7 @@ end process THE_CYC_CTR_PROC;
 \r
 -- end of cycle recognition\r
 cycdone <= '1' when (cctr = x"00") else '0';\r
-       \r
+\r
 -- Bit output\r
 THE_BIT_OUT_PROC: process( clk_in )\r
 begin\r
@@ -125,7 +126,7 @@ end process THE_BIT_OUT_PROC;
 -- Bit input\r
 THE_BIT_IN_PROC: process( clk_in )\r
 begin\r
-       if( rising_edge(clk_in) ) then  \r
+       if( rising_edge(clk_in) ) then\r
                if   ( reset_in = '1' ) then\r
                        in_sr <= (others => '1');\r
                elsif( shift_o = '1' ) then\r
@@ -199,7 +200,7 @@ begin
        r_scl_x    <= '0';\r
        s_scl_x    <= '0';\r
        case CURRENT_STATE is\r
-               when SLEEP      =>      if( dobyte_in = '1' ) then\r
+               when SLEEP  =>  if( dobyte_in = '1' ) then\r
                                                        NEXT_STATE <= LCL;\r
                                                        inc_bit_x  <= '1';\r
                                                        load_cyc_x <= '1';\r
@@ -209,9 +210,9 @@ begin
                                                        NEXT_STATE <= SLEEP;\r
                                                        load_sr_x  <= '1';\r
                                                end if;\r
-               when LCL        =>      NEXT_STATE <= WCL;\r
+               when LCL    =>  NEXT_STATE <= WCL;\r
                                                dec_cyc_x  <= '1';\r
-               when WCL        =>      if( cycdone = '1' ) then\r
+               when WCL    =>  if( cycdone = '1' ) then\r
                                                        NEXT_STATE <= LCH;\r
                                                        load_cyc_x <= '1';\r
                                                        s_scl_x    <= '1';\r
@@ -219,9 +220,9 @@ begin
                                                        NEXT_STATE <= WCL;\r
                                                        dec_cyc_x  <= '1';\r
                                                end if;\r
-               when LCH        =>      NEXT_STATE <= WCH;\r
+               when LCH    =>  NEXT_STATE <= WCH;\r
                                                dec_cyc_x  <= '1';\r
-               when WCH        =>      if   ( (cycdone = '1') and (bytedone = '0') ) then\r
+               when WCH    =>  if   ( (cycdone = '1') and (bytedone = '0') ) then\r
                                                        NEXT_STATE <= LCL;\r
                                                        inc_bit_x  <= '1';\r
                                                        load_cyc_x <= '1';\r
@@ -236,10 +237,10 @@ begin
                                                        NEXT_STATE <= WCH;\r
                                                        dec_cyc_x  <= '1';\r
                                                end if;\r
-               when FREE       =>      NEXT_STATE <= DONE;\r
+               when FREE   =>  NEXT_STATE <= DONE;\r
                                                rst_bit_x  <= '1';\r
                                                bdone_x    <= '1';\r
-               when DONE       =>      if( dobyte_in = '0' ) then\r
+               when DONE   =>  if( dobyte_in = '0' ) then\r
                                                        NEXT_STATE <= SLEEP;\r
                                                else\r
                                                        NEXT_STATE <= DONE;\r
@@ -247,7 +248,7 @@ begin
                                                        bdone_x    <= '1';\r
                                                end if;\r
                                -- Just in case...\r
-               when others =>  NEXT_STATE <= SLEEP; \r
+               when others =>  NEXT_STATE <= SLEEP;\r
        end case;\r
 end process TRANSFORM;\r
 \r
@@ -255,15 +256,15 @@ end process TRANSFORM;
 DECODE: process(CURRENT_STATE)\r
 begin\r
        case CURRENT_STATE is\r
-               when SLEEP      =>      bsm <= x"0";\r
-               when LCL        =>      bsm <= x"1";\r
-               when WCL        =>      bsm <= x"2";\r
-               when LCH        =>      bsm <= x"3";\r
-               when WCH        =>      bsm <= x"4";\r
-               when FREE       =>      bsm <= x"5";\r
-               when DONE       =>      bsm <= x"6";\r
-               when others     =>      bsm <= x"f";\r
-       end case;                                                \r
+               when SLEEP  =>  bsm <= x"0";\r
+               when LCL    =>  bsm <= x"1";\r
+               when WCL    =>  bsm <= x"2";\r
+               when LCH    =>  bsm <= x"3";\r
+               when WCH    =>  bsm <= x"4";\r
+               when FREE   =>  bsm <= x"5";\r
+               when DONE   =>  bsm <= x"6";\r
+               when others =>  bsm <= x"f";\r
+       end case;\r
 end process DECODE;\r
 \r
 -- SCL and SDA output pulses\r
@@ -275,7 +276,7 @@ begin
                        r_sda <= '0';\r
                        s_sda <= '0';\r
                else\r
-                       load  <= shift_o; \r
+                       load  <= shift_o;\r
                        r_sda <= load and not i2c_d;\r
                        s_sda <= load and     i2c_d;\r
                end if;\r
@@ -293,7 +294,7 @@ i2c_back_out <= i2c_back;
 bdone_out    <= bdone;\r
 bok_out      <= bok;\r
 \r
--- Debugging   \r
+-- Debugging\r
 bsm_out      <= bsm;\r
 \r
 end Behavioral;\r
index 5c347ea446caa9a7854be2b25b08272d109a7f86..7ca568047df4741b492a3fac7c67b368e4746137 100644 (file)
@@ -10,85 +10,86 @@ use work.adcmv3_components.all;
 -- REMARK: this is not a bug, but a feature....\r
 \r
 entity i2c_slim is\r
-port( CLK_IN           : in    std_logic;\r
-         RESET_IN              : in    std_logic;\r
-         -- I2C command / setup\r
-         I2C_GO_IN             : in    std_logic; -- startbit to trigger I2C actions\r
-         ACTION_IN             : in    std_logic; -- '0' -> write, '1' -> read\r
-         I2C_SPEED_IN  : in    std_logic_vector( 5 downto 0 ); -- speed adjustment (to be defined)\r
-         I2C_ADR_IN    : in    std_logic_vector( 7 downto 0 ); -- I2C address byte (R/W bit is ignored)\r
-         I2C_CMD_IN    : in    std_logic_vector( 7 downto 0 ); -- I2C command byte (sent after address byte)\r
-         I2C_DW_IN             : in    std_logic_vector( 7 downto 0 ); -- data word for write command\r
-         I2C_DR_OUT    : out   std_logic_vector( 7 downto 0 ); -- data word from read command\r
-         STATUS_OUT    : out   std_logic_vector( 7 downto 0 ); -- status and error bits\r
-         I2C_BUSY_OUT  : out   std_logic;\r
-         -- I2C connections\r
-         SDA_IN                : in    std_logic;\r
-         SDA_OUT               : out   std_logic;\r
-         SCL_IN                : in    std_logic;\r
-         SCL_OUT               : out   std_logic;\r
-         -- Debug\r
-         STAT                  : out   std_logic_vector(31 downto 0)\r
-       );\r
+port(\r
+       CLK_IN          : in    std_logic;\r
+       RESET_IN        : in    std_logic;\r
+       -- I2C command / setup\r
+       I2C_GO_IN       : in    std_logic; -- startbit to trigger I2C actions\r
+       ACTION_IN       : in    std_logic; -- '0' -> write, '1' -> read\r
+       I2C_SPEED_IN    : in    std_logic_vector( 5 downto 0 ); -- speed adjustment (to be defined)\r
+       I2C_ADR_IN      : in    std_logic_vector( 7 downto 0 ); -- I2C address byte (R/W bit is ignored)\r
+       I2C_CMD_IN      : in    std_logic_vector( 7 downto 0 ); -- I2C command byte (sent after address byte)\r
+       I2C_DW_IN       : in    std_logic_vector( 7 downto 0 ); -- data word for write command\r
+       I2C_DR_OUT      : out   std_logic_vector( 7 downto 0 ); -- data word from read command\r
+       STATUS_OUT      : out   std_logic_vector( 7 downto 0 ); -- status and error bits\r
+       I2C_BUSY_OUT    : out   std_logic;\r
+       -- I2C connections\r
+       SDA_IN          : in    std_logic;\r
+       SDA_OUT         : out   std_logic;\r
+       SCL_IN          : in    std_logic;\r
+       SCL_OUT         : out   std_logic;\r
+       -- Debug\r
+       STAT            : out   std_logic_vector(31 downto 0)\r
+);\r
 end i2c_slim;\r
 \r
 architecture Behavioral of i2c_slim is\r
 \r
 -- Signals\r
-       type STATES is (SLEEP,LOADA,GSTART,SENDA,LOADC,SENDC,LOADD,SENDD,GSTOP,INC,\r
-                                       E_START,E_ADDR,E_CMD,E_WD,E_RSTART,E_RADDR,DONE,FAILED,CLRERR);\r
-       signal CURRENT_STATE, NEXT_STATE: STATES;\r
-       \r
-       signal bsm                      : std_logic_vector( 4 downto 0 );\r
-       signal phase            : std_logic; -- '0' => first phase, '1' => second phase of read cycle\r
+type STATES is (SLEEP,LOADA,GSTART,SENDA,LOADC,SENDC,LOADD,SENDD,GSTOP,INC,\r
+                               E_START,E_ADDR,E_CMD,E_WD,E_RSTART,E_RADDR,DONE,FAILED,CLRERR);\r
+signal CURRENT_STATE, NEXT_STATE: STATES;\r
 \r
-       signal start_x          : std_logic;\r
-       signal start            : std_logic; -- '0' => generate STOP, '1' => generate START\r
-       signal dostart_x        : std_logic;\r
-       signal dostart          : std_logic; -- trigger the GenStart module\r
-       signal dobyte_x         : std_logic;\r
-       signal dobyte           : std_logic; -- trigger the ByteSend module\r
-       signal i2c_done_x       : std_logic;\r
-       signal i2c_done         : std_logic; -- acknowledge signal to the outside world\r
-       signal running_x        : std_logic;\r
-       signal running          : std_logic; -- legacy\r
+signal bsm          : std_logic_vector( 4 downto 0 );\r
+signal phase        : std_logic; -- '0' => first phase, '1' => second phase of read cycle\r
 \r
-       signal load_a_x         : std_logic;\r
-       signal load_a           : std_logic;\r
-       signal load_c_x         : std_logic;\r
-       signal load_c           : std_logic;\r
-       signal load_d_x         : std_logic;\r
-       signal load_d           : std_logic;\r
+signal start_x      : std_logic;\r
+signal start        : std_logic; -- '0' => generate STOP, '1' => generate START\r
+signal dostart_x    : std_logic;\r
+signal dostart      : std_logic; -- trigger the GenStart module\r
+signal dobyte_x     : std_logic;\r
+signal dobyte       : std_logic; -- trigger the ByteSend module\r
+signal i2c_done_x   : std_logic;\r
+signal i2c_done     : std_logic; -- acknowledge signal to the outside world\r
+signal running_x    : std_logic;\r
+signal running      : std_logic; -- legacy\r
 \r
-       signal sdone            : std_logic; -- acknowledge signal from GenStart module\r
-       signal sok                      : std_logic; -- status signal from GenStart module\r
-       signal bdone            : std_logic; -- acknowledge signal from SendByte module\r
-       signal bok                      : std_logic; -- status signal from SendByte module\r
-       signal e_sf                     : std_logic; -- Start failed\r
-       signal e_anak           : std_logic; -- Adress byte NAK\r
-       signal e_cnak           : std_logic; -- Command byte NAK\r
-       signal e_dnak           : std_logic; -- Data byte NAK\r
-       signal e_rsf            : std_logic; -- Repeated Start failed\r
-       signal e_ranak          : std_logic; -- Repeated Adress NAK\r
-       signal i2c_byte         : std_logic_vector( 8 downto 0 );\r
-       signal i2c_dr           : std_logic_vector( 8 downto 0 );\r
+signal load_a_x     : std_logic;\r
+signal load_a       : std_logic;\r
+signal load_c_x     : std_logic;\r
+signal load_c       : std_logic;\r
+signal load_d_x     : std_logic;\r
+signal load_d       : std_logic;\r
 \r
-       signal s_scl            : std_logic;\r
-       signal r_scl            : std_logic;\r
-       signal s_sda            : std_logic;\r
-       signal r_sda            : std_logic;\r
-       signal r_scl_gs         : std_logic;\r
-       signal s_scl_gs         : std_logic;\r
-       signal r_sda_gs         : std_logic;\r
-       signal s_sda_gs         : std_logic;\r
-       signal r_scl_sb         : std_logic;\r
-       signal s_scl_sb         : std_logic;\r
-       signal r_sda_sb         : std_logic;\r
-       signal s_sda_sb         : std_logic;\r
+signal sdone        : std_logic; -- acknowledge signal from GenStart module\r
+signal sok          : std_logic; -- status signal from GenStart module\r
+signal bdone        : std_logic; -- acknowledge signal from SendByte module\r
+signal bok          : std_logic; -- status signal from SendByte module\r
+signal e_sf         : std_logic; -- Start failed\r
+signal e_anak       : std_logic; -- Adress byte NAK\r
+signal e_cnak       : std_logic; -- Command byte NAK\r
+signal e_dnak       : std_logic; -- Data byte NAK\r
+signal e_rsf        : std_logic; -- Repeated Start failed\r
+signal e_ranak      : std_logic; -- Repeated Adress NAK\r
+signal i2c_byte     : std_logic_vector( 8 downto 0 );\r
+signal i2c_dr       : std_logic_vector( 8 downto 0 );\r
 \r
-       signal gs_debug         : std_logic_vector(3 downto 0);\r
+signal s_scl        : std_logic;\r
+signal r_scl        : std_logic;\r
+signal s_sda        : std_logic;\r
+signal r_sda        : std_logic;\r
+signal r_scl_gs     : std_logic;\r
+signal s_scl_gs     : std_logic;\r
+signal r_sda_gs     : std_logic;\r
+signal s_sda_gs     : std_logic;\r
+signal r_scl_sb     : std_logic;\r
+signal s_scl_sb     : std_logic;\r
+signal r_sda_sb     : std_logic;\r
+signal s_sda_sb     : std_logic;\r
 \r
-       signal i2c_speed        : std_logic_vector(7 downto 0);\r
+signal gs_debug     : std_logic_vector(3 downto 0);\r
+\r
+signal i2c_speed    : std_logic_vector(7 downto 0);\r
 \r
 begin\r
 \r
@@ -150,18 +151,18 @@ begin
        load_c_x   <= '0';\r
        load_d_x   <= '0';\r
        case CURRENT_STATE is\r
-               when SLEEP              =>      if( i2c_go_in = '1' ) then\r
+               when SLEEP      =>  if( i2c_go_in = '1' ) then\r
                                                                NEXT_STATE <= CLRERR;\r
                                                        else\r
                                                                NEXT_STATE <= SLEEP;\r
                                                                running_x  <= '0';\r
                                                        end if;\r
-               when CLRERR             =>      NEXT_STATE <= LOADA;\r
+               when CLRERR     =>  NEXT_STATE <= LOADA;\r
                                                        load_a_x   <= '1';\r
-               when LOADA              =>      NEXT_STATE <= GSTART;\r
+               when LOADA      =>  NEXT_STATE <= GSTART;\r
                                                        start_x    <= '1';\r
                                                        dostart_x  <= '1';\r
-               when GSTART             =>      if   ( (sdone = '1') and (sok = '1') ) then\r
+               when GSTART     =>  if   ( (sdone = '1') and (sok = '1') ) then\r
                                                                NEXT_STATE <= SENDA;\r
                                                                dobyte_x   <= '1';\r
                                                        elsif( (sdone = '1') and (sok = '0') and (phase = '0') ) then\r
@@ -173,18 +174,18 @@ begin
                                                                start_x    <= '1';\r
                                                                dostart_x  <= '1';\r
                                                        end if;\r
-               when E_START    =>      NEXT_STATE <= FAILED;\r
+               when E_START    =>  NEXT_STATE <= FAILED;\r
                                                        dostart_x  <= '1';\r
-               when E_RSTART   =>      NEXT_STATE <= FAILED;\r
+               when E_RSTART   =>  NEXT_STATE <= FAILED;\r
                                                        dostart_x  <= '1';\r
-               when SENDA              =>      if   ( (bdone = '1') and (bok = '1') and (action_in = '0') ) then\r
+               when SENDA      =>  if   ( (bdone = '1') and (bok = '1') and (action_in = '0') ) then\r
                                                                NEXT_STATE <= LOADC; -- I2C write\r
-                                                               load_c_x   <= '1'; \r
+                                                               load_c_x   <= '1';\r
                                                        elsif( (bdone = '1') and (bok = '1') and (action_in = '1') and (phase = '0') ) then\r
-                                                               NEXT_STATE <= LOADC;    -- I2C read, send register address\r
+                                                               NEXT_STATE <= LOADC;    -- I2C read, send register address\r
                                                                load_c_x   <= '1';\r
                                                        elsif( (bdone = '1') and (bok = '1') and (action_in = '1') and (phase = '1') ) then\r
-                                                               NEXT_STATE <= LOADD;    -- I2C read, send 0xff dummy byte\r
+                                                               NEXT_STATE <= LOADD;    -- I2C read, send 0xff dummy byte\r
                                                                load_d_x   <= '1';\r
                                                        elsif( (bdone = '1') and (bok = '0') and (phase = '0') ) then\r
                                                                NEXT_STATE <= E_ADDR; -- first address phase failed\r
@@ -194,13 +195,13 @@ begin
                                                                NEXT_STATE <= SENDA;\r
                                                                dobyte_x   <= '1';\r
                                                        end if;\r
-               when E_ADDR             =>      NEXT_STATE <= FAILED;\r
+               when E_ADDR     =>  NEXT_STATE <= FAILED;\r
                                                        dostart_x  <= '1';\r
-               when E_RADDR    =>      NEXT_STATE <= FAILED;\r
+               when E_RADDR    =>  NEXT_STATE <= FAILED;\r
                                                        dostart_x  <= '1';\r
-               when LOADC              =>      NEXT_STATE <= SENDC;\r
---                                                     dobyte_x   <= '1';\r
-               when SENDC              =>      if   ( (bdone = '1') and (bok = '1') and (action_in = '0') ) then\r
+               when LOADC      =>  NEXT_STATE <= SENDC;\r
+--                          dobyte_x   <= '1';\r
+               when SENDC      =>  if   ( (bdone = '1') and (bok = '1') and (action_in = '0') ) then\r
                                                                NEXT_STATE <= LOADD; -- I2C write, prepare data\r
                                                                load_d_x   <= '1';\r
                                                        elsif( (bdone = '1') and (bok = '1') and (action_in = '1') ) then\r
@@ -211,25 +212,25 @@ begin
                                                        else\r
                                                                NEXT_STATE <= SENDC;\r
                                                                dobyte_x   <= '1';\r
-                                                       end if; \r
-               when E_CMD              =>      NEXT_STATE <= FAILED;\r
+                                                       end if;\r
+               when E_CMD      =>  NEXT_STATE <= FAILED;\r
                                                        dostart_x  <= '1';\r
-               when LOADD              =>      NEXT_STATE <= SENDD;\r
-               when SENDD              =>      if   ( (bdone = '1') and (bok = '1') and (action_in = '0') ) then\r
-                                                               NEXT_STATE <= GSTOP;    -- I2C write, data phase failed\r
+               when LOADD      =>  NEXT_STATE <= SENDD;\r
+               when SENDD      =>  if   ( (bdone = '1') and (bok = '1') and (action_in = '0') ) then\r
+                                                               NEXT_STATE <= GSTOP;    -- I2C write, data phase failed\r
                                                                dostart_x  <= '1';\r
                                                        elsif( (bdone = '1') and                 (action_in = '1') ) then\r
                                                                NEXT_STATE <= GSTOP; -- I2C read, data phase\r
-                                                               dostart_x  <= '1'; \r
+                                                               dostart_x  <= '1';\r
                                                        elsif( (bdone = '1') and (bok = '0') and (action_in = '0') ) then\r
                                                                NEXT_STATE <= E_WD; -- I2C write, data phase failed\r
                                                        else\r
                                                                NEXT_STATE <= SENDD;\r
                                                                dobyte_x   <= '1';\r
                                                        end if;\r
-               when E_WD               =>      NEXT_STATE <= FAILED;\r
+               when E_WD       =>  NEXT_STATE <= FAILED;\r
                                                        dostart_x  <= '1';\r
-               when GSTOP              =>      if   ( (sdone = '1') and (action_in = '0') ) then\r
+               when GSTOP      =>  if   ( (sdone = '1') and (action_in = '0') ) then\r
                                                                NEXT_STATE <= DONE;\r
                                                        elsif( (sdone = '1') and (action_in = '1') and (phase = '1') ) then\r
                                                                NEXT_STATE <= DONE;\r
@@ -239,9 +240,9 @@ begin
                                                                NEXT_STATE <= GSTOP;\r
                                                                dostart_x  <= '1';\r
                                                        end if;\r
-               when INC                =>      NEXT_STATE <= LOADA;\r
+               when INC        =>  NEXT_STATE <= LOADA;\r
                                                        load_a_x   <= '1';\r
-               when FAILED             =>      if( sdone = '1' ) then\r
+               when FAILED     =>  if( sdone = '1' ) then\r
                                                                NEXT_STATE <= DONE;\r
                                                                i2c_done_x <= '1';\r
                                                                running_x  <= '0';\r
@@ -249,7 +250,7 @@ begin
                                                                NEXT_STATE <= FAILED;\r
                                                                dostart_x  <= '1';\r
                                                        end if;\r
-               when DONE               =>      if( i2c_go_in = '1' ) then\r
+               when DONE       =>  if( i2c_go_in = '1' ) then\r
                                                                NEXT_STATE <= DONE;\r
                                                                i2c_done_x <= '1';\r
                                                                running_x  <= '0';\r
@@ -257,7 +258,7 @@ begin
                                                                NEXT_STATE <= SLEEP;\r
                                                        end if;\r
                                -- Just in case...\r
-               when others     =>      NEXT_STATE <= SLEEP; \r
+               when others     =>  NEXT_STATE <= SLEEP;\r
        end case;\r
 end process TRANSFORM;\r
 \r
@@ -265,27 +266,27 @@ end process TRANSFORM;
 DECODE: process(CURRENT_STATE)\r
 begin\r
        case CURRENT_STATE is\r
-               when SLEEP              =>      bsm <= b"00000"; -- 00\r
-               when CLRERR             =>      bsm <= b"01100"; -- 0c\r
-               when LOADA              =>      bsm <= b"00001"; -- 01\r
-               when GSTART             =>      bsm <= b"00010"; -- 02\r
-               when SENDA              =>      bsm <= b"00011"; -- 03\r
-               when LOADC              =>      bsm <= b"00100"; -- 04\r
-               when SENDC              =>      bsm <= b"00101"; -- 05\r
-               when LOADD              =>      bsm <= b"00110"; -- 06\r
-               when SENDD              =>      bsm <= b"00111"; -- 07\r
-               when GSTOP              =>      bsm <= b"01000"; -- 08\r
-               when INC                =>      bsm <= b"01001"; -- 09\r
-               when FAILED             =>      bsm <= b"01010"; -- 0a\r
-               when DONE               =>      bsm <= b"01011"; -- 0b\r
-               when E_START    =>      bsm <= b"10000"; -- 10\r
-               when E_RSTART   =>      bsm <= b"10001"; -- 11\r
-               when E_ADDR             =>      bsm <= b"10010"; -- 12\r
-               when E_RADDR    =>      bsm <= b"10011"; -- 13\r
-               when E_CMD              =>      bsm <= b"10100"; -- 14\r
-               when E_WD               =>      bsm <= b"10101"; -- 15\r
-               when others             =>      bsm <= b"11111"; -- 1f\r
-       end case;                                                        \r
+               when SLEEP      =>  bsm <= b"00000"; -- 00\r
+               when CLRERR     =>  bsm <= b"01100"; -- 0c\r
+               when LOADA      =>  bsm <= b"00001"; -- 01\r
+               when GSTART     =>  bsm <= b"00010"; -- 02\r
+               when SENDA      =>  bsm <= b"00011"; -- 03\r
+               when LOADC      =>  bsm <= b"00100"; -- 04\r
+               when SENDC      =>  bsm <= b"00101"; -- 05\r
+               when LOADD      =>  bsm <= b"00110"; -- 06\r
+               when SENDD      =>  bsm <= b"00111"; -- 07\r
+               when GSTOP      =>  bsm <= b"01000"; -- 08\r
+               when INC        =>  bsm <= b"01001"; -- 09\r
+               when FAILED     =>  bsm <= b"01010"; -- 0a\r
+               when DONE       =>  bsm <= b"01011"; -- 0b\r
+               when E_START    =>  bsm <= b"10000"; -- 10\r
+               when E_RSTART   =>  bsm <= b"10001"; -- 11\r
+               when E_ADDR     =>  bsm <= b"10010"; -- 12\r
+               when E_RADDR    =>  bsm <= b"10011"; -- 13\r
+               when E_CMD      =>  bsm <= b"10100"; -- 14\r
+               when E_WD       =>  bsm <= b"10101"; -- 15\r
+               when others     =>  bsm <= b"11111"; -- 1f\r
+       end case;\r
 end process DECODE;\r
 \r
 -- We need to load different data sets\r
@@ -313,40 +314,42 @@ end process LOAD_DATA_PROC;
 \r
 -- The SendByte module\r
 THE_I2C_SENDB: I2C_SENDB\r
-port map( CLK_IN               => clk_in,\r
-                 RESET_IN              => reset_in,\r
-                 DOBYTE_IN             => dobyte,\r
-                 I2C_SPEED_IN  => i2c_speed,\r
-                 I2C_BYTE_IN   => i2c_byte,\r
-                 I2C_BACK_OUT  => i2c_dr,\r
-                 SDA_IN                => sda_in,\r
-                 R_SDA_OUT             => r_sda_sb,\r
-                 S_SDA_OUT             => s_sda_sb,\r
---               SCL_IN                => scl_in,\r
-                 R_SCL_OUT             => r_scl_sb,\r
-                 S_SCL_OUT             => s_scl_sb,\r
-                 BDONE_OUT             => bdone,\r
-                 BOK_OUT               => bok,\r
-                 BSM_OUT               => open\r
-               );\r
+port map(\r
+       CLK_IN          => clk_in,\r
+       RESET_IN        => reset_in,\r
+       DOBYTE_IN       => dobyte,\r
+       I2C_SPEED_IN    => i2c_speed,\r
+       I2C_BYTE_IN     => i2c_byte,\r
+       I2C_BACK_OUT    => i2c_dr,\r
+       SDA_IN          => sda_in,\r
+       R_SDA_OUT       => r_sda_sb,\r
+        S_SDA_OUT      => s_sda_sb,\r
+--  SCL_IN          => scl_in,\r
+       R_SCL_OUT       => r_scl_sb,\r
+       S_SCL_OUT       => s_scl_sb,\r
+       BDONE_OUT       => bdone,\r
+       BOK_OUT         => bok,\r
+       BSM_OUT         => open\r
+);\r
 \r
 -- The GenStart module\r
 THE_I2C_GSTART: I2C_GSTART\r
-port map( CLK_IN               => clk_in,\r
-                 RESET_IN              => reset_in,\r
-                 START_IN              => start,\r
-          DOSTART_IN   => dostart,\r
-                 I2C_SPEED_IN  => i2c_speed,\r
-                 SDONE_OUT             => sdone,\r
-                 SOK_OUT               => sok,\r
-                 SDA_IN                => sda_in,\r
-                 SCL_IN                => scl_in,\r
-                 R_SCL_OUT             => r_scl_gs,\r
-                 S_SCL_OUT             => s_scl_gs,\r
-                 R_SDA_OUT             => r_sda_gs,\r
-                 S_SDA_OUT             => s_sda_gs,\r
-                 BSM_OUT               => gs_debug --open\r
-           );\r
+port map(\r
+       CLK_IN          => clk_in,\r
+       RESET_IN        => reset_in,\r
+       START_IN        => start,\r
+       DOSTART_IN      => dostart,\r
+       I2C_SPEED_IN    => i2c_speed,\r
+       SDONE_OUT       => sdone,\r
+       SOK_OUT         => sok,\r
+       SDA_IN          => sda_in,\r
+       SCL_IN          => scl_in,\r
+       R_SCL_OUT       => r_scl_gs,\r
+       S_SCL_OUT       => s_scl_gs,\r
+       R_SDA_OUT       => r_sda_gs,\r
+       S_SDA_OUT       => s_sda_gs,\r
+       BSM_OUT         => gs_debug --open\r
+);\r
 \r
 r_scl <= r_scl_gs or r_scl_sb;\r
 s_scl <= s_scl_gs or s_scl_sb;\r
@@ -377,31 +380,31 @@ THE_ERR_REG_PROC: process( clk_in )
 begin\r
        if( rising_edge(clk_in) ) then\r
                if( reset_in = '1' ) then\r
-                       e_sf            <= '0';\r
-                       e_anak          <= '0';\r
-                       e_cnak          <= '0';\r
-                       e_dnak          <= '0';\r
-                       e_rsf           <= '0';\r
-                       e_ranak         <= '0';\r
+                       e_sf        <= '0';\r
+                       e_anak      <= '0';\r
+                       e_cnak      <= '0';\r
+                       e_dnak      <= '0';\r
+                       e_rsf       <= '0';\r
+                       e_ranak     <= '0';\r
                elsif( CURRENT_STATE = CLRERR ) then\r
-                       e_sf            <= '0';\r
-                       e_anak          <= '0';\r
-                       e_cnak          <= '0';\r
-                       e_dnak          <= '0';\r
-                       e_rsf           <= '0';\r
-                       e_ranak         <= '0';\r
+                       e_sf        <= '0';\r
+                       e_anak      <= '0';\r
+                       e_cnak      <= '0';\r
+                       e_dnak      <= '0';\r
+                       e_rsf       <= '0';\r
+                       e_ranak     <= '0';\r
                elsif( CURRENT_STATE = E_START ) then\r
-                       e_sf            <= '1';\r
+                       e_sf        <= '1';\r
                elsif( CURRENT_STATE = E_RSTART ) then\r
-                       e_rsf           <= '1';\r
+                       e_rsf       <= '1';\r
                elsif( CURRENT_STATE = E_ADDR ) then\r
-                       e_anak          <= '1';\r
+                       e_anak      <= '1';\r
                elsif( CURRENT_STATE = E_RADDR ) then\r
-                       e_ranak         <= '1';\r
+                       e_ranak     <= '1';\r
                elsif( CURRENT_STATE = E_CMD ) then\r
-                       e_cnak          <= '1';\r
+                       e_cnak      <= '1';\r
                elsif( CURRENT_STATE = E_WD ) then\r
-                       e_dnak          <= '1';\r
+                       e_dnak      <= '1';\r
                end if;\r
        end if;\r
 end process THE_ERR_REG_PROC;\r
@@ -415,8 +418,8 @@ status_out(2) <= e_cnak;
 status_out(1) <= e_anak;\r
 status_out(0) <= e_sf;\r
 \r
--- Outputs     \r
-i2c_dr_out             <= i2c_dr(8 downto 1);\r
+-- Outputs\r
+i2c_dr_out      <= i2c_dr(8 downto 1);\r
 i2c_busy_out    <= running;\r
 \r
 -- Debug stuff\r
index 1ef4bd47a9772ef2a440e22ea21c69f304137eb6..fcc8d9a329bd965a25f7e3de29c65dcccdb8e4db 100644 (file)
@@ -9,138 +9,149 @@ use work.adcmv3_components.all;
 -- Missing: FIFO buffer handling, full / empty checks\r
 \r
 entity ipu_fifo_stage is\r
-       port( CLK_IN                                    : in    std_logic; -- 100MHz local clock\r
-                 RESET_IN                                      : in    std_logic; -- synchronous reset\r
-                 -- Slow control signals       \r
-                 SECTOR_IN                                     : in    std_logic_vector(2 downto 0);\r
-                 MODULE_IN                                     : in    std_logic_vector(2 downto 0);\r
-                 -- IPU channel connections\r
-                 IPU_NUMBER_IN                         : in    std_logic_vector(15 downto 0); -- trigger tag\r
-                 IPU_INFORMATION_IN            : in    std_logic_vector(7 downto 0); -- trigger information\r
-                 IPU_START_READOUT_IN          : in    std_logic; -- gimme data!\r
-                 IPU_DATA_OUT                          : out   std_logic_vector(31 downto 0); -- detector data, equipped with DHDR\r
-                 IPU_DATAREADY_OUT                     : out   std_logic; -- data is valid\r
-                 IPU_READOUT_FINISHED_OUT      : out   std_logic; -- no more data, end transfer, send TRM\r
-                 IPU_READ_IN                           : in    std_logic; -- read strobe, low every second cycle \r
-                 IPU_LENGTH_OUT                        : out   std_logic_vector(15 downto 0); -- length of data packet (32bit words) (?)\r
-                 IPU_ERROR_PATTERN_OUT         : out   std_logic_vector(31 downto 0); -- error pattern\r
-                 LVL2_COUNTER_OUT                      : out   std_logic_vector(15 downto 0); -- local IPU cycle counter\r
-                 -- DHDR buffer input\r
-                 DHDR_DATA_IN                          : in    std_logic_vector(31 downto 0);\r
-                 DHDR_LENGTH_IN                        : in    std_logic_vector(15 downto 0);\r
-                 DHDR_STORE_IN                         : in    std_logic;\r
-                 DHDR_BUF_FULL_OUT                     : out   std_logic;\r
-                 -- processed data input\r
-                 FIFO_START_IN                         : in    std_logic;\r
-                 FIFO_0_DATA_IN                        : in    std_logic_vector(39 downto 0);\r
-                 FIFO_1_DATA_IN                        : in    std_logic_vector(39 downto 0);\r
-                 FIFO_2_DATA_IN                        : in    std_logic_vector(39 downto 0);\r
-                 FIFO_3_DATA_IN                        : in    std_logic_vector(39 downto 0);\r
-                 FIFO_4_DATA_IN                        : in    std_logic_vector(39 downto 0);\r
-                 FIFO_5_DATA_IN                        : in    std_logic_vector(39 downto 0);\r
-                 FIFO_6_DATA_IN                        : in    std_logic_vector(39 downto 0);\r
-                 FIFO_7_DATA_IN                        : in    std_logic_vector(39 downto 0);\r
-                 FIFO_8_DATA_IN                        : in    std_logic_vector(39 downto 0);\r
-                 FIFO_9_DATA_IN                        : in    std_logic_vector(39 downto 0);\r
-                 FIFO_10_DATA_IN                       : in    std_logic_vector(39 downto 0);\r
-                 FIFO_11_DATA_IN                       : in    std_logic_vector(39 downto 0);\r
-                 FIFO_12_DATA_IN                       : in    std_logic_vector(39 downto 0);\r
-                 FIFO_13_DATA_IN                       : in    std_logic_vector(39 downto 0);\r
-                 FIFO_14_DATA_IN                       : in    std_logic_vector(39 downto 0);\r
-                 FIFO_15_DATA_IN                       : in    std_logic_vector(39 downto 0);\r
-                 FIFO_WE_IN                            : in    std_logic_vector(15 downto 0);\r
-                 FIFO_DONE_IN                          : in    std_logic; -- write level information into small FIFOs\r
-                 -- Debug signals\r
-                 DBG_BSM_OUT                           : out   std_logic_vector(7 downto 0);\r
-                 DBG_OUT                                       : out   std_logic_vector(63 downto 0)\r
-               );\r
+port(\r
+       CLK_IN                      : in    std_logic; -- 100MHz local clock\r
+       RESET_IN                    : in    std_logic; -- synchronous reset\r
+       -- Slow control signals\r
+       SECTOR_IN                   : in    std_logic_vector(2 downto 0);\r
+       MODULE_IN                   : in    std_logic_vector(2 downto 0);\r
+       -- IPU channel connections\r
+       IPU_NUMBER_IN               : in    std_logic_vector(15 downto 0); -- trigger tag\r
+       IPU_INFORMATION_IN          : in    std_logic_vector(7 downto 0); -- trigger information\r
+       IPU_START_READOUT_IN        : in    std_logic; -- gimme data!\r
+       IPU_DATA_OUT                : out   std_logic_vector(31 downto 0); -- detector data, equipped with DHDR\r
+       IPU_DATAREADY_OUT           : out   std_logic; -- data is valid\r
+       IPU_READOUT_FINISHED_OUT    : out   std_logic; -- no more data, end transfer, send TRM\r
+       IPU_READ_IN                 : in    std_logic; -- read strobe, low every second cycle\r
+       IPU_LENGTH_OUT              : out   std_logic_vector(15 downto 0); -- length of data packet (32bit words) (?)\r
+       IPU_ERROR_PATTERN_OUT       : out   std_logic_vector(31 downto 0); -- error pattern\r
+       LVL2_COUNTER_OUT            : out   std_logic_vector(15 downto 0); -- local IPU cycle counter\r
+       -- DHDR buffer input\r
+       DHDR_DATA_IN                : in    std_logic_vector(31 downto 0);\r
+       DHDR_LENGTH_IN              : in    std_logic_vector(15 downto 0);\r
+       DHDR_STORE_IN               : in    std_logic;\r
+       DHDR_BUF_FULL_OUT           : out   std_logic;\r
+       -- processed data input\r
+       FIFO_START_IN               : in    std_logic;\r
+       FIFO_SPACE_REQ_IN           : in    std_logic_vector(11 downto 0);\r
+       FIFO_0_DATA_IN              : in    std_logic_vector(39 downto 0);\r
+       FIFO_1_DATA_IN              : in    std_logic_vector(39 downto 0);\r
+       FIFO_2_DATA_IN              : in    std_logic_vector(39 downto 0);\r
+       FIFO_3_DATA_IN              : in    std_logic_vector(39 downto 0);\r
+       FIFO_4_DATA_IN              : in    std_logic_vector(39 downto 0);\r
+       FIFO_5_DATA_IN              : in    std_logic_vector(39 downto 0);\r
+       FIFO_6_DATA_IN              : in    std_logic_vector(39 downto 0);\r
+       FIFO_7_DATA_IN              : in    std_logic_vector(39 downto 0);\r
+       FIFO_8_DATA_IN              : in    std_logic_vector(39 downto 0);\r
+       FIFO_9_DATA_IN              : in    std_logic_vector(39 downto 0);\r
+       FIFO_10_DATA_IN             : in    std_logic_vector(39 downto 0);\r
+       FIFO_11_DATA_IN             : in    std_logic_vector(39 downto 0);\r
+       FIFO_12_DATA_IN             : in    std_logic_vector(39 downto 0);\r
+       FIFO_13_DATA_IN             : in    std_logic_vector(39 downto 0);\r
+       FIFO_14_DATA_IN             : in    std_logic_vector(39 downto 0);\r
+       FIFO_15_DATA_IN             : in    std_logic_vector(39 downto 0);\r
+       FIFO_WE_IN                  : in    std_logic_vector(15 downto 0);\r
+       FIFO_DONE_IN                : in    std_logic; -- write level information into small FIFOs\r
+       -- Debug signals\r
+       DBG_BSM_OUT                 : out   std_logic_vector(7 downto 0);\r
+       DBG_OUT                     : out   std_logic_vector(63 downto 0)\r
+);\r
 end;\r
 \r
 architecture behavioral of ipu_fifo_stage is\r
 \r
-       -- Placer Directives\r
-       attribute HGROUP : string;\r
-       -- for whole architecture\r
-       attribute HGROUP of behavioral : architecture  is "IPU_FIFO_STAGE_group";\r
-\r
-       -- state machine definitions\r
-       type STATES is (SLEEP,RDLF,GETFD,DELH,WHDR,GETD,WAITD,WAITDL,DEL0,DONE);        \r
-       signal CURRENT_STATE, NEXT_STATE: STATES;\r
-\r
-       -- signals\r
-       signal debug                            : std_logic_vector(63 downto 0);\r
-       signal bsm_x                            : std_logic_vector(7 downto 0);\r
-       signal next_trgnum_match        : std_logic;\r
-       signal trgnum_match                     : std_logic;\r
-\r
-       signal dhdr_fifo_in                     : std_logic_vector(47 downto 0);\r
-       signal dhdr_fifo_out            : std_logic_vector(47 downto 0);\r
-       signal dhdr_avail                       : std_logic;\r
-       signal next_todo_list           : std_logic_vector(15 downto 0);\r
-       signal todo_list                        : std_logic_vector(15 downto 0);\r
-       signal next_fifo_sel            : std_logic_vector(4 downto 0);\r
-       signal fifo_sel                         : std_logic_vector(4 downto 0);\r
-       signal next_sel_fifo            : std_logic_vector(15 downto 0);\r
-       signal sel_fifo                         : std_logic_vector(15 downto 0);\r
-\r
-       signal comb_rd_dfifo            : std_logic_vector(15 downto 0);\r
-       signal comb_st_data                     : std_logic_vector(15 downto 0);\r
-       signal comb_ack_todo            : std_logic;\r
-\r
-       signal ipu_out_data                     : std_logic_vector(31 downto 0);\r
-\r
-       -- state machine signals\r
-       signal next_rd_lfifo            : std_logic;\r
-       signal rd_lfifo                         : std_logic; -- read current LENGTH_FIFO information (as well as LockAtMe bit)\r
-       signal next_dataready           : std_logic;\r
-       signal dataready                        : std_logic; -- data word is available\r
-       signal next_set_hdr                     : std_logic;\r
-       signal set_hdr                          : std_logic; -- store DHDR in output register\r
-       signal next_set_data            : std_logic;\r
-       signal set_data                         : std_logic; -- store DATA from current DATA FIFO in output register\r
-       signal next_ld_todo                     : std_logic;\r
-       signal ld_todo                          : std_logic; -- load initial TODO list\r
-       signal next_ack_todo            : std_logic;\r
-       signal ack_todo                         : std_logic; -- remove current entry from TODO list\r
-       signal next_finished            : std_logic;\r
-       signal finished                         : std_logic; -- readout is finished\r
-\r
-       -- generate needs arrays...\r
-       type fifo_data_t is array (0 to 15) of std_logic_vector(26 downto 0);\r
-       signal fifo_in_data                     : fifo_data_t;\r
-       signal fifo_out_data            : fifo_data_t;\r
-       type fifo_count_t is array (0 to 15) of std_logic_vector(10 downto 0);\r
-       signal fifo_in_count            : fifo_count_t;\r
-       type fifo_todo_t is array (0 to 15) of std_logic_vector(9 downto 0);\r
-       signal fifo_todo                        : fifo_todo_t;\r
-       type fifo_ldata_t is array (0 to 15) of std_logic_vector(10 downto 0);\r
-       signal fifo_ldata                       : fifo_ldata_t;\r
-       type fifo_wcnt_t is array (0 to 15) of std_logic_vector(11 downto 0);\r
-       signal fifo_wcnt                        : fifo_wcnt_t;\r
-       signal fifo_data_free           : fifo_wcnt_t;\r
+-- Placer Directives\r
+attribute HGROUP : string;\r
+-- for whole architecture\r
+attribute HGROUP of behavioral : architecture  is "IPU_FIFO_STAGE_group";\r
+\r
+-- state machine definitions\r
+type STATES is (SLEEP,RDLF,GETFD,DELH,WHDR,GETD,WAITD,WAITDL,DEL0,DONE);\r
+signal CURRENT_STATE, NEXT_STATE: STATES;\r
+\r
+-- signals\r
+signal debug                : std_logic_vector(63 downto 0);\r
+signal bsm_x                : std_logic_vector(7 downto 0);\r
+signal next_trgnum_match    : std_logic;\r
+signal trgnum_match         : std_logic;\r
+\r
+signal dhdr_fifo_in         : std_logic_vector(47 downto 0);\r
+signal dhdr_fifo_out        : std_logic_vector(47 downto 0);\r
+signal dhdr_avail           : std_logic;\r
+signal next_todo_list       : std_logic_vector(15 downto 0);\r
+signal todo_list            : std_logic_vector(15 downto 0);\r
+signal next_fifo_sel        : std_logic_vector(4 downto 0);\r
+signal fifo_sel             : std_logic_vector(4 downto 0);\r
+signal next_sel_fifo        : std_logic_vector(15 downto 0);\r
+signal sel_fifo             : std_logic_vector(15 downto 0);\r
+\r
+signal comb_rd_dfifo        : std_logic_vector(15 downto 0);\r
+signal comb_st_data         : std_logic_vector(15 downto 0);\r
+signal comb_ack_todo        : std_logic;\r
+\r
+signal ipu_out_data         : std_logic_vector(31 downto 0);\r
+\r
+-- state machine signals\r
+signal next_rd_lfifo        : std_logic;\r
+signal rd_lfifo             : std_logic; -- read current LENGTH_FIFO information (as well as LockAtMe bit)\r
+signal next_dataready       : std_logic;\r
+signal dataready            : std_logic; -- data word is available\r
+signal next_set_hdr         : std_logic;\r
+signal set_hdr              : std_logic; -- store DHDR in output register\r
+signal next_set_data        : std_logic;\r
+signal set_data             : std_logic; -- store DATA from current DATA FIFO in output register\r
+signal next_ld_todo         : std_logic;\r
+signal ld_todo              : std_logic; -- load initial TODO list\r
+signal next_ack_todo        : std_logic;\r
+signal ack_todo             : std_logic; -- remove current entry from TODO list\r
+signal next_finished        : std_logic;\r
+signal finished             : std_logic; -- readout is finished\r
+signal next_preload         : std_logic;\r
+signal preload              : std_logic; -- read first data word from DATA FIFOs\r
+\r
+-- generate needs arrays...\r
+type fifo_data_t is array (0 to 15) of std_logic_vector(26 downto 0);\r
+signal fifo_in_data         : fifo_data_t;\r
+signal fifo_out_data        : fifo_data_t;\r
+type fifo_count_t is array (0 to 15) of std_logic_vector(10 downto 0);\r
+signal fifo_in_count        : fifo_count_t;\r
+type fifo_todo_t is array (0 to 15) of std_logic_vector(9 downto 0);\r
+signal fifo_todo            : fifo_todo_t;\r
+type fifo_ldata_t is array (0 to 15) of std_logic_vector(10 downto 0);\r
+signal fifo_ldata           : fifo_ldata_t;\r
+type fifo_wcnt_t is array (0 to 15) of std_logic_vector(11 downto 0);\r
+signal fifo_wcnt            : fifo_wcnt_t;\r
+signal fifo_data_free       : fifo_wcnt_t;\r
+type fifo_lunused_t is array (0 to 15) of std_logic_vector(6 downto 0);\r
+signal fifo_lunused         : fifo_lunused_t;\r
+\r
+signal dfifo_available      : std_logic_vector(15 downto 0);\r
+\r
+signal lfifo_empty          : std_logic_vector(15 downto 0);\r
+signal lfifo_full           : std_logic_vector(15 downto 0);\r
+\r
+signal next_fifo_done       : std_logic_vector(15 downto 0);\r
+signal fifo_done            : std_logic_vector(15 downto 0);\r
+signal next_fifo_last       : std_logic;\r
+signal fifo_last            : std_logic;\r
+\r
+signal my_trg_number        : std_logic_vector(31 downto 0); -- just for checking!\r
+\r
+signal old_apv_num          : std_logic_vector(3 downto 0);\r
+signal new_apv_num          : std_logic_vector(3 downto 0);\r
+\r
+signal cyclectr             : std_logic_vector(15 downto 0); -- cycle counter\r
+\r
+signal next_dhdr_buf_full   : std_logic;\r
+signal dhdr_buf_full        : std_logic;\r
 \r
-       \r
-       signal next_fifo_done           : std_logic_vector(15 downto 0);\r
-       signal fifo_done                        : std_logic_vector(15 downto 0);\r
-       signal next_fifo_last           : std_logic;\r
-       signal fifo_last                        : std_logic;\r
-       \r
-       signal my_trg_number            : std_logic_vector(31 downto 0); -- just for checking!\r
-       \r
-       signal old_apv_num                      : std_logic_vector(3 downto 0);\r
-       signal new_apv_num                      : std_logic_vector(3 downto 0);\r
-\r
-       signal cyclectr                         : std_logic_vector(15 downto 0); -- cycle counter\r
-\r
-       signal dhdr_buf_full            : std_logic;\r
-       \r
 begin\r
 ---------------------------------------------------------------------------\r
 -- Statemachine\r
 ---------------------------------------------------------------------------\r
 \r
 -- state registers\r
-STATE_MEM: process( clk_in ) \r
+STATE_MEM: process( clk_in )\r
 begin\r
        if( rising_edge(clk_in) ) then\r
                if( reset_in = '1' ) then\r
@@ -151,6 +162,7 @@ begin
                        set_data         <= '0';\r
                        ld_todo          <= '0';\r
                        ack_todo         <= '0';\r
+                       preload          <= '0';\r
                        finished         <= '0';\r
                else\r
                        CURRENT_STATE    <= NEXT_STATE;\r
@@ -160,6 +172,7 @@ begin
                        set_data         <= next_set_data;\r
                        ld_todo          <= next_ld_todo;\r
                        ack_todo         <= next_ack_todo;\r
+                       preload          <= next_preload;\r
                        finished         <= next_finished;\r
                end if;\r
        end if;\r
@@ -175,21 +188,23 @@ begin
        next_set_data      <= '0';\r
        next_ld_todo       <= '0';\r
        next_ack_todo      <= '0';\r
+       next_preload       <= '0';\r
        next_finished      <= '0';\r
        case CURRENT_STATE is\r
-               when SLEEP      =>      if( (dhdr_avail = '1') and (ipu_start_readout_in = '1') ) then\r
+               when SLEEP  =>  if( (dhdr_avail = '1') and (ipu_start_readout_in = '1') ) then\r
                                                        NEXT_STATE    <= RDLF;\r
                                                        next_rd_lfifo <= '1';\r
                                                else\r
                                                        NEXT_STATE   <= SLEEP;\r
                                                end if;\r
-               when RDLF       =>      NEXT_STATE    <= GETFD;\r
+               when RDLF   =>  NEXT_STATE    <= GETFD;\r
                                                next_set_hdr  <= '1';\r
                                                next_ld_todo  <= '1';\r
-               when GETFD      =>      NEXT_STATE <= DELH;\r
-               when DELH       =>      NEXT_STATE     <= WHDR;\r
+               when GETFD  =>  NEXT_STATE    <= DELH;\r
+                                               next_preload  <= '1';\r
+               when DELH   =>  NEXT_STATE     <= WHDR;\r
                                                next_dataready <= '1';\r
-               when WHDR       =>      if   ( (ipu_read_in = '1') and (fifo_sel(4) = '0') ) then\r
+               when WHDR   =>  if   ( (ipu_read_in = '1') and (fifo_sel(4) = '0') ) then\r
                                                        NEXT_STATE     <= GETD; -- there are datawords to send\r
                                                        next_set_data  <= '1';\r
                                                        next_ack_todo  <= '1';\r
@@ -200,22 +215,22 @@ begin
                                                        NEXT_STATE     <= WHDR;\r
                                                        next_dataready <= '1';\r
                                                end if;\r
-               when GETD       =>      if( fifo_last = '1' ) then\r
+               when GETD   =>  if( fifo_last = '1' ) then\r
                                                        NEXT_STATE     <= DEL0;\r
-                                               else \r
+                                               else\r
                                                        NEXT_STATE     <= WAITD;\r
                                                        next_dataready <= '1';\r
                                                end if;\r
-               when WAITD      =>      if( ipu_read_in = '1' ) then\r
+               when WAITD  =>  if( ipu_read_in = '1' ) then\r
                                                        NEXT_STATE     <= GETD;\r
                                                        next_set_data  <= '1';\r
                                                else\r
                                                        NEXT_STATE     <= WAITD;\r
                                                        next_dataready <= '1';\r
                                                end if;\r
-               when DEL0       =>      NEXT_STATE     <= WAITDL;\r
+               when DEL0   =>  NEXT_STATE     <= WAITDL;\r
                                                next_dataready <= '1';\r
-               when WAITDL     =>      if   ( (ipu_read_in = '1') and (fifo_sel(4) = '0') ) then\r
+               when WAITDL =>  if   ( (ipu_read_in = '1') and (fifo_sel(4) = '0') ) then\r
                                                        NEXT_STATE     <= GETD;\r
                                                        next_set_data  <= '1';\r
                                                        next_ack_todo  <= '1';\r
@@ -226,13 +241,13 @@ begin
                                                        NEXT_STATE     <= WAITDL;\r
                                                        next_dataready <= '1';\r
                                                end if;\r
-               when DONE       =>      if( ipu_start_readout_in = '0' ) then\r
+               when DONE   =>  if( ipu_start_readout_in = '0' ) then\r
                                                        NEXT_STATE <= SLEEP;\r
                                                else\r
                                                        NEXT_STATE <= DONE;\r
                                                end if;\r
 \r
-               when others     =>      NEXT_STATE <= SLEEP;\r
+               when others =>  NEXT_STATE <= SLEEP;\r
        end case;\r
 end process STATE_TRANSFORM;\r
 \r
@@ -244,96 +259,122 @@ ipu_readout_finished_out <= finished;
 ipu_length_out <= dhdr_fifo_out(47 downto 32);\r
 \r
 -- IPU error pattern: [24] => trigger tag mismatch\r
-ipu_error_pattern_out(31 downto 25) <= (others => '0');\r
-ipu_error_pattern_out(24)           <= not trgnum_match;\r
-ipu_error_pattern_out(23 downto 0)  <= (others => '0');\r
+ipu_error_pattern_out(31 downto 24) <= (others => '0');\r
+ipu_error_pattern_out(23)           <= '0'; -- "single broken event"\r
+ipu_error_pattern_out(23)           <= '0'; -- "severe problem"\r
+ipu_error_pattern_out(21)           <= '0'; -- "partially not found"\r
+ipu_error_pattern_out(20)           <= not trgnum_match; -- "not found"\r
+ipu_error_pattern_out(19 downto 0)  <= (others => '0');\r
 \r
 -- state decoding (ONLY FOR DEBUGGING!)\r
 STATE_DECODE: process( CURRENT_STATE )\r
 begin\r
        case CURRENT_STATE is\r
-               when SLEEP      =>      bsm_x <= x"00";\r
-               when RDLF       =>      bsm_x <= x"01";\r
-               when GETFD      =>      bsm_x <= x"02";\r
-               when DELH       =>      bsm_x <= x"03";\r
-               when WHDR       =>      bsm_x <= x"04";\r
-               when GETD       =>      bsm_x <= x"05";\r
-               when WAITD      =>      bsm_x <= x"06";\r
-               when WAITDL     =>      bsm_x <= x"07";\r
-               when DEL0       =>      bsm_x <= x"08";\r
-               when DONE       =>      bsm_x <= x"09";\r
-               when others     =>      bsm_x <= x"ff";\r
+               when SLEEP  =>  bsm_x <= x"00";\r
+               when RDLF   =>  bsm_x <= x"01";\r
+               when GETFD  =>  bsm_x <= x"02";\r
+               when DELH   =>  bsm_x <= x"03";\r
+               when WHDR   =>  bsm_x <= x"04";\r
+               when GETD   =>  bsm_x <= x"05";\r
+               when WAITD  =>  bsm_x <= x"06";\r
+               when WAITDL =>  bsm_x <= x"07";\r
+               when DEL0   =>  bsm_x <= x"08";\r
+               when DONE   =>  bsm_x <= x"09";\r
+               when others =>  bsm_x <= x"ff";\r
        end case;\r
 end process STATE_DECODE;\r
 \r
 ---------------------------------------------------------------------------\r
 -- Aliasing the data streams\r
 ---------------------------------------------------------------------------\r
-fifo_in_data(0)  <= fifo_0_data_in(26 downto 0);       fifo_in_count(0)  <= fifo_0_data_in(37 downto 27);\r
-fifo_in_data(1)  <= fifo_1_data_in(26 downto 0);       fifo_in_count(1)  <= fifo_1_data_in(37 downto 27);\r
-fifo_in_data(2)  <= fifo_2_data_in(26 downto 0);       fifo_in_count(2)  <= fifo_2_data_in(37 downto 27);\r
-fifo_in_data(3)  <= fifo_3_data_in(26 downto 0);       fifo_in_count(3)  <= fifo_3_data_in(37 downto 27);\r
-fifo_in_data(4)  <= fifo_4_data_in(26 downto 0);       fifo_in_count(4)  <= fifo_4_data_in(37 downto 27);\r
-fifo_in_data(5)  <= fifo_5_data_in(26 downto 0);       fifo_in_count(5)  <= fifo_5_data_in(37 downto 27);\r
-fifo_in_data(6)  <= fifo_6_data_in(26 downto 0);       fifo_in_count(6)  <= fifo_6_data_in(37 downto 27);\r
-fifo_in_data(7)  <= fifo_7_data_in(26 downto 0);       fifo_in_count(7)  <= fifo_7_data_in(37 downto 27);\r
-fifo_in_data(8)  <= fifo_8_data_in(26 downto 0);       fifo_in_count(8)  <= fifo_8_data_in(37 downto 27);\r
-fifo_in_data(9)  <= fifo_9_data_in(26 downto 0);       fifo_in_count(9)  <= fifo_9_data_in(37 downto 27);\r
-fifo_in_data(10) <= fifo_10_data_in(26 downto 0);      fifo_in_count(10) <= fifo_10_data_in(37 downto 27);\r
-fifo_in_data(11) <= fifo_11_data_in(26 downto 0);      fifo_in_count(11) <= fifo_11_data_in(37 downto 27);\r
-fifo_in_data(12) <= fifo_12_data_in(26 downto 0);      fifo_in_count(12) <= fifo_12_data_in(37 downto 27);\r
-fifo_in_data(13) <= fifo_13_data_in(26 downto 0);      fifo_in_count(13) <= fifo_13_data_in(37 downto 27);\r
-fifo_in_data(14) <= fifo_14_data_in(26 downto 0);      fifo_in_count(14) <= fifo_14_data_in(37 downto 27);\r
-fifo_in_data(15) <= fifo_15_data_in(26 downto 0);      fifo_in_count(15) <= fifo_15_data_in(37 downto 27);\r
+fifo_in_data(0)  <= fifo_0_data_in(26 downto 0);    fifo_in_count(0)  <= fifo_0_data_in(37 downto 27);\r
+fifo_in_data(1)  <= fifo_1_data_in(26 downto 0);    fifo_in_count(1)  <= fifo_1_data_in(37 downto 27);\r
+fifo_in_data(2)  <= fifo_2_data_in(26 downto 0);    fifo_in_count(2)  <= fifo_2_data_in(37 downto 27);\r
+fifo_in_data(3)  <= fifo_3_data_in(26 downto 0);    fifo_in_count(3)  <= fifo_3_data_in(37 downto 27);\r
+fifo_in_data(4)  <= fifo_4_data_in(26 downto 0);    fifo_in_count(4)  <= fifo_4_data_in(37 downto 27);\r
+fifo_in_data(5)  <= fifo_5_data_in(26 downto 0);    fifo_in_count(5)  <= fifo_5_data_in(37 downto 27);\r
+fifo_in_data(6)  <= fifo_6_data_in(26 downto 0);    fifo_in_count(6)  <= fifo_6_data_in(37 downto 27);\r
+fifo_in_data(7)  <= fifo_7_data_in(26 downto 0);    fifo_in_count(7)  <= fifo_7_data_in(37 downto 27);\r
+fifo_in_data(8)  <= fifo_8_data_in(26 downto 0);    fifo_in_count(8)  <= fifo_8_data_in(37 downto 27);\r
+fifo_in_data(9)  <= fifo_9_data_in(26 downto 0);    fifo_in_count(9)  <= fifo_9_data_in(37 downto 27);\r
+fifo_in_data(10) <= fifo_10_data_in(26 downto 0);   fifo_in_count(10) <= fifo_10_data_in(37 downto 27);\r
+fifo_in_data(11) <= fifo_11_data_in(26 downto 0);   fifo_in_count(11) <= fifo_11_data_in(37 downto 27);\r
+fifo_in_data(12) <= fifo_12_data_in(26 downto 0);   fifo_in_count(12) <= fifo_12_data_in(37 downto 27);\r
+fifo_in_data(13) <= fifo_13_data_in(26 downto 0);   fifo_in_count(13) <= fifo_13_data_in(37 downto 27);\r
+fifo_in_data(14) <= fifo_14_data_in(26 downto 0);   fifo_in_count(14) <= fifo_14_data_in(37 downto 27);\r
+fifo_in_data(15) <= fifo_15_data_in(26 downto 0);   fifo_in_count(15) <= fifo_15_data_in(37 downto 27);\r
 \r
 ---------------------------------------------------------------------------\r
 -- DATA and LENGTH FIFO for the APV data streams\r
 ---------------------------------------------------------------------------\r
 \r
+-- We also store the DHDR inside the LFIFOs. They are big enough and have unused bits like hell.\r
+dhdr_fifo_in <= dhdr_length_in & dhdr_data_in;\r
+\r
 GEN_FIFO: for i in 0 to 15 generate\r
        THE_DFIFO: fifo_2kx27\r
-       port map( DATA          => fifo_in_data(i),\r
-                         CLOCK         => clk_in, \r
-                         WREN          => fifo_we_in(i), \r
-                         RDEN          => comb_rd_dfifo(i), -- BUG\r
-                         RESET         => reset_in, \r
-                         Q                     => fifo_out_data(i), -- BUG\r
-                         WCNT          => fifo_wcnt(i), -- BUG\r
-                         EMPTY         => open, -- BUG\r
-                         FULL          => open  -- BUG\r
-                       );\r
+       port map(\r
+               DATA        => fifo_in_data(i),\r
+               CLOCK       => clk_in,\r
+               WREN        => fifo_we_in(i),\r
+               RDEN        => comb_rd_dfifo(i), -- BUG\r
+               RESET       => reset_in,\r
+               Q           => fifo_out_data(i), -- BUG\r
+               WCNT        => fifo_wcnt(i), -- BUG\r
+               EMPTY       => open, -- BUG\r
+               FULL        => open  -- BUG\r
+       );\r
 \r
        -- Combinatorial read pulse for FIFOs\r
-       comb_rd_dfifo(i) <= (not fifo_done(i) and sel_fifo(i) and ipu_read_in and dataready) or (ld_todo and fifo_ldata(i)(10));   \r
+       comb_rd_dfifo(i) <= (not fifo_done(i) and sel_fifo(i) and ipu_read_in and dataready) or (preload and fifo_ldata(i)(10));\r
 \r
        -- Combinatorial store pulse for data (last data word need to be transfered also!)\r
        comb_st_data(i)  <= (sel_fifo(i) and ipu_read_in and dataready);\r
-       -- BUGBUGBUG: one clock cycle too late when changing FIFOs....\r
 \r
        -- getting the number of free entries in the data fifo by subtracting [size] - [used entries]\r
        THE_SUBTRACTOR: suber_12bit\r
-       port map( DATAA         => x"800",\r
-                         DATAB         => fifo_wcnt(i),\r
-                         CLOCK         => clk_in,\r
-                         RESET         => reset_in,\r
-                         CLOCKEN       => '1',\r
-                         RESULT        => fifo_data_free(i)\r
-                       );\r
-\r
+       port map(\r
+               DATAA       => x"800",\r
+               DATAB       => fifo_wcnt(i),\r
+               CLOCK       => clk_in,\r
+               RESET       => reset_in,\r
+               CLOCKEN     => '1',\r
+               RESULT      => fifo_data_free(i)\r
+       );\r
+\r
+       -- check if next event will still fit into data FIFO\r
+       THE_COMPARATOR: comp_12bit\r
+       port map(\r
+               DATAA   => fifo_data_free(i),\r
+               DATAB   => fifo_space_req_in,\r
+               CLOCK   => clk_in,\r
+               CLOCKEN => '1',\r
+               ACLR    => '0',\r
+               AGTB    => dfifo_available(i)\r
+       );\r
+       \r
        -- length fifo - stores the number of words to fetch from dfifo\r
-       THE_LFIFO: fifo_16x11\r
-       port map( DATA          => fifo_in_count(i), \r
-                         CLOCK         => clk_in,\r
-                         WREN          => fifo_done_in, \r
-                         RDEN          => rd_lfifo,\r
-                         RESET         => reset_in, \r
-                         Q                     => fifo_ldata(i), \r
-                         WCNT          => open, -- BUG\r
-                         EMPTY         => open, -- BUG\r
-                         FULL          => open  -- BUG\r
-               );\r
+       THE_LFIFO: fifo_1kx18\r
+       port map(\r
+               DATA(17 downto 15)  => dhdr_fifo_in(i*3 + 2 downto i*3),\r
+               DATA(14 downto 11)  => b"0000", -- free for other stuff!\r
+               DATA(10 downto 0)   => fifo_in_count(i),\r
+               CLOCK               => clk_in,\r
+               WREN                => fifo_done_in,\r
+               RDEN                => rd_lfifo,\r
+               RESET               => reset_in,\r
+               Q(17 downto 11)     => fifo_lunused(i), -- will be portions of DHDR\r
+               Q(10 downto 0)      => fifo_ldata(i),\r
+               WCNT                => open, -- BUG\r
+               EMPTY               => lfifo_empty(i), -- open -- BUG\r
+               FULL                => lfifo_full(i) --open  -- BUG\r
+       );\r
        next_todo_list(i) <= fifo_ldata(i)(10);\r
 \r
+       -- reassamble the DHDR information      \r
+       dhdr_fifo_out(i*3 + 2 downto i*3) <= fifo_lunused(i)(6 downto 4);\r
+       \r
+       -- TODO counter for all FIFOs\r
        THE_TODO_CTR_PROC: process( clk_in )\r
        begin\r
                if( rising_edge(clk_in) ) then\r
@@ -353,24 +394,10 @@ end generate GEN_FIFO;
 \r
 comb_ack_todo <= fifo_last and set_data;\r
 \r
-\r
----------------------------------------------------------------------------\r
--- DHDR buffer - delivers all information\r
----------------------------------------------------------------------------\r
-dhdr_fifo_in <= dhdr_length_in & dhdr_data_in;\r
-\r
-THE_DHDR_BUF: dhdr_buf\r
-port map( CLK_IN                               => clk_in,\r
-                 RESET_IN                              => reset_in, \r
-                 DHDR_DATA_IN                  => dhdr_fifo_in,\r
-                 DHDR_WE_IN                    => dhdr_store_in,\r
-                 DHDR_DONE_IN                  => finished,\r
-                 DHDR_DATA_OUT                 => dhdr_fifo_out,\r
-                 DHDR_AVAILABLE_OUT    => dhdr_avail,\r
-                 BUF_FULL_OUT                  => dhdr_buf_full,\r
-                 BUF_LEVEL_OUT                 => open,\r
-                 DEBUG_OUT                             => open\r
-               );\r
+next_dhdr_buf_full <= '1' when (lfifo_full(0) = '1') or\r
+                               (dfifo_available /= b"1111_1111_1111_1111")\r
+                          else '0';\r
+dhdr_avail         <= not lfifo_empty(0); -- FAKE\r
 \r
 -- compare incoming trigger number with stored DHDR information\r
 next_trgnum_match <= '1' when ( ipu_number_in = dhdr_fifo_out(15 downto 0) ) else '0';\r
@@ -392,7 +419,6 @@ end process THE_TRGNUM_MATCH_PROC;
 ---------------------------------------------------------------------------\r
 -- priority encoding is used to select the next buffer for readout\r
 ---------------------------------------------------------------------------\r
---THE_PRI_ENCODER_PROC: process( todo_list, fifo_sel, fifo_done )\r
 THE_PRI_ENCODER_PROC: process( todo_list, fifo_done )\r
 begin\r
        if   ( todo_list(15 downto 15) = "1" ) then\r
@@ -454,23 +480,24 @@ end process THE_TODO_LIST_PROC;
 THE_SYNC_PROC: process( clk_in )\r
 begin\r
        if( rising_edge(clk_in) ) then\r
-               fifo_sel     <= next_fifo_sel;\r
-               sel_fifo     <= next_sel_fifo;\r
-               fifo_done    <= next_fifo_done;\r
-               fifo_last    <= next_fifo_last;\r
+               fifo_sel      <= next_fifo_sel;\r
+               sel_fifo      <= next_sel_fifo;\r
+               fifo_done     <= next_fifo_done;\r
+               fifo_last     <= next_fifo_last;\r
+               dhdr_buf_full <= next_dhdr_buf_full;\r
        end if;\r
 end process THE_SYNC_PROC;\r
 \r
 \r
 ---------------------------------------------------------------------------\r
--- backplane wise APV mapping \r
+-- backplane wise APV mapping\r
 ---------------------------------------------------------------------------\r
-old_apv_num <= fifo_sel(3 downto 0); \r
+old_apv_num <= fifo_sel(3 downto 0);\r
 \r
 THE_ADC_APV_MAP_MEM: adc_apv_map_mem\r
-port map( ADDRESS(6 downto 4)  => module_in(2 downto 0),\r
-                 ADDRESS(3 downto 0)   => old_apv_num, \r
-                 Q                                             => new_apv_num\r
+port map( ADDRESS(6 downto 4)   => module_in(2 downto 0),\r
+                 ADDRESS(3 downto 0)   => old_apv_num,\r
+                 Q                     => new_apv_num\r
                 );\r
 \r
 ---------------------------------------------------------------------------\r
@@ -535,11 +562,12 @@ end process THE_CYCLE_COUNTER_PROC;
 ---------------------------------------------------------------------------\r
 -- debug information\r
 ---------------------------------------------------------------------------\r
-debug(63 downto 28) <= (others => '0');\r
-debug(27 downto 16) <= fifo_data_free(13);\r
-debug(15 downto 12) <= (others => '0');\r
-debug(11 downto 0)  <= fifo_wcnt(13);\r
-\r
+debug(63 downto 48)  <= todo_list;\r
+debug(47 downto 25)  <= (others => '0');\r
+debug(24 downto 20)  <= fifo_sel;\r
+debug(19 downto 17)  <= (others => '0');\r
+debug(16)            <= fifo_last;\r
+debug(15 downto 0)   <= fifo_done;\r
 \r
 ---------------------------------------------------------------------------\r
 -- Output signals\r
@@ -557,6 +585,6 @@ dbg_out         <= debug;
 end behavioral;\r
 \r
 \r
-       \r
+\r
 \r
 \r
index 245f894b9c1b4abeee354fbbb17d59e703aca154..983bc230be942d1d793eebdd7f66b43d58477282 100644 (file)
@@ -7,56 +7,56 @@ library work;
 use work.adcmv3_components.all;\r
 \r
 entity logic_analyzer is\r
-port( CLK_IN           : in    std_logic;\r
-         RESET_IN              : in    std_logic;\r
-         -- control signals\r
-         ARM_IN                : in    std_logic; -- arm the machine\r
-         TRG_IN                : in    std_logic; -- trigger the data acquisition\r
-         MAX_SAMPLE_IN : in    std_logic_vector(9 downto 0); \r
-         -- status signals\r
-         SM_ADDR_OUT   : out   std_logic_vector(9 downto 0); -- sample RAM addresses\r
-         SM_CE_OUT             : out   std_logic;\r
-         SM_WE_OUT             : out   std_logic; -- write enable for sample RAM\r
-         CLEAR_OUT             : out   std_logic; -- sample memory is being cleared\r
-         RUN_OUT               : out   std_logic; -- ready for trigger\r
-         SAMPLE_OUT    : out   std_logic; -- data acquisition running\r
-         READY_OUT             : out   std_logic; -- data acquisition is finished\r
-         LAST_OUT              : out   std_logic; -- last data word of sampling\r
-         -- Status lines\r
-         BSM_OUT               : out   std_logic_vector(3 downto 0);\r
-         STAT                  : out   std_logic_vector(31 downto 0) -- DEBUG\r
-       );\r
+port(\r
+       CLK_IN          : in    std_logic;\r
+       RESET_IN        : in    std_logic;\r
+       -- control signals\r
+       ARM_IN          : in    std_logic; -- arm the machine\r
+       TRG_IN          : in    std_logic; -- trigger the data acquisition\r
+       MAX_SAMPLE_IN   : in    std_logic_vector(9 downto 0);\r
+       -- status signals\r
+       SM_ADDR_OUT     : out   std_logic_vector(9 downto 0); -- sample RAM addresses\r
+       SM_CE_OUT       : out   std_logic;\r
+       SM_WE_OUT       : out   std_logic; -- write enable for sample RAM\r
+       CLEAR_OUT       : out   std_logic; -- sample memory is being cleared\r
+       RUN_OUT         : out   std_logic; -- ready for trigger\r
+       SAMPLE_OUT      : out   std_logic; -- data acquisition running\r
+       READY_OUT       : out   std_logic; -- data acquisition is finished\r
+       LAST_OUT        : out   std_logic; -- last data word of sampling\r
+       -- Status lines\r
+       BSM_OUT         : out   std_logic_vector(3 downto 0);\r
+       STAT            : out   std_logic_vector(31 downto 0) -- DEBUG\r
+);\r
 end entity;\r
 \r
 architecture Behavioral of logic_analyzer is\r
 \r
 -- Signals\r
+type STATES is (SM_SLEEP,SM_CLEAR,SM_RUN,SM_SAMPLE,SM_READY);\r
+signal CURRENT_STATE, NEXT_STATE: STATES;\r
 \r
-       type STATES is (SM_SLEEP,SM_CLEAR,SM_RUN,SM_SAMPLE,SM_READY);\r
-       signal CURRENT_STATE, NEXT_STATE: STATES;\r
+signal sm_addr          : std_logic_vector(9 downto 0);\r
+signal sm_counter       : std_logic_vector(9 downto 0);\r
 \r
-       signal sm_addr                  : std_logic_vector(9 downto 0);\r
-       signal sm_counter               : std_logic_vector(9 downto 0);\r
+signal sm_we_x          : std_logic;\r
+signal sm_we            : std_logic;\r
+signal sm_ce_x          : std_logic;\r
+signal sm_ce            : std_logic;\r
+signal sm_rst_x         : std_logic;\r
+signal sm_rst           : std_logic;\r
+signal sm_acq_x         : std_logic;\r
+signal sm_acq           : std_logic;\r
+signal sm_done_x        : std_logic;\r
+signal sm_done          : std_logic;\r
 \r
-       signal sm_we_x                  : std_logic;\r
-       signal sm_we                    : std_logic;\r
-       signal sm_ce_x                  : std_logic;\r
-       signal sm_ce                    : std_logic;\r
-       signal sm_rst_x                 : std_logic;\r
-       signal sm_rst                   : std_logic;\r
-       signal sm_acq_x                 : std_logic;\r
-       signal sm_acq                   : std_logic;\r
-       signal sm_done_x                : std_logic;\r
-       signal sm_done                  : std_logic;\r
+signal sm_clear_done_x  : std_logic;\r
+signal sm_clear_done    : std_logic;\r
+signal sm_sample_done_x : std_logic;\r
+signal sm_sample_done   : std_logic;\r
 \r
-       signal sm_clear_done_x  : std_logic;\r
-       signal sm_clear_done    : std_logic;\r
-       signal sm_sample_done_x : std_logic;\r
-       signal sm_sample_done   : std_logic;\r
+signal data_available   : std_logic;\r
 \r
-       signal data_available   : std_logic;\r
-\r
---     signal debug                    : std_logic_vector(31 downto 0);\r
+--  signal debug            : std_logic_vector(31 downto 0);\r
 \r
 begin\r
 \r
@@ -147,13 +147,13 @@ begin
        sm_acq_x   <= '0';\r
        sm_done_x  <= '0';\r
        case CURRENT_STATE is\r
-               when SM_SLEEP   =>      if( arm_in = '1' ) then\r
+               when SM_SLEEP   =>  if( arm_in = '1' ) then\r
                                                                NEXT_STATE <= SM_CLEAR;\r
                                                                sm_rst_x   <= '1';\r
-                                                       else    \r
+                                                       else\r
                                                                NEXT_STATE <= SM_SLEEP;\r
                                                        end if;\r
-               when SM_CLEAR   =>      if( sm_clear_done = '1' ) then\r
+               when SM_CLEAR   =>  if( sm_clear_done = '1' ) then\r
                                                                NEXT_STATE <= SM_RUN;\r
                                                                sm_ce_x    <= '1';\r
                                                                sm_we_x    <= '1';\r
@@ -162,7 +162,7 @@ begin
                                                                sm_ce_x    <= '1';\r
                                                                sm_we_x    <= '1';\r
                                                        end if;\r
-               when SM_RUN             =>      if( trg_in = '1' ) then\r
+               when SM_RUN     =>  if( trg_in = '1' ) then\r
                                                                NEXT_STATE <= SM_SAMPLE;\r
                                                                sm_ce_x    <= '1';\r
                                                                sm_we_x    <= '1';\r
@@ -172,7 +172,7 @@ begin
                                                                sm_ce_x    <= '1';\r
                                                                sm_we_x    <= '1';\r
                                                        end if;\r
-               when SM_SAMPLE  =>      if( sm_sample_done = '1' ) then\r
+               when SM_SAMPLE  =>  if( sm_sample_done = '1' ) then\r
                                                                NEXT_STATE <= SM_READY;\r
                                                                sm_done_x  <= '1';\r
                                                        else\r
@@ -181,9 +181,9 @@ begin
                                                                sm_we_x    <= '1';\r
                                                                sm_acq_x   <= '1';\r
                                                        end if;\r
-               when SM_READY   =>      NEXT_STATE <= SM_SLEEP;\r
+               when SM_READY   =>  NEXT_STATE <= SM_SLEEP;\r
 \r
-               when others             =>      NEXT_STATE <= SM_SLEEP;\r
+               when others     =>  NEXT_STATE <= SM_SLEEP;\r
        end case;\r
 end process TRANSFORM;\r
 \r
@@ -191,22 +191,22 @@ end process TRANSFORM;
 STATE_DECODE: process( CURRENT_STATE )\r
 begin\r
        case CURRENT_STATE is\r
-               when SM_SLEEP   =>      bsm_out    <= x"0";\r
+               when SM_SLEEP   =>  bsm_out    <= x"0";\r
                                                        clear_out  <= '0';\r
                                                        run_out    <= '0';\r
-               when SM_CLEAR   =>      bsm_out    <= x"1";\r
+               when SM_CLEAR   =>  bsm_out    <= x"1";\r
                                                        clear_out  <= '1';\r
                                                        run_out    <= '0';\r
-               when SM_RUN             =>      bsm_out    <= x"2";\r
+               when SM_RUN     =>  bsm_out    <= x"2";\r
                                                        clear_out  <= '0';\r
                                                        run_out    <= '1';\r
-               when SM_SAMPLE  =>      bsm_out    <= x"3";\r
+               when SM_SAMPLE  =>  bsm_out    <= x"3";\r
                                                        clear_out  <= '0';\r
                                                        run_out    <= '0';\r
-               when SM_READY   =>      bsm_out    <= x"4";\r
+               when SM_READY   =>  bsm_out    <= x"4";\r
                                                        clear_out  <= '0';\r
                                                        run_out    <= '0';\r
-               when others             =>      bsm_out    <= x"f";\r
+               when others     =>  bsm_out    <= x"f";\r
                                                        clear_out  <= '0';\r
                                                        run_out    <= '0';\r
        end case;\r
index 01cc2ee0d303c448fcc014b2b3bd4ff4c0ca7ab2..b4077f6ca94325430c6738bd70aa6e1ff4240b78 100644 (file)
@@ -1,55 +1,57 @@
-library ieee; \r
-use ieee.std_logic_1164.all; \r
-use ieee.std_logic_arith.all; \r
+library ieee;\r
+use ieee.std_logic_1164.all;\r
+use ieee.std_logic_arith.all;\r
 use ieee.std_logic_unsigned.all;\r
 \r
 library work;\r
 use work.adcmv3_components.all;\r
 \r
 entity max_data is\r
-       port( CLK_IN                    : in    std_logic;\r
-                 RESET_IN                      : in    std_logic;\r
-                 TODO_3_IN                     : in    std_logic_vector(3 downto 0);\r
-                 TODO_2_IN                     : in    std_logic_vector(3 downto 0);\r
-                 TODO_1_IN                     : in    std_logic_vector(3 downto 0);\r
-                 TODO_0_IN                     : in    std_logic_vector(3 downto 0);\r
-                 TODO_MAX_OUT          : out   std_logic_vector(3 downto 0);\r
-                 DEBUG_OUT                     : out   std_logic_vector(15 downto 0)\r
-               );\r
+port(\r
+       CLK_IN          : in    std_logic;\r
+       RESET_IN        : in    std_logic;\r
+       TODO_3_IN       : in    std_logic_vector(3 downto 0);\r
+       TODO_2_IN       : in    std_logic_vector(3 downto 0);\r
+       TODO_1_IN       : in    std_logic_vector(3 downto 0);\r
+       TODO_0_IN       : in    std_logic_vector(3 downto 0);\r
+       TODO_MAX_OUT    : out   std_logic_vector(3 downto 0);\r
+       DEBUG_OUT       : out   std_logic_vector(15 downto 0)\r
+);\r
 end;\r
 \r
 architecture behavioral of max_data is\r
 \r
-       -- Placer Directives\r
-\r
-       -- normal signals              \r
-       -- first comparatopr step\r
-       signal max_32_data              : std_logic_vector(3 downto 0);\r
-       signal max_21_data              : std_logic_vector(3 downto 0);\r
-       signal max_10_data              : std_logic_vector(3 downto 0);\r
-       signal comb_3_gt_2              : std_logic;\r
-       signal comb_2_gt_1              : std_logic;\r
-       signal comb_1_gt_0              : std_logic;\r
-       -- second comparator step\r
-       signal max_321_data             : std_logic_vector(3 downto 0);\r
-       signal max_210_data             : std_logic_vector(3 downto 0);\r
-       signal comb_32_gt_21    : std_logic;\r
-       signal comb_21_gt_10    : std_logic;\r
-       -- third comparator step\r
-       signal max_final_data   : std_logic_vector(3 downto 0);\r
-       signal comb_final               : std_logic;\r
-\r
-       signal debug                    : std_logic_vector(15 downto 0);\r
-\r
-begin                                          \r
+-- Placer Directives\r
+\r
+-- normal signals\r
+-- first comparatopr step\r
+signal max_32_data      : std_logic_vector(3 downto 0);\r
+signal max_21_data      : std_logic_vector(3 downto 0);\r
+signal max_10_data      : std_logic_vector(3 downto 0);\r
+signal comb_3_gt_2      : std_logic;\r
+signal comb_2_gt_1      : std_logic;\r
+signal comb_1_gt_0      : std_logic;\r
+-- second comparator step\r
+signal max_321_data     : std_logic_vector(3 downto 0);\r
+signal max_210_data     : std_logic_vector(3 downto 0);\r
+signal comb_32_gt_21    : std_logic;\r
+signal comb_21_gt_10    : std_logic;\r
+-- third comparator step\r
+signal max_final_data   : std_logic_vector(3 downto 0);\r
+signal comb_final       : std_logic;\r
+\r
+signal debug            : std_logic_vector(15 downto 0);\r
+\r
+begin\r
 \r
 -- FIRST COMPARATOR STEP\r
 -- compare MAX_3 against MAX_2, store the bigger one\r
 THE_COMP_3_2: comp4bit\r
-port map( DATAA                => todo_3_in,\r
-                 DATAB         => todo_2_in,\r
-                 AGTB          => comb_3_gt_2\r
-               );\r
+port map(\r
+       DATAA       => todo_3_in,\r
+       DATAB       => todo_2_in,\r
+       AGTB        => comb_3_gt_2\r
+);\r
 \r
 THE_3_2_STORE_PROC: process( clk_in )\r
 begin\r
@@ -67,10 +69,11 @@ end process THE_3_2_STORE_PROC;
 \r
 -- compare MAX_2 against MAX_1, store the bigger one\r
 THE_COMP_2_1: comp4bit\r
-port map( DATAA                => todo_2_in,\r
-                 DATAB         => todo_1_in,\r
-                 AGTB          => comb_2_gt_1\r
-               );\r
+port map(\r
+       DATAA       => todo_2_in,\r
+       DATAB       => todo_1_in,\r
+       AGTB        => comb_2_gt_1\r
+);\r
 \r
 THE_2_1_STORE_PROC: process( clk_in )\r
 begin\r
@@ -87,10 +90,11 @@ end process THE_2_1_STORE_PROC;
 \r
 -- compare MAX_1 against MAX_0, store the bigger one\r
 THE_COMP_1_0: comp4bit\r
-port map( DATAA                => todo_1_in,\r
-                 DATAB         => todo_0_in,\r
-                 AGTB          => comb_1_gt_0\r
-               );\r
+port map(\r
+       DATAA       => todo_1_in,\r
+       DATAB       => todo_0_in,\r
+       AGTB        => comb_1_gt_0\r
+);\r
 \r
 THE_1_0_STORE_PROC: process( clk_in )\r
 begin\r
@@ -109,10 +113,11 @@ end process THE_1_0_STORE_PROC;
 -- SECOND COMPARATOR STEP\r
 -- compare MAX_32 against MAX_21, store the bigger one\r
 THE_COMP_32_21: comp4bit\r
-port map( DATAA                => max_32_data,\r
-                 DATAB         => max_21_data,\r
-                 AGTB          => comb_32_gt_21\r
-               );\r
+port map(\r
+       DATAA       => max_32_data,\r
+       DATAB       => max_21_data,\r
+       AGTB        => comb_32_gt_21\r
+);\r
 \r
 THE_32_21_STORE_PROC: process( clk_in )\r
 begin\r
@@ -129,10 +134,11 @@ end process THE_32_21_STORE_PROC;
 \r
 -- compare MAX_21 against MAX_10, store the bigger one\r
 THE_COMP_21_10: comp4bit\r
-port map( DATAA                => max_21_data,\r
-                 DATAB         => max_10_data,\r
-                 AGTB          => comb_21_gt_10\r
-               );\r
+port map(\r
+       DATAA       => max_21_data,\r
+       DATAB       => max_10_data,\r
+       AGTB        => comb_21_gt_10\r
+);\r
 \r
 THE_21_10_STORE_PROC: process( clk_in )\r
 begin\r
@@ -149,10 +155,11 @@ end process THE_21_10_STORE_PROC;
 \r
 -- FINAL COMPARATOR STEP\r
 THE_COMP_FINAL: comp4bit\r
-port map( DATAA                => max_321_data,\r
-                 DATAB         => max_210_data,\r
-                 AGTB          => comb_final\r
-               );\r
+port map(\r
+       DATAA       => max_321_data,\r
+       DATAB       => max_210_data,\r
+       AGTB        => comb_final\r
+);\r
 \r
 THE_FINAL_STORE_PROC: process( clk_in )\r
 begin\r
@@ -172,7 +179,7 @@ debug(15 downto 0)  <= (others => '0');
 \r
 -- output signals\r
 todo_max_out  <= max_final_data;\r
-debug_out     <= debug;  \r
-                                               \r
-end behavioral;                                \r
-                                              
\ No newline at end of file
+debug_out     <= debug;\r
+\r
+end behavioral;\r
+                                                                                         
\ No newline at end of file
index 079084da364e0e92fb8470d7f4f5b96873a84a69..85a99f760ec217c50f07c6ff7f61d933bb1a6e17 100644 (file)
@@ -1,35 +1,33 @@
-SCUBA, Version ispLever_v72_PROD_Build (44)\r
-Fri Nov 20 19:14:28 2009\r
+SCUBA, Version ispLever_v8.0_PROD_Build (41)\r
+Fri Apr 16 11:05:24 2010\r
   \r
 Copyright (c) 1991-1994 by NeoCAD Inc. All rights reserved.\r
 Copyright (c) 1995 AT&T Corp.   All rights reserved.\r
 Copyright (c) 1995-2001 Lucent Technologies Inc.  All rights reserved.\r
 Copyright (c) 2001 Agere Systems   All rights reserved.\r
-Copyright (c) 2002-2008 Lattice Semiconductor Corporation,  All rights reserved.\r
+Copyright (c) 2002-2009 Lattice Semiconductor Corporation,  All rights reserved.\r
   \r
 BEGIN SCUBA Module Synthesis\r
   \r
-    Issued command   : F:\Programme\ispTOOLS7_2\ispfpga\bin\nt\scuba.exe -w -n dpram_8x19 -lang vhdl -synth synplify -bus_exp 7 -bb -arch ep5m00 -dram -type ramdps -raddr_width 4 -rwidth 19 -waddr_width 4 -wwidth 19 -rnum_words 16 -wnum_words 16 -outData UNREGISTERED -e \r
-    Circuit name     : dpram_8x19\r
-    Module type      : sdpram\r
-    Module Version   : 3.4\r
-    Address width    : 4\r
-    Data width       : 19\r
+    Issued command   : X:\Programme\ispTOOLS_80\ispfpga\bin\nt\scuba.exe -w -n fifo_1kx18 -lang vhdl -synth synplify -bus_exp 7 -bb -arch ep5m00 -type fifoblk -addr_width 10 -data_width 18 -num_words 1024 -no_enable -pe -1 -pf -1 -fill -e \r
+    Circuit name     : fifo_1kx18\r
+    Module type      : fifoblk\r
+    Module Version   : 4.8\r
     Ports            : \r
-    Inputs       : WrAddress[3:0], Data[18:0], WrClock, WE, WrClockEn, RdAddress[3:0]\r
-    Outputs      : Q[18:0]\r
+    Inputs       : Data[17:0], Clock, WrEn, RdEn, Reset\r
+    Outputs      : Q[17:0], WCNT[10:0], Empty, Full\r
     I/O buffer       : not inserted\r
-    Clock edge       : rising edge\r
     EDIF output      : suppressed\r
-    VHDL output      : dpram_8x19.vhd\r
-    VHDL template    : dpram_8x19_tmpl.vhd\r
-    VHDL testbench   : tb_dpram_8x19_tmpl.vhd\r
+    VHDL output      : fifo_1kx18.vhd\r
+    VHDL template    : fifo_1kx18_tmpl.vhd\r
+    VHDL testbench   : tb_fifo_1kx18_tmpl.vhd\r
     VHDL purpose     : for synthesis and simulation\r
     Bus notation     : big endian\r
-    Report output    : dpram_8x19.srp\r
+    Report output    : fifo_1kx18.srp\r
     Estimated Resource Usage:\r
-            LUT : 1\r
-           DRAM : 5\r
+            LUT : 80\r
+            EBR : 1\r
+            Reg : 35\r
   \r
 END   SCUBA Module Synthesis\r
 \r
index 5f1628b27d18f92e6242cbf9f1071bacad14680a..8b9117438bb952304bf65ade0f184c3c16e7b13a 100644 (file)
@@ -9,94 +9,97 @@ use work.trb_net_std.all;
 -- stolen from Jan Michel, was trb_net_onewire.vhd
 
 entity onewire_master is
-       generic( CLK_PERIOD             : integer := 10 ); -- clock perion in nanoseconds
-       port( CLK                               : in    std_logic;
-                 RESET                         : in    std_logic;
-                 READOUT_ENABLE_IN     : in    std_logic;
-                 -- connection to 1-wire interface (16 APV FEs)
-                 ONEWIRE                       : inout std_logic_vector(15 downto 0);
-                 BP_ONEWIRE            : inout std_logic;
-                 -- connection to external DPRAM for slow control readout
-                 BP_DATA_OUT           : out   std_logic_vector(15 downto 0);
-                 DATA_OUT                      : out   std_logic_vector(15 downto 0);
-                 ADDR_OUT                      : out   std_logic_vector(6 downto 0);
-                 WRITE_OUT                     : out   std_logic;
-                 BUSY_OUT                      : out   std_logic;
-                 -- debug
-                 BSM_OUT                       : out   std_logic_vector(7 downto 0);
-                 STAT                          : out   std_logic_vector(15 downto 0)
-                );
+generic(
+       CLK_PERIOD      : integer := 10  -- clock perion in nanoseconds
+);
+port(
+       CLK                 : in    std_logic;
+       RESET               : in    std_logic;
+       READOUT_ENABLE_IN   : in    std_logic;
+       -- connection to 1-wire interface (16 APV FEs)
+       ONEWIRE             : inout std_logic_vector(15 downto 0);
+       BP_ONEWIRE          : inout std_logic;
+       -- connection to external DPRAM for slow control readout
+       BP_DATA_OUT         : out   std_logic_vector(15 downto 0);
+       DATA_OUT            : out   std_logic_vector(15 downto 0);
+       ADDR_OUT            : out   std_logic_vector(6 downto 0);
+       WRITE_OUT           : out   std_logic;
+       BUSY_OUT            : out   std_logic;
+       -- debug
+       BSM_OUT             : out   std_logic_vector(7 downto 0);
+       STAT                : out   std_logic_vector(15 downto 0)
+);
 end entity;
 
 architecture onewire_master_arch of onewire_master is
 
-       constant MAX_COUNTER : integer := 2**28-1;
-       type state_t is (START, IDLE, SEND_RESET, WAIT_AFTER_RESET, SEND_ROM_COMMAND, READ_WAIT,
-                                        WRITE_START, WRITE_WAIT, READ_BIT, READ_READ_ROM, SEND_CONV_TEMP,
-                                        READ_CONV_TEMP, SEND_READ_TEMP, READ_READ_TEMP, CHECK_PULSE);
-       signal STATE                            : state_t;
-       signal NEXT_STATE                       : state_t;
-       signal bsm                                      : std_logic_vector(7 downto 0);
-       signal timecounter                      : integer range 0 to MAX_COUNTER;
-       signal bitcounter                       : integer range 0 to 127;
-       signal bitcounter_vector        : std_logic_vector(6 downto 0);
-       signal inc_bitcounter           : std_logic;
-       signal reset_bitcounter         : std_logic;
-       signal reset_timecounter        : std_logic;
-       signal send_bit                         : std_logic;
-       signal next_send_bit            : std_logic;
-       signal recv_bit_ready           : std_logic;
-       signal next_recv_bit_ready      : std_logic;
-       signal ext_ram_addr                     : std_logic_vector(3 downto 0);
-       signal ram_addr                         : std_logic_vector(2 downto 0);
-       signal ram_wr                           : std_logic;
-
-       -- state machine auxiliary signals
-       signal wait_pulse                       : std_logic;
-       signal next_wait_pulse          : std_logic;
-       signal strong_pullup            : std_logic;
-       signal next_strong_pullup       : std_logic;
-       signal presence_reset           : std_logic;
-       signal next_presence_reset      : std_logic;
-       signal send_rom                         : std_logic;    -- read UniqueID
-       signal next_send_rom            : std_logic;
-       signal conv_temp                        : std_logic;    -- send CONV_TEMP
-       signal next_conv_temp           : std_logic;
-       signal reading_temp                     : std_logic;    -- readback of temperature
-       signal next_reading_temp        : std_logic;
-       signal skip_rom                         : std_logic;    -- send SKIP_ROM
-       signal next_skip_rom            : std_logic;
-       signal output_tmp                       : std_logic;    -- 1W output signal
-       signal next_output_tmp          : std_logic;
-       signal output                           : std_logic;
-       signal next_output                      : std_logic;
-
-       -- presence pulse detection
-       signal neg_edge                         : std_logic_vector(16 downto 0);        -- presence pulse edge detection
-       signal presence_found           : std_logic_vector(16 downto 0);        -- set signal for presence bits 
-       signal presence                         : std_logic_vector(16 downto 0);        -- presence bits
-
-       type input_t is array (0 to 16) of std_logic_vector(7 downto 0);
-       signal input                            : input_t;
-
-       type word_t is array (0 to 16) of std_logic_vector(15 downto 0);
-       signal word                                     : word_t;
-
-       signal recv_bit                         : std_logic_vector(16 downto 0);
-       signal next_recv_bit            : std_logic_vector(16 downto 0);
-       
-       signal comb_ext_addr_go         : std_logic;
-
-       -- output signals, delayed by one cycle 
-       signal mux_data                         : std_logic_vector(15 downto 0);
-       signal mux_addr                         : std_logic_vector(6 downto 0);
-       signal mux_wr                           : std_logic;
-       
-       signal onewire_tmp                      : std_logic_vector(16 downto 0);
-       
-       signal comb_busy                        : std_logic;
-       signal busy                                     : std_logic;
-       
+constant MAX_COUNTER : integer := 2**28-1;
+type state_t is (START, IDLE, SEND_RESET, WAIT_AFTER_RESET, SEND_ROM_COMMAND, READ_WAIT,
+                                WRITE_START, WRITE_WAIT, READ_BIT, READ_READ_ROM, SEND_CONV_TEMP,
+                                READ_CONV_TEMP, SEND_READ_TEMP, READ_READ_TEMP, CHECK_PULSE);
+signal STATE                : state_t;
+signal NEXT_STATE           : state_t;
+signal bsm                  : std_logic_vector(7 downto 0);
+signal timecounter          : integer range 0 to MAX_COUNTER;
+signal bitcounter           : integer range 0 to 127;
+signal bitcounter_vector    : std_logic_vector(6 downto 0);
+signal inc_bitcounter       : std_logic;
+signal reset_bitcounter     : std_logic;
+signal reset_timecounter    : std_logic;
+signal send_bit             : std_logic;
+signal next_send_bit        : std_logic;
+signal recv_bit_ready       : std_logic;
+signal next_recv_bit_ready  : std_logic;
+signal ext_ram_addr         : std_logic_vector(3 downto 0);
+signal ram_addr             : std_logic_vector(2 downto 0);
+signal ram_wr               : std_logic;
+
+-- state machine auxiliary signals
+signal wait_pulse           : std_logic;
+signal next_wait_pulse      : std_logic;
+signal strong_pullup        : std_logic;
+signal next_strong_pullup   : std_logic;
+signal presence_reset       : std_logic;
+signal next_presence_reset  : std_logic;
+signal send_rom             : std_logic;    -- read UniqueID
+signal next_send_rom        : std_logic;
+signal conv_temp            : std_logic;    -- send CONV_TEMP
+signal next_conv_temp       : std_logic;
+signal reading_temp         : std_logic;    -- readback of temperature
+signal next_reading_temp    : std_logic;
+signal skip_rom             : std_logic;    -- send SKIP_ROM
+signal next_skip_rom        : std_logic;
+signal output_tmp           : std_logic;    -- 1W output signal
+signal next_output_tmp      : std_logic;
+signal output               : std_logic;
+signal next_output          : std_logic;
+
+-- presence pulse detection
+signal neg_edge             : std_logic_vector(16 downto 0);    -- presence pulse edge detection
+signal presence_found       : std_logic_vector(16 downto 0);    -- set signal for presence bits
+signal presence             : std_logic_vector(16 downto 0);    -- presence bits
+
+type input_t is array (0 to 16) of std_logic_vector(7 downto 0);
+signal input                : input_t;
+
+type word_t is array (0 to 16) of std_logic_vector(15 downto 0);
+signal word                 : word_t;
+
+signal recv_bit             : std_logic_vector(16 downto 0);
+signal next_recv_bit        : std_logic_vector(16 downto 0);
+
+signal comb_ext_addr_go     : std_logic;
+
+-- output signals, delayed by one cycle
+signal mux_data             : std_logic_vector(15 downto 0);
+signal mux_addr             : std_logic_vector(6 downto 0);
+signal mux_wr               : std_logic;
+
+signal onewire_tmp          : std_logic_vector(16 downto 0);
+
+signal comb_busy            : std_logic;
+signal busy                 : std_logic;
+
 begin
 
 -- bidirectional connection
@@ -175,7 +178,7 @@ end process THE_STATE_REGS_PROC;
 comb_busy <= '0' when (STATE = START) else '1';
 
 -- State machine transitions
-THE_STATE_MACHINE: process( STATE, timecounter, bitcounter_vector, input, send_bit, output_tmp, 
+THE_STATE_MACHINE: process( STATE, timecounter, bitcounter_vector, input, send_bit, output_tmp,
                                                        skip_rom, recv_bit, conv_temp, reading_temp, send_rom, readout_enable_in )
 begin
        NEXT_STATE          <= STATE;
@@ -197,14 +200,14 @@ begin
        next_presence_reset <= '0';
 
        case STATE is
-               -- 
+               --
                when START =>
                        if( readout_enable_in = '1' ) then
                                NEXT_STATE          <= IDLE;
                                reset_timecounter   <= '1';
                        end if;
 
-               -- idle state for the DS1822
+               -- idle state for the DS1822
                when IDLE =>
                        if( is_time_reached(timecounter,640000,CLK_PERIOD) = '1' ) then
                                NEXT_STATE        <= SEND_RESET;
@@ -224,7 +227,7 @@ begin
                when WAIT_AFTER_RESET =>
                        if( is_time_reached(timecounter,10000,CLK_PERIOD) = '1' ) then
                                reset_timecounter <= '1';
-                               NEXT_STATE        <= CHECK_PULSE; 
+                               NEXT_STATE        <= CHECK_PULSE;
                        end if;
 
                -- check if the is a pulse
@@ -243,9 +246,9 @@ begin
                        NEXT_STATE     <= WRITE_START;
 
                        if( send_rom = '1' ) then
-                               next_send_bit <= not bitcounter_vector(1);      -- this is x33 (READ_ROM_COMMAND), lsb first
+                               next_send_bit <= not bitcounter_vector(1);  -- this is x33 (READ_ROM_COMMAND), lsb first
                        else
-               next_send_bit <= bitcounter_vector(1);          -- this is xCC (SKIP_ROM_COMMAND), lsb first
+                               next_send_bit <= bitcounter_vector(1);      -- this is xCC (SKIP_ROM_COMMAND), lsb first
                        end if;
 
                        if( bitcounter_vector(3) = '1' ) then  --send 8 bit
@@ -262,7 +265,7 @@ begin
                --sending sensor commands
                when SEND_CONV_TEMP =>
                        next_send_bit <= bitcounter_vector(1) and not bitcounter_vector(0);
-                                                     --this is x44, lsb first
+                                                                                                        --this is x44, lsb first
                        inc_bitcounter <= '1';
                        if( bitcounter_vector(3) = '1' ) then  --send 8 bit
                                NEXT_STATE        <= READ_CONV_TEMP;
@@ -281,7 +284,7 @@ begin
                        end if;
 
                        inc_bitcounter <= '1';
-                       
+
                        if( bitcounter_vector(3) = '1' ) then  --send 8 bit
                                NEXT_STATE       <= READ_READ_TEMP;
                                reset_bitcounter <= '1';
@@ -306,7 +309,7 @@ begin
                when READ_CONV_TEMP => --waiting for end of conversion
                        next_strong_pullup <= '1';
                        if( is_time_reached(timecounter,1300000000,CLK_PERIOD) = '1' ) then -- reality is 1.3s delay
---                     if( is_time_reached(timecounter,3000000,CLK_PERIOD) = '1' ) then -- simulation is 3ms delay
+--          if( is_time_reached(timecounter,3000000,CLK_PERIOD) = '1' ) then -- simulation is 3ms delay
                                NEXT_STATE        <= IDLE;
                                reset_timecounter <= '1';
                                next_conv_temp    <= '0';
@@ -335,7 +338,7 @@ begin
                                next_output_tmp <= '0';
                                reset_timecounter <= '1';
                        end if;
-                       
+
                when WRITE_WAIT =>
                        if( is_time_reached(timecounter,1200,CLK_PERIOD) = '1' ) then
                                reset_timecounter <= '1';
@@ -361,7 +364,7 @@ begin
                                next_recv_bit_ready <= '1';
                                NEXT_STATE          <= READ_WAIT;
                        end if;
-                       
+
                when READ_WAIT =>
                        if( is_time_reached(timecounter,80000,CLK_PERIOD) = '1' ) then
                                reset_timecounter <= '1';
@@ -384,22 +387,22 @@ end process THE_STATE_MACHINE;
 STATE_DECODE: process( STATE )
 begin
        case STATE is
-               when START                              =>      bsm <= x"00";
-               when IDLE                               =>      bsm <= x"01";
-               when SEND_RESET                 =>      bsm <= x"02"; 
-               when WAIT_AFTER_RESET   =>      bsm <= x"03";
-               when CHECK_PULSE                =>      bsm <= x"0e";
-               when SEND_ROM_COMMAND   =>      bsm <= x"04";
-               when READ_WAIT                  =>      bsm <= x"05";
-               when WRITE_START                =>      bsm <= x"06";
-               when WRITE_WAIT                 =>      bsm <= x"07";
-               when READ_BIT                   =>      bsm <= x"08";
-               when READ_READ_ROM              =>      bsm <= x"09";
-               when SEND_CONV_TEMP             =>      bsm <= x"0a";
-               when READ_CONV_TEMP             =>      bsm <= x"0b";
-               when SEND_READ_TEMP             =>      bsm <= x"0c";
-               when READ_READ_TEMP             =>      bsm <= x"0d";
-               when others                             =>      bsm <= x"ff";
+               when START              =>  bsm <= x"00";
+               when IDLE               =>  bsm <= x"01";
+               when SEND_RESET         =>  bsm <= x"02";
+               when WAIT_AFTER_RESET   =>  bsm <= x"03";
+               when CHECK_PULSE        =>  bsm <= x"0e";
+               when SEND_ROM_COMMAND   =>  bsm <= x"04";
+               when READ_WAIT          =>  bsm <= x"05";
+               when WRITE_START        =>  bsm <= x"06";
+               when WRITE_WAIT         =>  bsm <= x"07";
+               when READ_BIT           =>  bsm <= x"08";
+               when READ_READ_ROM      =>  bsm <= x"09";
+               when SEND_CONV_TEMP     =>  bsm <= x"0a";
+               when READ_CONV_TEMP     =>  bsm <= x"0b";
+               when SEND_READ_TEMP     =>  bsm <= x"0c";
+               when READ_READ_TEMP     =>  bsm <= x"0d";
+               when others             =>  bsm <= x"ff";
        end case;
 end process STATE_DECODE;
 --------------------------------------------------------------------------------------
@@ -437,7 +440,7 @@ begin
                if( reset = '1' ) then
                        ram_addr(1 downto 0) <= (others => '0');
                        ram_wr               <= '0';
---                     word(i)              <= (others => '0');
+--          word(i)              <= (others => '0');
                else
                        ram_wr <= '0';
                        -- Shift process for serial / parallel data conversion
@@ -457,12 +460,12 @@ begin
                                        ram_addr <= "100";
                                        ram_wr   <= '1';
                                        for i in 0 to 16 loop
-                                               word(i)(11)                             <= recv_bit(i);
+                                               word(i)(11)             <= recv_bit(i);
                                                word(i)(10 downto 0)    <= word(i)(15 downto 5);
                                                word(i)(14 downto 12)   <= (others => '0');
                                                word(i)(15)             <= presence(i);
                                        end loop;
-                                       
+
                                end if;
                        end if;
                end if;
@@ -477,7 +480,7 @@ begin
                        ext_ram_addr <= (others => '0');
                elsif( (comb_ext_addr_go = '1') ) then
                        ext_ram_addr <= ext_ram_addr + 1;
-               end if;         
+               end if;
        end if;
 end process THE_EXT_ADDR_PROC;
 
@@ -488,23 +491,23 @@ DATA_MUX_PROC: process(clk)
 begin
        if( rising_edge(clk) ) then
                case ext_ram_addr is
-                       when x"0"       => mux_data <= word(0);
-                       when x"1"       => mux_data <= word(1);
-                       when x"2"       => mux_data <= word(2);
-                       when x"3"       => mux_data <= word(3);
-                       when x"4"       => mux_data <= word(4);
-                       when x"5"       => mux_data <= word(5);
-                       when x"6"       => mux_data <= word(6);
-                       when x"7"       => mux_data <= word(7);
-                       when x"8"       => mux_data <= word(8);
-                       when x"9"       => mux_data <= word(9);
-                       when x"a"       => mux_data <= word(10);
-                       when x"b"       => mux_data <= word(11);
-                       when x"c"       => mux_data <= word(12);
-                       when x"d"       => mux_data <= word(13);
-                       when x"e"       => mux_data <= word(14);
-                       when x"f"       => mux_data <= word(15);
-                       when others     => mux_data <= x"dead";
+                       when x"0"   => mux_data <= word(0);
+                       when x"1"   => mux_data <= word(1);
+                       when x"2"   => mux_data <= word(2);
+                       when x"3"   => mux_data <= word(3);
+                       when x"4"   => mux_data <= word(4);
+                       when x"5"   => mux_data <= word(5);
+                       when x"6"   => mux_data <= word(6);
+                       when x"7"   => mux_data <= word(7);
+                       when x"8"   => mux_data <= word(8);
+                       when x"9"   => mux_data <= word(9);
+                       when x"a"   => mux_data <= word(10);
+                       when x"b"   => mux_data <= word(11);
+                       when x"c"   => mux_data <= word(12);
+                       when x"d"   => mux_data <= word(13);
+                       when x"e"   => mux_data <= word(14);
+                       when x"f"   => mux_data <= word(15);
+                       when others => mux_data <= x"dead";
                end case;
                mux_addr(2 downto 0) <= ram_addr;
                mux_addr(6 downto 3) <= ext_ram_addr;
index 4469014695380c63c536729576b17ffc76084297..a1892017d720b1a8c8cdc488980d111bb736bcd9 100755 (executable)
@@ -10,209 +10,237 @@ use work.adcmv3_components.all;
 -- max_space = (num_frames * 128 + num_frames) = num_frames * 129\r
 \r
 entity ped_corr_ctrl is\r
-       port( CLK_IN                    : in    std_logic; -- 100MHz local clock\r
-                 RESET_IN                      : in    std_logic; -- synchronous reset\r
-                 -- Slow control registers\r
-                 -- EDS buffer -- back to previous source stage\r
-                 EDS_DATA_IN           : in    std_logic_vector(39 downto 0); \r
-                 EDS_AVAIL_IN          : in    std_logic;\r
-                 EDS_DONE_OUT          : out   std_logic;\r
-                 EVT_TYPE_IN           : in    std_logic_vector(2 downto 0);\r
-                 -- DHDR information -- to next stage\r
-                 DHDR_DATA_OUT         : out   std_logic_vector(31 downto 0);\r
-                 DHDR_LENGTH_OUT       : out   std_logic_vector(15 downto 0);\r
-                 DHDR_STORE_OUT        : out   std_logic;\r
-                 DHDR_BUF_FULL_IN      : in    std_logic;\r
-                 -- data buffers -- from raw_buf_stage\r
-                 BUF_ADDR_OUT          : out   std_logic_vector(6 downto 0);\r
-                 BUF_DONE_OUT          : out   std_logic;\r
-                 BUF_TICK_IN           : in    std_logic_vector(15 downto 0);\r
-                 BUF_START_IN          : in    std_logic_vector(15 downto 0);\r
-                 -- raw data\r
-                 BUF_0_DATA_IN         : in    std_logic_vector(37 downto 0);\r
-                 BUF_1_DATA_IN         : in    std_logic_vector(37 downto 0);\r
-                 BUF_2_DATA_IN         : in    std_logic_vector(37 downto 0);\r
-                 BUF_3_DATA_IN         : in    std_logic_vector(37 downto 0);\r
-                 BUF_4_DATA_IN         : in    std_logic_vector(37 downto 0);\r
-                 BUF_5_DATA_IN         : in    std_logic_vector(37 downto 0);\r
-                 BUF_6_DATA_IN         : in    std_logic_vector(37 downto 0);\r
-                 BUF_7_DATA_IN         : in    std_logic_vector(37 downto 0);\r
-                 BUF_8_DATA_IN         : in    std_logic_vector(37 downto 0);\r
-                 BUF_9_DATA_IN         : in    std_logic_vector(37 downto 0);\r
-                 BUF_10_DATA_IN        : in    std_logic_vector(37 downto 0);\r
-                 BUF_11_DATA_IN        : in    std_logic_vector(37 downto 0);\r
-                 BUF_12_DATA_IN        : in    std_logic_vector(37 downto 0);\r
-                 BUF_13_DATA_IN        : in    std_logic_vector(37 downto 0);\r
-                 BUF_14_DATA_IN        : in    std_logic_vector(37 downto 0);\r
-                 BUF_15_DATA_IN        : in    std_logic_vector(37 downto 0);\r
-                 -- Pedestal data \r
-                 PED_ADDR_OUT          : out   std_logic_vector(6 downto 0);\r
-                 PED_0_DATA_IN         : in    std_logic_vector(17 downto 0);\r
-                 PED_1_DATA_IN         : in    std_logic_vector(17 downto 0);\r
-                 PED_2_DATA_IN         : in    std_logic_vector(17 downto 0);\r
-                 PED_3_DATA_IN         : in    std_logic_vector(17 downto 0);\r
-                 PED_4_DATA_IN         : in    std_logic_vector(17 downto 0);\r
-                 PED_5_DATA_IN         : in    std_logic_vector(17 downto 0);\r
-                 PED_6_DATA_IN         : in    std_logic_vector(17 downto 0);\r
-                 PED_7_DATA_IN         : in    std_logic_vector(17 downto 0);\r
-                 PED_8_DATA_IN         : in    std_logic_vector(17 downto 0);\r
-                 PED_9_DATA_IN         : in    std_logic_vector(17 downto 0);\r
-                 PED_10_DATA_IN        : in    std_logic_vector(17 downto 0);\r
-                 PED_11_DATA_IN        : in    std_logic_vector(17 downto 0);\r
-                 PED_12_DATA_IN        : in    std_logic_vector(17 downto 0);\r
-                 PED_13_DATA_IN        : in    std_logic_vector(17 downto 0);\r
-                 PED_14_DATA_IN        : in    std_logic_vector(17 downto 0);\r
-                 PED_15_DATA_IN        : in    std_logic_vector(17 downto 0);\r
-                 -- Threshold data\r
-                 THR_ADDR_OUT          : out   std_logic_vector(6 downto 0);\r
-                 THR_0_DATA_IN         : in    std_logic_vector(17 downto 0);\r
-                 THR_1_DATA_IN         : in    std_logic_vector(17 downto 0);\r
-                 THR_2_DATA_IN         : in    std_logic_vector(17 downto 0);\r
-                 THR_3_DATA_IN         : in    std_logic_vector(17 downto 0);\r
-                 THR_4_DATA_IN         : in    std_logic_vector(17 downto 0);\r
-                 THR_5_DATA_IN         : in    std_logic_vector(17 downto 0);\r
-                 THR_6_DATA_IN         : in    std_logic_vector(17 downto 0);\r
-                 THR_7_DATA_IN         : in    std_logic_vector(17 downto 0);\r
-                 THR_8_DATA_IN         : in    std_logic_vector(17 downto 0);\r
-                 THR_9_DATA_IN         : in    std_logic_vector(17 downto 0);\r
-                 THR_10_DATA_IN        : in    std_logic_vector(17 downto 0);\r
-                 THR_11_DATA_IN        : in    std_logic_vector(17 downto 0);\r
-                 THR_12_DATA_IN        : in    std_logic_vector(17 downto 0);\r
-                 THR_13_DATA_IN        : in    std_logic_vector(17 downto 0);\r
-                 THR_14_DATA_IN        : in    std_logic_vector(17 downto 0);\r
-                 THR_15_DATA_IN        : in    std_logic_vector(17 downto 0);\r
-                 -- processed data\r
-                 FIFO_START_OUT        : out   std_logic;\r
-                 FIFO_0_DATA_OUT       : out   std_logic_vector(39 downto 0);\r
-                 FIFO_1_DATA_OUT       : out   std_logic_vector(39 downto 0);\r
-                 FIFO_2_DATA_OUT       : out   std_logic_vector(39 downto 0);\r
-                 FIFO_3_DATA_OUT       : out   std_logic_vector(39 downto 0);\r
-                 FIFO_4_DATA_OUT       : out   std_logic_vector(39 downto 0);\r
-                 FIFO_5_DATA_OUT       : out   std_logic_vector(39 downto 0);\r
-                 FIFO_6_DATA_OUT       : out   std_logic_vector(39 downto 0);\r
-                 FIFO_7_DATA_OUT       : out   std_logic_vector(39 downto 0);\r
-                 FIFO_8_DATA_OUT       : out   std_logic_vector(39 downto 0);\r
-                 FIFO_9_DATA_OUT       : out   std_logic_vector(39 downto 0);\r
-                 FIFO_10_DATA_OUT      : out   std_logic_vector(39 downto 0);\r
-                 FIFO_11_DATA_OUT      : out   std_logic_vector(39 downto 0);\r
-                 FIFO_12_DATA_OUT      : out   std_logic_vector(39 downto 0);\r
-                 FIFO_13_DATA_OUT      : out   std_logic_vector(39 downto 0);\r
-                 FIFO_14_DATA_OUT      : out   std_logic_vector(39 downto 0);\r
-                 FIFO_15_DATA_OUT      : out   std_logic_vector(39 downto 0);\r
-                 FIFO_WE_OUT           : out   std_logic_vector(15 downto 0);\r
-                 FIFO_DONE_OUT         : out   std_logic; -- write level information into small FIFOs\r
-                 -- Debug signals\r
-                 DBG_BSM_OUT           : out   std_logic_vector(7 downto 0);\r
-                 DBG_OUT                       : out   std_logic_vector(15 downto 0)\r
-               );\r
+port(\r
+       CLK_IN              : in    std_logic; -- 100MHz local clock\r
+       RESET_IN            : in    std_logic; -- synchronous reset\r
+       -- Slow control registers\r
+       -- EDS buffer -- back to previous source stage\r
+       EDS_DATA_IN         : in    std_logic_vector(39 downto 0);\r
+       EDS_AVAIL_IN        : in    std_logic;\r
+       EDS_DONE_OUT        : out   std_logic;\r
+       -- DHDR information -- to next stage\r
+       DHDR_DATA_OUT       : out   std_logic_vector(31 downto 0);\r
+       DHDR_LENGTH_OUT     : out   std_logic_vector(15 downto 0);\r
+       DHDR_STORE_OUT      : out   std_logic;\r
+       DHDR_BUF_FULL_IN    : in    std_logic;\r
+       FIFO_SPACE_REQ_OUT  : out   std_logic_vector(11 downto 0);\r
+       -- data buffers -- from raw_buf_stage\r
+       BUF_ADDR_OUT        : out   std_logic_vector(6 downto 0);\r
+       BUF_DONE_OUT        : out   std_logic;\r
+       BUF_TICK_IN         : in    std_logic_vector(15 downto 0);\r
+       BUF_START_IN        : in    std_logic_vector(15 downto 0);\r
+       -- raw data\r
+       BUF_0_DATA_IN       : in    std_logic_vector(37 downto 0);\r
+       BUF_1_DATA_IN       : in    std_logic_vector(37 downto 0);\r
+       BUF_2_DATA_IN       : in    std_logic_vector(37 downto 0);\r
+       BUF_3_DATA_IN       : in    std_logic_vector(37 downto 0);\r
+       BUF_4_DATA_IN       : in    std_logic_vector(37 downto 0);\r
+       BUF_5_DATA_IN       : in    std_logic_vector(37 downto 0);\r
+       BUF_6_DATA_IN       : in    std_logic_vector(37 downto 0);\r
+       BUF_7_DATA_IN       : in    std_logic_vector(37 downto 0);\r
+       BUF_8_DATA_IN       : in    std_logic_vector(37 downto 0);\r
+       BUF_9_DATA_IN       : in    std_logic_vector(37 downto 0);\r
+       BUF_10_DATA_IN      : in    std_logic_vector(37 downto 0);\r
+       BUF_11_DATA_IN      : in    std_logic_vector(37 downto 0);\r
+       BUF_12_DATA_IN      : in    std_logic_vector(37 downto 0);\r
+       BUF_13_DATA_IN      : in    std_logic_vector(37 downto 0);\r
+       BUF_14_DATA_IN      : in    std_logic_vector(37 downto 0);\r
+       BUF_15_DATA_IN      : in    std_logic_vector(37 downto 0);\r
+       -- Pedestal data\r
+       PED_ADDR_OUT        : out   std_logic_vector(6 downto 0);\r
+       PED_0_DATA_IN       : in    std_logic_vector(17 downto 0);\r
+       PED_1_DATA_IN       : in    std_logic_vector(17 downto 0);\r
+       PED_2_DATA_IN       : in    std_logic_vector(17 downto 0);\r
+       PED_3_DATA_IN       : in    std_logic_vector(17 downto 0);\r
+       PED_4_DATA_IN       : in    std_logic_vector(17 downto 0);\r
+       PED_5_DATA_IN       : in    std_logic_vector(17 downto 0);\r
+       PED_6_DATA_IN       : in    std_logic_vector(17 downto 0);\r
+       PED_7_DATA_IN       : in    std_logic_vector(17 downto 0);\r
+       PED_8_DATA_IN       : in    std_logic_vector(17 downto 0);\r
+       PED_9_DATA_IN       : in    std_logic_vector(17 downto 0);\r
+       PED_10_DATA_IN      : in    std_logic_vector(17 downto 0);\r
+       PED_11_DATA_IN      : in    std_logic_vector(17 downto 0);\r
+       PED_12_DATA_IN      : in    std_logic_vector(17 downto 0);\r
+       PED_13_DATA_IN      : in    std_logic_vector(17 downto 0);\r
+       PED_14_DATA_IN      : in    std_logic_vector(17 downto 0);\r
+       PED_15_DATA_IN      : in    std_logic_vector(17 downto 0);\r
+       -- Threshold data\r
+       THR_ADDR_OUT        : out   std_logic_vector(6 downto 0);\r
+       THR_0_DATA_IN       : in    std_logic_vector(17 downto 0);\r
+       THR_1_DATA_IN       : in    std_logic_vector(17 downto 0);\r
+       THR_2_DATA_IN       : in    std_logic_vector(17 downto 0);\r
+       THR_3_DATA_IN       : in    std_logic_vector(17 downto 0);\r
+       THR_4_DATA_IN       : in    std_logic_vector(17 downto 0);\r
+       THR_5_DATA_IN       : in    std_logic_vector(17 downto 0);\r
+       THR_6_DATA_IN       : in    std_logic_vector(17 downto 0);\r
+       THR_7_DATA_IN       : in    std_logic_vector(17 downto 0);\r
+       THR_8_DATA_IN       : in    std_logic_vector(17 downto 0);\r
+       THR_9_DATA_IN       : in    std_logic_vector(17 downto 0);\r
+       THR_10_DATA_IN      : in    std_logic_vector(17 downto 0);\r
+       THR_11_DATA_IN      : in    std_logic_vector(17 downto 0);\r
+       THR_12_DATA_IN      : in    std_logic_vector(17 downto 0);\r
+       THR_13_DATA_IN      : in    std_logic_vector(17 downto 0);\r
+       THR_14_DATA_IN      : in    std_logic_vector(17 downto 0);\r
+       THR_15_DATA_IN      : in    std_logic_vector(17 downto 0);\r
+       -- processed data\r
+       FIFO_START_OUT      : out   std_logic;\r
+       FIFO_0_DATA_OUT     : out   std_logic_vector(39 downto 0);\r
+       FIFO_1_DATA_OUT     : out   std_logic_vector(39 downto 0);\r
+       FIFO_2_DATA_OUT     : out   std_logic_vector(39 downto 0);\r
+       FIFO_3_DATA_OUT     : out   std_logic_vector(39 downto 0);\r
+       FIFO_4_DATA_OUT     : out   std_logic_vector(39 downto 0);\r
+       FIFO_5_DATA_OUT     : out   std_logic_vector(39 downto 0);\r
+       FIFO_6_DATA_OUT     : out   std_logic_vector(39 downto 0);\r
+       FIFO_7_DATA_OUT     : out   std_logic_vector(39 downto 0);\r
+       FIFO_8_DATA_OUT     : out   std_logic_vector(39 downto 0);\r
+       FIFO_9_DATA_OUT     : out   std_logic_vector(39 downto 0);\r
+       FIFO_10_DATA_OUT    : out   std_logic_vector(39 downto 0);\r
+       FIFO_11_DATA_OUT    : out   std_logic_vector(39 downto 0);\r
+       FIFO_12_DATA_OUT    : out   std_logic_vector(39 downto 0);\r
+       FIFO_13_DATA_OUT    : out   std_logic_vector(39 downto 0);\r
+       FIFO_14_DATA_OUT    : out   std_logic_vector(39 downto 0);\r
+       FIFO_15_DATA_OUT    : out   std_logic_vector(39 downto 0);\r
+       FIFO_WE_OUT         : out   std_logic_vector(15 downto 0);\r
+       FIFO_DONE_OUT       : out   std_logic; -- write level information into small FIFOs\r
+       -- Debug signals\r
+       DBG_BSM_OUT         : out   std_logic_vector(7 downto 0);\r
+       DBG_OUT             : out   std_logic_vector(15 downto 0)\r
+);\r
 end;\r
 \r
 architecture behavioral of ped_corr_ctrl is\r
 \r
-       -- state machine definitions\r
-       type STATES is (SLEEP,LOADFC,DELFC,CHECK,FULL,DEL0,NBERR,EMPTY,CHKFC,FCERR,CHKRW,RWERR,CHKAE,AEERR,\r
-                                       FINIT,FLOAD,FZERO,FREAD,FDONE,FDEL,FDEC,WREDS,ACKEDS,WHDR,EHDR,CCNT,CDEL0,CDEL1,DEL1,DEL2);     \r
-       signal CURRENT_STATE, NEXT_STATE: STATES;\r
-\r
-       -- signals\r
-       signal debug                    : std_logic_vector(15 downto 0);\r
-       signal bsm_x                    : std_logic_vector(7 downto 0);\r
-\r
-       -- status signals from TOCs\r
-       signal buf_gooddata             : std_logic_vector(15 downto 0);\r
-       signal buf_baddata              : std_logic_vector(15 downto 0);\r
-       signal buf_nodata               : std_logic_vector(15 downto 0);\r
-       signal buf_ready                : std_logic_vector(15 downto 0);\r
-\r
-       -- local frame counter\r
-       signal to_do_ctr                : std_logic_vector(3 downto 0);\r
-       signal done_ctr                 : std_logic_vector(3 downto 0);\r
-       signal loc_frm_ctr              : std_logic_vector(3 downto 0);\r
-       signal next_ld_frm_ctr  : std_logic;\r
-       signal ld_frm_ctr               : std_logic; -- load frame counter with EDS start value \r
-       signal next_ce_frm_ctr  : std_logic;\r
-       signal ce_frm_ctr               : std_logic; -- increment frame counter\r
-       signal next_last_frame  : std_logic;\r
-       signal last_frame               : std_logic; -- all frame buffers have been copied\r
-       signal next_cleaned_up  : std_logic;\r
-       signal cleaned_up               : std_logic; -- only relevant in case of errors\r
-       signal next_multi_frame : std_logic;\r
-       signal multi_frame              : std_logic; -- more than one frame requested\r
-       signal next_do_hdr              : std_logic;\r
-       signal do_hdr                   : std_logic; -- insert debug header (in case of common errors, in case of multiframe)\r
-       signal next_do_error    : std_logic;\r
-       signal do_error                 : std_logic; -- insert debug header (in case of broken buffer only) \r
-       signal next_do_start    : std_logic; \r
-       signal do_start                 : std_logic; -- start signal for one event processing\r
-       \r
-       -- buffer status signals, error signals from checkers\r
-       signal buffers_ready    : std_logic; -- all buffers are ready for data transport\r
-       signal buffers_valid    : std_logic; -- at least one buffer has valid data\r
-       signal frame_row_error  : std_logic; \r
-       signal frame_apv_error  : std_logic;\r
-       signal frame_ctr_error  : std_logic;\r
-       \r
-       signal frame_busy               : std_logic; -- from ALU\r
-       \r
-       -- Buffer read address counter, control signals\r
-       signal buf_addr                         : std_logic_vector(5 downto 0); -- buffer / pedestal read address\r
-       signal buf_half                         : std_logic;\r
-       signal next_buf_addr_ce         : std_logic;\r
-       signal buf_addr_ce                      : std_logic;\r
-       signal next_buf_addr_rst        : std_logic;\r
-       signal buf_addr_rst                     : std_logic;\r
-       signal next_buf_addr_init       : std_logic; -- needed for THR\r
-       signal buf_addr_init            : std_logic;\r
-       signal next_buf_addr_done       : std_logic;\r
-       signal buf_addr_done            : std_logic;\r
-       signal next_buf_done            : std_logic;\r
-       signal buf_done                         : std_logic;\r
-       signal next_frame_valid         : std_logic;\r
-       signal frame_valid                      : std_logic;\r
-       signal buf_frame_valid          : std_logic;\r
-       signal raw_addr                         : std_logic_vector(6 downto 0);\r
-       signal buf_raw_addr                     : std_logic_vector(6 downto 0);\r
-\r
-       signal thr_addr                         : std_logic_vector(6 downto 0); -- threshold read address\r
-       signal thr_addr_ce                      : std_logic;\r
-       signal thr_addr_rst                     : std_logic;\r
-       signal dly_thr_addr_ce          : std_logic_vector(7 downto 0);\r
-       signal dly_thr_addr_rst         : std_logic_vector(7 downto 0);\r
-\r
---     signal ped_addr                         : std_logic_vector(6 downto 0); -- pedestal read address\r
-\r
-       -- statemachine signals\r
-       signal next_wait_frames         : std_logic;\r
-       signal wait_frames                      : std_logic; -- we are in the waiting phase for incoming frames\r
-       signal next_eds_wr                      : std_logic;\r
-       signal eds_wr                           : std_logic; -- copy current EDS into new buffer\r
-       signal next_eds_done            : std_logic;\r
-       signal eds_done                         : std_logic; -- acknowledge and release old EDS\r
-\r
-       -- generate needs arrays...\r
-       type raw_data_t is array (0 to 15) of std_logic_vector(37 downto 0);\r
-       signal raw_data                         : raw_data_t;\r
-       type fifo_data_t is array (0 to 15) of std_logic_vector(39 downto 0);\r
-       signal fifo_data                        : fifo_data_t;\r
-       type sc_data_t is array (0 to 15) of std_logic_vector(17 downto 0);\r
-       signal ped_data                         : sc_data_t;\r
-       signal thr_data                         : sc_data_t;\r
-\r
-       signal fifo_we                          : std_logic_vector(15 downto 0);\r
-\r
-       signal errors                           : std_logic_vector(3 downto 0);\r
-\r
-       -- for summing up\r
-       signal next_small_0_sum         : std_logic_vector(4 downto 0);\r
-       signal small_0_sum                      : std_logic_vector(4 downto 0);\r
-       signal next_small_1_sum         : std_logic_vector(4 downto 0);\r
-       signal small_1_sum                      : std_logic_vector(4 downto 0);\r
-       signal small_sum                        : std_logic_vector(15 downto 0);\r
-       signal total_sum                        : std_logic_vector(15 downto 0);\r
-       signal reset_sum                        : std_logic;\r
+-- state machine definitions\r
+type STATES is (SLEEP,LOADFC,DELFC,CHECK,FULL,DEL0,NBERR,EMPTY,CHKFC,FCERR,CHKRW,RWERR,CHKAE,AEERR,\r
+                               FINIT,FLOAD,FZERO,FREAD,FDONE,FDEL,FDEC,WREDS,ACKEDS,WHDR,EHDR,CCNT,CDEL0,CDEL1,DEL1,DEL2);\r
+signal CURRENT_STATE, NEXT_STATE: STATES;\r
+\r
+-- signals\r
+signal debug            : std_logic_vector(15 downto 0);\r
+signal bsm_x            : std_logic_vector(7 downto 0);\r
+\r
+-- status signals from TOCs\r
+signal buf_gooddata     : std_logic_vector(15 downto 0);\r
+signal buf_baddata      : std_logic_vector(15 downto 0);\r
+signal buf_nodata       : std_logic_vector(15 downto 0);\r
+signal buf_ready        : std_logic_vector(15 downto 0);\r
+\r
+-- local frame counter\r
+signal to_do_ctr        : std_logic_vector(3 downto 0);\r
+signal done_ctr         : std_logic_vector(3 downto 0);\r
+signal loc_frm_ctr      : std_logic_vector(3 downto 0);\r
+signal next_ld_frm_ctr  : std_logic;\r
+signal ld_frm_ctr       : std_logic; -- load frame counter with EDS start value\r
+signal next_ce_frm_ctr  : std_logic;\r
+signal ce_frm_ctr       : std_logic; -- increment frame counter\r
+signal next_last_frame  : std_logic;\r
+signal last_frame       : std_logic; -- all frame buffers have been copied\r
+signal next_cleaned_up  : std_logic;\r
+signal cleaned_up       : std_logic; -- only relevant in case of errors\r
+signal next_multi_frame : std_logic;\r
+signal multi_frame      : std_logic; -- more than one frame requested\r
+signal next_do_hdr      : std_logic;\r
+signal do_hdr           : std_logic; -- insert debug header (in case of common errors, in case of multiframe)\r
+signal next_do_error    : std_logic;\r
+signal do_error         : std_logic; -- insert debug header (in case of broken buffer only)\r
+signal next_do_start    : std_logic;\r
+signal do_start         : std_logic; -- start signal for one event processing\r
+\r
+-- buffer status signals, error signals from checkers\r
+signal buffers_ready    : std_logic; -- all buffers are ready for data transport\r
+signal buffers_valid    : std_logic; -- at least one buffer has valid data\r
+signal frame_row_error  : std_logic;\r
+signal frame_apv_error  : std_logic;\r
+signal frame_ctr_error  : std_logic;\r
+\r
+signal frame_busy       : std_logic; -- from ALU\r
+\r
+-- Buffer read address counter, control signals\r
+signal buf_addr             : std_logic_vector(5 downto 0); -- buffer / pedestal read address\r
+signal buf_half             : std_logic;\r
+signal next_buf_addr_ce     : std_logic;\r
+signal buf_addr_ce          : std_logic;\r
+signal next_buf_addr_rst    : std_logic;\r
+signal buf_addr_rst         : std_logic;\r
+signal next_buf_addr_init   : std_logic; -- needed for THR\r
+signal buf_addr_init        : std_logic;\r
+signal next_buf_addr_done   : std_logic;\r
+signal buf_addr_done        : std_logic;\r
+signal next_buf_done        : std_logic;\r
+signal buf_done             : std_logic;\r
+signal next_frame_valid     : std_logic;\r
+signal frame_valid          : std_logic;\r
+signal buf_frame_valid      : std_logic;\r
+signal raw_addr             : std_logic_vector(6 downto 0);\r
+signal buf_raw_addr         : std_logic_vector(6 downto 0);\r
+\r
+-- statemachine signals\r
+signal next_wait_frames     : std_logic;\r
+signal wait_frames          : std_logic; -- we are in the waiting phase for incoming frames\r
+signal next_eds_wr          : std_logic;\r
+signal eds_wr               : std_logic; -- copy current EDS into new buffer\r
+signal next_eds_done        : std_logic;\r
+signal eds_done             : std_logic; -- acknowledge and release old EDS\r
+\r
+-- generate needs arrays...\r
+type raw_data_t is array (0 to 15) of std_logic_vector(37 downto 0);\r
+signal raw_data             : raw_data_t;\r
+type fifo_data_t is array (0 to 15) of std_logic_vector(39 downto 0);\r
+signal fifo_data            : fifo_data_t;\r
+type sc_data_t is array (0 to 15) of std_logic_vector(17 downto 0);\r
+signal ped_data             : sc_data_t;\r
+signal thr_data             : sc_data_t;\r
+\r
+signal fifo_we              : std_logic_vector(15 downto 0);\r
+\r
+signal errors               : std_logic_vector(3 downto 0);\r
+\r
+-- for summing up\r
+signal next_small_0_sum     : std_logic_vector(4 downto 0);\r
+signal small_0_sum          : std_logic_vector(4 downto 0);\r
+signal next_small_1_sum     : std_logic_vector(4 downto 0);\r
+signal small_1_sum          : std_logic_vector(4 downto 0);\r
+signal small_sum            : std_logic_vector(15 downto 0);\r
+signal total_sum            : std_logic_vector(15 downto 0);\r
+signal reset_sum            : std_logic;\r
+\r
+signal next_max_num_words   : std_logic_vector(11 downto 0);\r
+signal max_num_words        : std_logic_vector(11 downto 0);\r
+\r
+signal thr_addr_q           : std_logic_vector(6 downto 0);\r
+signal thr_addr_qq          : std_logic_vector(6 downto 0);\r
+signal thr_addr_qqq         : std_logic_vector(6 downto 0);\r
 \r
+begin\r
+\r
+---------------------------------------------------------------------------\r
+-- "Calculate" the number of words needed in IPU buffer stage\r
+---------------------------------------------------------------------------\r
+\r
+-- we need three informations: \r
+-- - number of APV data frames => EDS_DATA[35:32]\r
+-- - maximum number of surviving channels (64 or 128) => EDS_DATA[2:0]\r
+-- - number of debug words per APV frame => by design\r
+next_max_num_words(11)         <= '0';\r
 \r
+THE_DECIDER_PROC: process( eds_data_in(35 downto 32), eds_data_in(2 downto 0) )\r
 begin\r
+       case eds_data_in(2 downto 0) is\r
+               when b"000" => next_max_num_words(10 downto 6) <= eds_data_in(35 downto 32) & '0'; -- 128 - RAW128\r
+               when b"001" => next_max_num_words(10 downto 6) <= eds_data_in(35 downto 32) & '0'; -- 128 - PED128\r
+               when b"010" => next_max_num_words(10 downto 6) <= eds_data_in(35 downto 32) & '0'; -- 128 - PED128THR\r
+               when b"011" => next_max_num_words(10 downto 6) <= '0' & eds_data_in(35 downto 32); --  64 - RAW64\r
+               when b"100" => next_max_num_words(10 downto 6) <= eds_data_in(35 downto 32) & '0'; -- 128 - NC64PED64\r
+               when b"101" => next_max_num_words(10 downto 6) <= '0' & eds_data_in(35 downto 32); --  64 - NC64\r
+               when b"110" => next_max_num_words(10 downto 6) <= '0' & eds_data_in(35 downto 32); --  64 - NC64GOOD\r
+               when b"111" => next_max_num_words(10 downto 6) <= '0' & eds_data_in(35 downto 32); --  64 - NC64THR\r
+               when others => next_max_num_words(10 downto 6) <= (others => '0');\r
+       end case;\r
+end process THE_DECIDER_PROC;\r
+\r
+next_max_num_words(5)          <= '0';\r
+next_max_num_words(4 downto 1) <= eds_data_in(35 downto 32);\r
+next_max_num_words(0)          <= '0';\r
 \r
 ---------------------------------------------------------------------------\r
 -- Aliasing the data streams\r
@@ -273,67 +301,69 @@ thr_data(15) <= thr_15_data_in;
 -- framecounter check, must be done once per frame\r
 ---------------------------------------------------------------------------\r
 THE_FRMCTR_CHECK: frmctr_check\r
-port map( CLK_IN                       => clk_in,\r
-                 GOODDATA_IN           => buf_gooddata,\r
-                 FRAMECOUNTER_IN       => loc_frm_ctr,\r
-                 FRM_NR_0_IN           => raw_data(0)(17 downto 14),\r
-                 FRM_NR_1_IN           => raw_data(1)(17 downto 14),\r
-                 FRM_NR_2_IN           => raw_data(2)(17 downto 14),\r
-                 FRM_NR_3_IN           => raw_data(3)(17 downto 14),\r
-                 FRM_NR_4_IN           => raw_data(4)(17 downto 14),\r
-                 FRM_NR_5_IN           => raw_data(5)(17 downto 14),\r
-                 FRM_NR_6_IN           => raw_data(6)(17 downto 14),\r
-                 FRM_NR_7_IN           => raw_data(7)(17 downto 14),\r
-                 FRM_NR_8_IN           => raw_data(8)(17 downto 14),\r
-                 FRM_NR_9_IN           => raw_data(9)(17 downto 14),\r
-                 FRM_NR_10_IN          => raw_data(10)(17 downto 14),\r
-                 FRM_NR_11_IN          => raw_data(11)(17 downto 14),\r
-                 FRM_NR_12_IN          => raw_data(12)(17 downto 14),\r
-                 FRM_NR_13_IN          => raw_data(13)(17 downto 14),\r
-                 FRM_NR_14_IN          => raw_data(14)(17 downto 14),\r
-                 FRM_NR_15_IN          => raw_data(15)(17 downto 14),\r
-                 FRC_ERROR_OUT         => frame_ctr_error, -- BUG\r
-                 DBG_OUT                       => open\r
-               );\r
+port map(\r
+       CLK_IN          => clk_in,\r
+       GOODDATA_IN     => buf_gooddata,\r
+       FRAMECOUNTER_IN => loc_frm_ctr,\r
+       FRM_NR_0_IN     => raw_data(0)(17 downto 14),\r
+       FRM_NR_1_IN     => raw_data(1)(17 downto 14),\r
+       FRM_NR_2_IN     => raw_data(2)(17 downto 14),\r
+       FRM_NR_3_IN     => raw_data(3)(17 downto 14),\r
+       FRM_NR_4_IN     => raw_data(4)(17 downto 14),\r
+       FRM_NR_5_IN     => raw_data(5)(17 downto 14),\r
+       FRM_NR_6_IN     => raw_data(6)(17 downto 14),\r
+       FRM_NR_7_IN     => raw_data(7)(17 downto 14),\r
+       FRM_NR_8_IN     => raw_data(8)(17 downto 14),\r
+       FRM_NR_9_IN     => raw_data(9)(17 downto 14),\r
+       FRM_NR_10_IN    => raw_data(10)(17 downto 14),\r
+       FRM_NR_11_IN    => raw_data(11)(17 downto 14),\r
+       FRM_NR_12_IN    => raw_data(12)(17 downto 14),\r
+       FRM_NR_13_IN    => raw_data(13)(17 downto 14),\r
+       FRM_NR_14_IN    => raw_data(14)(17 downto 14),\r
+       FRM_NR_15_IN    => raw_data(15)(17 downto 14),\r
+       FRC_ERROR_OUT   => frame_ctr_error, -- BUG\r
+       DBG_OUT         => open\r
+);\r
 \r
 ---------------------------------------------------------------------------\r
 -- framewise ROW and ERROR checker\r
 ---------------------------------------------------------------------------\r
 THE_REF_ROW_SEL: ref_row_sel\r
-port map( CLK_IN                               => clk_in,\r
-                 READY_IN                              => buf_ready,\r
-                 GOODDATA_IN                   => buf_gooddata,\r
-                 FRAME_0_IN                    => raw_data(0)(29 downto 18),\r
-                 FRAME_1_IN                    => raw_data(1)(29 downto 18),\r
-                 FRAME_2_IN                    => raw_data(2)(29 downto 18),\r
-                 FRAME_3_IN                    => raw_data(3)(29 downto 18),\r
-                 FRAME_4_IN                    => raw_data(4)(29 downto 18),\r
-                 FRAME_5_IN                    => raw_data(5)(29 downto 18),\r
-                 FRAME_6_IN                    => raw_data(6)(29 downto 18),\r
-                 FRAME_7_IN                    => raw_data(7)(29 downto 18),\r
-                 FRAME_8_IN                    => raw_data(8)(29 downto 18),\r
-                 FRAME_9_IN                    => raw_data(9)(29 downto 18),\r
-                 FRAME_10_IN                   => raw_data(10)(29 downto 18),\r
-                 FRAME_11_IN                   => raw_data(11)(29 downto 18),\r
-                 FRAME_12_IN                   => raw_data(12)(29 downto 18),\r
-                 FRAME_13_IN                   => raw_data(13)(29 downto 18),\r
-                 FRAME_14_IN                   => raw_data(14)(29 downto 18),\r
-                 FRAME_15_IN                   => raw_data(15)(29 downto 18),\r
-                 VALID_BUFS_OUT                => buffers_valid,\r
-                 READY_OUT                             => buffers_ready,\r
-                 ROW_ERROR_OUT                 => frame_row_error,\r
-                 APV_ERROR_OUT                 => frame_apv_error,\r
-                 APV_ERROR_BITS_OUT    => open, -- BUGBUGBUG\r
-                 REF_ROW_OUT                   => open, -- selected reference row\r
-                 DBG_OUT                               => open\r
-               );\r
+port map(\r
+       CLK_IN              => clk_in,\r
+       READY_IN            => buf_ready,\r
+       GOODDATA_IN         => buf_gooddata,\r
+       FRAME_0_IN          => raw_data(0)(29 downto 18),\r
+       FRAME_1_IN          => raw_data(1)(29 downto 18),\r
+       FRAME_2_IN          => raw_data(2)(29 downto 18),\r
+       FRAME_3_IN          => raw_data(3)(29 downto 18),\r
+       FRAME_4_IN          => raw_data(4)(29 downto 18),\r
+       FRAME_5_IN          => raw_data(5)(29 downto 18),\r
+       FRAME_6_IN          => raw_data(6)(29 downto 18),\r
+       FRAME_7_IN          => raw_data(7)(29 downto 18),\r
+       FRAME_8_IN          => raw_data(8)(29 downto 18),\r
+       FRAME_9_IN          => raw_data(9)(29 downto 18),\r
+       FRAME_10_IN         => raw_data(10)(29 downto 18),\r
+       FRAME_11_IN         => raw_data(11)(29 downto 18),\r
+       FRAME_12_IN         => raw_data(12)(29 downto 18),\r
+       FRAME_13_IN         => raw_data(13)(29 downto 18),\r
+       FRAME_14_IN         => raw_data(14)(29 downto 18),\r
+       FRAME_15_IN         => raw_data(15)(29 downto 18),\r
+       VALID_BUFS_OUT      => buffers_valid,\r
+       READY_OUT           => buffers_ready,\r
+       ROW_ERROR_OUT       => frame_row_error,\r
+       APV_ERROR_OUT       => frame_apv_error,\r
+       APV_ERROR_BITS_OUT  => open, -- BUGBUGBUG\r
+       REF_ROW_OUT         => open, -- selected reference row\r
+       DBG_OUT             => open\r
+);\r
 \r
 ---------------------------------------------------------------------------\r
 -- Statemachine\r
 ---------------------------------------------------------------------------\r
 \r
 -- state registers\r
-STATE_MEM: process( clk_in ) \r
+STATE_MEM: process( clk_in )\r
 begin\r
        if( rising_edge(clk_in) ) then\r
                if( reset_in = '1' ) then\r
@@ -376,8 +406,8 @@ errors(1) <= frame_row_error;
 errors(0) <= frame_apv_error;\r
 \r
 -- state transitions\r
-STATE_TRANSFORM: process( CURRENT_STATE, eds_avail_in, dhdr_buf_full_in, last_frame, multi_frame, frame_busy, \r
-                                                 buffers_ready, buffers_valid, frame_ctr_error, frame_row_error, frame_apv_error, \r
+STATE_TRANSFORM: process( CURRENT_STATE, eds_avail_in, dhdr_buf_full_in, last_frame, multi_frame, frame_busy,\r
+                                                 buffers_ready, buffers_valid, frame_ctr_error, frame_row_error, frame_apv_error,\r
                                                  buf_addr_done, buf_half )\r
 begin\r
        NEXT_STATE         <= SLEEP; -- avoid latches\r
@@ -395,46 +425,48 @@ begin
        next_do_error      <= '0';\r
        next_do_start      <= '0';\r
        case CURRENT_STATE is\r
-               when SLEEP      =>      if( (eds_avail_in = '1') and (dhdr_buf_full_in = '0') ) then\r
+               -- BUG: we need to delay this by some clock cycles to be sure that enough space is available in IPU stage.\r
+               --      calculation of max_num_words takes some time.\r
+               when SLEEP  =>  if( (eds_avail_in = '1') and (dhdr_buf_full_in = '0') ) then\r
                                                        NEXT_STATE   <= LOADFC;\r
                                                        next_ld_frm_ctr <= '1';\r
                                                else\r
                                                        NEXT_STATE   <= SLEEP;\r
                                                end if;\r
-               when LOADFC     =>      NEXT_STATE    <= DELFC;\r
+               when LOADFC =>  NEXT_STATE    <= DELFC;\r
                                                next_do_start <= '1';\r
-               when DELFC      =>      NEXT_STATE <= CHECK;\r
-               when CHECK      =>      if( last_frame = '0' ) then\r
+               when DELFC  =>  NEXT_STATE <= CHECK;\r
+               when CHECK  =>  if( last_frame = '0' ) then\r
                                                        NEXT_STATE       <= FULL;\r
                                                        next_wait_frames <= '1';\r
                                                else\r
                                                        NEXT_STATE    <= EMPTY;\r
                                                end if;\r
-               when EMPTY      =>      NEXT_STATE  <= WREDS;\r
+               when EMPTY  =>  NEXT_STATE  <= WREDS;\r
                                                next_eds_wr <= '1';\r
-               when FULL       =>      if( buffers_ready = '1' ) then\r
+               when FULL   =>  if( buffers_ready = '1' ) then\r
                                                        NEXT_STATE       <= DEL0;\r
                                                        next_do_error    <= '1'; -- here broken channels deliver a "I DON'T FEEL GOOD" word...\r
                                                else\r
                                                        NEXT_STATE       <= FULL;\r
                                                        next_wait_frames <= '1';\r
                                                end if;\r
-               when DEL0       =>      if   ( buffers_valid = '1' ) then\r
+               when DEL0   =>  if   ( buffers_valid = '1' ) then\r
                                                        NEXT_STATE <= CHKFC;\r
                                                else\r
                                                        NEXT_STATE <= NBERR;\r
                                                end if;\r
-               when CHKFC      =>      if( frame_ctr_error = '0' ) then\r
+               when CHKFC  =>  if( frame_ctr_error = '0' ) then\r
                                                        NEXT_STATE <= CHKRW;\r
                                                else\r
                                                        NEXT_STATE <= FCERR;\r
                                                end if;\r
-               when CHKRW      =>      if( frame_row_error = '0' ) then\r
+               when CHKRW  =>  if( frame_row_error = '0' ) then\r
                                                        NEXT_STATE <= CHKAE;\r
                                                else\r
                                                        NEXT_STATE <= RWERR;\r
                                                end if;\r
-               when CHKAE      =>      if   ( (frame_apv_error = '0') and (multi_frame = '1') ) then\r
+               when CHKAE  =>  if   ( (frame_apv_error = '0') and (multi_frame = '1') ) then\r
                                                        NEXT_STATE  <= WHDR;\r
                                                        next_do_hdr <= '1';\r
                                                elsif( (frame_apv_error = '0') and (multi_frame = '0') ) then\r
@@ -443,16 +475,16 @@ begin
                                                else\r
                                                        NEXT_STATE        <= AEERR;\r
                                                end if;\r
-               when WHDR       =>      NEXT_STATE <= FINIT;\r
+               when WHDR   =>  NEXT_STATE <= FINIT;\r
                                                next_buf_addr_rst <= '1';\r
-               when FINIT      =>      NEXT_STATE        <= FLOAD; -- load address x"01";\r
+               when FINIT  =>  NEXT_STATE        <= FLOAD; -- load address x"01";\r
                                                next_buf_addr_ce  <= '1';\r
-               when FLOAD      =>      NEXT_STATE         <= FZERO; -- load address x"00";\r
+               when FLOAD  =>  NEXT_STATE         <= FZERO; -- load address x"00";\r
                                                next_buf_addr_rst  <= '1';\r
                                                next_buf_addr_init <= not buf_half;\r
-               when FZERO      =>      NEXT_STATE       <= FREAD;\r
+               when FZERO  =>  NEXT_STATE       <= FREAD;\r
                                                next_buf_addr_ce <= '1';\r
-               when FREAD      =>      if   ( (buf_addr_done = '1') and (buf_half = '1') ) then\r
+               when FREAD  =>  if   ( (buf_addr_done = '1') and (buf_half = '1') ) then\r
                                                        NEXT_STATE       <= FDONE;\r
                                                        next_ce_frm_ctr  <= '1';\r
                                                        next_buf_done    <= '1';\r
@@ -465,33 +497,33 @@ begin
                                                        next_buf_addr_ce <= '1';\r
                                                        next_frame_valid <= '1';\r
                                                end if;\r
-               when FDONE      =>      if( frame_busy = '1' ) then\r
+               when FDONE  =>  if( frame_busy = '1' ) then\r
                                                        NEXT_STATE <= FDONE;\r
                                                else\r
                                                        NEXT_STATE <= FDEL;\r
                                                end if;\r
-               when FDEL       =>      NEXT_STATE <= FDEC;\r
-               when FDEC       =>      if( last_frame = '1' ) then\r
+               when FDEL   =>  NEXT_STATE <= FDEC;\r
+               when FDEC   =>  if( last_frame = '1' ) then\r
                                                        NEXT_STATE  <= WREDS; -- copy current EDS to new buffer\r
                                                        next_eds_wr <= '1';\r
                                                else\r
                                                        NEXT_STATE <= DEL0; -- only for multiframe readout, will not work (needs headers!!!)\r
                                                end if;\r
-               when WREDS      =>      NEXT_STATE    <= ACKEDS; -- release old EDS\r
+               when WREDS  =>  NEXT_STATE    <= ACKEDS; -- release old EDS\r
                                                next_eds_done <= '1';\r
-               when ACKEDS     =>      NEXT_STATE <= DEL1;\r
-               when DEL1       =>      NEXT_STATE <= DEL2;\r
-               when DEL2       =>      NEXT_STATE <= SLEEP;\r
-               \r
-               when NBERR      =>      NEXT_STATE  <= EHDR;\r
+               when ACKEDS =>  NEXT_STATE <= DEL1;\r
+               when DEL1   =>  NEXT_STATE <= DEL2;\r
+               when DEL2   =>  NEXT_STATE <= SLEEP;\r
+\r
+               when NBERR  =>  NEXT_STATE  <= EHDR;\r
                                                next_do_hdr <= '1';\r
-               when FCERR      =>      NEXT_STATE  <= EHDR;\r
+               when FCERR  =>  NEXT_STATE  <= EHDR;\r
                                                next_do_hdr <= '1';\r
-               when RWERR      =>      NEXT_STATE  <= EHDR;\r
+               when RWERR  =>  NEXT_STATE  <= EHDR;\r
                                                next_do_hdr <= '1';\r
-               when AEERR      =>      NEXT_STATE  <= EHDR;\r
+               when AEERR  =>  NEXT_STATE  <= EHDR;\r
                                                next_do_hdr <= '1';\r
-               when EHDR       =>      if( last_frame = '1' ) then\r
+               when EHDR   =>  if( last_frame = '1' ) then\r
                                                        NEXT_STATE  <= WREDS;\r
                                                        next_eds_wr <= '1';\r
                                                else\r
@@ -499,54 +531,54 @@ begin
                                                        next_ce_frm_ctr <= '1';\r
                                                        next_buf_done   <= '1';\r
                                                end if;\r
-               when CCNT       =>      NEXT_STATE <= CDEL0;\r
-               when CDEL0      =>      NEXT_STATE <= CDEL1;\r
-               when CDEL1      =>      if( last_frame = '1' ) then\r
+               when CCNT   =>  NEXT_STATE <= CDEL0;\r
+               when CDEL0  =>  NEXT_STATE <= CDEL1;\r
+               when CDEL1  =>  if( last_frame = '1' ) then\r
                                                        NEXT_STATE  <= WREDS;\r
                                                        next_eds_wr <= '1';\r
                                                else\r
                                                        NEXT_STATE  <= EHDR;\r
                                                        next_do_hdr <= '1';\r
                                                end if;\r
-               when others     =>      NEXT_STATE <= SLEEP;\r
+               when others =>  NEXT_STATE <= SLEEP;\r
        end case;\r
-end process STATE_TRANSFORM;                                                   \r
+end process STATE_TRANSFORM;\r
 \r
 -- state decoding (ONLY FOR DEBUGGING!)\r
 STATE_DECODE: process( CURRENT_STATE )\r
 begin\r
        case CURRENT_STATE is\r
-               when SLEEP      =>      bsm_x <= x"00";\r
-               when LOADFC     =>      bsm_x <= x"01";\r
-               when DELFC      =>      bsm_x <= x"02";\r
-               when CHECK      =>      bsm_x <= x"03";\r
-               when FULL       =>      bsm_x <= x"04";\r
-               when EMPTY      =>      bsm_x <= x"05";\r
-               when NBERR      =>      bsm_x <= x"06";\r
-               when CHKFC      =>      bsm_x <= x"07";\r
-               when FCERR      =>      bsm_x <= x"08";\r
-               when CHKRW      =>      bsm_x <= x"09";\r
-               when RWERR      =>      bsm_x <= x"0a";\r
-               when CHKAE      =>      bsm_x <= x"0b";\r
-               when AEERR      =>      bsm_x <= x"0c";\r
-               when FINIT      =>      bsm_x <= x"0d";\r
-               when FLOAD      =>      bsm_x <= x"0e";\r
-               when FZERO      =>      bsm_x <= x"0f";\r
-               when FREAD      =>      bsm_x <= x"10";\r
-               when FDONE      =>      bsm_x <= x"11";\r
-               when FDEL       =>      bsm_x <= x"12";\r
-               when FDEC       =>      bsm_x <= x"13";\r
-               when WREDS      =>      bsm_x <= x"14";\r
-               when ACKEDS     =>      bsm_x <= x"15";\r
-               when EHDR       =>      bsm_x <= x"16";\r
-               when CDEL0      =>      bsm_x <= x"17";\r
-               when CDEL1      =>      bsm_x <= x"18";\r
-               when CCNT       =>      bsm_x <= x"19";\r
-               when DEL0       =>      bsm_x <= x"20";\r
-               when DEL1       =>      bsm_x <= x"21";\r
-               when DEL2       =>      bsm_x <= x"22";\r
-               when WHDR       =>      bsm_x <= x"23";\r
-               when others     =>      bsm_x <= x"ff";\r
+               when SLEEP  =>  bsm_x <= x"00";\r
+               when LOADFC =>  bsm_x <= x"01";\r
+               when DELFC  =>  bsm_x <= x"02";\r
+               when CHECK  =>  bsm_x <= x"03";\r
+               when FULL   =>  bsm_x <= x"04";\r
+               when EMPTY  =>  bsm_x <= x"05";\r
+               when NBERR  =>  bsm_x <= x"06";\r
+               when CHKFC  =>  bsm_x <= x"07";\r
+               when FCERR  =>  bsm_x <= x"08";\r
+               when CHKRW  =>  bsm_x <= x"09";\r
+               when RWERR  =>  bsm_x <= x"0a";\r
+               when CHKAE  =>  bsm_x <= x"0b";\r
+               when AEERR  =>  bsm_x <= x"0c";\r
+               when FINIT  =>  bsm_x <= x"0d";\r
+               when FLOAD  =>  bsm_x <= x"0e";\r
+               when FZERO  =>  bsm_x <= x"0f";\r
+               when FREAD  =>  bsm_x <= x"10";\r
+               when FDONE  =>  bsm_x <= x"11";\r
+               when FDEL   =>  bsm_x <= x"12";\r
+               when FDEC   =>  bsm_x <= x"13";\r
+               when WREDS  =>  bsm_x <= x"14";\r
+               when ACKEDS =>  bsm_x <= x"15";\r
+               when EHDR   =>  bsm_x <= x"16";\r
+               when CDEL0  =>  bsm_x <= x"17";\r
+               when CDEL1  =>  bsm_x <= x"18";\r
+               when CCNT   =>  bsm_x <= x"19";\r
+               when DEL0   =>  bsm_x <= x"20";\r
+               when DEL1   =>  bsm_x <= x"21";\r
+               when DEL2   =>  bsm_x <= x"22";\r
+               when WHDR   =>  bsm_x <= x"23";\r
+               when others =>  bsm_x <= x"ff";\r
        end case;\r
 end process STATE_DECODE;\r
 \r
@@ -581,24 +613,6 @@ end process THE_HALF_PROC;
 \r
 raw_addr <= buf_half & buf_addr;\r
 \r
----------------------------------------------------------------------------\r
--- threshold address counter\r
----------------------------------------------------------------------------\r
-THE_THR_ADDR_COUNTER_PROC: process( clk_in )\r
-begin\r
-       if( rising_edge(clk_in) ) then\r
-               if   ( (thr_addr_rst = '1') or (reset_in = '1') ) then\r
-                       thr_addr <= (others => '0');\r
-               elsif( thr_addr_ce = '1' ) then\r
-                       thr_addr <= thr_addr + 1;\r
-               end if;\r
-       end if;\r
-end process THE_THR_ADDR_COUNTER_PROC;\r
-\r
--- was '3'\r
-thr_addr_ce  <= dly_thr_addr_ce(2);\r
-thr_addr_rst <= dly_thr_addr_rst(2);\r
-\r
 ---------------------------------------------------------------------------\r
 -- local frame counter, loaded / counted by SM for checking\r
 ---------------------------------------------------------------------------\r
@@ -641,177 +655,168 @@ begin
                cleaned_up      <= next_cleaned_up;\r
                buf_addr_done   <= next_buf_addr_done;\r
                buf_frame_valid <= frame_valid;\r
-               buf_raw_addr    <= raw_addr;\r
                small_0_sum     <= next_small_0_sum;\r
                small_1_sum     <= next_small_1_sum;\r
-               dly_thr_addr_ce(7 downto 0)  <= dly_thr_addr_ce(6 downto 0)  & buf_addr_ce;\r
-               dly_thr_addr_rst(7 downto 0) <= dly_thr_addr_rst(6 downto 0) & buf_addr_init;\r
+               max_num_words   <= next_max_num_words;\r
+               thr_addr_qqq    <= thr_addr_qq;\r
+               thr_addr_qq     <= thr_addr_q;\r
+               thr_addr_q      <= buf_raw_addr;\r
+               buf_raw_addr    <= raw_addr;\r
        end if;\r
 end process THE_SYNC_PROC;\r
 \r
 ---------------------------------------------------------------------------\r
--- DHDR information assembly\r
----------------------------------------------------------------------------\r
-dhdr_data_out(31 downto 29) <= "000"; -- reserved bits\r
-dhdr_data_out(28)           <= '1';   -- packbit\r
-dhdr_data_out(27 downto 24) <= eds_data_in(7 downto 4);\r
-dhdr_data_out(23 downto 16) <= eds_data_in(15 downto 8);\r
-dhdr_data_out(15 downto 0)  <= eds_data_in(31 downto 16);\r
-\r
-dhdr_length_out             <= total_sum;\r
-\r
-dhdr_store_out              <= eds_wr;\r
-\r
---##########################################################################\r
---##########################################################################\r
-\r
 -- generate TimeOutCounters for all 16 APVs\r
+---------------------------------------------------------------------------\r
 GEN_TOC: for i in 0 to 15 generate\r
        THE_BUF_TOC: buf_toc\r
-       port map( CLK_IN                        => clk_in,\r
-                         RESET_IN                      => reset_in,\r
-                         BUF_TICK_IN           => buf_tick_in(i),\r
-                         BUF_START_IN          => buf_start_in(i),\r
-                         WAITFRAME_IN          => wait_frames,\r
-                         FRAMES_REQD_IN        => eds_data_in(35 downto 32), -- always the same\r
-                         BUF_LVL_IN            => raw_data(i)(37 downto 30),\r
-                         GOODDATA_OUT          => buf_gooddata(i),\r
-                         BADDATA_OUT           => buf_baddata(i),\r
-                         NODATA_OUT            => buf_nodata(i),\r
-                         READY_OUT                     => buf_ready(i),\r
-                         BSM_OUT                       => open,\r
-                         DBG_OUT                       => open\r
-                       );\r
+       port map(\r
+               CLK_IN          => clk_in,\r
+               RESET_IN        => reset_in,\r
+               BUF_TICK_IN     => buf_tick_in(i),\r
+               BUF_START_IN    => buf_start_in(i),\r
+               WAITFRAME_IN    => wait_frames,\r
+               FRAMES_REQD_IN  => eds_data_in(35 downto 32), -- always the same\r
+               BUF_LVL_IN      => raw_data(i)(37 downto 30),\r
+               GOODDATA_OUT    => buf_gooddata(i),\r
+               BADDATA_OUT     => buf_baddata(i),\r
+               NODATA_OUT      => buf_nodata(i),\r
+               READY_OUT       => buf_ready(i),\r
+               BSM_OUT         => open,\r
+               DBG_OUT         => open\r
+       );\r
 end generate GEN_TOC;\r
 \r
+---------------------------------------------------------------------------\r
 -- generate ALUs for all 16 APV data streams\r
+---------------------------------------------------------------------------\r
 GEN_ALU: for i in 0 to 15 generate\r
        THE_ALU: apv_pc_nc_alu\r
-       port map( CLK_IN                        => clk_in,\r
-                         RESET_IN                      => reset_in,\r
-                         START_IN                      => ld_frm_ctr,\r
-                         MAX_FRAMES_IN         => eds_data_in(35 downto 32),\r
-                         CURR_FRAME_IN         => done_ctr,\r
-                         LOC_FRM_CTR_IN        => loc_frm_ctr, -- DEBUG\r
-                         EDS_FRM_CTR_IN        => eds_data_in(39 downto 36), -- DEBUG\r
-                         BUF_GOOD_IN           => buf_gooddata(i),\r
-                         BUF_BAD_IN            => buf_baddata(i),\r
-                         BUF_IGNORE_IN         => buf_nodata(i),\r
-                         ERROR_IN                      => errors,\r
-                         DO_HEADER_IN          => do_hdr,\r
-                         DO_ERROR_IN           => do_error,\r
-                         EVT_TYPE_IN           => eds_data_in(6 downto 4), --evt_type_in, -- just a quick fix, does not work lateron!\r
-                         RAW_ADDR_IN           => buf_raw_addr, -- delayed by one cycle\r
-                         RAW_DATA_IN           => raw_data(i),\r
-                         PED_DATA_IN           => ped_data(i),\r
-                         THR_DATA_IN           => thr_data(i),\r
-                         FRAME_IN                      => buf_frame_valid, -- delayed by one cycle\r
-                         FIFO_DATA_OUT         => fifo_data(i)(26 downto 0),\r
-                         WE_OUT                        => fifo_we(i),\r
-                         COUNT_OUT                     => fifo_data(i)(36 downto 27),\r
-                         ANYDATA_OUT           => fifo_data(i)(37),\r
-                         DBG_OUT                       => open\r
-                       );\r
-               fifo_data(i)(39) <= '0';\r
-               fifo_data(i)(38) <= '0';\r
+       port map(\r
+               CLK_IN          => clk_in,\r
+               RESET_IN        => reset_in,\r
+               START_IN        => ld_frm_ctr,\r
+               MAX_FRAMES_IN   => eds_data_in(35 downto 32),\r
+               CURR_FRAME_IN   => done_ctr,\r
+               LOC_FRM_CTR_IN  => loc_frm_ctr, -- DEBUG\r
+               EDS_FRM_CTR_IN  => eds_data_in(39 downto 36), -- DEBUG\r
+               BUF_GOOD_IN     => buf_gooddata(i),\r
+               BUF_BAD_IN      => buf_baddata(i),\r
+               BUF_IGNORE_IN   => buf_nodata(i),\r
+               ERROR_IN        => errors,\r
+               DO_HEADER_IN    => do_hdr,\r
+               DO_ERROR_IN     => do_error,\r
+               SUPPRESS_IN     => eds_data_in(3), -- suppress bit\r
+               EVT_TYPE_IN     => eds_data_in(2 downto 0), -- RICH data configuration bits\r
+               RAW_ADDR_IN     => buf_raw_addr, -- delayed by one cycle\r
+               RAW_DATA_IN     => raw_data(i),\r
+               PED_DATA_IN     => ped_data(i),\r
+               THR_DATA_IN     => thr_data(i),\r
+               FRAME_IN        => buf_frame_valid, -- delayed by one cycle\r
+               FIFO_DATA_OUT   => fifo_data(i)(26 downto 0),\r
+               WE_OUT          => fifo_we(i),\r
+               COUNT_OUT       => fifo_data(i)(36 downto 27),\r
+               ANYDATA_OUT     => fifo_data(i)(37),\r
+               DBG_OUT         => open\r
+       );\r
+       fifo_data(i)(39) <= '0';\r
+       fifo_data(i)(38) <= '0';\r
 end generate GEN_ALU;\r
 \r
 frame_busy       <= fifo_data(0)(26); -- WORKAROUND!\r
 \r
---##################################################################################\r
 ---------------------------------------------------------------------------\r
 -- Sum up all data words of one event\r
 ---------------------------------------------------------------------------\r
 THE_DECODER_0: decoder_8bit\r
-port map( ADDRESS      => fifo_we(7 downto 0),\r
-                 Q                     => next_small_0_sum(3 downto 0)\r
-               );\r
+port map(\r
+       ADDRESS => fifo_we(7 downto 0),\r
+       Q       => next_small_0_sum(3 downto 0)\r
+);\r
 next_small_0_sum(4) <= '0';\r
 \r
 THE_DECODER_1: decoder_8bit\r
-port map( ADDRESS      => fifo_we(15 downto 8),\r
-                 Q                     => next_small_1_sum(3 downto 0)\r
-               );\r
+port map(\r
+       ADDRESS => fifo_we(15 downto 8),\r
+       Q       => next_small_1_sum(3 downto 0)\r
+);\r
 next_small_1_sum(4) <= '0';\r
 \r
 reset_sum <= reset_in or ld_frm_ctr;\r
 \r
 THE_FIRST_ADDER: adder_5bit\r
-port map( DATAA                => small_0_sum,\r
-                 DATAB         => small_1_sum,\r
-                 CLOCK         => clk_in, \r
-                 RESET         => reset_sum, -- BUG\r
-                 CLOCKEN       => '1', \r
-                 RESULT        => small_sum(4 downto 0)\r
-               );\r
+port map(\r
+       DATAA       => small_0_sum,\r
+       DATAB       => small_1_sum,\r
+       CLOCK       => clk_in,\r
+       RESET       => reset_sum, -- BUG\r
+       CLOCKEN     => '1',\r
+       RESULT      => small_sum(4 downto 0)\r
+);\r
 small_sum(15 downto 5) <= (others => '0');\r
 \r
 THE_ACCUMULATOR: adder_16bit\r
-port map( DATAA                => small_sum,\r
-                 DATAB         => total_sum,\r
-                 CLOCK         => clk_in, \r
-                 RESET         => reset_sum, -- BUG \r
-                 CLOCKEN       => '1',\r
-                 RESULT        => total_sum\r
-               );\r
-\r
-fifo_we_out    <= fifo_we;\r
-fifo_start_out <= do_start;\r
-fifo_done_out  <= eds_wr;\r
---##################################################################################\r
-\r
-\r
--- Aliasing the data output\r
-fifo_0_data_out  <= fifo_data(0);\r
-fifo_1_data_out  <= fifo_data(1);\r
-fifo_2_data_out  <= fifo_data(2);\r
-fifo_3_data_out  <= fifo_data(3);\r
-fifo_4_data_out  <= fifo_data(4);\r
-fifo_5_data_out  <= fifo_data(5);\r
-fifo_6_data_out  <= fifo_data(6);\r
-fifo_7_data_out  <= fifo_data(7);\r
-fifo_8_data_out  <= fifo_data(8);\r
-fifo_9_data_out  <= fifo_data(9);\r
-fifo_10_data_out <= fifo_data(10);\r
-fifo_11_data_out <= fifo_data(11);\r
-fifo_12_data_out <= fifo_data(12);\r
-fifo_13_data_out <= fifo_data(13);\r
-fifo_14_data_out <= fifo_data(14);\r
-fifo_15_data_out <= fifo_data(15);\r
+port map(\r
+       DATAA       => small_sum,\r
+       DATAB       => total_sum,\r
+       CLOCK       => clk_in,\r
+       RESET       => reset_sum, -- BUG\r
+       CLOCKEN     => '1',\r
+       RESULT      => total_sum\r
+);\r
+\r
 \r
 ---------------------------------------------------------------------------\r
+-- DHDR information assembly\r
 ---------------------------------------------------------------------------\r
-debug(15)            <= frame_valid;\r
-debug(14)            <= buf_frame_valid;\r
-debug(13 downto 0)   <= (others => '0');\r
---debug(15)           <= last_frame;\r
---debug(14)           <= cleaned_up;\r
---debug(13 downto 12) <= (others => '0');\r
---debug(11 downto 8)  <= loc_frm_ctr;\r
---debug(7 downto 4)   <= to_do_ctr;\r
---debug(3 downto 0)   <= done_ctr;\r
+DHDR_DATA_OUT(31 downto 29) <= "000"; -- reserved bits\r
+DHDR_DATA_OUT(28)           <= '0';   -- packbit, MUST NEVER BE SET IN FEs\r
+DHDR_DATA_OUT(27 downto 24) <= eds_data_in(7 downto 4);\r
+DHDR_DATA_OUT(23 downto 16) <= eds_data_in(15 downto 8);\r
+DHDR_DATA_OUT(15 downto 0)  <= eds_data_in(31 downto 16);\r
+DHDR_LENGTH_OUT             <= total_sum;\r
+DHDR_STORE_OUT              <= eds_wr;\r
+\r
 ---------------------------------------------------------------------------\r
+-- Output signals\r
 ---------------------------------------------------------------------------\r
-\r
+FIFO_0_DATA_OUT    <= fifo_data(0);\r
+FIFO_1_DATA_OUT    <= fifo_data(1);\r
+FIFO_2_DATA_OUT    <= fifo_data(2);\r
+FIFO_3_DATA_OUT    <= fifo_data(3);\r
+FIFO_4_DATA_OUT    <= fifo_data(4);\r
+FIFO_5_DATA_OUT    <= fifo_data(5);\r
+FIFO_6_DATA_OUT    <= fifo_data(6);\r
+FIFO_7_DATA_OUT    <= fifo_data(7);\r
+FIFO_8_DATA_OUT    <= fifo_data(8);\r
+FIFO_9_DATA_OUT    <= fifo_data(9);\r
+FIFO_10_DATA_OUT   <= fifo_data(10);\r
+FIFO_11_DATA_OUT   <= fifo_data(11);\r
+FIFO_12_DATA_OUT   <= fifo_data(12);\r
+FIFO_13_DATA_OUT   <= fifo_data(13);\r
+FIFO_14_DATA_OUT   <= fifo_data(14);\r
+FIFO_15_DATA_OUT   <= fifo_data(15);\r
+FIFO_WE_OUT        <= fifo_we;\r
+FIFO_START_OUT     <= do_start;\r
+FIFO_DONE_OUT      <= eds_wr;\r
+EDS_DONE_OUT       <= eds_done;\r
+BUF_DONE_OUT       <= buf_done;\r
+BUF_ADDR_OUT       <= raw_addr;\r
+PED_ADDR_OUT       <= raw_addr;\r
+THR_ADDR_OUT       <= thr_addr_qqq;\r
+FIFO_SPACE_REQ_OUT <= max_num_words;\r
 \r
 ---------------------------------------------------------------------------\r
--- Output signals\r
+-- Debug signals\r
 ---------------------------------------------------------------------------\r
-eds_done_out    <= eds_done;\r
-buf_done_out    <= buf_done;\r
-buf_addr_out    <= raw_addr;\r
-ped_addr_out    <= raw_addr;\r
-thr_addr_out    <= thr_addr;\r
+debug(15)            <= frame_valid;\r
+debug(14)            <= buf_frame_valid;\r
+debug(13 downto 0)   <= (others => '0');\r
 \r
 ---------------------------------------------------------------------------\r
 -- DEBUG signals\r
 ---------------------------------------------------------------------------\r
-dbg_bsm_out     <= bsm_x;\r
-dbg_out         <= debug;\r
+DBG_BSM_OUT     <= bsm_x;\r
+DBG_OUT         <= debug;\r
 \r
 end behavioral;\r
-\r
-\r
-       \r
-\r
-\r
index df8b3a8351be64f50465ae16fd815bf9b19f5b44..27fb8a637798684dd5711889d4833c12ba2028a5 100644 (file)
@@ -1,29 +1,30 @@
-library ieee; \r
-use ieee.std_logic_1164.all; \r
-use ieee.std_logic_arith.all; \r
+library ieee;\r
+use ieee.std_logic_1164.all;\r
+use ieee.std_logic_arith.all;\r
 use ieee.std_logic_unsigned.all;\r
 \r
 library work;\r
 use work.adcmv3_components.all;\r
 \r
 entity pulse_stretch is\r
-       port( CLK_IN                    : in    std_logic;\r
-                 RESET_IN                      : in    std_logic;\r
-                 START_IN                      : in    std_logic;\r
-                 PULSE_OUT                     : out   std_logic;\r
-                 DEBUG_OUT                     : out   std_logic_vector(15 downto 0)\r
-               );\r
+port(\r
+       CLK_IN      : in    std_logic;\r
+       RESET_IN    : in    std_logic;\r
+       START_IN    : in    std_logic;\r
+       PULSE_OUT   : out   std_logic;\r
+       DEBUG_OUT   : out   std_logic_vector(15 downto 0)\r
+);\r
 end;\r
 \r
 architecture behavioral of pulse_stretch is\r
 \r
-       -- normal signals\r
-       signal pulse_cnt                : std_logic_vector(3 downto 0);\r
-       signal pulse_cnt_ce             : std_logic;\r
-       signal pulse_x                  : std_logic;\r
-       signal pulse                    : std_logic;\r
-       \r
-begin                                          \r
+-- normal signals\r
+signal pulse_cnt        : std_logic_vector(3 downto 0);\r
+signal pulse_cnt_ce     : std_logic;\r
+signal pulse_x          : std_logic;\r
+signal pulse            : std_logic;\r
+\r
+begin\r
 \r
 -- Pulse length counter\r
 THE_PULSE_LENGTH_CTR: process( clk_in )\r
@@ -50,13 +51,13 @@ begin
                else\r
                        pulse <= pulse_x;\r
                end if;\r
-       end if; \r
+       end if;\r
 end process THE_SYNC_PROC;\r
 \r
 \r
 -- output signals\r
 pulse_out               <= pulse;\r
-debug_out(15 downto 4)  <= (others => '0');  \r
+debug_out(15 downto 4)  <= (others => '0');\r
 debug_out(3 downto 0)   <= pulse_cnt;\r
 \r
-end behavioral;                                \r
+end behavioral;\r
index 70164f6cd364d4cdbed5c4152ff89a94ee0588c9..dfdd7f440ef391f8dd025ea4d8cd94280c8bb78a 100644 (file)
@@ -7,24 +7,25 @@ library work;
 use work.adcmv3_components.all;\r
 \r
 entity pulse_sync is\r
-       port( CLK_A_IN                  : in    std_logic;\r
-                 RESET_A_IN            : in    std_logic;\r
-                 PULSE_A_IN            : in    std_logic;\r
-                 CLK_B_IN                      : in    std_logic;\r
-                 RESET_B_IN            : in    std_logic;\r
-                 PULSE_B_OUT           : out   std_logic\r
-               );\r
+port(\r
+       CLK_A_IN        : in    std_logic;\r
+       RESET_A_IN      : in    std_logic;\r
+       PULSE_A_IN      : in    std_logic;\r
+       CLK_B_IN        : in    std_logic;\r
+       RESET_B_IN      : in    std_logic;\r
+       PULSE_B_OUT     : out   std_logic\r
+);\r
 end;\r
 \r
 architecture behavioral of pulse_sync is\r
 \r
-       -- normal signals\r
-       signal toggle_ff                : std_logic;\r
-       signal sync_q                   : std_logic;\r
-       signal sync_qq                  : std_logic;\r
-       signal sync_qqq                 : std_logic;\r
-       signal pulse_b                  : std_logic;\r
-               \r
+-- normal signals\r
+signal toggle_ff        : std_logic;\r
+signal sync_q           : std_logic;\r
+signal sync_qq          : std_logic;\r
+signal sync_qqq         : std_logic;\r
+signal pulse_b          : std_logic;\r
+\r
 begin\r
 \r
 -- toggle flip flop in clock domain A\r
index bef706be03172d63c0cdb25fa9c74ca8427c0961..55d97456b1c3e62250a7baf5a5510186aef3476a 100755 (executable)
@@ -7,113 +7,114 @@ library work;
 use work.adcmv3_components.all;\r
 \r
 entity raw_buf_stage_new is\r
-       port( CLK_IN                    : in    std_logic; -- 100MHz local clock\r
-                 CLK_APV_IN            : in    std_logic; -- 40MHz APV clock\r
-                 RESET_IN                      : in    std_logic; -- general reset (100MHz)\r
-                 -- trigger related signals\r
-                 APV_RESET_IN          : in    std_logic; -- APV reset signal (100MHz)\r
-                 APV_SYNC_IN           : in    std_logic; -- APV sync trigger has been sent (40MHz)\r
-                 APV_FRAME_REQD_IN     : in    std_logic; -- one APV frame has been requested (100MHz)\r
-                 -- ADC0 signals\r
-                 ADC0_VALID_IN         : in    std_logic; -- 40M reconstructed clock is valid\r
-                 ADC0_0_DATA_IN        : in    std_logic_vector(11 downto 0); -- parallel data from ADC0 channel 0\r
-                 ADC0_1_DATA_IN        : in    std_logic_vector(11 downto 0); -- parallel data from ADC0 channel 1\r
-                 ADC0_2_DATA_IN        : in    std_logic_vector(11 downto 0); -- parallel data from ADC0 channel 2\r
-                 ADC0_3_DATA_IN        : in    std_logic_vector(11 downto 0); -- parallel data from ADC0 channel 3\r
-                 ADC0_4_DATA_IN        : in    std_logic_vector(11 downto 0); -- parallel data from ADC0 channel 4\r
-                 ADC0_5_DATA_IN        : in    std_logic_vector(11 downto 0); -- parallel data from ADC0 channel 5\r
-                 ADC0_6_DATA_IN        : in    std_logic_vector(11 downto 0); -- parallel data from ADC0 channel 6\r
-                 ADC0_7_DATA_IN        : in    std_logic_vector(11 downto 0); -- parallel data from ADC0 channel 7\r
-                 -- ADC1 signals\r
-                 ADC1_VALID_IN         : in    std_logic; -- 40M reconstructed clock is valid\r
-                 ADC1_0_DATA_IN        : in    std_logic_vector(11 downto 0); -- parallel data from ADC1 channel 0\r
-                 ADC1_1_DATA_IN        : in    std_logic_vector(11 downto 0); -- parallel data from ADC1 channel 1\r
-                 ADC1_2_DATA_IN        : in    std_logic_vector(11 downto 0); -- parallel data from ADC1 channel 2\r
-                 ADC1_3_DATA_IN        : in    std_logic_vector(11 downto 0); -- parallel data from ADC1 channel 3\r
-                 ADC1_4_DATA_IN        : in    std_logic_vector(11 downto 0); -- parallel data from ADC1 channel 4\r
-                 ADC1_5_DATA_IN        : in    std_logic_vector(11 downto 0); -- parallel data from ADC1 channel 5\r
-                 ADC1_6_DATA_IN        : in    std_logic_vector(11 downto 0); -- parallel data from ADC1 channel 6\r
-                 ADC1_7_DATA_IN        : in    std_logic_vector(11 downto 0); -- parallel data from ADC1 channel 7\r
-                 -- Slow control registers\r
-                 MAX_TRG_NUM_IN        : in    std_logic_vector(3 downto 0); -- maximum number of triggers / event\r
-                 BIT_LOW_IN            : in    std_logic_vector(11 downto 0); -- "bit low" threshold\r
-                 BIT_HIGH_IN           : in    std_logic_vector(11 downto 0); -- "bit high" threshold\r
-                 FL_LOW_IN                     : in    std_logic_vector(11 downto 0); -- "flatline low" threshold\r
-                 FL_HIGH_IN            : in    std_logic_vector(11 downto 0); -- "flatline high" threshold\r
-                 APV_ON_IN                     : in    std_logic_vector(15 downto 0); -- APV on/off bits from slow control\r
-                 -- 100MHZ synchronous interface\r
-                 BUF_FULL_OUT          : out   std_logic;\r
-                 BUF_ADDR_IN           : in    std_logic_vector(6 downto 0);\r
-                 BUF_DONE_IN           : in    std_logic;\r
-                 BUF_TICK_OUT          : out   std_logic_vector(15 downto 0);\r
-                 BUF_START_OUT         : out   std_logic_vector(15 downto 0);\r
-                 BUF_READY_OUT         : out   std_logic_vector(15 downto 0);\r
-                 BUF_0_DATA_OUT        : out   std_logic_vector(37 downto 0);\r
-                 BUF_1_DATA_OUT        : out   std_logic_vector(37 downto 0);\r
-                 BUF_2_DATA_OUT        : out   std_logic_vector(37 downto 0);\r
-                 BUF_3_DATA_OUT        : out   std_logic_vector(37 downto 0);\r
-                 BUF_4_DATA_OUT        : out   std_logic_vector(37 downto 0);\r
-                 BUF_5_DATA_OUT        : out   std_logic_vector(37 downto 0);\r
-                 BUF_6_DATA_OUT        : out   std_logic_vector(37 downto 0);\r
-                 BUF_7_DATA_OUT        : out   std_logic_vector(37 downto 0);\r
-                 BUF_8_DATA_OUT        : out   std_logic_vector(37 downto 0);\r
-                 BUF_9_DATA_OUT        : out   std_logic_vector(37 downto 0);\r
-                 BUF_10_DATA_OUT       : out   std_logic_vector(37 downto 0);\r
-                 BUF_11_DATA_OUT       : out   std_logic_vector(37 downto 0);\r
-                 BUF_12_DATA_OUT       : out   std_logic_vector(37 downto 0);\r
-                 BUF_13_DATA_OUT       : out   std_logic_vector(37 downto 0);\r
-                 BUF_14_DATA_OUT       : out   std_logic_vector(37 downto 0);\r
-                 BUF_15_DATA_OUT       : out   std_logic_vector(37 downto 0);\r
-                 -- Debug signals\r
-                 DEBUG_OUT                     : out   std_logic_vector(63 downto 0)\r
-               );\r
+port(\r
+       CLK_IN              : in    std_logic; -- 100MHz local clock\r
+       CLK_APV_IN          : in    std_logic; -- 40MHz APV clock\r
+       RESET_IN            : in    std_logic; -- general reset (100MHz)\r
+       -- trigger related signals\r
+       APV_RESET_IN        : in    std_logic; -- APV reset signal (100MHz)\r
+       APV_SYNC_IN         : in    std_logic; -- APV sync trigger has been sent (40MHz)\r
+       APV_FRAME_REQD_IN   : in    std_logic; -- one APV frame has been requested (100MHz)\r
+       -- ADC0 signals\r
+       ADC0_VALID_IN       : in    std_logic; -- 40M reconstructed clock is valid\r
+       ADC0_0_DATA_IN      : in    std_logic_vector(11 downto 0); -- parallel data from ADC0 channel 0\r
+       ADC0_1_DATA_IN      : in    std_logic_vector(11 downto 0); -- parallel data from ADC0 channel 1\r
+       ADC0_2_DATA_IN      : in    std_logic_vector(11 downto 0); -- parallel data from ADC0 channel 2\r
+       ADC0_3_DATA_IN      : in    std_logic_vector(11 downto 0); -- parallel data from ADC0 channel 3\r
+       ADC0_4_DATA_IN      : in    std_logic_vector(11 downto 0); -- parallel data from ADC0 channel 4\r
+       ADC0_5_DATA_IN      : in    std_logic_vector(11 downto 0); -- parallel data from ADC0 channel 5\r
+       ADC0_6_DATA_IN      : in    std_logic_vector(11 downto 0); -- parallel data from ADC0 channel 6\r
+       ADC0_7_DATA_IN      : in    std_logic_vector(11 downto 0); -- parallel data from ADC0 channel 7\r
+       -- ADC1 signals\r
+       ADC1_VALID_IN       : in    std_logic; -- 40M reconstructed clock is valid\r
+       ADC1_0_DATA_IN      : in    std_logic_vector(11 downto 0); -- parallel data from ADC1 channel 0\r
+       ADC1_1_DATA_IN      : in    std_logic_vector(11 downto 0); -- parallel data from ADC1 channel 1\r
+       ADC1_2_DATA_IN      : in    std_logic_vector(11 downto 0); -- parallel data from ADC1 channel 2\r
+       ADC1_3_DATA_IN      : in    std_logic_vector(11 downto 0); -- parallel data from ADC1 channel 3\r
+       ADC1_4_DATA_IN      : in    std_logic_vector(11 downto 0); -- parallel data from ADC1 channel 4\r
+       ADC1_5_DATA_IN      : in    std_logic_vector(11 downto 0); -- parallel data from ADC1 channel 5\r
+       ADC1_6_DATA_IN      : in    std_logic_vector(11 downto 0); -- parallel data from ADC1 channel 6\r
+       ADC1_7_DATA_IN      : in    std_logic_vector(11 downto 0); -- parallel data from ADC1 channel 7\r
+       -- Slow control registers\r
+       MAX_TRG_NUM_IN      : in    std_logic_vector(3 downto 0); -- maximum number of triggers / event\r
+       BIT_LOW_IN          : in    std_logic_vector(11 downto 0); -- "bit low" threshold\r
+       BIT_HIGH_IN         : in    std_logic_vector(11 downto 0); -- "bit high" threshold\r
+       FL_LOW_IN           : in    std_logic_vector(11 downto 0); -- "flatline low" threshold\r
+       FL_HIGH_IN          : in    std_logic_vector(11 downto 0); -- "flatline high" threshold\r
+       APV_ON_IN           : in    std_logic_vector(15 downto 0); -- APV on/off bits from slow control\r
+       -- 100MHZ synchronous interface\r
+       BUF_FULL_OUT        : out   std_logic;\r
+       BUF_ADDR_IN         : in    std_logic_vector(6 downto 0);\r
+       BUF_DONE_IN         : in    std_logic;\r
+       BUF_TICK_OUT        : out   std_logic_vector(15 downto 0);\r
+       BUF_START_OUT       : out   std_logic_vector(15 downto 0);\r
+       BUF_READY_OUT       : out   std_logic_vector(15 downto 0);\r
+       BUF_0_DATA_OUT      : out   std_logic_vector(37 downto 0);\r
+       BUF_1_DATA_OUT      : out   std_logic_vector(37 downto 0);\r
+       BUF_2_DATA_OUT      : out   std_logic_vector(37 downto 0);\r
+       BUF_3_DATA_OUT      : out   std_logic_vector(37 downto 0);\r
+       BUF_4_DATA_OUT      : out   std_logic_vector(37 downto 0);\r
+       BUF_5_DATA_OUT      : out   std_logic_vector(37 downto 0);\r
+       BUF_6_DATA_OUT      : out   std_logic_vector(37 downto 0);\r
+       BUF_7_DATA_OUT      : out   std_logic_vector(37 downto 0);\r
+       BUF_8_DATA_OUT      : out   std_logic_vector(37 downto 0);\r
+       BUF_9_DATA_OUT      : out   std_logic_vector(37 downto 0);\r
+       BUF_10_DATA_OUT     : out   std_logic_vector(37 downto 0);\r
+       BUF_11_DATA_OUT     : out   std_logic_vector(37 downto 0);\r
+       BUF_12_DATA_OUT     : out   std_logic_vector(37 downto 0);\r
+       BUF_13_DATA_OUT     : out   std_logic_vector(37 downto 0);\r
+       BUF_14_DATA_OUT     : out   std_logic_vector(37 downto 0);\r
+       BUF_15_DATA_OUT     : out   std_logic_vector(37 downto 0);\r
+       -- Debug signals\r
+       DEBUG_OUT           : out   std_logic_vector(63 downto 0)\r
+);\r
 end;\r
 \r
 architecture behavioral of raw_buf_stage_new is\r
 \r
-       -- Reset signals, combinatorial and registered\r
-       signal next_reset_all                   : std_logic; \r
-       signal reset_all                                : std_logic; -- 40MHz clock domain\r
-       signal next_reset                               : std_logic; \r
-       signal reset                                    : std_logic; -- 100MHz clock domain \r
-\r
-       -- APV locker signals (arrays / vectors)\r
-       type adc_data_t is array (0 to 15) of std_logic_vector(11 downto 0);\r
-       signal adc_data                         : adc_data_t;\r
-       type apv_status_t is array (0 to 15) of std_logic_vector(7 downto 0);\r
-       signal apv_status                       : apv_status_t;\r
-       type apv_frame_t is array (0 to 15) of std_logic_vector(11 downto 0);\r
-       signal apv_frame                        : apv_frame_t;\r
-       type apv_channel_t is array (0 to 15) of std_logic_vector(6 downto 0); \r
-       signal apv_channel                      : apv_channel_t;\r
-       type apv_data_t is array (0 to 15) of std_logic_vector(17 downto 0);\r
-       signal apv_data                         : apv_data_t;\r
-\r
-       signal apv_analog                       : std_logic_vector(15 downto 0);\r
-       signal apv_start                        : std_logic_vector(15 downto 0);\r
-       signal apv_last                         : std_logic_vector(15 downto 0);\r
-\r
-       -- Buffer signals (arrays / vectors)\r
-       type buf_data_t is array (0 to 15) of std_logic_vector(17 downto 0);\r
-       signal buf_data                         : buf_data_t;\r
-       type buf_status_t is array (0 to 15) of std_logic_vector(7 downto 0);\r
-       signal buf_status                       : buf_status_t;\r
-       type buf_frame_t is array (0 to 15) of std_logic_vector(11 downto 0);\r
-       signal buf_frame                        : buf_frame_t;\r
-       type buf_level_t is array (0 to 15) of std_logic_vector(7 downto 0);\r
-       signal buf_level                        : buf_level_t;  \r
-\r
-       signal buf_tick                         : std_logic_vector(15 downto 0);\r
-       signal buf_start                        : std_logic_vector(15 downto 0);\r
-       signal buf_ready                        : std_logic_vector(15 downto 0);\r
-       signal buf_full                         : std_logic_vector(15 downto 0);        \r
-\r
-       signal next_raw_buf_full        : std_logic;\r
-       signal raw_buf_full                     : std_logic;\r
-\r
-       -- Debug\r
-       signal debug                            : std_logic_vector(63 downto 0);\r
-       \r
+-- Reset signals, combinatorial and registered\r
+signal next_reset_all           : std_logic;\r
+signal reset_all                : std_logic; -- 40MHz clock domain\r
+signal next_reset               : std_logic;\r
+signal reset                    : std_logic; -- 100MHz clock domain\r
+\r
+-- APV locker signals (arrays / vectors)\r
+type adc_data_t is array (0 to 15) of std_logic_vector(11 downto 0);\r
+signal adc_data             : adc_data_t;\r
+type apv_status_t is array (0 to 15) of std_logic_vector(7 downto 0);\r
+signal apv_status           : apv_status_t;\r
+type apv_frame_t is array (0 to 15) of std_logic_vector(11 downto 0);\r
+signal apv_frame            : apv_frame_t;\r
+type apv_channel_t is array (0 to 15) of std_logic_vector(6 downto 0);\r
+signal apv_channel          : apv_channel_t;\r
+type apv_data_t is array (0 to 15) of std_logic_vector(17 downto 0);\r
+signal apv_data             : apv_data_t;\r
+\r
+signal apv_analog           : std_logic_vector(15 downto 0);\r
+signal apv_start            : std_logic_vector(15 downto 0);\r
+signal apv_last             : std_logic_vector(15 downto 0);\r
+\r
+-- Buffer signals (arrays / vectors)\r
+type buf_data_t is array (0 to 15) of std_logic_vector(17 downto 0);\r
+signal buf_data             : buf_data_t;\r
+type buf_status_t is array (0 to 15) of std_logic_vector(7 downto 0);\r
+signal buf_status           : buf_status_t;\r
+type buf_frame_t is array (0 to 15) of std_logic_vector(11 downto 0);\r
+signal buf_frame            : buf_frame_t;\r
+type buf_level_t is array (0 to 15) of std_logic_vector(7 downto 0);\r
+signal buf_level            : buf_level_t;\r
+\r
+signal buf_tick             : std_logic_vector(15 downto 0);\r
+signal buf_start            : std_logic_vector(15 downto 0);\r
+signal buf_ready            : std_logic_vector(15 downto 0);\r
+signal buf_full             : std_logic_vector(15 downto 0);\r
+\r
+signal next_raw_buf_full    : std_logic;\r
+signal raw_buf_full         : std_logic;\r
+\r
+-- Debug\r
+signal debug                : std_logic_vector(63 downto 0);\r
+\r
 begin\r
 \r
 ---------------------------------------------------------------------------\r
@@ -140,15 +141,16 @@ debug(3 downto 0)      <= apv_data(0)(17 downto 14);
 ---------------------------------------------------------------------------\r
 -- Reset handling\r
 ---------------------------------------------------------------------------\r
-next_reset_all <= (reset_in or apv_reset_in); -- 40MHz clock domain \r
+next_reset_all <= (reset_in or apv_reset_in); -- 40MHz clock domain\r
 next_reset     <= (reset_in or apv_reset_in); -- 100MHz clock domain\r
 \r
 THE_RESET_SYNC: state_sync\r
-port map( STATE_A_IN           => next_reset_all,\r
-                 CLK_B_IN                      => clk_apv_in,\r
-                 RESET_B_IN            => '0',\r
-                 STATE_B_OUT           => reset_all\r
-               );\r
+port map(\r
+       STATE_A_IN      => next_reset_all,\r
+       CLK_B_IN        => clk_apv_in,\r
+       RESET_B_IN      => '0',\r
+       STATE_B_OUT     => reset_all\r
+);\r
 \r
 \r
 ---------------------------------------------------------------------------\r
@@ -184,70 +186,72 @@ GEN_ADC0: for i in 0 to 7 generate
 \r
        -- APV locker, handles synchronisation and all the other stuff\r
        THE_APV_LOCKER: apv_locker\r
-       port map( CLK_APV_IN                    => clk_apv_in,\r
-                         RESET_IN                              => reset_all,\r
-                         SYNC_IN                               => apv_sync_in,\r
-                         ADC_RAW_IN                    => adc_data(i),\r
-                         ADC_VALID_IN                  => adc0_valid_in,\r
-                         APV_ON_IN                             => apv_on_in(i),\r
-                         BIT_LOW_IN                    => bit_low_in,\r
-                         BIT_HIGH_IN                   => bit_high_in,\r
-                         FL_LOW_IN                             => fl_low_in,\r
-                         FL_HIGH_IN                    => fl_high_in,\r
-                         STATUS_IGNORE_OUT             => apv_status(i)(1),\r
-                         STATUS_UNKNOWN_OUT    => apv_status(i)(6),\r
-                         STATUS_BADADC_OUT             => apv_status(i)(7),\r
-                         STATUS_LOCKED_OUT             => apv_status(i)(5),\r
-                         STATUS_LOST_OUT               => apv_status(i)(4),\r
-                         STATUS_NOSYNC_OUT             => apv_status(i)(3),\r
-                         STATUS_MISSING_OUT    => apv_status(i)(2),\r
-                         STATUS_TICKMARK_OUT   => apv_status(i)(0),\r
-                         FRAME_ROW_OUT                 => apv_frame(i)(7 downto 0),\r
-                         FRAME_ERROR_OUT               => apv_frame(i)(8), \r
-                         FRAME_OVF_OUT                 => apv_frame(i)(9),\r
-                         FRAME_UDF_OUT                 => apv_frame(i)(10),\r
-                         FRAME_FLAT_OUT                => apv_frame(i)(11),\r
-                         FRAME_CTR_OUT                 => apv_data(i)(17 downto 14),\r
-                         APV_CHANNEL_OUT               => apv_channel(i),\r
-                         APV_OVERFLOW_OUT              => apv_data(i)(13),\r
-                         APV_UNDERFLOW_OUT             => apv_data(i)(12),\r
-                         APV_RAW_OUT                   => apv_data(i)(11 downto 0),\r
-                         APV_ANALOG_OUT                => apv_analog(i),\r
-                         APV_START_OUT                 => apv_start(i),\r
-                         APV_LAST_OUT                  => apv_last(i),\r
-                         DEBUG_OUT                             => open\r
-                       );      \r
-       \r
+       port map(\r
+               CLK_APV_IN          => clk_apv_in,\r
+               RESET_IN            => reset_all,\r
+               SYNC_IN             => apv_sync_in,\r
+               ADC_RAW_IN          => adc_data(i),\r
+               ADC_VALID_IN        => adc0_valid_in,\r
+               APV_ON_IN           => apv_on_in(i),\r
+               BIT_LOW_IN          => bit_low_in,\r
+               BIT_HIGH_IN         => bit_high_in,\r
+               FL_LOW_IN           => fl_low_in,\r
+               FL_HIGH_IN          => fl_high_in,\r
+               STATUS_IGNORE_OUT   => apv_status(i)(1),\r
+               STATUS_UNKNOWN_OUT  => apv_status(i)(6),\r
+               STATUS_BADADC_OUT   => apv_status(i)(7),\r
+               STATUS_LOCKED_OUT   => apv_status(i)(5),\r
+               STATUS_LOST_OUT     => apv_status(i)(4),\r
+               STATUS_NOSYNC_OUT   => apv_status(i)(3),\r
+               STATUS_MISSING_OUT  => apv_status(i)(2),\r
+               STATUS_TICKMARK_OUT => apv_status(i)(0),\r
+               FRAME_ROW_OUT       => apv_frame(i)(7 downto 0),\r
+               FRAME_ERROR_OUT     => apv_frame(i)(8),\r
+               FRAME_OVF_OUT       => apv_frame(i)(9),\r
+               FRAME_UDF_OUT       => apv_frame(i)(10),\r
+               FRAME_FLAT_OUT      => apv_frame(i)(11),\r
+               FRAME_CTR_OUT       => apv_data(i)(17 downto 14),\r
+               APV_CHANNEL_OUT     => apv_channel(i),\r
+               APV_OVERFLOW_OUT    => apv_data(i)(13),\r
+               APV_UNDERFLOW_OUT   => apv_data(i)(12),\r
+               APV_RAW_OUT         => apv_data(i)(11 downto 0),\r
+               APV_ANALOG_OUT      => apv_analog(i),\r
+               APV_START_OUT       => apv_start(i),\r
+               APV_LAST_OUT        => apv_last(i),\r
+               DEBUG_OUT           => open\r
+       );\r
+\r
        -- raw buffer, stores frame data, all outputs are 100MHz synchronized\r
        THE_APV_RAW_BUFFER: apv_raw_buffer\r
-       port map( CLK_APV_IN            => clk_apv_in,\r
-                         RESET_IN                      => reset_all,\r
-                         FRM_REQD_IN           => apv_frame_reqd_in,\r
-                         MAX_TRG_NUM_IN        => max_trg_num_in,\r
-                         ADC_ANALOG_IN         => apv_analog(i),\r
-                         ADC_START_IN          => apv_start(i),\r
-                         ADC_LAST_IN           => apv_last(i),\r
-                         ADC_CHANNEL_IN        => apv_channel(i),\r
-                         ADC_RAW_IN            => apv_data(i),\r
-                         ADC_STATUS_IN         => apv_status(i),\r
-                         ADC_FRAME_IN          => apv_frame(i),\r
-                         BUF_CLK_IN            => clk_in,\r
-                         BUF_RESET_IN          => reset,\r
-                         BUF_START_OUT         => buf_start(i),\r
-                         BUF_READY_OUT         => buf_ready(i),\r
-                         BUF_ADDR_IN           => buf_addr_in,\r
-                         BUF_DONE_IN           => buf_done_in, \r
-                         BUF_DATA_OUT          => buf_data(i),\r
-                         BUF_STATUS_OUT        => buf_status(i),\r
-                         BUF_FRAME_OUT         => buf_frame(i),\r
-                         BUF_GOOD_OUT          => buf_level(i)(7),\r
-                         BUF_BROKEN_OUT        => buf_level(i)(6),\r
-                         BUF_IGNORE_OUT        => buf_level(i)(5),\r
-                         BUF_LEVEL_OUT         => buf_level(i)(4 downto 0),\r
-                         BUF_TICKMARK_OUT      => buf_tick(i),\r
-                         BUF_FULL_OUT          => buf_full(i),\r
-                         DEBUG_OUT                     => open\r
-                       );\r
+       port map(\r
+               CLK_APV_IN          => clk_apv_in,\r
+               RESET_IN            => reset_all,\r
+               FRM_REQD_IN         => apv_frame_reqd_in,\r
+               MAX_TRG_NUM_IN      => max_trg_num_in,\r
+               ADC_ANALOG_IN       => apv_analog(i),\r
+               ADC_START_IN        => apv_start(i),\r
+               ADC_LAST_IN         => apv_last(i),\r
+               ADC_CHANNEL_IN      => apv_channel(i),\r
+               ADC_RAW_IN          => apv_data(i),\r
+               ADC_STATUS_IN       => apv_status(i),\r
+               ADC_FRAME_IN        => apv_frame(i),\r
+               BUF_CLK_IN          => clk_in,\r
+               BUF_RESET_IN        => reset,\r
+               BUF_START_OUT       => buf_start(i),\r
+               BUF_READY_OUT       => buf_ready(i),\r
+               BUF_ADDR_IN         => buf_addr_in,\r
+               BUF_DONE_IN         => buf_done_in,\r
+               BUF_DATA_OUT        => buf_data(i),\r
+               BUF_STATUS_OUT      => buf_status(i),\r
+               BUF_FRAME_OUT       => buf_frame(i),\r
+               BUF_GOOD_OUT        => buf_level(i)(7),\r
+               BUF_BROKEN_OUT      => buf_level(i)(6),\r
+               BUF_IGNORE_OUT      => buf_level(i)(5),\r
+               BUF_LEVEL_OUT       => buf_level(i)(4 downto 0),\r
+               BUF_TICKMARK_OUT    => buf_tick(i),\r
+               BUF_FULL_OUT        => buf_full(i),\r
+               DEBUG_OUT           => open\r
+       );\r
 \r
 end generate GEN_ADC0;\r
 \r
@@ -270,70 +274,72 @@ GEN_ADC1: for i in 8 to 15 generate
 \r
        -- APV locker, handles synchronisation and all the other stuff\r
        THE_APV_LOCKER: apv_locker\r
-       port map( CLK_APV_IN                    => clk_apv_in,\r
-                         RESET_IN                              => reset_all,\r
-                         SYNC_IN                               => apv_sync_in,\r
-                         ADC_RAW_IN                    => adc_data(i),\r
-                         ADC_VALID_IN                  => adc1_valid_in,\r
-                         APV_ON_IN                             => apv_on_in(i),\r
-                         BIT_LOW_IN                    => bit_low_in,\r
-                         BIT_HIGH_IN                   => bit_high_in,\r
-                         FL_LOW_IN                             => fl_low_in,\r
-                         FL_HIGH_IN                    => fl_high_in,\r
-                         STATUS_IGNORE_OUT             => apv_status(i)(1),\r
-                         STATUS_UNKNOWN_OUT    => apv_status(i)(6),\r
-                         STATUS_BADADC_OUT             => apv_status(i)(7),\r
-                         STATUS_LOCKED_OUT             => apv_status(i)(5),\r
-                         STATUS_LOST_OUT               => apv_status(i)(4),\r
-                         STATUS_NOSYNC_OUT             => apv_status(i)(3),\r
-                         STATUS_MISSING_OUT    => apv_status(i)(2),\r
-                         STATUS_TICKMARK_OUT   => apv_status(i)(0),\r
-                         FRAME_ROW_OUT                 => apv_frame(i)(7 downto 0),\r
-                         FRAME_ERROR_OUT               => apv_frame(i)(8), \r
-                         FRAME_OVF_OUT                 => apv_frame(i)(9),\r
-                         FRAME_UDF_OUT                 => apv_frame(i)(10),\r
-                         FRAME_FLAT_OUT                => apv_frame(i)(11),\r
-                         FRAME_CTR_OUT                 => apv_data(i)(17 downto 14),\r
-                         APV_CHANNEL_OUT               => apv_channel(i),\r
-                         APV_OVERFLOW_OUT              => apv_data(i)(13),\r
-                         APV_UNDERFLOW_OUT             => apv_data(i)(12),\r
-                         APV_RAW_OUT                   => apv_data(i)(11 downto 0),\r
-                         APV_ANALOG_OUT                => apv_analog(i),\r
-                         APV_START_OUT                 => apv_start(i),\r
-                         APV_LAST_OUT                  => apv_last(i),\r
-                         DEBUG_OUT                             => open\r
-                       );      \r
-       \r
+       port map(\r
+               CLK_APV_IN          => clk_apv_in,\r
+               RESET_IN            => reset_all,\r
+               SYNC_IN             => apv_sync_in,\r
+               ADC_RAW_IN          => adc_data(i),\r
+               ADC_VALID_IN        => adc1_valid_in,\r
+               APV_ON_IN           => apv_on_in(i),\r
+               BIT_LOW_IN          => bit_low_in,\r
+               BIT_HIGH_IN         => bit_high_in,\r
+               FL_LOW_IN           => fl_low_in,\r
+               FL_HIGH_IN          => fl_high_in,\r
+               STATUS_IGNORE_OUT   => apv_status(i)(1),\r
+               STATUS_UNKNOWN_OUT  => apv_status(i)(6),\r
+               STATUS_BADADC_OUT   => apv_status(i)(7),\r
+               STATUS_LOCKED_OUT   => apv_status(i)(5),\r
+               STATUS_LOST_OUT     => apv_status(i)(4),\r
+               STATUS_NOSYNC_OUT   => apv_status(i)(3),\r
+               STATUS_MISSING_OUT  => apv_status(i)(2),\r
+               STATUS_TICKMARK_OUT => apv_status(i)(0),\r
+               FRAME_ROW_OUT       => apv_frame(i)(7 downto 0),\r
+               FRAME_ERROR_OUT     => apv_frame(i)(8),\r
+               FRAME_OVF_OUT       => apv_frame(i)(9),\r
+               FRAME_UDF_OUT       => apv_frame(i)(10),\r
+               FRAME_FLAT_OUT      => apv_frame(i)(11),\r
+               FRAME_CTR_OUT       => apv_data(i)(17 downto 14),\r
+               APV_CHANNEL_OUT     => apv_channel(i),\r
+               APV_OVERFLOW_OUT    => apv_data(i)(13),\r
+               APV_UNDERFLOW_OUT   => apv_data(i)(12),\r
+               APV_RAW_OUT         => apv_data(i)(11 downto 0),\r
+               APV_ANALOG_OUT      => apv_analog(i),\r
+               APV_START_OUT       => apv_start(i),\r
+               APV_LAST_OUT        => apv_last(i),\r
+               DEBUG_OUT           => open\r
+       );\r
+\r
        -- raw buffer, stores frame data, all outputs are 100MHz synchronized\r
        THE_APV_RAW_BUFFER: apv_raw_buffer\r
-       port map( CLK_APV_IN            => clk_apv_in,\r
-                         RESET_IN                      => reset_all,\r
-                         FRM_REQD_IN           => apv_frame_reqd_in,\r
-                         MAX_TRG_NUM_IN        => max_trg_num_in,\r
-                         ADC_ANALOG_IN         => apv_analog(i),\r
-                         ADC_START_IN          => apv_start(i),\r
-                         ADC_LAST_IN           => apv_last(i),\r
-                         ADC_CHANNEL_IN        => apv_channel(i),\r
-                         ADC_RAW_IN            => apv_data(i),\r
-                         ADC_STATUS_IN         => apv_status(i),\r
-                         ADC_FRAME_IN          => apv_frame(i),\r
-                         BUF_CLK_IN            => clk_in,\r
-                         BUF_RESET_IN          => reset,\r
-                         BUF_START_OUT         => buf_start(i),\r
-                         BUF_READY_OUT         => buf_ready(i),\r
-                         BUF_ADDR_IN           => buf_addr_in,\r
-                         BUF_DONE_IN           => buf_done_in, \r
-                         BUF_DATA_OUT          => buf_data(i),\r
-                         BUF_STATUS_OUT        => buf_status(i),\r
-                         BUF_FRAME_OUT         => buf_frame(i),\r
-                         BUF_GOOD_OUT          => buf_level(i)(7),\r
-                         BUF_BROKEN_OUT        => buf_level(i)(6),\r
-                         BUF_IGNORE_OUT        => buf_level(i)(5),\r
-                         BUF_LEVEL_OUT         => buf_level(i)(4 downto 0),\r
-                         BUF_TICKMARK_OUT      => buf_tick(i),\r
-                         BUF_FULL_OUT          => buf_full(i),\r
-                         DEBUG_OUT                     => open\r
-                       );\r
+       port map(\r
+               CLK_APV_IN          => clk_apv_in,\r
+               RESET_IN            => reset_all,\r
+               FRM_REQD_IN         => apv_frame_reqd_in,\r
+               MAX_TRG_NUM_IN      => max_trg_num_in,\r
+               ADC_ANALOG_IN       => apv_analog(i),\r
+               ADC_START_IN        => apv_start(i),\r
+               ADC_LAST_IN         => apv_last(i),\r
+               ADC_CHANNEL_IN      => apv_channel(i),\r
+               ADC_RAW_IN          => apv_data(i),\r
+               ADC_STATUS_IN       => apv_status(i),\r
+               ADC_FRAME_IN        => apv_frame(i),\r
+               BUF_CLK_IN          => clk_in,\r
+               BUF_RESET_IN        => reset,\r
+               BUF_START_OUT       => buf_start(i),\r
+               BUF_READY_OUT       => buf_ready(i),\r
+               BUF_ADDR_IN         => buf_addr_in,\r
+               BUF_DONE_IN         => buf_done_in,\r
+               BUF_DATA_OUT        => buf_data(i),\r
+               BUF_STATUS_OUT      => buf_status(i),\r
+               BUF_FRAME_OUT       => buf_frame(i),\r
+               BUF_GOOD_OUT        => buf_level(i)(7),\r
+               BUF_BROKEN_OUT      => buf_level(i)(6),\r
+               BUF_IGNORE_OUT      => buf_level(i)(5),\r
+               BUF_LEVEL_OUT       => buf_level(i)(4 downto 0),\r
+               BUF_TICKMARK_OUT    => buf_tick(i),\r
+               BUF_FULL_OUT        => buf_full(i),\r
+               DEBUG_OUT           => open\r
+       );\r
 \r
 end generate GEN_ADC1;\r
 \r
@@ -343,9 +349,9 @@ end generate GEN_ADC1;
 ---------------------------------------------------------------------------\r
 \r
 buf_full_out      <= raw_buf_full;\r
-buf_tick_out      <= buf_tick;         -- needed for TOCs\r
-buf_start_out     <= buf_start;                -- needed for TOCs\r
-buf_ready_out     <= buf_ready;                -- debug signal\r
+buf_tick_out      <= buf_tick;      -- needed for TOCs\r
+buf_start_out     <= buf_start;     -- needed for TOCs\r
+buf_ready_out     <= buf_ready;     -- debug signal\r
 \r
 -- Alias the outputs from generator\r
 buf_0_data_out(17 downto 0)   <= buf_data(0);\r
@@ -405,6 +411,6 @@ debug_out        <= debug;
 end behavioral;\r
 \r
 \r
-       \r
+\r
 \r
 \r
index bb7ed5c52a966053f74f4268a70488eee6166ace..e1d06f575701cb64a92d01b7adfa02b6675b3c9b 100755 (executable)
@@ -12,105 +12,108 @@ use work.adcmv3_components.all;
 -- (2) no more rst_lvl1_counter signal anymore in the CCR. to be replaced!\r
 \r
 entity real_trg_handler is\r
-       port( CLK_IN                            : in    std_logic; -- 100MHz master clock\r
-                 RESET_IN                              : in    std_logic; \r
-                 TIME_TRG_IN                   : in    std_logic_vector(3 downto 0); -- timing trigger inputs\r
-                 TRB_TRG_IN                    : in    std_logic_vector(3 downto 0); -- TRB trigger inputs\r
-                 APV_TRGDONE_IN                : in    std_logic; -- APV trigger statemachine finished (one pulse)\r
-                 TRG_3_TODO_IN                 : in    std_logic_vector(3 downto 0); -- APV triggers on trigger 3\r
-                 TRG_2_TODO_IN                 : in    std_logic_vector(3 downto 0); -- APV triggers on trigger 2\r
-                 TRG_1_TODO_IN                 : in    std_logic_vector(3 downto 0); -- APV triggers on trigger 1\r
-                 TRG_0_TODO_IN                 : in    std_logic_vector(3 downto 0); -- APV triggers on trigger 0\r
-                 TRG_SETUP_IN                  : in    std_logic_vector(7 downto 0); -- setup of external triggers\r
-                 TRG_FOUND_OUT                 : out   std_logic; -- single pulse for endpoint\r
-                 -- TRB LVL1 channel signals\r
-                 TRB_TTAG_IN                   : in    std_logic_vector(15 downto 0); -- LVL1 16bit trigger tag \r
-                 TRB_TRND_IN                   : in    std_logic_vector(7 downto 0); -- LVL1 8bit random number \r
-                 TRB_TTYPE_IN                  : in    std_logic_vector(3 downto 0); -- LVL1 trigger type\r
-                 TRB_TRGRCVD_IN                : in    std_logic; -- LVL1 trigger has been received on TRB\r
-                 TRB_MISSING_OUT               : out   std_logic; -- LVL1 trigger without timing trigger\r
-                 RST_LVL1_COUNTER_IN   : in    std_logic; -- reset LVL1 counter\r
-                 LVL1_COUNTER_OUT              : out   std_logic_vector(15 downto 0);\r
-                 BUSY_RELEASE_IN               : in    std_logic; -- common signal from busy calculator\r
-                 -- \r
-                 APV_TRGSEL_OUT                : out   std_logic_vector(3 downto 0); -- select one APV trigger state machine\r
-                 APV_TRGSTART_OUT              : out   std_logic; -- start an APV trigger state machine\r
-                 EDS_DATA_OUT                  : out   std_logic_vector(39 downto 0); -- EDS data\r
-                 EDS_WE_OUT                    : out   std_logic; -- EDS write enable (general interface)\r
-                 EDS_START_OUT                 : out   std_logic; -- separate increment signal for EDS buffer level\r
-                 EDS_READY_OUT                 : out   std_logic; -- APV trigger sequence done\r
-                 DBG_FRMCTR_OUT                : out   std_logic_vector(3 downto 0); -- framecounter itself\r
-                 BSM_OUT                               : out   std_logic_vector(7 downto 0);\r
-                 DEBUG_OUT                             : out   std_logic_vector(63 downto 0)\r
-               );\r
+port(\r
+       CLK_IN              : in    std_logic; -- 100MHz master clock\r
+       RESET_IN            : in    std_logic;\r
+       TIME_TRG_IN         : in    std_logic_vector(3 downto 0); -- timing trigger inputs\r
+       TRB_TRG_IN          : in    std_logic_vector(3 downto 0); -- TRB trigger inputs\r
+       APV_TRGDONE_IN      : in    std_logic; -- APV trigger statemachine finished (one pulse)\r
+       TRG_3_TODO_IN       : in    std_logic_vector(3 downto 0); -- APV triggers on trigger 3\r
+       TRG_2_TODO_IN       : in    std_logic_vector(3 downto 0); -- APV triggers on trigger 2\r
+       TRG_1_TODO_IN       : in    std_logic_vector(3 downto 0); -- APV triggers on trigger 1\r
+       TRG_0_TODO_IN       : in    std_logic_vector(3 downto 0); -- APV triggers on trigger 0\r
+       TRG_SETUP_IN        : in    std_logic_vector(7 downto 0); -- setup of external triggers\r
+       TRG_FOUND_OUT       : out   std_logic; -- single pulse for endpoint\r
+       SECTOR_IN           : in    std_logic_vector(2 downto 0); -- sector number\r
+       -- TRB LVL1 channel signals\r
+       TRB_TTAG_IN         : in    std_logic_vector(15 downto 0); -- LVL1 16bit trigger tag\r
+       TRB_TRND_IN         : in    std_logic_vector(7 downto 0); -- LVL1 8bit random number\r
+       TRB_TTYPE_IN        : in    std_logic_vector(3 downto 0); -- LVL1 4bit trigger type\r
+       TRB_TINFO_IN        : in    std_logic_vector(23 downto 0); -- LVL1 24bit trigger information\r
+       TRB_TRGRCVD_IN      : in    std_logic; -- LVL1 trigger has been received on TRB\r
+       TRB_MISSING_OUT     : out   std_logic; -- LVL1 trigger without timing trigger\r
+       LVL1_COUNTER_OUT    : out   std_logic_vector(15 downto 0);\r
+       LVL1_COUNTER_IN     : in    std_logic_vector(15 downto 0);\r
+       LVL1_LD_COUNTER_IN  : in    std_logic;\r
+       BUSY_RELEASE_IN     : in    std_logic; -- common signal from busy calculator\r
+       --\r
+       APV_TRGSEL_OUT      : out   std_logic_vector(3 downto 0); -- select one APV trigger state machine\r
+       APV_TRGSTART_OUT    : out   std_logic; -- start an APV trigger state machine\r
+       EDS_DATA_OUT        : out   std_logic_vector(39 downto 0); -- EDS data\r
+       EDS_WE_OUT          : out   std_logic; -- EDS write enable (general interface)\r
+       EDS_START_OUT       : out   std_logic; -- separate increment signal for EDS buffer level\r
+       EDS_READY_OUT       : out   std_logic; -- APV trigger sequence done\r
+       DBG_FRMCTR_OUT      : out   std_logic_vector(3 downto 0); -- framecounter itself\r
+       BSM_OUT             : out   std_logic_vector(7 downto 0);\r
+       DEBUG_OUT           : out   std_logic_vector(63 downto 0)\r
+);\r
 end;\r
 \r
 architecture behavioral of real_trg_handler is\r
 \r
-       -- state machine signals\r
-       type STATES is (SLEEP, STORE, START, COUNT, RELAX, CHECK, WAPV, WLVL1, TRBS, COMP, CTAG, STAG,\r
-                                       DTAG, WEDS, WDEL0, WDEL1, WBUSY, DONE, CNTEVT, BADTRG);\r
-       signal CURRENT_STATE, NEXT_STATE: STATES;\r
-\r
-       -- normal signals\r
-       signal trg_comb                         : std_logic_vector(3 downto 0); -- TRB or hardware inputs\r
-       signal trg_q                            : std_logic_vector(3 downto 0);\r
-       signal trg_qq                           : std_logic_vector(3 downto 0);\r
-       signal trg_qqq                          : std_logic_vector(3 downto 0);\r
-       signal trg_qqqq                         : std_logic_vector(3 downto 0);\r
-       signal trg_edge                         : std_logic_vector(3 downto 0); \r
-       signal decoded_trg                      : std_logic_vector(3 downto 0);\r
-       signal todo_start                       : std_logic_vector(3 downto 0);\r
-       signal trg_found                        : std_logic;\r
-       signal trg_pattern                      : std_logic_vector(3 downto 0);\r
-\r
-       signal evtctr                           : std_logic_vector(15 downto 0); -- event counter\r
-       signal ce_evtctr                        : std_logic;\r
-       signal ce_evtctr_x                      : std_logic;\r
-       signal frmctr                           : std_logic_vector(3 downto 0); -- frame counter\r
-       signal ce_frmctr                        : std_logic;\r
-       signal ce_frmctr_x                      : std_logic;\r
-       signal todo_ctr                         : std_logic_vector(3 downto 0);\r
-       signal todo_done_x                      : std_logic;\r
-       signal todo_done                        : std_logic;\r
-       signal apv_trgstart_x           : std_logic;\r
-       signal apv_trgstart                     : std_logic;\r
-       signal eds_data                         : std_logic_vector(39 downto 0);\r
-       signal eds_start                        : std_logic;\r
-       signal eds_start_x                      : std_logic;\r
-       signal eds_we                           : std_logic;\r
-       signal eds_we_x                         : std_logic;\r
-       signal eds_ready_x                      : std_logic;  \r
-       signal eds_ready                        : std_logic; -- end signal, release busy by sending TERM and clean up misc stuff\r
-       signal apv_trg_finished         : std_logic;\r
-       signal accept_x                         : std_logic; -- we can accept a trigger\r
-       signal accept                           : std_logic; \r
-       signal missed_trg_x                     : std_logic;\r
-       signal missed_trg                       : std_logic;\r
-       signal missing_trg                      : std_logic;\r
-       signal rst_status_x                     : std_logic;\r
-       signal rst_status                       : std_logic;\r
-\r
-       signal time_trg                         : std_logic_vector(3 downto 0);\r
-\r
-       -- Information to be collected for the EDS\r
-       signal trb_ttag_reg                     : std_logic_vector(15 downto 0); -- TRB LVL1 trigger tag (16bit)\r
-       signal trb_trnd_reg                     : std_logic_vector(7 downto 0);  -- TRB LVL1 random byte (8bit)\r
-       signal trb_ttype_reg            : std_logic_vector(3 downto 0);  -- TRB LVL1 trigger type (4bit) \r
-       signal trg_pattern_reg          : std_logic_vector(3 downto 0);  -- timing trigger input pattern (4bit)\r
-       signal trg_dectrg_reg           : std_logic_vector(3 downto 0);  -- priority encoded timing trigger (4bit)\r
-       signal trg_frmctr_reg           : std_logic_vector(3 downto 0);  -- frame counter start value (4bit)\r
-       signal trg_frmnum_reg           : std_logic_vector(3 downto 0);  -- number of frames in this event (4bit)\r
-\r
-       signal store_local_x            : std_logic;\r
-       signal store_local                      : std_logic;\r
-       signal store_remote_x           : std_logic;\r
-       signal store_remote                     : std_logic;\r
-\r
-       signal time_trg_on                      : std_logic_vector(3 downto 0);\r
-       signal time_trg_inv                     : std_logic_vector(3 downto 0);\r
-       \r
-       signal bsm_x                : std_logic_vector(7 downto 0);\r
+-- state machine signals\r
+type STATES is (SLEEP, STORE, START, COUNT, RELAX, CHECK, WAPV, WLVL1, TRBS,\r
+                               WEDS, WDEL0, WDEL1, WBUSY, DONE, CNTEVT, BADTRG, TTLTRG);\r
+signal CURRENT_STATE, NEXT_STATE: STATES;\r
+\r
+-- normal signals\r
+signal trg_comb                 : std_logic_vector(3 downto 0); -- TRB or hardware inputs\r
+signal trg_q                    : std_logic_vector(3 downto 0);\r
+signal trg_qq                   : std_logic_vector(3 downto 0);\r
+signal trg_qqq                  : std_logic_vector(3 downto 0);\r
+signal trg_qqqq                 : std_logic_vector(3 downto 0);\r
+signal trg_edge                 : std_logic_vector(3 downto 0);\r
+signal decoded_trg              : std_logic_vector(3 downto 0);\r
+signal todo_start               : std_logic_vector(3 downto 0);\r
+signal trg_found                : std_logic;\r
+\r
+signal evtctr                   : std_logic_vector(15 downto 0); -- event counter\r
+signal ce_evtctr                : std_logic;\r
+signal next_ce_evtctr           : std_logic;\r
+signal frmctr                   : std_logic_vector(3 downto 0); -- frame counter\r
+signal ce_frmctr                : std_logic;\r
+signal next_ce_frmctr           : std_logic;\r
+signal todo_ctr                 : std_logic_vector(3 downto 0);\r
+signal next_todo_done           : std_logic;\r
+signal todo_done                : std_logic;\r
+signal next_apv_trgstart        : std_logic;\r
+signal apv_trgstart             : std_logic;\r
+signal eds_data                 : std_logic_vector(39 downto 0);\r
+signal eds_start                : std_logic;\r
+signal next_eds_start           : std_logic;\r
+signal eds_we                   : std_logic;\r
+signal next_eds_we              : std_logic;\r
+signal next_eds_ready           : std_logic;\r
+signal eds_ready                : std_logic; -- end signal, release busy by sending TERM and clean up misc stuff\r
+signal apv_trg_finished         : std_logic;\r
+signal next_accept              : std_logic; -- we can accept a trigger\r
+signal accept                   : std_logic;\r
+signal next_missed_trg          : std_logic;\r
+signal missed_trg               : std_logic;\r
+signal missing_trg              : std_logic;\r
+signal next_rst_status          : std_logic;\r
+signal rst_status               : std_logic;\r
+\r
+signal time_trg                 : std_logic_vector(3 downto 0);\r
+\r
+-- Information to be collected for the EDS\r
+signal trg_dectrg_reg           : std_logic_vector(3 downto 0);  -- priority encoded timing trigger (4bit)\r
+signal trg_frmctr_reg           : std_logic_vector(3 downto 0);  -- frame counter start value (4bit)\r
+signal trg_frmnum_reg           : std_logic_vector(3 downto 0);  -- number of frames in this event (4bit)\r
+\r
+signal next_store_local         : std_logic;\r
+signal store_local              : std_logic;\r
+signal next_rst_local           : std_logic;\r
+signal rst_local                : std_logic;\r
+\r
+signal time_trg_on              : std_logic_vector(3 downto 0);\r
+signal time_trg_inv             : std_logic_vector(3 downto 0);\r
+\r
+signal big_event_comb           : std_logic;\r
+signal tag_sector_match_comb    : std_logic;\r
+signal suppress_data_comb       : std_logic;\r
+\r
+signal bsm_x                    : std_logic_vector(7 downto 0);\r
 \r
 begin\r
 \r
@@ -127,29 +130,33 @@ time_trg_inv(0) <= trg_setup_in(0);
 ------------------------------------------------------------\r
 -- Synchronize the external trigger inputs\r
 THE_TIME_TRG_3_SYNC: state_sync\r
-port map( STATE_A_IN           => time_trg_in(3),\r
-                 CLK_B_IN                      => clk_in,\r
-                 RESET_B_IN            => reset_in,\r
-                 STATE_B_OUT           => time_trg(3)\r
-               );\r
+port map(\r
+       STATE_A_IN      => time_trg_in(3),\r
+       CLK_B_IN        => clk_in,\r
+       RESET_B_IN      => reset_in,\r
+       STATE_B_OUT     => time_trg(3)\r
+);\r
 THE_TIME_TRG_2_SYNC: state_sync\r
-port map( STATE_A_IN           => time_trg_in(2),\r
-                 CLK_B_IN                      => clk_in,\r
-                 RESET_B_IN            => reset_in,\r
-                 STATE_B_OUT           => time_trg(2)\r
-               );\r
+port map(\r
+       STATE_A_IN      => time_trg_in(2),\r
+       CLK_B_IN        => clk_in,\r
+       RESET_B_IN      => reset_in,\r
+       STATE_B_OUT     => time_trg(2)\r
+);\r
 THE_TIME_TRG_1_SYNC: state_sync\r
-port map( STATE_A_IN           => time_trg_in(1),\r
-                 CLK_B_IN                      => clk_in,\r
-                 RESET_B_IN            => reset_in,\r
-                 STATE_B_OUT           => time_trg(1)\r
-               );\r
+port map(\r
+       STATE_A_IN      => time_trg_in(1),\r
+       CLK_B_IN        => clk_in,\r
+       RESET_B_IN      => reset_in,\r
+       STATE_B_OUT     => time_trg(1)\r
+);\r
 THE_TIME_TRG_0_SYNC: state_sync\r
-port map( STATE_A_IN           => time_trg_in(0),\r
-                 CLK_B_IN                      => clk_in,\r
-                 RESET_B_IN            => reset_in,\r
-                 STATE_B_OUT           => time_trg(0)\r
-               );\r
+port map(\r
+       STATE_A_IN      => time_trg_in(0),\r
+       CLK_B_IN        => clk_in,\r
+       RESET_B_IN      => reset_in,\r
+       STATE_B_OUT     => time_trg(0)\r
+);\r
 ------------------------------------------------------------\r
 \r
 -- For all four possible hardware triggers we combine hardware and TRB inputs\r
@@ -196,9 +203,9 @@ begin
        end if;\r
 end process THE_RISING_EDGES_PROC;\r
 \r
--- Now we are almost done. \r
+-- Now we are almost done.\r
 -- The detected edges are priorized.\r
-THE_TRG_PRIORITY_PROC: process( clk_in ) \r
+THE_TRG_PRIORITY_PROC: process( clk_in )\r
 begin\r
        if( rising_edge(clk_in) ) then\r
                if( reset_in = '1' ) then\r
@@ -223,6 +230,7 @@ begin
                                todo_start  <= trg_0_todo_in;\r
                                trg_found   <= '1';\r
                        else\r
+                               -- case of "timingtriggerless trigger"?\r
                                decoded_trg <= "0000";\r
                                todo_start  <= "0000";\r
                                trg_found   <= '0';\r
@@ -237,13 +245,11 @@ end process THE_TRG_PRIORITY_PROC;
 THE_LOCALSTORE_PROC: process( clk_in )\r
 begin\r
        if( rising_edge(clk_in) ) then\r
-               if( (reset_in = '1') or (eds_we = '1') ) then\r
-                       trg_pattern_reg <= (others => '0');\r
+               if( (reset_in = '1') or (rst_local = '1') ) then\r
                        trg_frmctr_reg  <= (others => '0');\r
                        trg_frmnum_reg  <= (others => '0');\r
                        trg_dectrg_reg  <= (others => '0');\r
                elsif( (accept = '1') and (trg_found = '1') ) then -- the clock cycle before local_store pulse\r
-                       trg_pattern_reg <= trg_pattern; -- BUGBUGBUG\r
                        trg_frmctr_reg  <= frmctr;\r
                        trg_frmnum_reg  <= todo_start;\r
                        trg_dectrg_reg  <= decoded_trg;\r
@@ -258,29 +264,14 @@ begin
                if   ( reset_in = '1' ) then\r
                        todo_ctr  <= (others => '0');\r
                elsif( store_local = '1' ) then\r
-                       todo_ctr <= trg_frmnum_reg; --todo_start;\r
+                       todo_ctr <= trg_frmnum_reg;\r
                elsif( ce_frmctr = '1' ) then\r
                        todo_ctr <= todo_ctr - 1;\r
                end if;\r
        end if;\r
 end process THE_TODO_COUNTER_PROC;\r
-todo_done_x <= '1' when (todo_ctr = x"0") else '0';\r
+next_todo_done <= '1' when (todo_ctr = x"0") else '0';\r
 \r
--- We need to store some information for the EDS... from TRBnet LVL1 trigger endpoint\r
-THE_REMOTESTORE_PROC: process( clk_in )\r
-begin\r
-       if( rising_edge(clk_in) ) then\r
-               if( reset_in = '1' ) then\r
-                       trb_ttag_reg  <= (others => '0');\r
-                       trb_trnd_reg  <= (others => '0');\r
-                       trb_ttype_reg <= (others => '0'); \r
-               elsif( store_remote = '1' ) then\r
-                       trb_ttag_reg  <= trb_ttag_in;\r
-                       trb_trnd_reg  <= trb_trnd_in;\r
-                       trb_ttype_reg <= trb_ttype_in;\r
-               end if;\r
-       end if;\r
-end process THE_REMOTESTORE_PROC;\r
 \r
 -------------------------------------------------\r
 -------------------------------------------------\r
@@ -290,11 +281,9 @@ THE_TRG_SYNC_PROC: process( clk_in )
 begin\r
        if( rising_edge(clk_in) ) then\r
                if( reset_in = '1' ) then\r
-                       trg_pattern       <= (others => '0');\r
                        todo_done         <= '0';\r
                else\r
-                       trg_pattern       <= trg_edge;\r
-                       todo_done         <= todo_done_x;\r
+                       todo_done         <= next_todo_done;\r
                end if;\r
        end if;\r
 end process THE_TRG_SYNC_PROC;\r
@@ -316,7 +305,7 @@ end process THE_TRGDONE_PROC;
 \r
 -- A statemachine handles all actions for filling out the trigger information sheet\r
 -- state registers\r
-STATE_MEM: process( clk_in ) \r
+STATE_MEM: process( clk_in )\r
 begin\r
        if( rising_edge(clk_in) ) then\r
                if( reset_in = '1' ) then\r
@@ -326,115 +315,107 @@ begin
                        eds_ready      <= '0';\r
                        eds_we         <= '0';\r
                        eds_start      <= '0';\r
+                       rst_local      <= '0';\r
                        store_local    <= '0';\r
-                       store_remote   <= '0';\r
                        apv_trgstart   <= '0';\r
                        accept         <= '1';\r
                        missed_trg     <= '0';\r
                        rst_status     <= '0';\r
                else\r
                        CURRENT_STATE  <= NEXT_STATE;\r
-                       ce_evtctr      <= ce_evtctr_x;\r
-                       ce_frmctr      <= ce_frmctr_x;\r
-                       eds_ready      <= eds_ready_x;\r
-                       eds_we         <= eds_we_x;\r
-                       eds_start      <= eds_start_x;\r
-                       store_local    <= store_local_x;\r
-                       store_remote   <= store_remote_x;\r
-                       apv_trgstart   <= apv_trgstart_x;\r
-                       accept         <= accept_x;\r
-                       missed_trg     <= missed_trg_x;\r
-                       rst_status     <= rst_status_x;\r
+                       ce_evtctr      <= next_ce_evtctr;\r
+                       ce_frmctr      <= next_ce_frmctr;\r
+                       eds_ready      <= next_eds_ready;\r
+                       eds_we         <= next_eds_we;\r
+                       eds_start      <= next_eds_start;\r
+                       rst_local      <= next_rst_local;\r
+                       store_local    <= next_store_local;\r
+                       apv_trgstart   <= next_apv_trgstart;\r
+                       accept         <= next_accept;\r
+                       missed_trg     <= next_missed_trg;\r
+                       rst_status     <= next_rst_status;\r
                end if;\r
        end if;\r
 end process STATE_MEM;\r
 \r
 -- state transitions\r
-STATE_TRANSFORM: process( CURRENT_STATE, trg_found, todo_done, trb_trgrcvd_in, apv_trg_finished, busy_release_in, missing_trg )\r
+STATE_TRANSFORM: process( CURRENT_STATE, trg_found, todo_done, trb_trgrcvd_in, apv_trg_finished, \r
+                                                 busy_release_in, trb_ttype_in(3), trb_tinfo_in(7) )\r
 begin\r
-       NEXT_STATE     <= SLEEP; -- avoid latches\r
-       ce_evtctr_x    <= '0'; \r
-       ce_frmctr_x    <= '0';\r
-       eds_ready_x    <= '0';\r
-       eds_we_x       <= '0';\r
-       eds_start_x    <= '0';\r
-       store_local_x  <= '0';\r
-       store_remote_x <= '0';\r
-       apv_trgstart_x <= '0';\r
-       accept_x       <= '0';\r
-       missed_trg_x   <= '0';\r
-       rst_status_x   <= '0';\r
+       NEXT_STATE        <= SLEEP; -- avoid latches\r
+       next_ce_evtctr    <= '0';\r
+       next_ce_frmctr    <= '0';\r
+       next_eds_ready    <= '0';\r
+       next_eds_we       <= '0';\r
+       next_eds_start    <= '0';\r
+       next_rst_local    <= '0';\r
+       next_store_local  <= '0';\r
+       next_apv_trgstart <= '0';\r
+       next_accept       <= '0';\r
+       next_missed_trg   <= '0';\r
+       next_rst_status   <= '0';\r
        case CURRENT_STATE is\r
                -- not good. if no timing trigger was received but a trb trigger arrives, we must do something!\r
-               when SLEEP      =>      if   ( trg_found = '1' ) then\r
+               when SLEEP  =>  if   ( trg_found = '1' ) then\r
                                                        -- normal way: timing trigger found\r
-                                                       NEXT_STATE     <= STORE;\r
-                                                       store_local_x  <= '1';\r
-                                                       eds_start_x    <= '1';\r
-                                               elsif( (trg_found = '0') and (trb_trgrcvd_in = '1') ) then\r
-                                                       -- bad way: missing timing trigger\r
-                                                       NEXT_STATE     <= BADTRG;\r
-                                                       missed_trg_x   <= '1';\r
+                                                       NEXT_STATE        <= STORE;\r
+                                                       next_store_local  <= '1';\r
+                                                       next_eds_start    <= '1';\r
+                                               elsif( (trg_found = '0') and (trb_trgrcvd_in = '1') and (trb_ttype_in(3) = '1') and (trb_tinfo_in(7) = '1') ) then\r
+                                                       NEXT_STATE        <= TTLTRG;\r
+                                               elsif( (trg_found = '0') and (trb_trgrcvd_in = '1') and ((trb_ttype_in(3) = '0') or (trb_tinfo_in(7) = '0')) ) then\r
+                                                       NEXT_STATE        <= BADTRG;\r
+                                                       next_missed_trg   <= '1';\r
                                                else\r
-                                                       NEXT_STATE     <= SLEEP;\r
-                                                       accept_x       <= '1';\r
+                                                       NEXT_STATE        <= SLEEP;\r
+                                                       next_accept       <= '1';\r
                                                end if;\r
-               when BADTRG     =>      NEXT_STATE     <= TRBS;\r
-                                               store_remote_x <= '1';\r
-               when STORE      =>      NEXT_STATE     <= START;\r
-                                               apv_trgstart_x <= '1';\r
-               when START      =>      NEXT_STATE <= CHECK;\r
-               when CHECK      =>      if( todo_done = '1' ) then\r
+               when TTLTRG     =>      NEXT_STATE        <= TRBS;\r
+               when BADTRG =>  NEXT_STATE        <= TRBS;\r
+               when STORE  =>  NEXT_STATE        <= START;\r
+                                               next_apv_trgstart <= '1';\r
+               when START  =>  NEXT_STATE <= CHECK;\r
+               when CHECK  =>  if( todo_done = '1' ) then\r
                                                        NEXT_STATE <= WAPV;\r
                                                else\r
-                                                       NEXT_STATE  <= COUNT;\r
-                                                       ce_frmctr_x <= '1';\r
+                                                       NEXT_STATE     <= COUNT;\r
+                                                       next_ce_frmctr <= '1';\r
                                                end if;\r
-               when COUNT      =>      NEXT_STATE <= RELAX;\r
-               when RELAX      =>      NEXT_STATE <= CHECK;\r
-               when WAPV       =>      if( apv_trg_finished = '1' ) then\r
+               when COUNT  =>  NEXT_STATE <= RELAX;\r
+               when RELAX  =>  NEXT_STATE <= CHECK;\r
+               when WAPV   =>  if( apv_trg_finished = '1' ) then\r
                                                        NEXT_STATE <= WLVL1;\r
                                                else\r
                                                        NEXT_STATE <= WAPV;\r
                                                end if;\r
-               when WLVL1      =>      if( trb_trgrcvd_in = '1' ) then\r
-                                                       NEXT_STATE     <= TRBS;\r
-                                                       store_remote_x <= '1';\r
+               when WLVL1  =>  if( trb_trgrcvd_in = '1' ) then\r
+                                                       NEXT_STATE        <= TRBS;\r
                                                else\r
                                                        NEXT_STATE <= WLVL1;\r
                                                end if;\r
-               when TRBS       =>      NEXT_STATE  <= CTAG;\r
-               when CTAG       =>      NEXT_STATE  <= STAG;\r
-               when STAG       =>      NEXT_STATE  <= DTAG;\r
-               when DTAG       =>      if( missing_trg = '0' ) then\r
-                                                       -- everything is fine\r
-                                                       NEXT_STATE  <= WEDS;\r
-                                                       eds_we_x    <= '1';\r
-                                               else\r
-                                                       -- we missed a timing trigger, so no EDS was created\r
-                                                       NEXT_STATE  <= CNTEVT;\r
-                                                       ce_evtctr_x <= '1';\r
-                                               end if;\r
-               when WEDS       =>      NEXT_STATE  <= CNTEVT;\r
-                                               ce_evtctr_x <= '1';\r
-               when CNTEVT     =>      NEXT_STATE      <= WDEL0;\r
-               when WDEL0      =>      NEXT_STATE  <= WDEL1;\r
-               when WDEL1      =>      NEXT_STATE  <= WBUSY;\r
-               when WBUSY      =>      if( busy_release_in = '1' ) then\r
-                                                       NEXT_STATE  <= DONE;\r
-                                                       eds_ready_x <= '1';\r
+               when TRBS   =>  NEXT_STATE     <= WEDS;\r
+                                               next_eds_we    <= '1';\r
+                                               next_rst_local <= '1';\r
+               when WEDS   =>  NEXT_STATE     <= CNTEVT;\r
+                                               next_ce_evtctr <= '1';\r
+               when CNTEVT =>  NEXT_STATE  <= WDEL0;\r
+               when WDEL0  =>  NEXT_STATE  <= WDEL1;\r
+               when WDEL1  =>  NEXT_STATE  <= WBUSY;\r
+               when WBUSY  =>  if( busy_release_in = '1' ) then\r
+                                                       NEXT_STATE     <= DONE;\r
+                                                       next_eds_ready <= '1';\r
                                                else\r
                                                        NEXT_STATE <= WBUSY;\r
                                                end if;\r
-               when DONE       =>      if( trb_trgrcvd_in = '0' ) then -- mind the state synchronizer delay!!!\r
-                                                       NEXT_STATE   <= SLEEP;\r
-                                                       accept_x     <= '1';\r
-                                                       rst_status_x <= '1';\r
+               when DONE   =>  if( trb_trgrcvd_in = '0' ) then -- mind the state synchronizer delay!!!\r
+                                                       NEXT_STATE      <= SLEEP;\r
+                                                       next_accept     <= '1';\r
+                                                       next_rst_status <= '1';\r
                                                else\r
                                                        NEXT_STATE   <= DONE;\r
                                                end if;\r
-               when others     =>      NEXT_STATE   <= SLEEP;\r
-                                               accept_x     <= '1';\r
+               when others =>  NEXT_STATE      <= SLEEP;\r
+                                               next_accept     <= '1';\r
        end case;\r
 end process STATE_TRANSFORM;\r
 \r
@@ -442,26 +423,24 @@ end process STATE_TRANSFORM;
 STATE_DECODE: process( CURRENT_STATE )\r
 begin\r
        case CURRENT_STATE is\r
-               when SLEEP      =>      bsm_x <= x"00";\r
-               when STORE      =>      bsm_x <= x"01"; \r
-               when START      =>      bsm_x <= x"02";\r
-               when CHECK      =>      bsm_x <= x"03";\r
-               when COUNT      =>      bsm_x <= x"04";\r
-               when RELAX      =>      bsm_x <= x"14";\r
-               when WAPV       =>      bsm_x <= x"05";\r
-               when WLVL1      =>      bsm_x <= x"06";\r
-               when TRBS       =>      bsm_x <= x"07";\r
-               when CTAG       =>      bsm_x <= x"08";\r
-               when STAG       =>      bsm_x <= x"09";\r
-               when DTAG       =>      bsm_x <= x"0a";\r
-               when WEDS       =>      bsm_x <= x"0b";\r
-               when WDEL0      =>      bsm_x <= x"0c";\r
-               when WDEL1      =>      bsm_x <= x"0d";\r
-               when WBUSY      =>      bsm_x <= x"0e";\r
-               when DONE       =>      bsm_x <= x"0f";\r
-               when CNTEVT     =>      bsm_x <= x"10";\r
-               when BADTRG     =>      bsm_x <= x"11";\r
-               when others     =>      bsm_x <= x"ff";\r
+               when SLEEP  =>  bsm_x <= x"00";\r
+               when STORE  =>  bsm_x <= x"01";\r
+               when START  =>  bsm_x <= x"02";\r
+               when CHECK  =>  bsm_x <= x"03";\r
+               when COUNT  =>  bsm_x <= x"04";\r
+               when RELAX  =>  bsm_x <= x"14";\r
+               when WAPV   =>  bsm_x <= x"05";\r
+               when WLVL1  =>  bsm_x <= x"06";\r
+               when TRBS   =>  bsm_x <= x"07";\r
+               when WEDS   =>  bsm_x <= x"0b";\r
+               when WDEL0  =>  bsm_x <= x"0c";\r
+               when WDEL1  =>  bsm_x <= x"0d";\r
+               when WBUSY  =>  bsm_x <= x"0e";\r
+               when DONE   =>  bsm_x <= x"0f";\r
+               when CNTEVT =>  bsm_x <= x"10";\r
+               when BADTRG =>  bsm_x <= x"11";\r
+               when TTLTRG     =>  bsm_x <= x"12";\r
+               when others =>  bsm_x <= x"ff";\r
        end case;\r
 end process STATE_DECODE;\r
 \r
@@ -470,8 +449,10 @@ end process STATE_DECODE;
 THE_EVENT_COUNTER_PROC: process( clk_in )\r
 begin\r
        if( rising_edge(clk_in) ) then\r
-               if( (reset_in = '1') or (rst_lvl1_counter_in = '1') ) then\r
+               if   ( reset_in = '1' ) then\r
                        evtctr <= (others => '0');\r
+               elsif( lvl1_ld_counter_in = '1' ) then\r
+                       evtctr <= lvl1_counter_in; -- update with value from TRBnet counter\r
                elsif( ce_evtctr = '1' ) then\r
                        evtctr <= evtctr + 1;\r
                end if;\r
@@ -496,19 +477,40 @@ begin
        if( rising_edge(clk_in) ) then\r
                if( (reset_in = '1') or (rst_status = '1') ) then\r
                        missing_trg <= '0';\r
-               elsif( missed_trg = '1' ) then\r
-                       missing_trg <= '1';\r
-               end if;\r
+               elsif( missed_trg = '1' ) then\r
+                       missing_trg <= '1';\r
+               end if;\r
        end if;\r
 end process THE_MISSED_TRG_REG;\r
 \r
+-- Now for something completely different: as we have two sectors connected\r
+-- to one GbE hub in the final setup, we must do a trick to stay below 64kB \r
+-- subevent size.\r
+-- So in all cases where 128 channels per event are requested, only those ADCM\r
+-- will produce data where the last bit of sector number and trigger number matches.\r
+-- I.e.: odd sectors fire on odd trigger numbers, even sectors on even trigger numbers.\r
+\r
+-- potentially dangerous (aka big) event\r
+big_event_comb <= '1' when (trb_tinfo_in(10 downto 8) = b"000") or -- RAW128\r
+                                                  (trb_tinfo_in(10 downto 8) = b"001") or -- PED128\r
+                                                  (trb_tinfo_in(10 downto 8) = b"010") or -- PED128THR\r
+                                                  (trb_tinfo_in(10 downto 8) = b"100")    -- NC64PED64\r
+                                         else '0';\r
+\r
+-- sector number matches trigger number\r
+tag_sector_match_comb <= '1' when ( sector_in(0) = trb_ttag_in(0) ) else '0';\r
+\r
+-- when to drop data\r
+suppress_data_comb <= (big_event_comb and not tag_sector_match_comb) or trb_tinfo_in(0);\r
+\r
 -- EDS bits:\r
 eds_data(39 downto 36) <= trg_frmctr_reg;\r
 eds_data(35 downto 32) <= trg_frmnum_reg;\r
-eds_data(31 downto 16) <= trb_ttag_reg;\r
-eds_data(15 downto 8)  <= trb_trnd_reg;\r
-eds_data(7 downto 4)   <= trb_ttype_reg;\r
-eds_data(3 downto 0)   <= trg_pattern_reg;\r
+eds_data(31 downto 16) <= trb_ttag_in;\r
+eds_data(15 downto 8)  <= trb_trnd_in;\r
+eds_data(7 downto 4)   <= trb_ttype_in;\r
+eds_data(3)            <= suppress_data_comb; --trb_tinfo_in(0); -- suppress output bit\r
+eds_data(2 downto 0)   <= trb_tinfo_in(10 downto 8); -- RICH data configuration bits\r
 \r
 -- output signals\r
 apv_trgstart_out  <= apv_trgstart;\r
@@ -527,7 +529,7 @@ bsm_out           <= bsm_x;
 \r
 debug_out(63 downto 32) <= (others => '0');\r
 debug_out(31 downto 24) <= evtctr(7 downto 0);\r
-debug_out(23 downto 16) <= trb_ttag_reg(7 downto 0);\r
+debug_out(23 downto 16) <= trb_ttag_in(7 downto 0);\r
 debug_out(15)           <= ce_evtctr;\r
 debug_out(14)           <= '0';\r
 debug_out(13)           <= missing_trg;\r
index bfb70590790b9ade5dbcf8de426a320481cb9615..fb2b890bab156f4a6686f3a02f8e01777240b779 100644 (file)
@@ -1,29 +1,30 @@
-library ieee; \r
-use ieee.std_logic_1164.all; \r
-use ieee.std_logic_arith.all; \r
+library ieee;\r
+use ieee.std_logic_1164.all;\r
+use ieee.std_logic_arith.all;\r
 use ieee.std_logic_unsigned.all;\r
 \r
 library work;\r
 use work.adcmv3_components.all;\r
 \r
 entity reboot_handler is\r
-       port( RESET_IN                  : in    std_logic;\r
-                 CLK_IN                        : in    std_logic;\r
-                 START_IN                      : in    std_logic;\r
-                 REBOOT_OUT            : out   std_logic;\r
-                 DEBUG_OUT                     : out   std_logic_vector(15 downto 0)\r
-               );\r
+port(\r
+       RESET_IN        : in    std_logic;\r
+       CLK_IN          : in    std_logic;\r
+       START_IN        : in    std_logic;\r
+       REBOOT_OUT      : out   std_logic;\r
+       DEBUG_OUT       : out   std_logic_vector(15 downto 0)\r
+);\r
 end;\r
 \r
 architecture behavioral of reboot_handler is\r
 \r
-       -- normal signals                          \r
-       signal reboot_counter   : std_logic_vector(15 downto 0);\r
-       signal reboot_ce                : std_logic;\r
-       signal reboot_x                 : std_logic;\r
-       signal reboot                   : std_logic;\r
-       \r
-begin                                          \r
+-- normal signals\r
+signal reboot_counter   : std_logic_vector(15 downto 0);\r
+signal reboot_ce        : std_logic;\r
+signal reboot_x         : std_logic;\r
+signal reboot           : std_logic;\r
+\r
+begin\r
 \r
 -- Latch the start pulse\r
 THE_START_PULSE: process( clk_in )\r
@@ -56,6 +57,6 @@ reboot_x <= reboot_counter(15) and reboot_counter(14) and reboot_counter(13);
 -- output signals\r
 reboot_out <= reboot;\r
 \r
-debug_out(15 downto 0)  <= reboot_counter;  \r
+debug_out(15 downto 0)  <= reboot_counter;\r
 \r
-end behavioral;                                \r
+end behavioral;\r
index 3cf165de77324645befe4d9e28111567baa8d6bc..3d54ef4708d7394fe3218a69bd3003303f3278bf 100755 (executable)
@@ -6,7 +6,7 @@ use ieee.std_logic_unsigned.all;
 library work;\r
 use work.adcmv3_components.all;\r
 \r
--- This module takes ROW and ERROR information from all sixteen raw buffers, and \r
+-- This module takes ROW and ERROR information from all sixteen raw buffers, and\r
 -- checks if the APVs with "good data" buffers are OK.\r
 -- APV frame errors are sensed, as well as APV row errors.\r
 -- The row error recognition is based somehow on the old RICH RC logic, as it takes\r
@@ -14,61 +14,62 @@ use work.adcmv3_components.all;
 -- this reference row.\r
 \r
 entity ref_row_sel is\r
-       port( CLK_IN                            : in    std_logic;\r
-                 READY_IN                              : in    std_logic_vector(15 downto 0); -- buffer ready signals (data or timeout)\r
-                 GOODDATA_IN                   : in    std_logic_vector(15 downto 0); -- buffer data good signals\r
-                 FRAME_0_IN                    : in    std_logic_vector(11 downto 0);\r
-                 FRAME_1_IN                    : in    std_logic_vector(11 downto 0);\r
-                 FRAME_2_IN                    : in    std_logic_vector(11 downto 0);\r
-                 FRAME_3_IN                    : in    std_logic_vector(11 downto 0);\r
-                 FRAME_4_IN                    : in    std_logic_vector(11 downto 0);\r
-                 FRAME_5_IN                    : in    std_logic_vector(11 downto 0);\r
-                 FRAME_6_IN                    : in    std_logic_vector(11 downto 0);\r
-                 FRAME_7_IN                    : in    std_logic_vector(11 downto 0);\r
-                 FRAME_8_IN                    : in    std_logic_vector(11 downto 0);\r
-                 FRAME_9_IN                    : in    std_logic_vector(11 downto 0);\r
-                 FRAME_10_IN                   : in    std_logic_vector(11 downto 0);\r
-                 FRAME_11_IN                   : in    std_logic_vector(11 downto 0);\r
-                 FRAME_12_IN                   : in    std_logic_vector(11 downto 0);\r
-                 FRAME_13_IN                   : in    std_logic_vector(11 downto 0);\r
-                 FRAME_14_IN                   : in    std_logic_vector(11 downto 0);\r
-                 FRAME_15_IN                   : in    std_logic_vector(11 downto 0);\r
-                 READY_OUT                             : out   std_logic; -- all buffers reported being ready for data transport\r
-                 VALID_BUFS_OUT                : out   std_logic; -- at least one APV raw buffer has data to fetch \r
-                 ROW_ERROR_OUT                 : out   std_logic; -- at least one row number is wrong\r
-                 APV_ERROR_OUT                 : out   std_logic; -- at least one APV sent ERROR bit\r
-                 APV_ERROR_BITS_OUT    : out   std_logic_vector(15 downto 0);\r
-                 REF_ROW_OUT                   : out   std_logic_vector(7 downto 0); -- selected reference row\r
-                 DBG_OUT                               : out   std_logic_vector(15 downto 0)\r
-               );\r
+port(\r
+       CLK_IN              : in    std_logic;\r
+       READY_IN            : in    std_logic_vector(15 downto 0); -- buffer ready signals (data or timeout)\r
+       GOODDATA_IN         : in    std_logic_vector(15 downto 0); -- buffer data good signals\r
+       FRAME_0_IN          : in    std_logic_vector(11 downto 0);\r
+       FRAME_1_IN          : in    std_logic_vector(11 downto 0);\r
+       FRAME_2_IN          : in    std_logic_vector(11 downto 0);\r
+       FRAME_3_IN          : in    std_logic_vector(11 downto 0);\r
+       FRAME_4_IN          : in    std_logic_vector(11 downto 0);\r
+       FRAME_5_IN          : in    std_logic_vector(11 downto 0);\r
+       FRAME_6_IN          : in    std_logic_vector(11 downto 0);\r
+       FRAME_7_IN          : in    std_logic_vector(11 downto 0);\r
+       FRAME_8_IN          : in    std_logic_vector(11 downto 0);\r
+       FRAME_9_IN          : in    std_logic_vector(11 downto 0);\r
+       FRAME_10_IN         : in    std_logic_vector(11 downto 0);\r
+       FRAME_11_IN         : in    std_logic_vector(11 downto 0);\r
+       FRAME_12_IN         : in    std_logic_vector(11 downto 0);\r
+       FRAME_13_IN         : in    std_logic_vector(11 downto 0);\r
+       FRAME_14_IN         : in    std_logic_vector(11 downto 0);\r
+       FRAME_15_IN         : in    std_logic_vector(11 downto 0);\r
+       READY_OUT           : out   std_logic; -- all buffers reported being ready for data transport\r
+       VALID_BUFS_OUT      : out   std_logic; -- at least one APV raw buffer has data to fetch\r
+       ROW_ERROR_OUT       : out   std_logic; -- at least one row number is wrong\r
+       APV_ERROR_OUT       : out   std_logic; -- at least one APV sent ERROR bit\r
+       APV_ERROR_BITS_OUT  : out   std_logic_vector(15 downto 0);\r
+       REF_ROW_OUT         : out   std_logic_vector(7 downto 0); -- selected reference row\r
+       DBG_OUT             : out   std_logic_vector(15 downto 0)\r
+);\r
 end;\r
 \r
 architecture behavioral of ref_row_sel is\r
 \r
-       -- normal signals\r
-       signal debug_x                          : std_logic_vector(15 downto 0);\r
-                                       \r
-       signal next_sel_ref_row         : std_logic_vector(3 downto 0);\r
-       signal sel_ref_row                      : std_logic_vector(3 downto 0);\r
-       signal next_valid_bufs          : std_logic;\r
-       signal valid_bufs                       : std_logic;\r
-       signal next_all_ready           : std_logic;\r
-       signal all_ready                        : std_logic;\r
-                                       \r
-       signal ref_row                          : std_logic_vector(7 downto 0); -- selected reference row number\r
-                                       \r
-       signal next_row_match           : std_logic_vector(15 downto 0);\r
-       signal row_match                        : std_logic_vector(15 downto 0); -- APV frame row matches reference number\r
-                               \r
-       signal next_apv_error           : std_logic_vector(15 downto 0);\r
-       signal apv_error                        : std_logic_vector(15 downto 0); -- APV frame error is set\r
-       \r
-       signal next_frame_row_err       : std_logic;\r
-       signal frame_row_err            : std_logic;\r
-       signal next_frame_apv_err       : std_logic;\r
-       signal frame_apv_err            : std_logic;\r
-\r
-       \r
+-- normal signals\r
+signal debug_x              : std_logic_vector(15 downto 0);\r
+\r
+signal next_sel_ref_row     : std_logic_vector(3 downto 0);\r
+signal sel_ref_row          : std_logic_vector(3 downto 0);\r
+signal next_valid_bufs      : std_logic;\r
+signal valid_bufs           : std_logic;\r
+signal next_all_ready       : std_logic;\r
+signal all_ready            : std_logic;\r
+\r
+signal ref_row              : std_logic_vector(7 downto 0); -- selected reference row number\r
+\r
+signal next_row_match       : std_logic_vector(15 downto 0);\r
+signal row_match            : std_logic_vector(15 downto 0); -- APV frame row matches reference number\r
+\r
+signal next_apv_error       : std_logic_vector(15 downto 0);\r
+signal apv_error            : std_logic_vector(15 downto 0); -- APV frame error is set\r
+\r
+signal next_frame_row_err   : std_logic;\r
+signal frame_row_err        : std_logic;\r
+signal next_frame_apv_err   : std_logic;\r
+signal frame_apv_err        : std_logic;\r
+\r
+\r
 begin\r
 \r
 -- Sync process\r
@@ -136,23 +137,23 @@ THE_REF_ROW_SELECT_PROC: process( clk_in )
 begin\r
        if( rising_edge(clk_in) ) then\r
                case sel_ref_row is\r
-                       when "0000"     =>      ref_row <= frame_0_in(7 downto 0);\r
-                       when "0001"     =>      ref_row <= frame_1_in(7 downto 0);\r
-                       when "0010"     =>      ref_row <= frame_2_in(7 downto 0);\r
-                       when "0011"     =>      ref_row <= frame_3_in(7 downto 0);\r
-                       when "0100"     =>      ref_row <= frame_4_in(7 downto 0);\r
-                       when "0101"     =>      ref_row <= frame_5_in(7 downto 0);\r
-                       when "0110"     =>      ref_row <= frame_6_in(7 downto 0);\r
-                       when "0111"     =>      ref_row <= frame_7_in(7 downto 0);\r
-                       when "1000"     =>      ref_row <= frame_8_in(7 downto 0);\r
-                       when "1001"     =>      ref_row <= frame_9_in(7 downto 0);\r
-                       when "1010"     =>      ref_row <= frame_10_in(7 downto 0);\r
-                       when "1011"     =>      ref_row <= frame_11_in(7 downto 0);\r
-                       when "1100"     =>      ref_row <= frame_12_in(7 downto 0);\r
-                       when "1101"     =>      ref_row <= frame_13_in(7 downto 0);\r
-                       when "1110"     =>      ref_row <= frame_14_in(7 downto 0);\r
-                       when "1111"     =>      ref_row <= frame_15_in(7 downto 0);\r
-                       when others     =>      ref_row <= x"ee"; -- will not be used... all cases are covered.\r
+                       when "0000" =>  ref_row <= frame_0_in(7 downto 0);\r
+                       when "0001" =>  ref_row <= frame_1_in(7 downto 0);\r
+                       when "0010" =>  ref_row <= frame_2_in(7 downto 0);\r
+                       when "0011" =>  ref_row <= frame_3_in(7 downto 0);\r
+                       when "0100" =>  ref_row <= frame_4_in(7 downto 0);\r
+                       when "0101" =>  ref_row <= frame_5_in(7 downto 0);\r
+                       when "0110" =>  ref_row <= frame_6_in(7 downto 0);\r
+                       when "0111" =>  ref_row <= frame_7_in(7 downto 0);\r
+                       when "1000" =>  ref_row <= frame_8_in(7 downto 0);\r
+                       when "1001" =>  ref_row <= frame_9_in(7 downto 0);\r
+                       when "1010" =>  ref_row <= frame_10_in(7 downto 0);\r
+                       when "1011" =>  ref_row <= frame_11_in(7 downto 0);\r
+                       when "1100" =>  ref_row <= frame_12_in(7 downto 0);\r
+                       when "1101" =>  ref_row <= frame_13_in(7 downto 0);\r
+                       when "1110" =>  ref_row <= frame_14_in(7 downto 0);\r
+                       when "1111" =>  ref_row <= frame_15_in(7 downto 0);\r
+                       when others =>  ref_row <= x"ee"; -- will not be used... all cases are covered.\r
                end case;\r
        end if;\r
 end process THE_REF_ROW_SELECT_PROC;\r
@@ -161,52 +162,52 @@ end process THE_REF_ROW_SELECT_PROC;
 -- Only channels with GOODDATA are to be taken into account; if the channel is invalid, we ignore it.\r
 \r
 next_row_match(0)  <= '1' when (  (gooddata_in(0) = '0') or\r
-                                                                ((gooddata_in(0) = '1') and (frame_0_in(7 downto 0) = ref_row) ) ) \r
-                                                 else '0';\r
+                                                                ((gooddata_in(0) = '1') and (frame_0_in(7 downto 0) = ref_row) ) )\r
+                                                 else '0';\r
 next_row_match(1)  <= '1' when (  (gooddata_in(1) = '0') or\r
-                                                                ((gooddata_in(1) = '1') and (frame_1_in(7 downto 0) = ref_row) ) ) \r
+                                                                ((gooddata_in(1) = '1') and (frame_1_in(7 downto 0) = ref_row) ) )\r
                                                  else '0';\r
 next_row_match(2)  <= '1' when (  (gooddata_in(2) = '0') or\r
-                                                                ((gooddata_in(2) = '1') and (frame_2_in(7 downto 0) = ref_row) ) ) \r
+                                                                ((gooddata_in(2) = '1') and (frame_2_in(7 downto 0) = ref_row) ) )\r
                                                  else '0';\r
 next_row_match(3)  <= '1' when (  (gooddata_in(3) = '0') or\r
-                                                                ((gooddata_in(3) = '1') and (frame_3_in(7 downto 0) = ref_row) ) ) \r
+                                                                ((gooddata_in(3) = '1') and (frame_3_in(7 downto 0) = ref_row) ) )\r
                                                  else '0';\r
 next_row_match(4)  <= '1' when (  (gooddata_in(4) = '0') or\r
-                                                                ((gooddata_in(4) = '1') and (frame_4_in(7 downto 0) = ref_row) ) ) \r
+                                                                ((gooddata_in(4) = '1') and (frame_4_in(7 downto 0) = ref_row) ) )\r
                                                  else '0';\r
 next_row_match(5)  <= '1' when (  (gooddata_in(5) = '0') or\r
-                                                                ((gooddata_in(5) = '1') and (frame_5_in(7 downto 0) = ref_row) ) ) \r
+                                                                ((gooddata_in(5) = '1') and (frame_5_in(7 downto 0) = ref_row) ) )\r
                                                  else '0';\r
 next_row_match(6)  <= '1' when (  (gooddata_in(6) = '0') or\r
-                                                                ((gooddata_in(6) = '1') and (frame_6_in(7 downto 0) = ref_row) ) ) \r
+                                                                ((gooddata_in(6) = '1') and (frame_6_in(7 downto 0) = ref_row) ) )\r
                                                  else '0';\r
 next_row_match(7)  <= '1' when (  (gooddata_in(7) = '0') or\r
-                                                                ((gooddata_in(7) = '1') and (frame_7_in(7 downto 0) = ref_row) ) ) \r
+                                                                ((gooddata_in(7) = '1') and (frame_7_in(7 downto 0) = ref_row) ) )\r
                                                  else '0';\r
 next_row_match(8)  <= '1' when (  (gooddata_in(8) = '0') or\r
-                                                                ((gooddata_in(8) = '1') and (frame_8_in(7 downto 0) = ref_row) ) ) \r
-                                                else '0';\r
+                                                                ((gooddata_in(8) = '1') and (frame_8_in(7 downto 0) = ref_row) ) )\r
+                                                else '0';\r
 next_row_match(9)  <= '1' when (  (gooddata_in(9) = '0') or\r
-                                                                ((gooddata_in(9) = '1') and (frame_9_in(7 downto 0) = ref_row) ) ) \r
+                                                                ((gooddata_in(9) = '1') and (frame_9_in(7 downto 0) = ref_row) ) )\r
                                                  else '0';\r
 next_row_match(10) <= '1' when (  (gooddata_in(10) = '0') or\r
-                                                                ((gooddata_in(10) = '1') and (frame_10_in(7 downto 0) = ref_row) ) ) \r
+                                                                ((gooddata_in(10) = '1') and (frame_10_in(7 downto 0) = ref_row) ) )\r
                                                  else '0';\r
 next_row_match(11) <= '1' when (  (gooddata_in(11) = '0') or\r
-                                                                ((gooddata_in(11) = '1') and (frame_11_in(7 downto 0) = ref_row) ) ) \r
+                                                                ((gooddata_in(11) = '1') and (frame_11_in(7 downto 0) = ref_row) ) )\r
                                                  else '0';\r
 next_row_match(12) <= '1' when (  (gooddata_in(12) = '0') or\r
-                                                                ((gooddata_in(12) = '1') and (frame_12_in(7 downto 0) = ref_row) ) ) \r
+                                                                ((gooddata_in(12) = '1') and (frame_12_in(7 downto 0) = ref_row) ) )\r
                                                  else '0';\r
 next_row_match(13) <= '1' when (  (gooddata_in(13) = '0') or\r
-                                                                ((gooddata_in(13) = '1') and (frame_13_in(7 downto 0) = ref_row) ) ) \r
+                                                                ((gooddata_in(13) = '1') and (frame_13_in(7 downto 0) = ref_row) ) )\r
                                                  else '0';\r
 next_row_match(14) <= '1' when (  (gooddata_in(14) = '0') or\r
-                                                                ((gooddata_in(14) = '1') and (frame_14_in(7 downto 0) = ref_row) ) ) \r
+                                                                ((gooddata_in(14) = '1') and (frame_14_in(7 downto 0) = ref_row) ) )\r
                                                  else '0';\r
 next_row_match(15) <= '1' when (  (gooddata_in(15) = '0') or\r
-                                                                ((gooddata_in(15) = '1') and (frame_15_in(7 downto 0) = ref_row) ) ) \r
+                                                                ((gooddata_in(15) = '1') and (frame_15_in(7 downto 0) = ref_row) ) )\r
                                                  else '0';\r
 \r
 -- APV error recognition - same issue.\r
@@ -232,7 +233,7 @@ next_frame_row_err <= '1' when ( row_match /= x"ffff" ) else '0';
 next_frame_apv_err <= '1' when ( apv_error /= x"0000" ) else '0';\r
 \r
 -- output signals\r
-valid_bufs_out     <= valid_bufs; \r
+valid_bufs_out     <= valid_bufs;\r
 ready_out          <= all_ready;\r
 row_error_out      <= frame_row_err;\r
 apv_error_out      <= frame_apv_err;\r
index 8cc8bc5897ec0cf7d2b6d55970ac508be6093d8e..7177022678166dc680c58eae39fd42fa4bd23722 100644 (file)
@@ -7,30 +7,31 @@ library work;
 use work.adcmv3_components.all;\r
 \r
 entity reset_handler is\r
-       port( CLEAR_IN                  : in    std_logic; -- async reset from outside, if available (otherwise '0')\r
-                 RESET_IN                      : in    std_logic; -- for testing, if not needed, set to '0'\r
-                 CLK_IN                        : in    std_logic;\r
-                 TRB_RESET_IN          : in    std_logic;\r
-                 RESET_OUT                     : out   std_logic;\r
-                 DEBUG_OUT                     : out   std_logic_vector(15 downto 0)\r
-               );\r
+port( \r
+       CLEAR_IN        : in    std_logic; -- async reset from outside, if available (otherwise '0')\r
+       RESET_IN        : in    std_logic; -- for testing, if not needed, set to '0'\r
+       CLK_IN          : in    std_logic;\r
+       TRB_RESET_IN    : in    std_logic;\r
+       RESET_OUT       : out   std_logic;\r
+       DEBUG_OUT       : out   std_logic_vector(15 downto 0)\r
+);\r
 end;\r
 \r
 architecture behavioral of reset_handler is\r
 \r
 -- normal signals\r
-       signal async_sampler    : std_logic_vector(7 downto 0);\r
-       signal async_pulse_x    : std_logic;\r
-       signal async_pulse              : std_logic;\r
-       signal reset_cnt                : std_logic_vector(15 downto 0);\r
-       signal debug                    : std_logic_vector(15 downto 0);\r
-       signal reset                    : std_logic;\r
+signal async_sampler    : std_logic_vector(7 downto 0);\r
+signal async_pulse_x    : std_logic;\r
+signal async_pulse      : std_logic;\r
+signal reset_cnt        : std_logic_vector(15 downto 0);\r
+signal debug            : std_logic_vector(15 downto 0);\r
+signal reset            : std_logic;\r
 \r
-       attribute syn_preserve : boolean;\r
-       attribute syn_preserve of async_sampler : signal  is true;\r
-       attribute syn_preserve of async_pulse : signal  is true;\r
-       attribute syn_preserve of reset : signal  is true;\r
-       attribute syn_preserve of reset_cnt : signal  is true;\r
+attribute syn_preserve : boolean;\r
+attribute syn_preserve of async_sampler : signal  is true;\r
+attribute syn_preserve of async_pulse : signal  is true;\r
+attribute syn_preserve of reset : signal  is true;\r
+attribute syn_preserve of reset_cnt : signal  is true;\r
                \r
 begin                                          \r
 \r
@@ -48,19 +49,19 @@ async_pulse_x <= '1' when ( async_sampler = x"ff" ) else '0';
 -- one global reset counter\r
 THE_GLOBAL_RESET_PROC: process( clk_in )\r
 begin\r
-    if( rising_edge(clk_in) ) then\r
-       if( (async_pulse = '1') or (reset_in = '1') or (trb_reset_in = '1') ) then\r
-               reset_cnt <= (others => '0');\r
-               reset     <= '1';\r
-       else\r
-               reset_cnt <= reset_cnt + 1;\r
-               reset     <= '1';\r
-               if( reset_cnt = x"001F" ) then\r
-                   reset     <= '0';\r
-                   reset_cnt <= x"001F";\r
-                       end if;\r
-               end if;\r
-    end if;\r
+       if( rising_edge(clk_in) ) then\r
+               if( (async_pulse = '1') or (reset_in = '1') or (trb_reset_in = '1') ) then\r
+                       reset_cnt <= (others => '0');\r
+                       reset     <= '1';\r
+               else\r
+                       reset_cnt <= reset_cnt + 1;\r
+                       reset     <= '1';\r
+                       if( reset_cnt = x"001F" ) then\r
+                               reset     <= '0';\r
+                               reset_cnt <= x"001F";\r
+                       end if;\r
+               end if;\r
+       end if;\r
 end process THE_GLOBAL_RESET_PROC;\r
 \r
 \r
@@ -70,6 +71,6 @@ debug <= reset_cnt;
 -- Output signals\r
 debug_out <= debug;\r
 reset_out <= reset;\r
-                                               \r
+                                                                                          \r
 end behavioral;                                \r
-                                              
\ No newline at end of file
+                                                                                         
\ No newline at end of file
index c21020e7f3b10b21301191dbe72b9a8e0891960e..d7ae71a8b4c2254c8658c281625850580dda1bda 100755 (executable)
@@ -10,96 +10,100 @@ use work.trb_net_components.all;
 use work.adcmv3_components.all;
 
 entity rich_trb is
-port( CLK100M_IN                : in    std_logic; -- SerDes exclusive clock
-         SYSCLK_IN                                     : in    std_logic; -- fabric clock
-         RESET_IN                                      : in    std_logic; -- synchronous reset
-      -- SFP connections
-      SD_RXD_P_IN               : in    std_logic;
-      SD_RXD_N_IN               : in    std_logic;
-      SD_TXD_P_OUT              : out   std_logic;
-      SD_TXD_N_OUT              : out   std_logic;
-      SD_PRESENT_IN             : in    std_logic;
-      SD_TXDIS_OUT              : out   std_logic;
-      SD_LOS_IN                 : in    std_logic;
-      ONEWIRE_INOUT             : inout std_logic;
-         -- common regIO status / control registers
-      COMMON_STAT_REG_IN               : in    std_logic_vector(std_COMSTATREG*c_REGIO_REGISTER_WIDTH-1 downto 0); -- common status register, bit definitions like in WIKI
-      COMMON_CTRL_REG_OUT              : out   std_logic_vector(std_COMCTRLREG*c_REGIO_REGISTER_WIDTH-1 downto 0); -- common control register, bit definitions like in WIKI
-      -- status register input to regIO / control register output from regIO
-      CONTROL_OUT                              : out   std_logic_vector(63 downto 0);
-      STATUS_IN                 : in    std_logic_vector(127 downto 0); 
-      -- LVL1 signals
-      LVL1_TRG_TYPE_OUT         : out   std_logic_vector(3 downto 0);
-      LVL1_TRG_RECEIVED_OUT     : out   std_logic;
-      LVL1_TRG_NUMBER_OUT       : out   std_logic_vector(15 downto 0);
-      LVL1_TRG_CODE_OUT         : out   std_logic_vector(7 downto 0);
-      LVL1_TRG_INFORMATION_OUT  : out   std_logic_vector(23 downto 0);
-      LVL1_ERROR_PATTERN_IN     : in    std_logic_vector(31 downto 0);
-      LVL1_TRG_RELEASE_IN       : in    std_logic;
-      TIMING_TRG_FOUND_IN              : in    std_logic;
-         -- IPU data channel signals (yes, we will use ComputeNodes (tm) (R) (C) one day... :-)
-         IPU_NUMBER_OUT                        : out   std_logic_vector(15 downto 0); -- trigger tag
-         IPU_INFORMATION_OUT           : out   std_logic_vector(7 downto 0); -- trigger information
-         IPU_START_READOUT_OUT         : out   std_logic; -- gimme data!
-         IPU_DATA_IN                           : in    std_logic_vector(31 downto 0); -- detector data, equipped with DHDR
-         IPU_DATAREADY_IN                      : in    std_logic; -- data is valid
-         IPU_READOUT_FINISHED_IN       : in    std_logic; -- no more data, end transfer, send TRM
-         IPU_READ_OUT                          : out   std_logic; -- read strobe, low every second cycle 
-         IPU_LENGTH_IN                         : in    std_logic_vector(15 downto 0); -- length of data packet (32bit words) (?)
-         IPU_ERROR_PATTERN_IN          : in    std_logic_vector(31 downto 0); -- error pattern
-      -- regIO bus
-      REGIO_ADDR_OUT            : out   std_logic_vector(c_REGIO_ADDRESS_WIDTH-1 downto 0);
-      REGIO_READ_ENABLE_OUT     : out   std_logic;
-      REGIO_WRITE_ENABLE_OUT    : out   std_logic;
-      REGIO_DATA_OUT            : out   std_logic_vector(c_REGIO_REGISTER_WIDTH-1 downto 0);
-      REGIO_DATA_IN             : in    std_logic_vector(c_REGIO_REGISTER_WIDTH-1 downto 0);
-      REGIO_DATAREADY_IN        : in    std_logic;
-      REGIO_NO_MORE_DATA_IN     : in    std_logic;
-      REGIO_WRITE_ACK_IN        : in    std_logic;
-      REGIO_UNKNOWN_ADDR_IN     : in    std_logic;
-      REGIO_TIMEOUT_OUT         : out   std_logic;
-      -- status LEDs
-      LED_LINK_STAT             : out   std_logic;
-      LED_LINK_TXD              : out   std_logic;
-      LED_LINK_RXD              : out   std_logic;
-      LINK_BSM_OUT                             : out   std_logic_vector(3 downto 0);
-      RESET_OUT                                        : out   std_logic;
-      -- Debug
-      DEBUG                     : out   std_logic_vector(63 downto 0)
-    );
+port(
+       CLK100M_IN                  : in    std_logic; -- SerDes exclusive clock
+       SYSCLK_IN                   : in    std_logic; -- fabric clock
+       RESET_IN                    : in    std_logic; -- synchronous reset
+       -- SFP connections
+       SD_RXD_P_IN                 : in    std_logic;
+       SD_RXD_N_IN                 : in    std_logic;
+       SD_TXD_P_OUT                : out   std_logic;
+       SD_TXD_N_OUT                : out   std_logic;
+       SD_PRESENT_IN               : in    std_logic;
+       SD_TXDIS_OUT                : out   std_logic;
+       SD_LOS_IN                   : in    std_logic;
+       ONEWIRE_INOUT               : inout std_logic;
+       -- common regIO status / control registers
+       COMMON_STAT_REG_IN          : in    std_logic_vector(std_COMSTATREG*c_REGIO_REGISTER_WIDTH-1 downto 0); -- common status register, bit definitions like in WIKI
+       COMMON_CTRL_REG_OUT         : out   std_logic_vector(std_COMCTRLREG*c_REGIO_REGISTER_WIDTH-1 downto 0); -- common control register, bit definitions like in WIKI
+       -- status register input to regIO / control register output from regIO
+       CONTROL_OUT                 : out   std_logic_vector(63 downto 0);
+       STATUS_IN                   : in    std_logic_vector(127 downto 0);
+       -- LVL1 signals
+       LVL1_TRG_TYPE_OUT           : out   std_logic_vector(3 downto 0);
+       LVL1_TRG_RECEIVED_OUT       : out   std_logic;
+       LVL1_TRG_NUMBER_OUT         : out   std_logic_vector(15 downto 0);
+       LVL1_TRG_CODE_OUT           : out   std_logic_vector(7 downto 0);
+       LVL1_TRG_INFORMATION_OUT    : out   std_logic_vector(23 downto 0);
+       LVL1_ERROR_PATTERN_IN       : in    std_logic_vector(31 downto 0);
+       LVL1_TRG_RELEASE_IN         : in    std_logic;
+       LVL1_INT_TRG_NUMBER_OUT     : out   std_logic_vector(15 downto 0);
+       LVL1_INT_TRG_UPDATE_OUT     : out   std_logic;
+       TIMING_TRG_FOUND_IN         : in    std_logic;
+       -- IPU data channel signals (yes, we will use ComputeNodes (tm) (R) (C) one day... :-)
+       IPU_NUMBER_OUT              : out   std_logic_vector(15 downto 0); -- trigger tag
+       IPU_INFORMATION_OUT         : out   std_logic_vector(7 downto 0); -- trigger information
+       IPU_START_READOUT_OUT       : out   std_logic; -- gimme data!
+       IPU_DATA_IN                 : in    std_logic_vector(31 downto 0); -- detector data, equipped with DHDR
+       IPU_DATAREADY_IN            : in    std_logic; -- data is valid
+       IPU_READOUT_FINISHED_IN     : in    std_logic; -- no more data, end transfer, send TRM
+       IPU_READ_OUT                : out   std_logic; -- read strobe, low every second cycle
+       IPU_LENGTH_IN               : in    std_logic_vector(15 downto 0); -- length of data packet (32bit words) (?)
+       IPU_ERROR_PATTERN_IN        : in    std_logic_vector(31 downto 0); -- error pattern
+       -- regIO bus
+       REGIO_ADDR_OUT              :  out   std_logic_vector(c_REGIO_ADDRESS_WIDTH-1 downto 0);
+       REGIO_READ_ENABLE_OUT       : out   std_logic;
+       REGIO_WRITE_ENABLE_OUT      : out   std_logic;
+       REGIO_DATA_OUT              : out   std_logic_vector(c_REGIO_REGISTER_WIDTH-1 downto 0);
+       REGIO_DATA_IN               : in    std_logic_vector(c_REGIO_REGISTER_WIDTH-1 downto 0);
+       REGIO_DATAREADY_IN          : in    std_logic;
+       REGIO_NO_MORE_DATA_IN       : in    std_logic;
+       REGIO_WRITE_ACK_IN          : in    std_logic;
+       REGIO_UNKNOWN_ADDR_IN       : in    std_logic;
+       REGIO_TIMEOUT_OUT           : out   std_logic;
+       -- status LEDs
+       LED_LINK_STAT               : out   std_logic;
+       LED_LINK_TXD                : out   std_logic;
+       LED_LINK_RXD                : out   std_logic;
+       LINK_BSM_OUT                : out   std_logic_vector(3 downto 0);
+       RESET_OUT                   : out   std_logic;
+       -- Debug
+       DEBUG                       : out   std_logic_vector(63 downto 0)
+);
 end entity;
 
 architecture rich_arch of rich_trb is
 
-    -- Placer Directives
-    attribute HGROUP : string;
-    -- for whole architecture
-    attribute HGROUP of rich_arch : architecture  is "RICH_TRB_group";
+-- Placer Directives
+attribute HGROUP : string;
+-- for whole architecture
+attribute HGROUP of rich_arch : architecture  is "RICH_TRB_group";
 
-       -- Signals
-    signal clk_en                   : std_logic;
-    signal med_data_in              : std_logic_vector(c_DATA_WIDTH-1 downto 0);
-    signal med_packet_num_in        : std_logic_vector(c_NUM_WIDTH-1 downto 0);
-    signal med_dataready_in         : std_logic;
-    signal med_read_out             : std_logic;
-    signal med_data_out             : std_logic_vector(c_DATA_WIDTH-1 downto 0);
-    signal med_packet_num_out       : std_logic_vector(c_NUM_WIDTH-1 downto 0);
-    signal med_dataready_out        : std_logic;
-    signal med_read_in              : std_logic;
-    signal med_stat_debug           : std_logic_vector(63 downto 0);
-    signal med_ctrl_op              : std_logic_vector(15 downto 0);
-    signal med_stat_op              : std_logic_vector(15 downto 0);
+-- Signals
+signal clk_en                   : std_logic;
+signal med_data_in              : std_logic_vector(c_DATA_WIDTH-1 downto 0);
+signal med_packet_num_in        : std_logic_vector(c_NUM_WIDTH-1 downto 0);
+signal med_dataready_in         : std_logic;
+signal med_read_out             : std_logic;
+signal med_data_out             : std_logic_vector(c_DATA_WIDTH-1 downto 0);
+signal med_packet_num_out       : std_logic_vector(c_NUM_WIDTH-1 downto 0);
+signal med_dataready_out        : std_logic;
+signal med_read_in              : std_logic;
+signal med_stat_debug           : std_logic_vector(63 downto 0);
+signal med_ctrl_op              : std_logic_vector(15 downto 0);
+signal med_stat_op              : std_logic_vector(15 downto 0);
 
-    -- general purpose control and status registers in regIO
-    signal regio_ctrl_regs          : std_logic_vector(32*2-1 downto 0);
-    signal regio_stat_regs          : std_logic_vector(32*4-1 downto 0);
-    
-    signal common_stat_reg          : std_logic_vector(std_COMSTATREG*c_REGIO_REGISTER_WIDTH-1 downto 0);
-    signal common_ctrl_reg          : std_logic_vector(std_COMCTRLREG*c_REGIO_REGISTER_WIDTH-1 downto 0);
-    
-    signal debug_x                  : std_logic_vector(63 downto 0);
-       
-       signal stat_debug_1                             : std_logic_vector(31 downto 0);
+-- general purpose control and status registers in regIO
+signal regio_ctrl_regs          : std_logic_vector(32*2-1 downto 0);
+signal regio_stat_regs          : std_logic_vector(32*4-1 downto 0);
+
+signal common_stat_reg          : std_logic_vector(std_COMSTATREG*c_REGIO_REGISTER_WIDTH-1 downto 0);
+signal common_ctrl_reg          : std_logic_vector(std_COMCTRLREG*c_REGIO_REGISTER_WIDTH-1 downto 0);
+signal common_ctrl_reg_strobe  : std_logic_vector(std_COMCTRLREG-1 downto 0);
+
+signal debug_x                  : std_logic_vector(63 downto 0);
+
+signal stat_debug_1             : std_logic_vector(31 downto 0);
 
 begin
 
@@ -109,7 +113,7 @@ begin
 
 -- Debug
 debug <= debug_x;
-    
+
 -- Clock assignment. We don't use CLK_EN really in our designs.
 clk_en      <= '1';
 
@@ -117,37 +121,41 @@ clk_en      <= '1';
 -- Serdes
 -------------------------------------------------------------
 THE_MEDIA_INTERFACE : trb_net16_med_ecp_sfp_gbe
-generic map( SERDES_NUM => 2 )
-port map( CLK                   => clk100m_in,
-                 SYSCLK                                => sysclk_in,
-          RESET                 => reset_in,
-          CLK_EN                => clk_en,
-          --Internal Connection
-          MED_DATA_IN           => med_data_out,
-          MED_PACKET_NUM_IN     => med_packet_num_out,
-          MED_DATAREADY_IN      => med_dataready_out,
-          MED_READ_OUT          => med_read_in,
-          MED_DATA_OUT          => med_data_in,
-          MED_PACKET_NUM_OUT    => med_packet_num_in,
-          MED_DATAREADY_OUT     => med_dataready_in,
-          MED_READ_IN           => med_read_out,
-          REFCLK2CORE_OUT       => open,
-          --SFP Connection
-          SD_RXD_P_IN           => sd_rxd_p_in,
-          SD_RXD_N_IN           => sd_rxd_n_in,
-          SD_TXD_P_OUT          => sd_txd_p_out,
-          SD_TXD_N_OUT          => sd_txd_n_out,
-          SD_REFCLK_P_IN        => '1',
-          SD_REFCLK_N_IN        => '0',
-          SD_PRSNT_N_IN         => sd_present_in,
-          SD_LOS_IN             => sd_los_in,
-          SD_TXDIS_OUT                 => sd_txdis_out,
-          -- Status and control port
-          STAT_OP               => med_stat_op,
-          CTRL_OP               => med_ctrl_op, -- input
-          STAT_DEBUG            => med_stat_debug,
-          CTRL_DEBUG            => (others => '0')
-        );
+generic map( 
+       SERDES_NUM => 2 
+)
+port map( 
+       CLK                   => clk100m_in,
+       SYSCLK                => sysclk_in,
+       RESET                 => reset_in,
+       CLEAR                 => '0',
+       CLK_EN                => clk_en,
+       --Internal Connection
+       MED_DATA_IN           => med_data_out,
+       MED_PACKET_NUM_IN     => med_packet_num_out,
+       MED_DATAREADY_IN      => med_dataready_out,
+       MED_READ_OUT          => med_read_in,
+       MED_DATA_OUT          => med_data_in,
+       MED_PACKET_NUM_OUT    => med_packet_num_in,
+       MED_DATAREADY_OUT     => med_dataready_in,
+       MED_READ_IN           => med_read_out,
+       REFCLK2CORE_OUT       => open,
+       --SFP Connection
+       SD_RXD_P_IN           => sd_rxd_p_in,
+       SD_RXD_N_IN           => sd_rxd_n_in,
+       SD_TXD_P_OUT          => sd_txd_p_out,
+       SD_TXD_N_OUT          => sd_txd_n_out,
+       SD_REFCLK_P_IN        => '1',
+       SD_REFCLK_N_IN        => '0',
+       SD_PRSNT_N_IN         => sd_present_in,
+       SD_LOS_IN             => sd_los_in,
+       SD_TXDIS_OUT          => sd_txdis_out,
+       -- Status and control port
+       STAT_OP               => med_stat_op,
+       CTRL_OP               => med_ctrl_op, -- input
+       STAT_DEBUG            => med_stat_debug,
+       CTRL_DEBUG            => (others => '0')
+);
 
 --debug_x <= med_stat_debug;
 
@@ -161,124 +169,123 @@ debug_x(19)           <= med_dataready_out;  -- MED_DATAREADY_IN
 debug_x(18 downto 16) <= med_packet_num_out; -- MED_PACKET_NUM_IN
 debug_x(15 downto 0)  <= med_data_out;       -- MED_DATA_IN
 
---  16  MED_DATA_IN        : in  std_logic_vector(15 downto 0);
---   3  MED_PACKET_NUM_IN  : in  std_logic_vector(2 downto 0);
---   1  MED_DATAREADY_IN   : in  std_logic;
---   1  MED_READ_OUT       : out std_logic;
---  16  MED_DATA_OUT       : out std_logic_vector(15 downto 0);
---   3  MED_PACKET_NUM_OUT : out std_logic_vector(2 downto 0);
---   1  MED_DATAREADY_OUT  : out std_logic;
---   1  MED_READ_IN        : in  std_logic;
---  42    
-    
  ------------------------------------------------------------
 -- Full featured HADES endpoint
 -------------------------------------------------------------
 THE_UNIFIED_ENDPOINT: trb_net16_endpoint_hades_full
-generic map( USE_CHANNEL                    => (c_YES,c_YES,c_NO,c_YES),
-             INIT_CAN_SEND_DATA             => (c_NO,c_NO,c_NO,c_NO), -- was c_YES before?
-             REPLY_CAN_SEND_DATA            => (c_YES,c_YES,c_YES,c_YES),
-             REPLY_CAN_RECEIVE_DATA         => (c_NO,c_NO,c_NO,c_NO),
-             BROADCAST_BITMASK              => x"FB", -- RICH uses 0xfffb as subnet mask for broadcasts
-             REGIO_NUM_STAT_REGS            => 2, -- minimum number: 32 * 2^0 - 1 = 31  => D[31:0]
-             REGIO_NUM_CTRL_REGS            => 1, -- minimum number: 32 * 2^0 - 1 = 31  => D[31:0]
-             --standard values for output registers
-             REGIO_INIT_CTRL_REGS           => x"00000000_00000000_00000000_00000000" &
-                                               x"00000000_00000000_00000000_00000000",
-             --set to 0 for unused ctrl registers to save resources
-             REGIO_USED_CTRL_REGS           =>  "00000001",
-             --set to 0 for each unused bit in a register
-             REGIO_USED_CTRL_BITMASK        => x"FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF" &
-                                               x"FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF",
-             REGIO_USE_DAT_PORT             => c_YES,
-             REGIO_INIT_ADDRESS             => x"fb00",
-             REGIO_INIT_UNIQUE_ID           => x"dead_beef_affe_d00f",
-             REGIO_INIT_BOARD_INFO          => x"5aa5_3cc3",
-             REGIO_INIT_ENDPOINT_ID         => x"0001",
-             REGIO_COMPILE_TIME             => VERSION_NUMBER_TIME,
-             REGIO_COMPILE_VERSION          => x"0003",
-             REGIO_HARDWARE_VERSION         => x"0002_0000",
-             REGIO_USE_1WIRE_INTERFACE      => c_YES,
-             CLOCK_FREQUENCY                => 100
-           )
-port map( CLK                       => sysclk_in,
-          RESET                     => reset_in,
-          CLK_EN                    => clk_en,
-          --  Media direction port
-          MED_DATAREADY_OUT         => med_dataready_out,
-          MED_DATA_OUT              => med_data_out,
-          MED_PACKET_NUM_OUT        => med_packet_num_out,
-          MED_READ_IN               => med_read_in,
-          MED_DATAREADY_IN          => med_dataready_in,
-          MED_DATA_IN               => med_data_in,
-          MED_PACKET_NUM_IN         => med_packet_num_in,
-          MED_READ_OUT              => med_read_out,
-          MED_STAT_OP_IN            => med_stat_op,
-          MED_CTRL_OP_OUT           => med_ctrl_op,
-          -- LVL1 trigger APL
-          LVL1_TRG_TYPE_OUT         => lvl1_trg_type_out,
-          LVL1_TRG_RECEIVED_OUT     => lvl1_trg_received_out,
-          LVL1_TRG_NUMBER_OUT       => lvl1_trg_number_out,
-          LVL1_TRG_CODE_OUT         => lvl1_trg_code_out,
-          LVL1_TRG_INFORMATION_OUT  => lvl1_trg_information_out,
-          LVL1_ERROR_PATTERN_IN     => lvl1_error_pattern_in,
-          LVL1_TRG_RELEASE_IN       => lvl1_trg_release_in,
-          LVL1_INT_TRG_NUMBER_OUT   => open, -- unknown!!!
-          -- IPU Port
-          IPU_NUMBER_OUT            => ipu_number_out,
-                 IPU_READOUT_TYPE_OUT          => open, -- 4bit readout type
-                 IPU_INFORMATION_OUT       => ipu_information_out,
-          IPU_START_READOUT_OUT     => ipu_start_readout_out,
-          IPU_DATA_IN               => ipu_data_in,
-          IPU_DATAREADY_IN          => ipu_dataready_in,
-          IPU_READOUT_FINISHED_IN   => ipu_readout_finished_in,
-          IPU_READ_OUT              => ipu_read_out,
-          IPU_LENGTH_IN             => ipu_length_in,
-          IPU_ERROR_PATTERN_IN      => ipu_error_pattern_in,
-          -- Slow Control Data Port
-          REGIO_COMMON_STAT_REG_IN  => common_stat_reg,
-          REGIO_COMMON_CTRL_REG_OUT => common_ctrl_reg,
-          REGIO_REGISTERS_IN        => regio_stat_regs,
-          REGIO_REGISTERS_OUT       => regio_ctrl_regs,
-          COMMON_STAT_REG_STROBE    => open, --: out std_logic_vector(std_COMSTATREG-1 downto 0);
-          COMMON_CTRL_REG_STROBE    => open, --: out std_logic_vector(std_COMCTRLREG-1 downto 0);
-          STAT_REG_STROBE           => open, --: out std_logic_vector(2**(REGIO_NUM_STAT_REGS)-1 downto 0);
-          CTRL_REG_STROBE           => open, --: out std_logic_vector(2**(REGIO_NUM_CTRL_REGS)-1 downto 0);
-          --following ports only used when using internal data port
-          REGIO_ADDR_OUT            => regio_addr_out,
-          REGIO_READ_ENABLE_OUT     => regio_read_enable_out,
-          REGIO_WRITE_ENABLE_OUT    => regio_write_enable_out,
-          REGIO_DATA_OUT            => regio_data_out,
-          REGIO_DATA_IN             => regio_data_in,
-          REGIO_DATAREADY_IN        => regio_dataready_in,
-          REGIO_NO_MORE_DATA_IN     => regio_no_more_data_in,
-          REGIO_WRITE_ACK_IN        => regio_write_ack_in,
-          REGIO_UNKNOWN_ADDR_IN     => regio_unknown_addr_in,
-          REGIO_TIMEOUT_OUT         => regio_timeout_out,
-          --IDRAM is used if no 1-wire interface, onewire used otherwise
-          REGIO_IDRAM_DATA_IN       => x"0000", -- not used
-          REGIO_IDRAM_DATA_OUT      => open, -- not used
-          REGIO_IDRAM_ADDR_IN       => "000", -- not used
-          REGIO_IDRAM_WR_IN         => '0', -- not used
-          REGIO_ONEWIRE_INOUT       => onewire_inout,
-          REGIO_ONEWIRE_MONITOR_IN  => '1', -- not used
-          REGIO_ONEWIRE_MONITOR_OUT => open, -- not used
-          -- New stuff?!?
-                 TRIGGER_MONITOR_IN            => timing_trg_found_in,
-                 GLOBAL_TIME_OUT                       => open,
-                 LOCAL_TIME_OUT                        => open,
-                 TIME_SINCE_LAST_TRG_OUT       => open,
-                 TIMER_US_TICK_OUT                     => open,
-          -- Status and debug 
-          STAT_DEBUG_IPU            => open,
-          STAT_DEBUG_1              => stat_debug_1, --open,
-          STAT_DEBUG_2              => open,
-          MED_STAT_OP               => open,
-          CTRL_MPLEX                => x"00000000",
-          IOBUF_CTRL_GEN            => x"00000000_00000000_00000000_00000000",
-          STAT_ONEWIRE              => open,
-          STAT_ADDR_DEBUG           => open
-        );
+generic map( 
+       USE_CHANNEL                    => (c_YES,c_YES,c_NO,c_YES),
+       INIT_CAN_SEND_DATA             => (c_NO,c_NO,c_NO,c_NO), -- was c_YES before?
+       REPLY_CAN_SEND_DATA            => (c_YES,c_YES,c_YES,c_YES),
+       REPLY_CAN_RECEIVE_DATA         => (c_NO,c_NO,c_NO,c_NO),
+       BROADCAST_BITMASK              => x"fb", -- RICH uses 0xfffb as subnet mask for broadcasts
+       REGIO_NUM_STAT_REGS            => 2, -- minimum number: 32 * 2^0 - 1 = 31  => D[31:0]
+       REGIO_NUM_CTRL_REGS            => 1, -- minimum number: 32 * 2^0 - 1 = 31  => D[31:0]
+       --standard values for output registers
+       REGIO_INIT_CTRL_REGS           => x"00000000_00000000_00000000_00000000" &
+                                                                         x"00000000_00000000_00000000_00000000" &
+                                                                         x"00000000_00000000_00000000_00000000" &
+                                                                         x"00000000_00000000_00000000_00000000",
+       --set to 0 for unused ctrl registers to save resources
+       REGIO_USED_CTRL_REGS           =>  "0000000000000001",
+       --set to 0 for each unused bit in a register
+       REGIO_USED_CTRL_BITMASK        => x"FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF" &
+                                                                         x"FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF" &
+                                                                         x"FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF" &
+                                                                         x"FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF",
+       REGIO_USE_DAT_PORT             => c_YES,
+       REGIO_INIT_ADDRESS             => x"fb00", -- useless, as no preload is done in this register!
+       REGIO_INIT_UNIQUE_ID           => x"dead_beef_affe_d00f",
+       REGIO_INIT_BOARD_INFO          => x"5aa5_3cc3",
+       REGIO_INIT_ENDPOINT_ID         => x"0001",
+       REGIO_COMPILE_TIME             => VERSION_NUMBER_TIME,
+       REGIO_COMPILE_VERSION          => x"0003",
+       REGIO_HARDWARE_VERSION         => x"3300_0000", -- ADCMv3 signature
+       REGIO_USE_1WIRE_INTERFACE      => c_YES,
+       CLOCK_FREQUENCY                => 100
+)
+port map( 
+       CLK                             => sysclk_in,
+       RESET                           => reset_in,
+       CLK_EN                          => clk_en,
+       --  Media direction port
+       MED_DATAREADY_OUT               => med_dataready_out,
+       MED_DATA_OUT                    => med_data_out,
+       MED_PACKET_NUM_OUT              => med_packet_num_out,
+       MED_READ_IN                     => med_read_in,
+       MED_DATAREADY_IN                => med_dataready_in,
+       MED_DATA_IN                     => med_data_in,
+       MED_PACKET_NUM_IN               => med_packet_num_in,
+       MED_READ_OUT                    => med_read_out,
+       MED_STAT_OP_IN                  => med_stat_op,
+       MED_CTRL_OP_OUT                 => med_ctrl_op,
+       -- LVL1 trigger APL
+    LVL1_TRG_VALID_TIMING_OUT   => open, --valid timing trigger has been received
+    LVL1_TRG_VALID_NOTIMING_OUT => open, --valid trigger without timing trigger has been received
+    LVL1_TRG_INVALID_OUT        => open, --the current trigger is invalid (e.g. no timing trigger, no LVL1...)
+       LVL1_TRG_DATA_VALID_OUT     => lvl1_trg_received_out,
+       TRG_TIMING_TRG_RECEIVED_IN      => timing_trg_found_in,
+       LVL1_TRG_TYPE_OUT               => lvl1_trg_type_out,
+       LVL1_TRG_NUMBER_OUT             => lvl1_trg_number_out,
+       LVL1_TRG_CODE_OUT               => lvl1_trg_code_out,
+       LVL1_TRG_INFORMATION_OUT        => lvl1_trg_information_out,
+       LVL1_ERROR_PATTERN_IN           => lvl1_error_pattern_in,
+       LVL1_TRG_RELEASE_IN             => lvl1_trg_release_in,
+       LVL1_INT_TRG_NUMBER_OUT         => open, -- internal trigger number from LVL1 endpoint
+       -- IPU Port
+       IPU_NUMBER_OUT                  => ipu_number_out,
+       IPU_READOUT_TYPE_OUT            => open, -- 4bit readout type
+       IPU_INFORMATION_OUT             => ipu_information_out,
+       IPU_START_READOUT_OUT           => ipu_start_readout_out,
+       IPU_DATA_IN                     => ipu_data_in,
+       IPU_DATAREADY_IN                => ipu_dataready_in,
+       IPU_READOUT_FINISHED_IN         => ipu_readout_finished_in,
+       IPU_READ_OUT                    => ipu_read_out,
+       IPU_LENGTH_IN                   => ipu_length_in,
+       IPU_ERROR_PATTERN_IN            => ipu_error_pattern_in,
+       -- Slow Control Data Port
+       REGIO_COMMON_STAT_REG_IN        => common_stat_reg,
+       REGIO_COMMON_CTRL_REG_OUT       => common_ctrl_reg,
+       REGIO_REGISTERS_IN              => regio_stat_regs,
+       REGIO_REGISTERS_OUT             => regio_ctrl_regs,
+       COMMON_STAT_REG_STROBE          => open,
+       COMMON_CTRL_REG_STROBE          => common_ctrl_reg_strobe, -- [1] means update on internal trigger number
+       STAT_REG_STROBE                 => open,
+       CTRL_REG_STROBE                 => open,
+       --following ports only used when using internal data port
+       REGIO_ADDR_OUT                  => regio_addr_out,
+       REGIO_READ_ENABLE_OUT           => regio_read_enable_out,
+       REGIO_WRITE_ENABLE_OUT          => regio_write_enable_out,
+       REGIO_DATA_OUT                  => regio_data_out,
+       REGIO_DATA_IN                   => regio_data_in,
+       REGIO_DATAREADY_IN              => regio_dataready_in,
+       REGIO_NO_MORE_DATA_IN           => regio_no_more_data_in,
+       REGIO_WRITE_ACK_IN              => regio_write_ack_in,
+       REGIO_UNKNOWN_ADDR_IN           => regio_unknown_addr_in,
+       REGIO_TIMEOUT_OUT               => regio_timeout_out,
+       --IDRAM is used if no 1-wire interface, onewire used otherwise
+       REGIO_IDRAM_DATA_IN             => x"0000", -- not used
+       REGIO_IDRAM_DATA_OUT            => open, -- not used
+       REGIO_IDRAM_ADDR_IN             => "000", -- not used
+       REGIO_IDRAM_WR_IN               => '0', -- not used
+       REGIO_ONEWIRE_INOUT             => onewire_inout,
+       REGIO_ONEWIRE_MONITOR_IN        => '1', -- not used
+       REGIO_ONEWIRE_MONITOR_OUT       => open, -- not used
+       -- New stuff?!?
+       GLOBAL_TIME_OUT                 => open,
+       LOCAL_TIME_OUT                  => open,
+       TIME_SINCE_LAST_TRG_OUT         => open,
+       TIMER_TICKS_OUT                 => open,
+       -- Status and debug
+       STAT_DEBUG_IPU                  => open,
+       STAT_DEBUG_1                    => stat_debug_1, --open,
+       STAT_DEBUG_2                    => open,
+       MED_STAT_OP                     => open,
+       CTRL_MPLEX                      => x"00000000",
+       IOBUF_CTRL_GEN                  => x"00000000_00000000_00000000_00000000",
+       STAT_ONEWIRE                    => open,
+       STAT_ADDR_DEBUG                 => open
+);
 
 -- Control register assignment
 
@@ -291,15 +298,17 @@ common_stat_reg(19 downto 0)                    <= common_stat_reg_in(19 downto
 common_ctrl_reg_out <= common_ctrl_reg;
 
 -- User status register
-regio_stat_regs <= status_in;
-control_out     <= regio_ctrl_regs;
+regio_stat_regs         <= status_in;
+control_out             <= regio_ctrl_regs;
+lvl1_int_trg_update_out <= common_ctrl_reg_strobe(1);
+lvl1_int_trg_number_out <= common_ctrl_reg(47 downto 32);
 
 -- FPGA LEDs
 led_link_stat <= not med_stat_op(9);       -- link status
-led_link_rxd  <= not med_stat_op(10);      -- not med_packet_num_in(2); -- data receive  
+led_link_rxd  <= not med_stat_op(10);      -- not med_packet_num_in(2); -- data receive
 led_link_txd  <= not med_stat_op(11);      -- data transmit
 link_bsm_out  <= med_stat_op(7 downto 4);  -- LSM state bits
 reset_out     <= med_stat_op(13);          -- TRB generated reset
 
 end architecture;
-                               
\ No newline at end of file
+                                                          
\ No newline at end of file
index 156043263354fe1d1b6470415230c3f72bb3b3a8..82f8856713f3850708ddd64800864ad410fde815 100644 (file)
@@ -10,741 +10,769 @@ use work.adcmv3_components.all;
 \r
 \r
 entity slave_bus is\r
-port( CLK_IN                                   : in    std_logic;\r
-         RESET_IN                                      : in    std_logic;\r
-         -- RegIO signals\r
-         REGIO_ADDR_IN                         : in    std_logic_vector(15 downto 0); -- address bus \r
-         REGIO_DATA_IN                         : in    std_logic_vector(31 downto 0); -- data from TRB endpoint\r
-         REGIO_DATA_OUT                        : out   std_logic_vector(31 downto 0); -- data to TRB endpoint\r
-         REGIO_READ_ENABLE_IN          : in    std_logic; -- read pulse\r
-         REGIO_WRITE_ENABLE_IN         : in    std_logic; -- write pulse\r
-         REGIO_TIMEOUT_IN                      : in    std_logic; -- access timed out\r
-         REGIO_DATAREADY_OUT           : out   std_logic; -- your data, master, as requested\r
-         REGIO_WRITE_ACK_OUT           : out   std_logic; -- data accepted\r
-         REGIO_NO_MORE_DATA_OUT        : out   std_logic; -- don't disturb me now\r
-         REGIO_UNKNOWN_ADDR_OUT        : out   std_logic; -- noone here to answer your request\r
-         -- I2C connections\r
-         SDA_IN                                        : in    std_logic;\r
-         SDA_OUT                                       : out   std_logic;\r
-         SCL_IN                                        : in    std_logic;\r
-         SCL_OUT                                       : out   std_logic;\r
-         -- 1Wire connections\r
-         ONEWIRE_START_IN                      : in    std_logic; -- start 1Wire scan (pulse)\r
-         ONEWIRE_INOUT                         : inout std_logic_vector(15 downto 0);\r
-         BP_ONEWIRE_INOUT                      : inout std_logic; -- 1Wire ID on backplane\r
-         -- SPI connections\r
-         SPI_CS_OUT                            : out   std_logic;\r
-         SPI_SCK_OUT                           : out   std_logic;\r
-         SPI_SDI_IN                            : in    std_logic;\r
-         SPI_SDO_OUT                           : out   std_logic;\r
-         -- ADC 0 SPI connections\r
-         SPI_ADC0_CS_OUT                       : out   std_logic;\r
-         SPI_ADC0_SCK_OUT                      : out   std_logic;\r
-         SPI_ADC0_SDO_OUT                      : out   std_logic;\r
-         ADC0_PLL_LOCKED_IN            : in    std_logic;\r
-         ADC0_PD_OUT                           : out   std_logic;\r
-         ADC0_RST_OUT                          : out   std_logic;\r
-         ADC0_DEL_OUT                          : out   std_logic_vector(3 downto 0);\r
-         ADC0_CLK_IN                           : in    std_logic;\r
-         ADC0_DATA_IN                          : in    std_logic_vector(11 downto 0);\r
-         ADC0_SEL_OUT                          : out   std_logic_vector(2 downto 0);\r
-         APV0_RST_OUT                          : out   std_logic;\r
-         -- ADC 1 SPI connections\r
-         SPI_ADC1_CS_OUT                       : out   std_logic;\r
-         SPI_ADC1_SCK_OUT                      : out   std_logic;\r
-         SPI_ADC1_SDO_OUT                      : out   std_logic;\r
-         ADC1_PLL_LOCKED_IN            : in    std_logic;\r
-         ADC1_PD_OUT                           : out   std_logic;\r
-         ADC1_RST_OUT                          : out   std_logic;\r
-         ADC1_DEL_OUT                          : out   std_logic_vector(3 downto 0);\r
-         ADC1_CLK_IN                           : in    std_logic;\r
-         ADC1_DATA_IN                          : in    std_logic_vector(11 downto 0);\r
-         ADC1_SEL_OUT                          : out   std_logic_vector(2 downto 0);\r
-         APV1_RST_OUT                          : out   std_logic;\r
-         -- User specific inputs / outputs\r
-         BACKPLANE_IN                          : in    std_logic_vector(2 downto 0);\r
-         -- pedestal interface\r
-         PED_ADDR_IN                           : in    std_logic_vector(6 downto 0); -- pedestal addressing from data handlers\r
-         PED_DATA_0_OUT                        : out   std_logic_vector(17 downto 0);\r
-         PED_DATA_1_OUT                        : out   std_logic_vector(17 downto 0);\r
-         PED_DATA_2_OUT                        : out   std_logic_vector(17 downto 0);\r
-         PED_DATA_3_OUT                        : out   std_logic_vector(17 downto 0);\r
-         PED_DATA_4_OUT                        : out   std_logic_vector(17 downto 0);\r
-         PED_DATA_5_OUT                        : out   std_logic_vector(17 downto 0);\r
-         PED_DATA_6_OUT                        : out   std_logic_vector(17 downto 0);\r
-         PED_DATA_7_OUT                        : out   std_logic_vector(17 downto 0);\r
-         PED_DATA_8_OUT                        : out   std_logic_vector(17 downto 0);\r
-         PED_DATA_9_OUT                        : out   std_logic_vector(17 downto 0);\r
-         PED_DATA_10_OUT                       : out   std_logic_vector(17 downto 0);\r
-         PED_DATA_11_OUT                       : out   std_logic_vector(17 downto 0);\r
-         PED_DATA_12_OUT                       : out   std_logic_vector(17 downto 0);\r
-         PED_DATA_13_OUT                       : out   std_logic_vector(17 downto 0);\r
-         PED_DATA_14_OUT                       : out   std_logic_vector(17 downto 0);\r
-         PED_DATA_15_OUT                       : out   std_logic_vector(17 downto 0);\r
-         -- threshold interface\r
-         THR_ADDR_IN                           : in    std_logic_vector(6 downto 0); -- threshold addressing from data handlers\r
-         THR_DATA_0_OUT                        : out   std_logic_vector(17 downto 0);\r
-         THR_DATA_1_OUT                        : out   std_logic_vector(17 downto 0);\r
-         THR_DATA_2_OUT                        : out   std_logic_vector(17 downto 0);\r
-         THR_DATA_3_OUT                        : out   std_logic_vector(17 downto 0);\r
-         THR_DATA_4_OUT                        : out   std_logic_vector(17 downto 0);\r
-         THR_DATA_5_OUT                        : out   std_logic_vector(17 downto 0);\r
-         THR_DATA_6_OUT                        : out   std_logic_vector(17 downto 0);\r
-         THR_DATA_7_OUT                        : out   std_logic_vector(17 downto 0);\r
-         THR_DATA_8_OUT                        : out   std_logic_vector(17 downto 0);\r
-         THR_DATA_9_OUT                        : out   std_logic_vector(17 downto 0);\r
-         THR_DATA_10_OUT                       : out   std_logic_vector(17 downto 0);\r
-         THR_DATA_11_OUT                       : out   std_logic_vector(17 downto 0);\r
-         THR_DATA_12_OUT                       : out   std_logic_vector(17 downto 0);\r
-         THR_DATA_13_OUT                       : out   std_logic_vector(17 downto 0);\r
-         THR_DATA_14_OUT                       : out   std_logic_vector(17 downto 0);\r
-         THR_DATA_15_OUT                       : out   std_logic_vector(17 downto 0);\r
-         -- APV control / status\r
-         CTRL_0_OUT                            : out   std_logic_vector(15 downto 0);\r
-         CTRL_1_OUT                            : out   std_logic_vector(15 downto 0);\r
-         CTRL_2_OUT                            : out   std_logic_vector(15 downto 0);\r
-         CTRL_3_OUT                            : out   std_logic_vector(15 downto 0);\r
-         CTRL_4_OUT                            : out   std_logic_vector(15 downto 0);\r
-         CTRL_5_OUT                            : out   std_logic_vector(15 downto 0);\r
-         CTRL_6_OUT                            : out   std_logic_vector(15 downto 0);\r
-         CTRL_7_OUT                            : out   std_logic_vector(15 downto 0);\r
-         CTRL_8_OUT                            : out   std_logic_vector(15 downto 0);\r
-         CTRL_9_OUT                            : out   std_logic_vector(15 downto 0);\r
-         CTRL_10_OUT                           : out   std_logic_vector(15 downto 0);\r
-         CTRL_11_OUT                           : out   std_logic_vector(15 downto 0);\r
-         CTRL_12_OUT                           : out   std_logic_vector(15 downto 0);\r
-         CTRL_13_OUT                           : out   std_logic_vector(15 downto 0);\r
-         CTRL_14_OUT                           : out   std_logic_vector(15 downto 0);\r
-         CTRL_15_OUT                           : out   std_logic_vector(15 downto 0);\r
-         STAT_0_IN                                     : in    std_logic_vector(15 downto 0);\r
-         STAT_1_IN                                     : in    std_logic_vector(15 downto 0);\r
-         STAT_2_IN                                     : in    std_logic_vector(15 downto 0);\r
-         STAT_3_IN                                     : in    std_logic_vector(15 downto 0);\r
-         STAT_4_IN                                     : in    std_logic_vector(15 downto 0);\r
-         STAT_5_IN                                     : in    std_logic_vector(15 downto 0);\r
-         STAT_6_IN                                     : in    std_logic_vector(15 downto 0);\r
-         STAT_7_IN                                     : in    std_logic_vector(15 downto 0);\r
-         STAT_8_IN                                     : in    std_logic_vector(15 downto 0);\r
-         STAT_9_IN                                     : in    std_logic_vector(15 downto 0);\r
-         STAT_10_IN                            : in    std_logic_vector(15 downto 0);\r
-         STAT_11_IN                            : in    std_logic_vector(15 downto 0);\r
-         STAT_12_IN                            : in    std_logic_vector(15 downto 0);\r
-         STAT_13_IN                            : in    std_logic_vector(15 downto 0);\r
-         STAT_14_IN                            : in    std_logic_vector(15 downto 0);\r
-         STAT_15_IN                            : in    std_logic_vector(15 downto 0);\r
-         -- some control signals\r
-         CTRL_LVL_OUT                          : out   std_logic_vector(31 downto 0);\r
-         CTRL_TRG_OUT                          : out   std_logic_vector(31 downto 0);\r
-         CTRL_PLL_OUT                          : out   std_logic_vector(15 downto 0);\r
-         STATUS_PLL_IN                         : in    std_logic_vector(15 downto 0);\r
-         -- temporary stuff\r
-         TEST_REG_IN                           : in    std_logic_vector(31 downto 0); -- just for testing!\r
-         TEST_REG_OUT                          : out   std_logic_vector(31 downto 0); -- just for testing!\r
-         -- Debug\r
-         DEBUG_OUT                                     : out   std_logic_vector(63 downto 0);\r
-         STAT                                          : out   std_logic_vector(31 downto 0)\r
-       );\r
+port(\r
+       CLK_IN                  : in    std_logic;\r
+       RESET_IN                : in    std_logic;\r
+       -- RegIO signals\r
+       REGIO_ADDR_IN           : in    std_logic_vector(15 downto 0); -- address bus\r
+       REGIO_DATA_IN           : in    std_logic_vector(31 downto 0); -- data from TRB endpoint\r
+       REGIO_DATA_OUT          : out   std_logic_vector(31 downto 0); -- data to TRB endpoint\r
+       REGIO_READ_ENABLE_IN    : in    std_logic; -- read pulse\r
+       REGIO_WRITE_ENABLE_IN   : in    std_logic; -- write pulse\r
+       REGIO_TIMEOUT_IN        : in    std_logic; -- access timed out\r
+       REGIO_DATAREADY_OUT     : out   std_logic; -- your data, master, as requested\r
+       REGIO_WRITE_ACK_OUT     : out   std_logic; -- data accepted\r
+       REGIO_NO_MORE_DATA_OUT  : out   std_logic; -- don't disturb me now\r
+       REGIO_UNKNOWN_ADDR_OUT  : out   std_logic; -- noone here to answer your request\r
+       -- I2C connections\r
+       SDA_IN                  : in    std_logic;\r
+       SDA_OUT                 : out   std_logic;\r
+       SCL_IN                  : in    std_logic;\r
+       SCL_OUT                 : out   std_logic;\r
+       -- 1Wire connections\r
+       ONEWIRE_START_IN        : in    std_logic; -- start 1Wire scan (pulse)\r
+       ONEWIRE_INOUT           : inout std_logic_vector(15 downto 0);\r
+       BP_ONEWIRE_INOUT        : inout std_logic; -- 1Wire ID on backplane\r
+       -- SPI connections\r
+       SPI_CS_OUT              : out   std_logic;\r
+       SPI_SCK_OUT             : out   std_logic;\r
+       SPI_SDI_IN              : in    std_logic;\r
+       SPI_SDO_OUT             : out   std_logic;\r
+       -- ADC 0 SPI connections\r
+       SPI_ADC0_CS_OUT         : out   std_logic;\r
+       SPI_ADC0_SCK_OUT        : out   std_logic;\r
+       SPI_ADC0_SDO_OUT        : out   std_logic;\r
+       ADC0_PLL_LOCKED_IN      : in    std_logic;\r
+       ADC0_PD_OUT             : out   std_logic;\r
+       ADC0_RST_OUT            : out   std_logic;\r
+       ADC0_DEL_OUT            : out   std_logic_vector(3 downto 0);\r
+       ADC0_CLK_IN             : in    std_logic;\r
+       ADC0_DATA_IN            : in    std_logic_vector(11 downto 0);\r
+       ADC0_SEL_OUT            : out   std_logic_vector(2 downto 0);\r
+       APV0_RST_OUT            : out   std_logic;\r
+       -- ADC 1 SPI connections\r
+       SPI_ADC1_CS_OUT         : out   std_logic;\r
+       SPI_ADC1_SCK_OUT        : out   std_logic;\r
+       SPI_ADC1_SDO_OUT        : out   std_logic;\r
+       ADC1_PLL_LOCKED_IN      : in    std_logic;\r
+       ADC1_PD_OUT             : out   std_logic;\r
+       ADC1_RST_OUT            : out   std_logic;\r
+       ADC1_DEL_OUT            : out   std_logic_vector(3 downto 0);\r
+       ADC1_CLK_IN             : in    std_logic;\r
+       ADC1_DATA_IN            : in    std_logic_vector(11 downto 0);\r
+       ADC1_SEL_OUT            : out   std_logic_vector(2 downto 0);\r
+       APV1_RST_OUT            : out   std_logic;\r
+       -- User specific inputs / outputs\r
+       BACKPLANE_IN            : in    std_logic_vector(2 downto 0);\r
+       -- pedestal interface\r
+       PED_ADDR_IN             : in    std_logic_vector(6 downto 0); -- pedestal addressing from data handlers\r
+       PED_DATA_0_OUT          : out   std_logic_vector(17 downto 0);\r
+       PED_DATA_1_OUT          : out   std_logic_vector(17 downto 0);\r
+       PED_DATA_2_OUT          : out   std_logic_vector(17 downto 0);\r
+       PED_DATA_3_OUT          : out   std_logic_vector(17 downto 0);\r
+       PED_DATA_4_OUT          : out   std_logic_vector(17 downto 0);\r
+       PED_DATA_5_OUT          : out   std_logic_vector(17 downto 0);\r
+       PED_DATA_6_OUT          : out   std_logic_vector(17 downto 0);\r
+       PED_DATA_7_OUT          : out   std_logic_vector(17 downto 0);\r
+       PED_DATA_8_OUT          : out   std_logic_vector(17 downto 0);\r
+       PED_DATA_9_OUT          : out   std_logic_vector(17 downto 0);\r
+       PED_DATA_10_OUT         : out   std_logic_vector(17 downto 0);\r
+       PED_DATA_11_OUT         : out   std_logic_vector(17 downto 0);\r
+       PED_DATA_12_OUT         : out   std_logic_vector(17 downto 0);\r
+       PED_DATA_13_OUT         : out   std_logic_vector(17 downto 0);\r
+       PED_DATA_14_OUT         : out   std_logic_vector(17 downto 0);\r
+       PED_DATA_15_OUT         : out   std_logic_vector(17 downto 0);\r
+       -- threshold interface\r
+       THR_ADDR_IN             : in    std_logic_vector(6 downto 0); -- threshold addressing from data handlers\r
+       THR_DATA_0_OUT          : out   std_logic_vector(17 downto 0);\r
+       THR_DATA_1_OUT          : out   std_logic_vector(17 downto 0);\r
+       THR_DATA_2_OUT          : out   std_logic_vector(17 downto 0);\r
+       THR_DATA_3_OUT          : out   std_logic_vector(17 downto 0);\r
+       THR_DATA_4_OUT          : out   std_logic_vector(17 downto 0);\r
+       THR_DATA_5_OUT          : out   std_logic_vector(17 downto 0);\r
+       THR_DATA_6_OUT          : out   std_logic_vector(17 downto 0);\r
+       THR_DATA_7_OUT          : out   std_logic_vector(17 downto 0);\r
+       THR_DATA_8_OUT          : out   std_logic_vector(17 downto 0);\r
+       THR_DATA_9_OUT          : out   std_logic_vector(17 downto 0);\r
+       THR_DATA_10_OUT         : out   std_logic_vector(17 downto 0);\r
+       THR_DATA_11_OUT         : out   std_logic_vector(17 downto 0);\r
+       THR_DATA_12_OUT         : out   std_logic_vector(17 downto 0);\r
+       THR_DATA_13_OUT         : out   std_logic_vector(17 downto 0);\r
+       THR_DATA_14_OUT         : out   std_logic_vector(17 downto 0);\r
+       THR_DATA_15_OUT         : out   std_logic_vector(17 downto 0);\r
+       -- APV control / status\r
+       CTRL_0_OUT              : out   std_logic_vector(15 downto 0);\r
+       CTRL_1_OUT              : out   std_logic_vector(15 downto 0);\r
+       CTRL_2_OUT              : out   std_logic_vector(15 downto 0);\r
+       CTRL_3_OUT              : out   std_logic_vector(15 downto 0);\r
+       CTRL_4_OUT              : out   std_logic_vector(15 downto 0);\r
+       CTRL_5_OUT              : out   std_logic_vector(15 downto 0);\r
+       CTRL_6_OUT              : out   std_logic_vector(15 downto 0);\r
+       CTRL_7_OUT              : out   std_logic_vector(15 downto 0);\r
+       CTRL_8_OUT              : out   std_logic_vector(15 downto 0);\r
+       CTRL_9_OUT              : out   std_logic_vector(15 downto 0);\r
+       CTRL_10_OUT             : out   std_logic_vector(15 downto 0);\r
+       CTRL_11_OUT             : out   std_logic_vector(15 downto 0);\r
+       CTRL_12_OUT             : out   std_logic_vector(15 downto 0);\r
+       CTRL_13_OUT             : out   std_logic_vector(15 downto 0);\r
+       CTRL_14_OUT             : out   std_logic_vector(15 downto 0);\r
+       CTRL_15_OUT             : out   std_logic_vector(15 downto 0);\r
+       STAT_0_IN               : in    std_logic_vector(15 downto 0);\r
+       STAT_1_IN               : in    std_logic_vector(15 downto 0);\r
+       STAT_2_IN               : in    std_logic_vector(15 downto 0);\r
+       STAT_3_IN               : in    std_logic_vector(15 downto 0);\r
+       STAT_4_IN               : in    std_logic_vector(15 downto 0);\r
+       STAT_5_IN               : in    std_logic_vector(15 downto 0);\r
+       STAT_6_IN               : in    std_logic_vector(15 downto 0);\r
+       STAT_7_IN               : in    std_logic_vector(15 downto 0);\r
+       STAT_8_IN               : in    std_logic_vector(15 downto 0);\r
+       STAT_9_IN               : in    std_logic_vector(15 downto 0);\r
+       STAT_10_IN              : in    std_logic_vector(15 downto 0);\r
+       STAT_11_IN              : in    std_logic_vector(15 downto 0);\r
+       STAT_12_IN              : in    std_logic_vector(15 downto 0);\r
+       STAT_13_IN              : in    std_logic_vector(15 downto 0);\r
+       STAT_14_IN              : in    std_logic_vector(15 downto 0);\r
+       STAT_15_IN              : in    std_logic_vector(15 downto 0);\r
+       -- some control signals\r
+       CTRL_LVL_OUT            : out   std_logic_vector(31 downto 0);\r
+       CTRL_TRG_OUT            : out   std_logic_vector(31 downto 0);\r
+       CTRL_PLL_OUT            : out   std_logic_vector(15 downto 0);\r
+       STATUS_PLL_IN           : in    std_logic_vector(15 downto 0);\r
+       -- temporary stuff\r
+       TEST_REG_IN             : in    std_logic_vector(31 downto 0); -- just for testing!\r
+       TEST_REG_OUT            : out   std_logic_vector(31 downto 0); -- just for testing!\r
+       -- Debug\r
+       DEBUG_OUT               : out   std_logic_vector(63 downto 0);\r
+       STAT                    : out   std_logic_vector(31 downto 0)\r
+);\r
 end entity;\r
 \r
 architecture Behavioral of slave_bus is\r
 \r
-       -- Signals\r
-       signal slv_read                         : std_logic_vector(15-1 downto 0);\r
-       signal slv_write                        : std_logic_vector(15-1 downto 0);\r
-       signal slv_busy                         : std_logic_vector(15-1 downto 0);\r
-       signal slv_ack                          : std_logic_vector(15-1 downto 0);\r
-       signal slv_addr                         : std_logic_vector(15*16-1 downto 0);\r
-       signal slv_data_rd                      : std_logic_vector(15*32-1 downto 0);\r
-       signal slv_data_wr                      : std_logic_vector(15*32-1 downto 0);\r
-       \r
-       -- SPI controller BRAM lines\r
-       signal spi_bram_addr            : std_logic_vector(7 downto 0);\r
-       signal spi_bram_wr_d            : std_logic_vector(7 downto 0);\r
-       signal spi_bram_rd_d            : std_logic_vector(7 downto 0);\r
-       signal spi_bram_we                      : std_logic;\r
-       \r
-       signal spi_cs                           : std_logic;\r
-       signal spi_sck                          : std_logic;\r
-       signal spi_sdi                          : std_logic;\r
-       signal spi_sdo                          : std_logic;\r
-       signal spi_debug                        : std_logic_vector(31 downto 0);\r
-       \r
-       signal ctrl_lvl                         : std_logic_vector(31 downto 0);\r
-       signal ctrl_trg                         : std_logic_vector(31 downto 0);\r
-       signal ctrl_pll                         : std_logic_vector(15 downto 0);\r
-       \r
-       signal debug                            : std_logic_vector(63 downto 0);\r
-       signal onewire_debug            : std_logic_vector(63 downto 0);\r
-       \r
+-- Signals\r
+signal slv_read             : std_logic_vector(15-1 downto 0);\r
+signal slv_write            : std_logic_vector(15-1 downto 0);\r
+signal slv_busy             : std_logic_vector(15-1 downto 0);\r
+signal slv_ack              : std_logic_vector(15-1 downto 0);\r
+signal slv_addr             : std_logic_vector(15*16-1 downto 0);\r
+signal slv_data_rd          : std_logic_vector(15*32-1 downto 0);\r
+signal slv_data_wr          : std_logic_vector(15*32-1 downto 0);\r
+\r
+-- SPI controller BRAM lines\r
+signal spi_bram_addr        : std_logic_vector(7 downto 0);\r
+signal spi_bram_wr_d        : std_logic_vector(7 downto 0);\r
+signal spi_bram_rd_d        : std_logic_vector(7 downto 0);\r
+signal spi_bram_we          : std_logic;\r
+\r
+signal spi_cs               : std_logic;\r
+signal spi_sck              : std_logic;\r
+signal spi_sdi              : std_logic;\r
+signal spi_sdo              : std_logic;\r
+signal spi_debug            : std_logic_vector(31 downto 0);\r
+\r
+signal ctrl_lvl             : std_logic_vector(31 downto 0);\r
+signal ctrl_trg             : std_logic_vector(31 downto 0);\r
+signal ctrl_pll             : std_logic_vector(15 downto 0);\r
+\r
+signal debug                : std_logic_vector(63 downto 0);\r
+signal onewire_debug        : std_logic_vector(63 downto 0);\r
+\r
 begin\r
 \r
 -- Bus handler: acts as bridge between RegIO and the FPGA internal slave bus\r
 THE_BUS_HANDLER: trb_net16_regio_bus_handler\r
-generic map( PORT_NUMBER               => 15,\r
-                        PORT_ADDRESSES         => ( 0 => x"a000", -- pedestal memories  \r
-                                                                        1 => x"a800", -- threshold memories\r
-                                                                        2 => x"8040", -- I2C master\r
-                                                                        3 => x"c000", -- 1Wire master + memory\r
-                                                                        4 => x"d000", -- SPI master\r
-                                                                        5 => x"d100", -- SPI data memory \r
-                                                                        6 => x"d010", -- ADC0 SPI \r
-                                                                        7 => x"d020", -- ADC1 SPI\r
-                                                                        8 => x"b000", -- APV control / status\r
-                                                9 => x"b010", -- ADC level settings\r
-                                               10 => x"b020", -- trigger settings\r
-                                               11 => x"b030", -- PLL settings\r
-                                               12 => x"f000", -- ADC 0 snooper\r
-                                               13 => x"f800", -- ADC 1 snooper\r
-                                               14 => x"8000", -- test register (busy)\r
-                                               others => x"0000"),                     \r
-                        PORT_ADDR_MASK         => ( 0 => 11, -- pedestal memories\r
-                                                                        1 => 11, -- threshold memories\r
-                                                                        2 => 0,  -- I2C master\r
-                                                                        3 => 6,  -- 1Wire master + memory\r
-                                                                        4 => 1,  -- SPI master\r
-                                                                        5 => 6,  -- SPI data memory\r
-                                                                        6 => 0,  -- ADC0 SPI\r
-                                                7 => 0,  -- ADC1 SPI\r
-                                                8 => 4,  -- APV control / status \r
-                                                9 => 0,  -- ADC level settings\r
-                                               10 => 0,  -- trigger settings\r
-                                               11 => 0,  -- PLL settings\r
-                                               12 => 10, -- ADC 0 snooper\r
-                                               13 => 10, -- ADC 1 snooper\r
-                                               14 => 0,  -- test register (normal)\r
-                                               others => 0)\r
-                 )\r
-port map( CLK                                  => clk_in,\r
-                 RESET                                 => reset_in,\r
-                 DAT_ADDR_IN                   => regio_addr_in,\r
-                 DAT_DATA_IN                   => regio_data_in,\r
-                 DAT_DATA_OUT                  => regio_data_out,\r
-                 DAT_READ_ENABLE_IN    => regio_read_enable_in,\r
-                 DAT_WRITE_ENABLE_IN   => regio_write_enable_in,\r
-                 DAT_TIMEOUT_IN                => regio_timeout_in,\r
-                 DAT_DATAREADY_OUT             => regio_dataready_out,\r
-                 DAT_WRITE_ACK_OUT             => regio_write_ack_out,\r
-                 DAT_NO_MORE_DATA_OUT  => regio_no_more_data_out,\r
-                 DAT_UNKNOWN_ADDR_OUT  => regio_unknown_addr_out,\r
-                 -- pedestal memories\r
-                 BUS_READ_ENABLE_OUT(0)                                => slv_read(0),\r
-                 BUS_WRITE_ENABLE_OUT(0)                               => slv_write(0),\r
-                 BUS_DATA_OUT(0*32+31 downto 0*32)             => slv_data_wr(0*32+31 downto 0*32),\r
-                 BUS_DATA_IN(0*32+31 downto 0*32)              => slv_data_rd(0*32+31 downto 0*32),  \r
-                 BUS_ADDR_OUT(0*16+15 downto 0*16)             => slv_addr(0*16+15 downto 0*16),\r
-                 BUS_TIMEOUT_OUT(0)                                    => open,\r
-                 BUS_DATAREADY_IN(0)                                   => slv_ack(0),\r
-                 BUS_WRITE_ACK_IN(0)                                   => slv_ack(0),\r
-                 BUS_NO_MORE_DATA_IN(0)                                => slv_busy(0),\r
-                 BUS_UNKNOWN_ADDR_IN(0)                                => '0',\r
-                 -- threshold memories\r
-                 BUS_READ_ENABLE_OUT(1)                                => slv_read(1),\r
-                 BUS_WRITE_ENABLE_OUT(1)                               => slv_write(1),\r
-                 BUS_DATA_OUT(1*32+31 downto 1*32)             => slv_data_wr(1*32+31 downto 1*32),\r
-                 BUS_DATA_IN(1*32+31 downto 1*32)              => slv_data_rd(1*32+31 downto 1*32),  \r
-                 BUS_ADDR_OUT(1*16+15 downto 1*16)             => slv_addr(1*16+15 downto 1*16),\r
-                 BUS_TIMEOUT_OUT(1)                                    => open,\r
-                 BUS_DATAREADY_IN(1)                                   => slv_ack(1),\r
-                 BUS_WRITE_ACK_IN(1)                                   => slv_ack(1),\r
-                 BUS_NO_MORE_DATA_IN(1)                                => slv_busy(1),\r
-                 BUS_UNKNOWN_ADDR_IN(1)                                => '0',\r
-                 -- I2C master\r
-                 BUS_READ_ENABLE_OUT(2)                                => slv_read(2),\r
-                 BUS_WRITE_ENABLE_OUT(2)                               => slv_write(2),\r
-                 BUS_DATA_OUT(2*32+31 downto 2*32)             => slv_data_wr(2*32+31 downto 2*32),\r
-                 BUS_DATA_IN(2*32+31 downto 2*32)              => slv_data_rd(2*32+31 downto 2*32),  \r
-                 BUS_ADDR_OUT(2*16+15 downto 2*16)             => open,\r
-                 BUS_TIMEOUT_OUT(2)                                    => open,\r
-                 BUS_DATAREADY_IN(2)                                   => slv_ack(2),\r
-                 BUS_WRITE_ACK_IN(2)                                   => slv_ack(2),\r
-                 BUS_NO_MORE_DATA_IN(2)                                => slv_busy(2),\r
-                 BUS_UNKNOWN_ADDR_IN(2)                                => '0',\r
-                 -- OneWire master\r
-                 BUS_READ_ENABLE_OUT(3)                                => slv_read(3),\r
-                 BUS_WRITE_ENABLE_OUT(3)                               => slv_write(3),\r
-                 BUS_DATA_OUT(3*32+31 downto 3*32)             => slv_data_wr(3*32+31 downto 3*32),\r
-                 BUS_DATA_IN(3*32+31 downto 3*32)              => slv_data_rd(3*32+31 downto 3*32),  \r
-                 BUS_ADDR_OUT(3*16+15 downto 3*16)             => slv_addr(3*16+15 downto 3*16),\r
-                 BUS_TIMEOUT_OUT(3)                                    => open,\r
-                 BUS_DATAREADY_IN(3)                                   => slv_ack(3),\r
-                 BUS_WRITE_ACK_IN(3)                                   => slv_ack(3),\r
-                 BUS_NO_MORE_DATA_IN(3)                                => slv_busy(3),\r
-                 BUS_UNKNOWN_ADDR_IN(3)                                => '0',\r
-                 -- SPI control registers\r
-                 BUS_READ_ENABLE_OUT(4)                                => slv_read(4),\r
-                 BUS_WRITE_ENABLE_OUT(4)                               => slv_write(4),\r
-                 BUS_DATA_OUT(4*32+31 downto 4*32)             => slv_data_wr(4*32+31 downto 4*32),\r
-                 BUS_DATA_IN(4*32+31 downto 4*32)              => slv_data_rd(4*32+31 downto 4*32),  \r
-                 BUS_ADDR_OUT(4*16+15 downto 4*16)             => slv_addr(4*16+15 downto 4*16),\r
-                 BUS_TIMEOUT_OUT(4)                                    => open,\r
-                 BUS_DATAREADY_IN(4)                                   => slv_ack(4),\r
-                 BUS_WRITE_ACK_IN(4)                                   => slv_ack(4),\r
-                 BUS_NO_MORE_DATA_IN(4)                                => slv_busy(4),\r
-                 BUS_UNKNOWN_ADDR_IN(4)                                => '0',\r
-                 -- SPI data memory\r
-                 BUS_READ_ENABLE_OUT(5)                                => slv_read(5),\r
-                 BUS_WRITE_ENABLE_OUT(5)                               => slv_write(5),\r
-                 BUS_DATA_OUT(5*32+31 downto 5*32)             => slv_data_wr(5*32+31 downto 5*32),\r
-                 BUS_DATA_IN(5*32+31 downto 5*32)              => slv_data_rd(5*32+31 downto 5*32),  \r
-                 BUS_ADDR_OUT(5*16+15 downto 5*16)             => slv_addr(5*16+15 downto 5*16),\r
-                 BUS_TIMEOUT_OUT(5)                                    => open,\r
-                 BUS_DATAREADY_IN(5)                                   => slv_ack(5),\r
-                 BUS_WRITE_ACK_IN(5)                                   => slv_ack(5),\r
-                 BUS_NO_MORE_DATA_IN(5)                                => slv_busy(5),\r
-                 BUS_UNKNOWN_ADDR_IN(5)                                => '0',\r
-                 -- ADC 0 SPI control registers\r
-                 BUS_READ_ENABLE_OUT(6)                                => slv_read(6),\r
-                 BUS_WRITE_ENABLE_OUT(6)                               => slv_write(6),\r
-                 BUS_DATA_OUT(6*32+31 downto 6*32)             => slv_data_wr(6*32+31 downto 6*32),\r
-                 BUS_DATA_IN(6*32+31 downto 6*32)              => slv_data_rd(6*32+31 downto 6*32),  \r
-                 BUS_ADDR_OUT(6*16+15 downto 6*16)             => open,\r
-                 BUS_TIMEOUT_OUT(6)                                    => open,\r
-                 BUS_DATAREADY_IN(6)                                   => slv_ack(6),\r
-                 BUS_WRITE_ACK_IN(6)                                   => slv_ack(6),\r
-                 BUS_NO_MORE_DATA_IN(6)                                => slv_busy(6),\r
-                 BUS_UNKNOWN_ADDR_IN(6)                                => '0',\r
-                 -- ADC 1 SPI control registers\r
-                 BUS_READ_ENABLE_OUT(7)                                => slv_read(7),\r
-                 BUS_WRITE_ENABLE_OUT(7)                               => slv_write(7),\r
-                 BUS_DATA_OUT(7*32+31 downto 7*32)             => slv_data_wr(7*32+31 downto 7*32),\r
-                 BUS_DATA_IN(7*32+31 downto 7*32)              => slv_data_rd(7*32+31 downto 7*32),  \r
-                 BUS_ADDR_OUT(7*16+15 downto 7*16)             => open,\r
-                 BUS_TIMEOUT_OUT(7)                                    => open,\r
-                 BUS_DATAREADY_IN(7)                                   => slv_ack(7),\r
-                 BUS_WRITE_ACK_IN(7)                                   => slv_ack(7),\r
-                 BUS_NO_MORE_DATA_IN(7)                                => slv_busy(7),\r
-                 BUS_UNKNOWN_ADDR_IN(7)                                => '0',\r
-                 -- APV control / status registers\r
-                 BUS_READ_ENABLE_OUT(8)                                => slv_read(8),\r
-                 BUS_WRITE_ENABLE_OUT(8)                               => slv_write(8),\r
-                 BUS_DATA_OUT(8*32+31 downto 8*32)             => slv_data_wr(8*32+31 downto 8*32),\r
-                 BUS_DATA_IN(8*32+31 downto 8*32)              => slv_data_rd(8*32+31 downto 8*32),  \r
-                 BUS_ADDR_OUT(8*16+15 downto 8*16)             => slv_addr(8*16+15 downto 8*16),\r
-                 BUS_TIMEOUT_OUT(8)                                    => open,\r
-                 BUS_DATAREADY_IN(8)                                   => slv_ack(8),\r
-                 BUS_WRITE_ACK_IN(8)                                   => slv_ack(8),\r
-                 BUS_NO_MORE_DATA_IN(8)                                => slv_busy(8),\r
-                 BUS_UNKNOWN_ADDR_IN(8)                                => '0',\r
-                 -- ADC / PLL / trigger ctrl register\r
-                 BUS_READ_ENABLE_OUT(11 downto 9)              => slv_read(11 downto 9),\r
-                 BUS_WRITE_ENABLE_OUT(11 downto 9)             => slv_write(11 downto 9),\r
-                 BUS_DATA_OUT(11*32+31 downto 9*32)    => slv_data_wr(11*32+31 downto 9*32),\r
-                 BUS_DATA_IN(11*32+31 downto 9*32)             => slv_data_rd(11*32+31 downto 9*32),  \r
-                 BUS_ADDR_OUT(11*16+15 downto 9*16)    => open,\r
-                 BUS_TIMEOUT_OUT(11 downto 9)                  => open,\r
-                 BUS_DATAREADY_IN(11 downto 9)                 => slv_ack(11 downto 9),\r
-                 BUS_WRITE_ACK_IN(11 downto 9)                 => slv_ack(11 downto 9),\r
-                 BUS_NO_MORE_DATA_IN(11 downto 9)              => slv_busy(11 downto 9),\r
-                 BUS_UNKNOWN_ADDR_IN(11 downto 9)              => (others => '0'),\r
-                 -- ADC0 snooper\r
-                 BUS_READ_ENABLE_OUT(12)                               => slv_read(12),\r
-                 BUS_WRITE_ENABLE_OUT(12)                              => slv_write(12),\r
-                 BUS_DATA_OUT(12*32+31 downto 12*32)   => slv_data_wr(12*32+31 downto 12*32),\r
-                 BUS_DATA_IN(12*32+31 downto 12*32)    => slv_data_rd(12*32+31 downto 12*32),  \r
-                 BUS_ADDR_OUT(12*16+15 downto 12*16)   => slv_addr(12*16+15 downto 12*16),\r
-                 BUS_TIMEOUT_OUT(12)                                   => open,\r
-                 BUS_DATAREADY_IN(12)                                  => slv_ack(12),\r
-                 BUS_WRITE_ACK_IN(12)                                  => slv_ack(12),\r
-                 BUS_NO_MORE_DATA_IN(12)                               => slv_busy(12),\r
-                 BUS_UNKNOWN_ADDR_IN(12)                               => '0',\r
-                 -- ADC1 snooper\r
-                 BUS_READ_ENABLE_OUT(13)                               => slv_read(13),\r
-                 BUS_WRITE_ENABLE_OUT(13)                              => slv_write(13),\r
-                 BUS_DATA_OUT(13*32+31 downto 13*32)   => slv_data_wr(13*32+31 downto 13*32),\r
-                 BUS_DATA_IN(13*32+31 downto 13*32)    => slv_data_rd(13*32+31 downto 13*32),  \r
-                 BUS_ADDR_OUT(13*16+15 downto 13*16)   => slv_addr(13*16+15 downto 13*16),\r
-                 BUS_TIMEOUT_OUT(13)                                   => open,\r
-                 BUS_DATAREADY_IN(13)                                  => slv_ack(13),\r
-                 BUS_WRITE_ACK_IN(13)                                  => slv_ack(13),\r
-                 BUS_NO_MORE_DATA_IN(13)                               => slv_busy(13),\r
-                 BUS_UNKNOWN_ADDR_IN(13)                               => '0',\r
-                 -- Test register\r
-                 BUS_READ_ENABLE_OUT(14)                               => slv_read(14),\r
-                 BUS_WRITE_ENABLE_OUT(14)                              => slv_write(14),\r
-                 BUS_DATA_OUT(14*32+31 downto 14*32)   => slv_data_wr(14*32+31 downto 14*32),\r
-                 BUS_DATA_IN(14*32+31 downto 14*32)    => slv_data_rd(14*32+31 downto 14*32),  \r
-                 BUS_ADDR_OUT(14*16+15 downto 14*16)   => open,\r
-                 BUS_TIMEOUT_OUT(14)                                   => open,\r
-                 BUS_DATAREADY_IN(14)                                  => slv_ack(14),\r
-                 BUS_WRITE_ACK_IN(14)                                  => slv_ack(14),\r
-                 BUS_NO_MORE_DATA_IN(14)                               => slv_busy(14),\r
-                 BUS_UNKNOWN_ADDR_IN(14)                               => '0',\r
-                 -- debug\r
-                 STAT_DEBUG                    => stat\r
-           );\r
+generic map(\r
+       PORT_NUMBER         => 15,\r
+       PORT_ADDRESSES      => ( 0 => x"a000", -- pedestal memories\r
+                                                        1 => x"a800", -- threshold memories\r
+                                                        2 => x"8040", -- I2C master\r
+                                                        3 => x"c000", -- 1Wire master + memory\r
+                                                        4 => x"d000", -- SPI master\r
+                                                        5 => x"d100", -- SPI data memory\r
+                                                        6 => x"d010", -- ADC0 SPI\r
+                                                        7 => x"d020", -- ADC1 SPI\r
+                                                        8 => x"b000", -- APV control / status\r
+                                                        9 => x"b010", -- ADC level settings\r
+                                                       10 => x"b020", -- trigger settings\r
+                                                       11 => x"b030", -- PLL settings\r
+                                                       12 => x"f000", -- ADC 0 snooper\r
+                                                       13 => x"f800", -- ADC 1 snooper\r
+                                                       14 => x"8000", -- test register (busy)\r
+                                                       others => x"0000"),\r
+       PORT_ADDR_MASK      => ( 0 => 11, -- pedestal memories\r
+                                                        1 => 11, -- threshold memories\r
+                                                        2 => 0,  -- I2C master\r
+                                                        3 => 6,  -- 1Wire master + memory\r
+                                                        4 => 1,  -- SPI master\r
+                                                        5 => 6,  -- SPI data memory\r
+                                                        6 => 0,  -- ADC0 SPI\r
+                                                        7 => 0,  -- ADC1 SPI\r
+                                                        8 => 4,  -- APV control / status\r
+                                                        9 => 0,  -- ADC level settings\r
+                                                       10 => 0,  -- trigger settings\r
+                                                       11 => 0,  -- PLL settings\r
+                                                       12 => 10, -- ADC 0 snooper\r
+                                                       13 => 10, -- ADC 1 snooper\r
+                                                       14 => 0,  -- test register (normal)\r
+                                                       others => 0)\r
+)\r
+port map(\r
+       CLK                                 => clk_in,\r
+       RESET                               => reset_in,\r
+       DAT_ADDR_IN                         => regio_addr_in,\r
+       DAT_DATA_IN                         => regio_data_in,\r
+       DAT_DATA_OUT                        => regio_data_out,\r
+       DAT_READ_ENABLE_IN                  => regio_read_enable_in,\r
+       DAT_WRITE_ENABLE_IN                 => regio_write_enable_in,\r
+       DAT_TIMEOUT_IN                      => regio_timeout_in,\r
+       DAT_DATAREADY_OUT                   => regio_dataready_out,\r
+       DAT_WRITE_ACK_OUT                   => regio_write_ack_out,\r
+       DAT_NO_MORE_DATA_OUT                => regio_no_more_data_out,\r
+       DAT_UNKNOWN_ADDR_OUT                => regio_unknown_addr_out,\r
+       -- pedestal memories\r
+       BUS_READ_ENABLE_OUT(0)              => slv_read(0),\r
+       BUS_WRITE_ENABLE_OUT(0)             => slv_write(0),\r
+       BUS_DATA_OUT(0*32+31 downto 0*32)   => slv_data_wr(0*32+31 downto 0*32),\r
+       BUS_DATA_IN(0*32+31 downto 0*32)    => slv_data_rd(0*32+31 downto 0*32),\r
+       BUS_ADDR_OUT(0*16+15 downto 0*16)   => slv_addr(0*16+15 downto 0*16),\r
+       BUS_TIMEOUT_OUT(0)                  => open,\r
+       BUS_DATAREADY_IN(0)                 => slv_ack(0),\r
+       BUS_WRITE_ACK_IN(0)                 => slv_ack(0),\r
+       BUS_NO_MORE_DATA_IN(0)              => slv_busy(0),\r
+       BUS_UNKNOWN_ADDR_IN(0)              => '0',\r
+       -- threshold memories\r
+       BUS_READ_ENABLE_OUT(1)              => slv_read(1),\r
+       BUS_WRITE_ENABLE_OUT(1)             => slv_write(1),\r
+       BUS_DATA_OUT(1*32+31 downto 1*32)   => slv_data_wr(1*32+31 downto 1*32),\r
+       BUS_DATA_IN(1*32+31 downto 1*32)    => slv_data_rd(1*32+31 downto 1*32),\r
+       BUS_ADDR_OUT(1*16+15 downto 1*16)   => slv_addr(1*16+15 downto 1*16),\r
+       BUS_TIMEOUT_OUT(1)                  => open,\r
+       BUS_DATAREADY_IN(1)                 => slv_ack(1),\r
+       BUS_WRITE_ACK_IN(1)                 => slv_ack(1),\r
+       BUS_NO_MORE_DATA_IN(1)              => slv_busy(1),\r
+       BUS_UNKNOWN_ADDR_IN(1)              => '0',\r
+       -- I2C master\r
+       BUS_READ_ENABLE_OUT(2)              => slv_read(2),\r
+       BUS_WRITE_ENABLE_OUT(2)             => slv_write(2),\r
+       BUS_DATA_OUT(2*32+31 downto 2*32)   => slv_data_wr(2*32+31 downto 2*32),\r
+       BUS_DATA_IN(2*32+31 downto 2*32)    => slv_data_rd(2*32+31 downto 2*32),\r
+       BUS_ADDR_OUT(2*16+15 downto 2*16)   => open,\r
+       BUS_TIMEOUT_OUT(2)                  => open,\r
+       BUS_DATAREADY_IN(2)                 => slv_ack(2),\r
+       BUS_WRITE_ACK_IN(2)                 => slv_ack(2),\r
+       BUS_NO_MORE_DATA_IN(2)              => slv_busy(2),\r
+       BUS_UNKNOWN_ADDR_IN(2)              => '0',\r
+       -- OneWire master\r
+       BUS_READ_ENABLE_OUT(3)              => slv_read(3),\r
+       BUS_WRITE_ENABLE_OUT(3)             => slv_write(3),\r
+       BUS_DATA_OUT(3*32+31 downto 3*32)   => slv_data_wr(3*32+31 downto 3*32),\r
+       BUS_DATA_IN(3*32+31 downto 3*32)    => slv_data_rd(3*32+31 downto 3*32),\r
+       BUS_ADDR_OUT(3*16+15 downto 3*16)   => slv_addr(3*16+15 downto 3*16),\r
+       BUS_TIMEOUT_OUT(3)                  => open,\r
+       BUS_DATAREADY_IN(3)                 => slv_ack(3),\r
+       BUS_WRITE_ACK_IN(3)                 => slv_ack(3),\r
+       BUS_NO_MORE_DATA_IN(3)              => slv_busy(3),\r
+       BUS_UNKNOWN_ADDR_IN(3)              => '0',\r
+       -- SPI control registers\r
+       BUS_READ_ENABLE_OUT(4)              => slv_read(4),\r
+       BUS_WRITE_ENABLE_OUT(4)             => slv_write(4),\r
+       BUS_DATA_OUT(4*32+31 downto 4*32)   => slv_data_wr(4*32+31 downto 4*32),\r
+       BUS_DATA_IN(4*32+31 downto 4*32)    => slv_data_rd(4*32+31 downto 4*32),\r
+       BUS_ADDR_OUT(4*16+15 downto 4*16)   => slv_addr(4*16+15 downto 4*16),\r
+       BUS_TIMEOUT_OUT(4)                  => open,\r
+       BUS_DATAREADY_IN(4)                 => slv_ack(4),\r
+       BUS_WRITE_ACK_IN(4)                 => slv_ack(4),\r
+       BUS_NO_MORE_DATA_IN(4)              => slv_busy(4),\r
+       BUS_UNKNOWN_ADDR_IN(4)              => '0',\r
+       -- SPI data memory\r
+       BUS_READ_ENABLE_OUT(5)              => slv_read(5),\r
+       BUS_WRITE_ENABLE_OUT(5)             => slv_write(5),\r
+       BUS_DATA_OUT(5*32+31 downto 5*32)   => slv_data_wr(5*32+31 downto 5*32),\r
+       BUS_DATA_IN(5*32+31 downto 5*32)    => slv_data_rd(5*32+31 downto 5*32),\r
+       BUS_ADDR_OUT(5*16+15 downto 5*16)   => slv_addr(5*16+15 downto 5*16),\r
+       BUS_TIMEOUT_OUT(5)                  => open,\r
+       BUS_DATAREADY_IN(5)                 => slv_ack(5),\r
+       BUS_WRITE_ACK_IN(5)                 => slv_ack(5),\r
+       BUS_NO_MORE_DATA_IN(5)              => slv_busy(5),\r
+       BUS_UNKNOWN_ADDR_IN(5)              => '0',\r
+       -- ADC 0 SPI control registers\r
+       BUS_READ_ENABLE_OUT(6)              => slv_read(6),\r
+       BUS_WRITE_ENABLE_OUT(6)             => slv_write(6),\r
+       BUS_DATA_OUT(6*32+31 downto 6*32)   => slv_data_wr(6*32+31 downto 6*32),\r
+       BUS_DATA_IN(6*32+31 downto 6*32)    => slv_data_rd(6*32+31 downto 6*32),\r
+       BUS_ADDR_OUT(6*16+15 downto 6*16)   => open,\r
+       BUS_TIMEOUT_OUT(6)                  => open,\r
+       BUS_DATAREADY_IN(6)                 => slv_ack(6),\r
+       BUS_WRITE_ACK_IN(6)                 => slv_ack(6),\r
+       BUS_NO_MORE_DATA_IN(6)              => slv_busy(6),\r
+       BUS_UNKNOWN_ADDR_IN(6)              => '0',\r
+       -- ADC 1 SPI control registers\r
+       BUS_READ_ENABLE_OUT(7)              => slv_read(7),\r
+       BUS_WRITE_ENABLE_OUT(7)             => slv_write(7),\r
+       BUS_DATA_OUT(7*32+31 downto 7*32)   => slv_data_wr(7*32+31 downto 7*32),\r
+       BUS_DATA_IN(7*32+31 downto 7*32)    => slv_data_rd(7*32+31 downto 7*32),\r
+       BUS_ADDR_OUT(7*16+15 downto 7*16)   => open,\r
+       BUS_TIMEOUT_OUT(7)                  => open,\r
+       BUS_DATAREADY_IN(7)                 => slv_ack(7),\r
+       BUS_WRITE_ACK_IN(7)                 => slv_ack(7),\r
+       BUS_NO_MORE_DATA_IN(7)              => slv_busy(7),\r
+       BUS_UNKNOWN_ADDR_IN(7)              => '0',\r
+       -- APV control / status registers\r
+       BUS_READ_ENABLE_OUT(8)              => slv_read(8),\r
+       BUS_WRITE_ENABLE_OUT(8)             => slv_write(8),\r
+       BUS_DATA_OUT(8*32+31 downto 8*32)   => slv_data_wr(8*32+31 downto 8*32),\r
+       BUS_DATA_IN(8*32+31 downto 8*32)    => slv_data_rd(8*32+31 downto 8*32),\r
+       BUS_ADDR_OUT(8*16+15 downto 8*16)   => slv_addr(8*16+15 downto 8*16),\r
+       BUS_TIMEOUT_OUT(8)                  => open,\r
+       BUS_DATAREADY_IN(8)                 => slv_ack(8),\r
+       BUS_WRITE_ACK_IN(8)                 => slv_ack(8),\r
+       BUS_NO_MORE_DATA_IN(8)              => slv_busy(8),\r
+       BUS_UNKNOWN_ADDR_IN(8)              => '0',\r
+       -- ADC / PLL / trigger ctrl register\r
+       BUS_READ_ENABLE_OUT(11 downto 9)    => slv_read(11 downto 9),\r
+       BUS_WRITE_ENABLE_OUT(11 downto 9)   => slv_write(11 downto 9),\r
+       BUS_DATA_OUT(11*32+31 downto 9*32)  => slv_data_wr(11*32+31 downto 9*32),\r
+       BUS_DATA_IN(11*32+31 downto 9*32)   => slv_data_rd(11*32+31 downto 9*32),\r
+       BUS_ADDR_OUT(11*16+15 downto 9*16)  => open,\r
+       BUS_TIMEOUT_OUT(11 downto 9)        => open,\r
+       BUS_DATAREADY_IN(11 downto 9)       => slv_ack(11 downto 9),\r
+       BUS_WRITE_ACK_IN(11 downto 9)       => slv_ack(11 downto 9),\r
+       BUS_NO_MORE_DATA_IN(11 downto 9)    => slv_busy(11 downto 9),\r
+       BUS_UNKNOWN_ADDR_IN(11 downto 9)    => (others => '0'),\r
+       -- ADC0 snooper\r
+       BUS_READ_ENABLE_OUT(12)             => slv_read(12),\r
+       BUS_WRITE_ENABLE_OUT(12)            => slv_write(12),\r
+       BUS_DATA_OUT(12*32+31 downto 12*32) => slv_data_wr(12*32+31 downto 12*32),\r
+       BUS_DATA_IN(12*32+31 downto 12*32)  => slv_data_rd(12*32+31 downto 12*32),\r
+       BUS_ADDR_OUT(12*16+15 downto 12*16) => slv_addr(12*16+15 downto 12*16),\r
+       BUS_TIMEOUT_OUT(12)                 => open,\r
+       BUS_DATAREADY_IN(12)                => slv_ack(12),\r
+       BUS_WRITE_ACK_IN(12)                => slv_ack(12),\r
+       BUS_NO_MORE_DATA_IN(12)             => slv_busy(12),\r
+       BUS_UNKNOWN_ADDR_IN(12)             => '0',\r
+       -- ADC1 snooper\r
+       BUS_READ_ENABLE_OUT(13)             => slv_read(13),\r
+       BUS_WRITE_ENABLE_OUT(13)            => slv_write(13),\r
+       BUS_DATA_OUT(13*32+31 downto 13*32) => slv_data_wr(13*32+31 downto 13*32),\r
+       BUS_DATA_IN(13*32+31 downto 13*32)  => slv_data_rd(13*32+31 downto 13*32),\r
+       BUS_ADDR_OUT(13*16+15 downto 13*16) => slv_addr(13*16+15 downto 13*16),\r
+       BUS_TIMEOUT_OUT(13)                 => open,\r
+       BUS_DATAREADY_IN(13)                => slv_ack(13),\r
+       BUS_WRITE_ACK_IN(13)                => slv_ack(13),\r
+       BUS_NO_MORE_DATA_IN(13)             => slv_busy(13),\r
+       BUS_UNKNOWN_ADDR_IN(13)             => '0',\r
+       -- Test register\r
+       BUS_READ_ENABLE_OUT(14)             => slv_read(14),\r
+       BUS_WRITE_ENABLE_OUT(14)            => slv_write(14),\r
+       BUS_DATA_OUT(14*32+31 downto 14*32) => slv_data_wr(14*32+31 downto 14*32),\r
+       BUS_DATA_IN(14*32+31 downto 14*32)  => slv_data_rd(14*32+31 downto 14*32),\r
+       BUS_ADDR_OUT(14*16+15 downto 14*16) => open,\r
+       BUS_TIMEOUT_OUT(14)                 => open,\r
+       BUS_DATAREADY_IN(14)                => slv_ack(14),\r
+       BUS_WRITE_ACK_IN(14)                => slv_ack(14),\r
+       BUS_NO_MORE_DATA_IN(14)             => slv_busy(14),\r
+       BUS_UNKNOWN_ADDR_IN(14)             => '0',\r
+       -- debug\r
+       STAT_DEBUG          => stat\r
+);\r
 \r
 \r
 ------------------------------------------------------------------------------------\r
 -- pedestal memories (16x128 = 2048, 18bit)\r
 ------------------------------------------------------------------------------------\r
 THE_PED_MEM: slv_ped_thr_mem\r
-port map( CLK_IN               => clk_in,\r
-                 RESET_IN              => reset_in,\r
-                 -- Slave bus\r
-                 SLV_ADDR_IN   => slv_addr(0*16+10 downto 0*16),\r
-                 SLV_READ_IN   => slv_read(0),\r
-                 SLV_WRITE_IN  => slv_write(0),\r
-                 SLV_ACK_OUT   => slv_ack(0),\r
-                 SLV_DATA_IN   => slv_data_wr(0*32+31 downto 0*32),\r
-                 SLV_DATA_OUT  => slv_data_rd(0*32+31 downto 0*32),\r
-                 -- backplane identifier\r
-                 BACKPLANE_IN  => backplane_in,\r
-                 -- I/O to the backend\r
-                 MEM_CLK_IN    => clk_in,\r
-                 MEM_ADDR_IN   => ped_addr_in,\r
-                 MEM_0_D_OUT   => ped_data_0_out,\r
-                 MEM_1_D_OUT   => ped_data_1_out,\r
-                 MEM_2_D_OUT   => ped_data_2_out,\r
-                 MEM_3_D_OUT   => ped_data_3_out,\r
-                 MEM_4_D_OUT   => ped_data_4_out,\r
-                 MEM_5_D_OUT   => ped_data_5_out,\r
-                 MEM_6_D_OUT   => ped_data_6_out,\r
-                 MEM_7_D_OUT   => ped_data_7_out,\r
-                 MEM_8_D_OUT   => ped_data_8_out,\r
-                 MEM_9_D_OUT   => ped_data_9_out,\r
-                 MEM_10_D_OUT  => ped_data_10_out,\r
-                 MEM_11_D_OUT  => ped_data_11_out,\r
-                 MEM_12_D_OUT  => ped_data_12_out,\r
-                 MEM_13_D_OUT  => ped_data_13_out,\r
-                 MEM_14_D_OUT  => ped_data_14_out,\r
-                 MEM_15_D_OUT  => ped_data_15_out,\r
-                 -- Status lines\r
-                 STAT                  => open\r
-               );\r
+port map(\r
+       CLK_IN          => clk_in,\r
+       RESET_IN        => reset_in,\r
+       -- Slave bus\r
+       SLV_ADDR_IN     => slv_addr(0*16+10 downto 0*16),\r
+       SLV_READ_IN     => slv_read(0),\r
+       SLV_WRITE_IN    => slv_write(0),\r
+       SLV_ACK_OUT     => slv_ack(0),\r
+       SLV_DATA_IN     => slv_data_wr(0*32+31 downto 0*32),\r
+       SLV_DATA_OUT    => slv_data_rd(0*32+31 downto 0*32),\r
+       -- backplane identifier\r
+       BACKPLANE_IN    => backplane_in,\r
+       -- I/O to the backend\r
+       MEM_CLK_IN      => clk_in,\r
+       MEM_ADDR_IN     => ped_addr_in,\r
+       MEM_0_D_OUT     => ped_data_0_out,\r
+       MEM_1_D_OUT     => ped_data_1_out,\r
+       MEM_2_D_OUT     => ped_data_2_out,\r
+       MEM_3_D_OUT     => ped_data_3_out,\r
+       MEM_4_D_OUT     => ped_data_4_out,\r
+       MEM_5_D_OUT     => ped_data_5_out,\r
+       MEM_6_D_OUT     => ped_data_6_out,\r
+       MEM_7_D_OUT     => ped_data_7_out,\r
+       MEM_8_D_OUT     => ped_data_8_out,\r
+       MEM_9_D_OUT     => ped_data_9_out,\r
+       MEM_10_D_OUT    => ped_data_10_out,\r
+       MEM_11_D_OUT    => ped_data_11_out,\r
+       MEM_12_D_OUT    => ped_data_12_out,\r
+       MEM_13_D_OUT    => ped_data_13_out,\r
+       MEM_14_D_OUT    => ped_data_14_out,\r
+       MEM_15_D_OUT    => ped_data_15_out,\r
+       -- Status lines\r
+       STAT            => open\r
+);\r
 slv_busy(0) <= '0';\r
 \r
 ------------------------------------------------------------------------------------\r
 -- threshold memories (16x128 = 2048, 18bit)\r
 ------------------------------------------------------------------------------------\r
 THE_THR_MEM: slv_ped_thr_mem\r
-port map( CLK_IN               => clk_in,\r
-                 RESET_IN              => reset_in,\r
-                 -- Slave bus\r
-                 SLV_ADDR_IN   => slv_addr(1*16+10 downto 1*16),\r
-                 SLV_READ_IN   => slv_read(1),\r
-                 SLV_WRITE_IN  => slv_write(1),\r
-                 SLV_ACK_OUT   => slv_ack(1),\r
-                 SLV_DATA_IN   => slv_data_wr(1*32+31 downto 1*32),\r
-                 SLV_DATA_OUT  => slv_data_rd(1*32+31 downto 1*32),\r
-                 -- backplane identifier\r
-                 BACKPLANE_IN  => backplane_in,\r
-                 -- I/O to the backend\r
-                 MEM_CLK_IN    => clk_in,\r
-                 MEM_ADDR_IN   => thr_addr_in,\r
-                 MEM_0_D_OUT   => thr_data_0_out,\r
-                 MEM_1_D_OUT   => thr_data_1_out,\r
-                 MEM_2_D_OUT   => thr_data_2_out,\r
-                 MEM_3_D_OUT   => thr_data_3_out,\r
-                 MEM_4_D_OUT   => thr_data_4_out,\r
-                 MEM_5_D_OUT   => thr_data_5_out,\r
-                 MEM_6_D_OUT   => thr_data_6_out,\r
-                 MEM_7_D_OUT   => thr_data_7_out,\r
-                 MEM_8_D_OUT   => thr_data_8_out,\r
-                 MEM_9_D_OUT   => thr_data_9_out,\r
-                 MEM_10_D_OUT  => thr_data_10_out,\r
-                 MEM_11_D_OUT  => thr_data_11_out,\r
-                 MEM_12_D_OUT  => thr_data_12_out,\r
-                 MEM_13_D_OUT  => thr_data_13_out,\r
-                 MEM_14_D_OUT  => thr_data_14_out,\r
-                 MEM_15_D_OUT  => thr_data_15_out,\r
-                 -- Status lines\r
-                 STAT                  => open\r
-               );\r
+port map(\r
+       CLK_IN          => clk_in,\r
+       RESET_IN        => reset_in,\r
+       -- Slave bus\r
+       SLV_ADDR_IN     => slv_addr(1*16+10 downto 1*16),\r
+       SLV_READ_IN     => slv_read(1),\r
+       SLV_WRITE_IN    => slv_write(1),\r
+       SLV_ACK_OUT     => slv_ack(1),\r
+       SLV_DATA_IN     => slv_data_wr(1*32+31 downto 1*32),\r
+       SLV_DATA_OUT    => slv_data_rd(1*32+31 downto 1*32),\r
+       -- backplane identifier\r
+       BACKPLANE_IN    => backplane_in,\r
+       -- I/O to the backend\r
+       MEM_CLK_IN      => clk_in,\r
+       MEM_ADDR_IN     => thr_addr_in,\r
+       MEM_0_D_OUT     => thr_data_0_out,\r
+       MEM_1_D_OUT     => thr_data_1_out,\r
+       MEM_2_D_OUT     => thr_data_2_out,\r
+       MEM_3_D_OUT     => thr_data_3_out,\r
+       MEM_4_D_OUT     => thr_data_4_out,\r
+       MEM_5_D_OUT     => thr_data_5_out,\r
+       MEM_6_D_OUT     => thr_data_6_out,\r
+       MEM_7_D_OUT     => thr_data_7_out,\r
+       MEM_8_D_OUT     => thr_data_8_out,\r
+       MEM_9_D_OUT     => thr_data_9_out,\r
+       MEM_10_D_OUT    => thr_data_10_out,\r
+       MEM_11_D_OUT    => thr_data_11_out,\r
+       MEM_12_D_OUT    => thr_data_12_out,\r
+       MEM_13_D_OUT    => thr_data_13_out,\r
+       MEM_14_D_OUT    => thr_data_14_out,\r
+       MEM_15_D_OUT    => thr_data_15_out,\r
+       -- Status lines\r
+       STAT            => open\r
+);\r
 slv_busy(1) <= '0';\r
 \r
 ------------------------------------------------------------------------------------\r
 -- I2C master block for accessing APVs\r
 ------------------------------------------------------------------------------------\r
 THE_I2C_MASTER: i2c_master\r
-port map( CLK_IN               => clk_in,\r
-                 RESET_IN              => reset_in,\r
-                 -- Slave bus\r
-                 SLV_READ_IN   => slv_read(2),\r
-                 SLV_WRITE_IN  => slv_write(2),\r
-                 SLV_BUSY_OUT  => slv_busy(2),\r
-                 SLV_ACK_OUT   => slv_ack(2),\r
-                 SLV_DATA_IN   => slv_data_wr(2*32+31 downto 2*32),\r
-                 SLV_DATA_OUT  => slv_data_rd(2*32+31 downto 2*32),\r
-                 -- I2C connections\r
-                 SDA_IN                => sda_in,\r
-                 SDA_OUT               => sda_out,\r
-                 SCL_IN                => scl_in,\r
-                 SCL_OUT               => scl_out,\r
-                 -- Status lines\r
-                 STAT                  => open\r
-               );\r
+port map(\r
+       CLK_IN          => clk_in,\r
+       RESET_IN        => reset_in,\r
+       -- Slave bus\r
+       SLV_READ_IN     => slv_read(2),\r
+       SLV_WRITE_IN    => slv_write(2),\r
+       SLV_BUSY_OUT    => slv_busy(2),\r
+       SLV_ACK_OUT     => slv_ack(2),\r
+       SLV_DATA_IN     => slv_data_wr(2*32+31 downto 2*32),\r
+       SLV_DATA_OUT    => slv_data_rd(2*32+31 downto 2*32),\r
+       -- I2C connections\r
+       SDA_IN          => sda_in,\r
+       SDA_OUT         => sda_out,\r
+       SCL_IN          => scl_in,\r
+       SCL_OUT         => scl_out,\r
+       -- Status lines\r
+       STAT            => open\r
+);\r
 \r
 ------------------------------------------------------------------------------------\r
 -- 1Wire master including status memory\r
 ------------------------------------------------------------------------------------\r
 THE_ONEWIRE_MEMORY: slv_onewire_memory\r
-port map( CLK_IN                       => clk_in,\r
-                 RESET_IN                      => reset_in,\r
-                 -- Slave bus\r
-                 SLV_ADDR_IN           => slv_addr(3*16+5 downto 3*16),\r
-                 SLV_READ_IN           => slv_read(3),\r
-                 SLV_WRITE_IN          => slv_write(3),\r
-                 SLV_ACK_OUT           => slv_ack(3),\r
-                 SLV_BUSY_OUT          => open, \r
-                 SLV_DATA_OUT          => slv_data_rd(3*32+31 downto 3*32),\r
-                 -- backplane identifier\r
-                 BACKPLANE_IN  => backplane_in,\r
-                 -- 1Wire lines\r
-                 ONEWIRE_START_IN      => onewire_start_in, -- not used yet\r
-                 ONEWIRE_INOUT         => onewire_inout,\r
-                 BP_ONEWIRE_INOUT      => bp_onewire_inout,\r
-                 -- Status lines\r
-                 STAT                          => onewire_debug --open\r
-               );\r
+port map(\r
+       CLK_IN              => clk_in,\r
+       RESET_IN            => reset_in,\r
+       -- Slave bus\r
+       SLV_ADDR_IN         => slv_addr(3*16+5 downto 3*16),\r
+       SLV_READ_IN         => slv_read(3),\r
+       SLV_WRITE_IN        => slv_write(3),\r
+       SLV_ACK_OUT         => slv_ack(3),\r
+       SLV_BUSY_OUT        => open,\r
+       SLV_DATA_OUT        => slv_data_rd(3*32+31 downto 3*32),\r
+       -- backplane identifier\r
+       BACKPLANE_IN        => backplane_in,\r
+       -- 1Wire lines\r
+       ONEWIRE_START_IN    => onewire_start_in, -- not used yet\r
+       ONEWIRE_INOUT       => onewire_inout,\r
+       BP_ONEWIRE_INOUT    => bp_onewire_inout,\r
+       -- Status lines\r
+       STAT                => onewire_debug --open\r
+);\r
 slv_busy(3) <= '0';\r
 \r
 ------------------------------------------------------------------------------------\r
 -- SPI master\r
 ------------------------------------------------------------------------------------\r
 THE_SPI_MASTER: spi_master\r
-port map( CLK_IN               => clk_in,\r
-                 RESET_IN              => reset_in,\r
-                 -- Slave bus\r
-                 BUS_READ_IN   => slv_read(4),\r
-                 BUS_WRITE_IN  => slv_write(4),\r
-                 BUS_BUSY_OUT  => slv_busy(4),\r
-                 BUS_ACK_OUT   => slv_ack(4),\r
-                 BUS_ADDR_IN   => slv_addr(4*16+0 downto 4*16),\r
-                 BUS_DATA_IN   => slv_data_wr(4*32+31 downto 4*32),\r
-                 BUS_DATA_OUT  => slv_data_rd(4*32+31 downto 4*32),\r
-                 -- SPI connections\r
-                 SPI_CS_OUT    => spi_cs,\r
-                 SPI_SDI_IN    => spi_sdi,\r
-                 SPI_SDO_OUT   => spi_sdo,\r
-                 SPI_SCK_OUT   => spi_sck,\r
-                 -- BRAM for read/write data\r
-                 BRAM_A_OUT    => spi_bram_addr,\r
-                 BRAM_WR_D_IN  => spi_bram_wr_d,\r
-                 BRAM_RD_D_OUT => spi_bram_rd_d,\r
-                 BRAM_WE_OUT   => spi_bram_we,\r
-                 -- Status lines\r
-                 STAT                  => spi_debug --open\r
-               );\r
+port map(\r
+       CLK_IN          => clk_in,\r
+       RESET_IN        => reset_in,\r
+       -- Slave bus\r
+       BUS_READ_IN     => slv_read(4),\r
+       BUS_WRITE_IN    => slv_write(4),\r
+       BUS_BUSY_OUT    => slv_busy(4),\r
+       BUS_ACK_OUT     => slv_ack(4),\r
+       BUS_ADDR_IN     => slv_addr(4*16+0 downto 4*16),\r
+       BUS_DATA_IN     => slv_data_wr(4*32+31 downto 4*32),\r
+       BUS_DATA_OUT    => slv_data_rd(4*32+31 downto 4*32),\r
+       -- SPI connections\r
+       SPI_CS_OUT      => spi_cs,\r
+       SPI_SDI_IN      => spi_sdi,\r
+       SPI_SDO_OUT     => spi_sdo,\r
+       SPI_SCK_OUT     => spi_sck,\r
+       -- BRAM for read/write data\r
+       BRAM_A_OUT      => spi_bram_addr,\r
+       BRAM_WR_D_IN    => spi_bram_wr_d,\r
+       BRAM_RD_D_OUT   => spi_bram_rd_d,\r
+       BRAM_WE_OUT     => spi_bram_we,\r
+       -- Status lines\r
+       STAT            => spi_debug --open\r
+);\r
 \r
 ------------------------------------------------------------------------------------\r
 -- data memory for SPI accesses\r
 ------------------------------------------------------------------------------------\r
 THE_SPI_MEMORY: spi_databus_memory\r
-port map( CLK_IN                       => clk_in,\r
-                 RESET_IN                      => reset_in,\r
-                 -- Slave bus\r
-                 BUS_ADDR_IN           => slv_addr(5*16+5 downto 5*16),\r
-                 BUS_READ_IN           => slv_read(5),\r
-                 BUS_WRITE_IN          => slv_write(5),\r
-                 BUS_ACK_OUT           => slv_ack(5),\r
-                 BUS_DATA_IN           => slv_data_wr(5*32+31 downto 5*32),\r
-                 BUS_DATA_OUT          => slv_data_rd(5*32+31 downto 5*32),\r
-                 -- state machine connections\r
-                 BRAM_ADDR_IN          => spi_bram_addr,\r
-                 BRAM_WR_D_OUT         => spi_bram_wr_d,\r
-                 BRAM_RD_D_IN          => spi_bram_rd_d,\r
-                 BRAM_WE_IN            => spi_bram_we, \r
-                 -- Status lines\r
-                 STAT                          => open\r
-               );\r
+port map(\r
+       CLK_IN              => clk_in,\r
+       RESET_IN            => reset_in,\r
+       -- Slave bus\r
+       BUS_ADDR_IN         => slv_addr(5*16+5 downto 5*16),\r
+       BUS_READ_IN         => slv_read(5),\r
+       BUS_WRITE_IN        => slv_write(5),\r
+       BUS_ACK_OUT         => slv_ack(5),\r
+       BUS_DATA_IN         => slv_data_wr(5*32+31 downto 5*32),\r
+       BUS_DATA_OUT        => slv_data_rd(5*32+31 downto 5*32),\r
+       -- state machine connections\r
+       BRAM_ADDR_IN        => spi_bram_addr,\r
+       BRAM_WR_D_OUT       => spi_bram_wr_d,\r
+       BRAM_RD_D_IN        => spi_bram_rd_d,\r
+       BRAM_WE_IN          => spi_bram_we,\r
+       -- Status lines\r
+       STAT                => open\r
+);\r
 slv_busy(5) <= '0';\r
 \r
 ------------------------------------------------------------------------------------\r
 -- ADC0 SPI master\r
 ------------------------------------------------------------------------------------\r
 THE_SPI_ADC0_MASTER: spi_adc_master\r
-generic map( RESET_VALUE_CTRL  => x"60" )\r
-port map( CLK_IN                       => clk_in,\r
-                 RESET_IN                      => reset_in,\r
-                 -- Slave bus\r
-                 SLV_READ_IN           => slv_read(6),\r
-                 SLV_WRITE_IN          => slv_write(6),\r
-                 SLV_BUSY_OUT          => slv_busy(6),\r
-                 SLV_ACK_OUT           => slv_ack(6),\r
-                 SLV_DATA_IN           => slv_data_wr(6*32+31 downto 6*32),\r
-                 SLV_DATA_OUT          => slv_data_rd(6*32+31 downto 6*32),\r
-                 -- SPI connections\r
-                 SPI_CS_OUT            => spi_adc0_cs_out,\r
-                 SPI_SDO_OUT           => spi_adc0_sdo_out,\r
-                 SPI_SCK_OUT           => spi_adc0_sck_out,\r
-                 -- ADC connections\r
-                 ADC_LOCKED_IN         => adc0_pll_locked_in,\r
-                 ADC_PD_OUT            => adc0_pd_out,\r
-                 ADC_RST_OUT           => adc0_rst_out,\r
-                 ADC_DEL_OUT           => adc0_del_out,\r
-                 -- APV connections\r
-                 APV_RST_OUT           => apv0_rst_out,\r
-                 -- Status lines\r
-                 STAT                          => open\r
-               );\r
+generic map(\r
+       RESET_VALUE_CTRL    => x"60"\r
+)\r
+port map(\r
+       CLK_IN          => clk_in,\r
+       RESET_IN        => reset_in,\r
+       -- Slave bus\r
+       SLV_READ_IN     => slv_read(6),\r
+       SLV_WRITE_IN    => slv_write(6),\r
+       SLV_BUSY_OUT    => slv_busy(6),\r
+       SLV_ACK_OUT     => slv_ack(6),\r
+       SLV_DATA_IN     => slv_data_wr(6*32+31 downto 6*32),\r
+       SLV_DATA_OUT    => slv_data_rd(6*32+31 downto 6*32),\r
+       -- SPI connections\r
+       SPI_CS_OUT      => spi_adc0_cs_out,\r
+       SPI_SDO_OUT     => spi_adc0_sdo_out,\r
+       SPI_SCK_OUT     => spi_adc0_sck_out,\r
+       -- ADC connections\r
+       ADC_LOCKED_IN   => adc0_pll_locked_in,\r
+       ADC_PD_OUT      => adc0_pd_out,\r
+       ADC_RST_OUT     => adc0_rst_out,\r
+       ADC_DEL_OUT     => adc0_del_out,\r
+       -- APV connections\r
+       APV_RST_OUT     => apv0_rst_out,\r
+       -- Status lines\r
+       STAT            => open\r
+);\r
 \r
 ------------------------------------------------------------------------------------\r
 -- ADC1 SPI master\r
 ------------------------------------------------------------------------------------\r
 THE_SPI_ADC1_MASTER: spi_adc_master\r
-generic map( RESET_VALUE_CTRL  => x"60" )\r
-port map( CLK_IN                       => clk_in,\r
-                 RESET_IN                      => reset_in,\r
-                 -- Slave bus\r
-                 SLV_READ_IN           => slv_read(7),\r
-                 SLV_WRITE_IN          => slv_write(7),\r
-                 SLV_BUSY_OUT          => slv_busy(7),\r
-                 SLV_ACK_OUT           => slv_ack(7),\r
-                 SLV_DATA_IN           => slv_data_wr(7*32+31 downto 7*32),\r
-                 SLV_DATA_OUT          => slv_data_rd(7*32+31 downto 7*32),\r
-                 -- SPI connections\r
-                 SPI_CS_OUT            => spi_adc1_cs_out,\r
-                 SPI_SDO_OUT           => spi_adc1_sdo_out,\r
-                 SPI_SCK_OUT           => spi_adc1_sck_out,\r
-                 -- ADC connections\r
-                 ADC_LOCKED_IN         => adc1_pll_locked_in,\r
-                 ADC_PD_OUT            => adc1_pd_out,\r
-                 ADC_RST_OUT           => adc1_rst_out,\r
-                 ADC_DEL_OUT           => adc1_del_out,\r
-                 -- APV connections\r
-                 APV_RST_OUT           => apv1_rst_out,\r
-                 -- Status lines\r
-                 STAT                          => open\r
-               );\r
+generic map(\r
+       RESET_VALUE_CTRL    => x"60"\r
+)\r
+port map(\r
+       CLK_IN          => clk_in,\r
+       RESET_IN        => reset_in,\r
+       -- Slave bus\r
+       SLV_READ_IN     => slv_read(7),\r
+       SLV_WRITE_IN    => slv_write(7),\r
+       SLV_BUSY_OUT    => slv_busy(7),\r
+       SLV_ACK_OUT     => slv_ack(7),\r
+       SLV_DATA_IN     => slv_data_wr(7*32+31 downto 7*32),\r
+       SLV_DATA_OUT        => slv_data_rd(7*32+31 downto 7*32),\r
+       -- SPI connections\r
+       SPI_CS_OUT      => spi_adc1_cs_out,\r
+       SPI_SDO_OUT     => spi_adc1_sdo_out,\r
+       SPI_SCK_OUT     => spi_adc1_sck_out,\r
+       -- ADC connections\r
+       ADC_LOCKED_IN   => adc1_pll_locked_in,\r
+       ADC_PD_OUT      => adc1_pd_out,\r
+       ADC_RST_OUT     => adc1_rst_out,\r
+       ADC_DEL_OUT     => adc1_del_out,\r
+       -- APV connections\r
+       APV_RST_OUT     => apv1_rst_out,\r
+       -- Status lines\r
+       STAT            => open\r
+);\r
 \r
 ------------------------------------------------------------------------------------\r
 -- APV control / status registers\r
 ------------------------------------------------------------------------------------\r
 THE_SLV_REGISTER_BANK: slv_register_bank\r
-generic map( RESET_VALUE       => x"0001" )\r
-port map( CLK_IN               => clk_in,\r
-                 RESET_IN              => reset_in,\r
-                 -- Slave bus\r
-                 SLV_ADDR_IN   => slv_addr(8*16+3 downto 8*16),\r
-                 SLV_READ_IN   => slv_read(8),\r
-                 SLV_WRITE_IN  => slv_write(8),\r
-                 SLV_ACK_OUT   => slv_ack(8),\r
-                 SLV_DATA_IN   => slv_data_wr(8*32+31 downto 8*32),\r
-                 SLV_DATA_OUT  => slv_data_rd(8*32+31 downto 8*32),\r
-                 -- I/O to the backend\r
-                 BACKPLANE_IN  => backplane_in,\r
-                 CTRL_0_OUT    => ctrl_0_out,\r
-                 CTRL_1_OUT    => ctrl_1_out,\r
-                 CTRL_2_OUT    => ctrl_2_out,\r
-                 CTRL_3_OUT    => ctrl_3_out,\r
-                 CTRL_4_OUT    => ctrl_4_out,\r
-                 CTRL_5_OUT    => ctrl_5_out,\r
-                 CTRL_6_OUT    => ctrl_6_out,\r
-                 CTRL_7_OUT    => ctrl_7_out,\r
-                 CTRL_8_OUT    => ctrl_8_out,\r
-                 CTRL_9_OUT    => ctrl_9_out,\r
-                 CTRL_10_OUT   => ctrl_10_out,\r
-                 CTRL_11_OUT   => ctrl_11_out,\r
-                 CTRL_12_OUT   => ctrl_12_out,\r
-                 CTRL_13_OUT   => ctrl_13_out,\r
-                 CTRL_14_OUT   => ctrl_14_out,\r
-                 CTRL_15_OUT   => ctrl_15_out,\r
-                 STAT_0_IN             => stat_0_in,\r
-                 STAT_1_IN             => stat_1_in,\r
-                 STAT_2_IN             => stat_2_in,\r
-                 STAT_3_IN             => stat_3_in,\r
-                 STAT_4_IN             => stat_4_in,\r
-                 STAT_5_IN             => stat_5_in,\r
-                 STAT_6_IN             => stat_6_in,\r
-                 STAT_7_IN             => stat_7_in,\r
-                 STAT_8_IN             => stat_8_in,\r
-                 STAT_9_IN             => stat_9_in,\r
-                 STAT_10_IN    => stat_10_in,\r
-                 STAT_11_IN    => stat_11_in,\r
-                 STAT_12_IN    => stat_12_in,\r
-                 STAT_13_IN    => stat_13_in,\r
-                 STAT_14_IN    => stat_14_in,\r
-                 STAT_15_IN    => stat_15_in,\r
-                 -- Status lines\r
-                 STAT                  => open\r
-               );\r
+generic map(\r
+       RESET_VALUE => x"0001"\r
+)\r
+port map(\r
+       CLK_IN          => clk_in,\r
+       RESET_IN        => reset_in,\r
+       -- Slave bus\r
+       SLV_ADDR_IN     => slv_addr(8*16+3 downto 8*16),\r
+       SLV_READ_IN     => slv_read(8),\r
+       SLV_WRITE_IN    => slv_write(8),\r
+       SLV_ACK_OUT     => slv_ack(8),\r
+       SLV_DATA_IN     => slv_data_wr(8*32+31 downto 8*32),\r
+       SLV_DATA_OUT    => slv_data_rd(8*32+31 downto 8*32),\r
+       -- I/O to the backend\r
+       BACKPLANE_IN    => backplane_in,\r
+       CTRL_0_OUT      => ctrl_0_out,\r
+       CTRL_1_OUT      => ctrl_1_out,\r
+       CTRL_2_OUT      => ctrl_2_out,\r
+       CTRL_3_OUT      => ctrl_3_out,\r
+       CTRL_4_OUT      => ctrl_4_out,\r
+       CTRL_5_OUT      => ctrl_5_out,\r
+       CTRL_6_OUT      => ctrl_6_out,\r
+       CTRL_7_OUT      => ctrl_7_out,\r
+       CTRL_8_OUT      => ctrl_8_out,\r
+       CTRL_9_OUT      => ctrl_9_out,\r
+       CTRL_10_OUT     => ctrl_10_out,\r
+       CTRL_11_OUT     => ctrl_11_out,\r
+       CTRL_12_OUT     => ctrl_12_out,\r
+       CTRL_13_OUT     => ctrl_13_out,\r
+       CTRL_14_OUT     => ctrl_14_out,\r
+       CTRL_15_OUT     => ctrl_15_out,\r
+       STAT_0_IN       => stat_0_in,\r
+       STAT_1_IN       => stat_1_in,\r
+       STAT_2_IN       => stat_2_in,\r
+       STAT_3_IN       => stat_3_in,\r
+       STAT_4_IN       => stat_4_in,\r
+       STAT_5_IN       => stat_5_in,\r
+       STAT_6_IN       => stat_6_in,\r
+       STAT_7_IN       => stat_7_in,\r
+       STAT_8_IN       => stat_8_in,\r
+       STAT_9_IN       => stat_9_in,\r
+       STAT_10_IN      => stat_10_in,\r
+       STAT_11_IN      => stat_11_in,\r
+       STAT_12_IN      => stat_12_in,\r
+       STAT_13_IN      => stat_13_in,\r
+       STAT_14_IN      => stat_14_in,\r
+       STAT_15_IN      => stat_15_in,\r
+       -- Status lines\r
+       STAT            => open\r
+);\r
 slv_busy(8) <= '0';\r
 \r
 ------------------------------------------------------------------------------------\r
 -- ADC level register\r
 ------------------------------------------------------------------------------------\r
 THE_ADC_LVL_REG: slv_register\r
-generic map( RESET_VALUE       => x"d0_20_78_88" )\r
-port map( CLK_IN                       => clk_in,\r
-                 RESET_IN                      => reset_in, -- general reset\r
-                 BUSY_IN                       => '0',\r
-                 -- Slave bus\r
-                 SLV_READ_IN           => slv_read(9),\r
-                 SLV_WRITE_IN          => slv_write(9),\r
-                 SLV_BUSY_OUT          => slv_busy(9),\r
-                 SLV_ACK_OUT           => slv_ack(9),\r
-                 SLV_DATA_IN           => slv_data_wr(9*32+31 downto 9*32),\r
-                 SLV_DATA_OUT          => slv_data_rd(9*32+31 downto 9*32),\r
-                 -- I/O to the backend\r
-                 REG_DATA_IN           => ctrl_lvl,\r
-                 REG_DATA_OUT          => ctrl_lvl,\r
-                 -- Status lines\r
-                 STAT                          => open\r
-               );\r
+generic map(\r
+       RESET_VALUE => x"d0_20_78_88"\r
+)\r
+port map(\r
+       CLK_IN          => clk_in,\r
+       RESET_IN        => reset_in, -- general reset\r
+       BUSY_IN         => '0',\r
+       -- Slave bus\r
+       SLV_READ_IN     => slv_read(9),\r
+       SLV_WRITE_IN    => slv_write(9),\r
+       SLV_BUSY_OUT    => slv_busy(9),\r
+       SLV_ACK_OUT     => slv_ack(9),\r
+       SLV_DATA_IN     => slv_data_wr(9*32+31 downto 9*32),\r
+       SLV_DATA_OUT    => slv_data_rd(9*32+31 downto 9*32),\r
+       -- I/O to the backend\r
+       REG_DATA_IN     => ctrl_lvl,\r
+       REG_DATA_OUT    => ctrl_lvl,\r
+       -- Status lines\r
+       STAT            => open\r
+);\r
 \r
 ------------------------------------------------------------------------------------\r
 -- trigger control register\r
 ------------------------------------------------------------------------------------\r
 THE_TRG_CTRL_REG: slv_register\r
-generic map( RESET_VALUE       => x"10_10_10_10" )\r
-port map( CLK_IN                       => clk_in,\r
-                 RESET_IN                      => reset_in, -- general reset\r
-                 BUSY_IN                       => '0',\r
-                 -- Slave bus\r
-                 SLV_READ_IN           => slv_read(10),\r
-                 SLV_WRITE_IN          => slv_write(10),\r
-                 SLV_BUSY_OUT          => slv_busy(10),\r
-                 SLV_ACK_OUT           => slv_ack(10),\r
-                 SLV_DATA_IN           => slv_data_wr(10*32+31 downto 10*32),\r
-                 SLV_DATA_OUT          => slv_data_rd(10*32+31 downto 10*32),\r
-                 -- I/O to the backend\r
-                 REG_DATA_IN           => ctrl_trg,\r
-                 REG_DATA_OUT          => ctrl_trg,\r
-                 -- Status lines\r
-                 STAT                          => open\r
-               );\r
+generic map(\r
+       RESET_VALUE => x"10_10_10_10"\r
+)\r
+port map(\r
+       CLK_IN          => clk_in,\r
+       RESET_IN        => reset_in, -- general reset\r
+       BUSY_IN         => '0',\r
+       -- Slave bus\r
+       SLV_READ_IN     => slv_read(10),\r
+       SLV_WRITE_IN    => slv_write(10),\r
+       SLV_BUSY_OUT    => slv_busy(10),\r
+       SLV_ACK_OUT     => slv_ack(10),\r
+       SLV_DATA_IN     => slv_data_wr(10*32+31 downto 10*32),\r
+       SLV_DATA_OUT    => slv_data_rd(10*32+31 downto 10*32),\r
+       -- I/O to the backend\r
+       REG_DATA_IN     => ctrl_trg,\r
+       REG_DATA_OUT    => ctrl_trg,\r
+       -- Status lines\r
+       STAT            => open\r
+);\r
 \r
 ------------------------------------------------------------------------------------\r
 -- PLL control register\r
 ------------------------------------------------------------------------------------\r
 THE_PLL_CTRL_REG: slv_half_register\r
-generic map( RESET_VALUE       => x"00_02" )\r
-port map( CLK_IN                       => clk_in,\r
-                 RESET_IN                      => reset_in, -- general reset\r
-                 -- Slave bus\r
-                 SLV_READ_IN           => slv_read(11),\r
-                 SLV_WRITE_IN          => slv_write(11),\r
-                 SLV_ACK_OUT           => slv_ack(11),\r
-                 SLV_DATA_IN           => slv_data_wr(11*32+31 downto 11*32),\r
-                 SLV_DATA_OUT          => slv_data_rd(11*32+31 downto 11*32),\r
-                 -- I/O to the backend\r
-                 STATUS_REG_IN         => status_pll_in,\r
-                 CTRL_REG_OUT          => ctrl_pll,\r
-                 -- Status lines\r
-                 STAT                          => open\r
-               );\r
+generic map(\r
+       RESET_VALUE => x"00_02"\r
+)\r
+port map(\r
+       CLK_IN          => clk_in,\r
+       RESET_IN        => reset_in, -- general reset\r
+       -- Slave bus\r
+       SLV_READ_IN     => slv_read(11),\r
+       SLV_WRITE_IN    => slv_write(11),\r
+       SLV_ACK_OUT     => slv_ack(11),\r
+       SLV_DATA_IN     => slv_data_wr(11*32+31 downto 11*32),\r
+       SLV_DATA_OUT    => slv_data_rd(11*32+31 downto 11*32),\r
+       -- I/O to the backend\r
+       STATUS_REG_IN   => status_pll_in,\r
+       CTRL_REG_OUT    => ctrl_pll,\r
+       -- Status lines\r
+       STAT            => open\r
+);\r
 slv_busy(11) <= '0';\r
 \r
 ------------------------------------------------------------------------------------\r
 -- ADC0 snooper\r
 ------------------------------------------------------------------------------------\r
 THE_ADC0_SNOOPER: slv_adc_snoop\r
-port map( CLK_IN                       => clk_in,\r
-                 RESET_IN                      => reset_in,\r
-                 -- Slave bus\r
-                 SLV_ADDR_IN           => slv_addr(12*16+9 downto 12*16),\r
-                 SLV_READ_IN           => slv_read(12),\r
-                 SLV_WRITE_IN          => slv_write(12),\r
-                 SLV_ACK_OUT           => slv_ack(12),\r
-                 SLV_DATA_IN           => slv_data_wr(12*32+31 downto 12*32),\r
-                 SLV_DATA_OUT          => slv_data_rd(12*32+31 downto 12*32),\r
-                 -- I/O to the backend\r
-                 ADC_SEL_OUT           => adc0_sel_out,\r
-                 ADC_CLK_IN            => adc0_clk_in,\r
-                 ADC_DATA_IN           => adc0_data_in,\r
-                 -- Status lines\r
-                 STAT                          => open\r
-               );\r
+port map(\r
+       CLK_IN          => clk_in,\r
+       RESET_IN        => reset_in,\r
+       -- Slave bus\r
+       SLV_ADDR_IN     => slv_addr(12*16+9 downto 12*16),\r
+       SLV_READ_IN     => slv_read(12),\r
+       SLV_WRITE_IN    => slv_write(12),\r
+       SLV_ACK_OUT     => slv_ack(12),\r
+       SLV_DATA_IN     => slv_data_wr(12*32+31 downto 12*32),\r
+       SLV_DATA_OUT    => slv_data_rd(12*32+31 downto 12*32),\r
+       -- I/O to the backend\r
+       ADC_SEL_OUT     => adc0_sel_out,\r
+       ADC_CLK_IN      => adc0_clk_in,\r
+       ADC_DATA_IN     => adc0_data_in,\r
+       -- Status lines\r
+       STAT            => open\r
+);\r
 slv_busy(12) <= '0';\r
 \r
 \r
@@ -752,46 +780,50 @@ slv_busy(12) <= '0';
 -- ADC1 snooper\r
 ------------------------------------------------------------------------------------\r
 THE_ADC1_SNOOPER: slv_adc_snoop\r
-port map( CLK_IN                       => clk_in,\r
-                 RESET_IN                      => reset_in,\r
-                 -- Slave bus\r
-                 SLV_ADDR_IN           => slv_addr(13*16+9 downto 13*16),\r
-                 SLV_READ_IN           => slv_read(13),\r
-                 SLV_WRITE_IN          => slv_write(13),\r
-                 SLV_ACK_OUT           => slv_ack(13),\r
-                 SLV_DATA_IN           => slv_data_wr(13*32+31 downto 13*32),\r
-                 SLV_DATA_OUT          => slv_data_rd(13*32+31 downto 13*32),\r
-                 -- I/O to the backend\r
-                 ADC_SEL_OUT           => adc1_sel_out,\r
-                 ADC_CLK_IN            => adc1_clk_in,\r
-                 ADC_DATA_IN           => adc1_data_in,\r
-                 -- Status lines\r
-                 STAT                          => open\r
-               );\r
+port map(\r
+       CLK_IN          => clk_in,\r
+       RESET_IN        => reset_in,\r
+       -- Slave bus\r
+       SLV_ADDR_IN     => slv_addr(13*16+9 downto 13*16),\r
+       SLV_READ_IN     => slv_read(13),\r
+       SLV_WRITE_IN    => slv_write(13),\r
+       SLV_ACK_OUT     => slv_ack(13),\r
+       SLV_DATA_IN     => slv_data_wr(13*32+31 downto 13*32),\r
+       SLV_DATA_OUT    => slv_data_rd(13*32+31 downto 13*32),\r
+       -- I/O to the backend\r
+       ADC_SEL_OUT     => adc1_sel_out,\r
+       ADC_CLK_IN      => adc1_clk_in,\r
+       ADC_DATA_IN     => adc1_data_in,\r
+       -- Status lines\r
+       STAT            => open\r
+);\r
 slv_busy(13) <= '0';\r
 \r
-       \r
+\r
 ------------------------------------------------------------------------------------\r
 -- test register (normal)\r
 ------------------------------------------------------------------------------------\r
 THE_GOOD_TEST_REG: slv_register\r
-generic map( RESET_VALUE       => x"dead_beef" )\r
-port map( CLK_IN                       => clk_in,\r
-                 RESET_IN                      => reset_in, -- general reset\r
-                 BUSY_IN                       => '0',\r
-                 -- Slave bus\r
-                 SLV_READ_IN           => slv_read(14),\r
-                 SLV_WRITE_IN          => slv_write(14),\r
-                 SLV_BUSY_OUT          => slv_busy(14),\r
-                 SLV_ACK_OUT           => slv_ack(14),\r
-                 SLV_DATA_IN           => slv_data_wr(14*32+31 downto 14*32),\r
-                 SLV_DATA_OUT          => slv_data_rd(14*32+31 downto 14*32),\r
-                 -- I/O to the backend\r
-                 REG_DATA_IN           => test_reg_in, --x"5a3c_87e1",\r
-                 REG_DATA_OUT          => test_reg_out,\r
-                 -- Status lines\r
-                 STAT                          => open\r
-               );\r
+generic map(\r
+       RESET_VALUE => x"dead_beef"\r
+)\r
+port map(\r
+       CLK_IN          => clk_in,\r
+       RESET_IN        => reset_in, -- general reset\r
+       BUSY_IN         => '0',\r
+       -- Slave bus\r
+       SLV_READ_IN     => slv_read(14),\r
+       SLV_WRITE_IN    => slv_write(14),\r
+       SLV_BUSY_OUT    => slv_busy(14),\r
+       SLV_ACK_OUT     => slv_ack(14),\r
+       SLV_DATA_IN     => slv_data_wr(14*32+31 downto 14*32),\r
+       SLV_DATA_OUT    => slv_data_rd(14*32+31 downto 14*32),\r
+       -- I/O to the backend\r
+       REG_DATA_IN     => test_reg_in, --x"5a3c_87e1",\r
+       REG_DATA_OUT    => test_reg_out,\r
+       -- Status lines\r
+       STAT            => open\r
+);\r
 \r
 \r
 \r
index ba109d2dc1464a8689cef74889d77e9559ff2f90..67fc84c3548b00851a12dd20d3ac8f7dcdf14dd1 100644 (file)
@@ -8,62 +8,62 @@ use work.adcmv3_components.all;
 \r
 \r
 entity slv_adc_la is\r
-port( CLK_IN           : in    std_logic;\r
-         RESET_IN              : in    std_logic;\r
-         -- Slave bus\r
-         SLV_ADDR_IN   : in    std_logic_vector(9 downto 0);\r
-         SLV_READ_IN   : in    std_logic;\r
-         SLV_WRITE_IN  : in    std_logic;\r
-         SLV_ACK_OUT   : out   std_logic;\r
-         SLV_DATA_IN   : in    std_logic_vector(31 downto 0);\r
-         SLV_DATA_OUT  : out   std_logic_vector(31 downto 0);\r
-         -- I/O to the backend\r
-         ADC_SEL_OUT   : out   std_logic_vector(2 downto 0);   -- selects the ADC channel to snoop from\r
-         ADC_CLK_IN    : in    std_logic;                                              -- ADC reconstructed clock\r
-         ADC_DATA_IN   : in    std_logic_vector(11 downto 0);  -- ADC selected channel data\r
-         -- Status lines\r
-         STAT                  : out   std_logic_vector(31 downto 0) -- DEBUG\r
-       );\r
+port(\r
+       CLK_IN          : in    std_logic;\r
+       RESET_IN        : in    std_logic;\r
+       -- Slave bus\r
+       SLV_ADDR_IN   : in    std_logic_vector(9 downto 0);\r
+       SLV_READ_IN     : in    std_logic;\r
+       SLV_WRITE_IN    : in    std_logic;\r
+       SLV_ACK_OUT     : out   std_logic;\r
+       SLV_DATA_IN     : in    std_logic_vector(31 downto 0);\r
+       SLV_DATA_OUT    : out   std_logic_vector(31 downto 0);\r
+       -- I/O to the backend\r
+       ADC_SEL_OUT     : out   std_logic_vector(2 downto 0);   -- selects the ADC channel to snoop from\r
+       ADC_CLK_IN      : in    std_logic;                      -- ADC reconstructed clock\r
+       ADC_DATA_IN     : in    std_logic_vector(11 downto 0);  -- ADC selected channel data\r
+       -- Status lines\r
+       STAT            : out   std_logic_vector(31 downto 0) -- DEBUG\r
+);\r
 end entity;\r
 \r
 architecture Behavioral of slv_adc_la is\r
 \r
 -- Signals\r
+type STATES is (SLEEP,RD_RDY,RD_DEL0,RD_DEL1,WR_DEL0,WR_DEL1,WR_RDY,RD_ACK,WR_ACK,DONE);\r
+signal CURRENT_STATE, NEXT_STATE: STATES;\r
+\r
+-- slave bus signals\r
+signal slv_ack_x        : std_logic;\r
+signal slv_ack          : std_logic;\r
+signal store_wr_x       : std_logic;\r
+signal store_wr         : std_logic;\r
+signal store_rd_x       : std_logic;\r
+signal store_rd         : std_logic;\r
+\r
+signal arm_x            : std_logic;\r
+signal trg_x            : std_logic;\r
+\r
+signal ctrl_reg         : std_logic_vector(15 downto 0);\r
+signal status_reg       : std_logic_vector(31 downto 0);\r
+\r
+signal rd_data          : std_logic_vector(15 downto 0);\r
+\r
+-- 40MHz clock domain!!!\r
+signal wr_data          : std_logic_vector(15 downto 0);\r
+signal wr_addr          : std_logic_vector(9 downto 0);\r
+signal wr_we            : std_logic;\r
+signal reset_40mhz      : std_logic;\r
+signal arm_40mhz        : std_logic;\r
+signal trg_40mhz        : std_logic;\r
+\r
+signal sm_clear         : std_logic;\r
+signal sm_run           : std_logic;\r
+signal sm_sample        : std_logic;\r
+signal sm_ready         : std_logic;\r
+signal sm_last          : std_logic;\r
+signal sm_bsm           : std_logic_vector(3 downto 0);\r
 \r
-       type STATES is (SLEEP,RD_RDY,RD_DEL0,RD_DEL1,WR_DEL0,WR_DEL1,WR_RDY,RD_ACK,WR_ACK,DONE);\r
-       signal CURRENT_STATE, NEXT_STATE: STATES;\r
-\r
-       -- slave bus signals\r
-       signal slv_ack_x                : std_logic;\r
-       signal slv_ack                  : std_logic;\r
-       signal store_wr_x               : std_logic;\r
-       signal store_wr                 : std_logic;\r
-       signal store_rd_x               : std_logic;\r
-       signal store_rd                 : std_logic;\r
-\r
-       signal arm_x                    : std_logic;\r
-       signal trg_x                    : std_logic;\r
-\r
-       signal ctrl_reg                 : std_logic_vector(15 downto 0);\r
-       signal status_reg               : std_logic_vector(31 downto 0);\r
-\r
-       signal rd_data                  : std_logic_vector(15 downto 0);\r
-\r
-       -- 40MHz clock domain!!!\r
-       signal wr_data                  : std_logic_vector(15 downto 0);\r
-       signal wr_addr                  : std_logic_vector(9 downto 0);\r
-       signal wr_we                    : std_logic;\r
-       signal reset_40mhz              : std_logic;\r
-       signal arm_40mhz                : std_logic;\r
-       signal trg_40mhz                : std_logic;\r
-\r
-       signal sm_clear                 : std_logic;\r
-       signal sm_run                   : std_logic;\r
-       signal sm_sample                : std_logic;\r
-       signal sm_ready                 : std_logic;\r
-       signal sm_last                  : std_logic;\r
-       signal sm_bsm                   : std_logic_vector(3 downto 0);\r
-       \r
 begin\r
 \r
 -- Fake\r
@@ -105,38 +105,38 @@ begin
        store_wr_x <= '0';\r
        store_rd_x <= '0';\r
        case CURRENT_STATE is\r
-               when SLEEP              =>      if   ( slv_read_in = '1' ) then\r
+               when SLEEP      =>  if   ( slv_read_in = '1' ) then\r
                                                                NEXT_STATE <= RD_DEL0;\r
                                                                store_rd_x <= '1';\r
                                                        elsif( slv_write_in = '1' ) then\r
                                                                NEXT_STATE <= WR_DEL0;\r
                                                                store_wr_x <= '1';\r
-                                                       else    \r
+                                                       else\r
                                                                NEXT_STATE <= SLEEP;\r
                                                        end if;\r
-               when RD_DEL0    =>      NEXT_STATE <= RD_DEL1;\r
-               when RD_DEL1    =>      NEXT_STATE <= RD_RDY;\r
-               when RD_RDY             =>      NEXT_STATE <= RD_ACK;\r
-               when RD_ACK             =>      if( slv_read_in = '0' ) then\r
+               when RD_DEL0    =>  NEXT_STATE <= RD_DEL1;\r
+               when RD_DEL1    =>  NEXT_STATE <= RD_RDY;\r
+               when RD_RDY     =>  NEXT_STATE <= RD_ACK;\r
+               when RD_ACK     =>  if( slv_read_in = '0' ) then\r
                                                                NEXT_STATE <= DONE;\r
                                                                slv_ack_x  <= '1';\r
                                                        else\r
                                                                NEXT_STATE <= RD_ACK;\r
                                                                slv_ack_x  <= '1';\r
                                                        end if;\r
-               when WR_DEL0    =>      NEXT_STATE <= WR_DEL1;\r
-               when WR_DEL1    =>      NEXT_STATE <= WR_RDY;\r
-               when WR_RDY             =>      NEXT_STATE <= WR_ACK;\r
-               when WR_ACK             =>      if( slv_write_in = '0' ) then\r
+               when WR_DEL0    =>  NEXT_STATE <= WR_DEL1;\r
+               when WR_DEL1    =>  NEXT_STATE <= WR_RDY;\r
+               when WR_RDY     =>  NEXT_STATE <= WR_ACK;\r
+               when WR_ACK     =>  if( slv_write_in = '0' ) then\r
                                                                NEXT_STATE <= DONE;\r
                                                                slv_ack_x  <= '1';\r
                                                        else\r
                                                                NEXT_STATE <= WR_ACK;\r
                                                                slv_ack_x  <= '1';\r
                                                        end if;\r
-               when DONE               =>      NEXT_STATE <= SLEEP;\r
-                       \r
-               when others             =>      NEXT_STATE <= SLEEP;\r
+               when DONE       =>  NEXT_STATE <= SLEEP;\r
+\r
+               when others     =>  NEXT_STATE <= SLEEP;\r
        end case;\r
 end process TRANSFORM;\r
 \r
@@ -145,54 +145,58 @@ end process TRANSFORM;
 ---------------------------------------------------------\r
 \r
 THE_RST_SYNC: state_sync\r
-port map( STATE_A_IN           => reset_in,\r
-                 CLK_B_IN                      => adc_clk_in,\r
-                 RESET_B_IN            => '0',\r
-                 STATE_B_OUT           => reset_40mhz\r
-               );\r
+port map(\r
+       STATE_A_IN      => reset_in,\r
+       CLK_B_IN        => adc_clk_in,\r
+       RESET_B_IN      => '0',\r
+       STATE_B_OUT     => reset_40mhz\r
+);\r
 \r
 arm_x <= slv_data_in(30) and store_wr;\r
 \r
 THE_ARM_PULSE_SYNC: pulse_sync\r
-port map( CLK_A_IN                     => clk_in,\r
-                 RESET_A_IN            => reset_in,\r
-                 PULSE_A_IN            => arm_x,\r
-                 CLK_B_IN                      => adc_clk_in,\r
-                 RESET_B_IN            => reset_40mhz,\r
-                 PULSE_B_OUT           => arm_40mhz\r
-               );\r
+port map(\r
+       CLK_A_IN        => clk_in,\r
+       RESET_A_IN      => reset_in,\r
+       PULSE_A_IN      => arm_x,\r
+       CLK_B_IN        => adc_clk_in,\r
+       RESET_B_IN      => reset_40mhz,\r
+       PULSE_B_OUT     => arm_40mhz\r
+);\r
 \r
 trg_x <= slv_data_in(31) and store_wr;\r
 \r
 THE_TRG_PULSE_SYNC: pulse_sync\r
-port map( CLK_A_IN                     => clk_in,\r
-                 RESET_A_IN            => reset_in,\r
-                 PULSE_A_IN            => trg_x,\r
-                 CLK_B_IN                      => adc_clk_in,\r
-                 RESET_B_IN            => reset_40mhz,\r
-                 PULSE_B_OUT           => trg_40mhz\r
-               );\r
+port map(\r
+       CLK_A_IN        => clk_in,\r
+       RESET_A_IN      => reset_in,\r
+       PULSE_A_IN      => trg_x,\r
+       CLK_B_IN        => adc_clk_in,\r
+       RESET_B_IN      => reset_40mhz,\r
+       PULSE_B_OUT     => trg_40mhz\r
+);\r
 \r
 THE_LOGIC_ANALYZER: logic_analyzer\r
-port map( CLK_IN               => adc_clk_in,\r
-                 RESET_IN              => reset_40mhz,\r
-                 -- control signals\r
-                 ARM_IN                => arm_40mhz, -- BUGBUGBUG\r
-                 TRG_IN                => trg_40mhz, -- BUGBUGBUG\r
-                 MAX_SAMPLE_IN => ctrl_reg(9 downto 0),\r
-                 -- status signals\r
-                 SM_ADDR_OUT   => wr_addr,\r
-                 SM_CE_OUT             => open,\r
-                 SM_WE_OUT             => wr_we,\r
-                 CLEAR_OUT             => sm_clear,\r
-                 RUN_OUT               => sm_run,\r
-                 SAMPLE_OUT    => sm_sample,\r
-                 READY_OUT             => sm_ready,\r
-                 LAST_OUT              => sm_last,\r
-                 -- Status lines\r
-                 BSM_OUT               => sm_bsm,\r
-                 STAT                  => open\r
-               );\r
+port map(\r
+       CLK_IN          => adc_clk_in,\r
+       RESET_IN        => reset_40mhz,\r
+       -- control signals\r
+       ARM_IN          => arm_40mhz, -- BUGBUGBUG\r
+       TRG_IN          => trg_40mhz, -- BUGBUGBUG\r
+       MAX_SAMPLE_IN   => ctrl_reg(9 downto 0),\r
+       -- status signals\r
+       SM_ADDR_OUT     => wr_addr,\r
+       SM_CE_OUT       => open,\r
+       SM_WE_OUT       => wr_we,\r
+       CLEAR_OUT       => sm_clear,\r
+       RUN_OUT         => sm_run,\r
+       SAMPLE_OUT      => sm_sample,\r
+       READY_OUT       => sm_ready,\r
+       LAST_OUT        => sm_last,\r
+       -- Status lines\r
+       BSM_OUT         => sm_bsm,\r
+       STAT            => open\r
+);\r
 \r
 wr_data(15) <= sm_clear;\r
 wr_data(14) <= sm_run;\r
@@ -201,17 +205,18 @@ wr_data(12) <= sm_last;
 wr_data(11 downto 0) <= adc_data_in;\r
 \r
 THE_ADC0_SNOOP_MEM: adc_snoop_mem\r
-port map( WRADDRESS            => wr_addr,\r
-                 DATA                  => wr_data,\r
-                 WE                    => wr_we,\r
-                 WRCLOCK               => adc_clk_in,\r
-                 WRCLOCKEN             => '1',\r
-                 RDADDRESS             => slv_addr_in, \r
-                 RDCLOCK               => clk_in,\r
-                 RDCLOCKEN             => '1',\r
-                 RESET                 => reset_in,\r
-                 Q                             => rd_data\r
-               );\r
+port map(\r
+       WRADDRESS   => wr_addr,\r
+       DATA        => wr_data,\r
+       WE          => wr_we,\r
+       WRCLOCK     => adc_clk_in,\r
+       WRCLOCKEN   => '1',\r
+       RDADDRESS   => slv_addr_in,\r
+       RDCLOCK     => clk_in,\r
+       RDCLOCKEN   => '1',\r
+       RESET       => reset_in,\r
+       Q           => rd_data\r
+);\r
 \r
 -- register write\r
 THE_WRITE_REG_PROC: process( clk_in )\r
index d130d70523a786724b90e89bfafd6eb6db40717a..0543e153243d21182fe29f73a79200b1f12a2446 100644 (file)
@@ -8,50 +8,50 @@ use work.adcmv3_components.all;
 \r
 \r
 entity slv_adc_snoop is\r
-port( CLK_IN           : in    std_logic;\r
-         RESET_IN              : in    std_logic;\r
-         -- Slave bus\r
-         SLV_ADDR_IN   : in    std_logic_vector(9 downto 0);\r
-         SLV_READ_IN   : in    std_logic;\r
-         SLV_WRITE_IN  : in    std_logic;\r
-         SLV_ACK_OUT   : out   std_logic;\r
-         SLV_DATA_IN   : in    std_logic_vector(31 downto 0);\r
-         SLV_DATA_OUT  : out   std_logic_vector(31 downto 0);\r
-         -- I/O to the backend\r
-         ADC_SEL_OUT   : out   std_logic_vector(2 downto 0);   -- selects the ADC channel to snoop from\r
-         ADC_CLK_IN    : in    std_logic;                                              -- ADC reconstructed clock\r
-         ADC_DATA_IN   : in    std_logic_vector(11 downto 0);  -- ADC selected channel data\r
-         -- Status lines\r
-         STAT                  : out   std_logic_vector(31 downto 0) -- DEBUG\r
-       );\r
+port(\r
+       CLK_IN          : in    std_logic;\r
+       RESET_IN        : in    std_logic;\r
+       -- Slave bus\r
+       SLV_ADDR_IN     : in    std_logic_vector(9 downto 0);\r
+       SLV_READ_IN     : in    std_logic;\r
+       SLV_WRITE_IN    : in    std_logic;\r
+       SLV_ACK_OUT     : out   std_logic;\r
+       SLV_DATA_IN     : in    std_logic_vector(31 downto 0);\r
+       SLV_DATA_OUT    : out   std_logic_vector(31 downto 0);\r
+       -- I/O to the backend\r
+       ADC_SEL_OUT     : out   std_logic_vector(2 downto 0);   -- selects the ADC channel to snoop from\r
+       ADC_CLK_IN      : in    std_logic;                      -- ADC reconstructed clock\r
+       ADC_DATA_IN     : in    std_logic_vector(11 downto 0);  -- ADC selected channel data\r
+       -- Status lines\r
+       STAT            : out   std_logic_vector(31 downto 0) -- DEBUG\r
+);\r
 end entity;\r
 \r
 architecture Behavioral of slv_adc_snoop is\r
 \r
 -- Signals\r
+type STATES is (SLEEP,RD_RDY,RD_DEL0,RD_DEL1,WR_DEL0,WR_DEL1,WR_RDY,RD_ACK,WR_ACK,DONE);\r
+signal CURRENT_STATE, NEXT_STATE: STATES;\r
 \r
-       type STATES is (SLEEP,RD_RDY,RD_DEL0,RD_DEL1,WR_DEL0,WR_DEL1,WR_RDY,RD_ACK,WR_ACK,DONE);\r
-       signal CURRENT_STATE, NEXT_STATE: STATES;\r
+-- slave bus signals\r
+signal slv_ack_x        : std_logic;\r
+signal slv_ack          : std_logic;\r
+signal store_wr_x       : std_logic;\r
+signal store_wr         : std_logic;\r
+signal store_rd_x       : std_logic;\r
+signal store_rd         : std_logic;\r
 \r
-       -- slave bus signals\r
-       signal slv_ack_x                : std_logic;\r
-       signal slv_ack                  : std_logic;\r
-       signal store_wr_x               : std_logic;\r
-       signal store_wr                 : std_logic;\r
-       signal store_rd_x               : std_logic;\r
-       signal store_rd                 : std_logic;\r
+signal ctrl_reg         : std_logic_vector(15 downto 0);\r
+signal status_reg       : std_logic_vector(31 downto 0);\r
 \r
-       signal ctrl_reg                 : std_logic_vector(15 downto 0);\r
-       signal status_reg               : std_logic_vector(31 downto 0);\r
+signal rd_data          : std_logic_vector(15 downto 0);\r
 \r
-       signal rd_data                  : std_logic_vector(15 downto 0);\r
-\r
-       -- 40MHz clock domain!!!\r
-       signal wr_data                  : std_logic_vector(15 downto 0);\r
-       signal wr_ctr                   : std_logic_vector(9 downto 0);\r
-       signal rst_wr_ctr               : std_logic;\r
-       signal ce_wr_ctr                : std_logic;\r
-       signal reset                    : std_logic;\r
+-- 40MHz clock domain!!!\r
+signal wr_data          : std_logic_vector(15 downto 0);\r
+signal wr_ctr           : std_logic_vector(9 downto 0);\r
+signal rst_wr_ctr       : std_logic;\r
+signal ce_wr_ctr        : std_logic;\r
+signal reset            : std_logic;\r
 \r
 begin\r
 \r
@@ -60,7 +60,7 @@ stat(31 downto 18) <= (others => '0');
 stat(17)           <= rst_wr_ctr;\r
 stat(16)           <= ce_wr_ctr;\r
 stat(15 downto 0)  <= ctrl_reg;\r
-       \r
+\r
 ---------------------------------------------------------\r
 -- Statemachine                                        --\r
 ---------------------------------------------------------\r
@@ -90,38 +90,38 @@ begin
        store_wr_x <= '0';\r
        store_rd_x <= '0';\r
        case CURRENT_STATE is\r
-               when SLEEP              =>      if   ( slv_read_in = '1' ) then\r
+               when SLEEP      =>  if   ( slv_read_in = '1' ) then\r
                                                                NEXT_STATE <= RD_DEL0;\r
                                                                store_rd_x <= '1';\r
                                                        elsif( slv_write_in = '1' ) then\r
                                                                NEXT_STATE <= WR_DEL0;\r
                                                                store_wr_x <= '1';\r
-                                                       else    \r
+                                                       else\r
                                                                NEXT_STATE <= SLEEP;\r
                                                        end if;\r
-               when RD_DEL0    =>      NEXT_STATE <= RD_DEL1;\r
-               when RD_DEL1    =>      NEXT_STATE <= RD_RDY;\r
-               when RD_RDY             =>      NEXT_STATE <= RD_ACK;\r
-               when RD_ACK             =>      if( slv_read_in = '0' ) then\r
+               when RD_DEL0    =>  NEXT_STATE <= RD_DEL1;\r
+               when RD_DEL1    =>  NEXT_STATE <= RD_RDY;\r
+               when RD_RDY     =>  NEXT_STATE <= RD_ACK;\r
+               when RD_ACK     =>  if( slv_read_in = '0' ) then\r
                                                                NEXT_STATE <= DONE;\r
                                                                slv_ack_x  <= '1';\r
                                                        else\r
                                                                NEXT_STATE <= RD_ACK;\r
                                                                slv_ack_x  <= '1';\r
                                                        end if;\r
-               when WR_DEL0    =>      NEXT_STATE <= WR_DEL1;\r
-               when WR_DEL1    =>      NEXT_STATE <= WR_RDY;\r
-               when WR_RDY             =>      NEXT_STATE <= WR_ACK;\r
-               when WR_ACK             =>      if( slv_write_in = '0' ) then\r
+               when WR_DEL0    =>  NEXT_STATE <= WR_DEL1;\r
+               when WR_DEL1    =>  NEXT_STATE <= WR_RDY;\r
+               when WR_RDY     =>  NEXT_STATE <= WR_ACK;\r
+               when WR_ACK     =>  if( slv_write_in = '0' ) then\r
                                                                NEXT_STATE <= DONE;\r
                                                                slv_ack_x  <= '1';\r
                                                        else\r
                                                                NEXT_STATE <= WR_ACK;\r
                                                                slv_ack_x  <= '1';\r
                                                        end if;\r
-               when DONE               =>      NEXT_STATE <= SLEEP;\r
-                       \r
-               when others             =>      NEXT_STATE <= SLEEP;\r
+               when DONE       =>  NEXT_STATE <= SLEEP;\r
+\r
+               when others     =>  NEXT_STATE <= SLEEP;\r
        end case;\r
 end process TRANSFORM;\r
 \r
@@ -130,25 +130,28 @@ end process TRANSFORM;
 ---------------------------------------------------------\r
 \r
 THE_RESET_SYNC: state_sync\r
-port map( STATE_A_IN           => reset_in,\r
-                 CLK_B_IN                      => adc_clk_in,\r
-                 RESET_B_IN            => '0',\r
-                 STATE_B_OUT           => reset\r
-               );\r
+port map(\r
+       STATE_A_IN      => reset_in,\r
+       CLK_B_IN        => adc_clk_in,\r
+       RESET_B_IN      => '0',\r
+       STATE_B_OUT     => reset\r
+);\r
 \r
 THE_RST_SYNC: state_sync\r
-port map( STATE_A_IN           => ctrl_reg(15),\r
-                 CLK_B_IN                      => adc_clk_in,\r
-                 RESET_B_IN            => reset,\r
-                 STATE_B_OUT           => rst_wr_ctr\r
-               );\r
+port map(\r
+       STATE_A_IN      => ctrl_reg(15),\r
+       CLK_B_IN        => adc_clk_in,\r
+       RESET_B_IN      => reset,\r
+       STATE_B_OUT     => rst_wr_ctr\r
+);\r
 \r
 THE_CE_SYNC: state_sync\r
-port map( STATE_A_IN           => ctrl_reg(14),\r
-                 CLK_B_IN                      => adc_clk_in,\r
-                 RESET_B_IN            => reset,\r
-                 STATE_B_OUT           => ce_wr_ctr\r
-               );\r
+port map(\r
+       STATE_A_IN      => ctrl_reg(14),\r
+       CLK_B_IN        => adc_clk_in,\r
+       RESET_B_IN      => reset,\r
+       STATE_B_OUT     => ce_wr_ctr\r
+);\r
 \r
 THE_WR_CTR_PROC: process( adc_clk_in )\r
 begin\r
@@ -164,17 +167,18 @@ end process THE_WR_CTR_PROC;
 wr_data <= x"0" & adc_data_in;\r
 \r
 THE_ADC0_SNOOP_MEM: adc_snoop_mem\r
-port map( WRADDRESS            => wr_ctr,\r
-                 DATA                  => wr_data,\r
-                 WE                    => ce_wr_ctr,\r
-                 WRCLOCK               => adc_clk_in,\r
-                 WRCLOCKEN             => '1',\r
-                 RDADDRESS             => slv_addr_in, \r
-                 RDCLOCK               => clk_in,\r
-                 RDCLOCKEN             => '1',\r
-                 RESET                 => reset_in,\r
-                 Q                             => rd_data\r
-               );\r
+port map(\r
+       WRADDRESS   => wr_ctr,\r
+       DATA        => wr_data,\r
+       WE          => ce_wr_ctr,\r
+       WRCLOCK     => adc_clk_in,\r
+       WRCLOCKEN   => '1',\r
+       RDADDRESS   => slv_addr_in,\r
+       RDCLOCK     => clk_in,\r
+       RDCLOCKEN   => '1',\r
+       RESET       => reset_in,\r
+       Q           => rd_data\r
+);\r
 \r
 -- register write\r
 THE_WRITE_REG_PROC: process( clk_in )\r
index a4a1723f48bfc6c8401fa21297f19c127d8c9710..d035292466c466d9695172f84a4043e48e634649 100644 (file)
@@ -8,41 +8,43 @@ use work.adcmv3_components.all;
 \r
 \r
 entity slv_half_register is\r
-generic( RESET_VALUE   : std_logic_vector(15 downto 0) := x"0000" );\r
-port( CLK_IN           : in    std_logic;\r
-         RESET_IN              : in    std_logic;\r
-         -- Slave bus\r
-         SLV_READ_IN   : in    std_logic;\r
-         SLV_WRITE_IN  : in    std_logic;\r
-         SLV_ACK_OUT   : out   std_logic;\r
-         SLV_DATA_IN   : in    std_logic_vector(31 downto 0);\r
-         SLV_DATA_OUT  : out   std_logic_vector(31 downto 0);\r
-         -- I/O to the backend\r
-         STATUS_REG_IN : in    std_logic_vector(15 downto 0);\r
-         CTRL_REG_OUT  : out   std_logic_vector(15 downto 0);\r
-         -- Status lines\r
-         STAT                  : out   std_logic_vector(31 downto 0) -- DEBUG\r
-       );\r
+generic(\r
+       RESET_VALUE : std_logic_vector(15 downto 0) := x"0000"\r
+);\r
+port(\r
+       CLK_IN          : in    std_logic;\r
+       RESET_IN        : in    std_logic;\r
+       -- Slave bus\r
+       SLV_READ_IN     : in    std_logic;\r
+       SLV_WRITE_IN    : in    std_logic;\r
+       SLV_ACK_OUT     : out   std_logic;\r
+       SLV_DATA_IN     : in    std_logic_vector(31 downto 0);\r
+       SLV_DATA_OUT    : out   std_logic_vector(31 downto 0);\r
+       -- I/O to the backend\r
+       STATUS_REG_IN   : in    std_logic_vector(15 downto 0);\r
+       CTRL_REG_OUT    : out   std_logic_vector(15 downto 0);\r
+       -- Status lines\r
+       STAT            : out   std_logic_vector(31 downto 0) -- DEBUG\r
+);\r
 end entity;\r
 \r
 architecture Behavioral of slv_half_register is\r
 \r
 -- Signals\r
+type STATES is (SLEEP,RD_RDY,WR_RDY,RD_ACK,WR_ACK,DONE);\r
+signal CURRENT_STATE, NEXT_STATE: STATES;\r
 \r
-       type STATES is (SLEEP,RD_RDY,WR_RDY,RD_ACK,WR_ACK,DONE);\r
-       signal CURRENT_STATE, NEXT_STATE: STATES;\r
+-- slave bus signals\r
+signal slv_ack_x        : std_logic;\r
+signal slv_ack          : std_logic;\r
+signal store_wr_x       : std_logic;\r
+signal store_wr         : std_logic;\r
+signal store_rd_x       : std_logic;\r
+signal store_rd         : std_logic;\r
 \r
-       -- slave bus signals\r
-       signal slv_ack_x                : std_logic;\r
-       signal slv_ack                  : std_logic;\r
-       signal store_wr_x               : std_logic;\r
-       signal store_wr                 : std_logic;\r
-       signal store_rd_x               : std_logic;\r
-       signal store_rd                 : std_logic;\r
+signal ctrl_reg         : std_logic_vector(15 downto 0);\r
 \r
-       signal ctrl_reg                 : std_logic_vector(15 downto 0);\r
-\r
-       signal reg_slv_data_out : std_logic_vector(31 downto 0); -- read back data\r
+signal reg_slv_data_out : std_logic_vector(31 downto 0); -- read back data\r
 \r
 begin\r
 \r
@@ -78,34 +80,34 @@ begin
        store_wr_x <= '0';\r
        store_rd_x <= '0';\r
        case CURRENT_STATE is\r
-               when SLEEP              =>      if   ( slv_read_in = '1' ) then\r
+               when SLEEP      =>  if   ( slv_read_in = '1' ) then\r
                                                                NEXT_STATE <= RD_RDY;\r
                                                                store_rd_x <= '1';\r
                                                        elsif( slv_write_in = '1' ) then\r
                                                                NEXT_STATE <= WR_RDY;\r
                                                                store_wr_x <= '1';\r
-                                                       else    \r
+                                                       else\r
                                                                NEXT_STATE <= SLEEP;\r
                                                        end if;\r
-               when RD_RDY             =>      NEXT_STATE <= RD_ACK;\r
+               when RD_RDY     =>  NEXT_STATE <= RD_ACK;\r
                                                        slv_ack_x  <= '1';\r
-               when WR_RDY             =>      NEXT_STATE <= WR_ACK;\r
+               when WR_RDY     =>  NEXT_STATE <= WR_ACK;\r
                                                        slv_ack_x  <= '1';\r
-               when RD_ACK             =>      if( slv_read_in = '0' ) then\r
+               when RD_ACK     =>  if( slv_read_in = '0' ) then\r
                                                                NEXT_STATE <= DONE;\r
                                                        else\r
                                                                NEXT_STATE <= RD_ACK;\r
                                                                slv_ack_x  <= '1';\r
                                                        end if;\r
-               when WR_ACK             =>      if( slv_write_in = '0' ) then\r
+               when WR_ACK     =>  if( slv_write_in = '0' ) then\r
                                                                NEXT_STATE <= DONE;\r
                                                        else\r
                                                                NEXT_STATE <= WR_ACK;\r
                                                                slv_ack_x  <= '1';\r
                                                        end if;\r
-               when DONE               =>      NEXT_STATE <= SLEEP;\r
-                       \r
-               when others             =>      NEXT_STATE <= SLEEP;\r
+               when DONE       =>  NEXT_STATE <= SLEEP;\r
+\r
+               when others     =>  NEXT_STATE <= SLEEP;\r
        end case;\r
 end process TRANSFORM;\r
 \r
index 2c23121cacc23bd967720136320c82d32091816e..48ad04fd42737636fa6e01b5629db59d4fcbb8d0 100644 (file)
@@ -7,57 +7,57 @@ library work;
 use work.adcmv3_components.all;\r
 \r
 entity slv_onewire_memory is\r
-port( CLK_IN                   : in    std_logic;\r
-         RESET_IN                      : in    std_logic;\r
-         -- Slave bus\r
-         SLV_ADDR_IN           : in    std_logic_vector(5 downto 0);\r
-         SLV_READ_IN           : in    std_logic;\r
-         SLV_WRITE_IN          : in    std_logic;\r
-         SLV_ACK_OUT           : out   std_logic;\r
-         SLV_BUSY_OUT          : out   std_logic;\r
-         SLV_DATA_OUT          : out   std_logic_vector(31 downto 0);\r
-         -- backplane identifier\r
-         BACKPLANE_IN          : in    std_logic_vector(2 downto 0);\r
-         -- 1Wire lines\r
-         ONEWIRE_START_IN      : in    std_logic;\r
-         ONEWIRE_INOUT         : inout std_logic_vector(15 downto 0);\r
-         BP_ONEWIRE_INOUT      : inout std_logic;\r
-         -- Status lines\r
-         STAT                          : out   std_logic_vector(63 downto 0) -- DEBUG\r
-       );\r
+port(\r
+       CLK_IN              : in    std_logic;\r
+       RESET_IN            : in    std_logic;\r
+       -- Slave bus\r
+       SLV_ADDR_IN         : in    std_logic_vector(5 downto 0);\r
+       SLV_READ_IN         : in    std_logic;\r
+       SLV_WRITE_IN        : in    std_logic;\r
+       SLV_ACK_OUT         : out   std_logic;\r
+       SLV_BUSY_OUT        : out   std_logic;\r
+       SLV_DATA_OUT        : out   std_logic_vector(31 downto 0);\r
+       -- backplane identifier\r
+       BACKPLANE_IN        : in    std_logic_vector(2 downto 0);\r
+       -- 1Wire lines\r
+       ONEWIRE_START_IN    : in    std_logic;\r
+       ONEWIRE_INOUT       : inout std_logic_vector(15 downto 0);\r
+       BP_ONEWIRE_INOUT    : inout std_logic;\r
+       -- Status lines\r
+       STAT                : out   std_logic_vector(63 downto 0) -- DEBUG\r
+);\r
 end entity;\r
 \r
 architecture Behavioral of slv_onewire_memory is\r
 \r
 -- Signals\r
-       type STATES is (SLEEP,RD_RDY,WR_RDY,RD_ACK,WR_ACK,DONE);\r
-       signal CURRENT_STATE, NEXT_STATE: STATES;\r
-\r
-       -- slave bus signals\r
-       signal slv_ack_x                : std_logic;\r
-       signal slv_ack                  : std_logic;\r
-       signal slv_busy                 : std_logic;\r
-       signal store_wr_x               : std_logic;\r
-       signal store_wr                 : std_logic;\r
-       signal store_rd_x               : std_logic;\r
-       signal store_rd                 : std_logic;\r
-\r
-       -- for replacing the lost FE with BP data\r
-       signal wr_addr_q                : std_logic_vector(6 downto 0); -- some bits are masked\r
-       signal wr_data_q                : std_logic_vector(15 downto 0);\r
-       signal wr_we_q                  : std_logic;\r
-\r
-       signal wr_addr                  : std_logic_vector(6 downto 0); -- some bits are masked\r
-       signal wr_bp_data               : std_logic_vector(15 downto 0);\r
-       signal wr_data                  : std_logic_vector(15 downto 0);\r
-       signal wr_we                    : std_logic;\r
-       signal buf_slv_data_out : std_logic_vector(31 downto 0);\r
-\r
-       signal read_address             : std_logic_vector(5 downto 0);\r
-       signal missing_one              : std_logic_vector(3 downto 0); -- missing APV FE <-> backplane\r
-       signal overlay                  : std_logic;\r
-\r
-       signal onewire_bsm              : std_logic_vector(7 downto 0);\r
+type STATES is (SLEEP,RD_RDY,WR_RDY,RD_ACK,WR_ACK,DONE);\r
+signal CURRENT_STATE, NEXT_STATE: STATES;\r
+\r
+-- slave bus signals\r
+signal slv_ack_x        : std_logic;\r
+signal slv_ack          : std_logic;\r
+signal slv_busy         : std_logic;\r
+signal store_wr_x       : std_logic;\r
+signal store_wr         : std_logic;\r
+signal store_rd_x       : std_logic;\r
+signal store_rd         : std_logic;\r
+\r
+-- for replacing the lost FE with BP data\r
+signal wr_addr_q        : std_logic_vector(6 downto 0); -- some bits are masked\r
+signal wr_data_q        : std_logic_vector(15 downto 0);\r
+signal wr_we_q          : std_logic;\r
+signal wr_addr          : std_logic_vector(6 downto 0); -- some bits are masked\r
+signal wr_bp_data       : std_logic_vector(15 downto 0);\r
+signal wr_data          : std_logic_vector(15 downto 0);\r
+signal wr_we            : std_logic;\r
+signal buf_slv_data_out : std_logic_vector(31 downto 0);\r
+\r
+signal read_address     : std_logic_vector(5 downto 0);\r
+signal missing_one      : std_logic_vector(3 downto 0); -- missing APV FE <-> backplane\r
+signal overlay          : std_logic;\r
+\r
+signal onewire_bsm      : std_logic_vector(7 downto 0);\r
 \r
 begin\r
 \r
@@ -79,23 +79,24 @@ stat(3 downto 0)   <= onewire_bsm(3 downto 0);
 \r
 -- Remap the 1Wire chips to Luigi's world\r
 THE_ADC_ONEWIRE_MAP_MEM: adc_onewire_map_mem\r
-port map( ADDRESS(6 downto 4)  => backplane_in,\r
-                 ADDRESS(3 downto 0)   => slv_addr_in(5 downto 2),\r
-                 Q                                             => read_address(5 downto 2)\r
-               );\r
+port map(\r
+       ADDRESS(6 downto 4) => backplane_in,\r
+       ADDRESS(3 downto 0) => slv_addr_in(5 downto 2),\r
+       Q                   => read_address(5 downto 2)\r
+);\r
 read_address(1 downto 0) <= slv_addr_in(1 downto 0);\r
 \r
--- One APV FE connector is missing ("Roman's FE"), and replace the \r
+-- One APV FE connector is missing ("Roman's FE"), and replace the\r
 -- 1Wire ID by the backplane\r
 THE_ONEWIRE_SPARE_ONE: onewire_spare_one\r
-port map( ADDRESS      => backplane_in,\r
-                 Q                     => missing_one\r
-               );\r
+port map(\r
+       ADDRESS => backplane_in,\r
+       Q       => missing_one\r
+);\r
 \r
 -- Check if we need to replace data\r
 overlay <= '1' when (wr_addr(6 downto 3) = missing_one) else '0';\r
 \r
-\r
 ---------------------------------------------------------\r
 -- Statemachine                                        --\r
 ---------------------------------------------------------\r
@@ -125,34 +126,34 @@ begin
        store_wr_x <= '0';\r
        store_rd_x <= '0';\r
        case CURRENT_STATE is\r
-               when SLEEP              =>      if   ( (slv_read_in = '1') ) then\r
+               when SLEEP      =>  if   ( (slv_read_in = '1') ) then\r
                                                                NEXT_STATE <= RD_RDY;\r
                                                                store_rd_x <= '1';\r
                                                        elsif( (slv_write_in = '1') ) then\r
                                                                NEXT_STATE <= WR_RDY;\r
                                                                store_wr_x <= '1';\r
-                                                       else    \r
+                                                       else\r
                                                                NEXT_STATE <= SLEEP;\r
                                                        end if;\r
-               when RD_RDY             =>      NEXT_STATE <= RD_ACK;\r
-               when WR_RDY             =>      NEXT_STATE <= WR_ACK;\r
-               when RD_ACK             =>      if( slv_read_in = '0' ) then\r
+               when RD_RDY     =>  NEXT_STATE <= RD_ACK;\r
+               when WR_RDY     =>  NEXT_STATE <= WR_ACK;\r
+               when RD_ACK     =>  if( slv_read_in = '0' ) then\r
                                                                NEXT_STATE <= DONE;\r
                                                                slv_ack_x  <= '1';\r
                                                        else\r
                                                                NEXT_STATE <= RD_ACK;\r
                                                                slv_ack_x  <= '1';\r
                                                        end if;\r
-               when WR_ACK             =>      if( slv_write_in = '0' ) then\r
+               when WR_ACK     =>  if( slv_write_in = '0' ) then\r
                                                                NEXT_STATE <= DONE;\r
                                                                slv_ack_x  <= '1';\r
                                                        else\r
                                                                NEXT_STATE <= WR_ACK;\r
                                                                slv_ack_x  <= '1';\r
                                                        end if;\r
-               when DONE               =>      NEXT_STATE <= SLEEP;\r
-                       \r
-               when others             =>      NEXT_STATE <= SLEEP;\r
+               when DONE       =>  NEXT_STATE <= SLEEP;\r
+\r
+               when others     =>  NEXT_STATE <= SLEEP;\r
        end case;\r
 end process TRANSFORM;\r
 \r
@@ -161,23 +162,24 @@ end process TRANSFORM;
 -- 1 Wire master                                       --\r
 ---------------------------------------------------------\r
 THE_ONEWIRE_MASTER: onewire_master\r
-generic map( CLK_PERIOD                => 10 )\r
-port map( CLK                          => clk_in,\r
-                 RESET                         => reset_in,\r
-                 READOUT_ENABLE_IN     => store_wr,\r
-                 -- connection to 1-wire interface (16 APV FEs)\r
-                 ONEWIRE                       => onewire_inout,\r
-                 BP_ONEWIRE            => bp_onewire_inout,\r
-                 -- connection to external DPRAM for slow control readout\r
-                 BP_DATA_OUT           => wr_bp_data, \r
-                 DATA_OUT                      => wr_data,\r
-                 ADDR_OUT                      => wr_addr,\r
-                 WRITE_OUT                     => wr_we,\r
-                 BUSY_OUT                      => slv_busy, -- could be used...\r
-                 -- debug\r
-                 BSM_OUT                       => onewire_bsm,\r
-                 STAT                          => open\r
-                );\r
+generic map( CLK_PERIOD     => 10 )\r
+port map(\r
+       CLK                 => clk_in,\r
+       RESET               => reset_in,\r
+       READOUT_ENABLE_IN   => store_wr,\r
+       -- connection to 1-wire interface (16 APV FEs)\r
+       ONEWIRE             => onewire_inout,\r
+       BP_ONEWIRE          => bp_onewire_inout,\r
+       -- connection to external DPRAM for slow control readout\r
+       BP_DATA_OUT         => wr_bp_data,\r
+       DATA_OUT            => wr_data,\r
+       ADDR_OUT            => wr_addr,\r
+       WRITE_OUT           => wr_we,\r
+       BUSY_OUT            => slv_busy, -- could be used...\r
+       -- debug\r
+       BSM_OUT             => onewire_bsm,\r
+       STAT                => open\r
+);\r
 \r
 ---------------------------------------------------------\r
 -- data replacing                                      --\r
@@ -199,17 +201,18 @@ end process THE_DATA_REPLACE_PROC;
 -- data handling                                       --\r
 ---------------------------------------------------------\r
 THE_SLV_ONEWIRE_DPRAM: slv_onewire_dpram\r
-port map( WRADDRESS    => wr_addr_q,\r
-                 RDADDRESS     => read_address,\r
-                 DATA          => wr_data_q,\r
-                 WE            => wr_we_q,\r
-                 RDCLOCK       => clk_in,\r
-                 RDCLOCKEN     => '1',\r
-                 RESET         => reset_in,\r
-                 WRCLOCK       => clk_in,\r
-                 WRCLOCKEN     => '1',\r
-                 Q                     => buf_slv_data_out\r
-                );\r
+port map(\r
+       WRADDRESS   => wr_addr_q,\r
+       RDADDRESS   => read_address,\r
+       DATA        => wr_data_q,\r
+       WE          => wr_we_q,\r
+       RDCLOCK     => clk_in,\r
+       RDCLOCKEN   => '1',\r
+       RESET       => reset_in,\r
+       WRCLOCK     => clk_in,\r
+       WRCLOCKEN   => '1',\r
+       Q           => buf_slv_data_out\r
+);\r
 \r
 \r
 \r
index 12c2e3c4502cafd567662e42ddfe4154ee9b965e..a6b2866b2e05bdb77f1b636ef2874abbbff5c52a 100644 (file)
@@ -7,115 +7,117 @@ library work;
 use work.adcmv3_components.all;\r
 \r
 entity slv_ped_thr_mem is\r
-port( CLK_IN           : in    std_logic;\r
-         RESET_IN              : in    std_logic;\r
-         -- Slave bus\r
-         SLV_ADDR_IN   : in    std_logic_vector(10 downto 0);\r
-         SLV_READ_IN   : in    std_logic;\r
-         SLV_WRITE_IN  : in    std_logic;\r
-         SLV_ACK_OUT   : out   std_logic;\r
-         SLV_DATA_IN   : in    std_logic_vector(31 downto 0);\r
-         SLV_DATA_OUT  : out   std_logic_vector(31 downto 0);\r
-         -- backplane identifier\r
-         BACKPLANE_IN  : in    std_logic_vector(2 downto 0);\r
-         -- I/O to the backend\r
-         MEM_CLK_IN    : in    std_logic;\r
-         MEM_ADDR_IN   : in    std_logic_vector(6 downto 0);\r
-         MEM_0_D_OUT   : out   std_logic_vector(17 downto 0);\r
-         MEM_1_D_OUT   : out   std_logic_vector(17 downto 0);\r
-         MEM_2_D_OUT   : out   std_logic_vector(17 downto 0);\r
-         MEM_3_D_OUT   : out   std_logic_vector(17 downto 0);\r
-         MEM_4_D_OUT   : out   std_logic_vector(17 downto 0);\r
-         MEM_5_D_OUT   : out   std_logic_vector(17 downto 0);\r
-         MEM_6_D_OUT   : out   std_logic_vector(17 downto 0);\r
-         MEM_7_D_OUT   : out   std_logic_vector(17 downto 0);\r
-         MEM_8_D_OUT   : out   std_logic_vector(17 downto 0);\r
-         MEM_9_D_OUT   : out   std_logic_vector(17 downto 0);\r
-         MEM_10_D_OUT  : out   std_logic_vector(17 downto 0);\r
-         MEM_11_D_OUT  : out   std_logic_vector(17 downto 0);\r
-         MEM_12_D_OUT  : out   std_logic_vector(17 downto 0);\r
-         MEM_13_D_OUT  : out   std_logic_vector(17 downto 0);\r
-         MEM_14_D_OUT  : out   std_logic_vector(17 downto 0);\r
-         MEM_15_D_OUT  : out   std_logic_vector(17 downto 0);\r
-         -- Status lines\r
-         STAT                  : out   std_logic_vector(31 downto 0) -- DEBUG\r
-       );\r
+port(\r
+       CLK_IN          : in    std_logic;\r
+       RESET_IN        : in    std_logic;\r
+       -- Slave bus\r
+       SLV_ADDR_IN     : in    std_logic_vector(10 downto 0);\r
+       SLV_READ_IN     : in    std_logic;\r
+       SLV_WRITE_IN    : in    std_logic;\r
+       SLV_ACK_OUT     : out   std_logic;\r
+       SLV_DATA_IN     : in    std_logic_vector(31 downto 0);\r
+       SLV_DATA_OUT    : out   std_logic_vector(31 downto 0);\r
+       -- backplane identifier\r
+       BACKPLANE_IN    : in    std_logic_vector(2 downto 0);\r
+       -- I/O to the backend\r
+       MEM_CLK_IN      : in    std_logic;\r
+       MEM_ADDR_IN     : in    std_logic_vector(6 downto 0);\r
+       MEM_0_D_OUT     : out   std_logic_vector(17 downto 0);\r
+       MEM_1_D_OUT     : out   std_logic_vector(17 downto 0);\r
+       MEM_2_D_OUT     : out   std_logic_vector(17 downto 0);\r
+       MEM_3_D_OUT     : out   std_logic_vector(17 downto 0);\r
+       MEM_4_D_OUT     : out   std_logic_vector(17 downto 0);\r
+       MEM_5_D_OUT     : out   std_logic_vector(17 downto 0);\r
+       MEM_6_D_OUT     : out   std_logic_vector(17 downto 0);\r
+       MEM_7_D_OUT     : out   std_logic_vector(17 downto 0);\r
+       MEM_8_D_OUT     : out   std_logic_vector(17 downto 0);\r
+       MEM_9_D_OUT     : out   std_logic_vector(17 downto 0);\r
+       MEM_10_D_OUT    : out   std_logic_vector(17 downto 0);\r
+       MEM_11_D_OUT    : out   std_logic_vector(17 downto 0);\r
+       MEM_12_D_OUT    : out   std_logic_vector(17 downto 0);\r
+       MEM_13_D_OUT    : out   std_logic_vector(17 downto 0);\r
+       MEM_14_D_OUT    : out   std_logic_vector(17 downto 0);\r
+       MEM_15_D_OUT    : out   std_logic_vector(17 downto 0);\r
+       -- Status lines\r
+       STAT            : out   std_logic_vector(31 downto 0) -- DEBUG\r
+);\r
 end entity;\r
 \r
 architecture Behavioral of slv_ped_thr_mem is\r
 \r
 -- Signals\r
-       type STATES is (SLEEP,RD_RDY,RD_DEL0,RD_DEL1,WR_DEL0,WR_DEL1,WR_RDY,RD_ACK,WR_ACK,DONE);\r
-       signal CURRENT_STATE, NEXT_STATE: STATES;\r
+type STATES is (SLEEP,RD_RDY,RD_DEL0,RD_DEL1,WR_DEL0,WR_DEL1,WR_RDY,RD_ACK,WR_ACK,DONE);\r
+signal CURRENT_STATE, NEXT_STATE: STATES;\r
+\r
+-- statemachine signals\r
+signal slv_ack_x        : std_logic;\r
+signal slv_ack          : std_logic;\r
+signal store_wr_x       : std_logic;\r
+signal store_wr         : std_logic;\r
+signal store_rd_x       : std_logic;\r
+signal store_rd         : std_logic;\r
 \r
-       -- statemachine signals\r
-       signal slv_ack_x                : std_logic;\r
-       signal slv_ack                  : std_logic;\r
-       signal store_wr_x               : std_logic;\r
-       signal store_wr                 : std_logic;\r
-       signal store_rd_x               : std_logic;\r
-       signal store_rd                 : std_logic;\r
+signal block_addr       : std_logic_vector(3 downto 0);\r
 \r
-       signal block_addr               : std_logic_vector(3 downto 0);\r
+type ped_data_t is array (0 to 15) of std_logic_vector(17 downto 0);\r
+signal ped_data             : ped_data_t;\r
+signal mem_data             : ped_data_t;\r
 \r
-       type ped_data_t is array (0 to 15) of std_logic_vector(17 downto 0);\r
-       signal ped_data                         : ped_data_t;\r
-       signal mem_data                         : ped_data_t;\r
+signal mem_wr_x             : std_logic_vector(15 downto 0);\r
+signal mem_wr               : std_logic_vector(15 downto 0);\r
+signal mem_sel              : std_logic_vector(15 downto 0);\r
 \r
-       signal mem_wr_x                         : std_logic_vector(15 downto 0);\r
-       signal mem_wr                           : std_logic_vector(15 downto 0);\r
-       signal mem_sel                          : std_logic_vector(15 downto 0);\r
+signal rdback_data          : std_logic_vector(17 downto 0);\r
 \r
-       signal rdback_data                      : std_logic_vector(17 downto 0);\r
-       \r
 begin\r
 \r
 ---------------------------------------------------------\r
 -- Mapping of backplanes                               --\r
 ---------------------------------------------------------\r
 THE_APV_ADC_MAP_MEM: apv_adc_map_mem\r
-port map( ADDRESS(6 downto 4)  => backplane_in,\r
-                 ADDRESS(3 downto 0)   => slv_addr_in(10 downto 7),\r
-                 Q                                             => block_addr\r
-                );\r
+port map(\r
+       ADDRESS(6 downto 4) => backplane_in,\r
+       ADDRESS(3 downto 0) => slv_addr_in(10 downto 7),\r
+       Q                   => block_addr\r
+);\r
 \r
 THE_MEM_SEL_PROC: process( clk_in )\r
 begin\r
        if( rising_edge(clk_in) ) then\r
                case block_addr is\r
-                       when x"0"       =>      mem_sel     <= b"0000_0000_0000_0001";\r
+                       when x"0"   =>  mem_sel     <= b"0000_0000_0000_0001";\r
                                                        rdback_data <= mem_data(0);\r
-                       when x"1"       =>      mem_sel     <= b"0000_0000_0000_0010";\r
+                       when x"1"   =>  mem_sel     <= b"0000_0000_0000_0010";\r
                                                        rdback_data <= mem_data(1);\r
-                       when x"2"       =>      mem_sel     <= b"0000_0000_0000_0100";\r
+                       when x"2"   =>  mem_sel     <= b"0000_0000_0000_0100";\r
                                                        rdback_data <= mem_data(2);\r
-                       when x"3"       =>      mem_sel     <= b"0000_0000_0000_1000";\r
+                       when x"3"   =>  mem_sel     <= b"0000_0000_0000_1000";\r
                                                        rdback_data <= mem_data(3);\r
-                       when x"4"       =>      mem_sel     <= b"0000_0000_0001_0000";\r
+                       when x"4"   =>  mem_sel     <= b"0000_0000_0001_0000";\r
                                                        rdback_data <= mem_data(4);\r
-                       when x"5"       =>      mem_sel     <= b"0000_0000_0010_0000";\r
+                       when x"5"   =>  mem_sel     <= b"0000_0000_0010_0000";\r
                                                        rdback_data <= mem_data(5);\r
-                       when x"6"       =>      mem_sel     <= b"0000_0000_0100_0000";\r
+                       when x"6"   =>  mem_sel     <= b"0000_0000_0100_0000";\r
                                                        rdback_data <= mem_data(6);\r
-                       when x"7"       =>      mem_sel     <= b"0000_0000_1000_0000";\r
+                       when x"7"   =>  mem_sel     <= b"0000_0000_1000_0000";\r
                                                        rdback_data <= mem_data(7);\r
-                       when x"8"       =>      mem_sel     <= b"0000_0001_0000_0000";\r
+                       when x"8"   =>  mem_sel     <= b"0000_0001_0000_0000";\r
                                                        rdback_data <= mem_data(8);\r
-                       when x"9"       =>      mem_sel     <= b"0000_0010_0000_0000";\r
+                       when x"9"   =>  mem_sel     <= b"0000_0010_0000_0000";\r
                                                        rdback_data <= mem_data(9);\r
-                       when x"a"       =>      mem_sel     <= b"0000_0100_0000_0000";\r
+                       when x"a"   =>  mem_sel     <= b"0000_0100_0000_0000";\r
                                                        rdback_data <= mem_data(10);\r
-                       when x"b"       =>      mem_sel     <= b"0000_1000_0000_0000";\r
+                       when x"b"   =>  mem_sel     <= b"0000_1000_0000_0000";\r
                                                        rdback_data <= mem_data(11);\r
-                       when x"c"       =>      mem_sel     <= b"0001_0000_0000_0000";\r
+                       when x"c"   =>  mem_sel     <= b"0001_0000_0000_0000";\r
                                                        rdback_data <= mem_data(12);\r
-                       when x"d"       =>      mem_sel     <= b"0010_0000_0000_0000";\r
+                       when x"d"   =>  mem_sel     <= b"0010_0000_0000_0000";\r
                                                        rdback_data <= mem_data(13);\r
-                       when x"e"       =>      mem_sel     <= b"0100_0000_0000_0000";\r
+                       when x"e"   =>  mem_sel     <= b"0100_0000_0000_0000";\r
                                                        rdback_data <= mem_data(14);\r
-                       when x"f"       =>      mem_sel     <= b"1000_0000_0000_0000";\r
+                       when x"f"   =>  mem_sel     <= b"1000_0000_0000_0000";\r
                                                        rdback_data <= mem_data(15);\r
-                       when others     =>      mem_sel     <= b"0000_0000_0000_0000"; -- never used\r
+                       when others =>  mem_sel     <= b"0000_0000_0000_0000"; -- never used\r
                                                        rdback_data <= (others => '0');\r
                end case;\r
        end if;\r
@@ -150,63 +152,64 @@ begin
        store_wr_x <= '0';\r
        store_rd_x <= '0';\r
        case CURRENT_STATE is\r
-               when SLEEP              =>      if   ( slv_read_in = '1' ) then\r
+               when SLEEP      =>  if   ( slv_read_in = '1' ) then\r
                                                                NEXT_STATE <= RD_DEL0;\r
                                                                store_rd_x <= '1';\r
                                                        elsif( slv_write_in = '1' ) then\r
                                                                NEXT_STATE <= WR_DEL0;\r
                                                                store_wr_x <= '1';\r
-                                                       else    \r
+                                                       else\r
                                                                NEXT_STATE <= SLEEP;\r
                                                        end if;\r
-               when RD_DEL0    =>      NEXT_STATE <= RD_DEL1;\r
-               when RD_DEL1    =>      NEXT_STATE <= RD_RDY;\r
-               when RD_RDY             =>      NEXT_STATE <= RD_ACK;\r
-               when RD_ACK             =>      if( slv_read_in = '0' ) then\r
+               when RD_DEL0    =>  NEXT_STATE <= RD_DEL1;\r
+               when RD_DEL1    =>  NEXT_STATE <= RD_RDY;\r
+               when RD_RDY     =>  NEXT_STATE <= RD_ACK;\r
+               when RD_ACK     =>  if( slv_read_in = '0' ) then\r
                                                                NEXT_STATE <= DONE;\r
                                                                slv_ack_x  <= '1';\r
                                                        else\r
                                                                NEXT_STATE <= RD_ACK;\r
                                                                slv_ack_x  <= '1';\r
                                                        end if;\r
-               when WR_DEL0    =>      NEXT_STATE <= WR_DEL1;\r
-               when WR_DEL1    =>      NEXT_STATE <= WR_RDY;\r
-               when WR_RDY             =>      NEXT_STATE <= WR_ACK;\r
-               when WR_ACK             =>      if( slv_write_in = '0' ) then\r
+               when WR_DEL0    =>  NEXT_STATE <= WR_DEL1;\r
+               when WR_DEL1    =>  NEXT_STATE <= WR_RDY;\r
+               when WR_RDY     =>  NEXT_STATE <= WR_ACK;\r
+               when WR_ACK     =>  if( slv_write_in = '0' ) then\r
                                                                NEXT_STATE <= DONE;\r
                                                                slv_ack_x  <= '1';\r
                                                        else\r
                                                                NEXT_STATE <= WR_ACK;\r
                                                                slv_ack_x  <= '1';\r
                                                        end if;\r
-               when DONE               =>      NEXT_STATE <= SLEEP;\r
-                       \r
-               when others             =>      NEXT_STATE <= SLEEP;\r
+               when DONE       =>  NEXT_STATE <= SLEEP;\r
+\r
+               when others     =>  NEXT_STATE <= SLEEP;\r
        end case;\r
 end process TRANSFORM;\r
 \r
 ---------------------------------------------------------\r
 -- block memories                                      --\r
 ---------------------------------------------------------\r
-GEN_PED_MEM: for i in 0 to 15 generate         \r
+GEN_PED_MEM: for i in 0 to 15 generate\r
        -- Port A: SLV_BUS\r
        -- Port B: state machine\r
-       THE_PED_MEM: ped_thr_true \r
-       port map( DATAINA       => slv_data_in(17 downto 0), \r
-                         DATAINB       => b"00_0000_0000_0000_0000",\r
-                         ADDRESSA      => slv_addr_in(6 downto 0),\r
-                         ADDRESSB      => mem_addr_in,\r
-                         CLOCKA        => clk_in,\r
-                         CLOCKB        => mem_clk_in,\r
-                         CLOCKENA      => '1',\r
-                         CLOCKENB      => '1',\r
-                         WRA           => mem_wr(i), -- BUGBUGBUG\r
-                         WRB           => '0', -- state machine never writes!\r
-                         RESETA        => reset_in,\r
-                         RESETB        => reset_in,\r
-                         QA            => mem_data(i),\r
-                         QB            => ped_data(i)\r
-                       );\r
+       THE_PED_MEM: ped_thr_true\r
+       port map(\r
+               DATAINA     => slv_data_in(17 downto 0),\r
+               DATAINB     => b"00_0000_0000_0000_0000",\r
+               ADDRESSA    => slv_addr_in(6 downto 0),\r
+               ADDRESSB    => mem_addr_in,\r
+               CLOCKA      => clk_in,\r
+               CLOCKB      => mem_clk_in,\r
+               CLOCKENA    => '1',\r
+               CLOCKENB    => '1',\r
+               WRA         => mem_wr(i), -- BUGBUGBUG\r
+               WRB         => '0', -- state machine never writes!\r
+               RESETA      => reset_in,\r
+               RESETB      => reset_in,\r
+               QA          => mem_data(i),\r
+               QB          => ped_data(i)\r
+       );\r
        -- Write signals\r
        mem_wr_x(i) <= '1' when ( (mem_sel(i) = '1') and (store_wr = '1') ) else '0';\r
 end generate GEN_PED_MEM;\r
index f851ca7f5d020ad6646dd5b80d207db987fe2eb9..00ba296d9ee8b7b18564da98b753baa055d90707 100644 (file)
@@ -8,45 +8,47 @@ use work.adcmv3_components.all;
 \r
 \r
 entity slv_register is\r
-generic( RESET_VALUE   : std_logic_vector(31 downto 0) := x"0000_0000" );\r
-port( CLK_IN           : in    std_logic;\r
-         RESET_IN              : in    std_logic;\r
-         BUSY_IN               : in    std_logic;\r
-         -- Slave bus\r
-         SLV_READ_IN   : in    std_logic;\r
-         SLV_WRITE_IN  : in    std_logic;\r
-         SLV_BUSY_OUT  : out   std_logic;\r
-         SLV_ACK_OUT   : out   std_logic;\r
-         SLV_DATA_IN   : in    std_logic_vector(31 downto 0);\r
-         SLV_DATA_OUT  : out   std_logic_vector(31 downto 0);\r
-         -- I/O to the backend\r
-         REG_DATA_IN   : in    std_logic_vector(31 downto 0);\r
-         REG_DATA_OUT  : out   std_logic_vector(31 downto 0);\r
-         -- Status lines\r
-         STAT                  : out   std_logic_vector(31 downto 0) -- DEBUG\r
-       );\r
+generic(\r
+       RESET_VALUE : std_logic_vector(31 downto 0) := x"0000_0000"\r
+);\r
+port(\r
+       CLK_IN          : in    std_logic;\r
+       RESET_IN        : in    std_logic;\r
+       BUSY_IN         : in    std_logic;\r
+       -- Slave bus\r
+       SLV_READ_IN     : in    std_logic;\r
+       SLV_WRITE_IN    : in    std_logic;\r
+       SLV_BUSY_OUT    : out   std_logic;\r
+       SLV_ACK_OUT     : out   std_logic;\r
+       SLV_DATA_IN     : in    std_logic_vector(31 downto 0);\r
+       SLV_DATA_OUT    : out   std_logic_vector(31 downto 0);\r
+       -- I/O to the backend\r
+       REG_DATA_IN     : in    std_logic_vector(31 downto 0);\r
+       REG_DATA_OUT    : out   std_logic_vector(31 downto 0);\r
+       -- Status lines\r
+       STAT            : out   std_logic_vector(31 downto 0) -- DEBUG\r
+);\r
 end entity;\r
 \r
 architecture Behavioral of slv_register is\r
 \r
 -- Signals\r
-\r
-       type STATES is (SLEEP,RD_BSY,WR_BSY,RD_RDY,WR_RDY,RD_ACK,WR_ACK,DONE);\r
-       signal CURRENT_STATE, NEXT_STATE: STATES;\r
-\r
-       -- slave bus signals\r
-       signal slv_busy_x               : std_logic;\r
-       signal slv_busy                 : std_logic;\r
-       signal slv_ack_x                : std_logic;\r
-       signal slv_ack                  : std_logic;\r
-       signal store_wr_x               : std_logic;\r
-       signal store_wr                 : std_logic;\r
-       signal store_rd_x               : std_logic;\r
-       signal store_rd                 : std_logic;\r
-\r
-       signal reg_slv_data_in  : std_logic_vector(31 downto 0); -- registered data input\r
-       signal reg_slv_data_out : std_logic_vector(31 downto 0); -- read back data\r
-       signal reg_busy                 : std_logic;\r
+type STATES is (SLEEP,RD_BSY,WR_BSY,RD_RDY,WR_RDY,RD_ACK,WR_ACK,DONE);\r
+signal CURRENT_STATE, NEXT_STATE: STATES;\r
+\r
+-- slave bus signals\r
+signal slv_busy_x       : std_logic;\r
+signal slv_busy         : std_logic;\r
+signal slv_ack_x        : std_logic;\r
+signal slv_ack          : std_logic;\r
+signal store_wr_x       : std_logic;\r
+signal store_wr         : std_logic;\r
+signal store_rd_x       : std_logic;\r
+signal store_rd         : std_logic;\r
+\r
+signal reg_slv_data_in  : std_logic_vector(31 downto 0); -- registered data input\r
+signal reg_slv_data_out : std_logic_vector(31 downto 0); -- read back data\r
+signal reg_busy         : std_logic;\r
 \r
 begin\r
 \r
@@ -86,7 +88,7 @@ begin
        store_wr_x <= '0';\r
        store_rd_x <= '0';\r
        case CURRENT_STATE is\r
-               when SLEEP              =>      if   ( (reg_busy = '0') and (slv_read_in = '1') ) then\r
+               when SLEEP      =>  if   ( (reg_busy = '0') and (slv_read_in = '1') ) then\r
                                                                NEXT_STATE <= RD_RDY;\r
                                                                store_rd_x <= '1';\r
                                                        elsif( (reg_busy = '0') and (slv_write_in = '1') ) then\r
@@ -98,40 +100,40 @@ begin
                                                        elsif( (reg_busy = '1') and (slv_write_in = '1') ) then\r
                                                                NEXT_STATE <= WR_BSY;\r
                                                                slv_busy_x <= '1'; -- added 23022009\r
-                                                       else    \r
+                                                       else\r
                                                                NEXT_STATE <= SLEEP;\r
                                                        end if;\r
-               when RD_RDY             =>      NEXT_STATE <= RD_ACK;\r
+               when RD_RDY     =>  NEXT_STATE <= RD_ACK;\r
                                                        slv_ack_x  <= '1';\r
-               when WR_RDY             =>      NEXT_STATE <= WR_ACK;\r
+               when WR_RDY     =>  NEXT_STATE <= WR_ACK;\r
                                                        slv_ack_x  <= '1';\r
-               when RD_ACK             =>      if( slv_read_in = '0' ) then\r
+               when RD_ACK     =>  if( slv_read_in = '0' ) then\r
                                                                NEXT_STATE <= DONE;\r
                                                        else\r
                                                                NEXT_STATE <= RD_ACK;\r
                                                                slv_ack_x  <= '1';\r
                                                        end if;\r
-               when WR_ACK             =>      if( slv_write_in = '0' ) then\r
+               when WR_ACK     =>  if( slv_write_in = '0' ) then\r
                                                                NEXT_STATE <= DONE;\r
                                                        else\r
                                                                NEXT_STATE <= WR_ACK;\r
                                                                slv_ack_x  <= '1';\r
                                                        end if;\r
-               when RD_BSY             =>      if( slv_read_in = '0' ) then\r
+               when RD_BSY     =>  if( slv_read_in = '0' ) then\r
                                                                NEXT_STATE <= DONE;\r
                                                        else\r
                                                                NEXT_STATE <= RD_BSY;\r
                                                                slv_busy_x <= '1';\r
                                                        end if;\r
-               when WR_BSY             =>      if( slv_write_in = '0' ) then\r
+               when WR_BSY     =>  if( slv_write_in = '0' ) then\r
                                                                NEXT_STATE <= DONE;\r
                                                        else\r
                                                                NEXT_STATE <= WR_BSY;\r
                                                                slv_busy_x <= '1';\r
                                                        end if;\r
-               when DONE               =>      NEXT_STATE <= SLEEP;\r
-                       \r
-               when others             =>      NEXT_STATE <= SLEEP;\r
+               when DONE       =>  NEXT_STATE <= SLEEP;\r
+\r
+               when others     =>  NEXT_STATE <= SLEEP;\r
        end case;\r
 end process TRANSFORM;\r
 \r
index 5baa67d6683245595c68ff25a03f45d58fd00384..f22805f47675ab3a0db3962e8fb0ac2a06d2d1ad 100644 (file)
@@ -7,78 +7,81 @@ library work;
 use work.adcmv3_components.all;\r
 \r
 entity slv_register_bank is\r
-generic( RESET_VALUE   : std_logic_vector(15 downto 0) := x"0001" );\r
-port( CLK_IN           : in    std_logic;\r
-         RESET_IN              : in    std_logic;\r
-         -- Slave bus\r
-         SLV_ADDR_IN   : in    std_logic_vector(3 downto 0);\r
-         SLV_READ_IN   : in    std_logic;\r
-         SLV_WRITE_IN  : in    std_logic;\r
-         SLV_ACK_OUT   : out   std_logic;\r
-         SLV_DATA_IN   : in    std_logic_vector(31 downto 0);\r
-         SLV_DATA_OUT  : out   std_logic_vector(31 downto 0);\r
-         -- I/O to the backend\r
-         BACKPLANE_IN  : in    std_logic_vector(2 downto 0);\r
-         CTRL_0_OUT    : out   std_logic_vector(15 downto 0);\r
-         CTRL_1_OUT    : out   std_logic_vector(15 downto 0);\r
-         CTRL_2_OUT    : out   std_logic_vector(15 downto 0);\r
-         CTRL_3_OUT    : out   std_logic_vector(15 downto 0);\r
-         CTRL_4_OUT    : out   std_logic_vector(15 downto 0);\r
-         CTRL_5_OUT    : out   std_logic_vector(15 downto 0);\r
-         CTRL_6_OUT    : out   std_logic_vector(15 downto 0);\r
-         CTRL_7_OUT    : out   std_logic_vector(15 downto 0);\r
-         CTRL_8_OUT    : out   std_logic_vector(15 downto 0);\r
-         CTRL_9_OUT    : out   std_logic_vector(15 downto 0);\r
-         CTRL_10_OUT   : out   std_logic_vector(15 downto 0);\r
-         CTRL_11_OUT   : out   std_logic_vector(15 downto 0);\r
-         CTRL_12_OUT   : out   std_logic_vector(15 downto 0);\r
-         CTRL_13_OUT   : out   std_logic_vector(15 downto 0);\r
-         CTRL_14_OUT   : out   std_logic_vector(15 downto 0);\r
-         CTRL_15_OUT   : out   std_logic_vector(15 downto 0);\r
-         STAT_0_IN             : in    std_logic_vector(15 downto 0);\r
-         STAT_1_IN             : in    std_logic_vector(15 downto 0);\r
-         STAT_2_IN             : in    std_logic_vector(15 downto 0);\r
-         STAT_3_IN             : in    std_logic_vector(15 downto 0);\r
-         STAT_4_IN             : in    std_logic_vector(15 downto 0);\r
-         STAT_5_IN             : in    std_logic_vector(15 downto 0);\r
-         STAT_6_IN             : in    std_logic_vector(15 downto 0);\r
-         STAT_7_IN             : in    std_logic_vector(15 downto 0);\r
-         STAT_8_IN             : in    std_logic_vector(15 downto 0);\r
-         STAT_9_IN             : in    std_logic_vector(15 downto 0);\r
-         STAT_10_IN    : in    std_logic_vector(15 downto 0);\r
-         STAT_11_IN    : in    std_logic_vector(15 downto 0);\r
-         STAT_12_IN    : in    std_logic_vector(15 downto 0);\r
-         STAT_13_IN    : in    std_logic_vector(15 downto 0);\r
-         STAT_14_IN    : in    std_logic_vector(15 downto 0);\r
-         STAT_15_IN    : in    std_logic_vector(15 downto 0);\r
-         -- Status lines\r
-         STAT                  : out   std_logic_vector(31 downto 0) -- DEBUG\r
-       );\r
+generic(\r
+       RESET_VALUE : std_logic_vector(15 downto 0) := x"0001"\r
+);\r
+port(\r
+       CLK_IN          : in    std_logic;\r
+       RESET_IN        : in    std_logic;\r
+       -- Slave bus\r
+       SLV_ADDR_IN     : in    std_logic_vector(3 downto 0);\r
+       SLV_READ_IN     : in    std_logic;\r
+       SLV_WRITE_IN    : in    std_logic;\r
+       SLV_ACK_OUT     : out   std_logic;\r
+       SLV_DATA_IN     : in    std_logic_vector(31 downto 0);\r
+       SLV_DATA_OUT    : out   std_logic_vector(31 downto 0);\r
+       -- I/O to the backend\r
+       BACKPLANE_IN    : in    std_logic_vector(2 downto 0);\r
+       CTRL_0_OUT      : out   std_logic_vector(15 downto 0);\r
+       CTRL_1_OUT      : out   std_logic_vector(15 downto 0);\r
+       CTRL_2_OUT      : out   std_logic_vector(15 downto 0);\r
+       CTRL_3_OUT      : out   std_logic_vector(15 downto 0);\r
+       CTRL_4_OUT      : out   std_logic_vector(15 downto 0);\r
+       CTRL_5_OUT      : out   std_logic_vector(15 downto 0);\r
+       CTRL_6_OUT      : out   std_logic_vector(15 downto 0);\r
+       CTRL_7_OUT      : out   std_logic_vector(15 downto 0);\r
+       CTRL_8_OUT      : out   std_logic_vector(15 downto 0);\r
+       CTRL_9_OUT      : out   std_logic_vector(15 downto 0);\r
+       CTRL_10_OUT     : out   std_logic_vector(15 downto 0);\r
+       CTRL_11_OUT     : out   std_logic_vector(15 downto 0);\r
+       CTRL_12_OUT     : out   std_logic_vector(15 downto 0);\r
+       CTRL_13_OUT     : out   std_logic_vector(15 downto 0);\r
+       CTRL_14_OUT     : out   std_logic_vector(15 downto 0);\r
+       CTRL_15_OUT     : out   std_logic_vector(15 downto 0);\r
+       STAT_0_IN       : in    std_logic_vector(15 downto 0);\r
+       STAT_1_IN       : in    std_logic_vector(15 downto 0);\r
+       STAT_2_IN       : in    std_logic_vector(15 downto 0);\r
+       STAT_3_IN       : in    std_logic_vector(15 downto 0);\r
+       STAT_4_IN       : in    std_logic_vector(15 downto 0);\r
+       STAT_5_IN       : in    std_logic_vector(15 downto 0);\r
+       STAT_6_IN       : in    std_logic_vector(15 downto 0);\r
+       STAT_7_IN       : in    std_logic_vector(15 downto 0);\r
+       STAT_8_IN       : in    std_logic_vector(15 downto 0);\r
+       STAT_9_IN       : in    std_logic_vector(15 downto 0);\r
+       STAT_10_IN      : in    std_logic_vector(15 downto 0);\r
+       STAT_11_IN      : in    std_logic_vector(15 downto 0);\r
+       STAT_12_IN      : in    std_logic_vector(15 downto 0);\r
+       STAT_13_IN      : in    std_logic_vector(15 downto 0);\r
+       STAT_14_IN      : in    std_logic_vector(15 downto 0);\r
+       STAT_15_IN      : in    std_logic_vector(15 downto 0);\r
+       -- Status lines\r
+       STAT            : out   std_logic_vector(31 downto 0) -- DEBUG\r
+);\r
 end entity;\r
 \r
 architecture Behavioral of slv_register_bank is\r
 \r
 -- Signals\r
-       type STATES is (SLEEP,RD_RDY,RD_DEL0,RD_DEL1,WR_DEL0,WR_DEL1,WR_RDY,RD_ACK,WR_ACK,DONE);\r
-       signal CURRENT_STATE, NEXT_STATE: STATES;\r
-\r
-       signal slv_ack_x                : std_logic;\r
-       signal slv_ack                  : std_logic;\r
-       signal store_wr_x               : std_logic;\r
-       signal store_wr                 : std_logic;\r
-       signal store_rd_x               : std_logic;\r
-       signal store_rd                 : std_logic;\r
-\r
-       signal adc_addr                 : std_logic_vector(3 downto 0);  -- ADC address after mapping\r
-       signal reg_sel                  : std_logic_vector(15 downto 0);\r
-       signal reg_wr                   : std_logic_vector(15 downto 0);\r
-       signal reg_wr_x                 : std_logic_vector(15 downto 0);\r
-\r
-       type ctrl_reg_t is array (0 to 15) of std_logic_vector(15 downto 0);\r
-       signal ctrl_reg                 : ctrl_reg_t;\r
-\r
-       signal rdback_data              : std_logic_vector(31 downto 0);\r
-       \r
+type STATES is (SLEEP,RD_RDY,RD_DEL0,RD_DEL1,WR_DEL0,WR_DEL1,WR_RDY,RD_ACK,WR_ACK,DONE);\r
+signal CURRENT_STATE, NEXT_STATE: STATES;\r
+\r
+signal slv_ack_x        : std_logic;\r
+signal slv_ack          : std_logic;\r
+signal store_wr_x       : std_logic;\r
+signal store_wr         : std_logic;\r
+signal store_rd_x       : std_logic;\r
+signal store_rd         : std_logic;\r
+\r
+signal adc_addr         : std_logic_vector(3 downto 0);  -- ADC address after mapping\r
+signal reg_sel          : std_logic_vector(15 downto 0);\r
+signal reg_wr           : std_logic_vector(15 downto 0);\r
+signal reg_wr_x         : std_logic_vector(15 downto 0);\r
+\r
+type ctrl_reg_t is array (0 to 15) of std_logic_vector(15 downto 0);\r
+signal ctrl_reg         : ctrl_reg_t;\r
+\r
+signal rdback_data      : std_logic_vector(31 downto 0);\r
+\r
 begin\r
 \r
 -- Fake\r
@@ -88,48 +91,49 @@ stat <= (others => '0');
 -- Mapping of backplanes                               --\r
 ---------------------------------------------------------\r
 THE_APV_ADC_MAP_MEM: apv_adc_map_mem\r
-port map( ADDRESS(6 downto 4)  => backplane_in,\r
-                 ADDRESS(3 downto 0)   => slv_addr_in,\r
-                 Q                                             => adc_addr\r
-                );\r
+port map(\r
+       ADDRESS(6 downto 4) => backplane_in,\r
+       ADDRESS(3 downto 0) => slv_addr_in,\r
+       Q                   => adc_addr\r
+);\r
 \r
 THE_REG_SEL_PROC: process( clk_in )\r
 begin\r
        if( rising_edge(clk_in) ) then\r
                case adc_addr is\r
-                       when x"0"       =>      reg_sel     <= b"0000_0000_0000_0001";\r
+                       when x"0"   =>  reg_sel     <= b"0000_0000_0000_0001";\r
                                                        rdback_data <= stat_0_in  & ctrl_reg(0);\r
-                       when x"1"       =>      reg_sel     <= b"0000_0000_0000_0010";\r
+                       when x"1"   =>  reg_sel     <= b"0000_0000_0000_0010";\r
                                                        rdback_data <= stat_1_in  & ctrl_reg(1);\r
-                       when x"2"       =>      reg_sel     <= b"0000_0000_0000_0100";\r
+                       when x"2"   =>  reg_sel     <= b"0000_0000_0000_0100";\r
                                                        rdback_data <= stat_2_in  & ctrl_reg(2);\r
-                       when x"3"       =>      reg_sel     <= b"0000_0000_0000_1000";\r
+                       when x"3"   =>  reg_sel     <= b"0000_0000_0000_1000";\r
                                                        rdback_data <= stat_3_in  & ctrl_reg(3);\r
-                       when x"4"       =>      reg_sel     <= b"0000_0000_0001_0000";\r
+                       when x"4"   =>  reg_sel     <= b"0000_0000_0001_0000";\r
                                                        rdback_data <= stat_4_in  & ctrl_reg(4);\r
-                       when x"5"       =>      reg_sel     <= b"0000_0000_0010_0000";\r
+                       when x"5"   =>  reg_sel     <= b"0000_0000_0010_0000";\r
                                                        rdback_data <= stat_5_in  & ctrl_reg(5);\r
-                       when x"6"       =>      reg_sel     <= b"0000_0000_0100_0000";\r
+                       when x"6"   =>  reg_sel     <= b"0000_0000_0100_0000";\r
                                                        rdback_data <= stat_6_in  & ctrl_reg(6);\r
-                       when x"7"       =>      reg_sel     <= b"0000_0000_1000_0000";\r
+                       when x"7"   =>  reg_sel     <= b"0000_0000_1000_0000";\r
                                                        rdback_data <= stat_7_in  & ctrl_reg(7);\r
-                       when x"8"       =>      reg_sel     <= b"0000_0001_0000_0000";\r
+                       when x"8"   =>  reg_sel     <= b"0000_0001_0000_0000";\r
                                                        rdback_data <= stat_8_in  & ctrl_reg(8);\r
-                       when x"9"       =>      reg_sel     <= b"0000_0010_0000_0000";\r
+                       when x"9"   =>  reg_sel     <= b"0000_0010_0000_0000";\r
                                                        rdback_data <= stat_9_in  & ctrl_reg(9);\r
-                       when x"a"       =>      reg_sel     <= b"0000_0100_0000_0000";\r
+                       when x"a"   =>  reg_sel     <= b"0000_0100_0000_0000";\r
                                                        rdback_data <= stat_10_in & ctrl_reg(10);\r
-                       when x"b"       =>      reg_sel     <= b"0000_1000_0000_0000";\r
+                       when x"b"   =>  reg_sel     <= b"0000_1000_0000_0000";\r
                                                        rdback_data <= stat_11_in & ctrl_reg(11);\r
-                       when x"c"       =>      reg_sel     <= b"0001_0000_0000_0000";\r
+                       when x"c"   =>  reg_sel     <= b"0001_0000_0000_0000";\r
                                                        rdback_data <= stat_12_in & ctrl_reg(12);\r
-                       when x"d"       =>      reg_sel     <= b"0010_0000_0000_0000";\r
+                       when x"d"   =>  reg_sel     <= b"0010_0000_0000_0000";\r
                                                        rdback_data <= stat_13_in & ctrl_reg(13);\r
-                       when x"e"       =>      reg_sel     <= b"0100_0000_0000_0000";\r
+                       when x"e"   =>  reg_sel     <= b"0100_0000_0000_0000";\r
                                                        rdback_data <= stat_14_in & ctrl_reg(14);\r
-                       when x"f"       =>      reg_sel     <= b"1000_0000_0000_0000";\r
+                       when x"f"   =>  reg_sel     <= b"1000_0000_0000_0000";\r
                                                        rdback_data <= stat_15_in & ctrl_reg(15);\r
-                       when others     =>      reg_sel     <= b"0000_0000_0000_0000"; -- never used\r
+                       when others =>  reg_sel     <= b"0000_0000_0000_0000"; -- never used\r
                                                        rdback_data <= x"0000_0000";\r
                end case;\r
        end if;\r
@@ -164,38 +168,38 @@ begin
        store_wr_x <= '0';\r
        store_rd_x <= '0';\r
        case CURRENT_STATE is\r
-               when SLEEP              =>      if   ( slv_read_in = '1' ) then\r
+               when SLEEP      =>  if   ( slv_read_in = '1' ) then\r
                                                                NEXT_STATE <= RD_DEL0;\r
                                                                store_rd_x <= '1';\r
                                                        elsif( slv_write_in = '1' ) then\r
                                                                NEXT_STATE <= WR_DEL0;\r
                                                                store_wr_x <= '1';\r
-                                                       else    \r
+                                                       else\r
                                                                NEXT_STATE <= SLEEP;\r
                                                        end if;\r
-               when RD_DEL0    =>      NEXT_STATE <= RD_DEL1;\r
-               when RD_DEL1    =>      NEXT_STATE <= RD_RDY;\r
-               when RD_RDY             =>      NEXT_STATE <= RD_ACK;\r
-               when RD_ACK             =>      if( slv_read_in = '0' ) then\r
+               when RD_DEL0    =>  NEXT_STATE <= RD_DEL1;\r
+               when RD_DEL1    =>  NEXT_STATE <= RD_RDY;\r
+               when RD_RDY     =>  NEXT_STATE <= RD_ACK;\r
+               when RD_ACK     =>  if( slv_read_in = '0' ) then\r
                                                                NEXT_STATE <= DONE;\r
                                                                slv_ack_x  <= '1';\r
                                                        else\r
                                                                NEXT_STATE <= RD_ACK;\r
                                                                slv_ack_x  <= '1';\r
                                                        end if;\r
-               when WR_DEL0    =>      NEXT_STATE <= WR_DEL1;\r
-               when WR_DEL1    =>      NEXT_STATE <= WR_RDY;\r
-               when WR_RDY             =>      NEXT_STATE <= WR_ACK;\r
-               when WR_ACK             =>      if( slv_write_in = '0' ) then\r
+               when WR_DEL0    =>  NEXT_STATE <= WR_DEL1;\r
+               when WR_DEL1    =>  NEXT_STATE <= WR_RDY;\r
+               when WR_RDY     =>  NEXT_STATE <= WR_ACK;\r
+               when WR_ACK     =>  if( slv_write_in = '0' ) then\r
                                                                NEXT_STATE <= DONE;\r
                                                                slv_ack_x  <= '1';\r
                                                        else\r
                                                                NEXT_STATE <= WR_ACK;\r
                                                                slv_ack_x  <= '1';\r
                                                        end if;\r
-               when DONE               =>      NEXT_STATE <= SLEEP;\r
-                       \r
-               when others             =>      NEXT_STATE <= SLEEP;\r
+               when DONE       =>  NEXT_STATE <= SLEEP;\r
+\r
+               when others     =>  NEXT_STATE <= SLEEP;\r
        end case;\r
 end process TRANSFORM;\r
 \r
@@ -204,7 +208,7 @@ end process TRANSFORM;
 ---------------------------------------------------------\r
 \r
 -- register write\r
-GEN_CTRL_REG: for i in 0 to 15 generate        \r
+GEN_CTRL_REG: for i in 0 to 15 generate\r
        THE_WR_REG_PROC: process( clk_in )\r
        begin\r
                if( rising_edge(clk_in) ) then\r
index 92ed5c9454e9e05e85eed7bfc4670370ee32526a..74dab72858ec4224c0c3bd6e7339d26cb39bf4dc 100644 (file)
@@ -7,58 +7,61 @@ library work;
 use work.adcmv3_components.all;\r
 \r
 entity spi_adc_master is\r
-generic( RESET_VALUE_CTRL      : std_logic_vector(7 downto 0) := x"60" );\r
-port( CLK_IN           : in    std_logic;\r
-         RESET_IN              : in    std_logic;\r
-         -- Slave bus\r
-         SLV_READ_IN   : in    std_logic;\r
-         SLV_WRITE_IN  : in    std_logic;\r
-         SLV_BUSY_OUT  : out   std_logic;\r
-         SLV_ACK_OUT   : out   std_logic;\r
-         SLV_DATA_IN   : in    std_logic_vector(31 downto 0);\r
-         SLV_DATA_OUT  : out   std_logic_vector(31 downto 0);\r
-         -- SPI connections\r
-         SPI_CS_OUT    : out   std_logic;\r
-         SPI_SDO_OUT   : out   std_logic;\r
-         SPI_SCK_OUT   : out   std_logic;\r
-         -- ADC connections\r
-         ADC_LOCKED_IN : in    std_logic;\r
-         ADC_PD_OUT    : out   std_logic;\r
-         ADC_RST_OUT   : out   std_logic;\r
-         ADC_DEL_OUT   : out   std_logic_vector(3 downto 0);\r
-         -- APV connections\r
-         APV_RST_OUT   : out   std_logic;\r
-         -- Status lines\r
-         STAT                  : out   std_logic_vector(31 downto 0) -- DEBUG\r
-       );\r
+generic(\r
+       RESET_VALUE_CTRL    : std_logic_vector(7 downto 0) := x"60"\r
+);\r
+port(\r
+       CLK_IN          : in    std_logic;\r
+       RESET_IN        : in    std_logic;\r
+       -- Slave bus\r
+       SLV_READ_IN     : in    std_logic;\r
+       SLV_WRITE_IN    : in    std_logic;\r
+       SLV_BUSY_OUT    : out   std_logic;\r
+       SLV_ACK_OUT     : out   std_logic;\r
+       SLV_DATA_IN     : in    std_logic_vector(31 downto 0);\r
+       SLV_DATA_OUT    : out   std_logic_vector(31 downto 0);\r
+       -- SPI connections\r
+       SPI_CS_OUT      : out   std_logic;\r
+       SPI_SDO_OUT     : out   std_logic;\r
+       SPI_SCK_OUT     : out   std_logic;\r
+       -- ADC connections\r
+       ADC_LOCKED_IN   : in    std_logic;\r
+       ADC_PD_OUT      : out   std_logic;\r
+       ADC_RST_OUT     : out   std_logic;\r
+       ADC_DEL_OUT     : out   std_logic_vector(3 downto 0);\r
+       -- APV connections\r
+       APV_RST_OUT     : out   std_logic;\r
+       -- Status lines\r
+       STAT            : out   std_logic_vector(31 downto 0) -- DEBUG\r
+);\r
 end entity;\r
 \r
 architecture Behavioral of spi_adc_master is\r
 \r
 -- Signals\r
-       type STATES is (SLEEP,RD_BSY,WR_BSY,RD_RDY,WR_RDY,RD_ACK,WR_ACK,DONE);\r
-       signal CURRENT_STATE, NEXT_STATE: STATES;\r
-\r
-       signal status_data              : std_logic_vector(31 downto 0);\r
-       signal spi_busy                 : std_logic;\r
-       \r
-       signal reg_ctrl_data    : std_logic_vector(7 downto 0); \r
-       signal adc_ctrl_data    : std_logic_vector(7 downto 0); \r
-       \r
-       signal reg_slv_data_out : std_logic_vector(31 downto 0); -- readback\r
-       \r
-       signal spi_start_x              : std_logic;\r
-       signal spi_start                : std_logic;\r
-       \r
-       -- State machine signals\r
-       signal slv_busy_x               : std_logic;\r
-       signal slv_busy                 : std_logic;\r
-       signal slv_ack_x                : std_logic;\r
-       signal slv_ack                  : std_logic;\r
-       signal store_wr_x               : std_logic;\r
-       signal store_wr                 : std_logic;\r
-       signal store_rd_x               : std_logic;\r
-       signal store_rd                 : std_logic;\r
+type STATES is (SLEEP,RD_BSY,WR_BSY,RD_RDY,WR_RDY,RD_ACK,WR_ACK,DONE);\r
+signal CURRENT_STATE, NEXT_STATE: STATES;\r
+\r
+signal status_data      : std_logic_vector(31 downto 0);\r
+signal spi_busy         : std_logic;\r
+\r
+signal reg_ctrl_data    : std_logic_vector(7 downto 0);\r
+signal adc_ctrl_data    : std_logic_vector(7 downto 0);\r
+\r
+signal reg_slv_data_out : std_logic_vector(31 downto 0); -- readback\r
+\r
+signal spi_start_x      : std_logic;\r
+signal spi_start        : std_logic;\r
+\r
+-- State machine signals\r
+signal slv_busy_x       : std_logic;\r
+signal slv_busy         : std_logic;\r
+signal slv_ack_x        : std_logic;\r
+signal slv_ack          : std_logic;\r
+signal store_wr_x       : std_logic;\r
+signal store_wr         : std_logic;\r
+signal store_rd_x       : std_logic;\r
+signal store_rd         : std_logic;\r
 \r
 begin\r
 \r
@@ -67,21 +70,22 @@ begin
 ---------------------------------------------------------\r
 \r
 THE_SPI_REAL_SLIM: spi_real_slim\r
-port map( SYSCLK               => clk_in,\r
-                 RESET                 => reset_in,\r
-                 -- Command interface\r
-                 START_IN              => spi_start,\r
-                 BUSY_OUT              => spi_busy,\r
-                 CMD_IN                => reg_ctrl_data,\r
-                 -- SPI interface\r
-                 SPI_SCK_OUT   => spi_sck_out,\r
-                 SPI_CS_OUT    => spi_cs_out,\r
-                 SPI_SDO_OUT   => spi_sdo_out,\r
-                 -- DEBUG\r
-                 CLK_EN_OUT    => open,\r
-                 BSM_OUT               => open,\r
-                 DEBUG_OUT             => open\r
-               );\r
+port map(\r
+       SYSCLK      => clk_in,\r
+       RESET       => reset_in,\r
+       -- Command interface\r
+       START_IN    => spi_start,\r
+       BUSY_OUT    => spi_busy,\r
+       CMD_IN      => reg_ctrl_data,\r
+       -- SPI interface\r
+       SPI_SCK_OUT => spi_sck_out,\r
+       SPI_CS_OUT  => spi_cs_out,\r
+       SPI_SDO_OUT => spi_sdo_out,\r
+       -- DEBUG\r
+       CLK_EN_OUT  => open,\r
+       BSM_OUT     => open,\r
+       DEBUG_OUT   => open\r
+);\r
 \r
 ---------------------------------------------------------\r
 -- Statemachine                                        --\r
@@ -115,7 +119,7 @@ begin
        store_wr_x <= '0';\r
        store_rd_x <= '0';\r
        case CURRENT_STATE is\r
-               when SLEEP              =>      if   ( (spi_busy = '0') and (slv_read_in = '1') ) then\r
+               when SLEEP      =>  if   ( (spi_busy = '0') and (slv_read_in = '1') ) then\r
                                                                NEXT_STATE <= RD_RDY;\r
                                                                store_rd_x <= '1';\r
                                                        elsif( (spi_busy = '0') and (slv_write_in = '1') ) then\r
@@ -127,40 +131,40 @@ begin
                                                        elsif( (spi_busy = '1') and (slv_write_in = '1') ) then\r
                                                                NEXT_STATE <= WR_BSY;\r
                                                                slv_busy_x <= '1';\r
-                                                       else    \r
+                                                       else\r
                                                                NEXT_STATE <= SLEEP;\r
                                                        end if;\r
-               when RD_RDY             =>      NEXT_STATE <= RD_ACK;\r
+               when RD_RDY     =>  NEXT_STATE <= RD_ACK;\r
                                                        slv_ack_x  <= '1';\r
-               when WR_RDY             =>      NEXT_STATE <= WR_ACK;\r
+               when WR_RDY     =>  NEXT_STATE <= WR_ACK;\r
                                                        slv_ack_x  <= '1';\r
-               when RD_ACK             =>      if( slv_read_in = '0' ) then\r
+               when RD_ACK     =>  if( slv_read_in = '0' ) then\r
                                                                NEXT_STATE <= DONE;\r
                                                        else\r
                                                                NEXT_STATE <= RD_ACK;\r
                                                                slv_ack_x  <= '1';\r
                                                        end if;\r
-               when WR_ACK             =>      if( slv_write_in = '0' ) then\r
+               when WR_ACK     =>  if( slv_write_in = '0' ) then\r
                                                                NEXT_STATE <= DONE;\r
                                                        else\r
                                                                NEXT_STATE <= WR_ACK;\r
                                                                slv_ack_x  <= '1';\r
                                                        end if;\r
-               when RD_BSY             =>      if( slv_read_in = '0' ) then\r
+               when RD_BSY     =>  if( slv_read_in = '0' ) then\r
                                                                NEXT_STATE <= DONE;\r
                                                        else\r
                                                                NEXT_STATE <= RD_BSY;\r
                                                                slv_busy_x <= '1';\r
                                                        end if;\r
-               when WR_BSY             =>      if( slv_write_in = '0' ) then\r
+               when WR_BSY     =>  if( slv_write_in = '0' ) then\r
                                                                NEXT_STATE <= DONE;\r
                                                        else\r
                                                                NEXT_STATE <= WR_BSY;\r
                                                                slv_busy_x <= '1';\r
                                                        end if;\r
-               when DONE               =>      NEXT_STATE <= SLEEP;\r
-                       \r
-               when others             =>      NEXT_STATE <= SLEEP;\r
+               when DONE       =>  NEXT_STATE <= SLEEP;\r
+\r
+               when others     =>  NEXT_STATE <= SLEEP;\r
        end case;\r
 end process TRANSFORM;\r
 \r
index 4b83c1e65d4bfb801fa9685be7a9fae70db651ec..2ad57b3e6b6725eec29f6183fe0e3446100a3b41 100644 (file)
@@ -7,60 +7,61 @@ use work.adcmv3_components.all;
 \r
 \r
 entity spi_real_slim is\r
-       port( SYSCLK            : in    std_logic; -- 100MHz sysclock\r
-                 RESET                 : in    std_logic; -- synchronous reset\r
-                 -- Command interface\r
-                 START_IN              : in    std_logic; -- one start pulse\r
-                 BUSY_OUT              : out   std_logic; -- SPI transactions are ongoing\r
-                 CMD_IN                : in    std_logic_vector(7 downto 0); -- SPI command byte\r
-                 -- SPI interface\r
-                 SPI_SCK_OUT   : out   std_logic;\r
-                 SPI_CS_OUT    : out   std_logic;\r
-                 SPI_SDO_OUT   : out   std_logic;\r
-                 -- DEBUG\r
-                 CLK_EN_OUT    : out   std_logic;\r
-                 BSM_OUT               : out   std_logic_vector(7 downto 0);\r
-                 DEBUG_OUT             : out   std_logic_vector(31 downto 0)\r
-               );\r
+port(\r
+       SYSCLK      : in    std_logic; -- 100MHz sysclock\r
+       RESET       : in    std_logic; -- synchronous reset\r
+       -- Command interface\r
+       START_IN    : in    std_logic; -- one start pulse\r
+       BUSY_OUT    : out   std_logic; -- SPI transactions are ongoing\r
+       CMD_IN      : in    std_logic_vector(7 downto 0); -- SPI command byte\r
+       -- SPI interface\r
+       SPI_SCK_OUT : out   std_logic;\r
+       SPI_CS_OUT  : out   std_logic;\r
+       SPI_SDO_OUT : out   std_logic;\r
+       -- DEBUG\r
+       CLK_EN_OUT  : out   std_logic;\r
+       BSM_OUT     : out   std_logic_vector(7 downto 0);\r
+       DEBUG_OUT   : out   std_logic_vector(31 downto 0)\r
+);\r
 end spi_real_slim;\r
 \r
 architecture Behavioral of spi_real_slim is\r
 \r
 -- new clock divider\r
-signal div_counter             : std_logic_vector(1 downto 0);\r
-signal div_done_x              : std_logic;\r
-signal div_done                        : std_logic; -- same as clk_en\r
-signal clk_en                  : std_logic; -- same as div_done\r
+signal div_counter      : std_logic_vector(1 downto 0);\r
+signal div_done_x       : std_logic;\r
+signal div_done         : std_logic; -- same as clk_en\r
+signal clk_en           : std_logic; -- same as div_done\r
 \r
 -- Statemachine signals\r
 type state_t is (IDLE,CSL,TXCMD,CSH);\r
-signal STATE, NEXT_STATE       : state_t;\r
-\r
-signal tx_ena_x                        : std_logic;\r
-signal tx_ena                  : std_logic;\r
-signal busy_x                  : std_logic;\r
-signal busy                            : std_logic;\r
-signal spi_cs_x                        : std_logic; -- SPI chip select (low active)\r
-signal spi_cs                  : std_logic;\r
-signal spi_sck_x               : std_logic; -- SPI clock (rising edge active, from counter)\r
-signal spi_sck                 : std_logic;\r
-signal tx_load_x               : std_logic; -- load TX shift register\r
-signal tx_load                 : std_logic;\r
-\r
-signal last_tx_bit_x   : std_logic;\r
-signal last_tx_bit             : std_logic;\r
+signal STATE, NEXT_STATE    : state_t;\r
+\r
+signal tx_ena_x         : std_logic;\r
+signal tx_ena           : std_logic;\r
+signal busy_x           : std_logic;\r
+signal busy             : std_logic;\r
+signal spi_cs_x         : std_logic; -- SPI chip select (low active)\r
+signal spi_cs           : std_logic;\r
+signal spi_sck_x        : std_logic; -- SPI clock (rising edge active, from counter)\r
+signal spi_sck          : std_logic;\r
+signal tx_load_x        : std_logic; -- load TX shift register\r
+signal tx_load          : std_logic;\r
+\r
+signal last_tx_bit_x    : std_logic;\r
+signal last_tx_bit      : std_logic;\r
 \r
 -- debug signals\r
-signal bsm_x                   : std_logic_vector(7 downto 0);\r
-signal debug_x                 : std_logic_vector(31 downto 0);\r
+signal bsm_x            : std_logic_vector(7 downto 0);\r
+signal debug_x          : std_logic_vector(31 downto 0);\r
 \r
-signal start                   : std_logic; -- buffered start_in signal, as we have a clocked down state machine\r
-signal cmd_int                 : std_logic_vector(7 downto 0); -- internal command and address bytes\r
+signal start            : std_logic; -- buffered start_in signal, as we have a clocked down state machine\r
+signal cmd_int          : std_logic_vector(7 downto 0); -- internal command and address bytes\r
 \r
 -- transmitter\r
-signal tx_sreg                 : std_logic_vector(7 downto 0);\r
-signal tx_reg_comb             : std_logic_vector(7 downto 0); -- multiplexer\r
-signal tx_bit_cnt              : std_logic_vector(3 downto 0);\r
+signal tx_sreg          : std_logic_vector(7 downto 0);\r
+signal tx_reg_comb      : std_logic_vector(7 downto 0); -- multiplexer\r
+signal tx_bit_cnt       : std_logic_vector(3 downto 0);\r
 \r
 begin\r
 \r
@@ -82,7 +83,7 @@ debug_x(7)            <= '0';
 debug_x(6)            <= '0';\r
 debug_x(5)            <= tx_load;\r
 debug_x(4)            <= tx_ena;\r
-debug_x(3)            <= '0'; \r
+debug_x(3)            <= '0';\r
 debug_x(2 downto 0)   <= (others => '0');\r
 \r
 \r
@@ -200,11 +201,11 @@ end process THE_STATE_TRANSITIONS;
 THE_STATEMACHINE_OUT: process( STATE )\r
 begin\r
        case STATE is\r
-               when IDLE               =>      bsm_x                   <= x"00";\r
-               when CSL                =>      bsm_x                   <= x"01";\r
-               when TXCMD              =>      bsm_x                   <= x"02";\r
-               when CSH                =>      bsm_x                   <= x"03";\r
-               when others             =>      bsm_x                   <= x"ff";\r
+               when IDLE       =>  bsm_x           <= x"00";\r
+               when CSL        =>  bsm_x           <= x"01";\r
+               when TXCMD      =>  bsm_x           <= x"02";\r
+               when CSH        =>  bsm_x           <= x"03";\r
+               when others     =>  bsm_x           <= x"ff";\r
        end case;\r
 end process THE_STATEMACHINE_OUT;\r
 \r
index a00cd2fc3c271efb273294d51fb34a6f3f2ea763..82813b23e719fc77091dc9ecb9d5f35967381e90 100644 (file)
@@ -7,19 +7,20 @@ library work;
 use work.adcmv3_components.all;\r
 \r
 entity state_sync is\r
-       port( STATE_A_IN                : in    std_logic;\r
-                 RESET_B_IN            : in    std_logic;\r
-                 CLK_B_IN                      : in    std_logic;\r
-                 STATE_B_OUT           : out   std_logic\r
-               );\r
+port(\r
+       STATE_A_IN      : in    std_logic;\r
+       RESET_B_IN      : in    std_logic;\r
+       CLK_B_IN        : in    std_logic;\r
+       STATE_B_OUT     : out   std_logic\r
+);\r
 end;\r
 \r
 architecture behavioral of state_sync is\r
 \r
-       -- normal signals\r
-       signal sync_q                   : std_logic;\r
-       signal sync_qq                  : std_logic;\r
-               \r
+-- normal signals\r
+signal sync_q           : std_logic;\r
+signal sync_qq          : std_logic;\r
+\r
 begin\r
 \r
 -- synchronizing stage for clock domain B\r
index ec21ace6668504a842939445a3efa11296aaabb3..09b79f2c2dbf62d71dd73bf29e0e6e6cfe2d473f 100755 (executable)
@@ -28,8 +28,10 @@ ARCHITECTURE behavior OF testbench IS
                TRB_TTAG_IN : IN std_logic_vector(15 downto 0);\r
                TRB_TRND_IN : IN std_logic_vector(7 downto 0);\r
                TRB_TTYPE_IN : IN std_logic_vector(3 downto 0);\r
+               TRB_TINFO_IN : IN std_logic_vector(23 downto 0);\r
                TRB_TRGRCVD_IN : IN std_logic;\r
-               TRB_RST_COUNTER_IN : IN std_logic;\r
+               TRB_COUNTER_IN : IN std_logic_vector(15 downto 0);\r
+               TRB_LD_COUNTER_IN : IN std_logic;\r
                EDS_DONE_IN : IN std_logic;          \r
                TRG_FOUND_OUT : OUT std_logic;\r
                TRB_MISSING_OUT : OUT std_logic;\r
@@ -66,10 +68,12 @@ ARCHITECTURE behavior OF testbench IS
        SIGNAL TRB_TTAG_IN :  std_logic_vector(15 downto 0);\r
        SIGNAL TRB_TRND_IN :  std_logic_vector(7 downto 0);\r
        SIGNAL TRB_TTYPE_IN :  std_logic_vector(3 downto 0);\r
+       SIGNAL TRB_TINFO_IN :  std_logic_vector(23 downto 0);\r
        SIGNAL TRB_TRGRCVD_IN :  std_logic;\r
        SIGNAL TRB_MISSING_OUT :  std_logic;\r
        SIGNAL TRB_RELEASE_OUT :  std_logic;\r
-       SIGNAL TRB_RST_COUNTER_IN :  std_logic;\r
+       SIGNAL TRB_COUNTER_IN :  std_logic_vector(15 downto 0);\r
+       SIGNAL TRB_LD_COUNTER_IN :  std_logic;\r
        SIGNAL TRB_COUNTER_OUT :  std_logic_vector(15 downto 0);\r
        SIGNAL EDS_DATA_OUT :  std_logic_vector(39 downto 0);\r
        SIGNAL EDS_AVAIL_OUT :  std_logic;\r
@@ -105,10 +109,12 @@ BEGIN
                TRB_TTAG_IN => TRB_TTAG_IN,\r
                TRB_TRND_IN => TRB_TRND_IN,\r
                TRB_TTYPE_IN => TRB_TTYPE_IN,\r
+               TRB_TINFO_IN => TRB_TINFO_IN,\r
                TRB_TRGRCVD_IN => TRB_TRGRCVD_IN,\r
                TRB_MISSING_OUT => TRB_MISSING_OUT,\r
                TRB_RELEASE_OUT => TRB_RELEASE_OUT,\r
-               TRB_RST_COUNTER_IN => TRB_RST_COUNTER_IN,\r
+               TRB_COUNTER_IN => TRB_COUNTER_IN,\r
+               TRB_LD_COUNTER_IN => TRB_LD_COUNTER_IN,\r
                TRB_COUNTER_OUT => TRB_COUNTER_OUT,\r
                EDS_DATA_OUT => EDS_DATA_OUT,\r
                EDS_AVAIL_OUT => EDS_AVAIL_OUT,\r
@@ -155,8 +161,10 @@ begin
        trb_ttag_in <= x"0000";\r
        trb_trnd_in <= x"00";\r
        trb_ttype_in <= x"0";\r
+       trb_tinfo_in <= x"00_00_00";\r
        trb_trgrcvd_in <= '0';\r
-       trb_rst_counter_in <= '0';\r
+       trb_counter_in <= x"dead";\r
+       trb_ld_counter_in <= '0';\r
        eds_done_in <= '0';\r
        \r
        wait for 20 ns;\r
@@ -181,6 +189,12 @@ begin
        wait until rising_edge(clk_in);\r
 \r
        wait for 1 us;\r
+\r
+       -- Set local LVL1 counter to TRBnet value\r
+       wait until rising_edge(clk_in);\r
+       trb_ld_counter_in <= '1';\r
+       wait until rising_edge(clk_in);\r
+       trb_ld_counter_in <= '0';\r
        \r
        -- first trigger\r
        -- send in one timing trigger\r
@@ -193,12 +207,14 @@ begin
        wait for 2.3 us;\r
        wait until rising_edge(clk_in);\r
        trb_ttype_in <= x"1";\r
-       trb_ttag_in <= x"abcd";\r
-       trb_trnd_in <= x"ef";\r
+       trb_ttag_in <= x"dead";\r
+       trb_trnd_in <= x"a0";\r
+       trb_tinfo_in <= x"00_00_00"; -- data format = b"000"\r
        wait until rising_edge(clk_in);\r
        trb_trgrcvd_in <= '1';\r
 \r
        -- release trigger\r
+       wait until rising_edge(clk_in);\r
        wait until rising_edge(trb_release_out);\r
        wait until rising_edge(clk_in);\r
        wait until rising_edge(clk_in);\r
@@ -218,8 +234,75 @@ begin
        wait for 2.3 us;\r
        wait until rising_edge(clk_in);\r
        trb_ttype_in <= x"2";\r
-       trb_ttag_in <= x"dead";\r
+       trb_ttag_in <= x"deae";\r
        trb_trnd_in <= x"42";\r
+       trb_tinfo_in <= x"00_01_00"; -- data format = b"001"\r
+       wait until rising_edge(clk_in);\r
+       trb_trgrcvd_in <= '1';\r
+\r
+       -- release trigger\r
+       wait until rising_edge(trb_release_out);\r
+       wait until rising_edge(clk_in);\r
+       wait until rising_edge(clk_in);\r
+       trb_trgrcvd_in <= '0';\r
+       wait until rising_edge(clk_in);\r
+\r
+       wait for 1.11 us;\r
+\r
+       -- next trigger (missing timing trigger)\r
+       -- send TRB trigger infos\r
+       wait for 2.3 us;\r
+       wait until rising_edge(clk_in);\r
+       trb_ttype_in <= x"3";\r
+       trb_ttag_in <= x"deaf";\r
+       trb_trnd_in <= x"7c";\r
+       trb_tinfo_in <= x"00_05_00"; -- data format = b"101"\r
+       wait until rising_edge(clk_in);\r
+       trb_trgrcvd_in <= '1';\r
+\r
+       -- release trigger\r
+       wait until rising_edge(trb_release_out);\r
+       wait until rising_edge(clk_in);\r
+       wait until rising_edge(clk_in);\r
+       trb_trgrcvd_in <= '0';\r
+       wait until rising_edge(clk_in);\r
+\r
+       wait for 1.51 us;\r
+\r
+       -- next trigger (timingtriggerless trigger)\r
+       -- send TRB trigger infos\r
+       wait for 2.3 us;\r
+       wait until rising_edge(clk_in);\r
+       trb_ttype_in <= x"9";\r
+       trb_ttag_in <= x"deb0";\r
+       trb_trnd_in <= x"19";\r
+       trb_tinfo_in <= x"00_00_80"; -- timingtriggerless trigger\r
+       wait until rising_edge(clk_in);\r
+       trb_trgrcvd_in <= '1';\r
+\r
+       -- release trigger\r
+       wait until rising_edge(trb_release_out);\r
+       wait until rising_edge(clk_in);\r
+       wait until rising_edge(clk_in);\r
+       trb_trgrcvd_in <= '0';\r
+       wait until rising_edge(clk_in);\r
+\r
+       wait for 1.21 us;\r
+\r
+       -- next trigger\r
+       -- send in one timing trigger\r
+       wait for 77.7 ns;\r
+       time_trg_in <= x"1";    \r
+       wait for 222.2 ns;\r
+       time_trg_in <= x"0";\r
+       \r
+       -- send TRB trigger infos\r
+       wait for 2.3 us;\r
+       wait until rising_edge(clk_in);\r
+       trb_ttype_in <= x"4";\r
+       trb_ttag_in <= x"deb1";\r
+       trb_trnd_in <= x"97";\r
+       trb_tinfo_in <= x"00_00_01"; -- data format = b"000", suppress data\r
        wait until rising_edge(clk_in);\r
        trb_trgrcvd_in <= '1';\r
 \r
@@ -237,16 +320,35 @@ begin
        eds_done_in <= '1';\r
        wait until rising_edge(clk_in);\r
        eds_done_in <= '0';\r
+       wait for 100 ns;\r
+\r
+       -- release one EDS\r
        wait until rising_edge(clk_in);\r
+       eds_done_in <= '1';\r
+       wait until rising_edge(clk_in);\r
+       eds_done_in <= '0';\r
+       wait for 100 ns;\r
 \r
-       wait for 200 ns;\r
+       -- release one EDS\r
+       wait until rising_edge(clk_in);\r
+       eds_done_in <= '1';\r
+       wait until rising_edge(clk_in);\r
+       eds_done_in <= '0';\r
+       wait for 100 ns;\r
 \r
        -- release one EDS\r
        wait until rising_edge(clk_in);\r
        eds_done_in <= '1';\r
        wait until rising_edge(clk_in);\r
        eds_done_in <= '0';\r
+       wait for 100 ns;\r
+\r
+       -- release one EDS\r
        wait until rising_edge(clk_in);\r
+       eds_done_in <= '1';\r
+       wait until rising_edge(clk_in);\r
+       eds_done_in <= '0';\r
+       wait for 100 ns;\r
 \r
        \r
        -- Stay a while, stay forever.... wuhahahahaha\r
index c1d3d3a3e4275f0d1cf31da34ab031286b99b959..19e384d2524374cc035200848fe550ea508ee696 100644 (file)
@@ -2,9 +2,6 @@ LIBRARY ieee;
 USE ieee.std_logic_1164.ALL;\r
 USE ieee.numeric_std.ALL;\r
 \r
-library work;\r
-use work.adcmv3_components.all;\r
-\r
 ENTITY testbench IS\r
 END testbench;\r
 \r
@@ -24,6 +21,7 @@ ARCHITECTURE behavior OF testbench IS
                DHDR_LENGTH_IN : IN std_logic_vector(15 downto 0);\r
                DHDR_STORE_IN : IN std_logic;\r
                FIFO_START_IN : IN std_logic;\r
+               FIFO_SPACE_REQ_IN : IN std_logic_vector(11 downto 0);\r
                FIFO_0_DATA_IN : IN std_logic_vector(39 downto 0);\r
                FIFO_1_DATA_IN : IN std_logic_vector(39 downto 0);\r
                FIFO_2_DATA_IN : IN std_logic_vector(39 downto 0);\r
@@ -47,6 +45,8 @@ ARCHITECTURE behavior OF testbench IS
                IPU_READOUT_FINISHED_OUT : OUT std_logic;\r
                IPU_LENGTH_OUT : OUT std_logic_vector(15 downto 0);\r
                IPU_ERROR_PATTERN_OUT : OUT std_logic_vector(31 downto 0);\r
+               LVL2_COUNTER_OUT : OUT std_logic_vector(15 downto 0);\r
+               DHDR_BUF_FULL_OUT : OUT std_logic;\r
                DBG_BSM_OUT : OUT std_logic_vector(7 downto 0);\r
                DBG_OUT : OUT std_logic_vector(63 downto 0)\r
                );\r
@@ -65,10 +65,13 @@ ARCHITECTURE behavior OF testbench IS
        SIGNAL IPU_READ_IN :  std_logic;\r
        SIGNAL IPU_LENGTH_OUT :  std_logic_vector(15 downto 0);\r
        SIGNAL IPU_ERROR_PATTERN_OUT :  std_logic_vector(31 downto 0);\r
+       SIGNAL LVL2_COUNTER_OUT :  std_logic_vector(15 downto 0);\r
        SIGNAL DHDR_DATA_IN :  std_logic_vector(31 downto 0);\r
        SIGNAL DHDR_LENGTH_IN :  std_logic_vector(15 downto 0);\r
        SIGNAL DHDR_STORE_IN :  std_logic;\r
+       SIGNAL DHDR_BUF_FULL_OUT :  std_logic;\r
        SIGNAL FIFO_START_IN :  std_logic;\r
+       SIGNAL FIFO_SPACE_REQ_IN :  std_logic_vector(11 downto 0);\r
        SIGNAL FIFO_0_DATA_IN :  std_logic_vector(39 downto 0);\r
        SIGNAL FIFO_1_DATA_IN :  std_logic_vector(39 downto 0);\r
        SIGNAL FIFO_2_DATA_IN :  std_logic_vector(39 downto 0);\r
@@ -107,10 +110,13 @@ BEGIN
                IPU_READ_IN => IPU_READ_IN,\r
                IPU_LENGTH_OUT => IPU_LENGTH_OUT,\r
                IPU_ERROR_PATTERN_OUT => IPU_ERROR_PATTERN_OUT,\r
+               LVL2_COUNTER_OUT => LVL2_COUNTER_OUT,\r
                DHDR_DATA_IN => DHDR_DATA_IN,\r
                DHDR_LENGTH_IN => DHDR_LENGTH_IN,\r
                DHDR_STORE_IN => DHDR_STORE_IN,\r
+               DHDR_BUF_FULL_OUT => DHDR_BUF_FULL_OUT,\r
                FIFO_START_IN => FIFO_START_IN,\r
+               FIFO_SPACE_REQ_IN => FIFO_SPACE_REQ_IN,\r
                FIFO_0_DATA_IN => FIFO_0_DATA_IN,\r
                FIFO_1_DATA_IN => FIFO_1_DATA_IN,\r
                FIFO_2_DATA_IN => FIFO_2_DATA_IN,\r
@@ -155,6 +161,8 @@ begin
        dhdr_data_in <= x"01234567";\r
        dhdr_length_in <= x"0000";\r
        dhdr_store_in <= '0';\r
+--     fifo_space_req_in <= x"082"; -- 128 + 2\r
+       fifo_space_req_in <= x"7f8"; \r
        fifo_start_in <= '0';\r
        fifo_we_in <= x"0000";\r
        fifo_done_in <= '0';\r
@@ -199,6 +207,7 @@ begin
        -- Fill data buffers\r
        wait until rising_edge(clk_in);\r
        fifo_we_in <= b"1111_1111_1111_1111";\r
+--     fifo_we_in <= b"1111_1111_0111_1111";\r
        fifo_0_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_1111";\r
        fifo_1_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0001_1110";\r
        fifo_2_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0010_1101";\r
@@ -216,31 +225,322 @@ begin
        fifo_14_data_in(26 downto 0) <= b"000_00_00_0000_0000_0000_1110_0001";\r
        fifo_15_data_in(26 downto 0) <= b"000_00_00_0000_0000_0000_1111_0000";\r
        wait until rising_edge(clk_in);\r
-       fifo_0_data_in(26 downto 0) <= b"000_00_00_0000_0000_0000_0000_0000";\r
-       fifo_we_in(0) <= '0';\r
-       wait until rising_edge(clk_in);\r
-\r
+--     fifo_we_in <= b"1111_1111_1111_1110";\r
+       fifo_we_in <= b"1111_1111_0111_1110";\r
+       fifo_0_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_1_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0001_0001_1110";\r
+       fifo_2_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0001_0010_1101";\r
+       fifo_3_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0001_0011_1100";\r
+       fifo_4_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0001_0100_1011";\r
+       fifo_5_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0001_0101_1010";\r
+       fifo_6_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0001_0110_1001";\r
+       fifo_7_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0001_0111_1000";\r
+       fifo_8_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0001_1000_0111";\r
+       fifo_9_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0001_1001_0110";\r
+       fifo_10_data_in(26 downto 0) <= b"000_00_00_0000_0000_0001_1010_0101";\r
+       fifo_11_data_in(26 downto 0) <= b"000_00_00_0000_0000_0001_1011_0100";\r
+       fifo_12_data_in(26 downto 0) <= b"000_00_00_0000_0000_0001_1100_0011";\r
+       fifo_13_data_in(26 downto 0) <= b"000_00_00_0000_0000_0001_1101_0010";\r
+       fifo_14_data_in(26 downto 0) <= b"000_00_00_0000_0000_0001_1110_0001";\r
+       fifo_15_data_in(26 downto 0) <= b"000_00_00_0000_0000_0001_1111_0000";\r
+       wait until rising_edge(clk_in);\r
+--     fifo_we_in <= b"1111_1111_1111_1100";\r
+       fifo_we_in <= b"1111_1111_0111_1100";\r
+       fifo_0_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_1_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_2_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0010_0010_1101";\r
+       fifo_3_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0010_0011_1100";\r
+       fifo_4_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0010_0100_1011";\r
+       fifo_5_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0010_0101_1010";\r
+       fifo_6_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0010_0110_1001";\r
+       fifo_7_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0010_0111_1000";\r
+       fifo_8_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0010_1000_0111";\r
+       fifo_9_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0010_1001_0110";\r
+       fifo_10_data_in(26 downto 0) <= b"000_00_00_0000_0000_0010_1010_0101";\r
+       fifo_11_data_in(26 downto 0) <= b"000_00_00_0000_0000_0010_1011_0100";\r
+       fifo_12_data_in(26 downto 0) <= b"000_00_00_0000_0000_0010_1100_0011";\r
+       fifo_13_data_in(26 downto 0) <= b"000_00_00_0000_0000_0010_1101_0010";\r
+       fifo_14_data_in(26 downto 0) <= b"000_00_00_0000_0000_0010_1110_0001";\r
+       fifo_15_data_in(26 downto 0) <= b"000_00_00_0000_0000_0010_1111_0000";\r
+       wait until rising_edge(clk_in);\r
+--     fifo_we_in <= b"1111_1111_1111_1000";\r
+       fifo_we_in <= b"1111_1111_0111_1000";\r
+       fifo_0_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_1_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_2_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_3_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0011_0011_1100";\r
+       fifo_4_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0011_0100_1011";\r
+       fifo_5_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0011_0101_1010";\r
+       fifo_6_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0011_0110_1001";\r
+       fifo_7_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0011_0111_1000";\r
+       fifo_8_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0011_1000_0111";\r
+       fifo_9_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0011_1001_0110";\r
+       fifo_10_data_in(26 downto 0) <= b"000_00_00_0000_0000_0011_1010_0101";\r
+       fifo_11_data_in(26 downto 0) <= b"000_00_00_0000_0000_0011_1011_0100";\r
+       fifo_12_data_in(26 downto 0) <= b"000_00_00_0000_0000_0011_1100_0011";\r
+       fifo_13_data_in(26 downto 0) <= b"000_00_00_0000_0000_0011_1101_0010";\r
+       fifo_14_data_in(26 downto 0) <= b"000_00_00_0000_0000_0011_1110_0001";\r
+       fifo_15_data_in(26 downto 0) <= b"000_00_00_0000_0000_0011_1111_0000";\r
+       wait until rising_edge(clk_in);\r
+--     fifo_we_in <= b"1111_1111_1111_0000";\r
+       fifo_we_in <= b"1111_1111_0111_0000";\r
+       fifo_0_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_1_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_2_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_3_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_4_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0100_0100_1011";\r
+       fifo_5_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0100_0101_1010";\r
+       fifo_6_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0100_0110_1001";\r
+       fifo_7_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0100_0111_1000";\r
+       fifo_8_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0100_1000_0111";\r
+       fifo_9_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0100_1001_0110";\r
+       fifo_10_data_in(26 downto 0) <= b"000_00_00_0000_0000_0100_1010_0101";\r
+       fifo_11_data_in(26 downto 0) <= b"000_00_00_0000_0000_0100_1011_0100";\r
+       fifo_12_data_in(26 downto 0) <= b"000_00_00_0000_0000_0100_1100_0011";\r
+       fifo_13_data_in(26 downto 0) <= b"000_00_00_0000_0000_0100_1101_0010";\r
+       fifo_14_data_in(26 downto 0) <= b"000_00_00_0000_0000_0100_1110_0001";\r
+       fifo_15_data_in(26 downto 0) <= b"000_00_00_0000_0000_0100_1111_0000";\r
+       wait until rising_edge(clk_in);\r
+--     fifo_we_in <= b"1111_1111_1110_0000";\r
+       fifo_we_in <= b"1111_1111_0110_0000";\r
+       fifo_0_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_1_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_2_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_3_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_4_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_5_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0101_0101_1010";\r
+       fifo_6_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0101_0110_1001";\r
+       fifo_7_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0101_0111_1000";\r
+       fifo_8_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0101_1000_0111";\r
+       fifo_9_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0101_1001_0110";\r
+       fifo_10_data_in(26 downto 0) <= b"000_00_00_0000_0000_0101_1010_0101";\r
+       fifo_11_data_in(26 downto 0) <= b"000_00_00_0000_0000_0101_1011_0100";\r
+       fifo_12_data_in(26 downto 0) <= b"000_00_00_0000_0000_0101_1100_0011";\r
+       fifo_13_data_in(26 downto 0) <= b"000_00_00_0000_0000_0101_1101_0010";\r
+       fifo_14_data_in(26 downto 0) <= b"000_00_00_0000_0000_0101_1110_0001";\r
+       fifo_15_data_in(26 downto 0) <= b"000_00_00_0000_0000_0101_1111_0000";\r
+       wait until rising_edge(clk_in);\r
+--     fifo_we_in <= b"1111_1111_1100_0000";\r
+       fifo_we_in <= b"1111_1111_0100_0000";\r
+       fifo_0_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_1_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_2_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_3_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_4_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_5_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_6_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0110_0110_1001";\r
+       fifo_7_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0110_0111_1000";\r
+       fifo_8_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0110_1000_0111";\r
+       fifo_9_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0110_1001_0110";\r
+       fifo_10_data_in(26 downto 0) <= b"000_00_00_0000_0000_0110_1010_0101";\r
+       fifo_11_data_in(26 downto 0) <= b"000_00_00_0000_0000_0110_1011_0100";\r
+       fifo_12_data_in(26 downto 0) <= b"000_00_00_0000_0000_0110_1100_0011";\r
+       fifo_13_data_in(26 downto 0) <= b"000_00_00_0000_0000_0110_1101_0010";\r
+       fifo_14_data_in(26 downto 0) <= b"000_00_00_0000_0000_0110_1110_0001";\r
+       fifo_15_data_in(26 downto 0) <= b"000_00_00_0000_0000_0110_1111_0000";\r
+       wait until rising_edge(clk_in);\r
+--     fifo_we_in <= b"1111_1111_1000_0000";\r
+       fifo_we_in <= b"1111_1111_0000_0000";\r
+       fifo_0_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_1_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_2_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_3_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_4_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_5_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_6_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_7_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0111_0111_1000";\r
+       fifo_8_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0111_1000_0111";\r
+       fifo_9_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0111_1001_0110";\r
+       fifo_10_data_in(26 downto 0) <= b"000_00_00_0000_0000_0111_1010_0101";\r
+       fifo_11_data_in(26 downto 0) <= b"000_00_00_0000_0000_0111_1011_0100";\r
+       fifo_12_data_in(26 downto 0) <= b"000_00_00_0000_0000_0111_1100_0011";\r
+       fifo_13_data_in(26 downto 0) <= b"000_00_00_0000_0000_0111_1101_0010";\r
+       fifo_14_data_in(26 downto 0) <= b"000_00_00_0000_0000_0111_1110_0001";\r
+       fifo_15_data_in(26 downto 0) <= b"000_00_00_0000_0000_0111_1111_0000";\r
+       wait until rising_edge(clk_in);\r
+       fifo_we_in <= b"1111_1111_0000_0000";\r
+       fifo_0_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_1_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_2_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_3_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_4_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_5_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_6_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_7_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_8_data_in(26 downto 0)  <= b"000_00_00_0000_0000_1000_1000_0111";\r
+       fifo_9_data_in(26 downto 0)  <= b"000_00_00_0000_0000_1000_1001_0110";\r
+       fifo_10_data_in(26 downto 0) <= b"000_00_00_0000_0000_1000_1010_0101";\r
+       fifo_11_data_in(26 downto 0) <= b"000_00_00_0000_0000_1000_1011_0100";\r
+       fifo_12_data_in(26 downto 0) <= b"000_00_00_0000_0000_1000_1100_0011";\r
+       fifo_13_data_in(26 downto 0) <= b"000_00_00_0000_0000_1000_1101_0010";\r
+       fifo_14_data_in(26 downto 0) <= b"000_00_00_0000_0000_1000_1110_0001";\r
+       fifo_15_data_in(26 downto 0) <= b"000_00_00_0000_0000_1000_1111_0000";\r
+       wait until rising_edge(clk_in);\r
+       fifo_we_in <= b"1111_1110_0000_0000";\r
+       fifo_0_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_1_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_2_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_3_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_4_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_5_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_6_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_7_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_8_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_9_data_in(26 downto 0)  <= b"000_00_00_0000_0000_1001_1001_0110";\r
+       fifo_10_data_in(26 downto 0) <= b"000_00_00_0000_0000_1001_1010_0101";\r
+       fifo_11_data_in(26 downto 0) <= b"000_00_00_0000_0000_1001_1011_0100";\r
+       fifo_12_data_in(26 downto 0) <= b"000_00_00_0000_0000_1001_1100_0011";\r
+       fifo_13_data_in(26 downto 0) <= b"000_00_00_0000_0000_1001_1101_0010";\r
+       fifo_14_data_in(26 downto 0) <= b"000_00_00_0000_0000_1001_1110_0001";\r
+       fifo_15_data_in(26 downto 0) <= b"000_00_00_0000_0000_1001_1111_0000";\r
+       wait until rising_edge(clk_in);\r
+       fifo_we_in <= b"1111_1100_0000_0000";\r
+       fifo_0_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_1_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_2_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_3_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_4_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_5_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_6_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_7_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_8_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_9_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_10_data_in(26 downto 0) <= b"000_00_00_0000_0000_1010_1010_0101";\r
+       fifo_11_data_in(26 downto 0) <= b"000_00_00_0000_0000_1010_1011_0100";\r
+       fifo_12_data_in(26 downto 0) <= b"000_00_00_0000_0000_1010_1100_0011";\r
+       fifo_13_data_in(26 downto 0) <= b"000_00_00_0000_0000_1010_1101_0010";\r
+       fifo_14_data_in(26 downto 0) <= b"000_00_00_0000_0000_1010_1110_0001";\r
+       fifo_15_data_in(26 downto 0) <= b"000_00_00_0000_0000_1010_1111_0000";\r
+       wait until rising_edge(clk_in);\r
+       fifo_we_in <= b"1111_1000_0000_0000";\r
+       fifo_0_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_1_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_2_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_3_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_4_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_5_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_6_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_7_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_8_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_9_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_10_data_in(26 downto 0) <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_11_data_in(26 downto 0) <= b"000_00_00_0000_0000_1011_1011_0100";\r
+       fifo_12_data_in(26 downto 0) <= b"000_00_00_0000_0000_1011_1100_0011";\r
+       fifo_13_data_in(26 downto 0) <= b"000_00_00_0000_0000_1011_1101_0010";\r
+       fifo_14_data_in(26 downto 0) <= b"000_00_00_0000_0000_1011_1110_0001";\r
+       fifo_15_data_in(26 downto 0) <= b"000_00_00_0000_0000_1011_1111_0000";\r
+       wait until rising_edge(clk_in);\r
+       fifo_we_in <= b"1111_0000_0000_0000";\r
+       fifo_0_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_1_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_2_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_3_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_4_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_5_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_6_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_7_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_8_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_9_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_10_data_in(26 downto 0) <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_11_data_in(26 downto 0) <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_12_data_in(26 downto 0) <= b"000_00_00_0000_0000_1100_1100_0011";\r
+       fifo_13_data_in(26 downto 0) <= b"000_00_00_0000_0000_1100_1101_0010";\r
+       fifo_14_data_in(26 downto 0) <= b"000_00_00_0000_0000_1100_1110_0001";\r
+       fifo_15_data_in(26 downto 0) <= b"000_00_00_0000_0000_1100_1111_0000";\r
+       wait until rising_edge(clk_in);\r
+       fifo_we_in <= b"1110_0000_0000_0000";\r
+       fifo_0_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_1_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_2_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_3_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_4_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_5_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_6_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_7_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_8_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_9_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_10_data_in(26 downto 0) <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_11_data_in(26 downto 0) <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_12_data_in(26 downto 0) <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_13_data_in(26 downto 0) <= b"000_00_00_0000_0000_1101_1101_0010";\r
+       fifo_14_data_in(26 downto 0) <= b"000_00_00_0000_0000_1101_1110_0001";\r
+       fifo_15_data_in(26 downto 0) <= b"000_00_00_0000_0000_1101_1111_0000";\r
+       wait until rising_edge(clk_in);\r
+       fifo_we_in <= b"1100_0000_0000_0000";\r
+       fifo_0_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_1_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_2_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_3_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_4_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_5_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_6_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_7_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_8_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_9_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_10_data_in(26 downto 0) <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_11_data_in(26 downto 0) <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_12_data_in(26 downto 0) <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_13_data_in(26 downto 0) <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_14_data_in(26 downto 0) <= b"000_00_00_0000_0000_1110_1110_0001";\r
+       fifo_15_data_in(26 downto 0) <= b"000_00_00_0000_0000_1110_1111_0000";\r
+       wait until rising_edge(clk_in);\r
+       fifo_we_in <= b"1000_0000_0000_0000";\r
+       fifo_0_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_1_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_2_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_3_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_4_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_5_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_6_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_7_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_8_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_9_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_10_data_in(26 downto 0) <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_11_data_in(26 downto 0) <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_12_data_in(26 downto 0) <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_13_data_in(26 downto 0) <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_14_data_in(26 downto 0) <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_15_data_in(26 downto 0) <= b"000_00_00_0000_0000_1111_1111_0000";\r
+       wait until rising_edge(clk_in);\r
+       fifo_we_in <= b"0000_0000_0000_0000";\r
+       fifo_0_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_1_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_2_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_3_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_4_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_5_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_6_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_7_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_8_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_9_data_in(26 downto 0)  <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_10_data_in(26 downto 0) <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_11_data_in(26 downto 0) <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_12_data_in(26 downto 0) <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_13_data_in(26 downto 0) <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_14_data_in(26 downto 0) <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
+       fifo_15_data_in(26 downto 0) <= b"000_00_00_0000_0000_0000_0000_0000"; -- off\r
        wait until rising_edge(clk_in);\r
 \r
        -- Final stage, counter values setting\r
        wait until rising_edge(clk_in);\r
        wait until rising_edge(clk_in);\r
-       fifo_0_data_in(37 downto 27)  <= "10000000001"; -- "10000000011"; -- 3\r
-       fifo_1_data_in(37 downto 27)  <= "10000000001"; -- "00000000000"; -- invalid\r
-       fifo_2_data_in(37 downto 27)  <= "10000000001"; -- "00000000000"; -- invalid\r
-       fifo_3_data_in(37 downto 27)  <= "10000000001"; -- "00000000000"; -- invalid\r
-       fifo_4_data_in(37 downto 27)  <= "10000000001"; -- "10000000101"; -- 5\r
-       fifo_5_data_in(37 downto 27)  <= "10000000001"; -- "00000000000"; -- invalid\r
-       fifo_6_data_in(37 downto 27)  <= "10000000001"; -- "00000000000"; -- invalid\r
-       fifo_7_data_in(37 downto 27)  <= "10000000001"; -- "10000000111"; -- 7\r
-       fifo_8_data_in(37 downto 27)  <= "10000000001"; -- "10000000001"; -- 1\r
-       fifo_9_data_in(37 downto 27)  <= "10000000001"; -- "10000000010"; -- 2\r
-       fifo_10_data_in(37 downto 27) <= "10000000001"; -- "00000000000"; -- invalid\r
-       fifo_11_data_in(37 downto 27) <= "10000000001"; -- "00000000000"; -- invalid\r
-       fifo_12_data_in(37 downto 27) <= "10000000001"; -- "00000000000"; -- invalid\r
-       fifo_13_data_in(37 downto 27) <= "10000000001"; -- "10000001000"; -- 8\r
-       fifo_14_data_in(37 downto 27) <= "10000000001"; -- "10000000111"; -- 7\r
-       fifo_15_data_in(37 downto 27) <= "10000000001"; -- "00000000000"; -- invalid\r
+       fifo_0_data_in(37 downto 27)  <= "10000000001"; -- 1\r
+       fifo_1_data_in(37 downto 27)  <= "10000000010"; -- 2\r
+       fifo_2_data_in(37 downto 27)  <= "10000000011"; -- 3\r
+       fifo_3_data_in(37 downto 27)  <= "10000000100"; -- 4\r
+       fifo_4_data_in(37 downto 27)  <= "10000000101"; -- 5\r
+       fifo_5_data_in(37 downto 27)  <= "10000000110"; -- 6\r
+       fifo_6_data_in(37 downto 27)  <= "10000000111"; -- 7\r
+--     fifo_7_data_in(37 downto 27)  <= "10000001000"; -- 8\r
+       fifo_7_data_in(37 downto 27)  <= "10000000001"; -- NO DATA\r
+       fifo_8_data_in(37 downto 27)  <= "10000001001"; -- 9\r
+       fifo_9_data_in(37 downto 27)  <= "10000001010"; -- 10\r
+       fifo_10_data_in(37 downto 27) <= "10000001011"; -- 11\r
+       fifo_11_data_in(37 downto 27) <= "10000001100"; -- 12\r
+       fifo_12_data_in(37 downto 27) <= "10000001101"; -- 13\r
+       fifo_13_data_in(37 downto 27) <= "10000001110"; -- 14\r
+       fifo_14_data_in(37 downto 27) <= "10000001111"; -- 15\r
+       fifo_15_data_in(37 downto 27) <= "10000010000"; -- 16\r
        wait until rising_edge(clk_in);\r
        wait until rising_edge(clk_in);\r
 \r
@@ -257,6 +557,7 @@ begin
        wait until rising_edge(clk_in);\r
        wait until rising_edge(clk_in);\r
 \r
+       wait for 2 us;\r
        \r
        -- IPU request\r
        wait until rising_edge(clk_in);\r
@@ -279,6 +580,43 @@ begin
        wait until rising_edge(clk_in);\r
        wait until rising_edge(clk_in);\r
        wait until rising_edge(clk_in);\r
+       wait until rising_edge(clk_in);\r
+\r
+       THE_LOOP: for i in 0 to 1024 loop\r
+               ipu_read_in <= '1';\r
+               wait until (ipu_dataready_out = '1') or (ipu_readout_finished_out = '1');\r
+               if ipu_readout_finished_out = '1' then exit; end if;\r
+               wait until rising_edge(clk_in);\r
+               ipu_read_in <= '0';\r
+               if ipu_readout_finished_out = '1' then exit; end if;\r
+               wait until rising_edge(clk_in);\r
+               \r
+       end loop THE_LOOP;\r
+\r
+       wait;\r
+\r
+---\r
+--  theloop : for i in 0 to 100 loop\r
+--    ipu_read_in <= '1';\r
+--    wait until ipu_dataready_out = '1' or ipu_readout_finished_out = '1';\r
+--    if ipu_readout_finished_out = '1' then exit; end if;\r
+--    wait until rising_edge(CLOCK);\r
+--    ipu_read_in <= '0';\r
+--    if ipu_readout_finished_out = '1' then exit; end if;\r
+--    case i is\r
+--      when 3 => wait for 39 ns;\r
+--      when 4 => wait for 49 ns;\r
+--      when 5 => wait for 29 ns;\r
+--      when others => null;\r
+--    end case;\r
+--    wait until rising_edge(CLOCK);\r
+--    if ipu_readout_finished_out = '1' then exit; end if;\r
+--  end loop;\r
+---\r
+\r
+\r
+       wait;\r
+\r
 \r
        ipu_read_in <= '1';\r
        wait until rising_edge(clk_in);\r
index f968586124696503c185e4016f7253e809fcc01c..468948946278b21bf41cd32e8e65cf14c682e2da 100644 (file)
@@ -13,7 +13,6 @@ ARCHITECTURE behavior OF testbench IS
                RESET_IN : IN std_logic;\r
                EDS_DATA_IN : IN std_logic_vector(39 downto 0);\r
                EDS_AVAIL_IN : IN std_logic;\r
-               EVT_TYPE_IN : IN std_logic_vector(2 downto 0);\r
                BUF_TICK_IN : IN std_logic_vector(15 downto 0);\r
                BUF_START_IN : IN std_logic_vector(15 downto 0);\r
                BUF_0_DATA_IN : IN std_logic_vector(37 downto 0);\r
@@ -67,7 +66,9 @@ ARCHITECTURE behavior OF testbench IS
                EDS_DONE_OUT : OUT std_logic;\r
                DHDR_DATA_OUT : OUT std_logic_vector(31 downto 0);\r
                DHDR_LENGTH_OUT : OUT std_logic_vector(15 downto 0);\r
+               DHDR_BUF_FULL_IN : IN std_logic;\r
                DHDR_STORE_OUT : OUT std_logic;\r
+               FIFO_SPACE_REQ_OUT : OUT std_logic_vector(11 downto 0);\r
                PED_ADDR_OUT : OUT std_logic_vector(6 downto 0);\r
                THR_ADDR_OUT : OUT std_logic_vector(6 downto 0);\r
                BUF_ADDR_OUT : OUT std_logic_vector(6 downto 0);\r
@@ -103,79 +104,28 @@ ARCHITECTURE behavior OF testbench IS
        SIGNAL EDS_DONE_OUT :  std_logic;\r
        SIGNAL DHDR_DATA_OUT :  std_logic_vector(31 downto 0);\r
        SIGNAL DHDR_LENGTH_OUT :  std_logic_vector(15 downto 0);\r
+       SIGNAL DHDR_BUF_FULL_IN :  std_logic;\r
        SIGNAL DHDR_STORE_OUT :  std_logic;\r
-       SIGNAL EVT_TYPE_IN :  std_logic_vector(2 downto 0);\r
        SIGNAL BUF_ADDR_OUT :  std_logic_vector(6 downto 0);\r
        SIGNAL BUF_DONE_OUT :  std_logic;\r
        SIGNAL BUF_TICK_IN :  std_logic_vector(15 downto 0);\r
        SIGNAL BUF_START_IN :  std_logic_vector(15 downto 0);\r
        SIGNAL BUF_0_DATA_IN :  std_logic_vector(37 downto 0);\r
        SIGNAL BUF_1_DATA_IN :  std_logic_vector(37 downto 0);\r
-       SIGNAL BUF_2_DATA_IN :  std_logic_vector(37 downto 0);\r
-       SIGNAL BUF_3_DATA_IN :  std_logic_vector(37 downto 0);\r
        SIGNAL BUF_4_DATA_IN :  std_logic_vector(37 downto 0);\r
-       SIGNAL BUF_5_DATA_IN :  std_logic_vector(37 downto 0);\r
-       SIGNAL BUF_6_DATA_IN :  std_logic_vector(37 downto 0);\r
-       SIGNAL BUF_7_DATA_IN :  std_logic_vector(37 downto 0);\r
-       SIGNAL BUF_8_DATA_IN :  std_logic_vector(37 downto 0);\r
-       SIGNAL BUF_9_DATA_IN :  std_logic_vector(37 downto 0);\r
-       SIGNAL BUF_10_DATA_IN :  std_logic_vector(37 downto 0);\r
-       SIGNAL BUF_11_DATA_IN :  std_logic_vector(37 downto 0);\r
-       SIGNAL BUF_12_DATA_IN :  std_logic_vector(37 downto 0);\r
-       SIGNAL BUF_13_DATA_IN :  std_logic_vector(37 downto 0);\r
-       SIGNAL BUF_14_DATA_IN :  std_logic_vector(37 downto 0);\r
-       SIGNAL BUF_15_DATA_IN :  std_logic_vector(37 downto 0);\r
        SIGNAL THR_ADDR_OUT :  std_logic_vector(6 downto 0);\r
        SIGNAL THR_0_DATA_IN :  std_logic_vector(17 downto 0);\r
        SIGNAL THR_1_DATA_IN :  std_logic_vector(17 downto 0);\r
-       SIGNAL THR_2_DATA_IN :  std_logic_vector(17 downto 0);\r
-       SIGNAL THR_3_DATA_IN :  std_logic_vector(17 downto 0);\r
        SIGNAL THR_4_DATA_IN :  std_logic_vector(17 downto 0);\r
-       SIGNAL THR_5_DATA_IN :  std_logic_vector(17 downto 0);\r
-       SIGNAL THR_6_DATA_IN :  std_logic_vector(17 downto 0);\r
-       SIGNAL THR_7_DATA_IN :  std_logic_vector(17 downto 0);\r
-       SIGNAL THR_8_DATA_IN :  std_logic_vector(17 downto 0);\r
-       SIGNAL THR_9_DATA_IN :  std_logic_vector(17 downto 0);\r
-       SIGNAL THR_10_DATA_IN :  std_logic_vector(17 downto 0);\r
-       SIGNAL THR_11_DATA_IN :  std_logic_vector(17 downto 0);\r
-       SIGNAL THR_12_DATA_IN :  std_logic_vector(17 downto 0);\r
-       SIGNAL THR_13_DATA_IN :  std_logic_vector(17 downto 0);\r
-       SIGNAL THR_14_DATA_IN :  std_logic_vector(17 downto 0);\r
-       SIGNAL THR_15_DATA_IN :  std_logic_vector(17 downto 0);\r
        SIGNAL PED_ADDR_OUT :  std_logic_vector(6 downto 0);\r
        SIGNAL PED_0_DATA_IN :  std_logic_vector(17 downto 0);\r
-       SIGNAL PED_1_DATA_IN :  std_logic_vector(17 downto 0);\r
-       SIGNAL PED_2_DATA_IN :  std_logic_vector(17 downto 0);\r
-       SIGNAL PED_3_DATA_IN :  std_logic_vector(17 downto 0);\r
-       SIGNAL PED_4_DATA_IN :  std_logic_vector(17 downto 0);\r
-       SIGNAL PED_5_DATA_IN :  std_logic_vector(17 downto 0);\r
-       SIGNAL PED_6_DATA_IN :  std_logic_vector(17 downto 0);\r
-       SIGNAL PED_7_DATA_IN :  std_logic_vector(17 downto 0);\r
-       SIGNAL PED_8_DATA_IN :  std_logic_vector(17 downto 0);\r
-       SIGNAL PED_9_DATA_IN :  std_logic_vector(17 downto 0);\r
-       SIGNAL PED_10_DATA_IN :  std_logic_vector(17 downto 0);\r
-       SIGNAL PED_11_DATA_IN :  std_logic_vector(17 downto 0);\r
-       SIGNAL PED_12_DATA_IN :  std_logic_vector(17 downto 0);\r
-       SIGNAL PED_13_DATA_IN :  std_logic_vector(17 downto 0);\r
-       SIGNAL PED_14_DATA_IN :  std_logic_vector(17 downto 0);\r
-       SIGNAL PED_15_DATA_IN :  std_logic_vector(17 downto 0);\r
+       SIGNAL FIFO_SPACE_REQ_OUT :  std_logic_vector(11 downto 0);\r
        SIGNAL FIFO_START_OUT :  std_logic;\r
-       SIGNAL FIFO_0_DATA_OUT :  std_logic_vector(39 downto 0);\r
+--     SIGNAL FIFO_0_DATA_OUT :  std_logic_vector(39 downto 0);\r
+       SIGNAL ADC_0_STATUS_OUT :  std_logic_vector(25 downto 0);\r
+       SIGNAL ADC_0_DATA_OUT :  std_logic_vector(13 downto 0);\r
        SIGNAL FIFO_1_DATA_OUT :  std_logic_vector(39 downto 0);\r
-       SIGNAL FIFO_2_DATA_OUT :  std_logic_vector(39 downto 0);\r
-       SIGNAL FIFO_3_DATA_OUT :  std_logic_vector(39 downto 0);\r
        SIGNAL FIFO_4_DATA_OUT :  std_logic_vector(39 downto 0);\r
-       SIGNAL FIFO_5_DATA_OUT :  std_logic_vector(39 downto 0);\r
-       SIGNAL FIFO_6_DATA_OUT :  std_logic_vector(39 downto 0);\r
-       SIGNAL FIFO_7_DATA_OUT :  std_logic_vector(39 downto 0);\r
-       SIGNAL FIFO_8_DATA_OUT :  std_logic_vector(39 downto 0);\r
-       SIGNAL FIFO_9_DATA_OUT :  std_logic_vector(39 downto 0);\r
-       SIGNAL FIFO_10_DATA_OUT :  std_logic_vector(39 downto 0);\r
-       SIGNAL FIFO_11_DATA_OUT :  std_logic_vector(39 downto 0);\r
-       SIGNAL FIFO_12_DATA_OUT :  std_logic_vector(39 downto 0);\r
-       SIGNAL FIFO_13_DATA_OUT :  std_logic_vector(39 downto 0);\r
-       SIGNAL FIFO_14_DATA_OUT :  std_logic_vector(39 downto 0);\r
-       SIGNAL FIFO_15_DATA_OUT :  std_logic_vector(39 downto 0);\r
        SIGNAL FIFO_WE_OUT :  std_logic_vector(15 downto 0);\r
        SIGNAL FIFO_DONE_OUT :  std_logic;\r
        SIGNAL DBG_BSM_OUT :  std_logic_vector(7 downto 0);\r
@@ -197,79 +147,82 @@ BEGIN
                EDS_DONE_OUT => EDS_DONE_OUT,\r
                DHDR_DATA_OUT => DHDR_DATA_OUT,\r
                DHDR_LENGTH_OUT => DHDR_LENGTH_OUT,\r
+               DHDR_BUF_FULL_IN => DHDR_BUF_FULL_IN,\r
                DHDR_STORE_OUT => DHDR_STORE_OUT,\r
-               EVT_TYPE_IN => EVT_TYPE_IN,\r
                BUF_ADDR_OUT => BUF_ADDR_OUT,\r
                BUF_DONE_OUT => BUF_DONE_OUT,\r
                BUF_TICK_IN => BUF_TICK_IN,\r
                BUF_START_IN => BUF_START_IN,\r
                BUF_0_DATA_IN => BUF_0_DATA_IN,\r
                BUF_1_DATA_IN => BUF_1_DATA_IN,\r
-               BUF_2_DATA_IN => BUF_2_DATA_IN,\r
-               BUF_3_DATA_IN => BUF_3_DATA_IN,\r
+               BUF_2_DATA_IN => x"20" & x"0ee" & x"0" & b"00" & x"000",\r
+               BUF_3_DATA_IN => x"20" & x"0ee" & x"0" & b"00" & x"000",\r
                BUF_4_DATA_IN => BUF_4_DATA_IN,\r
-               BUF_5_DATA_IN => BUF_5_DATA_IN,\r
-               BUF_6_DATA_IN => BUF_6_DATA_IN,\r
-               BUF_7_DATA_IN => BUF_7_DATA_IN,\r
-               BUF_8_DATA_IN => BUF_8_DATA_IN,\r
-               BUF_9_DATA_IN => BUF_9_DATA_IN,\r
-               BUF_10_DATA_IN => BUF_10_DATA_IN,\r
-               BUF_11_DATA_IN => BUF_11_DATA_IN,\r
-               BUF_12_DATA_IN => BUF_12_DATA_IN,\r
-               BUF_13_DATA_IN => BUF_13_DATA_IN,\r
-               BUF_14_DATA_IN => BUF_14_DATA_IN,\r
-               BUF_15_DATA_IN => BUF_15_DATA_IN,\r
+               BUF_5_DATA_IN => x"20" & x"0ee" & x"0" & b"00" & x"000",\r
+               BUF_6_DATA_IN => x"20" & x"0ee" & x"0" & b"00" & x"000",\r
+               BUF_7_DATA_IN => x"20" & x"0ee" & x"0" & b"00" & x"000",\r
+               BUF_8_DATA_IN => x"20" & x"0ee" & x"0" & b"00" & x"000",\r
+               BUF_9_DATA_IN => x"20" & x"0ee" & x"0" & b"00" & x"000",\r
+               BUF_10_DATA_IN => x"20" & x"0ee" & x"0" & b"00" & x"000",\r
+               BUF_11_DATA_IN => x"20" & x"0ee" & x"0" & b"00" & x"000",\r
+               BUF_12_DATA_IN => x"20" & x"0ee" & x"0" & b"00" & x"000",\r
+               BUF_13_DATA_IN => x"20" & x"0ee" & x"0" & b"00" & x"000",\r
+               BUF_14_DATA_IN => x"20" & x"0ee" & x"0" & b"00" & x"000",\r
+               BUF_15_DATA_IN => x"20" & x"0ee" & x"0" & b"00" & x"000",\r
                PED_ADDR_OUT => PED_ADDR_OUT,\r
                PED_0_DATA_IN => PED_0_DATA_IN,\r
-               PED_1_DATA_IN => PED_1_DATA_IN,\r
-               PED_2_DATA_IN => PED_2_DATA_IN,\r
-               PED_3_DATA_IN => PED_3_DATA_IN,\r
-               PED_4_DATA_IN => PED_4_DATA_IN,\r
-               PED_5_DATA_IN => PED_5_DATA_IN,\r
-               PED_6_DATA_IN => PED_6_DATA_IN,\r
-               PED_7_DATA_IN => PED_7_DATA_IN,\r
-               PED_8_DATA_IN => PED_8_DATA_IN,\r
-               PED_9_DATA_IN => PED_9_DATA_IN,\r
-               PED_10_DATA_IN => PED_10_DATA_IN,\r
-               PED_11_DATA_IN => PED_11_DATA_IN,\r
-               PED_12_DATA_IN => PED_12_DATA_IN,\r
-               PED_13_DATA_IN => PED_13_DATA_IN,\r
-               PED_14_DATA_IN => PED_14_DATA_IN,\r
-               PED_15_DATA_IN => PED_15_DATA_IN,\r
+               PED_1_DATA_IN => b"00" & x"0000",\r
+               PED_2_DATA_IN => b"00" & x"0000",\r
+               PED_3_DATA_IN => b"00" & x"0000",\r
+               PED_4_DATA_IN => b"00" & x"0000",\r
+               PED_5_DATA_IN => b"00" & x"0000",\r
+               PED_6_DATA_IN => b"00" & x"0000",\r
+               PED_7_DATA_IN => b"00" & x"0000",\r
+               PED_8_DATA_IN => b"00" & x"0000",\r
+               PED_9_DATA_IN => b"00" & x"0000",\r
+               PED_10_DATA_IN => b"00" & x"0000",\r
+               PED_11_DATA_IN => b"00" & x"0000",\r
+               PED_12_DATA_IN => b"00" & x"0000",\r
+               PED_13_DATA_IN => b"00" & x"0000",\r
+               PED_14_DATA_IN => b"00" & x"0000",\r
+               PED_15_DATA_IN => b"00" & x"0000",\r
                THR_ADDR_OUT => THR_ADDR_OUT,\r
                THR_0_DATA_IN => THR_0_DATA_IN,\r
                THR_1_DATA_IN => THR_1_DATA_IN,\r
-               THR_2_DATA_IN => THR_2_DATA_IN,\r
-               THR_3_DATA_IN => THR_3_DATA_IN,\r
+               THR_2_DATA_IN => b"00" & x"0000",\r
+               THR_3_DATA_IN => b"00" & x"0000",\r
                THR_4_DATA_IN => THR_4_DATA_IN,\r
-               THR_5_DATA_IN => THR_5_DATA_IN,\r
-               THR_6_DATA_IN => THR_6_DATA_IN,\r
-               THR_7_DATA_IN => THR_7_DATA_IN,\r
-               THR_8_DATA_IN => THR_8_DATA_IN,\r
-               THR_9_DATA_IN => THR_9_DATA_IN,\r
-               THR_10_DATA_IN => THR_10_DATA_IN,\r
-               THR_11_DATA_IN => THR_11_DATA_IN,\r
-               THR_12_DATA_IN => THR_12_DATA_IN,\r
-               THR_13_DATA_IN => THR_13_DATA_IN,\r
-               THR_14_DATA_IN => THR_14_DATA_IN,\r
-               THR_15_DATA_IN => THR_15_DATA_IN,\r
+               THR_5_DATA_IN => b"00" & x"0000",\r
+               THR_6_DATA_IN => b"00" & x"0000",\r
+               THR_7_DATA_IN => b"00" & x"0000",\r
+               THR_8_DATA_IN => b"00" & x"0000",\r
+               THR_9_DATA_IN => b"00" & x"0000",\r
+               THR_10_DATA_IN => b"00" & x"0000",\r
+               THR_11_DATA_IN => b"00" & x"0000",\r
+               THR_12_DATA_IN => b"00" & x"0000",\r
+               THR_13_DATA_IN => b"00" & x"0000",\r
+               THR_14_DATA_IN => b"00" & x"0000",\r
+               THR_15_DATA_IN => b"00" & x"0000",\r
+               FIFO_SPACE_REQ_OUT => FIFO_SPACE_REQ_OUT,\r
                FIFO_START_OUT => FIFO_START_OUT,\r
-               FIFO_0_DATA_OUT => FIFO_0_DATA_OUT,\r
+--             FIFO_0_DATA_OUT => FIFO_0_DATA_OUT,\r
+               FIFO_0_DATA_OUT(39 downto 14) => ADC_0_STATUS_OUT,\r
+               FIFO_0_DATA_OUT(13 downto 0) => ADC_0_DATA_OUT,\r
                FIFO_1_DATA_OUT => FIFO_1_DATA_OUT,\r
-               FIFO_2_DATA_OUT => FIFO_2_DATA_OUT,\r
-               FIFO_3_DATA_OUT => FIFO_3_DATA_OUT,\r
-               FIFO_4_DATA_OUT => FIFO_4_DATA_OUT,\r
-               FIFO_5_DATA_OUT => FIFO_5_DATA_OUT,\r
-               FIFO_6_DATA_OUT => FIFO_6_DATA_OUT,\r
-               FIFO_7_DATA_OUT => FIFO_7_DATA_OUT,\r
-               FIFO_8_DATA_OUT => FIFO_8_DATA_OUT,\r
-               FIFO_9_DATA_OUT => FIFO_9_DATA_OUT,\r
-               FIFO_10_DATA_OUT => FIFO_10_DATA_OUT,\r
-               FIFO_11_DATA_OUT => FIFO_11_DATA_OUT,\r
-               FIFO_12_DATA_OUT => FIFO_12_DATA_OUT,\r
-               FIFO_13_DATA_OUT => FIFO_13_DATA_OUT,\r
-               FIFO_14_DATA_OUT => FIFO_14_DATA_OUT,\r
-               FIFO_15_DATA_OUT => FIFO_15_DATA_OUT,\r
+               FIFO_2_DATA_OUT => open,\r
+               FIFO_3_DATA_OUT => open,\r
+               FIFO_4_DATA_OUT => open,\r
+               FIFO_5_DATA_OUT => open,\r
+               FIFO_6_DATA_OUT => open,\r
+               FIFO_7_DATA_OUT => open,\r
+               FIFO_8_DATA_OUT => open,\r
+               FIFO_9_DATA_OUT => open,\r
+               FIFO_10_DATA_OUT => open,\r
+               FIFO_11_DATA_OUT => open,\r
+               FIFO_12_DATA_OUT => open,\r
+               FIFO_13_DATA_OUT => open,\r
+               FIFO_14_DATA_OUT => open,\r
+               FIFO_15_DATA_OUT => open,\r
                FIFO_WE_OUT => FIFO_WE_OUT,\r
                FIFO_DONE_OUT => FIFO_DONE_OUT,\r
                DBG_BSM_OUT => DBG_BSM_OUT,\r
@@ -298,96 +251,28 @@ TESTBENCH: process
 begin\r
        -- Setup signal\r
        reset_in <= '0';\r
+       dhdr_buf_full_in <= '0';\r
        eds_data_in <= (others => '0'); \r
        eds_avail_in <= '0';\r
-       evt_type_in <= "000";\r
        buf_start_in <= (others => '0'); \r
        buf_tick_in <= (others => '0');\r
        -- Buffer level information: 7 -> good, 6 -> broken, 5 -> ignore, rest LEVEL\r
        buf_0_data_in(37 downto 30)  <= x"80"; -- good\r
        buf_1_data_in(37 downto 30)  <= x"20"; -- ignore\r
-       buf_2_data_in(37 downto 30)  <= x"20"; -- ignore\r
-       buf_3_data_in(37 downto 30)  <= x"20"; -- ignore\r
        buf_4_data_in(37 downto 30)  <= x"40"; -- broken!!!\r
-       buf_5_data_in(37 downto 30)  <= x"20"; -- ignore\r
-       buf_6_data_in(37 downto 30)  <= x"20"; -- ignore\r
-       buf_7_data_in(37 downto 30)  <= x"20"; -- ignore\r
-       buf_8_data_in(37 downto 30)  <= x"20"; -- ignore\r
-       buf_9_data_in(37 downto 30)  <= x"20"; -- ignore\r
-       buf_10_data_in(37 downto 30) <= x"20"; -- ignore\r
-       buf_11_data_in(37 downto 30) <= x"20"; -- ignore\r
-       buf_12_data_in(37 downto 30) <= x"20"; -- ignore\r
-       buf_13_data_in(37 downto 30) <= x"20"; -- ignore\r
-       buf_14_data_in(37 downto 30) <= x"20"; -- ignore\r
-       buf_15_data_in(37 downto 30) <= x"20"; -- ignore\r
        -- Buffer frame information: 8 -> APV error, [7:0] row\r
        buf_0_data_in(29 downto 18)  <= x"011"; -- row 0x11, no error\r
        buf_1_data_in(29 downto 18)  <= x"0ee"; --\r
-       buf_2_data_in(29 downto 18)  <= x"0ee"; --\r
-       buf_3_data_in(29 downto 18)  <= x"0ee"; --\r
        buf_4_data_in(29 downto 18)  <= x"0aa"; --\r
-       buf_5_data_in(29 downto 18)  <= x"0ee"; --\r
-       buf_6_data_in(29 downto 18)  <= x"0ee"; --\r
-       buf_7_data_in(29 downto 18)  <= x"0ee"; --\r
-       buf_8_data_in(29 downto 18)  <= x"0ee"; --\r
-       buf_9_data_in(29 downto 18)  <= x"0ee"; --\r
-       buf_10_data_in(29 downto 18) <= x"0ee"; --\r
-       buf_11_data_in(29 downto 18) <= x"0ee"; --\r
-       buf_12_data_in(29 downto 18) <= x"0ee"; --\r
-       buf_13_data_in(29 downto 18) <= x"0ee"; --\r
-       buf_14_data_in(29 downto 18) <= x"0ee"; --\r
-       buf_15_data_in(29 downto 18) <= x"0ee"; --\r
        -- Buffer data\r
        buf_0_data_in(17 downto 14)  <= x"0";\r
        buf_1_data_in(17 downto 14)  <= x"0"; buf_1_data_in(13 downto 0)  <= "00000000000000";\r
-       buf_2_data_in(17 downto 14)  <= x"0"; buf_2_data_in(13 downto 0)  <= "00000000000000";\r
-       buf_3_data_in(17 downto 14)  <= x"0"; buf_3_data_in(13 downto 0)  <= "00000000000000";\r
        buf_4_data_in(17 downto 14)  <= x"0"; buf_4_data_in(13 downto 0)  <= "00000000000000";\r
-       buf_5_data_in(17 downto 14)  <= x"0"; buf_5_data_in(13 downto 0)  <= "00000000000000";\r
-       buf_6_data_in(17 downto 14)  <= x"0"; buf_6_data_in(13 downto 0)  <= "00000000000000";\r
-       buf_7_data_in(17 downto 14)  <= x"0"; buf_7_data_in(13 downto 0)  <= "00000000000000";\r
-       buf_8_data_in(17 downto 14)  <= x"0"; buf_8_data_in(13 downto 0)  <= "00000000000000";\r
-       buf_9_data_in(17 downto 14)  <= x"0"; buf_9_data_in(13 downto 0)  <= "00000000000000";\r
-       buf_10_data_in(17 downto 14) <= x"0"; buf_10_data_in(13 downto 0) <= "00000000000000";\r
-       buf_11_data_in(17 downto 14) <= x"0"; buf_11_data_in(13 downto 0) <= "00000000000000";\r
-       buf_12_data_in(17 downto 14) <= x"0"; buf_12_data_in(13 downto 0) <= "00000000000000";\r
-       buf_13_data_in(17 downto 14) <= x"0"; buf_13_data_in(13 downto 0) <= "00000000000000";\r
-       buf_14_data_in(17 downto 14) <= x"0"; buf_14_data_in(13 downto 0) <= "00000000000000";\r
-       buf_15_data_in(17 downto 14) <= x"0"; buf_15_data_in(13 downto 0) <= "00000000000000";\r
        -- Pedestal data\r
---     ped_0_data_in  <= "00" & x"0000";\r
-       ped_1_data_in  <= "00" & x"0000";\r
-       ped_2_data_in  <= "00" & x"0000";\r
-       ped_3_data_in  <= "00" & x"0000";\r
-       ped_4_data_in  <= "00" & x"0000";\r
-       ped_5_data_in  <= "00" & x"0000";\r
-       ped_6_data_in  <= "00" & x"0000";\r
-       ped_7_data_in  <= "00" & x"0000";\r
-       ped_8_data_in  <= "00" & x"0000";\r
-       ped_9_data_in  <= "00" & x"0000";\r
-       ped_10_data_in <= "00" & x"0000";\r
-       ped_11_data_in <= "00" & x"0000";\r
-       ped_12_data_in <= "00" & x"0000";\r
-       ped_13_data_in <= "00" & x"0000";\r
-       ped_14_data_in <= "00" & x"0000";\r
-       ped_15_data_in <= "00" & x"0000";\r
        -- Threshold data\r
 --     thr_0_data_in  <= "00" & x"0000";\r
        thr_1_data_in  <= "00" & x"0000";\r
-       thr_2_data_in  <= "00" & x"0000";\r
-       thr_3_data_in  <= "00" & x"0000";\r
        thr_4_data_in  <= "00" & x"0000";\r
-       thr_5_data_in  <= "00" & x"0000";\r
-       thr_6_data_in  <= "00" & x"0000";\r
-       thr_7_data_in  <= "00" & x"0000";\r
-       thr_8_data_in  <= "00" & x"0000";\r
-       thr_9_data_in  <= "00" & x"0000";\r
-       thr_10_data_in <= "00" & x"0000";\r
-       thr_11_data_in <= "00" & x"0000";\r
-       thr_12_data_in <= "00" & x"0000";\r
-       thr_13_data_in <= "00" & x"0000";\r
-       thr_14_data_in <= "00" & x"0000";\r
-       thr_15_data_in <= "00" & x"0000";\r
 \r
        -- Reset\r
        wait until rising_edge(clk_in);\r
@@ -398,17 +283,14 @@ begin
        reset_in <= '0';\r
        wait until rising_edge(clk_in);\r
 \r
-       ----------------------------------------------------------------------------------------\r
-       ----------------------------------------------------------------------------------------\r
-       ----------------------------------------------------------------------------------------\r
-       ----------------------------------------------------------------------------------------\r
 \r
+\r
+       -- Tests may start now\r
        ----------------------------------------------------------------\r
        -- "000" -> RAW128\r
        ----------------------------------------------------------------\r
        wait until rising_edge(clk_in);\r
        reset_in <= '1';\r
-       evt_type_in <= "000";\r
        wait until rising_edge(clk_in);\r
        reset_in <= '0';\r
        wait until rising_edge(clk_in);\r
@@ -416,7 +298,7 @@ begin
        wait until rising_edge(clk_in);\r
 \r
        -- EDS comes in\r
-       eds_data_in <= x"01abcdee01";\r
+       eds_data_in <= x"01abcdee00";\r
        wait until rising_edge(clk_in);\r
        eds_avail_in <= '1';\r
        wait until rising_edge(clk_in);\r
@@ -432,132 +314,17 @@ begin
        wait until rising_edge(clk_in);\r
        wait until rising_edge(clk_in);\r
        buf_0_data_in(37 downto 30) <= x"81";   \r
-       wait until rising_edge(clk_in);\r
-       wait until rising_edge(clk_in);\r
-       wait until rising_edge(clk_in);\r
-       wait until rising_edge(clk_in);\r
-       wait until rising_edge(clk_in);\r
-       buf_0_data_in(37 downto 30) <= x"82";   \r
-       wait until rising_edge(clk_in);\r
-       wait until rising_edge(clk_in);\r
-       wait until rising_edge(clk_in);\r
-       wait until rising_edge(clk_in);\r
-       wait until rising_edge(clk_in);\r
-       buf_0_data_in(37 downto 30) <= x"83";   \r
        \r
        -- wait for first buffer        \r
        wait until rising_edge(buf_done_out);\r
-       wait for 300 ns;\r
+       wait for 600 ns;\r
        wait until rising_edge(clk_in);\r
 \r
-\r
        ----------------------------------------------------------------\r
        -- "001" -> PED128\r
        ----------------------------------------------------------------\r
        wait until rising_edge(clk_in);\r
        reset_in <= '1';\r
-       evt_type_in <= "001";\r
-       wait until rising_edge(clk_in);\r
-       reset_in <= '0';\r
-       wait until rising_edge(clk_in);\r
-       wait for 55 ns;\r
-       wait until rising_edge(clk_in);\r
-\r
-       -- EDS comes in\r
-       eds_data_in <= x"01abcdee11";\r
-       wait until rising_edge(clk_in);\r
-       eds_avail_in <= '1';\r
-       wait until rising_edge(clk_in);\r
-       wait until rising_edge(clk_in);\r
-       wait until rising_edge(clk_in);\r
-       eds_avail_in <= '0';    \r
-       wait until rising_edge(clk_in);\r
-       \r
-       -- Buffer 0 becomes ready\r
-       wait until rising_edge(clk_in);\r
-       wait until rising_edge(clk_in);\r
-       wait until rising_edge(clk_in);\r
-       wait until rising_edge(clk_in);\r
-       wait until rising_edge(clk_in);\r
-       buf_0_data_in(37 downto 30) <= x"81";   \r
-       wait until rising_edge(clk_in);\r
-       wait until rising_edge(clk_in);\r
-       wait until rising_edge(clk_in);\r
-       wait until rising_edge(clk_in);\r
-       wait until rising_edge(clk_in);\r
-       buf_0_data_in(37 downto 30) <= x"82";   \r
-       wait until rising_edge(clk_in);\r
-       wait until rising_edge(clk_in);\r
-       wait until rising_edge(clk_in);\r
-       wait until rising_edge(clk_in);\r
-       wait until rising_edge(clk_in);\r
-       buf_0_data_in(37 downto 30) <= x"83";   \r
-       \r
-       -- wait for first buffer        \r
-       wait until rising_edge(buf_done_out);\r
-       wait for 300 ns;\r
-       wait until rising_edge(clk_in);\r
-\r
-       ----------------------------------------------------------------\r
-       -- "010" -> PED128THR\r
-       ----------------------------------------------------------------\r
-       wait until rising_edge(clk_in);\r
-       reset_in <= '1';\r
-       evt_type_in <= "010";\r
-       wait until rising_edge(clk_in);\r
-       reset_in <= '0';\r
-       wait until rising_edge(clk_in);\r
-       wait for 55 ns;\r
-       wait until rising_edge(clk_in);\r
-\r
-       -- EDS comes in\r
-       eds_data_in <= x"01abcdee21";\r
-       wait until rising_edge(clk_in);\r
-       eds_avail_in <= '1';\r
-       wait until rising_edge(clk_in);\r
-       wait until rising_edge(clk_in);\r
-       wait until rising_edge(clk_in);\r
-       eds_avail_in <= '0';    \r
-       wait until rising_edge(clk_in);\r
-       \r
-       -- Buffer 0 becomes ready\r
-       wait until rising_edge(clk_in);\r
-       wait until rising_edge(clk_in);\r
-       wait until rising_edge(clk_in);\r
-       wait until rising_edge(clk_in);\r
-       wait until rising_edge(clk_in);\r
-       buf_0_data_in(37 downto 30) <= x"81";   \r
-       wait until rising_edge(clk_in);\r
-       wait until rising_edge(clk_in);\r
-       wait until rising_edge(clk_in);\r
-       wait until rising_edge(clk_in);\r
-       wait until rising_edge(clk_in);\r
-       buf_0_data_in(37 downto 30) <= x"82";   \r
-       wait until rising_edge(clk_in);\r
-       wait until rising_edge(clk_in);\r
-       wait until rising_edge(clk_in);\r
-       wait until rising_edge(clk_in);\r
-       wait until rising_edge(clk_in);\r
-       buf_0_data_in(37 downto 30) <= x"83";   \r
-       \r
-       -- wait for first buffer        \r
-       wait until rising_edge(buf_done_out);\r
-       wait for 300 ns;\r
-       wait until rising_edge(clk_in);\r
-\r
-       ----------------------------------------------------------------------------------------\r
-       ----------------------------------------------------------------------------------------\r
-       ----------------------------------------------------------------------------------------\r
-       ----------------------------------------------------------------------------------------\r
-       wait;   \r
-\r
-       -- Tests may start now\r
-       ----------------------------------------------------------------\r
-       -- "000" -> RAW128\r
-       ----------------------------------------------------------------\r
-       wait until rising_edge(clk_in);\r
-       reset_in <= '1';\r
-       evt_type_in <= "000";\r
        wait until rising_edge(clk_in);\r
        reset_in <= '0';\r
        wait until rising_edge(clk_in);\r
@@ -584,15 +351,14 @@ begin
        \r
        -- wait for first buffer        \r
        wait until rising_edge(buf_done_out);\r
-       wait for 300 ns;\r
+       wait for 600 ns;\r
        wait until rising_edge(clk_in);\r
 \r
        ----------------------------------------------------------------\r
-       -- "001" -> PED128\r
+       -- "010" -> PED128THR\r
        ----------------------------------------------------------------\r
        wait until rising_edge(clk_in);\r
        reset_in <= '1';\r
-       evt_type_in <= "001";\r
        wait until rising_edge(clk_in);\r
        reset_in <= '0';\r
        wait until rising_edge(clk_in);\r
@@ -600,7 +366,7 @@ begin
        wait until rising_edge(clk_in);\r
 \r
        -- EDS comes in\r
-       eds_data_in <= x"01abcdee01";\r
+       eds_data_in <= x"01abcdee02";\r
        wait until rising_edge(clk_in);\r
        eds_avail_in <= '1';\r
        wait until rising_edge(clk_in);\r
@@ -619,15 +385,14 @@ begin
        \r
        -- wait for first buffer        \r
        wait until rising_edge(buf_done_out);\r
-       wait for 300 ns;\r
+       wait for 600 ns;\r
        wait until rising_edge(clk_in);\r
 \r
        ----------------------------------------------------------------\r
-       -- "010" -> PED128THR\r
+       -- "011" -> RAW64\r
        ----------------------------------------------------------------\r
        wait until rising_edge(clk_in);\r
        reset_in <= '1';\r
-       evt_type_in <= "010";\r
        wait until rising_edge(clk_in);\r
        reset_in <= '0';\r
        wait until rising_edge(clk_in);\r
@@ -635,7 +400,7 @@ begin
        wait until rising_edge(clk_in);\r
 \r
        -- EDS comes in\r
-       eds_data_in <= x"01abcdee01";\r
+       eds_data_in <= x"01abcdee03";\r
        wait until rising_edge(clk_in);\r
        eds_avail_in <= '1';\r
        wait until rising_edge(clk_in);\r
@@ -654,7 +419,7 @@ begin
        \r
        -- wait for first buffer        \r
        wait until rising_edge(buf_done_out);\r
-       wait for 300 ns;\r
+       wait for 600 ns;\r
        wait until rising_edge(clk_in);\r
 \r
        ----------------------------------------------------------------\r
@@ -662,7 +427,6 @@ begin
        ----------------------------------------------------------------\r
        wait until rising_edge(clk_in);\r
        reset_in <= '1';\r
-       evt_type_in <= "100";\r
        wait until rising_edge(clk_in);\r
        reset_in <= '0';\r
        wait until rising_edge(clk_in);\r
@@ -670,7 +434,7 @@ begin
        wait until rising_edge(clk_in);\r
 \r
        -- EDS comes in\r
-       eds_data_in <= x"01abcdee01";\r
+       eds_data_in <= x"01abcdee04";\r
        wait until rising_edge(clk_in);\r
        eds_avail_in <= '1';\r
        wait until rising_edge(clk_in);\r
@@ -689,7 +453,7 @@ begin
        \r
        -- wait for first buffer        \r
        wait until rising_edge(buf_done_out);\r
-       wait for 300 ns;\r
+       wait for 600 ns;\r
        wait until rising_edge(clk_in);\r
 \r
        ----------------------------------------------------------------\r
@@ -697,7 +461,6 @@ begin
        ----------------------------------------------------------------\r
        wait until rising_edge(clk_in);\r
        reset_in <= '1';\r
-       evt_type_in <= "101";\r
        wait until rising_edge(clk_in);\r
        reset_in <= '0';\r
        wait until rising_edge(clk_in);\r
@@ -705,7 +468,7 @@ begin
        wait until rising_edge(clk_in);\r
 \r
        -- EDS comes in\r
-       eds_data_in <= x"01abcdee01";\r
+       eds_data_in <= x"01abcdee05";\r
        wait until rising_edge(clk_in);\r
        eds_avail_in <= '1';\r
        wait until rising_edge(clk_in);\r
@@ -724,7 +487,7 @@ begin
        \r
        -- wait for first buffer        \r
        wait until rising_edge(buf_done_out);\r
-       wait for 300 ns;\r
+       wait for 600 ns;\r
        wait until rising_edge(clk_in);\r
 \r
        ----------------------------------------------------------------\r
@@ -732,7 +495,6 @@ begin
        ----------------------------------------------------------------\r
        wait until rising_edge(clk_in);\r
        reset_in <= '1';\r
-       evt_type_in <= "110";\r
        wait until rising_edge(clk_in);\r
        reset_in <= '0';\r
        wait until rising_edge(clk_in);\r
@@ -740,7 +502,7 @@ begin
        wait until rising_edge(clk_in);\r
 \r
        -- EDS comes in\r
-       eds_data_in <= x"01abcdee01";\r
+       eds_data_in <= x"01abcdee06";\r
        wait until rising_edge(clk_in);\r
        eds_avail_in <= '1';\r
        wait until rising_edge(clk_in);\r
@@ -759,7 +521,7 @@ begin
        \r
        -- wait for first buffer        \r
        wait until rising_edge(buf_done_out);\r
-       wait for 300 ns;\r
+       wait for 600 ns;\r
        wait until rising_edge(clk_in);\r
 \r
        ----------------------------------------------------------------\r
@@ -767,7 +529,6 @@ begin
        ----------------------------------------------------------------\r
        wait until rising_edge(clk_in);\r
        reset_in <= '1';\r
-       evt_type_in <= "111";\r
        wait until rising_edge(clk_in);\r
        reset_in <= '0';\r
        wait until rising_edge(clk_in);\r
@@ -775,7 +536,7 @@ begin
        wait until rising_edge(clk_in);\r
 \r
        -- EDS comes in\r
-       eds_data_in <= x"01abcdee01";\r
+       eds_data_in <= x"01abcdee07";\r
        wait until rising_edge(clk_in);\r
        eds_avail_in <= '1';\r
        wait until rising_edge(clk_in);\r
@@ -794,16 +555,12 @@ begin
        \r
        -- wait for first buffer        \r
        wait until rising_edge(buf_done_out);\r
-       wait for 300 ns;\r
+       wait for 600 ns;\r
        wait until rising_edge(clk_in);\r
 \r
-\r
-\r
-\r
-\r
-       \r
        -- stay a while, stay forever!\r
        wait;           \r
+\r
 end process TESTBENCH;         \r
 \r
 -- Data faker for "APV 0"...\r
@@ -1100,7 +857,8 @@ BUF_0_THR_PROC: process( clk_in )
 begin\r
        if( rising_edge(clk_in) ) then\r
                case thr_addr is\r
-                       when "0000000"  => thr_0_data_in <= "00" & x"001e";\r
+--                     when "0000000"  => thr_0_data_in <= "00" & x"001e";\r
+                       when "0000000"  => thr_0_data_in <= "00" & x"ffff";\r
                        when "0000001"  => thr_0_data_in <= "00" & x"100f"; \r
                        when "0000010"  => thr_0_data_in <= "00" & x"201e"; \r
                        when "0000011"  => thr_0_data_in <= "00" & x"300f"; \r
index 3250152a336e23c38d14350b94157268e51b83da..2a8ab37dacf59f82b296bcf98bf7b3e649e69d31 100644 (file)
@@ -10,10 +10,10 @@ ARCHITECTURE behavior OF testbench IS
        COMPONENT real_trg_handler\r
        PORT(\r
                CLK_IN : IN std_logic;\r
-               CLEAR_IN : IN std_logic;\r
                RESET_IN : IN std_logic;\r
                TIME_TRG_IN : IN std_logic_vector(3 downto 0);\r
                TRB_TRG_IN : IN std_logic_vector(3 downto 0);\r
+               TRG_SETUP_IN : IN std_logic_vector(7 downto 0);\r
                APV_TRGDONE_IN : IN std_logic;\r
                TRG_3_TODO_IN : IN std_logic_vector(3 downto 0);\r
                TRG_2_TODO_IN : IN std_logic_vector(3 downto 0);\r
@@ -22,9 +22,11 @@ ARCHITECTURE behavior OF testbench IS
                TRB_TTAG_IN : IN std_logic_vector(15 downto 0);\r
                TRB_TRND_IN : IN std_logic_vector(7 downto 0);\r
                TRB_TTYPE_IN : IN std_logic_vector(3 downto 0);\r
+               TRB_TINFO_IN : IN std_logic_vector(23 downto 0);\r
                TRB_TRGRCVD_IN : IN std_logic;\r
                BUSY_RELEASE_IN : IN std_logic;          \r
-               TRB_MISMATCH_OUT : OUT std_logic;\r
+               LVL1_COUNTER_IN : IN std_logic_vector(15 downto 0);\r
+               LVL1_LD_COUNTER_IN : IN std_logic;\r
                LVL1_COUNTER_OUT : OUT std_logic_vector(15 downto 0);\r
                APV_TRGSEL_OUT : OUT std_logic_vector(3 downto 0);\r
                APV_TRGSTART_OUT : OUT std_logic;\r
@@ -34,15 +36,15 @@ ARCHITECTURE behavior OF testbench IS
                EDS_READY_OUT : OUT std_logic;\r
                DBG_FRMCTR_OUT : OUT std_logic_vector(3 downto 0);\r
                BSM_OUT : OUT std_logic_vector(7 downto 0);\r
-               DEBUG_OUT : OUT std_logic_vector(15 downto 0)\r
+               DEBUG_OUT : OUT std_logic_vector(63 downto 0)\r
                );\r
        END COMPONENT;\r
 \r
        SIGNAL CLK_IN :  std_logic;\r
-       SIGNAL CLEAR_IN :  std_logic;\r
        SIGNAL RESET_IN :  std_logic;\r
        SIGNAL TIME_TRG_IN :  std_logic_vector(3 downto 0);\r
        SIGNAL TRB_TRG_IN :  std_logic_vector(3 downto 0);\r
+       SIGNAL TRG_SETUP_IN :  std_logic_vector(7 downto 0);\r
        SIGNAL APV_TRGDONE_IN :  std_logic;\r
        SIGNAL TRG_3_TODO_IN :  std_logic_vector(3 downto 0);\r
        SIGNAL TRG_2_TODO_IN :  std_logic_vector(3 downto 0);\r
@@ -51,8 +53,10 @@ ARCHITECTURE behavior OF testbench IS
        SIGNAL TRB_TTAG_IN :  std_logic_vector(15 downto 0);\r
        SIGNAL TRB_TRND_IN :  std_logic_vector(7 downto 0);\r
        SIGNAL TRB_TTYPE_IN :  std_logic_vector(3 downto 0);\r
+       SIGNAL TRB_TINFO_IN :  std_logic_vector(23 downto 0);\r
        SIGNAL TRB_TRGRCVD_IN :  std_logic;\r
-       SIGNAL TRB_MISMATCH_OUT :  std_logic;\r
+       SIGNAL LVL1_COUNTER_IN :  std_logic_vector(15 downto 0);\r
+       SIGNAL LVL1_LD_COUNTER_IN :  std_logic;\r
        SIGNAL LVL1_COUNTER_OUT :  std_logic_vector(15 downto 0);\r
        SIGNAL BUSY_RELEASE_IN :  std_logic;\r
        SIGNAL APV_TRGSEL_OUT :  std_logic_vector(3 downto 0);\r
@@ -63,17 +67,17 @@ ARCHITECTURE behavior OF testbench IS
        SIGNAL EDS_READY_OUT :  std_logic;\r
        SIGNAL DBG_FRMCTR_OUT :  std_logic_vector(3 downto 0);\r
        SIGNAL BSM_OUT :  std_logic_vector(7 downto 0);\r
-       SIGNAL DEBUG_OUT :  std_logic_vector(15 downto 0);\r
+       SIGNAL DEBUG_OUT :  std_logic_vector(63 downto 0);\r
 \r
 BEGIN\r
 \r
 -- Please check and add your generic clause manually\r
        uut: real_trg_handler PORT MAP(\r
                CLK_IN => CLK_IN,\r
-               CLEAR_IN => CLEAR_IN,\r
                RESET_IN => RESET_IN,\r
                TIME_TRG_IN => TIME_TRG_IN,\r
                TRB_TRG_IN => TRB_TRG_IN,\r
+               TRG_SETUP_IN => TRG_SETUP_IN,\r
                APV_TRGDONE_IN => APV_TRGDONE_IN,\r
                TRG_3_TODO_IN => TRG_3_TODO_IN,\r
                TRG_2_TODO_IN => TRG_2_TODO_IN,\r
@@ -83,7 +87,9 @@ BEGIN
                TRB_TRND_IN => TRB_TRND_IN,\r
                TRB_TTYPE_IN => TRB_TTYPE_IN,\r
                TRB_TRGRCVD_IN => TRB_TRGRCVD_IN,\r
-               TRB_MISMATCH_OUT => TRB_MISMATCH_OUT,\r
+               TRB_TINFO_IN => TRB_TINFO_IN,\r
+               LVL1_COUNTER_IN => LVL1_COUNTER_IN,\r
+               LVL1_LD_COUNTER_IN => LVL1_LD_COUNTER_IN,\r
                LVL1_COUNTER_OUT => LVL1_COUNTER_OUT,\r
                BUSY_RELEASE_IN => BUSY_RELEASE_IN,\r
                APV_TRGSEL_OUT => APV_TRGSEL_OUT,\r
@@ -106,23 +112,24 @@ end process THE_CLOCK_GEN;
 THE_TEST_BENCH: process\r
 begin\r
        -- Setup signals\r
-       clear_in <= '0'; \r
        reset_in <= '0';\r
        time_trg_in <= x"0"; \r
        trb_trg_in <= x"0";\r
+       trg_setup_in <= x"00";\r
        apv_trgdone_in <= '0';\r
        trg_3_todo_in <= x"0";\r
        trg_2_todo_in <= x"3";\r
        trg_1_todo_in <= x"2";\r
        trg_0_todo_in <= x"1";\r
-       trb_ttag_in <= x"dead";\r
-       trb_trnd_in <= x"fc";\r
-       trb_ttype_in <= x"1";\r
+       trb_ttag_in <= x"0000";\r
+       trb_trnd_in <= x"00";\r
+       trb_ttype_in <= x"0";\r
+       trb_tinfo_in <= x"00_00_00";\r
        trb_trgrcvd_in <= '0';\r
        busy_release_in <= '0';\r
+       lvl1_counter_in <= x"affe";\r
+       lvl1_ld_counter_in <= '0';\r
        -- Reset all\r
-       clear_in <= '1'; wait for 50 ns;\r
-       clear_in <= '0'; wait for 50 ns;\r
        wait until rising_edge(clk_in);\r
        wait until rising_edge(clk_in);\r
        reset_in <= '1';\r
@@ -132,10 +139,79 @@ begin
        wait until rising_edge(clk_in);\r
        -- Tests may start here\r
 \r
+       -- Load the local counter with TRBnet value\r
+       wait until rising_edge(clk_in);\r
+       lvl1_ld_counter_in <= '1';\r
+       wait until rising_edge(clk_in);\r
+       lvl1_ld_counter_in <= '0';\r
+       wait until rising_edge(clk_in);\r
+\r
+       wait for 200 ns;\r
+\r
+       -- Check missing timing trigger\r
+       wait until rising_edge(clk_in);\r
+       trb_ttag_in <= x"affe";\r
+       trb_trnd_in <= x"a0";\r
+       trb_ttype_in <= x"1";\r
+       trb_tinfo_in <= x"ff_00_00";\r
+       wait until rising_edge(clk_in);\r
+       trb_trgrcvd_in <= '1';\r
        wait until rising_edge(clk_in);\r
+       \r
+       wait until rising_edge(eds_we_out);\r
+\r
+       wait until rising_edge(clk_in);\r
+       wait until rising_edge(clk_in);\r
+       wait until rising_edge(clk_in);\r
+       wait until rising_edge(clk_in);\r
+       busy_release_in <= '1';\r
+       \r
+       wait until rising_edge(eds_ready_out);\r
+       wait until rising_edge(clk_in);\r
+       wait until rising_edge(clk_in);\r
+       trb_trgrcvd_in <= '0';\r
+       busy_release_in <= '0';\r
        wait until rising_edge(clk_in);\r
+       trb_ttag_in <= x"0000";\r
+       trb_trnd_in <= x"00";\r
+       trb_ttype_in <= x"0";\r
+       trb_tinfo_in <= x"00_00_00";    \r
        wait until rising_edge(clk_in);\r
 \r
+       wait for 400 ns;\r
+\r
+       -- Check timingtriggerless trigger\r
+       wait until rising_edge(clk_in);\r
+       trb_ttag_in <= x"afff";\r
+       trb_trnd_in <= x"c7";\r
+       trb_ttype_in <= x"9";\r
+       trb_tinfo_in <= x"ff_00_80";\r
+       wait until rising_edge(clk_in);\r
+       trb_trgrcvd_in <= '1';\r
+       wait until rising_edge(clk_in);\r
+       \r
+       wait until rising_edge(eds_we_out);\r
+\r
+       wait until rising_edge(clk_in);\r
+       wait until rising_edge(clk_in);\r
+       wait until rising_edge(clk_in);\r
+       wait until rising_edge(clk_in);\r
+       busy_release_in <= '1';\r
+       \r
+       wait until rising_edge(eds_ready_out);\r
+       wait until rising_edge(clk_in);\r
+       wait until rising_edge(clk_in);\r
+       trb_trgrcvd_in <= '0';\r
+       busy_release_in <= '0';\r
+       wait until rising_edge(clk_in);\r
+       trb_ttag_in <= x"0000";\r
+       trb_trnd_in <= x"00";\r
+       trb_ttype_in <= x"0";\r
+       trb_tinfo_in <= x"00_00_00";    \r
+       wait until rising_edge(clk_in);\r
+       \r
+       \r
+       wait;\r
 \r
        -- First sync trigger\r
        wait until rising_edge(clk_in);\r
@@ -235,6 +311,8 @@ begin
        wait until rising_edge(clk_in);\r
 \r
 \r
+\r
+\r
        -- Stay a while, stay forever.\r
        wait;\r
 \r
index 45d398a7d9a2cab9db5ac5313cd4fd12bcfee325..00a8ada7befd86a9f713f8d8c05f753f7d810a10 100644 (file)
@@ -8,7 +8,7 @@ use ieee.numeric_std.all;
 
 package version is
     
-    constant VERSION_NUMBER_TIME  : std_logic_vector(31 downto 0)  := CONV_STD_LOGIC_VECTOR(1264600226,32);
+    constant VERSION_NUMBER_TIME  : std_logic_vector(31 downto 0)  := CONV_STD_LOGIC_VECTOR(1272371189,32);
 
 end package version;