From 8a96e19db48df0e6dfbabec00f0bf6b2c30bedc1 Mon Sep 17 00:00:00 2001 From: Jan Michel Date: Tue, 23 Aug 2022 16:26:26 +0200 Subject: [PATCH] update and cleanup of OEP design add automatic ADC readings to OEP --- DBO/config.vhd | 5 +- OEP/config.vhd | 3 +- OEP/config_compile_frankfurt.pl | 4 +- OEP/mdcoep.prj | 5 +- OEP/mdcoep.vhd | 88 +++++++------------------------- OEP/par.p2t | 2 +- code/pasttrec_spi/README.md | 2 + code/pasttrec_spi/readme.pdf | Bin 0 -> 33958 bytes 8 files changed, 33 insertions(+), 76 deletions(-) create mode 100644 code/pasttrec_spi/readme.pdf diff --git a/DBO/config.vhd b/DBO/config.vhd index 4d4e5d9..144af43 100644 --- a/DBO/config.vhd +++ b/DBO/config.vhd @@ -32,9 +32,10 @@ package config is constant INIT_ADDRESS : std_logic_vector := x"F6DC"; constant BROADCAST_SPECIAL_ADDR : std_logic_vector := x"91"; - constant INCLUDE_UART : integer := c_NO; --300 slices + constant INCLUDE_UART : integer := c_NO; --300 slices constant INCLUDE_SPI : integer := c_NO; --300 slices - constant INCLUDE_LCD : integer := c_NO; --800 slices + constant INCLUDE_ADC : integer := c_NO; + constant INCLUDE_LCD : integer := c_NO; --800 slices constant INCLUDE_DEBUG_INTERFACE: integer := c_NO; --300 slices --input monitor and trigger generation logic diff --git a/OEP/config.vhd b/OEP/config.vhd index 7a539d5..96b8026 100644 --- a/OEP/config.vhd +++ b/OEP/config.vhd @@ -26,7 +26,8 @@ package config is constant BROADCAST_SPECIAL_ADDR : std_logic_vector := x"90"; constant INCLUDE_UART : integer := c_NO; --300 slices - constant INCLUDE_SPI : integer := c_YES; --300 slices + constant INCLUDE_SPI : integer := c_NO; --300 slices + constant INCLUDE_ADC : integer := c_YES; --300 slices constant INCLUDE_LCD : integer := c_NO; --800 slices constant INCLUDE_DEBUG_INTERFACE: integer := c_NO; --300 slices diff --git a/OEP/config_compile_frankfurt.pl b/OEP/config_compile_frankfurt.pl index f234c89..310aee4 100644 --- a/OEP/config_compile_frankfurt.pl +++ b/OEP/config_compile_frankfurt.pl @@ -7,8 +7,8 @@ Speedgrade => '8', TOPNAME => "mdcoep", lm_license_file_for_synplify => "27020\@jspc29", #"27000\@lxcad01.gsi.de"; lm_license_file_for_par => "1702\@jspc29", -lattice_path => '/d/jspc29/lattice/diamond/3.11_x64', -synplify_path => '/d/jspc29/lattice/synplify/R-2020.09-SP1/', +lattice_path => '/d/jspc29/lattice/diamond/3.12', +synplify_path => '/d/jspc29/lattice/synplify/S-2021.09-SP2/', nodelist_file => '../nodelist_frankfurt.txt', pinout_file => 'oep', diff --git a/OEP/mdcoep.prj b/OEP/mdcoep.prj index d1d4f54..1bdf659 100644 --- a/OEP/mdcoep.prj +++ b/OEP/mdcoep.prj @@ -114,6 +114,8 @@ add_file -vhdl -lib work "../../trb3sc/code/load_settings.vhd" add_file -vhdl -lib work "../../trb3sc/code/spi_master_generic.vhd" add_file -vhdl -lib work "../../trb3/base/code/input_to_trigger_logic_record.vhd" add_file -vhdl -lib work "../../trb3/base/code/input_statistics.vhd" +add_file -vhdl -lib work "../../trb3sc/code/adc_controller.vhd" + #SlowControl files add_file -vhdl -lib work "../../trbnet/trb_net16_regio_bus_handler.vhd" @@ -153,11 +155,12 @@ add_file -vhdl -lib work "../../trbnet/trb_net_CRC.vhd" add_file -vhdl -lib work "../../trbnet/trb_net_CRC8.vhd" add_file -vhdl -lib work "../../trbnet/basics/rom_16x8.vhd" add_file -vhdl -lib work "../../trbnet/basics/ram.vhd" +add_file -vhdl -lib work "../../trbnet/basics/ram_dp.vhd" +add_file -vhdl -lib work "../../trbnet/basics/ram_dp_19x8_preset.vhd" add_file -vhdl -lib work "../../trbnet/basics/pulse_sync.vhd" add_file -vhdl -lib work "../../trbnet/basics/state_sync.vhd" add_file -vhdl -lib work "../../trbnet/basics/ram_16x8_dp.vhd" add_file -vhdl -lib work "../../trbnet/basics/ram_16x16_dp.vhd" -add_file -vhdl -lib work "../../trbnet/basics/ram_dp.vhd" add_file -vhdl -lib work "../../trbnet/trb_net16_term.vhd" add_file -vhdl -lib work "../../trbnet/trb_net_sbuf.vhd" add_file -vhdl -lib work "../../trbnet/trb_net_sbuf5.vhd" diff --git a/OEP/mdcoep.vhd b/OEP/mdcoep.vhd index 2db9887..757e30a 100644 --- a/OEP/mdcoep.vhd +++ b/OEP/mdcoep.vhd @@ -45,9 +45,10 @@ entity mdcoep is ADC_CS : out std_logic; --LED - LED : out std_logic_vector(7 downto 0) + LED : out std_logic_vector(7 downto 0); --Other Connectors + TEST : out std_logic_vector(8 downto 1) ); @@ -89,9 +90,6 @@ architecture arch of mdcoep is signal med_stat_op : std_logic_vector (INTERFACE_NUM*16-1 downto 0); signal med_ctrl_op : std_logic_vector (INTERFACE_NUM*16-1 downto 0); signal rdack, wrack : std_logic; - - signal readout_rx : READOUT_RX; - signal readout_tx : readout_tx_array_t(0 to 0); signal ctrlbus_tx, bustdc_tx, bussci_tx, bussci2_tx, bustools_tx, bustc_tx, bus_master_in : CTRLBUS_TX; signal ctrlbus_rx, bustdc_rx, bussci_rx, bussci2_rx, bustools_rx, bustc_rx, bus_master_out : CTRLBUS_RX; @@ -139,7 +137,6 @@ begin THE_MEDIA_INTERFACE : entity work.med_ecp5_sfp_sync_2 generic map( - IS_SYNC_SLAVE => (c_YES,c_NO) ) port map( @@ -208,61 +205,10 @@ begin STAT_DEBUG => open, --med_stat_debug(63 downto 0), CTRL_DEBUG => open ); - ---------------------------------------------------------------------------- --- Endpoint ---------------------------------------------------------------------------- --- THE_ENDPOINT : entity work.trb_net16_endpoint_hades_full_handler_record --- generic map ( --- ADDRESS_MASK => x"FFFF", --- BROADCAST_BITMASK => x"FF", --- REGIO_INIT_ENDPOINT_ID => x"0001", --- REGIO_USE_1WIRE_INTERFACE => c_I2C, --- TIMING_TRIGGER_RAW => c_YES, --- --Configure data handler --- DATA_INTERFACE_NUMBER => 1, --- DATA_BUFFER_DEPTH => EVENT_BUFFER_SIZE, --- DATA_BUFFER_WIDTH => 32, --- DATA_BUFFER_FULL_THRESH => 2**EVENT_BUFFER_SIZE-EVENT_MAX_SIZE, --- TRG_RELEASE_AFTER_DATA => c_YES, --- HEADER_BUFFER_DEPTH => 9, --- HEADER_BUFFER_FULL_THRESH => 2**9-16 --- ) --- --- port map( --- -- Misc --- CLK => clk_sys, --- RESET => reset_i, --- CLK_EN => '1', --- --- -- Media direction port --- MEDIA_MED2INT => med2int(0), --- MEDIA_INT2MED => int2med(0), --- --- --Timing trigger in --- TRG_TIMING_TRG_RECEIVED_IN => TRG, --- --- READOUT_RX => readout_rx, --- READOUT_TX => readout_tx, --- --- --Slow Control Port --- REGIO_COMMON_STAT_REG_IN => common_stat_reg, --0x00 --- REGIO_COMMON_CTRL_REG_OUT => common_ctrl_reg, --0x20 --- BUS_RX => ctrlbus_rx, --- BUS_TX => ctrlbus_tx, --- BUS_MASTER_IN => bus_master_in, --- BUS_MASTER_OUT => bus_master_out, --- BUS_MASTER_ACTIVE => bus_master_active, --- --- ONEWIRE_INOUT => open, --- I2C_SCL => I2C_SCL, --- I2C_SDA => I2C_SDA, --- --Timing registers --- TIMERS_OUT => timer --- ); --- --- +--------------------------------------------------------------------------- +-- The Hub +--------------------------------------------------------------------------- THE_HUB : entity work.trb_net16_hub_base generic map( HUB_USED_CHANNELS => (1,1,0,1), @@ -275,6 +221,10 @@ begin HARDWARE_VERSION => HARDWARE_INFO, INCLUDED_FEATURES => INCLUDED_FEATURES, INIT_ENDPOINT_ID => x"0001", + INIT_CTRL_REGS => x"00000000_00000000_00000000_00000000" & + x"00000000_00000000_00000000_00000000" & + x"00000000_00000000_800a4000_00000000" & + x"FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF", CLOCK_FREQUENCY => CLOCK_FREQUENCY, BROADCAST_SPECIAL_ADDR => BROADCAST_SPECIAL_ADDR, COMPILE_TIME => std_logic_vector(to_unsigned(VERSION_NUMBER_TIME,32)) @@ -340,8 +290,6 @@ begin --------------------------------------------------------------------------- -- Bus Handler --------------------------------------------------------------------------- - - THE_BUS_HANDLER : entity work.trb_net16_regio_bus_handler_record generic map( PORT_NUMBER => 4, @@ -399,7 +347,7 @@ begin --Trigger & Monitor MONITOR_INPUTS => monitor_inputs_i, TRIG_GEN_INPUTS => trigger_inputs_i, - TRIG_GEN_OUTPUTS(1 downto 0) => open, --GPIO(3 downto 2), + TRIG_GEN_OUTPUTS(1 downto 0) => open, --SED SED_ERROR_OUT => sed_error_i, --Slowcontrol @@ -421,8 +369,15 @@ begin --------------------------------------------------------------------------- -- I/O --------------------------------------------------------------------------- +monitor_inputs_i <= (others => '0'); +trigger_inputs_i <= (others => '0'); + + +TEST(1) <= ADC_CS; +TEST(2) <= ADC_MOSI; +TEST(3) <= ADC_MISO; +TEST(4) <= ADC_SCK; - --------------------------------------------------------------------------- -- LED --------------------------------------------------------------------------- @@ -433,12 +388,7 @@ begin LED(3) <= (med2int(1).stat_op(10) or med2int(1).stat_op(11)) and not led_off; LED(4) <= med2int(1).stat_op(9) and not led_off; -------------------------------------------------------------------------------- --- No trigger/data endpoint included -------------------------------------------------------------------------------- --- readout_tx(0).data_finished <= '1'; --- readout_tx(0).data_write <= '0'; --- readout_tx(0).busy_release <= '1'; + end architecture; diff --git a/OEP/par.p2t b/OEP/par.p2t index 9e4ef4d..4c0769f 100644 --- a/OEP/par.p2t +++ b/OEP/par.p2t @@ -4,7 +4,7 @@ #-m nodelist.txt # Controlled by the compile.pl script. #-n 1 # Controlled by the compile.pl script. -s 10 --t 2 +-t 5 -c 2 -e 2 -i 10 diff --git a/code/pasttrec_spi/README.md b/code/pasttrec_spi/README.md index 1c4f40e..c7c3416 100755 --- a/code/pasttrec_spi/README.md +++ b/code/pasttrec_spi/README.md @@ -25,7 +25,9 @@ The maximum number of connected PASTTREC chips to the whole system is 16. Every The last parameter SPI_CHIP_IDs should be filled with all chip ids used in a system. The two least significant bytes set the id for first PASTTREC in the first SPI bunch, while the SPI_CHIP_IDs(2k + 1 downto 2k) sets chips id for PASTTREC #k+1. Example: 2 SPI bunches with 2 PASTTRECs in each. First bunch’ chip ids: 00 01. Second bunch’ chip ids: 01 10. Then SPI_CHIP_IDs must be filled with x"000000" & “10010100”. + ### Port map + | Name | Type | Mode | Description | | ----------- | ---------- | ---- | ----------------------------------- | | CLK | std_logic | In | Clock signal | diff --git a/code/pasttrec_spi/readme.pdf b/code/pasttrec_spi/readme.pdf new file mode 100644 index 0000000000000000000000000000000000000000..64aaa43cb3f297af2b5645a52c1efbef293c218d GIT binary patch literal 33958 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