add_file -vhdl -lib work "../../trbnet/special/spi_flash_and_fpga_reload_record.vhd"
add_file -vhdl -lib work "../../trb3/base/code/sedcheck.vhd"
add_file -vhdl -lib work "../../trbnet/basics/priority_arbiter.vhd"
+add_file -vhdl -lib work "../../trbnet/optical_link/f_divider.vhd"
#Fifos
add_file -vhdl -lib work "../../trb3/cts/source/mbs_master.vhd"
add_file -vhdl -lib work "../../trb3sc/hub_cts/code/mbs_vulom_recv.vhd"
-#TDC Calibration
-#add_file -vhdl -lib work "./code/Calibration.vhd"
-#add_file -vhdl -lib work "./code/Cal_Limits_v2.vhd"
-#add_file -vhdl -lib work "./code/cnt_val.vhd"
-#add_file -vhdl -lib work "./code/default_val.vhd"
-#add_file -vhdl -lib work "./code/LUT.vhd"
-#add_file -vhdl -lib work "./code/Memory.vhd"
-#add_file -vhdl -lib work "./code/Memory_curr.vhd"
-#add_file -vhdl -lib work "./code/read_cnt.vhd"
-#add_file -vhdl -lib work "./code/compare_old.vhd"
-#add_file -vhdl -lib work "./code/Calc_output.vhd"
+#TDC
+add_file -vhdl -lib work "../../trb3sc/tdc_release/tdc_version.vhd"
+add_file -vhdl -lib work "../../trb3sc/tdc_release/tdc_components.vhd"
+add_file -vhdl -lib work "../../trb3sc/tdc_release/bit_sync.vhd"
+add_file -vhdl -lib work "../../trb3sc/tdc_release/BusHandler_record.vhd"
+add_file -vhdl -lib work "../../trb3sc/tdc_release/Channel_200.vhd"
+add_file -vhdl -lib work "../../trb3sc/tdc_release/Channel.vhd"
+add_file -vhdl -lib work "../../trb3sc/tdc_release/Encoder_288_Bit.vhd"
+add_file -vhdl -lib work "../../trb3sc/tdc_release/fallingEdgeDetect.vhd"
+add_file -vhdl -lib work "../../trb3sc/tdc_release/hit_mux.vhd"
+add_file -vhdl -lib work "../../trb3sc/tdc_release/LogicAnalyser.vhd"
+add_file -vhdl -lib work "../../trb3sc/tdc_release/Readout_record.vhd"
+add_file -vhdl -lib work "../../trb3sc/tdc_release/risingEdgeDetect.vhd"
+add_file -vhdl -lib work "../../trb3sc/tdc_release/ROM_encoder_ecp3.vhd"
+add_file -vhdl -lib work "../../trb3sc/tdc_release/ShiftRegisterSISO.vhd"
+add_file -vhdl -lib work "../../trb3sc/tdc_release/Stretcher_A.vhd"
+add_file -vhdl -lib work "../../trb3sc/tdc_release/Stretcher_B.vhd"
+add_file -vhdl -lib work "../../trb3sc/tdc_release/Stretcher.vhd"
+add_file -vhdl -lib work "../../trb3sc/tdc_release/TDC_record.vhd"
+add_file -vhdl -lib work "../../trb3sc/tdc_release/TriggerHandler.vhd"
+add_file -vhdl -lib work "../../trb3sc/tdc_release/up_counter.vhd"
+add_file -vhdl -lib work "../../tdc/base/cores/ecp3/FIFO/FIFO_DC_36x128_DynThr_OutReg.vhd"
+add_file -vhdl -lib work "../../tdc/base/cores/ecp3/FIFO/FIFO_DC_36x128_OutReg.vhd"
+add_file -vhdl -lib work "../../tdc/base/cores/ecp3/FIFO/FIFO_DC_36x64_OutReg.vhd"
+add_file -vhdl -lib work "../../tdc/base/cores/ecp3/FIFO/FIFO_DC_36x32_OutReg.vhd"
+add_file -vhdl -lib work "../../tdc/base/cores/ecp3/FIFO/FIFO_36x128_OutReg.vhd"
+add_file -vhdl -lib work "../../tdc/base/cores/ecp3/FIFO/FIFO_36x64_OutReg.vhd"
+add_file -vhdl -lib work "../../tdc/base/cores/ecp3/FIFO/FIFO_36x32_OutReg.vhd"
+add_file -vhdl -lib work "../../tdc/base/cores/ecp3/PLL/pll_in125_out33.vhd"
+#TDC Calibration
add_file -vhdl -lib work "./code_EBR/Calibration.vhd"
add_file -vhdl -lib work "./code_EBR/Cal_Limits_v2.vhd"
add_file -vhdl -lib work "./code_EBR/cnt_val.vhd"
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;
signal int2med : int2med_array_t(0 to INTERFACE_NUM); -- 1 more due to uplink
signal med_stat_debug : std_logic_vector (1*64-1 downto 0);
- signal ctrlbus_rx, bustools_rx, bustc_rx, bus_master_out, handlerbus_rx, busdebug_rx, bustdccal_rx, bus_mbs_rx, buscts_rx, buscrireg_rx, busCriDatadbgReg_rx : CTRLBUS_RX;
- signal ctrlbus_tx, bustools_tx, bustc_tx, bus_master_in , busdebug_tx , bustdccal_tx, buscts_tx, bus_mbs_tx, buscrireg_tx, busCriDatadbgReg_tx : CTRLBUS_TX;
+ signal ctrlbus_rx, bustools_rx, bustc_rx, bus_master_out, handlerbus_rx, busdebug_rx, bustdc_rx ,bustdccal_rx, bus_mbs_rx, buscts_rx, buscrireg_rx, busCriDatadbgReg_rx : CTRLBUS_RX;
+ signal ctrlbus_tx, bustools_tx, bustc_tx, bus_master_in , busdebug_tx , bustdc_tx, bustdccal_tx, bus_mbs_tx, buscts_tx, buscrireg_tx, busCriDatadbgReg_tx : CTRLBUS_TX;
signal bussci_tx : ctrlbus_tx_array_t(0 to 3);
signal bussci_rx : ctrlbus_rx_array_t(0 to 3);
signal cts_rdo_trg_status_bits_additional : std_logic_vector(32*cts_rdo_additional_ports-1 downto 0) := (others => '0');
signal cts_rdo_additional : readout_tx_array_t(0 to cts_rdo_additional_ports-1);
- signal cts_rdo_rx : READOUT_RX;
+ signal cts_rdo_rx : READOUT_RX;
+ signal cts_rdo_additional_TDCcal : READOUT_TX;
signal cts_addon_triggers_in : std_logic_vector(ADDON_LINE_COUNT-1 downto 0);
-- signal cts_addon_activity_i,
signal mbs_local_trigger_num_in : std_logic_vector(15 downto 0);
signal mbs_local_trigger_in : std_logic;
+
+ signal dlm_rx_word : std_logic_vector(7 downto 0);
+ signal dlm_rx_i : std_logic;
+
+ signal hit_in_i : std_logic_vector(NUM_TDC_CHANNELS-1 downto 1);
-- new
signal io_dataready_out : std_logic_vector(7 downto 0);
MEDIA_INT2MED => int2med(INTERFACE_NUM),
--Sync operation
- RX_DLM => open,
- RX_DLM_WORD => open,
+ RX_DLM => dlm_rx_i,
+ RX_DLM_WORD => dlm_rx_word,
TX_DLM => open,
TX_DLM_WORD => open,
-- MBS
---------------------------------------------------------------------------
THE_LOCAL_MBS_CREATE : process
- variable cnt : unsigned(16 downto 0) := (others => '0');
+ variable cnt : unsigned(17 downto 0) := (others => '0');
begin
-- wait until rising_edge(clk_sys);
- wait until rising_edge(med2int(INTERFACE_NUM).clk_half);
+ wait until rising_edge(med2int(INTERFACE_NUM).clk_full);
mbs_local_trigger_in <= '0';
if (reset_i = '1') then
cnt := 0;
mbs_local_trigger_num_in <= (others => '0');
+ elsif (dlm_rx_i = '1') then
+ mbs_local_trigger_in <= '1';
+ mbs_local_trigger_num_in <= (others => '0');
+ cnt := 20479;--(10240*2)-1;
else
cnt := cnt + 1;
- if (cnt = 10240) then
+ if (cnt = 20479) then --(10240*2)-1;
mbs_local_trigger_in <= '1';
mbs_local_trigger_num_in <= std_logic_vector(unsigned(mbs_local_trigger_num_in) + 1);
+ end if;
+ if (cnt = (10240*2)) then
+ mbs_local_trigger_in <= '1';
cnt := 0;
end if;
end if;
THE_MBS_MASTER : entity work.mbs_master
port map (
- CLK => clk_sys,
+ CLK => med2int(INTERFACE_NUM).clk_half,
RESET_IN => reset_i,
MBS_CLOCK_OUT => open,
---------------------------------------------------------------------------
THE_BUS_HANDLER : entity work.trb_net16_regio_bus_handler_record
generic map(
- PORT_NUMBER => 12,
- PORT_ADDRESSES => (0 => x"d000", 1 => x"d300", 2 => x"b000", 3 => x"b200", 4 => x"b400", 5 => x"b600", 6 => x"e000",
- 7 => x"ef00", 8 => x"a000", 9 => x"8300", 10 => x"e100", 11 => x"e400", others => x"0000"),
- PORT_ADDR_MASK => (0 => 12, 1 => 1, 2 => 9, 3 => 9, 4 => 9, 5 => 9, 6 => 4,
- 7 => 8 , 8 => 11, 9 => 8, 10 => 8, 11 => 2, others => 0),
+ PORT_NUMBER => 13,
+ PORT_ADDRESSES => (0 => x"d000", 1 => x"d300", 2 => x"b000", 3 => x"b200", 4 => x"b400", 5 => x"b600", 6 => x"c000",
+ 7 => x"e000", 8 => x"ef00", 9 => x"a000", 10 => x"8300", 11 => x"e100", 12 => x"e400", others => x"0000"),
+ PORT_ADDR_MASK => (0 => 12, 1 => 1, 2 => 9, 3 => 9, 4 => 9, 5 => 9, 6 => 12,
+ 7 => 4, 8 => 8, 9 => 11, 10 => 8, 11 => 8, 12 => 2, others => 0),
PORT_MASK_ENABLE => 1
)
port map(
BUS_RX(3) => bussci_rx(1),
BUS_RX(4) => bussci_rx(2),
BUS_RX(5) => bussci_rx(3),
- BUS_RX(6) => bustdccal_rx,
- BUS_RX(7) => busdebug_rx,
- BUS_RX(8) => buscts_rx,
- BUS_RX(9) => buscrireg_rx,
- BUS_RX(10)=> busCriDatadbgReg_rx,
- BUS_RX(11)=> bus_mbs_rx,
+ BUS_RX(6) => bustdc_rx,
+ BUS_RX(7) => bustdccal_rx,
+ BUS_RX(8) => busdebug_rx,
+ BUS_RX(9) => buscts_rx,
+ BUS_RX(10) => buscrireg_rx,
+ BUS_RX(11)=> busCriDatadbgReg_rx,
+ BUS_RX(12)=> bus_mbs_rx,
BUS_TX(0) => bustools_tx,
BUS_TX(1) => bustc_tx,
BUS_TX(2) => bussci_tx(0),
BUS_TX(3) => bussci_tx(1),
BUS_TX(4) => bussci_tx(2),
BUS_TX(5) => bussci_tx(3),
- BUS_TX(6) => bustdccal_tx,
- BUS_TX(7) => busdebug_tx,
- BUS_TX(8) => buscts_tx,
- BUS_TX(9) => buscrireg_tx,
- BUS_TX(10)=> busCriDatadbgReg_tx,
- BUS_TX(11)=> bus_mbs_tx,
+ BUS_TX(6) => bustdc_tx,
+ BUS_TX(7) => bustdccal_tx,
+ BUS_TX(8) => busdebug_tx,
+ BUS_TX(9) => buscts_tx,
+ BUS_TX(10) => buscrireg_tx,
+ BUS_TX(11)=> busCriDatadbgReg_tx,
+ BUS_TX(12)=> bus_mbs_tx,
STAT_DEBUG => open
);
monitor_inputs_i(25 downto 24) <= trig_gen_out_i(1 downto 0);
+-------------------------------------------------------------------------------
+-- TDC
+-------------------------------------------------------------------------------
+ --gen_TDC: if (INCLUDE_TDC = c_YES) generate
+-- THE_TDC : entity work.TDC_record
+-- generic map (
+-- CHANNEL_NUMBER => NUM_TDC_CHANNELS, -- Number of TDC channels per module
+-- STATUS_REG_NR => 21, -- Number of status regs
+-- DEBUG => c_YES,
+-- SIMULATION => c_NO)
+-- port map (
+-- RESET => reset_i,
+-- CLK_TDC => clk_full_osc,
+-- CLK_READOUT => clk_sys, -- Clock for the readout
+-- REFERENCE_TIME => cts_trigger_out, -- Reference time input
+-- HIT_IN => hit_in_i(NUM_TDC_CHANNELS-1 downto 1), -- Channel start signals
+-- HIT_CAL_IN => clk_full_osc,--clk_cal, -- Hits for calibrating the TDC --FIXME: here we need a good cal clock!
+-- -- Trigger signals from handler
+-- BUSRDO_RX => cts_rdo_rx,
+-- BUSRDO_TX => cts_rdo_additional_TDCcal,--_TDCcal
+-- -- Slow control bus
+-- BUS_RX => bustdc_rx,
+-- BUS_TX => bustdc_tx,
+-- -- Dubug signals
+-- INFO_IN => timer,
+-- LOGIC_ANALYSER_OUT => open
+-- );
+
+
+ gen_onlineCal: if (INCLUDE_CALIBRATION = c_YES) generate
+ THE_TDC_CAL : entity work.TDC_Calibration
+ generic map(
+ IS_COMBINER => c_NO,
+ USE_STAT_BITS => c_YES,
+ USE_DATA_WRITE => c_YES,
+ USE_DATA_FINISHED => c_YES,
+ USE_BUSY_RELEASE => c_YES
+ )
+ port map (
+ CLK => clk_sys,
+ RESET => reset_i,
+ DIN => cts_rdo_additional_TDCcal.data,
+ DIN_TYPE => x"4",
+ DIN_info(31 downto 0) => cts_rdo_additional_TDCcal.statusbits,
+ DIN_info(32) => cts_rdo_additional_TDCcal.busy_release,
+ DIN_info(33) => cts_rdo_additional_TDCcal.data_write,
+ DIN_info(34) => cts_rdo_additional_TDCcal.data_finished,
+ DIN_READY => '1',
+ DIN_STAT => (others=>'0'),
+ FPGA_in => timer.network_address,
+ TRIGG_TYPE => cts_rdo_rx.trg_type,
+ DOUT => cts_rdo_additional(INCLUDE_ETM).data,
+ DOUT_info(31 downto 0) => cts_rdo_additional(INCLUDE_ETM).statusbits,
+ DOUT_info(32) => cts_rdo_additional(INCLUDE_ETM).busy_release,
+ DOUT_info(33) => cts_rdo_additional(INCLUDE_ETM).data_write,
+ DOUT_info(34) => cts_rdo_additional(INCLUDE_ETM).data_finished,
+ DOUT_TYPE => open,
+ DOUT_READY => open,
+ DOUT_STAT => open,
+ BUS_RX => bustdccal_rx,
+ BUS_TX => bustdccal_tx
+ );
+ end generate;
+
+ gen_no_onlineCal: if (INCLUDE_CALIBRATION = c_NO) generate
+
+ cts_rdo_additional(INCLUDE_ETM).data <= cts_rdo_additional_TDCcal.data;
+ cts_rdo_additional(INCLUDE_ETM).statusbits <= cts_rdo_additional_TDCcal.statusbits;
+ cts_rdo_additional(INCLUDE_ETM).busy_release <= cts_rdo_additional_TDCcal.busy_release;
+ cts_rdo_additional(INCLUDE_ETM).data_write <= cts_rdo_additional_TDCcal.data_write;
+ cts_rdo_additional(INCLUDE_ETM).data_finished <= cts_rdo_additional_TDCcal.data_finished;
+
+ bustdccal_tx.ack <= '0';
+ bustdccal_tx.nack <= '1';
+ bustdccal_tx.unknown <= '1';
+
+ end generate; -- Calib
+
+ -- For single edge measurements
+ gen_single : if (DOUBLE_EDGE_TYPE = 0 or DOUBLE_EDGE_TYPE = 1 or DOUBLE_EDGE_TYPE = 3 ) and (INCLUDE_ETM = c_NO) generate
+ hit_in_i(NUM_TDC_CHANNELS-1 downto 1) <= (others => '0');
+ end generate;
+
+ gen_single : if (DOUBLE_EDGE_TYPE = 0 or DOUBLE_EDGE_TYPE = 1 or DOUBLE_EDGE_TYPE = 3) and ((ETM_CHOICE = ETM_CHOICE_MBS_VULOM) and (INCLUDE_ETM = c_YES)) generate
+ hit_in_i(1) <= RJ45_SIG_1;--'0';
+ hit_in_i(2) <= RJ45_SIG_1;--async_ext_trig;
+ hit_in_i(3) <= RJ45_SIG_1;--cts_ext_trigger;
+ hit_in_i(4) <= RJ45_SIG_1;--'0';
+ end generate;
+
+ -- end generate;--TDC
+
+
+
---------------------------------------------------------------------------
-- Test Circuits
---------------------------------------------------------------------------