]> jspc29.x-matter.uni-frankfurt.de Git - adcm.git/commitdiff
update
authorLudwig Maier <lmaier@brett.e12.ph.tum.de>
Fri, 28 Aug 2015 14:04:24 +0000 (16:04 +0200)
committerLudwig Maier <lmaier@brett.e12.ph.tum.de>
Fri, 28 Aug 2015 14:04:24 +0000 (16:04 +0200)
386 files changed:
0x4c168bfe/adcmv3.lpf [changed mode: 0644->0755]
Makefile
adcmv3.lpf
adcmv3.p2t [new file with mode: 0644]
adcmv3.prj [changed mode: 0644->0755]
adcmv3_constraints.lpf [moved from constraints_adcmv3.lpf with 100% similarity, mode: 0755]
cleanup_workdir.sh [deleted file]
compile.pl [new file with mode: 0755]
constraints_adcmv3_BACK.lpf [changed mode: 0644->0755]
debug_pin.txt [changed mode: 0644->0755]
design/adc_apv_map_mem.lpc [moved from cores/adc_apv_map_mem.lpc with 100% similarity]
design/adc_apv_map_mem.srp [moved from cores/adc_apv_map_mem.srp with 100% similarity]
design/adc_apv_map_mem.vhd [moved from cores/adc_apv_map_mem.vhd with 100% similarity]
design/adc_apv_map_mem_generate.log [moved from cores/adc_apv_map_mem_generate.log with 100% similarity]
design/adc_apv_map_mem_tmpl.vhd [moved from cores/adc_apv_map_mem_tmpl.vhd with 100% similarity]
design/adc_apv_mapping.mem [moved from source/adc_apv_mapping.mem with 100% similarity]
design/adc_ch_in.lpc [moved from cores/adc_ch_in.lpc with 100% similarity]
design/adc_ch_in.srp [moved from cores/adc_ch_in.srp with 100% similarity]
design/adc_ch_in.vhd [moved from cores/adc_ch_in.vhd with 100% similarity]
design/adc_ch_in_tmpl.vhd [moved from cores/adc_ch_in_tmpl.vhd with 100% similarity]
design/adc_channel_select.vhd [moved from source/adc_channel_select.vhd with 100% similarity]
design/adc_crossover.vhd [moved from source/adc_crossover.vhd with 100% similarity, mode: 0755]
design/adc_data_handler.vhd [moved from source/adc_data_handler.vhd with 100% similarity, mode: 0755]
design/adc_onewire_map_mem.lpc [moved from cores/adc_onewire_map_mem.lpc with 100% similarity]
design/adc_onewire_map_mem.srp [moved from cores/adc_onewire_map_mem.srp with 100% similarity]
design/adc_onewire_map_mem.vhd [moved from cores/adc_onewire_map_mem.vhd with 100% similarity]
design/adc_onewire_map_mem_generate.log [moved from cores/adc_onewire_map_mem_generate.log with 100% similarity]
design/adc_onewire_map_mem_tmpl.vhd [moved from cores/adc_onewire_map_mem_tmpl.vhd with 100% similarity]
design/adc_onewire_mapping.mem [moved from source/adc_onewire_mapping.mem with 100% similarity]
design/adc_pll.lpc [moved from cores/adc_pll.lpc with 100% similarity]
design/adc_pll.vhd [moved from cores/adc_pll.vhd with 100% similarity]
design/adc_pll_tmpl.vhd [moved from cores/adc_pll_tmpl.vhd with 100% similarity]
design/adc_snoop_mem.lpc [moved from cores/adc_snoop_mem.lpc with 100% similarity]
design/adc_snoop_mem.srp [moved from cores/adc_snoop_mem.srp with 100% similarity]
design/adc_snoop_mem.vhd [moved from cores/adc_snoop_mem.vhd with 100% similarity]
design/adc_snoop_mem_generate.log [moved from cores/adc_snoop_mem_generate.log with 100% similarity]
design/adc_snoop_mem_tmpl.vhd [moved from cores/adc_snoop_mem_tmpl.vhd with 100% similarity]
design/adc_twochannels.vhd [moved from source/adc_twochannels.vhd with 100% similarity]
design/adcmv3.vhd [moved from adcmv3.vhd with 96% similarity, mode: 0755]
design/adcmv3.vhd~ [new file with mode: 0755]
design/adcmv3_components.vhd [moved from source/adcmv3_components.vhd with 100% similarity, mode: 0755]
design/adcmv3_components.vhd~ [new file with mode: 0755]
design/adcmv3_testfifo.vhd [moved from source/adcmv3_testfifo.vhd with 100% similarity]
design/apv_adc_map_mem.lpc [moved from cores/apv_adc_map_mem.lpc with 100% similarity]
design/apv_adc_map_mem.srp [moved from cores/apv_adc_map_mem.srp with 100% similarity]
design/apv_adc_map_mem.vhd [moved from cores/apv_adc_map_mem.vhd with 100% similarity]
design/apv_adc_map_mem_generate.log [moved from cores/apv_adc_map_mem_generate.log with 100% similarity]
design/apv_adc_map_mem_tmpl.vhd [moved from cores/apv_adc_map_mem_tmpl.vhd with 100% similarity]
design/apv_adc_mapping.mem [moved from source/apv_adc_mapping.mem with 100% similarity]
design/apv_digital.vhd [moved from source/apv_digital.vhd with 100% similarity]
design/apv_lock_sm.vhd [moved from source/apv_lock_sm.vhd with 100% similarity]
design/apv_locker.vhd [moved from source/apv_locker.vhd with 100% similarity]
design/apv_map_mem.lpc [moved from cores/apv_map_mem.lpc with 100% similarity]
design/apv_map_mem.srp [moved from cores/apv_map_mem.srp with 100% similarity]
design/apv_map_mem.vhd [moved from cores/apv_map_mem.vhd with 100% similarity]
design/apv_map_mem_generate.log [moved from cores/apv_map_mem_generate.log with 100% similarity]
design/apv_map_mem_tmpl.vhd [moved from cores/apv_map_mem_tmpl.vhd with 100% similarity]
design/apv_mapping.mem [moved from source/apv_mapping.mem with 100% similarity]
design/apv_pc_nc_alu.vhd [moved from source/apv_pc_nc_alu.vhd with 100% similarity, mode: 0755]
design/apv_raw_buffer.vhd [moved from source/apv_raw_buffer.vhd with 100% similarity, mode: 0755]
design/apv_sync_handler.vhd [moved from source/apv_sync_handler.vhd with 100% similarity]
design/apv_trg_handler.vhd [moved from source/apv_trg_handler.vhd with 100% similarity]
design/apv_trgctrl.vhd [moved from source/apv_trgctrl.vhd with 100% similarity, mode: 0755]
design/buf_toc.vhd [moved from source/buf_toc.vhd with 100% similarity]
design/crossover.lpc [moved from cores/crossover.lpc with 100% similarity]
design/crossover.srp [moved from cores/crossover.srp with 100% similarity]
design/crossover.vhd [moved from cores/crossover.vhd with 100% similarity]
design/crossover_generate.log [moved from cores/crossover_generate.log with 100% similarity]
design/crossover_tmpl.vhd [moved from cores/crossover_tmpl.vhd with 100% similarity]
design/dbg_reg.vhd [moved from source/dbg_reg.vhd with 100% similarity, mode: 0755]
design/decoder_8bit.lpc [moved from cores/decoder_8bit.lpc with 100% similarity]
design/decoder_8bit.mem [moved from cores/decoder_8bit.mem with 100% similarity]
design/decoder_8bit.vhd [moved from cores/decoder_8bit.vhd with 100% similarity]
design/decoder_8bit_tmpl.vhd [moved from cores/decoder_8bit_tmpl.vhd with 100% similarity]
design/dll_100m.lpc [moved from cores/dll_100m.lpc with 100% similarity]
design/dll_100m.vhd [moved from cores/dll_100m.vhd with 100% similarity]
design/dll_100m_tmpl.vhd [moved from cores/dll_100m_tmpl.vhd with 100% similarity]
design/dpram_8x19.lpc [moved from cores/dpram_8x19.lpc with 100% similarity]
design/dpram_8x19.srp [moved from cores/dpram_8x19.srp with 100% similarity]
design/dpram_8x19.vhd [moved from cores/dpram_8x19.vhd with 100% similarity]
design/dpram_8x19_generate.log [moved from cores/dpram_8x19_generate.log with 100% similarity]
design/dpram_8x19_tmpl.vhd [moved from cores/dpram_8x19_tmpl.vhd with 100% similarity]
design/eds_buf.vhd [moved from source/eds_buf.vhd with 100% similarity]
design/eds_buffer_dpram.lpc [moved from cores/eds_buffer_dpram.lpc with 100% similarity]
design/eds_buffer_dpram.vhd [moved from cores/eds_buffer_dpram.vhd with 100% similarity]
design/eds_buffer_dpram_tmpl.vhd [moved from cores/eds_buffer_dpram_tmpl.vhd with 100% similarity]
design/fifo_16x11.lpc [moved from cores/fifo_16x11.lpc with 100% similarity]
design/fifo_16x11.srp [moved from cores/fifo_16x11.srp with 100% similarity]
design/fifo_16x11.vhd [moved from cores/fifo_16x11.vhd with 100% similarity]
design/fifo_16x11_generate.log [moved from cores/fifo_16x11_generate.log with 100% similarity]
design/fifo_16x11_tmpl.vhd [moved from cores/fifo_16x11_tmpl.vhd with 100% similarity]
design/fifo_1kx18.lpc [moved from cores/fifo_1kx18.lpc with 100% similarity]
design/fifo_1kx18.srp [moved from cores/fifo_1kx18.srp with 100% similarity]
design/fifo_1kx18.vhd [moved from cores/fifo_1kx18.vhd with 100% similarity]
design/fifo_1kx18_generate.log [moved from cores/fifo_1kx18_generate.log with 100% similarity]
design/fifo_1kx18_tmpl.vhd [moved from cores/fifo_1kx18_tmpl.vhd with 100% similarity]
design/fifo_2kx27.lpc [moved from cores/fifo_2kx27.lpc with 100% similarity]
design/fifo_2kx27.vhd [moved from cores/fifo_2kx27.vhd with 100% similarity]
design/fifo_2kx27_tmpl.vhd [moved from cores/fifo_2kx27_tmpl.vhd with 100% similarity]
design/frame_status_mem.lpc [moved from cores/frame_status_mem.lpc with 100% similarity]
design/frame_status_mem.srp [moved from cores/frame_status_mem.srp with 100% similarity]
design/frame_status_mem.vhd [moved from cores/frame_status_mem.vhd with 100% similarity]
design/frame_status_mem_generate.log [moved from cores/frame_status_mem_generate.log with 100% similarity]
design/frame_status_mem_tmpl.vhd [moved from cores/frame_status_mem_tmpl.vhd with 100% similarity]
design/frmctr_check.vhd [moved from source/frmctr_check.vhd with 100% similarity]
design/i2c_gstart.vhd [moved from source/i2c_gstart.vhd with 100% similarity]
design/i2c_master.vhd [moved from source/i2c_master.vhd with 100% similarity]
design/i2c_sendb.vhd [moved from source/i2c_sendb.vhd with 100% similarity]
design/i2c_slim.vhd [moved from source/i2c_slim.vhd with 100% similarity]
design/input_bram.lpc [moved from cores/input_bram.lpc with 100% similarity]
design/input_bram.srp [moved from cores/input_bram.srp with 100% similarity]
design/input_bram.vhd [moved from cores/input_bram.vhd with 100% similarity]
design/input_bram_generate.log [moved from cores/input_bram_generate.log with 100% similarity]
design/input_bram_tmpl.vhd [moved from cores/input_bram_tmpl.vhd with 100% similarity]
design/ipu_fifo_stage.vhd [moved from source/ipu_fifo_stage.vhd with 100% similarity, mode: 0755]
design/ipu_fifo_stage.vhd~ [new file with mode: 0755]
design/ipu_fifo_stage_BACK.vhd [moved from source/ipu_fifo_stage_BACK.vhd with 100% similarity]
design/logic_analyzer.vhd [moved from source/logic_analyzer.vhd with 100% similarity]
design/max_data.vhd [moved from source/max_data.vhd with 100% similarity]
design/msg_file.log [moved from cores/msg_file.log with 100% similarity]
design/mult_3x8.lpc [moved from cores/mult_3x8.lpc with 100% similarity]
design/mult_3x8.srp [moved from cores/mult_3x8.srp with 100% similarity]
design/mult_3x8.vhd [moved from cores/mult_3x8.vhd with 100% similarity]
design/mult_3x8_generate.log [moved from cores/mult_3x8_generate.log with 100% similarity]
design/mult_3x8_tmpl.vhd [moved from cores/mult_3x8_tmpl.vhd with 100% similarity]
design/my_sbuf.vhd [moved from source/my_sbuf.vhd with 100% similarity]
design/onewire_master.vhd [moved from source/onewire_master.vhd with 100% similarity]
design/onewire_spare_one.lpc [moved from cores/onewire_spare_one.lpc with 100% similarity]
design/onewire_spare_one.srp [moved from cores/onewire_spare_one.srp with 100% similarity]
design/onewire_spare_one.vhd [moved from cores/onewire_spare_one.vhd with 100% similarity]
design/onewire_spare_one_generate.log [moved from cores/onewire_spare_one_generate.log with 100% similarity]
design/onewire_spare_one_tmpl.vhd [moved from cores/onewire_spare_one_tmpl.vhd with 100% similarity]
design/ped_corr_ctrl.vhd [moved from source/ped_corr_ctrl.vhd with 100% similarity, mode: 0755]
design/ped_thr_mem.mem [moved from source/ped_thr_mem.mem with 100% similarity]
design/ped_thr_true.lpc [moved from cores/ped_thr_true.lpc with 100% similarity]
design/ped_thr_true.srp [moved from cores/ped_thr_true.srp with 100% similarity]
design/ped_thr_true.vhd [moved from cores/ped_thr_true.vhd with 100% similarity]
design/ped_thr_true_tmpl.vhd [moved from cores/ped_thr_true_tmpl.vhd with 100% similarity]
design/pll_40m.lpc [moved from cores/pll_40m.lpc with 100% similarity]
design/pll_40m.vhd [moved from cores/pll_40m.vhd with 100% similarity]
design/pll_40m_tmpl.vhd [moved from cores/pll_40m_tmpl.vhd with 100% similarity]
design/pulse_stretch.vhd [moved from source/pulse_stretch.vhd with 100% similarity, mode: 0755]
design/pulse_sync.vhd [moved from source/pulse_sync.vhd with 100% similarity, mode: 0755]
design/raw_buf_stage.vhd [moved from source/raw_buf_stage.vhd with 100% similarity, mode: 0755]
design/real_trg_handler.vhd [moved from source/real_trg_handler.vhd with 100% similarity, mode: 0755]
design/real_trg_handler.vhd~ [new file with mode: 0755]
design/real_trg_handler_BACKUP.vhd [moved from source/real_trg_handler_BACKUP.vhd with 100% similarity, mode: 0755]
design/reboot_handler.vhd [moved from source/reboot_handler.vhd with 100% similarity, mode: 0755]
design/ref_row_sel.vhd [moved from source/ref_row_sel.vhd with 100% similarity]
design/replacement.vhd [moved from source/replacement.vhd with 100% similarity]
design/reset_handler.vhd [moved from source/reset_handler.vhd with 100% similarity, mode: 0755]
design/rich_trb.vhd [moved from source/rich_trb.vhd with 96% similarity, mode: 0755]
design/rich_trb.vhd~ [new file with mode: 0755]
design/sbuf.vhd [moved from source/sbuf.vhd with 100% similarity, mode: 0755]
design/sfp_rx_handler.vhd [moved from source/sfp_rx_handler.vhd with 100% similarity, mode: 0755]
design/sfp_rx_handler_BACK2.vhd [moved from source/sfp_rx_handler_BACK2.vhd with 100% similarity, mode: 0755]
design/sfp_rx_handler_BACK_0.vhd [moved from source/sfp_rx_handler_BACK_0.vhd with 100% similarity, mode: 0755]
design/slave_bus.vhd [moved from source/slave_bus.vhd with 72% similarity, mode: 0755]
design/slv_adc_la.vhd [moved from source/slv_adc_la.vhd with 100% similarity]
design/slv_adc_snoop.vhd [moved from source/slv_adc_snoop.vhd with 100% similarity]
design/slv_half_register.vhd [moved from source/slv_half_register.vhd with 100% similarity]
design/slv_memory_true.vhd [moved from source/slv_memory_true.vhd with 100% similarity]
design/slv_onewire_dpram.lpc [moved from cores/slv_onewire_dpram.lpc with 100% similarity]
design/slv_onewire_dpram.srp [moved from cores/slv_onewire_dpram.srp with 100% similarity]
design/slv_onewire_dpram.vhd [moved from cores/slv_onewire_dpram.vhd with 100% similarity]
design/slv_onewire_dpram_generate.log [moved from cores/slv_onewire_dpram_generate.log with 100% similarity]
design/slv_onewire_dpram_tmpl.vhd [moved from cores/slv_onewire_dpram_tmpl.vhd with 100% similarity]
design/slv_onewire_memory.vhd [moved from source/slv_onewire_memory.vhd with 100% similarity, mode: 0755]
design/slv_ped_thr_mem.vhd [moved from source/slv_ped_thr_mem.vhd with 100% similarity]
design/slv_register.vhd [moved from source/slv_register.vhd with 100% similarity]
design/slv_register_bank.vhd [moved from source/slv_register_bank.vhd with 100% similarity]
design/slv_status.vhd [moved from source/slv_status.vhd with 100% similarity]
design/slv_status_bank.vhd [moved from source/slv_status_bank.vhd with 100% similarity]
design/spare_onewire_mapping.mem [moved from source/spare_onewire_mapping.mem with 100% similarity]
design/spi_adc_master.vhd [moved from source/spi_adc_master.vhd with 100% similarity]
design/spi_real_slim.vhd [moved from source/spi_real_slim.vhd with 100% similarity]
design/state_sync.vhd [moved from source/state_sync.vhd with 100% similarity, mode: 0755]
design/sync_pll_40m.lpc [moved from cores/sync_pll_40m.lpc with 100% similarity]
design/sync_pll_40m.srp [moved from cores/sync_pll_40m.srp with 100% similarity]
design/sync_pll_40m.vhd [moved from cores/sync_pll_40m.vhd with 100% similarity]
design/sync_pll_40m_generate.log [moved from cores/sync_pll_40m_generate.log with 100% similarity]
design/sync_pll_40m_tmpl.vhd [moved from cores/sync_pll_40m_tmpl.vhd with 100% similarity]
design/tb_count_unit.vhd [moved from source/tb_count_unit.vhd with 100% similarity, mode: 0755]
design/tb_count_unit.vhd.bak [moved from source/tb_count_unit.vhd.bak with 100% similarity, mode: 0755]
design/tb_test_fifo2_tmpl.vhd [moved from cores/tb_test_fifo2_tmpl.vhd with 100% similarity]
design/test_fifo.lpc [moved from cores/test_fifo.lpc with 100% similarity]
design/test_fifo.vhd [moved from cores/test_fifo.vhd with 100% similarity]
design/test_fifo2.jhd [moved from cores/test_fifo2.jhd with 100% similarity]
design/test_fifo2.lpc [moved from cores/test_fifo2.lpc with 100% similarity]
design/test_fifo2.naf [moved from cores/test_fifo2.naf with 100% similarity]
design/test_fifo2.srp [moved from cores/test_fifo2.srp with 100% similarity]
design/test_fifo2.sym [moved from cores/test_fifo2.sym with 100% similarity]
design/test_fifo2.vhd [moved from cores/test_fifo2.vhd with 100% similarity]
design/test_fifo2_generate.log [moved from cores/test_fifo2_generate.log with 100% similarity]
design/test_fifo2_tmpl.vhd [moved from cores/test_fifo2_tmpl.vhd with 100% similarity]
design/test_fifo_tmpl.vhd [moved from cores/test_fifo_tmpl.vhd with 100% similarity]
design/test_media.vhd [moved from source/test_media.vhd with 100% similarity, mode: 0755]
design/testfifo.lpc [moved from cores/testfifo.lpc with 100% similarity]
design/testfifo.vhd [moved from cores/testfifo.vhd with 100% similarity]
design/testfifo_tmpl.vhd [moved from cores/testfifo_tmpl.vhd with 100% similarity]
featurelist.txt [changed mode: 0644->0755]
howto_adcm_i2c.txt [changed mode: 0644->0755]
lever/.recordref [changed mode: 0644->0755]
lever/adc_apv_map_mem.jhd [changed mode: 0644->0755]
lever/adc_ch_in.jhd [changed mode: 0644->0755]
lever/adc_onewire_map_mem.jhd [changed mode: 0644->0755]
lever/adc_snoop_mem.jhd [changed mode: 0644->0755]
lever/adcmv3.ini [changed mode: 0644->0755]
lever/adcmv3.jid [changed mode: 0644->0755]
lever/adcmv3.lci [changed mode: 0644->0755]
lever/adcmv3.lct [changed mode: 0644->0755]
lever/adcmv3.lpf [changed mode: 0644->0755]
lever/adcmv3.mt [changed mode: 0644->0755]
lever/adcmv3.pt [changed mode: 0644->0755]
lever/adcmv3.rev [changed mode: 0644->0755]
lever/adcmv3.rvp [changed mode: 0644->0755]
lever/adcmv3.sty [changed mode: 0644->0755]
lever/adcmv3.syn [changed mode: 0644->0755]
lever/adcmv3.syn.bak [changed mode: 0644->0755]
lever/adcmv3.tcl [changed mode: 0644->0755]
lever/adcmv3_tcl.ini [changed mode: 0644->0755]
lever/adder_16bit.jhd [changed mode: 0644->0755]
lever/adder_5bit.jhd [changed mode: 0644->0755]
lever/adder_6bit.jhd [changed mode: 0644->0755]
lever/apv_adc_map_mem.jhd [changed mode: 0644->0755]
lever/automake.log [changed mode: 0644->0755]
lever/chipsim.err [changed mode: 0644->0755]
lever/comp14bit.jhd [changed mode: 0644->0755]
lever/comp4bit.jhd [changed mode: 0644->0755]
lever/comp_12bit.jhd [changed mode: 0644->0755]
lever/crossover.jhd [changed mode: 0644->0755]
lever/decoder_8bit.jhd [changed mode: 0644->0755]
lever/dll_100m.jhd [changed mode: 0644->0755]
lever/eds_buffer_dpram.jhd [changed mode: 0644->0755]
lever/fifo_18x16_media_interface.vht [changed mode: 0644->0755]
lever/fifo_18x16_media_interface_mb.sym [changed mode: 0644->0755]
lever/fifo_18x16_media_interface_mb.vht [changed mode: 0644->0755]
lever/fifo_1kx18.jhd [changed mode: 0644->0755]
lever/fifo_2kx27.jhd [changed mode: 0644->0755]
lever/frame_status_mem.jhd [changed mode: 0644->0755]
lever/input_bram.jhd [changed mode: 0644->0755]
lever/lattice_ecp2m_fifo_16bit_dualport.jhd [changed mode: 0644->0755]
lever/lattice_ecp2m_fifo_18x1k.jhd [changed mode: 0644->0755]
lever/onewire_spare_one.jhd [changed mode: 0644->0755]
lever/ped_thr_true.jhd [changed mode: 0644->0755]
lever/pll_40m.jhd [changed mode: 0644->0755]
lever/pre.clr [changed mode: 0644->0755]
lever/run_options.txt [changed mode: 0644->0755]
lever/sbuf.cmd [changed mode: 0644->0755]
lever/sbuf.edi [changed mode: 0644->0755]
lever/sbuf.fse [changed mode: 0644->0755]
lever/sbuf.srd [changed mode: 0644->0755]
lever/sbuf.srf [changed mode: 0644->0755]
lever/sbuf.szr [changed mode: 0644->0755]
lever/serdes_gbe_2.jhd [changed mode: 0644->0755]
lever/slv_onewire_dpram.jhd [changed mode: 0644->0755]
lever/spi_dpram_32_to_8.jhd [changed mode: 0644->0755]
lever/suber_12bit.jhd [changed mode: 0644->0755]
lever/sync_pll_40m.jhd [changed mode: 0644->0755]
lever/syntmp/hdlinfo.log [changed mode: 0644->0755]
lever/syntmp/hdlorder.tcl [changed mode: 0644->0755]
lever/syntmp/sbuf.plg [changed mode: 0644->0755]
lever/tb_apv_trgctrl.rsp [changed mode: 0644->0755]
lever/tb_apv_trgctrl_activehdl.do [changed mode: 0644->0755]
lever/tb_apv_trgctrl_activehdl2.do [changed mode: 0644->0755]
lever/tb_apv_trgctrl_vhdf.udo [changed mode: 0644->0755]
lever/tb_media_fifo.rsp [changed mode: 0644->0755]
lever/tb_media_fifo_activehdl.do [changed mode: 0644->0755]
lever/tb_media_fifo_activehdl2.do [changed mode: 0644->0755]
lever/tb_media_fifo_mb.rsp [changed mode: 0644->0755]
lever/tb_media_fifo_mb_activehdl.do [changed mode: 0644->0755]
lever/tb_media_fifo_mb_activehdl2.do [changed mode: 0644->0755]
lever/tb_media_fifo_mb_vhdf.udo [changed mode: 0644->0755]
lever/tb_media_fifo_vhdf.udo [changed mode: 0644->0755]
lever/tb_ped_corr_ctrl.rsp [changed mode: 0644->0755]
lever/tb_ped_corr_ctrl_activehdl.do [changed mode: 0644->0755]
lever/tb_ped_corr_ctrl_activehdl2.do [changed mode: 0644->0755]
lever/tb_ped_corr_ctrl_vhdf.udo [changed mode: 0644->0755]
lever/tb_sfp_rx_handler.rsp [changed mode: 0644->0755]
lever/tb_sfp_rx_handler_activehdl.do [changed mode: 0644->0755]
lever/tb_sfp_rx_handler_activehdl2.do [changed mode: 0644->0755]
lever/tb_sfp_rx_handler_vhdf.udo [changed mode: 0644->0755]
lever/tb_spi_master.fado [changed mode: 0644->0755]
lever/tb_spi_master.rsp [changed mode: 0644->0755]
lever/tb_spi_master_activehdl.do [changed mode: 0644->0755]
lever/tb_spi_master_activehdl2.do [changed mode: 0644->0755]
lever/tb_spi_master_vhdf.udo [changed mode: 0644->0755]
lever/tb_test_media.rsp [changed mode: 0644->0755]
lever/tb_test_media_activehdl.do [changed mode: 0644->0755]
lever/tb_test_media_activehdl2.do [changed mode: 0644->0755]
lever/tb_test_media_vhdf.udo [changed mode: 0644->0755]
lever/test_media.vht [changed mode: 0644->0755]
lever/udo.rsp [changed mode: 0644->0755]
lever/work.sbuf.prj [changed mode: 0644->0755]
lever/work/0work.mgf [changed mode: 0644->0755]
lever/work/1work.mgf [changed mode: 0644->0755]
lever/work/3work.mgf [changed mode: 0644->0755]
lever/work/Edfmap.ini [changed mode: 0644->0755]
lever/work/compilation.order [changed mode: 0644->0755]
lever/work/compile.cfg [changed mode: 0644->0755]
lever/work/compile/sources.sth [changed mode: 0644->0755]
lever/work/compile/work.cmd [changed mode: 0644->0755]
lever/work/compile/work.epr [changed mode: 0644->0755]
lever/work/compile/work.erf [changed mode: 0644->0755]
lever/work/elaboration.log [changed mode: 0644->0755]
lever/work/library.cfg [changed mode: 0644->0755]
lever/work/log/console.log [changed mode: 0644->0755]
lever/work/projlib.cfg [changed mode: 0644->0755]
lever/work/work.LIB [changed mode: 0644->0755]
lever/work/work.adf [changed mode: 0644->0755]
lever/work/work.aws [changed mode: 0644->0755]
lever/work/work.wsp [changed mode: 0644->0755]
lever/work/work.wsw [changed mode: 0644->0755]
nodelist.txt
ports_hadeb05.txt [deleted file]
ports_lxcad01.txt [deleted file]
sim/tb_adc_apv_map_mem_tmpl.vhd [changed mode: 0644->0755]
sim/tb_adc_cross.vhd [changed mode: 0644->0755]
sim/tb_adc_crossover.vhd [changed mode: 0644->0755]
sim/tb_adc_handler.vhd [changed mode: 0644->0755]
sim/tb_adc_handler.vhd.bak [changed mode: 0644->0755]
sim/tb_adc_onewire_map_mem_tmpl.vhd [changed mode: 0644->0755]
sim/tb_apv_adc_map_mem_tmpl.vhd [changed mode: 0644->0755]
sim/tb_apv_locker.vhd [changed mode: 0644->0755]
sim/tb_apv_map_mem_tmpl.vhd [changed mode: 0644->0755]
sim/tb_apv_pc_nc_alu.vhd [changed mode: 0644->0755]
sim/tb_apv_trgctrl.vhd [changed mode: 0644->0755]
sim/tb_apv_trgctrl.vhd.bak [changed mode: 0644->0755]
sim/tb_apv_trgctrl_000.vhd [changed mode: 0644->0755]
sim/tb_comp4bit_tmpl.vhd [changed mode: 0644->0755]
sim/tb_crossfifo.vhd [changed mode: 0644->0755]
sim/tb_crossfifo_tmpl.vhd [changed mode: 0644->0755]
sim/tb_crossover.vhd [changed mode: 0644->0755]
sim/tb_crossover_tmpl.vhd [changed mode: 0644->0755]
sim/tb_dpram_8x19_tmpl.vhd [changed mode: 0644->0755]
sim/tb_fifo_16x11_tmpl.vhd [changed mode: 0644->0755]
sim/tb_fifo_1kx18_tmpl.vhd [changed mode: 0644->0755]
sim/tb_ipu_fifo_stage.vhd [changed mode: 0644->0755]
sim/tb_ipu_fifo_stage.vhd.bak [changed mode: 0644->0755]
sim/tb_ipu_fifo_stage_COPY.vhd [changed mode: 0644->0755]
sim/tb_ipu_fifo_stage_OLD.vhd [changed mode: 0644->0755]
sim/tb_logic_analyzer.vhd [changed mode: 0644->0755]
sim/tb_max_data.vhd [changed mode: 0644->0755]
sim/tb_media_fifo.vhd [changed mode: 0644->0755]
sim/tb_media_fifo.vhd.bak [changed mode: 0644->0755]
sim/tb_media_fifo_mb.vhd [changed mode: 0644->0755]
sim/tb_media_fifo_mb.vhd.bak [changed mode: 0644->0755]
sim/tb_mult_3x8.vhd [changed mode: 0644->0755]
sim/tb_mult_3x8_tmpl.vhd [changed mode: 0644->0755]
sim/tb_my_sbuf.vhd [changed mode: 0644->0755]
sim/tb_onewire_master.vhd [changed mode: 0644->0755]
sim/tb_onewire_spare_one_tmpl.vhd [changed mode: 0644->0755]
sim/tb_ped_corr_ctrl.vhd [changed mode: 0644->0755]
sim/tb_ped_corr_ctrl.vhd.bak [changed mode: 0644->0755]
sim/tb_ped_corr_ctrl_OLD.vhd [changed mode: 0644->0755]
sim/tb_pulse_stretch.vhd [changed mode: 0644->0755]
sim/tb_pulse_sync.vhd [changed mode: 0644->0755]
sim/tb_raw_buf_stage.vhd [changed mode: 0644->0755]
sim/tb_raw_buf_stage_new.vhd [changed mode: 0644->0755]
sim/tb_real_trg_handler.vhd [changed mode: 0644->0755]
sim/tb_reboot_handler.vhd [changed mode: 0644->0755]
sim/tb_reset_handler.vhd [changed mode: 0644->0755]
sim/tb_sfp_rx_handler.vhd [changed mode: 0644->0755]
sim/tb_sfp_rx_handler.vhd.bak [changed mode: 0644->0755]
sim/tb_slv_adc_la.vhd [changed mode: 0644->0755]
sim/tb_slv_adc_snoop.vhd [changed mode: 0644->0755]
sim/tb_slv_onewire_memory.vhd [changed mode: 0644->0755]
sim/tb_slv_ped_thr_mem.vhd [changed mode: 0644->0755]
sim/tb_slv_register_bank.vhd [changed mode: 0644->0755]
sim/tb_spi_master.vhd [changed mode: 0644->0755]
sim/tb_spi_master.vhd.bak [changed mode: 0644->0755]
sim/tb_spi_master_0.vhd [changed mode: 0644->0755]
sim/tb_spi_real_slim.vhd [changed mode: 0644->0755]
sim/tb_suber_12bit_tmpl.vhd [changed mode: 0644->0755]
sim/tb_test_media.vhd [changed mode: 0644->0755]
sim/tb_test_media.vhd.bak [changed mode: 0644->0755]
sim/tb_trb_net16_ibuf2.vhd [changed mode: 0644->0755]
sim/tb_trb_net_sbuf2.vhd [changed mode: 0644->0755]
sim/tb_trb_net_sbuf3.vhd [changed mode: 0644->0755]
source/adcmv3_components2.vhd [deleted file]
source/debug_multiplexer.vhd [deleted file]
stdout.log
test.txt [changed mode: 0644->0755]
tunnel.sh [changed mode: 0755->0644]
workdir/.recordref [deleted file]
workdir/.recordref_modgen [deleted file]

old mode 100644 (file)
new mode 100755 (executable)
index fd519541d188d6993538fc37d8a863784db693cd..92959c825efc02a8eb9616e4b4528785db0d69df 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,10 +1,8 @@
-# Call . /usr/local/opt/lattice_diamond/diamond/3.2/bin/lin64/diamond_env
-
 TARGET=adcmv3
-FAMILYNAME=LatticeECP3
-DEVICENAME=LFE3-150EA
-PACKAGE=FPBGA672
-SPEEDGRADE=8
+FAMILYNAME=LATTICEECP2M
+DEVICENAME=LFE2M100E
+PACKAGE=FPBGA900
+SPEEDGRADE=6
 
 TIMESTAMP=$(shell date '+%s')
 VERSION=$(shell cat version-major-minor.txt)
@@ -17,6 +15,7 @@ all: workdir/$(TARGET).bit
 .PHONY: clean
 clean:
        rm -rf workdir/* 
+       rm -f workdir/.[a-z,A-Z]*
 
 .PHONY: distclean
 distclean:
@@ -39,6 +38,8 @@ checkenv:
 
 # Bitgen
 workdir/$(TARGET).bit: workdir/$(TARGET).ncd
+       @$(MAKE) report
+
        @echo ""
        @echo "----------------------------------------------------------------------"
        @echo "-------------- Bitgen ------------------------------------------------"
@@ -46,7 +47,7 @@ workdir/$(TARGET).bit: workdir/$(TARGET).ncd
        cd workdir && \
          bitgen -w -g CfgMode:Disable -g RamCfg:Reset -g ES:No $(TARGET).ncd \
                  $(TARGET).bit $(TARGET).prf
-       @$(MAKE) report
+
        @$(MAKE) error  
 
 # Place and Route (multipar)
@@ -59,6 +60,13 @@ workdir/$(TARGET).ncd: workdir/$(TARGET)_map.ncd
        cd workdir && \
         par -f ../$(TARGET).p2t $(TARGET)_map.ncd $(TARGET).dir $(TARGET).prf
        cp workdir/$(TARGET).dir/*.ncd workdir/$(TARGET).ncd
+       #
+       # Multipar geht gerade nicht
+       #par $(TARGET)_map.ncd $(TARGET).prf
+       #mv $(TARGET).prf.ncd $(TARGET).ncd
+       # par -f ../$(TARGET).p2t $(TARGET)_map.ncd $(TARGET).dir $(TARGET).prf
+       #cp workdir/$(TARGET).dir/*.ncd workdir/$(TARGET).ncd
+
 
 # Mapper
 workdir/$(TARGET)_map.ncd: workdir/$(TARGET).ngd $(TARGET).lpf
@@ -100,6 +108,9 @@ workdir/$(TARGET).edf:
        @echo "----------------------------------------------------------------------"
        @echo "--------------- VHDL Compiler ----------------------------------------"
        @echo "----------------------------------------------------------------------"
+
+       #$(SYNPLIFY)/bin/synplify_premier_dp -batch $TOPNAME.prj || \
+       # (grep "@E" workdir/$(TARGET).srr && exit 2)
        synpwrap -prj $(TARGET).prj || \
         (grep "@E" workdir/$(TARGET).srr && exit 2)
 
@@ -136,9 +147,9 @@ workdir:
        @echo "-------------- Setup Workdir -----------------------------------------"
        @echo "----------------------------------------------------------------------"
        mkdir -p workdir
-       cd workdir && ../../base/linkdesignfiles.sh
+       #cd workdir && ../../base/linkdesignfiles.sh
        cp $(TARGET).lpf workdir/$(TARGET).lpf
-#      cat $(TARGET)_constraints.lpf >> workdir/$(TARGET).lpf
+       cat $(TARGET)_constraints.lpf >> workdir/$(TARGET).lpf
        cp nodelist.txt workdir/ 
 
 # Timing Report
index 9b69a65076442cfb21fed8e2512e4310bb094360..f0f5feabc62f76d49bdc2b6e72456d9be63d0415 100755 (executable)
@@ -158,7 +158,7 @@ IOBUF PORT "BP_SECTOR_2" IO_TYPE=LVTTL33 PULLMODE=UP ;
 LOCATE COMP "BP_SECTOR_1" SITE "AF13" ; # was "AF12"\r
 IOBUF PORT "BP_SECTOR_1" IO_TYPE=LVTTL33 PULLMODE=UP ;\r
 LOCATE COMP "BP_SECTOR_0" SITE "AF15" ; # was "AF11"\r
-IOBUF PORT "BP_MODULE_0 IO_TYPE=LVTTL33 PULLMODE=UP ;\r
+IOBUF PORT "BP_MODULE_0" IO_TYPE=LVTTL33 PULLMODE=UP ;\r
 \r
 LOCATE COMP "BP_LED" SITE "AE8" ;\r
 IOBUF PORT "BP_LED" IO_TYPE=LVTTL33 PULLMODE=NONE DRIVE=16 ;\r
@@ -238,22 +238,22 @@ LOCATE COMP "EXT_IN_0" SITE "AB28" ;
 # alternative, if needed\r
 # LOCATE COMP "EXT_IN_0" SITE "P28" ;\r
 IOBUF PORT "EXT_IN_0" IO_TYPE=LVTTL33 ;\r
-LOCATE COMP "DBG_EXP_41" SITE "T27" ;\r
-LOCATE COMP "DBG_EXP_39" SITE "T26" ;\r
-LOCATE COMP "DBG_EXP_37" SITE "U26" ;\r
-LOCATE COMP "DBG_EXP_35" SITE "V25" ;\r
-LOCATE COMP "DBG_EXP_33" SITE "W25" ;\r
-LOCATE COMP "DBG_EXP_31" SITE "W26" ;\r
-LOCATE COMP "DBG_EXP_29" SITE "Y26" ;\r
-LOCATE COMP "DBG_EXP_27" SITE "Y27" ;\r
-LOCATE COMP "DBG_EXP_25" SITE "AB26" ;\r
-LOCATE COMP "DBG_EXP_23" SITE "AC27" ;\r
-LOCATE COMP "DBG_EXP_21" SITE "U25" ;\r
-LOCATE COMP "DBG_EXP_19" SITE "U28" ;\r
-LOCATE COMP "DBG_EXP_17" SITE "U27" ;\r
-LOCATE COMP "DBG_EXP_5" SITE "R28" ;\r
-LOCATE COMP "DBG_EXP_3" SITE "R27" ;\r
-LOCATE COMP "DBG_EXP_1" SITE "T28" ;\r
+LOCATE COMP "DBG_EXP_41" SITE "T27" ;\r
+LOCATE COMP "DBG_EXP_39" SITE "T26" ;\r
+LOCATE COMP "DBG_EXP_37" SITE "U26" ;\r
+LOCATE COMP "DBG_EXP_35" SITE "V25" ;\r
+LOCATE COMP "DBG_EXP_33" SITE "W25" ;\r
+LOCATE COMP "DBG_EXP_31" SITE "W26" ;\r
+LOCATE COMP "DBG_EXP_29" SITE "Y26" ;\r
+LOCATE COMP "DBG_EXP_27" SITE "Y27" ;\r
+LOCATE COMP "DBG_EXP_25" SITE "AB26" ;\r
+LOCATE COMP "DBG_EXP_23" SITE "AC27" ;\r
+LOCATE COMP "DBG_EXP_21" SITE "U25" ;\r
+LOCATE COMP "DBG_EXP_19" SITE "U28" ;\r
+LOCATE COMP "DBG_EXP_17" SITE "U27" ;\r
+LOCATE COMP "DBG_EXP_5" SITE "R28" ;\r
+LOCATE COMP "DBG_EXP_3" SITE "R27" ;\r
+LOCATE COMP "DBG_EXP_1" SITE "T28" ;\r
 LOCATE COMP "UC_REBOOT" SITE "Y28" ; # was UC_FPGA3\r
 IOBUF PORT "UC_REBOOT" IO_TYPE=LVTTL33 ;\r
 # LOCATE COMP "UC_FPGA_2" SITE "W27" ;\r
@@ -311,34 +311,34 @@ IOBUF PORT "UC_RESET" IO_TYPE=LVTTL33 ;
 # I/O bank 2 - 3.30V\r
 # SFP control, LEDs, 1Wire ID, debug pins (SMC50)\r
 ######################################################################\r
-LOCATE COMP "DBG_EXP_43" SITE "R26" ;\r
-LOCATE COMP "DBG_EXP_42" SITE "P25" ;\r
-LOCATE COMP "DBG_EXP_40" SITE "P26" ;\r
-LOCATE COMP "DBG_EXP_38" SITE "N25" ;\r
-LOCATE COMP "DBG_EXP_36" SITE "M25" ;\r
-LOCATE COMP "DBG_EXP_34" SITE "M26" ;\r
-LOCATE COMP "DBG_EXP_32" SITE "L25" ;\r
-LOCATE COMP "DBG_EXP_30" SITE "L26" ;\r
-LOCATE COMP "DBG_EXP_28" SITE "K25" ;\r
-LOCATE COMP "DBG_EXP_26" SITE "J26" ;\r
-LOCATE COMP "DBG_EXP_24" SITE "H25" ;\r
-LOCATE COMP "DBG_EXP_22" SITE "H26" ;\r
-LOCATE COMP "DBG_EXP_20" SITE "H24" ;\r
-LOCATE COMP "DBG_EXP_18" SITE "G26" ;\r
-LOCATE COMP "DBG_EXP_16" SITE "G25" ;\r
-LOCATE COMP "DBG_EXP_15" SITE "L27" ;\r
-LOCATE COMP "DBG_EXP_14" SITE "L28" ;\r
-LOCATE COMP "DBG_EXP_13" SITE "M28" ;\r
-LOCATE COMP "DBG_EXP_12" SITE "K24" ;\r
-LOCATE COMP "DBG_EXP_11" SITE "M27" ;\r
-LOCATE COMP "DBG_EXP_10" SITE "M30" ;\r
-LOCATE COMP "DBG_EXP_9" SITE "N26" ;\r
-LOCATE COMP "DBG_EXP_8" SITE "M29" ;\r
-LOCATE COMP "DBG_EXP_7" SITE "P27" ;\r
-LOCATE COMP "DBG_EXP_6" SITE "L30" ;\r
-LOCATE COMP "DBG_EXP_4" SITE "L29" ;\r
-LOCATE COMP "DBG_EXP_2" SITE "K30" ;\r
-LOCATE COMP "DBG_EXP_0" SITE "K29" ;\r
+LOCATE COMP "DBG_EXP_43" SITE "R26" ;\r
+LOCATE COMP "DBG_EXP_42" SITE "P25" ;\r
+LOCATE COMP "DBG_EXP_40" SITE "P26" ;\r
+LOCATE COMP "DBG_EXP_38" SITE "N25" ;\r
+LOCATE COMP "DBG_EXP_36" SITE "M25" ;\r
+LOCATE COMP "DBG_EXP_34" SITE "M26" ;\r
+LOCATE COMP "DBG_EXP_32" SITE "L25" ;\r
+LOCATE COMP "DBG_EXP_30" SITE "L26" ;\r
+LOCATE COMP "DBG_EXP_28" SITE "K25" ;\r
+LOCATE COMP "DBG_EXP_26" SITE "J26" ;\r
+LOCATE COMP "DBG_EXP_24" SITE "H25" ;\r
+LOCATE COMP "DBG_EXP_22" SITE "H26" ;\r
+LOCATE COMP "DBG_EXP_20" SITE "H24" ;\r
+LOCATE COMP "DBG_EXP_18" SITE "G26" ;\r
+LOCATE COMP "DBG_EXP_16" SITE "G25" ;\r
+LOCATE COMP "DBG_EXP_15" SITE "L27" ;\r
+LOCATE COMP "DBG_EXP_14" SITE "L28" ;\r
+LOCATE COMP "DBG_EXP_13" SITE "M28" ;\r
+LOCATE COMP "DBG_EXP_12" SITE "K24" ;\r
+LOCATE COMP "DBG_EXP_11" SITE "M27" ;\r
+LOCATE COMP "DBG_EXP_10" SITE "M30" ;\r
+LOCATE COMP "DBG_EXP_9" SITE "N26" ;\r
+LOCATE COMP "DBG_EXP_8" SITE "M29" ;\r
+LOCATE COMP "DBG_EXP_7" SITE "P27" ;\r
+LOCATE COMP "DBG_EXP_6" SITE "L30" ;\r
+LOCATE COMP "DBG_EXP_4" SITE "L29" ;\r
+LOCATE COMP "DBG_EXP_2" SITE "K30" ;\r
+LOCATE COMP "DBG_EXP_0" SITE "K29" ;\r
 LOCATE COMP "FPGA_LED_6" SITE "G28" ;\r
 IOBUF PORT "FPGA_LED_6" IO_TYPE=LVTTL33 PULLMODE=NONE DRIVE=16 SLEWRATE=SLOW ;\r
 LOCATE COMP "FPGA_LED_5" SITE "G27" ;\r
@@ -444,8 +444,8 @@ IOBUF PORT "BP_ONEWIRE" IO_TYPE=LVTTL33 PULLMODE=NONE DRIVE=16 ;
 # simplify IO definitions\r
 ######################################################################\r
 # Debug header (50pin SMC connector)\r
-DEFINE PORT GROUP "debug_header_group" "DBG_EXP_{0:43}" ;\r
-IOBUF GROUP "debug_header_group" IO_TYPE=LVCMOS33 PULLMODE=DOWN SLEWRATE=FAST ;\r
+DEFINE PORT GROUP "debug_header_group" "DBG_EXP_{0:43}" ;\r
+# IOBUF GROUP "debug_header_group" IO_TYPE=LVCMOS33 PULLMODE=DOWN DRIVE=4 SLEWRATE=FAST ;\r
 \r
 # LED drivers\r
 # DEFINE PORT GROUP "led_output_group" "FPGA_LED*" ;\r
diff --git a/adcmv3.p2t b/adcmv3.p2t
new file mode 100644 (file)
index 0000000..9f1cba2
--- /dev/null
@@ -0,0 +1,11 @@
+-w 
+-i 2
+-l 5
+-n 2 
+-t 10
+-s 1
+-c 1
+-e 2
+-stopzero
+-m nodelist.txt
+-exp parCDP=1:parCDR=1:parPlcInLimit=0:parPlcInNeighborSize=1:parPathBased=ON:parHold=ON:parHoldLimit=10000:paruseNBR=1:
old mode 100644 (file)
new mode 100755 (executable)
index ee7a2ef..393b5c1
 
 # add_file options
 add_file -vhdl -lib work "version.vhd"
-add_file -vhdl -lib work "../../trbnet/trb_net_std.vhd"
-add_file -vhdl -lib work "../../trbnet/trb_net_components.vhd"
-add_file -vhdl -lib work "source/adcmv3_components.vhd"
-add_file -vhdl -lib work "source/adcmv3_components2.vhd"
+add_file -vhdl -lib work "../trbnet/trb_net_std.vhd"
+add_file -vhdl -lib work "../trbnet/trb_net_components.vhd"
+add_file -vhdl -lib work "design/adcmv3_components.vhd"
 
 # ADCMv3 design files
-# Top level entity
-add_file -vhdl -lib work "adcmv3.vhd"
-
-add_file -vhdl -lib work "source/dbg_reg.vhd"
-add_file -vhdl -lib work "source/reset_handler.vhd"
-add_file -vhdl -lib work "source/reboot_handler.vhd"
-add_file -vhdl -lib work "source/pulse_sync.vhd"
-add_file -vhdl -lib work "source/state_sync.vhd"
-add_file -vhdl -lib work "source/apv_sync_handler.vhd"
-add_file -vhdl -lib work "source/apv_trg_handler.vhd"
-add_file -vhdl -lib work "source/eds_buf.vhd"
-add_file -vhdl -lib work "source/max_data.vhd"
-add_file -vhdl -lib work "source/real_trg_handler.vhd"
-add_file -vhdl -lib work "source/pulse_stretch.vhd"
-add_file -vhdl -lib work "source/apv_trgctrl.vhd"
-add_file -vhdl -lib work "source/adc_channel_select.vhd"
-add_file -vhdl -lib work "source/adc_crossover.vhd"
-add_file -vhdl -lib work "source/adc_twochannels.vhd"
-add_file -vhdl -lib work "source/adc_data_handler.vhd"
-add_file -vhdl -lib work "source/apv_raw_buffer.vhd"
-add_file -vhdl -lib work "source/apv_lock_sm.vhd"
-add_file -vhdl -lib work "source/apv_digital.vhd"
-add_file -vhdl -lib work "source/apv_locker.vhd"
-add_file -vhdl -lib work "source/raw_buf_stage.vhd"
-add_file -vhdl -lib work "source/apv_pc_nc_alu.vhd"
-add_file -vhdl -lib work "source/buf_toc.vhd"
-add_file -vhdl -lib work "source/ref_row_sel.vhd"
-add_file -vhdl -lib work "source/frmctr_check.vhd"
-add_file -vhdl -lib work "source/ped_corr_ctrl.vhd"
-add_file -vhdl -lib work "source/ipu_fifo_stage.vhd"
-add_file -vhdl -lib work "source/slv_register.vhd"
-add_file -vhdl -lib work "source/slv_adc_snoop.vhd"
-add_file -vhdl -lib work "source/slv_half_register.vhd"
-add_file -vhdl -lib work "source/slv_status.vhd"
-add_file -vhdl -lib work "source/slv_status_bank.vhd"
-add_file -vhdl -lib work "source/slv_register_bank.vhd"
-add_file -vhdl -lib work "source/spi_real_slim.vhd"
-add_file -vhdl -lib work "source/spi_adc_master.vhd"
-add_file -vhdl -lib work "source/onewire_master.vhd"
-add_file -vhdl -lib work "source/slv_onewire_memory.vhd"
-add_file -vhdl -lib work "source/i2c_gstart.vhd"
-add_file -vhdl -lib work "source/i2c_sendb.vhd"
-add_file -vhdl -lib work "source/i2c_slim.vhd"
-add_file -vhdl -lib work "source/i2c_master.vhd"
-add_file -vhdl -lib work "source/slv_ped_thr_mem.vhd"
-add_file -vhdl -lib work "source/slave_bus.vhd"
-add_file -vhdl -lib work "source/rich_trb.vhd"
-
-# Addons
-add_file -vhdl -lib work "source/debug_multiplexer.vhd"
-
-# Core files
-add_file -vhdl -lib work "cores/adc_ch_in.vhd"
-add_file -vhdl -lib work "cores/eds_buffer_dpram.vhd"
-add_file -vhdl -lib work "cores/crossover.vhd"
-add_file -vhdl -lib work "cores/frame_status_mem.vhd"
-add_file -vhdl -lib work "cores/input_bram.vhd"
-add_file -vhdl -lib work "cores/decoder_8bit.vhd"
-add_file -vhdl -lib work "cores/adc_apv_map_mem.vhd"
-add_file -vhdl -lib work "cores/fifo_1kx18.vhd"
-add_file -vhdl -lib work "cores/fifo_2kx27.vhd"
-add_file -vhdl -lib work "cores/adc_snoop_mem.vhd"
-add_file -vhdl -lib work "cores/apv_adc_map_mem.vhd"
-add_file -vhdl -lib work "cores/onewire_spare_one.vhd"
-add_file -vhdl -lib work "cores/adc_onewire_map_mem.vhd"
-add_file -vhdl -lib work "cores/ped_thr_true.vhd"
-add_file -vhdl -lib work "cores/sync_pll_40m.vhd"
-add_file -vhdl -lib work "cores/dll_100m.vhd"
-add_file -vhdl -lib work "cores/pll_40m.vhd"
-add_file -vhdl -lib work "cores/slv_onewire_dpram.vhd"
+add_file -vhdl -lib work "design/adcmv3.vhd"
+add_file -vhdl -lib work "design/dbg_reg.vhd"
+add_file -vhdl -lib work "design/reset_handler.vhd"
+add_file -vhdl -lib work "design/reboot_handler.vhd"
+add_file -vhdl -lib work "design/pulse_sync.vhd"
+add_file -vhdl -lib work "design/adc_ch_in.vhd"
+add_file -vhdl -lib work "design/state_sync.vhd"
+add_file -vhdl -lib work "design/apv_sync_handler.vhd"
+add_file -vhdl -lib work "design/apv_trg_handler.vhd"
+add_file -vhdl -lib work "design/eds_buffer_dpram.vhd"
+add_file -vhdl -lib work "design/eds_buf.vhd"
+add_file -vhdl -lib work "design/max_data.vhd"
+add_file -vhdl -lib work "design/real_trg_handler.vhd"
+add_file -vhdl -lib work "design/pulse_stretch.vhd"
+add_file -vhdl -lib work "design/apv_trgctrl.vhd"
+add_file -vhdl -lib work "design/adc_channel_select.vhd"
+add_file -vhdl -lib work "design/crossover.vhd"
+add_file -vhdl -lib work "design/adc_crossover.vhd"
+add_file -vhdl -lib work "design/adc_twochannels.vhd"
+add_file -vhdl -lib work "design/adc_data_handler.vhd"
+add_file -vhdl -lib work "design/frame_status_mem.vhd"
+add_file -vhdl -lib work "design/input_bram.vhd"
+add_file -vhdl -lib work "design/apv_raw_buffer.vhd"
+add_file -vhdl -lib work "design/apv_lock_sm.vhd"
+add_file -vhdl -lib work "design/apv_digital.vhd"
+add_file -vhdl -lib work "design/apv_locker.vhd"
+add_file -vhdl -lib work "design/raw_buf_stage.vhd"
+add_file -vhdl -lib work "design/decoder_8bit.vhd"
+add_file -vhdl -lib work "design/apv_pc_nc_alu.vhd"
+add_file -vhdl -lib work "design/buf_toc.vhd"
+add_file -vhdl -lib work "design/ref_row_sel.vhd"
+add_file -vhdl -lib work "design/frmctr_check.vhd"
+add_file -vhdl -lib work "design/ped_corr_ctrl.vhd"
+add_file -vhdl -lib work "design/adc_apv_map_mem.vhd"
+add_file -vhdl -lib work "design/fifo_1kx18.vhd"
+add_file -vhdl -lib work "design/fifo_2kx27.vhd"
+add_file -vhdl -lib work "design/ipu_fifo_stage.vhd"
+add_file -vhdl -lib work "design/slv_register.vhd"
+add_file -vhdl -lib work "design/adc_snoop_mem.vhd"
+add_file -vhdl -lib work "design/slv_adc_snoop.vhd"
+add_file -vhdl -lib work "design/slv_half_register.vhd"
+add_file -vhdl -lib work "design/slv_status.vhd"
+add_file -vhdl -lib work "design/slv_status_bank.vhd"
+add_file -vhdl -lib work "design/apv_adc_map_mem.vhd"
+add_file -vhdl -lib work "design/slv_register_bank.vhd"
+add_file -vhdl -lib work "design/spi_real_slim.vhd"
+add_file -vhdl -lib work "design/spi_adc_master.vhd"
+add_file -vhdl -lib work "design/slv_onewire_dpram.vhd"
+add_file -vhdl -lib work "design/onewire_master.vhd"
+add_file -vhdl -lib work "design/onewire_spare_one.vhd"
+add_file -vhdl -lib work "design/adc_onewire_map_mem.vhd"
+add_file -vhdl -lib work "design/slv_onewire_memory.vhd"
+add_file -vhdl -lib work "design/i2c_gstart.vhd"
+add_file -vhdl -lib work "design/i2c_sendb.vhd"
+add_file -vhdl -lib work "design/i2c_slim.vhd"
+add_file -vhdl -lib work "design/i2c_master.vhd"
+add_file -vhdl -lib work "design/ped_thr_true.vhd"
+add_file -vhdl -lib work "design/slv_ped_thr_mem.vhd"
+add_file -vhdl -lib work "design/slave_bus.vhd"
+add_file -vhdl -lib work "design/rich_trb.vhd"
+add_file -vhdl -lib work "design/sync_pll_40m.vhd"
+add_file -vhdl -lib work "design/dll_100m.vhd"
+add_file -vhdl -lib work "design/pll_40m.vhd"
 
 # TrbNet design files
-add_file -vhdl -lib work "../../trbnet/lattice/ecp2m/spi_dpram_32_to_8.vhd"
-add_file -vhdl -lib work "../../trbnet/special/spi_databus_memory.vhd"
-add_file -vhdl -lib work "../../trbnet/special/spi_slim.vhd"
-add_file -vhdl -lib work "../../trbnet/special/spi_master.vhd"
-add_file -vhdl -lib work "../../trbnet/special/handler_lvl1.vhd"
-add_file -vhdl -lib work "../../trbnet/trb_net16_regio_bus_handler.vhd"
-add_file -vhdl -lib work "../../trbnet/trb_net_sbuf.vhd"
-add_file -vhdl -lib work "../../trbnet/trb_net_sbuf5.vhd"
-add_file -vhdl -lib work "../../trbnet/trb_net_sbuf6.vhd"
-add_file -vhdl -lib work "../../trbnet/trb_net16_sbuf.vhd"
-add_file -vhdl -lib work "../../trbnet/trb_net_priority_encoder.vhd"
-add_file -vhdl -lib work "../../trbnet/trb_net_priority_arbiter.vhd"
-add_file -vhdl -lib work "../../trbnet/trb_net16_io_multiplexer.vhd"
-add_file -vhdl -lib work "../../trbnet/trb_net_onewire.vhd"
-add_file -vhdl -lib work "../../trbnet/basics/rom_16x8.vhd"
-add_file -vhdl -lib work "../../trbnet/basics/ram_16x16_dp.vhd"
-add_file -vhdl -lib work "../../trbnet/trb_net16_addresses.vhd"
-add_file -vhdl -lib work "../../trbnet/trb_net_pattern_gen.vhd"
-add_file -vhdl -lib work "../../trbnet/trb_net16_regIO.vhd"
-add_file -vhdl -lib work "../../trbnet/lattice/ecp2m/lattice_ecp2m_fifo_18x1k.vhd"
-add_file -vhdl -lib work "../../trbnet/lattice/ecp2m/trb_net16_fifo_arch.vhd"
-add_file -vhdl -lib work "../../trbnet/trb_net16_api_base.vhd"
-add_file -vhdl -lib work "../../trbnet/trb_net_CRC.vhd"
-add_file -vhdl -lib work "../../trbnet/trb_net16_obuf.vhd"
-add_file -vhdl -lib work "../../trbnet/trb_net16_obuf_nodata.vhd"
-add_file -vhdl -lib work "../../trbnet/trb_net16_ibuf.vhd"
-add_file -vhdl -lib work "../../trbnet/trb_net16_iobuf.vhd"
-add_file -vhdl -lib work "../../trbnet/trb_net16_term_buf.vhd"
-add_file -vhdl -lib work "../../trbnet/trb_net16_ipudata.vhd"
-add_file -vhdl -lib work "../../trbnet/trb_net16_trigger.vhd"
-add_file -vhdl -lib work "../../trbnet/trb_net16_endpoint_hades_full.vhd"
-add_file -vhdl -lib work "../../trbnet/lattice/ecp2m/lattice_ecp2m_fifo_16bit_dualport.vhd"
-add_file -vhdl -lib work "../../trbnet/lattice/ecp2m/trb_net_fifo_16bit_bram_dualport.vhd"
-add_file -vhdl -lib work "../../trbnet/media_interfaces/ecp2m_sfp/serdes_gbe_2.vhd"
-add_file -vhdl -lib work "../../trbnet/media_interfaces/trb_net16_lsm_sfp.vhd"
-add_file -vhdl -lib work "../../trbnet/basics/signal_sync.vhd"
-add_file -vhdl -lib work "../../trbnet/media_interfaces/trb_net16_med_ecp_sfp_gbe.vhd"
-add_file -vhdl -lib work "../../trbnet/lattice/ecp2m/fifo/fifo_19x16_obuf.vhd"
-# add_file -vhdl -lib work "../../trbnet/lattice/ecp2m/fifo/fifo_18x16_media_interface.vhd"
-# add_file -vhdl -lib work "source/sfp_rx_handler.vhd"
+add_file -vhdl -lib work "../trbnet/lattice/ecp2m/spi_dpram_32_to_8.vhd"
+add_file -vhdl -lib work "../trbnet/special/spi_databus_memory.vhd"
+add_file -vhdl -lib work "../trbnet/special/spi_slim.vhd"
+add_file -vhdl -lib work "../trbnet/special/spi_master.vhd"
+add_file -vhdl -lib work "../trbnet/special/handler_lvl1.vhd"
+add_file -vhdl -lib work "../trbnet/trb_net16_regio_bus_handler.vhd"
+add_file -vhdl -lib work "../trbnet/trb_net_sbuf.vhd"
+add_file -vhdl -lib work "../trbnet/trb_net_sbuf5.vhd"
+add_file -vhdl -lib work "../trbnet/trb_net_sbuf6.vhd"
+add_file -vhdl -lib work "../trbnet/trb_net16_sbuf.vhd"
+add_file -vhdl -lib work "../trbnet/trb_net_priority_encoder.vhd"
+add_file -vhdl -lib work "../trbnet/trb_net_priority_arbiter.vhd"
+add_file -vhdl -lib work "../trbnet/trb_net16_io_multiplexer.vhd"
+add_file -vhdl -lib work "../trbnet/trb_net_onewire.vhd"
+add_file -vhdl -lib work "../trbnet/basics/rom_16x8.vhd"
+add_file -vhdl -lib work "../trbnet/basics/ram_16x16_dp.vhd"
+add_file -vhdl -lib work "../trbnet/trb_net16_addresses.vhd"
+add_file -vhdl -lib work "../trbnet/trb_net_pattern_gen.vhd"
+add_file -vhdl -lib work "../trbnet/trb_net16_regIO.vhd"
+add_file -vhdl -lib work "../trbnet/lattice/ecp2m/lattice_ecp2m_fifo_18x1k.vhd"
+add_file -vhdl -lib work "../trbnet/lattice/ecp2m/trb_net16_fifo_arch.vhd"
+add_file -vhdl -lib work "../trbnet/trb_net16_api_base.vhd"
+add_file -vhdl -lib work "../trbnet/trb_net_CRC.vhd"
+add_file -vhdl -lib work "../trbnet/trb_net16_obuf.vhd"
+add_file -vhdl -lib work "../trbnet/trb_net16_obuf_nodata.vhd"
+add_file -vhdl -lib work "../trbnet/trb_net16_ibuf.vhd"
+add_file -vhdl -lib work "../trbnet/trb_net16_iobuf.vhd"
+add_file -vhdl -lib work "../trbnet/trb_net16_term_buf.vhd"
+add_file -vhdl -lib work "../trbnet/trb_net16_ipudata.vhd"
+add_file -vhdl -lib work "../trbnet/trb_net16_trigger.vhd"
+add_file -vhdl -lib work "../trbnet/trb_net16_endpoint_hades_full.vhd"
+add_file -vhdl -lib work "../trbnet/lattice/ecp2m/lattice_ecp2m_fifo_16bit_dualport.vhd"
+add_file -vhdl -lib work "../trbnet/lattice/ecp2m/trb_net_fifo_16bit_bram_dualport.vhd"
+add_file -vhdl -lib work "../trbnet/media_interfaces/ecp2m_sfp/serdes_gbe_2.vhd"
+add_file -vhdl -lib work "../trbnet/media_interfaces/trb_net16_lsm_sfp.vhd"
+add_file -vhdl -lib work "../trbnet/basics/signal_sync.vhd"
+add_file -vhdl -lib work "../trbnet/media_interfaces/trb_net16_med_ecp_sfp_gbe.vhd"
+add_file -vhdl -lib work "../trbnet/lattice/ecp2m/fifo/fifo_19x16_obuf.vhd"
+
+# add_file -vhdl -lib work "../trbnet/lattice/ecp2m/fifo/fifo_18x16_media_interface.vhd"
+# add_file -vhdl -lib work "design/sfp_rx_handler.vhd"
 
 # implementation: "workdir"
 impl -add workdir -type fpga
 
+
 # device options
 set_option -technology LATTICE-ECP2M
 set_option -part LFE2M100E
@@ -165,4 +159,3 @@ project -result_file "workdir/adcmv3.edf"
 set_option -vlog_std v2001
 set_option -project_relative_includes 1
 impl -active "workdir"
-
old mode 100644 (file)
new mode 100755 (executable)
similarity index 100%
rename from constraints_adcmv3.lpf
rename to adcmv3_constraints.lpf
diff --git a/cleanup_workdir.sh b/cleanup_workdir.sh
deleted file mode 100755 (executable)
index fe88ea6..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/bin/sh
-TOPNAME=adcmv3
-
-rm -f workdir/${TOPNAME}.alt
-rm -f workdir/${TOPNAME}.bgn
-rm -f workdir/${TOPNAME}.bit
-rm -f workdir/${TOPNAME}.edf
-rm -f workdir/${TOPNAME}.fse
-rm -f workdir/${TOPNAME}.mrp
-rm -f workdir/${TOPNAME}.ncd
-rm -f workdir/${TOPNAME}.ngd
-rm -f workdir/${TOPNAME}.ngo
-rm -f workdir/${TOPNAME}.ngy
-rm -f workdir/${TOPNAME}.pad
-rm -f workdir/${TOPNAME}.par
-rm -f workdir/${TOPNAME}.sr?
-rm -f workdir/${TOPNAME}.tlg
-rm -f workdir/${TOPNAME}.twr*
diff --git a/compile.pl b/compile.pl
new file mode 100755 (executable)
index 0000000..e8ad213
--- /dev/null
@@ -0,0 +1,216 @@
+#!/usr/bin/perl
+###########################################
+# Script file to run the flow
+###########################################
+
+# You need the tunnels before!
+
+use Data::Dumper;
+use warnings;
+use strict;
+
+# Path settings for ispLEVER tools
+my $lattice_path = '/usr/local/opt/synplify/8/isptools';
+
+# Path settings for SynplifyPRO
+my $synplify_path = '/usr/local/opt/synplify/premier';
+# my $synplify_path = '/scratch/rich/synplify/D-2009.12';
+
+use FileHandle;
+
+$ENV{'SYNPLIFY'}=$synplify_path;
+$ENV{'SYN_DISABLE_RAINBOW_DONGLE'}=1;
+$ENV{'LM_LICENSE_FILE'}="27000\@localhost";
+
+# Design top level entity
+my $TOPNAME="adcmv3";
+
+# FPGA chip description
+my $FAMILYNAME="LATTICEECP2M";
+my $DEVICENAME="LFE2M100E";
+my $PACKAGE="FPBGA900";
+my $SPEEDGRADE="6";
+
+# benchmarking
+my $CTIME_String = localtime(time);
+print "Script started: $CTIME_String\n";
+system("echo $CTIME_String > workdir/benchmark.txt");
+
+# cleanup in workdir
+system("rm workdir/$TOPNAME.alt");
+system("rm workdir/$TOPNAME.bgn");
+system("rm workdir/$TOPNAME.bit");
+system("rm workdir/$TOPNAME.edf");
+system("rm workdir/$TOPNAME.fse");
+system("rm workdir/$TOPNAME.mrp");
+system("rm workdir/$TOPNAME.ncd");
+system("rm workdir/$TOPNAME.ngd");
+system("rm workdir/$TOPNAME.ngo");
+system("rm workdir/$TOPNAME.ngy");
+system("rm workdir/$TOPNAME.pad");
+system("rm workdir/$TOPNAME.par");
+system("rm workdir/$TOPNAME.sr?");
+system("rm workdir/$TOPNAME.tlg");
+system("rm workdir/$TOPNAME.twr*");
+
+# Create full lpf file
+system("cp ../trbnet/pinout/$TOPNAME.lpf workdir/$TOPNAME.lpf");
+system("cat constraints_$TOPNAME.lpf >> workdir/$TOPNAME.lpf");
+
+# Generate timestamp for slowcontrol readback
+my $t=time;
+my $fh = new FileHandle(">version.vhd");
+die "could not open file" if (! defined $fh);
+print $fh <<EOF;
+
+--## attention, automatically generated. Don't change by hand.
+library ieee;
+USE IEEE.std_logic_1164.ALL;
+USE IEEE.std_logic_ARITH.ALL;
+USE IEEE.std_logic_UNSIGNED.ALL;
+use ieee.numeric_std.all;
+
+package version is
+
+    constant VERSION_NUMBER_TIME  : integer   := $t;
+
+end package version;
+EOF
+$fh->close;
+
+# Run Synplify on the design
+system("env| grep LM_");
+my $r = "";
+my $c="$synplify_path/bin/synplify_premier_dp -batch $TOPNAME".".prj";
+$r=execute($c, "do_not_exit" );
+
+# Check for errors
+chdir "workdir";
+$fh = new FileHandle("<$TOPNAME".".srr");
+my @a = <$fh>;
+$fh -> close;
+
+foreach (@a)
+{
+    if(/\@E:/)
+    {
+       $c="cat  $TOPNAME.srr";
+       system($c);
+        print "ERROR_ERROR_ERROR_ERROR_ERROR\n";
+       exit 129;
+    }
+}
+
+# ispLEVER design flow starts here
+# new license file must be given
+$ENV{'LM_LICENSE_FILE'}="1710\@cronos.e12.physik.tu-muenchen.de";
+
+# EDIF2NGD
+$c=qq| $lattice_path/ispfpga/bin/lin/edif2ngd  -l $FAMILYNAME -d $DEVICENAME "$TOPNAME.edf" "$TOPNAME.ngo" |;
+execute($c);
+
+$c=qq|$lattice_path/ispfpga/bin/lin/edfupdate   -t "$TOPNAME.tcy" -w "$TOPNAME.ngo" -m "$TOPNAME.ngo" "$TOPNAME.ngx"|;
+execute($c);
+
+# NGDBUILD
+$c=qq|$lattice_path/ispfpga/bin/lin/ngdbuild  -a $FAMILYNAME -d $DEVICENAME -p "$lattice_path/ispfpga/or5s00/data" -dt "$TOPNAME.ngo" "$TOPNAME.ngd"|;
+execute($c);
+
+# MAP
+my $tpmap = $TOPNAME . "_map" ;
+$c=qq|$lattice_path/ispfpga/bin/lin/map -noinferGSR -a $FAMILYNAME -p $DEVICENAME -t $PACKAGE -s $SPEEDGRADE "$TOPNAME.ngd" -o "$tpmap.ncd"  -mp "$TOPNAME.mrp" "$TOPNAME.lpf" -tdm -td_pack|;
+execute($c);
+
+system("rm $TOPNAME.ncd");
+
+# MULTIPAR
+
+my $fh2 = new FileHandle(">$TOPNAME.p2t");
+die "could not open file" if (! defined $fh2);
+print $fh2 <<EOF;
+
+-w 
+-i 5
+-l 5
+-n 8
+-t 1
+-s 1
+-c 1
+-e 2
+-m nodelist.txt
+-exp parCDP=1
+-exp parCDR=1
+-exp parPlcInLimit=0
+-exp parPlcInNeighborSize=1
+-exp parPathBased=ON
+-exp parHold=ON
+
+EOF
+$fh2->close;
+
+######################################################################
+# -w                                  # overwrite files
+# -i 15                               # maximum number of routing attempts
+# -l 5                                # effort level (1-5)
+# -n 1                                # starting cost table (n=0 loop)
+# -y                                  # delay summary report
+# -s 12                               # number of best results to save
+# -t 1                                # start placement with cost table X
+# -c 1                                # number of cost-based cleanup passes of the router
+# -e 2                                # number of delay-based cleanup passes of the router
+# -m nodelist.txt                     # 
+# -exp parCDP=1                       # 
+# -exp parCDR=1                       # 
+# -exp parPlcInLimit=0                # 
+# -exp parPlcInNeighborSize=1         # 
+# -exp parPathBased=ON                # 
+# -exp parHold=ON                     # 
+# -exp parHoldLimit=10000             # 
+# -exp paruseNBR=1                    # 
+######################################################################
+
+# real multipar
+$c=qq|$lattice_path/ispfpga/bin/lin/multipar -pr "$TOPNAME.prf" -o "mpar_$TOPNAME.rpt" -log "mpar_$TOPNAME.log" -p "$TOPNAME.p2t" "$tpmap.ncd" "$TOPNAME.ncd"|;
+execute($c);
+
+# IOR IO Timing Report
+#$c=qq|$lattice_path/ispfpga/bin/lin/iotiming -s "$TOPNAME.ncd" "$TOPNAME.prf"|;
+#execute($c);
+
+# TWR Timing Report (setup)
+$c=qq|$lattice_path/ispfpga/bin/lin/trce -c -v 15 -o "$TOPNAME.twr.setup" "$TOPNAME.ncd" "$TOPNAME.prf"|;
+execute($c);
+
+# TWR Timing Report (hold)
+$c=qq|$lattice_path/ispfpga/bin/lin/trce -hld -c -v 5 -o "$TOPNAME.twr.hold"  "$TOPNAME.ncd" "$TOPNAME.prf"|;
+execute($c);
+
+# BitGen
+#$c=qq|$lattice_path/ispfpga/bin/lin/bitgen  -w "$TOPNAME.ncd" -f "$TOPNAME.t2b" "$TOPNAME.prf"|;
+$c=qq|$lattice_path/ispfpga/bin/lin/bitgen  -w "$TOPNAME.ncd" "$TOPNAME.prf"|;
+execute($c);
+
+chdir "..";
+
+$CTIME_String = localtime(time);
+print "Script ended: $CTIME_String\n";
+system("echo $CTIME_String >> workdir/benchmark.txt");
+
+exit;
+
+sub execute {
+    my ($c, $op) = @_;
+    #print "option: $op \n";
+    $op = "" if(!$op);
+    print "\n\ncommand to execute: $c \n";
+    $r=system($c);
+    if($r) {
+       print "$!";
+       if($op ne "do_not_exit") {
+           exit;
+       }
+    }
+
+    return $r;
+
+}
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
similarity index 100%
rename from cores/adc_ch_in.lpc
rename to design/adc_ch_in.lpc
similarity index 100%
rename from cores/adc_ch_in.srp
rename to design/adc_ch_in.srp
similarity index 100%
rename from cores/adc_ch_in.vhd
rename to design/adc_ch_in.vhd
old mode 100644 (file)
new mode 100755 (executable)
similarity index 100%
rename from source/adc_crossover.vhd
rename to design/adc_crossover.vhd
old mode 100644 (file)
new mode 100755 (executable)
similarity index 100%
rename from source/adc_data_handler.vhd
rename to design/adc_data_handler.vhd
similarity index 100%
rename from cores/adc_pll.lpc
rename to design/adc_pll.lpc
similarity index 100%
rename from cores/adc_pll.vhd
rename to design/adc_pll.vhd
old mode 100644 (file)
new mode 100755 (executable)
similarity index 96%
rename from adcmv3.vhd
rename to design/adcmv3.vhd
index f8f11da..518cc63
@@ -83,9 +83,9 @@ port(
        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
+       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
+--     DBG_EXP       : out   std_logic_vector(43 downto 0)  -- OK -- SMC50 debug header\r
 );\r
 end;\r
 \r
@@ -215,6 +215,11 @@ type reg_16bit_t is array (0 to 15) of std_logic_vector(15 downto 0);
 signal adc_ctrl_reg             : reg_16bit_t;\r
 signal adc_stat_reg             : reg_16bit_t;\r
 signal raw_buf_dbg              : 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
@@ -287,30 +292,9 @@ signal fe_error                 : std_logic;
 \r
 signal tick_10s                 : std_logic;\r
 \r
--- Debug Multiplexer\r
-signal debug_o                  : std_logic_vector(33 downto 0);\r
-\r
 begin\r
 \r
 \r
--------------------------------------------------------------------------------\r
--- Debug Out \r
--------------------------------------------------------------------------------\r
-  \r
-  DEBUG: for I in 0 to 15 generate\r
-    debug_o(2 * I)        <= sysclk;\r
-    debug_o(2 * I + 1)    <= not sysclk;\r
-  end generate DEBUG;\r
-  debug_o(32)             <= sysclk;\r
-  debug_o(33)             <= not sysclk;\r
-  \r
-  DBG_EXP(31 downto  0)   <= debug_o(31 downto 0);\r
-  DBG_EXP(37 downto 32)   <= (others => '0');\r
-  DBG_EXP(38)             <= debug_o(32);\r
-  DBG_EXP(41 downto 49)   <= (others => '0');\r
-  DBG_EXP(42)             <= debug_o(33);\r
-  DBG_EXP(43)             <= '0';\r
-  \r
 ----------------------------------------\r
 -- Async reset assignment             --\r
 ----------------------------------------\r
@@ -778,6 +762,7 @@ apv_reset <= apv0_reset or apv1_reset or frontend_reset;
 GEN_ADC_LVDS_ON: for i in 0 to 15 generate\r
        adc_on(i)       <= adc_ctrl_reg(i)(0);\r
        lvds_on(i)      <= adc_ctrl_reg(i)(1);\r
+--     adc_stat_reg(i) <= raw_buf_dbg(i);\r
        adc_stat_reg(i) <= buf_data(i)(37 downto 30) & raw_buf_debug(i*4+3 downto i*4+0) & std_logic_vector(to_unsigned(i,4));\r
        broken_buf(i)   <= buf_data(i)(36); -- BUF_BROKEN bit\r
        apv_error(i)    <= buf_data(i)(26); -- APV error frame bit\r
diff --git a/design/adcmv3.vhd~ b/design/adcmv3.vhd~
new file mode 100755 (executable)
index 0000000..9243d76
--- /dev/null
@@ -0,0 +1,1394 @@
+library ieee;\r
+use ieee.std_logic_1164.all;\r
+use ieee.numeric_std.all;\r
+--use ieee.std_logic_unsigned.all;\r
+\r
+library work;\r
+use work.trb_net_std.all;\r
+use work.adcmv3_components.all;\r
+\r
+library ecp2m;\r
+use ecp2m.components.all;\r
+\r
+entity adcmv3 is\r
+port( \r
+       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_swap                : 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_swap                : 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 frontend_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(95 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 trgctrl_debug            : std_logic_vector(63 downto 0);\r
+signal raw_buf_debug            : std_logic_vector(63 downto 0);\r
+--signal trbrich_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
+\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
+type reg_32bit_t is array (0 to 15) of std_logic_vector(31 downto 0);\r
+signal fifo_status              : reg_32bit_t;\r
+\r
+signal ipu_handler_status       : std_logic_vector(31 downto 0);\r
+signal lvl1_release_status      : std_logic_vector(31 downto 0);\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 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
+signal timing_trg_too_long      : 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
+signal ipu_last_num             : 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
+signal cts_clk40m               : std_logic;\r
+signal cts_clk40m_locked        : std_logic;\r
+signal test_reg40m              : std_logic;\r
+\r
+signal serious_error_flag       : std_logic;\r
+signal error_flag               : std_logic;\r
+signal warning_flag             : std_logic;\r
+signal note_flag                : std_logic;\r
+\r
+signal broken_buf               : std_logic_vector(15 downto 0);\r
+signal next_not_configured      : std_logic;\r
+signal not_configured           : std_logic;\r
+\r
+signal apv_error                : std_logic_vector(15 downto 0);\r
+signal next_fe_error            : std_logic;\r
+signal fe_error                 : std_logic;\r
+\r
+signal tick_10s                 : std_logic;\r
+\r
+begin\r
+\r
+\r
+----------------------------------------\r
+-- Async reset assignment             --\r
+----------------------------------------\r
+async_reset <= uc_reset; -- uC reset pin\r
+\r
+\r
+----------------------------------------\r
+-- Reset handler / spike surpression  --\r
+----------------------------------------\r
+THE_RESET_HANDLER: reset_handler \r
+generic map (\r
+       RESET_DELAY     => x"00ff"\r
+)\r
+port map (\r
+       CLEAR_IN        => async_reset,\r
+       CLEAR_N_IN      => '1', -- unused\r
+       CLK_IN          => clk100m,\r
+       SYSCLK_IN       => sysclk,\r
+       PLL_LOCKED_IN   => clk100m_locked,\r
+       RESET_IN        => common_ctrl_reg(3),\r
+       TRB_RESET_IN    => reset_by_trb,\r
+       CLEAR_OUT       => open,\r
+       RESET_OUT       => global_sync_reset,\r
+       DEBUG_OUT       => open\r
+);\r
+\r
+\r
+----------------------------------------\r
+-- Reboot handler (pulse triggered)   --\r
+----------------------------------------\r
+THE_REBOOT_HANDLER: reboot_handler\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
+-- 100MHz PLL -> 40MHz / 100MHz       --\r
+----------------------------------------\r
+-- 100MHz PLL, generating 40MHz and phase shifted 40MHz\r
+THE_40M_PLL: PLL_40M\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( \r
+       CLK         => clk100m,\r
+       RESETN      => '1',\r
+       ALUHOLD     => '0',\r
+       CLKOP       => sysclk,\r
+       CLKOS       => open,\r
+       LOCK        => clk100m_locked\r
+);\r
+\r
+-- 40MHz PLL, takes central clock distributed by CTS\r
+THE_SYNC_PLL: sync_pll_40m\r
+port map(\r
+       CLK     => ext_in(3),\r
+       RESET   => ctrl_pll(4),\r
+       CLKOP   => cts_clk40m,\r
+       LOCK    => cts_clk40m_locked\r
+);\r
+\r
+THE_TEST_REG: process( cts_clk40m, cts_clk40m_locked )\r
+begin\r
+       if( cts_clk40m_locked = '0' ) then\r
+               test_reg40m <= '0';\r
+       else\r
+               if( rising_edge(cts_clk40m) ) then\r
+                       test_reg40m <= not test_reg40m;\r
+               end if;\r
+       end if;\r
+end process THE_TEST_REG;\r
+\r
+----------------------------------------\r
+-- TRB endpoint                       --\r
+----------------------------------------\r
+THE_RICH_TRB: rich_trb\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
+       TICK_10S_OUT                => tick_10s,\r
+       -- Debug\r
+       DEBUG                       => open --trbrich_debug \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 24) <= (others => '0');  -- reserved\r
+lvl1_error_pattern(23)           <= fe_error;         -- frontend error\r
+lvl1_error_pattern(22)           <= not_configured;   -- 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');  -- reserved\r
+lvl1_error_pattern(17)           <= lvl1_trg_missing; -- 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');  -- reserved for common status bits\r
+\r
+\r
+----------------------------------------------\r
+-- mixed status and control bit definitions --\r
+----------------------------------------------\r
+\r
+-- Common status register \r
+-- CSR1\r
+common_stat_reg(63 downto 48) <= ipu_last_num(15 downto 0); -- LVL2 counter\r
+common_stat_reg(47 downto 32) <= local_lvl1_counter;        -- LVL1 counter\r
+-- CSR0\r
+common_stat_reg(31 downto 20) <= x"000";                -- reserved for temp sensor\r
+common_stat_reg(19 downto 14) <= (others => '0');       -- was (19 downto 13)\r
+common_stat_reg(13)           <= timing_trg_too_long;   -- NOT STANDARDIZED!!!!\r
+common_stat_reg(12)           <= '0';                   -- IPU: single broken event\r
+common_stat_reg(11)           <= '0';                   -- IPU: severe problem\r
+common_stat_reg(10)           <= '0';                   -- IPU: partially not found\r
+common_stat_reg(9)            <= ipu_error_pattern(20); -- IPU: not found\r
+common_stat_reg(8)            <= lvl1_trg_missing;      -- LVL1: timing trigger missing\r
+common_stat_reg(7)            <= fe_error;              -- LVL1: frontend error\r
+common_stat_reg(6)            <= not_configured;        -- LVL1: not configured\r
+common_stat_reg(5)            <= '0';                   -- LVL2 counter mismatch (not implemented)\r
+common_stat_reg(4)            <= '0';                   -- LVL1 trigger counter mismatch (reserved)\r
+common_stat_reg(3)            <= note_flag;             -- note flag\r
+common_stat_reg(2)            <= warning_flag;          -- warning flag\r
+common_stat_reg(1)            <= error_flag;            -- error flag\r
+common_stat_reg(0)            <= serious_error_flag;    -- serious error flag\r
+\r
+serious_error_flag <= lvl1_trg_missing or fe_error or not_configured;\r
+error_flag         <= ipu_error_pattern(20);\r
+warning_flag       <= '0';\r
+note_flag          <= '0';\r
+\r
+-- Control register bit padding\r
+ctrl_bithigh  <= ctrl_lvl(31 downto 24) & x"0";\r
+ctrl_bitlow   <= ctrl_lvl(23 downto 16) & x"0";\r
+ctrl_flathigh <= ctrl_lvl(15 downto 8)  & x"0";\r
+ctrl_flatlow  <= ctrl_lvl(7 downto 0)   & x"0";\r
+\r
+-- LVDS driver enable\r
+ena_lvds(0) <= adc_on(4)  or lvds_on(4); \r
+ena_lvds(1) <= adc_on(3)  or lvds_on(3);\r
+ena_lvds(2) <= adc_on(5)  or lvds_on(5);\r
+ena_lvds(3) <= adc_on(2)  or lvds_on(2);\r
+ena_lvds(4) <= adc_on(6)  or lvds_on(6);\r
+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
+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
+enb_lvds(3) <= adc_on(11) or lvds_on(11);\r
+enb_lvds(4) <= adc_on(15) or lvds_on(15);\r
+enb_lvds(5) <= adc_on(8)  or lvds_on(8);\r
+enb_lvds(6) <= adc_on(14) or lvds_on(14);\r
+enb_lvds(7) <= adc_on(9)  or lvds_on(9);\r
+\r
+bp_led <= cts_clk40m_locked; -- LED is against GND!\r
+\r
+\r
+----------------------------------------\r
+-- internal slave bus -> slow control --\r
+----------------------------------------\r
+THE_SLAVE_BUS: slave_bus\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
+       -- FIFO status\r
+       FIFO_STATUS_0_IN            => fifo_status(0),\r
+       FIFO_STATUS_1_IN            => fifo_status(1),\r
+       FIFO_STATUS_2_IN            => fifo_status(2),\r
+       FIFO_STATUS_3_IN            => fifo_status(3),\r
+       FIFO_STATUS_4_IN            => fifo_status(4),\r
+       FIFO_STATUS_5_IN            => fifo_status(5),\r
+       FIFO_STATUS_6_IN            => fifo_status(6),\r
+       FIFO_STATUS_7_IN            => fifo_status(7),\r
+       FIFO_STATUS_8_IN            => fifo_status(8),\r
+       FIFO_STATUS_9_IN            => fifo_status(9),\r
+       FIFO_STATUS_10_IN           => fifo_status(10),\r
+       FIFO_STATUS_11_IN           => fifo_status(11),\r
+       FIFO_STATUS_12_IN           => fifo_status(12),\r
+       FIFO_STATUS_13_IN           => fifo_status(13),\r
+       FIFO_STATUS_14_IN           => fifo_status(14),\r
+       FIFO_STATUS_15_IN           => fifo_status(15),\r
+       IPU_STATUS_IN               => ipu_handler_status,\r
+       RELEASE_STATUS_IN           => lvl1_release_status,\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                   => open, --slave_debug,\r
+       STAT                        => open\r
+); \r
+\r
+-- PLL status register \r
+status_pll(15)          <= clk100m_locked;\r
+status_pll(14)          <= clk40m_locked;\r
+status_pll(13)          <= adc1_valid;\r
+status_pll(12)          <= adc0_valid;\r
+status_pll(11)          <= adc1_swap;\r
+status_pll(10)          <= adc0_swap;\r
+status_pll(9)           <= test_reg40m; --'0';\r
+status_pll(8)           <= cts_clk40m_locked;\r
+status_pll(7)           <= '0';          -- make it human readable\r
+status_pll(6 downto 4)  <= bp_sector_qq(2 downto 0); -- given by backplane DIP switch, for readback only\r
+status_pll(3)           <= '0';          -- make it human readable\r
+status_pll(2 downto 0)  <= bp_module_qq(2 downto 0); -- given by backplane DIP switch, for readback only\r
+\r
+-- Common status register, do not use.\r
+simple_status(127 downto 104) <= (others => '0');\r
+simple_status(103 downto 96)  <= trgctrl_debug(39 downto 32);\r
+simple_status(95 downto 64)   <= trgctrl_debug(31 downto 0);\r
+simple_status(63 downto 32)   <= (others => '0');\r
+simple_status(31 downto 16)   <= local_lvl2_counter;\r
+simple_status(15 downto 0)    <= local_lvl1_counter;\r
+\r
+-- all APVs are reset together, including the common FE reset\r
+THE_APV_PULSE_STRETCH: pulse_stretch\r
+port map(\r
+       CLK_IN                  => sysclk,\r
+       RESET_IN                => global_sync_reset,\r
+       START_IN                => common_ctrl_reg(0),\r
+       PULSE_OUT               => frontend_reset,\r
+       DEBUG_OUT               => open\r
+);\r
+\r
+apv_reset <= apv0_reset or apv1_reset or frontend_reset;\r
+\r
+-- APV status registers\r
+-- "ADC on" bits\r
+-- "LVDS ON" bits \r
+GEN_ADC_LVDS_ON: for i in 0 to 15 generate\r
+       adc_on(i)       <= adc_ctrl_reg(i)(0);\r
+       lvds_on(i)      <= adc_ctrl_reg(i)(1);\r
+       adc_stat_reg(i) <= buf_data(i)(37 downto 30) & raw_buf_debug(i*4+3 downto i*4+0) & std_logic_vector(to_unsigned(i,4));\r
+       broken_buf(i)   <= buf_data(i)(36); -- BUF_BROKEN bit\r
+       apv_error(i)    <= buf_data(i)(26); -- APV error frame bit\r
+end generate GEN_ADC_LVDS_ON;\r
+\r
+next_not_configured <= '1' when (broken_buf /= x"0000") else '0';\r
+next_fe_error       <= '1' when (apv_error  /= x"0000") else '0';\r
+\r
+----------------------------------------\r
+-- IPU endpoint for data transport    --\r
+----------------------------------------\r
+THE_IPU_STAGE: ipu_fifo_stage \r
+port map( \r
+       CLK_IN                      => sysclk,\r
+       RESET_IN                    => global_sync_reset,\r
+       IPU_RESET_IN                => common_ctrl_reg(2),\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
+       IPU_LAST_NUM_OUT            => ipu_last_num,\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
+       FIFO_0_STATUS_OUT           => fifo_status(0),\r
+       FIFO_1_STATUS_OUT           => fifo_status(1),\r
+       FIFO_2_STATUS_OUT           => fifo_status(2),\r
+       FIFO_3_STATUS_OUT           => fifo_status(3),\r
+       FIFO_4_STATUS_OUT           => fifo_status(4),\r
+       FIFO_5_STATUS_OUT           => fifo_status(5),\r
+       FIFO_6_STATUS_OUT           => fifo_status(6),\r
+       FIFO_7_STATUS_OUT           => fifo_status(7),\r
+       FIFO_8_STATUS_OUT           => fifo_status(8),\r
+       FIFO_9_STATUS_OUT           => fifo_status(9),\r
+       FIFO_10_STATUS_OUT          => fifo_status(10),\r
+       FIFO_11_STATUS_OUT          => fifo_status(11),\r
+       FIFO_12_STATUS_OUT          => fifo_status(12),\r
+       FIFO_13_STATUS_OUT          => fifo_status(13),\r
+       FIFO_14_STATUS_OUT          => fifo_status(14),\r
+       FIFO_15_STATUS_OUT          => fifo_status(15),\r
+       IPU_STATUS_OUT              => ipu_handler_status,\r
+       RELEASE_STATUS_OUT          => lvl1_release_status,\r
+       -- Debug signals\r
+       DBG_BSM_OUT                 => open,\r
+       DBG_OUT                     => open --fifo_debug\r
+);\r
+\r
+\r
+----------------------------------------\r
+-- Data processing unit               --\r
+----------------------------------------\r
+THE_PED_CORR_STAGE: ped_corr_ctrl\r
+port map( \r
+       CLK_IN              => sysclk,\r
+       RESET_IN            => global_sync_reset,\r
+       VERBOSE_IN          => common_ctrl_reg(94), -- CCR2-30\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\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 \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
+       ADC_SWAP_OUT    => adc1_swap,\r
+       DEBUG_OUT       => open\r
+);\r
+\r
+\r
+----------------------------------------\r
+-- ADC1 clock domain crossover        --\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( \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 \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
+       ADC_SWAP_OUT    => adc0_swap,\r
+       DEBUG_OUT       => open\r
+);\r
+\r
+\r
+----------------------------------------\r
+-- ADC0 clock domain crossover        --\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( \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( \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
+       TRG_TOO_LONG_OUT    => timing_trg_too_long,     -- only for TRG0 channel\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,        -- missing timing trigger\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
+-- ADC signals                        --\r
+----------------------------------------\r
+adc1_rst <= adc1_reset;\r
+adc1_pd  <= adc1_powerdown;\r
+\r
+THE_ADC1CLK_OUT: ODDRXC\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( \r
+       DA => '1',\r
+       DB => '0',\r
+       CLK => clk_adc,\r
+       RST => '0',\r
+       Q => adc0_clk\r
+);\r
+\r
+\r
+----------------------------------------\r
+-- APV signals                        --\r
+----------------------------------------\r
+-- SDA line output\r
+apv0_sda <= '0' when (apv_sda_out = '0') else 'Z';\r
+apv1_sda <= '0' when (apv_sda_out = '0') else 'Z';\r
+-- SDA line input (wired OR negative logic)\r
+apv_sda_in <= apv0_sda and apv1_sda;\r
+\r
+-- SCL line output\r
+apv0_scl <= '0' when (apv_scl_out = '0') else 'Z';\r
+apv1_scl <= '0' when (apv_scl_out = '0') else 'Z';\r
+-- SCL line input (wired OR negative logic)\r
+apv_scl_in <= apv0_scl and apv1_scl;\r
+\r
+-- Reset signal with correct polarity\r
+apv0_rst    <= not apv_reset;\r
+apv1_rst    <= not apv_reset;\r
+\r
+-- CLK and TRG signal\r
+-- CLK is shifted to meet timing constraints of APV\r
+THE_APV0ACLK_OUT: ODDRXC\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( \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( \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( \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( \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( \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( \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( \r
+       DA => apv_trg,\r
+       DB => apv_trg,\r
+       CLK => clk_apv,\r
+       RST => '0',\r
+       Q => apv1b_trg\r
+);\r
+\r
+\r
+----------------------------------------\r
+-- DIP switch input registers         --\r
+----------------------------------------\r
+-- switch "OFF" => '1', switch "ON" => '0'; so invert it\r
+THE_SYNC_PROC: process( sysclk )\r
+begin\r
+       if( rising_edge(sysclk) ) then\r
+               bp_module_qq   <= bp_module_q;\r
+               bp_module_q    <= not bp_module;\r
+               bp_sector_qq   <= bp_sector_q;\r
+               bp_sector_q    <= not bp_sector;\r
+               not_configured <= next_not_configured; -- status bit\r
+               fe_error       <= next_fe_error; -- status bit\r
+       end if;\r
+end process THE_SYNC_PROC;\r
+\r
+\r
+----------------------------------------\r
+-- LED drivers                        --\r
+----------------------------------------\r
+fpga_led_adc(1) <= not adc1_valid; \r
+fpga_led_adc(0) <= not adc0_valid;\r
+fpga_led(6)     <= not lsm_state_bits(0); -- LED "0"\r
+fpga_led(5)     <= not lsm_state_bits(1); -- LED "1"\r
+fpga_led(4)     <= not lsm_state_bits(2); -- LED "2"\r
+fpga_led(3)     <= not lsm_state_bits(3); -- LED "3"\r
+fpga_led_pll    <= not clk40m_locked;\r
+\r
+\r
+----------------------------------------\r
+-- FPGA debug header driver           --\r
+----------------------------------------\r
+\r
+-- NOT USED, USE EPIC EDITOR INSTEAD!\r
+\r
+------------------------------------------------------------------\r
+-- ORIGINAL STUFF\r
+------------------------------------------------------------------\r
+--debug(42 downto 39) <= (others => '0'); \r
+---- IPU signals\r
+--debug(38 downto 35) <= ipu_number(3 downto 0);\r
+--debug(34)           <= ipu_start_readout;\r
+--debug(33)           <= ipu_dataready;\r
+--debug(32)           <= ipu_read;\r
+--debug(31)           <= ipu_readout_finished;\r
+---- FIFO signals\r
+--debug(30)           <= fifo_start;        -- ped_corr_ctrl -> ipu_stage      => data procession starts (unused in ipu_stage)\r
+--debug(29)           <= fifo_we(0);        -- ped_corr_ctrl -> ipu_stage      => transfer processed data into data FIFO (0)\r
+--debug(28)           <= fifo_done;         -- ped_corr_ctrl -> ipu_stage      => store length count data in small FIFOs\r
+--debug(27)           <= dhdr_store;        -- ped_corr_ctrl -> ipu_stage      => store DHDR information for IPU\r
+--debug(26)           <= dhdr_buf_full;     -- ipu_stage     ->\r
+---- EventDataSheet / buffer signals\r
+--debug(25)           <= buf_done;          -- ped_corr_ctrl -> raw_buf_stage  => raw data has been processed\r
+--debug(24)           <= buf_tick(0);       -- raw_buf_stage -> ped_corr_ctrl  => synced tickmarks\r
+--debug(23)           <= buf_ready(0);      -- raw_buf_stage                   => adc_last\r
+--debug(22)           <= buf_start(0);      -- raw_buf_stage -> ped_corr_ctrl  => adc_start\r
+--debug(21 downto 17) <= buf_data(0)(34 downto 30);\r
+--debug(16)           <= raw_buf_full;      -- raw_buf_stage -> apv_trgctrl    => at least one raw buffer is full\r
+--debug(15)           <= eds_done;          -- ped_corr_ctrl -> apv_trgctrl    => EDS data has been transfered, release buffer entry\r
+--debug(14)           <= eds_avail;         -- apv_trgctrl   -> ped_corr_ctrl  => at least one EDS is available\r
+--debug(13)           <= eds_buf_full;      -- apv_trgctrl                     => EDS buffer is full\r
+--debug(12 downto 8)  <= eds_buf_level; \r
+---- timing trigger signals\r
+--debug(7)            <= timing_trg_found;  -- apv_trgctrl   -> endpoint       => timing trigger has arrived\r
+--debug(6)            <= lvl1_trg_received; -- endpoint      -> apv_trgctrl    => LVL1 trigger packet has arrived\r
+--debug(5)            <= lvl1_trg_missing;  -- apv_trgctrl   -> endpoint       => two consecutive timing triggers found\r
+--debug(4)            <= lvl1_trg_release;  -- apv_trgctrl   -> endpoint       => release LVL1 busy \r
+--debug(3 downto 0)   <= lvl1_trg_number(3 downto 0);\r
+\r
+\r
+----------------------------------------\r
+-- "unused" pins                      --\r
+----------------------------------------\r
+\r
+end adcmv3;\r
old mode 100644 (file)
new mode 100755 (executable)
similarity index 100%
rename from source/adcmv3_components.vhd
rename to design/adcmv3_components.vhd
diff --git a/design/adcmv3_components.vhd~ b/design/adcmv3_components.vhd~
new file mode 100755 (executable)
index 0000000..df71455
--- /dev/null
@@ -0,0 +1,1688 @@
+library ieee;\r
+use ieee.std_logic_1164.all;\r
+use IEEE.numeric_std.ALL;\r
+--use IEEE.numeric_std.ALL;\r
+--use IEEE.std_logic_UNSIGNED.ALL;\r
+\r
+\r
+package adcmv3_components is\r
+\r
+component dbg_reg is\r
+generic(\r
+       WIDTH      : integer := 1\r
+);\r
+port(\r
+       DEBUG_IN   : in  std_logic_vector(WIDTH-1 downto 0);\r
+       DEBUG_OUT  : out std_logic_vector(WIDTH-1 downto 0)\r
+);\r
+end component dbg_reg;\r
+\r
+component reset_handler is\r
+generic(\r
+       RESET_DELAY     : std_logic_vector(15 downto 0) := x"1fff"\r
+);\r
+port( \r
+       CLEAR_IN        : in    std_logic; -- reset input (high active, async)\r
+       CLEAR_N_IN      : in    std_logic; -- reset input (low active, async)\r
+       CLK_IN          : in    std_logic; -- raw master clock, NOT from PLL/DLL!\r
+       SYSCLK_IN       : in    std_logic; -- PLL/DLL remastered clock\r
+       PLL_LOCKED_IN   : in    std_logic; -- master PLL lock signal (async)\r
+       RESET_IN        : in    std_logic; -- general reset signal (SYSCLK)\r
+       TRB_RESET_IN    : in    std_logic; -- TRBnet reset signal (SYSCLK)\r
+       CLEAR_OUT       : out   std_logic; -- async reset out, USE WITH CARE!\r
+       RESET_OUT       : out   std_logic; -- synchronous reset out (SYSCLK)\r
+       DEBUG_OUT       : out   std_logic_vector(15 downto 0)\r
+);\r
+end component reset_handler;\r
+\r
+component sync_pll_40m 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 sync_pll_40m;\r
+\r
+component raw_buf_stage 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;\r
+\r
+component adc_data_handler 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
+       ADC_SWAP_OUT    : out   std_logic;\r
+       DEBUG_OUT       : out   std_logic_vector(15 downto 0)\r
+);\r
+end component adc_data_handler;\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(\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 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 slv_status 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_ACK_OUT     : out   std_logic;\r
+       SLV_DATA_OUT    : out   std_logic_vector(31 downto 0);\r
+       -- I/O to the backend\r
+       STATUS_IN       : in    std_logic_vector(31 downto 0)\r
+);\r
+end component slv_status;\r
+\r
+component slv_status_bank 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(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_OUT    : out   std_logic_vector(31 downto 0);\r
+       -- I/O to the backend\r
+       STAT_0_IN       : in    std_logic_vector(31 downto 0);\r
+       STAT_1_IN       : in    std_logic_vector(31 downto 0);\r
+       STAT_2_IN       : in    std_logic_vector(31 downto 0);\r
+       STAT_3_IN       : in    std_logic_vector(31 downto 0);\r
+       STAT_4_IN       : in    std_logic_vector(31 downto 0);\r
+       STAT_5_IN       : in    std_logic_vector(31 downto 0);\r
+       STAT_6_IN       : in    std_logic_vector(31 downto 0);\r
+       STAT_7_IN       : in    std_logic_vector(31 downto 0);\r
+       STAT_8_IN       : in    std_logic_vector(31 downto 0);\r
+       STAT_9_IN       : in    std_logic_vector(31 downto 0);\r
+       STAT_10_IN      : in    std_logic_vector(31 downto 0);\r
+       STAT_11_IN      : in    std_logic_vector(31 downto 0);\r
+       STAT_12_IN      : in    std_logic_vector(31 downto 0);\r
+       STAT_13_IN      : in    std_logic_vector(31 downto 0);\r
+       STAT_14_IN      : in    std_logic_vector(31 downto 0);\r
+       STAT_15_IN      : in    std_logic_vector(31 downto 0)\r
+);\r
+end component slv_status_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 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(3*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
+       TICK_10S_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
+       -- FIFO status\r
+       FIFO_STATUS_0_IN        : in    std_logic_vector(31 downto 0);\r
+       FIFO_STATUS_1_IN        : in    std_logic_vector(31 downto 0);\r
+       FIFO_STATUS_2_IN        : in    std_logic_vector(31 downto 0);\r
+       FIFO_STATUS_3_IN        : in    std_logic_vector(31 downto 0);\r
+       FIFO_STATUS_4_IN        : in    std_logic_vector(31 downto 0);\r
+       FIFO_STATUS_5_IN        : in    std_logic_vector(31 downto 0);\r
+       FIFO_STATUS_6_IN        : in    std_logic_vector(31 downto 0);\r
+       FIFO_STATUS_7_IN        : in    std_logic_vector(31 downto 0);\r
+       FIFO_STATUS_8_IN        : in    std_logic_vector(31 downto 0);\r
+       FIFO_STATUS_9_IN        : in    std_logic_vector(31 downto 0);\r
+       FIFO_STATUS_10_IN       : in    std_logic_vector(31 downto 0);\r
+       FIFO_STATUS_11_IN       : in    std_logic_vector(31 downto 0);\r
+       FIFO_STATUS_12_IN       : in    std_logic_vector(31 downto 0);\r
+       FIFO_STATUS_13_IN       : in    std_logic_vector(31 downto 0);\r
+       FIFO_STATUS_14_IN       : in    std_logic_vector(31 downto 0);\r
+       FIFO_STATUS_15_IN       : in    std_logic_vector(31 downto 0);\r
+       IPU_STATUS_IN           : in    std_logic_vector(31 downto 0);\r
+       RELEASE_STATUS_IN       : in    std_logic_vector(31 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
+\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
+       TRG_TOO_LONG_OUT    : out   std_logic; -- only for TRG0 channel\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
+       VERBOSE_IN          : in    std_logic; -- add debug words for each APV\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
+       IPU_RESET_IN                : in    std_logic; -- requested by TRBnet standard\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
+       IPU_LAST_NUM_OUT            : out   std_logic_vector(31 downto 0); -- last number received / readout\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
+       -- data buffer status\r
+       FIFO_0_STATUS_OUT           : out   std_logic_vector(31 downto 0);\r
+       FIFO_1_STATUS_OUT           : out   std_logic_vector(31 downto 0);\r
+       FIFO_2_STATUS_OUT           : out   std_logic_vector(31 downto 0);\r
+       FIFO_3_STATUS_OUT           : out   std_logic_vector(31 downto 0);\r
+       FIFO_4_STATUS_OUT           : out   std_logic_vector(31 downto 0);\r
+       FIFO_5_STATUS_OUT           : out   std_logic_vector(31 downto 0);\r
+       FIFO_6_STATUS_OUT           : out   std_logic_vector(31 downto 0);\r
+       FIFO_7_STATUS_OUT           : out   std_logic_vector(31 downto 0);\r
+       FIFO_8_STATUS_OUT           : out   std_logic_vector(31 downto 0);\r
+       FIFO_9_STATUS_OUT           : out   std_logic_vector(31 downto 0);\r
+       FIFO_10_STATUS_OUT          : out   std_logic_vector(31 downto 0);\r
+       FIFO_11_STATUS_OUT          : out   std_logic_vector(31 downto 0);\r
+       FIFO_12_STATUS_OUT          : out   std_logic_vector(31 downto 0);\r
+       FIFO_13_STATUS_OUT          : out   std_logic_vector(31 downto 0);\r
+       FIFO_14_STATUS_OUT          : out   std_logic_vector(31 downto 0);\r
+       FIFO_15_STATUS_OUT          : out   std_logic_vector(31 downto 0);\r
+       IPU_STATUS_OUT              : out   std_logic_vector(31 downto 0);\r
+       RELEASE_STATUS_OUT          : out   std_logic_vector(31 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_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
+       TRG_TOO_LONG_OUT    : out   std_logic; -- only for TRG0 channel\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
+       ALMOSTFULL  : 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 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
+       EDS_DATA_IN     : in    std_logic_vector(39 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
+       VERBOSE_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 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 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
similarity index 100%
rename from source/apv_locker.vhd
rename to design/apv_locker.vhd
similarity index 100%
rename from cores/apv_map_mem.lpc
rename to design/apv_map_mem.lpc
similarity index 100%
rename from cores/apv_map_mem.srp
rename to design/apv_map_mem.srp
similarity index 100%
rename from cores/apv_map_mem.vhd
rename to design/apv_map_mem.vhd
old mode 100644 (file)
new mode 100755 (executable)
similarity index 100%
rename from source/apv_pc_nc_alu.vhd
rename to design/apv_pc_nc_alu.vhd
old mode 100644 (file)
new mode 100755 (executable)
similarity index 100%
rename from source/apv_raw_buffer.vhd
rename to design/apv_raw_buffer.vhd
old mode 100644 (file)
new mode 100755 (executable)
similarity index 100%
rename from source/apv_trgctrl.vhd
rename to design/apv_trgctrl.vhd
similarity index 100%
rename from source/buf_toc.vhd
rename to design/buf_toc.vhd
similarity index 100%
rename from cores/crossover.lpc
rename to design/crossover.lpc
similarity index 100%
rename from cores/crossover.srp
rename to design/crossover.srp
similarity index 100%
rename from cores/crossover.vhd
rename to design/crossover.vhd
old mode 100644 (file)
new mode 100755 (executable)
similarity index 100%
rename from source/dbg_reg.vhd
rename to design/dbg_reg.vhd
similarity index 100%
rename from cores/dll_100m.lpc
rename to design/dll_100m.lpc
similarity index 100%
rename from cores/dll_100m.vhd
rename to design/dll_100m.vhd
similarity index 100%
rename from cores/dpram_8x19.lpc
rename to design/dpram_8x19.lpc
similarity index 100%
rename from cores/dpram_8x19.srp
rename to design/dpram_8x19.srp
similarity index 100%
rename from cores/dpram_8x19.vhd
rename to design/dpram_8x19.vhd
similarity index 100%
rename from source/eds_buf.vhd
rename to design/eds_buf.vhd
similarity index 100%
rename from cores/fifo_16x11.lpc
rename to design/fifo_16x11.lpc
similarity index 100%
rename from cores/fifo_16x11.srp
rename to design/fifo_16x11.srp
similarity index 100%
rename from cores/fifo_16x11.vhd
rename to design/fifo_16x11.vhd
similarity index 100%
rename from cores/fifo_1kx18.lpc
rename to design/fifo_1kx18.lpc
similarity index 100%
rename from cores/fifo_1kx18.srp
rename to design/fifo_1kx18.srp
similarity index 100%
rename from cores/fifo_1kx18.vhd
rename to design/fifo_1kx18.vhd
similarity index 100%
rename from cores/fifo_2kx27.lpc
rename to design/fifo_2kx27.lpc
similarity index 100%
rename from cores/fifo_2kx27.vhd
rename to design/fifo_2kx27.vhd
similarity index 100%
rename from source/i2c_gstart.vhd
rename to design/i2c_gstart.vhd
similarity index 100%
rename from source/i2c_master.vhd
rename to design/i2c_master.vhd
similarity index 100%
rename from source/i2c_sendb.vhd
rename to design/i2c_sendb.vhd
similarity index 100%
rename from source/i2c_slim.vhd
rename to design/i2c_slim.vhd
similarity index 100%
rename from cores/input_bram.lpc
rename to design/input_bram.lpc
similarity index 100%
rename from cores/input_bram.srp
rename to design/input_bram.srp
similarity index 100%
rename from cores/input_bram.vhd
rename to design/input_bram.vhd
old mode 100644 (file)
new mode 100755 (executable)
similarity index 100%
rename from source/ipu_fifo_stage.vhd
rename to design/ipu_fifo_stage.vhd
diff --git a/design/ipu_fifo_stage.vhd~ b/design/ipu_fifo_stage.vhd~
new file mode 100755 (executable)
index 0000000..f0824e2
--- /dev/null
@@ -0,0 +1,708 @@
+library ieee;\r
+use ieee.std_logic_1164.all;\r
+use ieee.numeric_std.all;\r
+\r
+library work;\r
+use work.adcmv3_components.all;\r
+\r
+-- Missing: FIFO buffer handling, full / empty checks\r
+\r
+entity ipu_fifo_stage is\r
+port(\r
+       CLK_IN                      : in    std_logic; -- 100MHz local clock\r
+       RESET_IN                    : in    std_logic; -- synchronous reset\r
+       IPU_RESET_IN                : in    std_logic; -- requested by TRBnet standard\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
+       IPU_LAST_NUM_OUT            : out   std_logic_vector(31 downto 0); -- last number received / readout\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
+       -- data buffer status\r
+       FIFO_0_STATUS_OUT           : out   std_logic_vector(31 downto 0);\r
+       FIFO_1_STATUS_OUT           : out   std_logic_vector(31 downto 0);\r
+       FIFO_2_STATUS_OUT           : out   std_logic_vector(31 downto 0);\r
+       FIFO_3_STATUS_OUT           : out   std_logic_vector(31 downto 0);\r
+       FIFO_4_STATUS_OUT           : out   std_logic_vector(31 downto 0);\r
+       FIFO_5_STATUS_OUT           : out   std_logic_vector(31 downto 0);\r
+       FIFO_6_STATUS_OUT           : out   std_logic_vector(31 downto 0);\r
+       FIFO_7_STATUS_OUT           : out   std_logic_vector(31 downto 0);\r
+       FIFO_8_STATUS_OUT           : out   std_logic_vector(31 downto 0);\r
+       FIFO_9_STATUS_OUT           : out   std_logic_vector(31 downto 0);\r
+       FIFO_10_STATUS_OUT          : out   std_logic_vector(31 downto 0);\r
+       FIFO_11_STATUS_OUT          : out   std_logic_vector(31 downto 0);\r
+       FIFO_12_STATUS_OUT          : out   std_logic_vector(31 downto 0);\r
+       FIFO_13_STATUS_OUT          : out   std_logic_vector(31 downto 0);\r
+       FIFO_14_STATUS_OUT          : out   std_logic_vector(31 downto 0);\r
+       FIFO_15_STATUS_OUT          : out   std_logic_vector(31 downto 0);\r
+       IPU_STATUS_OUT              : out   std_logic_vector(31 downto 0);\r
+       RELEASE_STATUS_OUT          : out   std_logic_vector(31 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;\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_int     : std_logic_vector(47 downto 0);\r
+signal dhdr_fifo_out_int    : 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 unsigned(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_cnt_t is array (0 to 15) of unsigned(11 downto 0);\r
+signal fifo_data_free_x     : fifo_cnt_t;\r
+signal fifo_data_free       : fifo_cnt_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
+type fifo_lunused_t is array (0 to 15) of std_logic_vector(6 downto 0);\r
+signal fifo_lunused         : fifo_lunused_t;\r
+type fifo_status_t is array (0 to 15) of std_logic_vector(31 downto 0);\r
+signal fifo_status          : fifo_status_t;\r
+\r
+signal ipu_status           : std_logic_vector(31 downto 0);\r
+signal release_status       : std_logic_vector(31 downto 0);\r
+\r
+signal dfifo_available_x    : std_logic_vector(15 downto 0);\r
+signal dfifo_available      : std_logic_vector(15 downto 0);\r
+signal dfifo_empty          : std_logic_vector(15 downto 0);\r
+signal dfifo_full           : std_logic_vector(15 downto 0);\r
+\r
+signal lfifo_empty          : std_logic_vector(15 downto 0);\r
+signal lfifo_almostfull     : 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             : unsigned(15 downto 0); -- cycle counter\r
+\r
+signal next_dhdr_buf_full   : std_logic;\r
+signal dhdr_buf_full        : std_logic;\r
+\r
+signal reset_all            : std_logic;\r
+\r
+-- Jan Michel's status bits (faked)\r
+signal status_bits          : std_logic_vector(3 downto 0);\r
+\r
+attribute syn_noprune : boolean;\r
+attribute syn_noprune of THE_DBG_REG : label is true;\r
+signal my_debug                 : std_logic_vector(15 downto 0);\r
+\r
+begin\r
+\r
+--------------------------------------------------------------------\r
+-- Test the NOPRUNE + EPIC feature\r
+--------------------------------------------------------------------\r
+THE_DBG_REG: dbg_reg\r
+generic map(\r
+       WIDTH => 16\r
+)\r
+port map(\r
+       DEBUG_IN   => my_debug,\r
+       DEBUG_OUT  => open\r
+);\r
+\r
+my_debug(15)           <= next_dataready; \r
+my_debug(14 downto 8)  <= fifo_wcnt(0)(6 downto 0);\r
+my_debug(7 downto 0)   <= bsm_x;\r
+--------------------------------------------------------------------\r
+--------------------------------------------------------------------\r
+\r
+---------------------------------------------------------------------------\r
+-- Combine syncronous resets\r
+---------------------------------------------------------------------------\r
+reset_all <= RESET_IN or IPU_RESET_IN;\r
+\r
+---------------------------------------------------------------------------\r
+-- Statemachine\r
+---------------------------------------------------------------------------\r
+\r
+-- state registers\r
+STATE_MEM: process( CLK_IN )\r
+begin\r
+       if( rising_edge(CLK_IN) ) then\r
+               if( reset_all = '1' ) then\r
+                       CURRENT_STATE    <= SLEEP;\r
+                       rd_lfifo         <= '0';\r
+                       dataready        <= '0';\r
+                       set_hdr          <= '0';\r
+                       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
+                       rd_lfifo         <= next_rd_lfifo;\r
+                       dataready        <= next_dataready;\r
+                       set_hdr          <= next_set_hdr;\r
+                       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
+end process STATE_MEM;\r
+\r
+-- state transitions\r
+STATE_TRANSFORM: process( CURRENT_STATE, dhdr_avail, IPU_START_READOUT_IN, IPU_READ_IN, fifo_last, fifo_sel(4) )\r
+begin\r
+       NEXT_STATE         <= SLEEP; -- avoid latches\r
+       next_rd_lfifo      <= '0';\r
+       next_dataready     <= '0';\r
+       next_set_hdr       <= '0';\r
+       next_set_data      <= '0';\r
+       next_ld_todo       <= '0';\r
+       next_ack_todo      <= '0';\r
+       next_preload       <= '0';\r
+       next_finished      <= '0';\r
+       \r
+       case CURRENT_STATE is\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
+                                               next_set_hdr  <= '1';\r
+                                               next_ld_todo  <= '1';\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
+                                                       NEXT_STATE     <= GETD; -- there are datawords to send\r
+                                                       next_set_data  <= '1';\r
+                                                       next_ack_todo  <= '1';\r
+                                               elsif( (IPU_READ_IN = '1') and (fifo_sel(4) = '1') ) then\r
+                                                       NEXT_STATE     <= DONE; -- only DHDR, no data words\r
+                                                       next_finished  <= '1';\r
+                                               else\r
+                                                       NEXT_STATE     <= WHDR;\r
+                                                       next_dataready <= '1';\r
+                                               end if;\r
+               when GETD   =>  if( fifo_last = '1' ) then\r
+                                                       NEXT_STATE     <= DEL0;\r
+                                               else\r
+                                                       NEXT_STATE     <= WAITD;\r
+                                                       next_dataready <= '1';\r
+                                               end if;\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
+                                               next_dataready <= '1';\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
+                                               elsif( (IPU_READ_IN = '1') and (fifo_sel(4) = '1') ) then\r
+                                                       NEXT_STATE     <= DONE;\r
+                                                       next_finished  <= '1';\r
+                                               else\r
+                                                       NEXT_STATE     <= WAITDL;\r
+                                                       next_dataready <= '1';\r
+                                               end if;\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
+       end case;\r
+end process STATE_TRANSFORM;\r
+\r
+-- Handshaking to IPU data channel\r
+IPU_DATAREADY_OUT        <= dataready;\r
+IPU_READOUT_FINISHED_OUT <= finished;\r
+\r
+-- length information can be simply copied\r
+IPU_LENGTH_OUT <= dhdr_fifo_out_int(47 downto 32);\r
+\r
+-- IPU error pattern\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
+                                               status_bits <= x"0";\r
+               when RDLF   =>  bsm_x       <= x"11"; --x"01";\r
+                                               status_bits <= x"1";\r
+               when GETFD  =>  bsm_x       <= x"22"; --x"02";\r
+                                               status_bits <= x"2";\r
+               when DELH   =>  bsm_x       <= x"33"; --x"03";\r
+                                               status_bits <= x"3";\r
+               when WHDR   =>  bsm_x       <= x"f4"; --x"04";\r
+                                               status_bits <= x"3";\r
+               when GETD   =>  bsm_x       <= x"e5"; --x"05";\r
+                                               status_bits <= x"4";\r
+               when WAITD  =>  bsm_x       <= x"d6"; --x"06";\r
+                                               status_bits <= x"4";\r
+               when WAITDL =>  bsm_x       <= x"c7"; --x"07";\r
+                                               status_bits <= x"4";\r
+               when DEL0   =>  bsm_x       <= x"b8"; --x"08";\r
+                                               status_bits <= x"4";\r
+               when DONE   =>  bsm_x       <= x"a9"; --x"09";\r
+                                               status_bits <= x"5";\r
+               when others =>  bsm_x       <= x"ff";\r
+                                               status_bits <= x"f";\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
+\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_int <= 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(\r
+               DATA        => fifo_in_data(i),\r
+               CLOCK       => CLK_IN,\r
+               WREN        => FIFO_WE_IN(i),\r
+               RDEN        => comb_rd_dfifo(i),\r
+               RESET       => reset_all,\r
+               Q           => fifo_out_data(i),\r
+               WCNT        => fifo_wcnt(i),\r
+               EMPTY       => dfifo_empty(i),\r
+               FULL        => dfifo_full(i)\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 (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
+\r
+       -- getting the number of free entries in the data fifo by subtracting [size] - [used entries]\r
+       fifo_data_free_x(i) <= x"800" - unsigned(fifo_wcnt(i));\r
+\r
+       -- check if next event will still fit into data FIFO\r
+       dfifo_available_x(i) <= '1' when (fifo_data_free(i) > unsigned(FIFO_SPACE_REQ_IN)) else '0';\r
+\r
+       THE_SMALL_SYNCER: process( clk_in)\r
+       begin\r
+               if( rising_edge(clk_in) ) then\r
+                       fifo_data_free(i)  <= fifo_data_free_x(i);\r
+                       dfifo_available(i) <= dfifo_available_x(i);\r
+               end if;\r
+       end process THE_SMALL_SYNCER;   \r
+\r
+       -- length fifo - stores the number of words to fetch from dfifo\r
+       THE_LFIFO: fifo_1kx18\r
+       port map(\r
+               DATA(17 downto 15)  => dhdr_fifo_in_int(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_all,\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), -- BUG\r
+               ALMOSTFULL          => lfifo_almostfull(i), -- BUG\r
+               FULL                => lfifo_full(i) -- BUG\r
+       );\r
+       next_todo_list(i) <= fifo_ldata(i)(10);\r
+\r
+       -- reassamble the DHDR information      \r
+       dhdr_fifo_out_int(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
+                       if( (reset_all = '1') or (rd_lfifo = '1') ) then\r
+                               fifo_todo(i) <= (others => '0');\r
+                       elsif( ld_todo = '1' ) then\r
+                               fifo_todo(i) <= unsigned(fifo_ldata(i)(9 downto 0));\r
+                       elsif( comb_rd_dfifo(i) = '1' ) then\r
+                               fifo_todo(i) <= fifo_todo(i) - 1;\r
+                       end if;\r
+               end if;\r
+       end process THE_TODO_CTR_PROC;\r
+\r
+       next_fifo_done(i) <= '1' when ( fifo_todo(i) = b"00_0000_0000" ) else '0';\r
+\r
+       -- FIFO status bits, compatible with Jans data handler\r
+       fifo_status(i)(31 downto 28)  <= (others => '0');        -- reserved\r
+       fifo_status(i)(27)            <= '0'; --fifo_done_in;    -- length FIFO write strobe (not implemented)\r
+       fifo_status(i)(26)            <= lfifo_full(i);          -- length FIFO full. This is an error flag.\r
+       fifo_status(i)(25)            <= lfifo_almostfull(i);    -- length FIFO almost full\r
+       fifo_status(i)(24)            <= lfifo_empty(i);         -- length FIFO empty\r
+       fifo_status(i)(23)            <= '0';                    -- reserved\r
+       fifo_status(i)(22)            <= '0'; -- buffer state machine waiting for busy release\r
+       fifo_status(i)(21)            <= '0'; -- buffer state machine busy waiting for data\r
+       fifo_status(i)(20)            <= '0'; -- buffer state machine idle\r
+       fifo_status(i)(19)            <= '0'; --FIFO_WE_IN(i);   -- FIFO write strobe (not implemented)\r
+       fifo_status(i)(18)            <= dfifo_full(i);          -- FIFO full. This is an error flag.\r
+       fifo_status(i)(17)            <= not dfifo_available(i); -- FIFO almost full\r
+       fifo_status(i)(16)            <= dfifo_empty(i);         -- FIFO empty\r
+       fifo_status(i)(15 downto 0)   <= b"0000" & fifo_wcnt(i); -- current fill level of FIFO\r
+\r
+end generate GEN_FIFO;\r
+\r
+comb_ack_todo <= fifo_last and set_data;\r
+\r
+next_dhdr_buf_full <= '1' when (lfifo_almostfull(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_int(15 downto 0) ) else '0';\r
+\r
+THE_TRGNUM_MATCH_PROC: process( CLK_IN )\r
+begin\r
+       if( rising_edge(CLK_IN) ) then\r
+               if( reset_all = '1' ) then\r
+                       trgnum_match  <= '0';\r
+                       my_trg_number <= (others => '0');\r
+               elsif( set_hdr = '1' ) then\r
+                       trgnum_match  <= next_trgnum_match;\r
+                       my_trg_number <= IPU_NUMBER_IN & dhdr_fifo_out_int(15 downto 0);\r
+               end if;\r
+       end if;\r
+end process THE_TRGNUM_MATCH_PROC;\r
+\r
+\r
+---------------------------------------------------------------------------\r
+-- priority encoding is used to select the next buffer for readout\r
+---------------------------------------------------------------------------\r
+THE_PRI_ENCODER_PROC: process( todo_list, fifo_done )\r
+begin\r
+       if   ( todo_list(15 downto 15) = "1" ) then\r
+               next_fifo_sel <= "01111"; next_sel_fifo <= b"1000_0000_0000_0000"; next_fifo_last <= fifo_done(15);\r
+       elsif( todo_list(15 downto 14) = "01" ) then\r
+               next_fifo_sel <= "01110"; next_sel_fifo <= b"0100_0000_0000_0000"; next_fifo_last <= fifo_done(14);\r
+       elsif( todo_list(15 downto 13) = "001" ) then\r
+               next_fifo_sel <= "01101"; next_sel_fifo <= b"0010_0000_0000_0000"; next_fifo_last <= fifo_done(13);\r
+       elsif( todo_list(15 downto 12) = "0001" ) then\r
+               next_fifo_sel <= "01100"; next_sel_fifo <= b"0001_0000_0000_0000"; next_fifo_last <= fifo_done(12);\r
+       elsif( todo_list(15 downto 11) = "00001" ) then\r
+               next_fifo_sel <= "01011"; next_sel_fifo <= b"0000_1000_0000_0000"; next_fifo_last <= fifo_done(11);\r
+       elsif( todo_list(15 downto 10) = "000001" ) then\r
+               next_fifo_sel <= "01010"; next_sel_fifo <= b"0000_0100_0000_0000"; next_fifo_last <= fifo_done(10);\r
+       elsif( todo_list(15 downto 9)  = "0000001" ) then\r
+               next_fifo_sel <= "01001"; next_sel_fifo <= b"0000_0010_0000_0000"; next_fifo_last <= fifo_done(9);\r
+       elsif( todo_list(15 downto 8)  = "00000001" ) then\r
+               next_fifo_sel <= "01000"; next_sel_fifo <= b"0000_0001_0000_0000"; next_fifo_last <= fifo_done(8);\r
+       elsif( todo_list(15 downto 7)  = "000000001" ) then\r
+               next_fifo_sel <= "00111"; next_sel_fifo <= b"0000_0000_1000_0000"; next_fifo_last <= fifo_done(7);\r
+       elsif( todo_list(15 downto 6)  = "0000000001" ) then\r
+               next_fifo_sel <= "00110"; next_sel_fifo <= b"0000_0000_0100_0000"; next_fifo_last <= fifo_done(6);\r
+       elsif( todo_list(15 downto 5)  = "00000000001" ) then\r
+               next_fifo_sel <= "00101"; next_sel_fifo <= b"0000_0000_0010_0000"; next_fifo_last <= fifo_done(5);\r
+       elsif( todo_list(15 downto 4)  = "000000000001" ) then\r
+               next_fifo_sel <= "00100"; next_sel_fifo <= b"0000_0000_0001_0000"; next_fifo_last <= fifo_done(4);\r
+       elsif( todo_list(15 downto 3)  = "0000000000001" ) then\r
+               next_fifo_sel <= "00011"; next_sel_fifo <= b"0000_0000_0000_1000"; next_fifo_last <= fifo_done(3);\r
+       elsif( todo_list(15 downto 2)  = "00000000000001" ) then\r
+               next_fifo_sel <= "00010"; next_sel_fifo <= b"0000_0000_0000_0100"; next_fifo_last <= fifo_done(2);\r
+       elsif( todo_list(15 downto 1)  = "000000000000001" ) then\r
+               next_fifo_sel <= "00001"; next_sel_fifo <= b"0000_0000_0000_0010"; next_fifo_last <= fifo_done(1);\r
+       elsif( todo_list(15 downto 0)  = "0000000000000001" ) then\r
+               next_fifo_sel <= "00000"; next_sel_fifo <= b"0000_0000_0000_0001"; next_fifo_last <= fifo_done(0);\r
+       else\r
+               next_fifo_sel <= "10000"; next_sel_fifo <= b"0000_0000_0000_0000"; next_fifo_last <= '0';\r
+       end if;\r
+end process THE_PRI_ENCODER_PROC;\r
+\r
+-- We need to clear single bits during readout here!!!\r
+THE_TODO_LIST_PROC: process( CLK_IN )\r
+begin\r
+       if( rising_edge(CLK_IN) ) then\r
+               if( reset_all = '1' ) then\r
+                       todo_list <= (others => '0');\r
+               elsif( ld_todo = '1' ) then\r
+                       todo_list <= next_todo_list; -- store initial todo list\r
+               elsif( comb_ack_todo = '1' ) then\r
+                       todo_list <= todo_list and not sel_fifo; -- does this work?!?\r
+               end if;\r
+       end if;\r
+end process THE_TODO_LIST_PROC;\r
+\r
+\r
+\r
+---------------------------------------------------------------------------\r
+-- synchronizing process\r
+---------------------------------------------------------------------------\r
+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
+               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
+---------------------------------------------------------------------------\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
+                );\r
+\r
+---------------------------------------------------------------------------\r
+-- Data multiplexer\r
+---------------------------------------------------------------------------\r
+THE_DATA_MUX_PROC: process( CLK_IN )\r
+begin\r
+       if( rising_edge(CLK_IN) ) then\r
+               if   ( set_hdr = '1' ) then\r
+                       ipu_out_data <= dhdr_fifo_out_int(31 downto 0);\r
+               elsif( comb_st_data(0) = '1' ) then\r
+                       ipu_out_data <= fifo_out_data(0)(21)  & SECTOR_IN(2 downto 0) & MODULE_IN(2 downto 0) & new_apv_num & fifo_out_data(0)(20 downto 0);\r
+               elsif( comb_st_data(1) = '1' ) then\r
+                       ipu_out_data <= fifo_out_data(1)(21)  & SECTOR_IN(2 downto 0) & MODULE_IN(2 downto 0) & new_apv_num & fifo_out_data(1)(20 downto 0);\r
+               elsif( comb_st_data(2) = '1' ) then\r
+                       ipu_out_data <= fifo_out_data(2)(21)  & SECTOR_IN(2 downto 0) & MODULE_IN(2 downto 0) & new_apv_num & fifo_out_data(2)(20 downto 0);\r
+               elsif( comb_st_data(3) = '1' ) then\r
+                       ipu_out_data <= fifo_out_data(3)(21)  & SECTOR_IN(2 downto 0) & MODULE_IN(2 downto 0) & new_apv_num & fifo_out_data(3)(20 downto 0);\r
+               elsif( comb_st_data(4) = '1' ) then\r
+                       ipu_out_data <= fifo_out_data(4)(21)  & SECTOR_IN(2 downto 0) & MODULE_IN(2 downto 0) & new_apv_num & fifo_out_data(4)(20 downto 0);\r
+               elsif( comb_st_data(5) = '1' ) then\r
+                       ipu_out_data <= fifo_out_data(5)(21)  & SECTOR_IN(2 downto 0) & MODULE_IN(2 downto 0) & new_apv_num & fifo_out_data(5)(20 downto 0);\r
+               elsif( comb_st_data(6) = '1' ) then\r
+                       ipu_out_data <= fifo_out_data(6)(21)  & SECTOR_IN(2 downto 0) & MODULE_IN(2 downto 0) & new_apv_num & fifo_out_data(6)(20 downto 0);\r
+               elsif( comb_st_data(7) = '1' ) then\r
+                       ipu_out_data <= fifo_out_data(7)(21)  & SECTOR_IN(2 downto 0) & MODULE_IN(2 downto 0) & new_apv_num & fifo_out_data(7)(20 downto 0);\r
+               elsif( comb_st_data(8) = '1' ) then\r
+                       ipu_out_data <= fifo_out_data(8)(21)  & SECTOR_IN(2 downto 0) & MODULE_IN(2 downto 0) & new_apv_num & fifo_out_data(8)(20 downto 0);\r
+               elsif( comb_st_data(9) = '1' ) then\r
+                       ipu_out_data <= fifo_out_data(9)(21)  & SECTOR_IN(2 downto 0) & MODULE_IN(2 downto 0) & new_apv_num & fifo_out_data(9)(20 downto 0);\r
+               elsif( comb_st_data(10) = '1' ) then\r
+                       ipu_out_data <= fifo_out_data(10)(21) & SECTOR_IN(2 downto 0) & MODULE_IN(2 downto 0) & new_apv_num & fifo_out_data(10)(20 downto 0);\r
+               elsif( comb_st_data(11) = '1' ) then\r
+                       ipu_out_data <= fifo_out_data(11)(21) & SECTOR_IN(2 downto 0) & MODULE_IN(2 downto 0) & new_apv_num & fifo_out_data(11)(20 downto 0);\r
+               elsif( comb_st_data(12) = '1' ) then\r
+                       ipu_out_data <= fifo_out_data(12)(21) & SECTOR_IN(2 downto 0) & MODULE_IN(2 downto 0) & new_apv_num & fifo_out_data(12)(20 downto 0);\r
+               elsif( comb_st_data(13) = '1' ) then\r
+                       ipu_out_data <= fifo_out_data(13)(21) & SECTOR_IN(2 downto 0) & MODULE_IN(2 downto 0) & new_apv_num & fifo_out_data(13)(20 downto 0);\r
+               elsif( comb_st_data(14) = '1' ) then\r
+                       ipu_out_data <= fifo_out_data(14)(21) & SECTOR_IN(2 downto 0) & MODULE_IN(2 downto 0) & new_apv_num & fifo_out_data(14)(20 downto 0);\r
+               elsif( comb_st_data(15) = '1' ) then\r
+                       ipu_out_data <= fifo_out_data(15)(21) & SECTOR_IN(2 downto 0) & MODULE_IN(2 downto 0) & new_apv_num & fifo_out_data(15)(20 downto 0);\r
+               end if;\r
+       end if;\r
+end process THE_DATA_MUX_PROC;\r
+\r
+\r
+---------------------------------------------------------------------------\r
+-- IPU cycle counter... just to be sure\r
+---------------------------------------------------------------------------\r
+THE_CYCLE_COUNTER_PROC: process( CLK_IN )\r
+begin\r
+       if( rising_edge(CLK_IN) ) then\r
+               if( reset_all = '1' ) then\r
+                       cyclectr <= (others => '0');\r
+               elsif( finished = '1' ) then\r
+                       cyclectr <= cyclectr + 1;\r
+               end if;\r
+       end if;\r
+end process THE_CYCLE_COUNTER_PROC;\r
+\r
+-- IPU handler status\r
+ipu_status(31 downto 16) <= (others => '0');    -- reserved\r
+ipu_status(15)           <= '0';                -- error flag: endpoint not configured\r
+ipu_status(14)           <= '0';                -- error flag: synchronisation\r
+ipu_status(13)           <= '0';                -- error flag: event has missing data\r
+ipu_status(12)           <= not trgnum_match;   -- error flag: event not found\r
+ipu_status(11 downto 4)  <= (others => '0');    -- reserved\r
+ipu_status(3 downto 0)   <= status_bits;        -- IPU transfer status \r
+\r
+-- LVL1 and IPU channel release status\r
+release_status(31 downto 16) <= fifo_done;\r
+release_status(15 downto 0)  <= (others => '0'); -- BUG\r
+\r
+---------------------------------------------------------------------------\r
+-- Output signals\r
+---------------------------------------------------------------------------\r
+IPU_DATA_OUT        <= ipu_out_data;\r
+LVL2_COUNTER_OUT    <= std_logic_vector(cyclectr);\r
+IPU_LAST_NUM_OUT    <= my_trg_number;\r
+DHDR_BUF_FULL_OUT   <= dhdr_buf_full;\r
+\r
+FIFO_0_STATUS_OUT   <= fifo_status(0);\r
+FIFO_1_STATUS_OUT   <= fifo_status(1);\r
+FIFO_2_STATUS_OUT   <= fifo_status(2);\r
+FIFO_3_STATUS_OUT   <= fifo_status(3);\r
+FIFO_4_STATUS_OUT   <= fifo_status(4);\r
+FIFO_5_STATUS_OUT   <= fifo_status(5);\r
+FIFO_6_STATUS_OUT   <= fifo_status(6);\r
+FIFO_7_STATUS_OUT   <= fifo_status(7);\r
+FIFO_8_STATUS_OUT   <= fifo_status(8);\r
+FIFO_9_STATUS_OUT   <= fifo_status(9);\r
+FIFO_10_STATUS_OUT  <= fifo_status(10);\r
+FIFO_11_STATUS_OUT  <= fifo_status(11);\r
+FIFO_12_STATUS_OUT  <= fifo_status(12);\r
+FIFO_13_STATUS_OUT  <= fifo_status(13);\r
+FIFO_14_STATUS_OUT  <= fifo_status(14);\r
+FIFO_15_STATUS_OUT  <= fifo_status(15);\r
+IPU_STATUS_OUT      <= ipu_status;\r
+RELEASE_STATUS_OUT  <= release_status;\r
+\r
+---------------------------------------------------------------------------\r
+-- debug information\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
+-- DEBUG signals\r
+---------------------------------------------------------------------------\r
+DBG_BSM_OUT     <= bsm_x;\r
+DBG_OUT         <= debug;\r
+\r
+end behavioral;\r
+\r
+\r
+\r
+\r
+\r
similarity index 100%
rename from source/max_data.vhd
rename to design/max_data.vhd
similarity index 100%
rename from cores/msg_file.log
rename to design/msg_file.log
similarity index 100%
rename from cores/mult_3x8.lpc
rename to design/mult_3x8.lpc
similarity index 100%
rename from cores/mult_3x8.srp
rename to design/mult_3x8.srp
similarity index 100%
rename from cores/mult_3x8.vhd
rename to design/mult_3x8.vhd
similarity index 100%
rename from source/my_sbuf.vhd
rename to design/my_sbuf.vhd
old mode 100644 (file)
new mode 100755 (executable)
similarity index 100%
rename from source/ped_corr_ctrl.vhd
rename to design/ped_corr_ctrl.vhd
similarity index 100%
rename from cores/pll_40m.lpc
rename to design/pll_40m.lpc
similarity index 100%
rename from cores/pll_40m.vhd
rename to design/pll_40m.vhd
old mode 100644 (file)
new mode 100755 (executable)
similarity index 100%
rename from source/pulse_stretch.vhd
rename to design/pulse_stretch.vhd
old mode 100644 (file)
new mode 100755 (executable)
similarity index 100%
rename from source/pulse_sync.vhd
rename to design/pulse_sync.vhd
old mode 100644 (file)
new mode 100755 (executable)
similarity index 100%
rename from source/raw_buf_stage.vhd
rename to design/raw_buf_stage.vhd
old mode 100644 (file)
new mode 100755 (executable)
similarity index 100%
rename from source/real_trg_handler.vhd
rename to design/real_trg_handler.vhd
diff --git a/design/real_trg_handler.vhd~ b/design/real_trg_handler.vhd~
new file mode 100755 (executable)
index 0000000..36c0dc4
--- /dev/null
@@ -0,0 +1,587 @@
+library ieee;\r
+use ieee.std_logic_1164.all;\r
+use ieee.numeric_std.all;\r
+\r
+library work;\r
+use work.adcmv3_components.all;\r
+\r
+-- Comment: better than the first version, but still a lot of optimization possible.\r
+\r
+-- (1) no more compare tags here. some steps in the FSM can be taken out.\r
+-- (2) no more rst_lvl1_counter signal anymore in the CCR. to be replaced!\r
+\r
+entity 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
+       TRG_TOO_LONG_OUT    : out   std_logic; -- only for TRG0 channel\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,\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                   : unsigned(15 downto 0); -- event counter\r
+signal ce_evtctr                : std_logic;\r
+signal next_ce_evtctr           : std_logic;\r
+signal frmctr                   : unsigned(3 downto 0); -- frame counter\r
+signal ce_frmctr                : std_logic;\r
+signal next_ce_frmctr           : std_logic;\r
+signal todo_ctr                 : unsigned(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 trg_len_ctr              : unsigned(8 downto 0); -- 9bit = 5.12us max\r
+signal trg_len_rst              : std_logic; \r
+signal trg_len_ce               : std_logic; \r
+signal trg_len_done             : std_logic;\r
+signal trg_too_long             : std_logic;\r
+\r
+signal bsm_x                    : std_logic_vector(7 downto 0);\r
+\r
+begin\r
+\r
+-- Aliasing the control bits\r
+time_trg_on(3)  <= TRG_SETUP_IN(7);\r
+time_trg_inv(3) <= TRG_SETUP_IN(3);\r
+time_trg_on(2)  <= TRG_SETUP_IN(6);\r
+time_trg_inv(2) <= TRG_SETUP_IN(2);\r
+time_trg_on(1)  <= TRG_SETUP_IN(5);\r
+time_trg_inv(1) <= TRG_SETUP_IN(1);\r
+time_trg_on(0)  <= TRG_SETUP_IN(4);\r
+time_trg_inv(0) <= TRG_SETUP_IN(0);\r
+\r
+------------------------------------------------------------\r
+-- Synchronize the external trigger inputs\r
+------------------------------------------------------------\r
+THE_TIME_TRG_3_SYNC: state_sync\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(\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(\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(\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
+-- TRB slow control trigger inputs are already synchronized to SYSCLK.\r
+------------------------------------------------------------\r
+trg_comb(3) <= ((time_trg(3) xor time_trg_inv(3)) and time_trg_on(3)) or TRB_TRG_IN(3);\r
+trg_comb(2) <= ((time_trg(2) xor time_trg_inv(2)) and time_trg_on(2)) or TRB_TRG_IN(2);\r
+trg_comb(1) <= ((time_trg(1) xor time_trg_inv(1)) and time_trg_on(1)) or TRB_TRG_IN(1);\r
+trg_comb(0) <= ((time_trg(0) xor time_trg_inv(0)) and time_trg_on(0)) or TRB_TRG_IN(0);\r
+\r
+--------------------------------------------------------------------------------------------------\r
+-- trigger length surveillance\r
+--------------------------------------------------------------------------------------------------\r
+THE_TRG_LENGTH_CTR_PROC: process( CLK_IN )\r
+begin\r
+       if( rising_edge(CLK_IN) ) then\r
+               if   ( (RESET_IN = '1') or (trg_len_rst = '1') ) then\r
+                       trg_len_ctr  <= (others => '0');\r
+               elsif( trg_len_ce = '1' ) then\r
+                       trg_len_ctr  <= trg_len_ctr + 1;\r
+               end if;\r
+       end if;\r
+end process THE_TRG_LENGTH_CTR_PROC;\r
+\r
+-- Count whenever trigger signal is high\r
+trg_len_ce   <= trg_qqqq(0);\r
+-- Reset counter with each rising edge\r
+trg_len_rst  <= trg_edge(0);\r
+-- Overflow of counter marks trigger length > 5us\r
+trg_len_done <= '1' when (trg_len_ctr = b"1_1111_1111") else '0';\r
+\r
+THE_TRG_TOO_LONG_PROC: process( CLK_IN )\r
+begin\r
+       if( rising_edge(CLK_IN) ) then\r
+               if   ( (RESET_IN = '1') or (trg_len_rst = '1') ) then\r
+                       trg_too_long <= '0';\r
+               elsif( trg_len_done = '1' ) then\r
+                       trg_too_long <= '1';\r
+               end if;\r
+       end if;\r
+end process THE_TRG_TOO_LONG_PROC;\r
+\r
+--------------------------------------------------------------------------------------------------\r
+--------------------------------------------------------------------------------------------------\r
+\r
+------------------------------------------------------------\r
+-- Now we shift the synced signals into shift registers with four FF in a row.\r
+-- This gives us a 16bit pattern in total to decide which trigger input was active.\r
+------------------------------------------------------------\r
+THE_TRG_LENGTH_PROC: process( CLK_IN )\r
+begin\r
+       if( rising_edge(CLK_IN) ) then\r
+               if( RESET_IN = '1' ) then\r
+                       trg_qqqq <= (others => '0');\r
+                       trg_qqq  <= (others => '0');\r
+                       trg_qq   <= (others => '0');\r
+                       trg_q    <= (others => '0');\r
+               else\r
+                       trg_qqqq <= trg_qqq;\r
+                       trg_qqq  <= trg_qq;\r
+                       trg_qq   <= trg_q;\r
+                       trg_q    <= trg_comb;\r
+               end if;\r
+       end if;\r
+end process THE_TRG_LENGTH_PROC;\r
+\r
+------------------------------------------------------------\r
+-- Check for rising edges in the signals, with a long steady state signal following.\r
+-- We accept only signals of three clock cycles minimum length (as sent by the TRB_TRG).\r
+------------------------------------------------------------\r
+THE_RISING_EDGES_PROC: process( CLK_IN )\r
+begin\r
+       if( rising_edge(CLK_IN) ) then\r
+               if( RESET_IN = '1' ) then\r
+                       trg_edge <= (others => '0');\r
+               else\r
+                       trg_edge(3) <= not trg_qqqq(3) and trg_qqq(3) and trg_qq(3) and trg_q(3);\r
+                       trg_edge(2) <= not trg_qqqq(2) and trg_qqq(2) and trg_qq(2) and trg_q(2);\r
+                       trg_edge(1) <= not trg_qqqq(1) and trg_qqq(1) and trg_qq(1) and trg_q(1);\r
+                       trg_edge(0) <= not trg_qqqq(0) and trg_qqq(0) and trg_qq(0) and trg_q(0);\r
+               end if;\r
+       end if;\r
+end process THE_RISING_EDGES_PROC;\r
+\r
+-- Now we are almost done.\r
+-- The detected edges are priorized.\r
+THE_TRG_PRIORITY_PROC: process( CLK_IN )\r
+begin\r
+       if( rising_edge(CLK_IN) ) then\r
+               if( RESET_IN = '1' ) then\r
+                       decoded_trg   <= (others => '0');\r
+                       todo_start    <= (others => '0');\r
+                       trg_found     <= '0';\r
+               else\r
+                       if( trg_edge(3) = '1' ) then\r
+                               decoded_trg <= "1000";\r
+                               todo_start  <= TRG_3_TODO_IN;\r
+                               trg_found   <= '1';\r
+                       elsif( trg_edge(3 downto 2) = "01" ) then\r
+                               decoded_trg <= "0100";\r
+                               todo_start  <= TRG_2_TODO_IN;\r
+                               trg_found   <= '1';\r
+                       elsif( trg_edge(3 downto 1) = "001" ) then\r
+                               decoded_trg <= "0010";\r
+                               todo_start  <= TRG_1_TODO_IN;\r
+                               trg_found   <= '1';\r
+                       elsif( trg_edge(3 downto 0) = "0001" ) then\r
+                               decoded_trg <= "0001";\r
+                               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
+                       end if;\r
+               end if;\r
+       end if;\r
+end process THE_TRG_PRIORITY_PROC;\r
+\r
+-- We need to store some information for the EDS... from local counters\r
+-- NB: after one cycle this information set is reset to zero!\r
+--     needed for missing timing trigger handling.\r
+THE_LOCALSTORE_PROC: process( CLK_IN )\r
+begin\r
+       if( rising_edge(CLK_IN) ) then\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_frmctr_reg  <= std_logic_vector(frmctr);\r
+                       trg_frmnum_reg  <= todo_start;\r
+                       trg_dectrg_reg  <= decoded_trg;\r
+               end if;\r
+       end if;\r
+end process THE_LOCALSTORE_PROC;\r
+\r
+-- The ToDo counter: is loaded with the number of APV triggers, and counts down.\r
+THE_TODO_COUNTER_PROC: process( CLK_IN )\r
+begin\r
+       if( rising_edge(CLK_IN) ) then\r
+               if   ( RESET_IN = '1' ) then\r
+                       todo_ctr  <= (others => '0');\r
+               elsif( store_local = '1' ) then\r
+                       todo_ctr <= unsigned(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
+next_todo_done <= '1' when (todo_ctr = x"0") else '0';\r
+\r
+THE_TRG_SYNC_PROC: process( CLK_IN )\r
+begin\r
+       if( rising_edge(CLK_IN) ) then\r
+               if( RESET_IN = '1' ) then\r
+                       todo_done <= '0';\r
+               else\r
+                       todo_done <= next_todo_done;\r
+               end if;\r
+       end if;\r
+end process THE_TRG_SYNC_PROC;\r
+\r
+-- We store the end pulse from the APV trigger handler, as we need to wait for\r
+-- LVL1 in any case before we can take care of this signal.\r
+THE_TRGDONE_PROC: process( CLK_IN )\r
+begin\r
+       if( rising_edge(CLK_IN) ) then\r
+               if( RESET_IN = '1' ) then\r
+                       apv_trg_finished <= '0';\r
+               elsif( APV_TRGDONE_IN = '1' ) then\r
+                       apv_trg_finished <= '1';\r
+               elsif( eds_ready = '1' ) then\r
+                       apv_trg_finished <= '0';\r
+               end if;\r
+       end if;\r
+end process THE_TRGDONE_PROC;\r
+\r
+-- A statemachine handles all actions for filling out the trigger information sheet\r
+-- state registers\r
+STATE_MEM: process( CLK_IN )\r
+begin\r
+       if( rising_edge(CLK_IN) ) then\r
+               if( RESET_IN = '1' ) then\r
+                       CURRENT_STATE  <= SLEEP;\r
+                       ce_evtctr      <= '0';\r
+                       ce_frmctr      <= '0';\r
+                       eds_ready      <= '0';\r
+                       eds_we         <= '0';\r
+                       eds_start      <= '0';\r
+                       rst_local      <= '0';\r
+                       store_local    <= '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      <= 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, \r
+                                                 BUSY_RELEASE_IN, TRB_TTYPE_IN(3), TRB_TINFO_IN(7) )\r
+begin\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
+                                                       -- normal way: timing trigger found\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
+                                                       next_accept       <= '1';\r
+                                               end if;\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
+                                                       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
+                                                       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
+                                               else\r
+                                                       NEXT_STATE <= WLVL1;\r
+                                               end if;\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
+                                                       next_accept     <= '1';\r
+                                                       next_rst_status <= '1';\r
+                                               else\r
+                                                       NEXT_STATE   <= DONE;\r
+                                               end if;\r
+               when others =>  NEXT_STATE      <= SLEEP;\r
+                                               next_accept     <= '1';\r
+       end case;\r
+end process STATE_TRANSFORM;\r
+\r
+-- state decoding\r
+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 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
+\r
+-- The event counter: is incremented with each accepted trigger\r
+THE_EVENT_COUNTER_PROC: process( CLK_IN )\r
+begin\r
+       if( rising_edge(CLK_IN) ) then\r
+               if   ( RESET_IN = '1' ) then\r
+                       evtctr <= (others => '0');\r
+               elsif( LVL1_LD_COUNTER_IN = '1' ) then\r
+                       evtctr <= unsigned(LVL1_COUNTER_IN); -- update with value from TRBnet counter\r
+               elsif( ce_evtctr = '1' ) then\r
+                       evtctr <= evtctr + 1;\r
+               end if;\r
+       end if;\r
+end process THE_EVENT_COUNTER_PROC;\r
+\r
+-- The frame counter: is incremented with each 1-0-0 trigger sent to APV\r
+THE_FRAME_COUNTER_PROC: process( CLK_IN )\r
+begin\r
+       if( rising_edge(CLK_IN) ) then\r
+               if( RESET_IN = '1' ) then\r
+                       frmctr <= (others => '0');\r
+               elsif( ce_frmctr = '1' ) then\r
+                       frmctr <= frmctr + 1;\r
+               end if;\r
+       end if;\r
+end process THE_FRAME_COUNTER_PROC;\r
+\r
+-- If a timing trigger was missing, we simply ignore this LVL1 trigger\r
+THE_MISSED_TRG_REG: process( CLK_IN )\r
+begin\r
+       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
+       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_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
+APV_TRGSEL_OUT    <= trg_dectrg_reg;\r
+\r
+EDS_DATA_OUT      <= eds_data;\r
+EDS_START_OUT     <= eds_start;\r
+EDS_WE_OUT        <= eds_we;\r
+EDS_READY_OUT     <= eds_ready;\r
+TRB_MISSING_OUT   <= missing_trg;\r
+LVL1_COUNTER_OUT  <= std_logic_vector(evtctr);\r
+TRG_FOUND_OUT     <= trg_found;\r
+TRG_TOO_LONG_OUT  <= trg_too_long;\r
+\r
+-- Debug signals\r
+BSM_OUT           <= bsm_x;\r
+\r
+DEBUG_OUT(63 downto 32) <= (others => '0');\r
+DEBUG_OUT(31 downto 24) <= std_logic_vector(evtctr(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
+DEBUG_OUT(12)           <= accept;\r
+DEBUG_OUT(11)           <= '0';\r
+DEBUG_OUT(10)           <= '0';\r
+DEBUG_OUT(9)            <= TRB_TRGRCVD_IN;\r
+DEBUG_OUT(8)            <= trg_found;\r
+DEBUG_OUT(7 downto 0)   <= bsm_x;\r
+\r
+DBG_FRMCTR_OUT          <= std_logic_vector(frmctr);\r
+\r
+end behavioral;\r
+\r
old mode 100644 (file)
new mode 100755 (executable)
similarity index 100%
rename from source/real_trg_handler_BACKUP.vhd
rename to design/real_trg_handler_BACKUP.vhd
old mode 100644 (file)
new mode 100755 (executable)
similarity index 100%
rename from source/reboot_handler.vhd
rename to design/reboot_handler.vhd
old mode 100644 (file)
new mode 100755 (executable)
similarity index 100%
rename from source/reset_handler.vhd
rename to design/reset_handler.vhd
old mode 100644 (file)
new mode 100755 (executable)
similarity index 96%
rename from source/rich_trb.vhd
rename to design/rich_trb.vhd
index 8dc794e..960127c
@@ -24,8 +24,8 @@ port(
        SD_LOS_IN                   : in    std_logic;
        ONEWIRE_INOUT               : inout std_logic;
        -- common regIO status / control registers
-       COMMON_STAT_REG_IN          : in    std_logic_vector(8*32-1 downto 0); -- common status register, bit definitions like in WIKI
-       COMMON_CTRL_REG_OUT         : out   std_logic_vector(3*32-1 downto 0); -- common control register, bit definitions like in WIKI
+       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);
@@ -208,7 +208,7 @@ generic map(
        REGIO_INIT_BOARD_INFO          => x"5aa5_3cc3",
        REGIO_INIT_ENDPOINT_ID         => x"0001",
        REGIO_COMPILE_TIME             => std_logic_vector(to_unsigned(VERSION_NUMBER_TIME,32)),
-       -- REGIO_COMPILE_VERSION          => x"0003",
+       REGIO_COMPILE_VERSION          => x"0003",
        REGIO_HARDWARE_VERSION         => x"3300_0000", -- ADCMv3 signature
        REGIO_USE_1WIRE_INTERFACE      => c_YES,
         TIMING_TRIGGER_RAW             => c_YES,
@@ -229,8 +229,7 @@ port map(
        MED_READ_OUT                    => med_read_out_int,
        MED_STAT_OP_IN                  => med_stat_op,
        MED_CTRL_OP_OUT                 => med_ctrl_op,
-
-        -- LVL1 trigger APL
+       -- 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...)
@@ -243,8 +242,7 @@ port map(
        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 Port
        IPU_NUMBER_OUT                  => IPU_NUMBER_OUT,
        IPU_READOUT_TYPE_OUT            => open, -- 4bit readout type
        IPU_INFORMATION_OUT             => IPU_INFORMATION_OUT,
@@ -255,8 +253,7 @@ port map(
        IPU_READ_OUT                    => IPU_READ_OUT,
        IPU_LENGTH_IN                   => IPU_LENGTH_IN,
        IPU_ERROR_PATTERN_IN            => IPU_ERROR_PATTERN_IN,
-
-        -- Slow Control Data Port
+       -- 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,
@@ -265,8 +262,7 @@ port map(
        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
+       --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,
@@ -277,8 +273,7 @@ port map(
        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
+       --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
@@ -286,15 +281,13 @@ port map(
        REGIO_ONEWIRE_INOUT             => ONEWIRE_INOUT,
        REGIO_ONEWIRE_MONITOR_IN        => '1', -- not used
        REGIO_ONEWIRE_MONITOR_OUT       => open, -- not used
-
-        -- New stuff
+       -- New stuff
        GLOBAL_TIME_OUT                 => open,
        LOCAL_TIME_OUT                  => open,
        TIME_SINCE_LAST_TRG_OUT         => open,
        TIMER_TICKS_OUT(1)          => tick_1ms, -- ms ticks
        TIMER_TICKS_OUT(0)          => open, -- us ticks
-
-        -- Status and debug
+       -- Status and debug
        STAT_DEBUG_IPU                  => open,
        STAT_DEBUG_1                    => stat_debug_1, --open,
        STAT_DEBUG_2                    => open,
diff --git a/design/rich_trb.vhd~ b/design/rich_trb.vhd~
new file mode 100755 (executable)
index 0000000..9325caf
--- /dev/null
@@ -0,0 +1,350 @@
+library ieee;
+use ieee.std_logic_1164.all;
+use IEEE.numeric_std.ALL;
+use IEEE.std_logic_UNSIGNED.ALL;
+
+library work;
+use work.version.all;
+use work.trb_net_std.all;
+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;
+       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;
+       TICK_10S_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";
+
+-- Signals
+signal clk_en                   : std_logic;
+signal med_data_in_int          : std_logic_vector(c_DATA_WIDTH-1 downto 0);
+signal med_packet_num_in_int    : std_logic_vector(c_NUM_WIDTH-1 downto 0);
+signal med_dataready_in_int     : std_logic;
+signal med_read_out_int         : std_logic;
+signal med_data_out_int         : std_logic_vector(c_DATA_WIDTH-1 downto 0);
+signal med_packet_num_out_int   : std_logic_vector(c_NUM_WIDTH-1 downto 0);
+signal med_dataready_out_int    : std_logic;
+signal med_read_in_int          : 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 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);
+
+signal tick_1ms                 : std_logic;
+signal counter_10s              : unsigned(13 downto 0);
+signal next_rst_counter_10s     : std_logic;
+signal rst_counter_10s          : std_logic;
+signal ce_counter_10s           : std_logic;
+signal next_tick_10s            : std_logic;
+signal tick_10s                 : std_logic;
+
+begin
+
+-- Debug
+debug <= debug_x;
+
+-- Clock assignment. We don't use CLK_EN really in our designs.
+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,
+       CLEAR                 => '0',
+       CLK_EN                => clk_en,
+       --Internal Connection
+       MED_DATA_IN           => med_data_out_int,
+       MED_PACKET_NUM_IN     => med_packet_num_out_int,
+       MED_DATAREADY_IN      => med_dataready_out_int,
+       MED_READ_OUT          => med_read_in_int,
+       MED_DATA_OUT          => med_data_in_int,
+       MED_PACKET_NUM_OUT    => med_packet_num_in_int,
+       MED_DATAREADY_OUT     => med_dataready_in_int,
+       MED_READ_IN           => med_read_out_int,
+       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 signals
+------------------------------------------------------------------------------------
+debug_x(63 downto 47) <= med_stat_debug(63 downto 47);
+debug_x(46 downto 42) <= (others => '0');
+debug_x(41)           <= med_read_out_int;       -- MED_READ_IN
+debug_x(40)           <= med_dataready_in_int;   -- MED_DATAREADY_OUT
+debug_x(39 downto 37) <= med_packet_num_in_int;  -- MED_PACKET_NUM_OUT
+debug_x(36 downto 21) <= med_data_in_int;        -- MED_DATA_OUT
+debug_x(20)           <= med_read_in_int;        -- MED_READ_OUT
+debug_x(19)           <= med_dataready_out_int;  -- MED_DATAREADY_IN
+debug_x(18 downto 16) <= med_packet_num_out_int; -- MED_PACKET_NUM_IN
+--debug_x(15 downto 0)  <= med_data_out;         -- MED_DATA_IN
+debug_x(15 downto 7)  <= (others => '0');
+debug_x(6 downto 0)   <= med_stat_debug(30 downto 24);
+
+------------------------------------------------------------------------------------
+-- 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" &
+                                                                         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             => std_logic_vector(to_unsigned(VERSION_NUMBER_TIME,32)),
+       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_int,
+       MED_DATA_OUT                    => med_data_out_int,
+       MED_PACKET_NUM_OUT              => med_packet_num_out_int,
+       MED_READ_IN                     => med_read_in_int,
+       MED_DATAREADY_IN                => med_dataready_in_int,
+       MED_DATA_IN                     => med_data_in_int,
+       MED_PACKET_NUM_IN               => med_packet_num_in_int,
+       MED_READ_OUT                    => med_read_out_int,
+       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(1)          => tick_1ms, -- ms ticks
+       TIMER_TICKS_OUT(0)          => open, -- us ticks
+       -- 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
+);
+
+------------------------------------------------------------------------------------
+-- 10s counter
+------------------------------------------------------------------------------------
+THE_TEN_SEC_CTR_PROC: process( SYSCLK_IN )
+begin
+       if( rising_edge(SYSCLK_IN) ) then
+               if   ( rst_counter_10s = '1' ) then
+                       counter_10s <= (others => '0');
+               elsif( ce_counter_10s = '1' ) then
+                       counter_10s <= counter_10s + 1;
+               end if;
+               rst_counter_10s <= next_rst_counter_10s;
+               tick_10s        <= next_tick_10s;
+       end if;
+end process THE_TEN_SEC_CTR_PROC;
+
+ce_counter_10s <= tick_1ms;
+
+next_rst_counter_10s <= '1' when (((counter_10s = 9765) and (ce_counter_10s = '1')) or (RESET_IN = '1')) else '0';
+
+next_tick_10s <= rst_counter_10s;
+
+------------------------------------------------------------------------------------
+-- Control register assignment
+------------------------------------------------------------------------------------
+
+-- Common status register
+common_stat_reg(COMMON_STAT_REG'left downto 32) <= COMMON_STAT_REG_IN(63 downto 32);
+common_stat_reg(31 downto 20)                   <= (others => '0'); -- already taken by TEMP of 1WID
+common_stat_reg(19 downto 0)                    <= COMMON_STAT_REG_IN(19 downto 0);
+
+-- Common control register
+COMMON_CTRL_REG_OUT <= common_ctrl_reg;
+
+-- User status register
+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_TXD  <= not med_stat_op(11);      -- data transmit
+
+-- Output signals
+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
old mode 100644 (file)
new mode 100755 (executable)
similarity index 100%
rename from source/sbuf.vhd
rename to design/sbuf.vhd
old mode 100644 (file)
new mode 100755 (executable)
similarity index 100%
rename from source/sfp_rx_handler.vhd
rename to design/sfp_rx_handler.vhd
old mode 100644 (file)
new mode 100755 (executable)
similarity index 100%
rename from source/sfp_rx_handler_BACK2.vhd
rename to design/sfp_rx_handler_BACK2.vhd
old mode 100644 (file)
new mode 100755 (executable)
similarity index 100%
rename from source/sfp_rx_handler_BACK_0.vhd
rename to design/sfp_rx_handler_BACK_0.vhd
old mode 100644 (file)
new mode 100755 (executable)
similarity index 72%
rename from source/slave_bus.vhd
rename to design/slave_bus.vhd
index 93b64ca..be178b9
@@ -169,16 +169,13 @@ end entity;
 architecture Behavioral of slave_bus is\r
 \r
 -- Signals\r
-constant NUM_PORTS          : integer := 18;\r
-signal slv_read             : std_logic_vector(NUM_PORTS-1 downto 0);\r
-signal slv_write            : std_logic_vector(NUM_PORTS-1 downto 0);\r
+signal slv_read             : std_logic_vector(18-1 downto 0);\r
+signal slv_write            : std_logic_vector(18-1 downto 0);\r
 signal slv_busy             : std_logic_vector(18-1 downto 0);\r
-signal slv_no_more_data     : std_logic_vector(NUM_PORTS-1 downto 0);\r
-signal slv_ack              : std_logic_vector(NUM_PORTS-1 downto 0);\r
-signal slv_addr             : std_logic_vector(NUM_PORTS*16-1 downto 0);\r
-signal slv_data_rd          : std_logic_vector(NUM_PORTS*32-1 downto 0);\r
-signal slv_data_wr          : std_logic_vector(NUM_PORTS*32-1 downto 0);\r
-signal slv_unknown_addr     : std_logic_vector(NUM_PORTS-1 downto 0);\r
+signal slv_ack              : std_logic_vector(18-1 downto 0);\r
+signal slv_addr             : std_logic_vector(18*16-1 downto 0);\r
+signal slv_data_rd          : std_logic_vector(18*32-1 downto 0);\r
+signal slv_data_wr          : std_logic_vector(18*32-1 downto 0);\r
 \r
 -- SPI controller BRAM lines\r
 signal spi_bram_addr        : std_logic_vector(7 downto 0);\r
@@ -204,7 +201,7 @@ begin
 -- 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(\r
-       PORT_NUMBER         => NUM_PORTS,\r
+       PORT_NUMBER         => 18,\r
        PORT_ADDRESSES      => ( 0 => x"a000", -- pedestal memories\r
                                                         1 => x"a800", -- threshold memories\r
                                                         2 => x"8040", -- I2C master\r
@@ -242,9 +239,8 @@ generic map(
                                                        15 => 4,  -- FIFO status registers\r
                                                        16 => 0,  -- LVL1 release status register\r
                                                        17 => 0,  -- IPU handler status register\r
-                                                       others => 0),\r
-        PORT_MASK_ENABLE                    => 1\r
-        )\r
+                                                       others => 0)\r
+)\r
 port map(\r
        CLK                                 => CLK_IN,\r
        RESET                               => RESET_IN,\r
@@ -258,22 +254,185 @@ port map(
        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
-\r
-        -- All Slow Control Ports\r
-        BUS_READ_ENABLE_OUT                 => slv_read,\r
-        BUS_WRITE_ENABLE_OUT                => slv_write,\r
-        BUS_DATA_OUT                        => slv_data_wr,\r
-        BUS_DATA_IN                         => slv_data_rd,\r
-        BUS_ADDR_OUT                        => slv_addr,\r
-        BUS_TIMEOUT_OUT                     => open,\r
-        BUS_DATAREADY_IN                    => slv_ack,\r
-        BUS_WRITE_ACK_IN                    => slv_ack,\r
-        BUS_NO_MORE_DATA_IN                 => slv_no_more_data,\r
-        BUS_UNKNOWN_ADDR_IN                 => slv_unknown_addr,\r
-\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
+       -- data buffer status registers\r
+       BUS_READ_ENABLE_OUT(15)             => slv_read(15),\r
+       BUS_WRITE_ENABLE_OUT(15)            => slv_write(15),\r
+       BUS_DATA_OUT(15*32+31 downto 15*32) => slv_data_wr(15*32+31 downto 15*32),\r
+       BUS_DATA_IN(15*32+31 downto 15*32)  => slv_data_rd(15*32+31 downto 15*32),\r
+       BUS_ADDR_OUT(15*16+15 downto 15*16) => slv_addr(15*16+15 downto 15*16),\r
+       BUS_TIMEOUT_OUT(15)                 => open,\r
+       BUS_DATAREADY_IN(15)                => slv_ack(15),\r
+       BUS_WRITE_ACK_IN(15)                => slv_ack(15),\r
+       BUS_NO_MORE_DATA_IN(15)             => slv_busy(15),\r
+       BUS_UNKNOWN_ADDR_IN(15)             => '0',\r
+       -- LVL1 release status register\r
+       BUS_READ_ENABLE_OUT(16)             => slv_read(16),\r
+       BUS_WRITE_ENABLE_OUT(16)            => slv_write(16),\r
+       BUS_DATA_OUT(16*32+31 downto 16*32) => slv_data_wr(16*32+31 downto 16*32),\r
+       BUS_DATA_IN(16*32+31 downto 16*32)  => slv_data_rd(16*32+31 downto 16*32),\r
+       BUS_ADDR_OUT(16*16+15 downto 16*16) => slv_addr(16*16+15 downto 16*16),\r
+       BUS_TIMEOUT_OUT(16)                 => open,\r
+       BUS_DATAREADY_IN(16)                => slv_ack(16),\r
+       BUS_WRITE_ACK_IN(16)                => slv_ack(16),\r
+       BUS_NO_MORE_DATA_IN(16)             => slv_busy(16),\r
+       BUS_UNKNOWN_ADDR_IN(16)             => '0',\r
+       -- IPU handler status register\r
+       BUS_READ_ENABLE_OUT(17)             => slv_read(17),\r
+       BUS_WRITE_ENABLE_OUT(17)            => slv_write(17),\r
+       BUS_DATA_OUT(17*32+31 downto 17*32) => slv_data_wr(17*32+31 downto 17*32),\r
+       BUS_DATA_IN(17*32+31 downto 17*32)  => slv_data_rd(17*32+31 downto 17*32),\r
+       BUS_ADDR_OUT(17*16+15 downto 17*16) => slv_addr(17*16+15 downto 17*16),\r
+       BUS_TIMEOUT_OUT(17)                 => open,\r
+       BUS_DATAREADY_IN(17)                => slv_ack(17),\r
+       BUS_WRITE_ACK_IN(17)                => slv_ack(17),\r
+       BUS_NO_MORE_DATA_IN(17)             => slv_busy(17),\r
+       BUS_UNKNOWN_ADDR_IN(17)             => '0',\r
        -- debug\r
-       STAT_DEBUG                          => stat\r
-        );\r
+       STAT_DEBUG          => stat\r
+);\r
 \r
 \r
 ------------------------------------------------------------------------------------\r
@@ -313,7 +472,7 @@ port map(
        MEM_15_D_OUT    => PED_DATA_15_OUT,\r
        -- Status lines\r
        STAT            => open\r
-        );\r
+);\r
 slv_busy(0) <= '0';\r
 \r
 ------------------------------------------------------------------------------------\r
@@ -795,6 +954,8 @@ port map(
 );\r
 \r
 \r
+\r
+\r
 -- unusable pins\r
 debug(63 downto 43) <= (others => '0');\r
 -- connected pins\r
similarity index 100%
rename from source/slv_adc_la.vhd
rename to design/slv_adc_la.vhd
old mode 100644 (file)
new mode 100755 (executable)
similarity index 100%
rename from source/slv_onewire_memory.vhd
rename to design/slv_onewire_memory.vhd
similarity index 100%
rename from source/slv_status.vhd
rename to design/slv_status.vhd
old mode 100644 (file)
new mode 100755 (executable)
similarity index 100%
rename from source/state_sync.vhd
rename to design/state_sync.vhd
old mode 100644 (file)
new mode 100755 (executable)
similarity index 100%
rename from source/tb_count_unit.vhd
rename to design/tb_count_unit.vhd
old mode 100644 (file)
new mode 100755 (executable)
similarity index 100%
rename from source/tb_count_unit.vhd.bak
rename to design/tb_count_unit.vhd.bak
similarity index 100%
rename from cores/test_fifo.lpc
rename to design/test_fifo.lpc
similarity index 100%
rename from cores/test_fifo.vhd
rename to design/test_fifo.vhd
similarity index 100%
rename from cores/test_fifo2.jhd
rename to design/test_fifo2.jhd
similarity index 100%
rename from cores/test_fifo2.lpc
rename to design/test_fifo2.lpc
similarity index 100%
rename from cores/test_fifo2.naf
rename to design/test_fifo2.naf
similarity index 100%
rename from cores/test_fifo2.srp
rename to design/test_fifo2.srp
similarity index 100%
rename from cores/test_fifo2.sym
rename to design/test_fifo2.sym
similarity index 100%
rename from cores/test_fifo2.vhd
rename to design/test_fifo2.vhd
old mode 100644 (file)
new mode 100755 (executable)
similarity index 100%
rename from source/test_media.vhd
rename to design/test_media.vhd
similarity index 100%
rename from cores/testfifo.lpc
rename to design/testfifo.lpc
similarity index 100%
rename from cores/testfifo.vhd
rename to design/testfifo.vhd
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
index 0c760d80d40d283c01b6a0e4673d120fae883c01..8ddb65b7e169d98f037e9252adf87b4dfd66c106 100755 (executable)
@@ -1,50 +1,47 @@
-[pbs1]
+[pbs2]
 system = linux
 corenum = 2
-env = /usr/local/opt/lattice_diamond/diamond/3.2/bin/lin64/diamond_env
-workdir = /home/rich/TRB/nXyter/trb3/nxyter/workdir/
-[pbs2]
+env = /usr/local/opt/lattice_diamond/diamond/3.4/bin/lin64/diamond_env
+workdir = /home/rich/TRB/nXyter/ADCM/adcm/workdir/
+
+[pbs1]
 system = linux
 corenum = 2
-env = /usr/local/opt/lattice_diamond/diamond/3.2/bin/lin64/diamond_env
-workdir = /home/rich/TRB/nXyter/trb3/nxyter/workdir/
+env = /usr/local/opt/lattice_diamond/diamond/3.4/bin/lin64/diamond_env
+workdir = /home/rich/TRB/nXyter/ADCM/adcm/workdir/
+
 [pbs3]
 system = linux
 corenum = 2
-env = /usr/local/opt/lattice_diamond/diamond/3.2/bin/lin64/diamond_env
-workdir = /home/rich/TRB/nXyter/trb3/nxyter/workdir/
+env = /usr/local/opt/lattice_diamond/diamond/3.4/bin/lin64/diamond_env
+workdir = /home/rich/TRB/nXyter/ADCM/adcm/workdir/
+
 [pbs4]
 system = linux
 corenum = 2
-env = /usr/local/opt/lattice_diamond/diamond/3.2/bin/lin64/diamond_env
-workdir = /home/rich/TRB/nXyter/trb3/nxyter/workdir/
+env = /usr/local/opt/lattice_diamond/diamond/3.4/bin/lin64/diamond_env
+workdir = /home/rich/TRB/nXyter/ADCM/adcm/workdir/
+
 [pbs5]
 system = linux
 corenum = 2
-env = /usr/local/opt/lattice_diamond/diamond/3.2/bin/lin64/diamond_env
-workdir = /home/rich/TRB/nXyter/trb3/nxyter/workdir/
+env = /usr/local/opt/lattice_diamond/diamond/3.4/bin/lin64/diamond_env
+workdir = /home/rich/TRB/nXyter/ADCM/adcm/workdir/
+
 [pbs6]
 system = linux
 corenum = 2
-env = /usr/local/opt/lattice_diamond/diamond/3.2/bin/lin64/diamond_env
-workdir = /home/rich/TRB/nXyter/trb3/nxyter/workdir/
+env = /usr/local/opt/lattice_diamond/diamond/3.4/bin/lin64/diamond_env
+workdir = /home/rich/TRB/nXyter/ADCM/adcm/workdir/
+
 [pbs7]
 system = linux
 corenum = 2
-env = /usr/local/opt/lattice_diamond/diamond/3.2/bin/lin64/diamond_env
-workdir = /home/rich/TRB/nXyter/trb3/nxyter/workdir/
+env = /usr/local/opt/lattice_diamond/diamond/3.4/bin/lin64/diamond_env
+workdir = /home/rich/TRB/nXyter/ADCM/adcm/workdir/
+
 [pbs8]
 system = linux
 corenum = 2
-env = /usr/local/opt/lattice_diamond/diamond/3.2/bin/lin64/diamond_env
-workdir = /home/rich/TRB/nXyter/trb3/nxyter/workdir/
-[pbs9]
-system = linux
-corenum = 2
-env = /usr/local/opt/lattice_diamond/diamond/3.2/bin/lin64/diamond_env
-workdir = /home/rich/TRB/nXyter/trb3/nxyter/workdir/
-[pbs10]
-system = linux
-corenum = 2
-env = /usr/local/opt/lattice_diamond/diamond/3.2/bin/lin64/diamond_env
-workdir = /home/rich/TRB/nXyter/trb3/nxyter/workdir/
+env = /usr/local/opt/lattice_diamond/diamond/3.4/bin/lin64/diamond_env
+workdir = /home/rich/TRB/nXyter/ADCM/adcm/workdir/
diff --git a/ports_hadeb05.txt b/ports_hadeb05.txt
deleted file mode 100644 (file)
index 266e89c..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-/home/hadaq/license/lattice_license.log: 1:19:02 (lmgrd) lmgrd tcp-port 1702
-/home/hadaq/license/lattice_license.log: 1:19:02 (lmgrd) Started lattice (internet tcp_port 51765 pid 30916)
diff --git a/ports_lxcad01.txt b/ports_lxcad01.txt
deleted file mode 100644 (file)
index ebb2e69..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-/cad/licenses/log/ams_lm.log:15:55:49 (lmgrd) lmgrd tcp-port 26745
-/cad/licenses/log/ams_lm.log:15:55:49 (lmgrd) Started amslmd (internet tcp_port 64814 pid 21110)
-/cad/licenses/log/atr_license.log:9:52:13 (lmgrd) lmgrd tcp-port 27005
-/cad/licenses/log/atr_license.log:9:52:13 (lmgrd) Started atrenta (internet tcp_port 46943 pid 18866)
-/cad/licenses/log/cds_license.log:13:46:39 (lmgrd) lmgrd tcp-port 5280
-/cad/licenses/log/cds_license.log:13:46:39 (lmgrd) Started cdslmd (internet tcp_port 50309 pid 32758)
-/cad/licenses/log/mentor_license.log:14:42:53 (lmgrd) lmgrd tcp-port 1710
-/cad/licenses/log/mentor_license.log:14:42:53 (lmgrd) Started mgcld (internet tcp_port 42914 pid 8237)
-/cad/licenses/log/mg_license.log:13:26:04 (lmgrd) lmgrd tcp-port 1717
-/cad/licenses/log/mg_license.log:13:26:04 (lmgrd) Started mgcld (internet tcp_port 39276 pid 11086)
-/cad/licenses/log/mgcld_lm.log:16:44:20 (lmgrd) lmgrd tcp-port 1710
-/cad/licenses/log/mgcld_lm.log:16:44:20 (lmgrd) Started mgcld (internet tcp_port 64863 pid 24087)
-/cad/licenses/log/syn_license.log:10:29:33 (lmgrd) lmgrd tcp-port 27000
-/cad/licenses/log/syn_license.log:10:29:33 (lmgrd) Started snpslmd (internet tcp_port 54219 pid 24990)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
diff --git a/source/adcmv3_components2.vhd b/source/adcmv3_components2.vhd
deleted file mode 100644 (file)
index 6496d1e..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-library ieee;
-use ieee.std_logic_1164.all;
-use ieee.numeric_std.all;
-
-package adcmv3_componets is
-  
-  type debug_array_t is array(integer range <>) of
-    std_logic_vector(15 downto 0);
-  
-  component debug_multiplexer
-    generic (
-      NUM_PORTS : integer range 1 to 32);
-    port (
-      CLK_IN               : in  std_logic;
-      RESET_IN             : in  std_logic;
-      DEBUG_LINE_IN        : in  debug_array_t(0 to NUM_PORTS-1);
-      DEBUG_LINE_OUT       : out std_logic_vector(15 downto 0);
-      SLV_READ_IN          : in  std_logic;
-      SLV_WRITE_IN         : in  std_logic;
-      SLV_DATA_OUT         : out std_logic_vector(31 downto 0);
-      SLV_DATA_IN          : in  std_logic_vector(31 downto 0);
-      SLV_ADDR_IN          : in  std_logic_vector(15 downto 0);
-      SLV_ACK_OUT          : out std_logic;
-      SLV_NO_MORE_DATA_OUT : out std_logic;
-      SLV_UNKNOWN_ADDR_OUT : out std_logic
-      );
-  end component;
-  
-end package;
diff --git a/source/debug_multiplexer.vhd b/source/debug_multiplexer.vhd
deleted file mode 100644 (file)
index 7b70f58..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-library ieee;
-use ieee.std_logic_1164.all;
-use ieee.numeric_std.all;
-
-library work;
-use work.adcmv3_componets.all;
-
-entity debug_multiplexer is
-  generic (
-    NUM_PORTS : integer range 1 to 32 := 1
-    );
-  port(
-    CLK_IN               : in  std_logic;
-    RESET_IN             : in  std_logic;
-
-    DEBUG_LINE_IN        : in  debug_array_t(0 to NUM_PORTS-1);
-    DEBUG_LINE_OUT       : out std_logic_vector(15 downto 0);
-
-    -- Slave bus         
-    SLV_READ_IN          : in  std_logic;
-    SLV_WRITE_IN         : in  std_logic;
-    SLV_DATA_OUT         : out std_logic_vector(31 downto 0);
-    SLV_DATA_IN          : in  std_logic_vector(31 downto 0);
-    SLV_ADDR_IN          : in  std_logic_vector(15 downto 0);
-    SLV_ACK_OUT          : out std_logic;
-    SLV_NO_MORE_DATA_OUT : out std_logic;
-    SLV_UNKNOWN_ADDR_OUT : out std_logic
-
-    );
-end entity;
-
-architecture Behavioral of debug_multiplexer is
-
-  signal port_select        : std_logic_vector(7 downto 0);
-  signal debug_line_o       : std_logic_vector(15 downto 0);
-  
-  signal slv_data_out_o     : std_logic_vector(31 downto 0);
-  signal slv_no_more_data_o : std_logic;
-  signal slv_unknown_addr_o : std_logic;
-  signal slv_ack_o          : std_logic;
-  
-begin
-  
-  PROC_MULTIPLEXER: process(port_select,
-                            DEBUG_LINE_IN)
-  begin
-    if (unsigned(port_select) < NUM_PORTS) then
-      debug_line_o               <=
-        DEBUG_LINE_IN(to_integer(unsigned(port_select)));
-    elsif (unsigned(port_select) = NUM_PORTS) then
-      -- Checkerboard
-      for I in 0 to 7 loop
-        debug_line_o(I * 2)      <= CLK_IN;
-        debug_line_o(I * 2 + 1)  <= not CLK_IN;
-      end loop; 
-    else
-      debug_line_o               <= (others => '1');
-    end if;
-  end process PROC_MULTIPLEXER;
-
-  PROC_SLAVE_BUS: process(CLK_IN)
-  begin
-    if( rising_edge(CLK_IN) ) then
-      if( RESET_IN = '1' ) then
-        slv_data_out_o      <= (others => '0');
-        slv_no_more_data_o  <= '0';
-        slv_unknown_addr_o  <= '0';
-        slv_ack_o           <= '0';
-        port_select         <= (others => '0');
-      else
-        slv_ack_o           <= '1';
-        slv_unknown_addr_o  <= '0';
-        slv_no_more_data_o  <= '0';
-        slv_data_out_o      <= (others => '0');    
-        
-        if (SLV_WRITE_IN  = '1') then
-          case SLV_ADDR_IN is
-            when x"0000" =>
-              if (unsigned(SLV_DATA_IN(7 downto 0)) < NUM_PORTS + 1) then
-                port_select               <= SLV_DATA_IN(7 downto 0);
-              end if;
-              slv_ack_o                   <= '1';
-
-            when others =>                
-              slv_unknown_addr_o          <= '1';
-              slv_ack_o                   <= '0';
-          end case;
-          
-        elsif (SLV_READ_IN = '1') then
-          case SLV_ADDR_IN is
-            when x"0000" =>
-              slv_data_out_o(7 downto 0)  <= port_select;
-              slv_data_out_o(31 downto 8) <= (others => '0');
-
-            when others =>
-              slv_unknown_addr_o          <= '1';
-              slv_ack_o                   <= '0';
-          end case;
-
-        else
-          slv_ack_o                       <= '0';
-        end if;
-      end if;
-    end if;           
-  end process PROC_SLAVE_BUS;
-  
-  -----------------------------------------------------------------------------
-  -- Output Signals
-  -----------------------------------------------------------------------------
-
-  SLV_DATA_OUT         <= slv_data_out_o;    
-  SLV_NO_MORE_DATA_OUT <= slv_no_more_data_o; 
-  SLV_UNKNOWN_ADDR_OUT <= slv_unknown_addr_o;
-  SLV_ACK_OUT          <= slv_ack_o;
-  
-  DEBUG_LINE_OUT       <= debug_line_o;
-
-end Behavioral;
index c999375077f99a1b14f9dc86531bd8050e7fe1c6..c217a765fe93fa61674c9eec28984187bc8d788b 100644 (file)
@@ -4,7 +4,7 @@ Running in Lattice mode
 Starting:    /usr/local/opt/lattice_diamond/diamond/3.4/synpbase/linux_a_64/mbin/synbatch
 Install:     /usr/local/opt/lattice_diamond/diamond/3.4/synpbase
 Hostname:    brett
-Date:        Wed Aug 26 17:56:58 2015
+Date:        Fri Aug 28 15:32:35 2015
 Version:     J-2014.09L
 
 Arguments:   -product synplify_pro  -batch adcmv3.prj
@@ -16,7 +16,7 @@ CDPL_LOGDIR: /home/lmaier/.synopsys/fpga/cdpllog
 
 
 
-log file: "/home/rich/TRB/nXyter/trb3/adcm/workdir/adcmv3.srr"
+log file: "/home/rich/TRB/nXyter/ADCM/adcm/workdir/adcmv3.srr"
 
 
 
@@ -31,24 +31,24 @@ Running: Compile Process on adcmv3|workdir
 
 Running: Compile Input on adcmv3|workdir
 
-Copied /home/rich/TRB/nXyter/trb3/adcm/workdir/synwork/adcmv3_comp.srs to /home/rich/TRB/nXyter/trb3/adcm/workdir/adcmv3.srs
+Copied /home/rich/TRB/nXyter/ADCM/adcm/workdir/synwork/adcmv3_comp.srs to /home/rich/TRB/nXyter/ADCM/adcm/workdir/adcmv3.srs
 
 
 compiler Completed
 Return Code: 0
-Run Time:00h:00m:20s
+Run Time:00h:00m:19s
 
 
 Running: Multi-srs Generator on adcmv3|workdir
 
-Copied /home/rich/TRB/nXyter/trb3/adcm/workdir/synwork/adcmv3_comp.srs to /home/rich/TRB/nXyter/trb3/adcm/workdir/synwork/adcmv3_s.srs
+Copied /home/rich/TRB/nXyter/ADCM/adcm/workdir/synwork/adcmv3_comp.srs to /home/rich/TRB/nXyter/ADCM/adcm/workdir/synwork/adcmv3_s.srs
 
 
 multi_srs_gen Completed
 Return Code: 0
 Run Time:00h:00m:02s
 
-Copied /home/rich/TRB/nXyter/trb3/adcm/workdir/synwork/adcmv3_mult.srs to /home/rich/TRB/nXyter/trb3/adcm/workdir/adcmv3.srs
+Copied /home/rich/TRB/nXyter/ADCM/adcm/workdir/synwork/adcmv3_mult.srs to /home/rich/TRB/nXyter/ADCM/adcm/workdir/adcmv3.srs
 
 Complete: Compile Process on adcmv3|workdir
 
@@ -58,7 +58,7 @@ Running: Pre-mapping on adcmv3|workdir
 
 premap Completed with warnings
 Return Code: 1
-Run Time:00h:00m:07s
+Run Time:00h:00m:05s
 
 Complete: Compile on adcmv3|workdir
 
@@ -68,12 +68,12 @@ Running: Map on adcmv3|workdir
 
 Running: Map & Optimize on adcmv3|workdir
 
-Copied /home/rich/TRB/nXyter/trb3/adcm/workdir/synwork/adcmv3_m.srm to /home/rich/TRB/nXyter/trb3/adcm/workdir/adcmv3.srm
+Copied /home/rich/TRB/nXyter/ADCM/adcm/workdir/synwork/adcmv3_m.srm to /home/rich/TRB/nXyter/ADCM/adcm/workdir/adcmv3.srm
 
 
 fpga_mapper Completed with warnings
 Return Code: 1
-Run Time:00h:04m:29s
+Run Time:00h:03m:47s
 
 Complete: Map on adcmv3|workdir
 
old mode 100644 (file)
new mode 100755 (executable)
old mode 100755 (executable)
new mode 100644 (file)
diff --git a/workdir/.recordref b/workdir/.recordref
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/workdir/.recordref_modgen b/workdir/.recordref_modgen
deleted file mode 100644 (file)
index e69de29..0000000