Changeset 10740 for firmware/FTM


Ignore:
Timestamp:
05/18/11 13:59:12 (14 years ago)
Author:
weitzel
Message:
several bugfixes for FTM firmware
Location:
firmware/FTM
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • firmware/FTM/Clock_cond_interface/Clock_cond_interface.vhd

    r10639 r10740  
    4545    clk   : IN  STD_LOGIC;               -- 50 MHz system clock
    4646
    47    
    4847    -- Clock conditioner LMK03000
    4948    -------------------------------------------------------------------------------
     
    5554    LD_Clk_Cond   : in STD_LOGIC;   -- clock conditioner lock detect                 
    5655
    57    
    5856    -- Time Marker
    5957    -------------------------------------------------------------------------------
     
    6563                                 --     operation / physics run
    6664
    67    
    6865    -- FPGA intern clock conditioner configuration data
    6966    -------------------------------------------------------------------------------
     
    7774    cc_R15            : in std_logic_vector (31 downto 0) := (others => '0');
    7875
    79    
    8076    -- FPGA intern control signals
    8177    -------------------------------------------------------------------------------
     
    9793                                       -- 0 = time marker from FPGA for normal
    9894                                       --     operation / physics run
    99    
     95    
    10096  );
    10197end Clock_cond_interface;
     
    10399
    104100architecture Behavioral of Clock_cond_interface is
    105  
    106  
     101   
    107102  component microwire_interface IS
    108103    PORT(
    109104      clk               : IN     std_logic;
    110       clk_uwire         : OUT    std_logic;  --- IN or OUT ?         
     105      clk_uwire         : OUT    std_logic;
    111106      data_uwire        : OUT    std_logic;       
    112107      le_uwire          : OUT    std_logic;
     
    118113  end component;
    119114
    120  
    121   signal clk_50M_sig : STD_LOGIC;       -- system clock
    122   --signal start_config_sig : STD_LOGIC; 
    123 
     115  signal clk_50M_sig   : STD_LOGIC;  -- system clock (50MHz)
     116  signal clk_uwire_sig : STD_LOGIC;  -- 2 MHz
     117 
    124118  signal config_ready_sig : STD_LOGIC;
    125   signal clk_uwire_sig : STD_LOGIC;
    126 
    127119  signal config_started_sig : STD_LOGIC;
    128120 
     
    151143  signal tim_sel_state : TIM_SEL_STATE_TYPE := IDLE;
    152144
     145  signal load_detect_sr : std_logic_vector (1 downto 0) := "00";
    153146
    154147begin
     
    162155        clk_cond_array      => clk_cond_array_sig, 
    163156        config_start        => start_config,
    164        
    165    --   config_start        => start_config_sig, 
    166    --   config_start        <= start_config_sig,
    167        
    168157        config_ready        => config_ready_sig,
    169158        config_started      => config_started_sig
    170159    );
    171160
    172  
    173        
     161  sync_ld_proc : process (clk_uwire_sig)
     162  begin
     163    if rising_edge(clk_uwire_sig) then
     164      load_detect_sr <= load_detect_sr(0) & LD_Clk_Cond;
     165    end if;
     166  end process sync_ld_proc;
     167 
    174168  --config_done <= config_ready_sig;  -- indicates that the configuration
    175169                                    -- has been loaded
    176170
    177 
    178  
    179   config_done <= (config_ready_sig AND LD_Clk_Cond);  -- indicates that the configuration
     171  --config_done <= (config_ready_sig AND LD_Clk_Cond);  -- indicates that the configuration
    180172                                                      -- has been loaded and
    181                                                       -- the PLL is locked again
    182 
    183 
    184  
    185   --TIM_Sel <= timemarker_select;                                   
    186 
     173                                                      -- the PLL has locked
     174 
     175  config_done <= config_ready_sig and (load_detect_sr(1) and load_detect_sr(0));
     176 
    187177  TIM_Sel <= timemarker_select_sig;
    188 
     178 
    189179  tim_sel_proc : process (clk_uwire_sig)
    190180  begin
     
    205195  end process tim_sel_proc;
    206196     
    207            
    208197  CLK_Clk_Cond <= clk_uwire_sig;
    209198
    210199  clk_50M_sig <= clk;
    211200 
    212   -- start_config_sig <= start_config;
    213   --  start_config <= start_config_sig;     
    214201  config_started <= config_started_sig;
    215202
  • firmware/FTM/FTM_central_control.vhd

    r10639 r10740  
    7777    stop_run_ack         : OUT std_logic := '0';
    7878    current_cc_state     : OUT std_logic_vector (15 DOWNTO 0) := X"FFFF";
     79    cc_state_test        : OUT std_logic_vector ( 7 downto 0) := X"FF";
    7980    start_run_param      : IN  std_logic_vector (15 DOWNTO 0);
    8081    start_run_num_events : IN  std_logic_vector (31 DOWNTO 0);
     
    8788architecture Behavioral of FTM_central_control is
    8889
    89   signal reset_scaler_sig    : std_logic := '0';
    90   signal reset_period_sig    : std_logic := '0';
    91   signal scaler_counts_sig   : integer := 0;
    92   signal scaler_period_sig   : integer range 0 to 128 * (LOW_FREQUENCY / SCALER_FREQ_DIVIDER) := 128 * (LOW_FREQUENCY / SCALER_FREQ_DIVIDER);
    93   signal period_finished_sig : std_logic := '0';
    94   signal wait_cnt_sig        : integer range 0 to 10 := 0;
    95   signal new_period_sr_sig   : std_logic_vector(1 downto 0) := (others => '0');
    96   signal new_period_sig      : std_logic := '0';
    97   signal new_period_ack_sig  : std_logic := '0';
    98   signal prescaling_FTU01_sig : std_logic_vector(7 downto 0) := "00100111";
     90  signal reset_scaler_sig      : std_logic := '0';
     91  signal reset_period_sig      : std_logic := '0';
     92  signal scaler_counts_sig     : integer := 0;
     93  signal scaler_period_sig     : integer range 0 to 128 * (LOW_FREQUENCY / SCALER_FREQ_DIVIDER) := 128 * (LOW_FREQUENCY / SCALER_FREQ_DIVIDER);
     94  signal period_finished_sig   : std_logic := '0';
     95  signal wait_cnt_sig          : integer range 0 to 10 := 0;
     96  signal new_period_sr_sig     : std_logic_vector(1 downto 0) := (others => '0');
     97  signal new_period_sig        : std_logic := '0';
     98  signal new_period_ack_sig    : std_logic := '0';
     99  signal prescaling_FTU01_sig  : std_logic_vector(7 downto 0) := "00100111";
    99100 
    100101  type state_central_proc_type is (CP_INIT, CP_INIT_DNA,
     
    114115begin
    115116
    116   central_proc : process (clk, prescaling_FTU01)
     117  --central_proc : process (clk, prescaling_FTU01)
     118  central_proc : process (clk)
    117119  begin
    118120    if rising_edge (clk) then
     
    120122
    121123        when CP_INIT =>  -- wait for DCMs to lock
     124          current_cc_state <= X"FFFF";
     125          --cc_state_test <= X"00";
     126          cc_state_test <= X"19";
    122127          if (clk_ready = '1') then
    123128            state_central_proc <= CP_INIT_DNA;
    124129          end if;
    125130
    126         when CP_INIT_DNA =>  -- get FPGA DNA
     131        when CP_INIT_DNA =>  -- get FPGA DNA
     132          current_cc_state <= X"FFFF";
     133          cc_state_test <= X"01";
    127134          if (dna_ready = '1') then
    128135            state_central_proc <= CP_CONFIG;
     
    134141         
    135142        when CP_CONFIG_START =>
     143          current_cc_state <= FTM_STATE_CFG;
     144          cc_state_test <= X"02";
    136145          if (config_started_ack = '1') then
    137146            config_started <= '0';
     
    140149
    141150        when CP_CONFIG =>
     151          current_cc_state <= FTM_STATE_CFG;
     152          cc_state_test <= X"03";
    142153          config_start_eth <= '1';
    143154          if (config_started_eth = '1') then
     
    147158
    148159        when CP_CONFIG_01 =>
     160          current_cc_state <= FTM_STATE_CFG;
     161          cc_state_test <= X"04";
    149162          if (config_ready_eth = '1') then
    150163            state_central_proc <= CP_CONFIG_CC;
     
    154167
    155168        when CP_CONFIG_CC =>
     169          current_cc_state <= FTM_STATE_CFG;
     170          cc_state_test <= X"05";
    156171          config_start_cc <= '1';
    157172          if (config_started_cc = '1') then
     
    161176
    162177        when CP_CONFIG_CC_01 =>
     178          current_cc_state <= FTM_STATE_CFG;
     179          cc_state_test <= X"06";
    163180          if (config_ready_cc = '1') then
    164181            state_central_proc <= CP_CONFIG_FTU;
     
    166183         
    167184        when CP_CONFIG_FTU =>
     185          current_cc_state <= FTM_STATE_CFG;
     186          cc_state_test <= X"07";
    168187          config_start_ftu <= '1';
    169188          if (config_started_ftu = '1') then
     
    173192
    174193        when CP_CONFIG_FTU_01 =>
     194          current_cc_state <= FTM_STATE_CFG;
     195          cc_state_test <= X"08";
    175196          if (config_ready_ftu = '1') then
    176197            state_central_proc <= CP_CONFIG_SCALER;
     
    178199         
    179200        when CP_CONFIG_SCALER =>
     201          current_cc_state <= FTM_STATE_CFG;
     202          cc_state_test <= X"09";
    180203          prescaling_FTU01_sig <= prescaling_FTU01;
    181204          --reset_period_sig <= '1';
     
    183206
    184207        when CP_CONFIG_SCALER_01 =>
     208          current_cc_state <= FTM_STATE_CFG;
     209          cc_state_test <= X"0A";
    185210          --reset_period_sig <= '0';
    186211          if wait_cnt_sig < 5 then
     
    195220
    196221        when CP_CONFIG_TRIGGER =>
     222          current_cc_state <= FTM_STATE_CFG;
     223          cc_state_test <= X"0B";
    197224          --config trigger_manager block
    198225          config_trigger <= '1';
     
    200227
    201228        when CP_CONFIG_TRIGGER_01 =>
     229          current_cc_state <= FTM_STATE_CFG;
     230          cc_state_test <= X"0C";
    202231          config_trigger <= '0';
    203232          if (config_trigger_done = '1') then
     
    207236        when CP_IDLE =>
    208237          current_cc_state <= FTM_STATE_IDLE;
     238          cc_state_test <= X"0D";
    209239          stop_run_ack <= '1';
    210240          start_run_ack <= '0';
     
    238268        when CP_RUNNING =>
    239269          current_cc_state <= FTM_STATE_RUN;
     270          cc_state_test <= X"0E";
    240271          if (start_run = '0') then
    241272            start_run_ack <= '0';
     
    246277        when CP_RUNNING_01 =>
    247278          current_cc_state <= FTM_STATE_RUN;
     279          cc_state_test <= X"0F";
    248280          start_run_ack <= '1';
    249281          trigger_start <= '1';
     
    277309
    278310        when CP_RUNNING_02 =>
     311          current_cc_state <= FTM_STATE_RUN;
     312          cc_state_test <= X"10";
    279313          if (stop_run = '0') then
    280314            stop_run_ack <= '0';
     
    283317         
    284318        when CP_CONFIG_ACK =>
     319          current_cc_state <= FTM_STATE_CFG;
     320          cc_state_test <= X"11";
    285321          if (config_started_ack = '1') then
    286322            config_started <= '0';
     
    289325         
    290326        when CP_PING =>
     327          cc_state_test <= X"12";
    291328          if (ping_ftu_ready_ftu = '1') then
    292329            if (ping_ftu_start = '0') then
     
    299336
    300337        when CP_START_RATES =>
     338          cc_state_test <= X"13";
    301339          new_period_ack_sig <= '0';
    302340          dd_block_start_ftu <= '1';
     
    309347         
    310348        when CP_READ_RATES =>
     349          cc_state_test <= X"14";
    311350          new_period_ack_sig <= '0';
    312351          if (rates_started_ftu = '1') then
     
    316355
    317356        when CP_READ_RATES_01 =>
     357          cc_state_test <= X"15";
    318358          if (rates_ready_ftu = '1') then
    319359            dd_block_ready_ftu <= '1';
     
    326366         
    327367        when CP_SEND_START =>
     368          cc_state_test <= X"16";
    328369          dd_send <= '1';
    329370          if (dd_send_ack = '1') then
     
    333374         
    334375        when CP_SEND_END =>
     376          cc_state_test <= X"17";
    335377          if (dd_send_ready = '1') then
    336378            --state_central_proc <= CP_IDLE;
     
    338380          end if;
    339381
     382        when others =>
     383          cc_state_test <= X"18";
     384         
    340385      end case;
    341386    end if;
  • firmware/FTM/FTM_top.vhd

    r10639 r10740  
    177177    -- on IO-Bank 3
    178178    -------------------------------------------------------------------------------
    179     -- Crate_Res0   : out STD_LOGIC;
    180     -- Crate_Res1   : out STD_LOGIC;
    181     -- Crate_Res2   : out STD_LOGIC;
    182     -- Crate_Res3   : out STD_LOGIC;
     179    Crate_Res0   : out STD_LOGIC;
     180    Crate_Res1   : out STD_LOGIC;
     181    Crate_Res2   : out STD_LOGIC;
     182    Crate_Res3   : out STD_LOGIC;
    183183
    184184
     
    220220    TIM_Run_p  : out STD_LOGIC;   -- TIM_Run+  Time Marker
    221221    TIM_Run_n  : out STD_LOGIC;   -- TIM_Run-  IO-Bank 2
    222     TIM_Sel    : out STD_LOGIC   -- Time Marker selector on IO-Bank 2
     222    TIM_Sel    : out STD_LOGIC;   -- Time Marker selector on IO-Bank 2
    223223                                                   
    224224    -- CLD_FPGA   : in STD_LOGIC;    -- DRS-Clock feedback into FPGA
     
    253253    -- Testpoints
    254254    -------------------------------------------------------------------------------
    255     --   TP    : inout STD_LOGIC_VECTOR(32 downto 0);
     255    TP    : inout STD_LOGIC_VECTOR(32 downto 0)
    256256    --   TP_in    : in STD_LOGIC_VECTOR(34 downto 33);    -- input only
    257257
     
    395395  signal stop_run_ack_sig           : std_logic;
    396396  signal current_cc_state_sig       : std_logic_vector (15 DOWNTO 0);
     397  signal cc_state_test_sig          : std_logic_vector ( 7 downto 0);
    397398  signal start_run_param_sig        : std_logic_vector (15 DOWNTO 0);
    398399  signal start_run_num_events_sig   : std_logic_vector (31 DOWNTO 0);
     
    560561      stop_run_ack           : OUT std_logic;
    561562      current_cc_state       : OUT std_logic_vector (15 DOWNTO 0);
     563      cc_state_test          : OUT std_logic_vector ( 7 downto 0);
    562564      start_run_param        : IN  std_logic_vector (15 DOWNTO 0);
    563565      start_run_num_events   : IN  std_logic_vector (31 DOWNTO 0);
     
    942944      stop_run_ack           => stop_run_ack_sig,
    943945      current_cc_state       => current_cc_state_sig,
     946      cc_state_test          => cc_state_test_sig,
    944947      start_run_param        => start_run_param_sig,
    945948      start_run_num_events   => start_run_num_events_sig,
     
    11491152  LED_ye  <= led_sig(5 downto 4);
    11501153  LED_gn  <= led_sig(7 downto 6);
     1154
     1155  TP(32 downto 8) <= (others => '0');
     1156  --TP(8) <= clk_50M_sig;
     1157  TP( 7 downto 0) <= cc_state_test_sig;
     1158
     1159  Crate_Res0 <= '1';
     1160  Crate_Res1 <= '1';
     1161  Crate_Res2 <= '1';
     1162  Crate_Res3 <= '1';
    11511163 
    11521164end Behavioral;
  • firmware/FTM/FTM_top_tb.vhd

    r10418 r10740  
    175175      -- Crate-Resets
    176176      -------------------------------------------------------------------------------
    177       -- Crate_Res0   : out STD_LOGIC;
    178       -- Crate_Res1   : out STD_LOGIC;
    179       -- Crate_Res2   : out STD_LOGIC;
    180       -- Crate_Res3   : out STD_LOGIC;
     177      Crate_Res0   : out STD_LOGIC;
     178      Crate_Res1   : out STD_LOGIC;
     179      Crate_Res2   : out STD_LOGIC;
     180      Crate_Res3   : out STD_LOGIC;
    181181
    182182
     
    215215
    216216      TIM_Run_p  : out STD_LOGIC;   -- TIM_Run+  Time Marker
    217       TIM_Run_n  : out STD_LOGIC   -- TIM_Run-
     217      TIM_Run_n  : out STD_LOGIC;   -- TIM_Run-
    218218--      TIM_Sel    : out STD_LOGIC;   -- Time Marker selector
    219219                                                   
     
    248248      -- Testpoints
    249249      -------------------------------------------------------------------------------
    250       --   TP    : inout STD_LOGIC_VECTOR(32 downto 0);
     250      TP    : inout STD_LOGIC_VECTOR(32 downto 0)
    251251      --   TP_in    : in STD_LOGIC_VECTOR(34 downto 33);    -- input only
    252252
     
    290290  signal W_T_sig : STD_LOGIC_VECTOR(3 downto 0) := (others => '0');
    291291  signal SIO_sig : STD_LOGIC := '0';
     292  signal TP_sig  : STD_LOGIC_VECTOR(32 downto 0) := (others => '0');
    292293 
    293294  --Outputs
     
    405406      Bus2_RxD_3    => Bus2_RxD_3_sig,
    406407      Bus2_TxD_3    => Bus2_TxD_3_sig,
    407 --      Crate_Res0    => Crate_Res0_sig,
    408 --      Crate_Res1    => Crate_Res1_sig,
    409 --      Crate_Res2    => Crate_Res2_sig,
    410 --      Crate_Res3    => Crate_Res3_sig,
     408      Crate_Res0    => Crate_Res0_sig,
     409      Crate_Res1    => Crate_Res1_sig,
     410      Crate_Res2    => Crate_Res2_sig,
     411      Crate_Res3    => Crate_Res3_sig,
    411412      Busy0         => Busy0_sig,
    412413      Busy1         => Busy1_sig,
     
    418419      TRG_n         => TRG_n_sig,
    419420      TIM_Run_p     => TIM_Run_p_sig,
    420       TIM_Run_n     => TIM_Run_n_sig
     421      TIM_Run_n     => TIM_Run_n_sig,
    421422--      TIM_Sel       => TIM_Sel_sig,
    422423--      Cal_0_p       => Cal_0_p_sig, 
     
    435436--      Cal_6_n       => Cal_6_n_sig,
    436437--      Cal_7_p       => Cal_7_p_sig,
    437 --      Cal_7_n       => Cal_7_n_sig 
     438--      Cal_7_n       => Cal_7_n_sig,
     439      TP            => TP_sig
    438440    );
    439441
  • firmware/FTM/ethernet/w5300_modul.vhd

    r10639 r10740  
    1818--
    1919----------------------------------------------------------------------------------
    20 
    2120LIBRARY IEEE;
    2221USE IEEE.STD_LOGIC_1164.all;
     
    118117                           INIT, IM, MT, STX, STX1, STX2, STX3, SRX, SRX1, SRX2, SRX3, MAC, MAC1, MAC2, GW, GW1, SNM, SNM1, IP, IP1, TIMEOUT, RETRY,
    119118                           SI, SI0, SI1, SI2, SI3, SI4, SI5, SI6, ESTABLISH, EST1, CONFIG, MAIN, MAIN1, MAIN2, MAIN3, CHK_RECEIVED, SEND_FTU_ERROR,
    120                            READ_DATA, WRITE_TO_SD_ADDR, READ_FTU_ERROR, READ_FROM_SD_ADDR, READ_FROM_DD_ADDR, READ_FROM_FL_ADDR, READ_FROM_HEADER_MODUL);
     119                           READ_DATA, WRITE_TO_SD_ADDR, READ_FTU_ERROR, READ_DD_BLOCK, READ_FROM_SD_ADDR, READ_FROM_DD_ADDR, READ_FROM_FL_ADDR, READ_FROM_HEADER_MODUL);
    121120  type state_write_type is (WR_START, WR_LENGTH, WR_01, WR_02, WR_03, WR_04, WR_05, WR_06, WR_07, WR_08,
    122121                            WR_WRITE_START_DEL, WR_GET_HEADER, WR_GET_HEADER_WAIT, WR_SD_ADDR, WR_FIFO_DATA, WR_FIFO_DATA_01, WR_FIFO_HEADER, WR_FIFO_HEADER_01, WR_WRITE_END_DEL);
    123122  type state_interrupt_1_type is (IR1_01, IR1_02, IR1_03, IR1_04);
    124123  type state_interrupt_2_type is (IR2_01, IR2_02, IR2_03, IR2_04, IR2_05, IR2_06);
    125   type state_read_data_type is (RD_1, RD_2, RD_3, RD_4, RD_5, RD_CMD, RD_CMD_PARSE, RD_PING, RD_WRITE_SD_ADDR, RD_READ_SD_ADDR, RD_READ_SD_BLOCK, RD_READ_DD_BLOCK, RD_WRITE_SD_BLOCK, RD_X_EVNTS,RD_END);
     124  type state_read_data_type is (RD_1, RD_2, RD_3, RD_4, RD_5, RD_CMD, RD_CMD_PARSE, RD_PING, RD_WRITE_SD_ADDR, RD_READ_SD_ADDR, RD_READ_SD_BLOCK, RD_WRITE_SD_BLOCK, RD_X_EVNTS,RD_END);
    126125  type state_write_sd_type is (WRITE_SD_START, WRITE_SD_WAIT, WRITE_SD_END);
    127126  type state_read_sd_type is (READ_SD_START, READ_SD_WAIT, READ_SD_END);
     
    131130  type state_read_dd_block_type is (READ_DD_BLOCK_START, READ_DD_BLOCK_WRITE_GENERAL, READ_DD_BLOCK_WRITE, READ_DD_BLOCK_END, READ_DD_BLOCK_INTERN);
    132131  type state_send_ftu_error_type is (SFE_START, SFE_END);
     132  type state_rd_x_evnts_type is (RD_X_01, RD_X_02, RD_X_03);
    133133
    134134  signal RST_TIME : std_logic_vector(19 downto 0) := X"7A120";
     
    153153  signal state_read_dd_block                     : state_read_dd_block_type      := READ_DD_BLOCK_START;
    154154  signal state_send_ftu_error                    : state_send_ftu_error_type     := SFE_START;
    155 
     155  signal state_rd_x_evnts                        : state_rd_x_evnts_type         := RD_X_01;
    156156
    157157  signal interrupt_ignore : std_logic := '1';
     
    460460          when SI =>
    461461            par_addr   <= W5300_S0_MR + socket_cnt * W5300_S_INC;
    462             par_data   <= X"0101";                    -- ALIGN, TCP
     462            par_data   <= X"0101";                    -- 0x0101: ALIGN, TCP
    463463            state_init <= WRITE_REG;
    464464            next_state <= SI0;
     
    554554            new_config <= '1';
    555555            config_started_ack <= '0';
     556            state_init <= MAIN;
     557
     558          -- main "loop"
     559          when MAIN =>
    556560            if (config_started = '1') then
    557561              new_config <= '0';
    558562              config_started_ack <= '1';
    559               state_init <= MAIN;
    560563            end if;
    561 
    562           -- main "loop"
    563           when MAIN =>
    564564            chk_recv_cntr <= chk_recv_cntr + 1;
    565565            if (chk_recv_cntr = 1000) then
    566566              chk_recv_cntr   <= 0;
    567               state_read_data <= RD_1;
    568567              state_init      <= READ_DATA;
    569568              busy            <= '1';
     
    575574                state_read_dd_block <= READ_DD_BLOCK_END;
    576575              end if;
    577               state_read_data <= RD_READ_DD_BLOCK;
    578               state_init <= READ_DATA;
     576              state_init <= READ_DD_BLOCK;
    579577            elsif ((ftu_error_send = '1') and (wait_for_data_flag = '0')) then
    580578              ftu_error_send_ack <= '1';
     
    587585
    588586
     587          -- read dynamic data block and write it to ethernet
     588          when READ_DD_BLOCK =>
     589            case state_read_dd_block is
     590              when READ_DD_BLOCK_START =>
     591                dd_block_start <= '1';
     592                dd_block_ready <= '0';
     593                if (dd_block_start_ack = '1') then
     594                  dd_block_start <= '0';
     595                  state_read_dd_block <= READ_DD_BLOCK_WRITE_GENERAL;
     596                end if;
     597              -- write on-time counter and tempertures to dd-block
     598              when READ_DD_BLOCK_WRITE_GENERAL =>
     599                dd_write_general <= '1';
     600                if (dd_write_general_started = '1') then
     601                  dd_write_general <= '0';
     602                  state_read_dd_block <= READ_DD_BLOCK_WRITE;
     603                end if;
     604              -- write dd-block to ethernet when on-time counter and temperatures are ready
     605              when READ_DD_BLOCK_WRITE =>
     606                if (dd_write_general_ready = '1') then
     607                  data_package_type <= FTM_PACKAGE_TYPE_DD;
     608                  data_package_length <= DD_BLOCK_SIZE + 1; -- +1 := package end
     609                  read_addr_state <= READ_FROM_DD_ADDR;
     610                  local_sd_addr <= X"000"; -- start at address 0x000
     611                  local_write_length <= "00000" & DD_BLOCK_SIZE;
     612                  state_read_dd_block <= READ_DD_BLOCK_END;
     613                  next_state <= READ_DD_BLOCK;
     614                  state_init <= WRITE_DATA;
     615                end if;
     616              when READ_DD_BLOCK_END =>
     617                dd_block_ready <= '1';
     618                if (internal_cmd = '1') then
     619                  state_read_dd_block <= READ_DD_BLOCK_INTERN;
     620                else
     621                  next_state_read_data <= RD_CMD;
     622                  state_read_dd_block <= READ_DD_BLOCK_START;
     623                  state_init <= READ_DATA;
     624                  state_read_data <= RD_5;
     625                end if;
     626              when READ_DD_BLOCK_INTERN =>
     627                if (dd_send = '0') then
     628                  dd_send_ready <= '1';
     629                  dd_send_ack <= '0';
     630                  internal_cmd <= '0';
     631                  state_read_dd_block <= READ_DD_BLOCK_START;
     632                  state_init <= MAIN;
     633                end if;
     634            end case; -- state_read_dd_block
     635                     
    589636          -- send FTU error message
    590637          when SEND_FTU_ERROR =>
     
    632679                else
    633680                  busy       <= '0';
     681                  state_read_data <= RD_1;
    634682                  state_init <= MAIN;
    635683                end if;
     
    646694
    647695              when RD_END =>
     696                state_read_data <= RD_1;
    648697                if (new_config_flag = '1') then
    649698                  new_config_flag <= '0';
     
    652701                  next_state <= MAIN;
    653702                end if;
    654                 if (internal_cmd = '0') then
    655                   par_addr   <= W5300_S0_CR;
    656                   par_data   <= X"0040";  -- RECV
    657                   state_init <= WRITE_REG;
    658                 else
    659                   internal_cmd <= '0';
    660                   state_init <= MAIN;
    661                 end if;
     703                par_addr   <= W5300_S0_CR;
     704                par_data   <= X"0040";  -- RECV
     705                state_init <= WRITE_REG;
    662706
    663707
     
    701745                          start_run <= '0';
    702746                          state_read_data <= RD_5;
     747                        else
     748                          state_init <= MAIN;
    703749                        end if;
    704750                      -- start run an take X events
     
    716762                      stop_run <= '0';
    717763                      state_read_data <= RD_5;
     764                    else
     765                      state_init <= MAIN;
    718766                    end if;
    719767                   
     
    724772                      crate_reset <= '0';
    725773                      state_read_data <= RD_5;
     774                    else
     775                      state_init <= MAIN;
    726776                    end if;
    727777
     
    754804                      -- read dynamic data block
    755805                      when PAR_READ_DD =>
    756                         state_read_data <= RD_READ_DD_BLOCK;
     806                        state_init <= READ_DD_BLOCK;
     807                        state_read_data <= RD_5;
    757808                      when others =>
    758809                        state_read_data <= RD_5;
     
    788839                      ping_ftu_start <= '0';
    789840                      state_ping <= PING_WAIT;
     841                    else
     842                      state_init <= MAIN;
    790843                    end if;
    791844                  when PING_WAIT =>
    792845                    if (ping_ftu_ready = '1') then
    793846                      state_ping <= PING_WRITE_LIST;
     847                    else
     848                      state_init <= MAIN;
    794849                    end if;
    795850                  when PING_WRITE_LIST =>
     
    803858                    next_state <= READ_DATA;
    804859                    state_init <= WRITE_DATA;
    805                 end case;
    806 
    807               -- read dynamic data block and write it to ethernet
    808               when RD_READ_DD_BLOCK =>
    809                 case state_read_dd_block is
    810                   when READ_DD_BLOCK_START =>
    811                     dd_block_start <= '1';
    812                     dd_block_ready <= '0';
    813                     if (dd_block_start_ack = '1') then
    814                       dd_block_start <= '0';
    815                       state_read_dd_block <= READ_DD_BLOCK_WRITE_GENERAL;
    816                     end if;
    817                   -- write on-time counter and tempertures to dd-block
    818                   when READ_DD_BLOCK_WRITE_GENERAL =>
    819                     dd_write_general <= '1';
    820                     if (dd_write_general_started = '1') then
    821                       dd_write_general <= '0';
    822                       state_read_dd_block <= READ_DD_BLOCK_WRITE;
    823                     end if;
    824                   -- write dd-block to ethernet when on-time counter and temperatures are ready
    825                   when READ_DD_BLOCK_WRITE =>
    826                     if (dd_write_general_ready = '1') then
    827                       data_package_type <= FTM_PACKAGE_TYPE_DD;
    828                       data_package_length <= DD_BLOCK_SIZE + 1; -- +1 := package end
    829                       read_addr_state <= READ_FROM_DD_ADDR;
    830                       local_sd_addr <= X"000"; -- start at address 0x000
    831                       local_write_length <= "00000" & DD_BLOCK_SIZE;
    832                       state_read_dd_block <= READ_DD_BLOCK_END;
    833                       next_state <= READ_DATA;
    834                       state_init <= WRITE_DATA;
    835                     end if;
    836                   when READ_DD_BLOCK_END =>
    837                     dd_block_ready <= '1';
    838                     next_state_read_data <= RD_CMD;
    839                     --
    840                     if (internal_cmd = '1') then
    841                       state_read_dd_block <= READ_DD_BLOCK_INTERN;
    842                     else
    843                       state_read_dd_block <= READ_DD_BLOCK_START;
    844                       state_read_data <= RD_5;
    845                     end if;
    846                   when READ_DD_BLOCK_INTERN =>
    847                     if (dd_send = '0') then
    848                       dd_send_ready <= '1';
    849                       dd_send_ack <= '0';
    850                       state_read_dd_block <= READ_DD_BLOCK_START;
    851                       state_read_data <= RD_5;
    852                     end if;
    853                      
    854860                end case;
    855861
     
    913919              -- read X events
    914920              when RD_X_EVNTS =>
    915                 if (next_packet_data_cnt = 0) then
    916                   start_run_num_events (31 downto 16) <= data_read;
    917                 else
    918                   start_run_num_events (15 downto 0) <= data_read;
    919                   start_run_param <= cmd_array (2);
    920                   start_run <= '1';
    921                   if (start_run_ack = '1') then
    922                     start_run <= '0';
    923                     next_packet_data_cnt <= 0;
     921                case state_rd_x_evnts is
     922                  when RD_X_01 =>
     923                    start_run_num_events (31 downto 16) <= data_read;
     924                    state_read_data <= RD_5;
     925                    state_rd_x_evnts <= RD_X_02;
     926                  when RD_X_02 =>
     927                    start_run_num_events (15 downto 0) <= data_read;
     928                    start_run_param <= cmd_array (2);
     929                    start_run <= '1';
    924930                    wait_for_data_flag <= '0';
    925                     next_state_read_data <= RD_CMD;
    926                     state_read_data <= RD_5;
    927                   end if;
    928                 end if;
    929 
     931                    state_rd_x_evnts <= RD_X_03;
     932                  when RD_X_03 =>
     933                    if (start_run_ack = '1') then
     934                      start_run <= '0';
     935                      state_rd_x_evnts <= RD_X_01;
     936                      next_state_read_data <= RD_CMD;
     937                      state_read_data <= RD_5;
     938                    else
     939                      state_init <= MAIN;
     940                    end if;
     941                end case;
     942             
    930943            end case;  -- state_read_data
    931944           
  • firmware/FTM/ftm_board.ucf

    r10418 r10740  
    251251# on IO-Bank 3
    252252#######################################################
    253 # NET Crate_Res0    LOC  = M1  | IOSTANDARD=LVCMOS33 | SLEW = SLOW ; #
    254 # NET Crate_Res1    LOC  = P1  | IOSTANDARD=LVCMOS33 | SLEW = SLOW ; #
    255 # NET Crate_Res2    LOC  = R3  | IOSTANDARD=LVCMOS33 | SLEW = SLOW ; #
    256 # NET Crate_Res3    LOC  = V2  | IOSTANDARD=LVCMOS33 | SLEW = SLOW ; #
     253NET Crate_Res0    LOC  = M1  | IOSTANDARD=LVCMOS33 | SLEW = SLOW ; #
     254NET Crate_Res1    LOC  = P1  | IOSTANDARD=LVCMOS33 | SLEW = SLOW ; #
     255NET Crate_Res2    LOC  = R3  | IOSTANDARD=LVCMOS33 | SLEW = SLOW ; #
     256NET Crate_Res3    LOC  = V2  | IOSTANDARD=LVCMOS33 | SLEW = SLOW ; #
    257257
    258258
     
    330330# Connector T7
    331331# IO-Bank 0
    332 # NET TP<0> LOC  = B14 | IOSTANDARD=LVCMOS33;  #
    333 # NET TP<1> LOC  = A14 | IOSTANDARD=LVCMOS33;  #
    334 # NET TP<2> LOC  = C13 | IOSTANDARD=LVCMOS33;  #
    335 # NET TP<3> LOC  = B13 | IOSTANDARD=LVCMOS33;  #
     332NET TP<0> LOC  = B14 | IOSTANDARD=LVCMOS33;  #
     333NET TP<1> LOC  = A14 | IOSTANDARD=LVCMOS33;  #
     334NET TP<2> LOC  = C13 | IOSTANDARD=LVCMOS33;  #
     335NET TP<3> LOC  = B13 | IOSTANDARD=LVCMOS33;  #
    336336
    337337# Connector T10
    338338# IO-Bank 0
    339 # NET TP<4> LOC  = D13 | IOSTANDARD=LVCMOS33;  #
    340 # NET TP<5> LOC  = C12 | IOSTANDARD=LVCMOS33;  #
    341 # NET TP<6> LOC  = B12 | IOSTANDARD=LVCMOS33;  #
    342 # NET TP<7> LOC  = A12 | IOSTANDARD=LVCMOS33;  #
     339NET TP<4> LOC  = D13 | IOSTANDARD=LVCMOS33;  #
     340NET TP<5> LOC  = C12 | IOSTANDARD=LVCMOS33;  #
     341NET TP<6> LOC  = B12 | IOSTANDARD=LVCMOS33;  #
     342NET TP<7> LOC  = A12 | IOSTANDARD=LVCMOS33;  #
    343343
    344344# on Connector T12
    345345# IO-Bank 0
    346 # NET TP<8> LOC  = D11 | IOSTANDARD=LVCMOS33;  #
    347 # NET TP<9> LOC  = C11 | IOSTANDARD=LVCMOS33;  #
     346NET TP<8> LOC  = D11 | IOSTANDARD=LVCMOS33;  #
     347NET TP<9> LOC  = C11 | IOSTANDARD=LVCMOS33;  #
    348348
    349349# on Connector T14
    350350# IO-Bank 0
    351 # NET TP<10> LOC  = D10 | IOSTANDARD=LVCMOS33;  #
    352 # NET TP<11> LOC  = C10 | IOSTANDARD=LVCMOS33;  #
    353 # NET TP<12> LOC  = A10 | IOSTANDARD=LVCMOS33;  #
    354 # NET TP<13> LOC  = B10 | IOSTANDARD=LVCMOS33;  #
     351NET TP<10> LOC  = D10 | IOSTANDARD=LVCMOS33;  #
     352NET TP<11> LOC  = C10 | IOSTANDARD=LVCMOS33;  #
     353NET TP<12> LOC  = A10 | IOSTANDARD=LVCMOS33;  #
     354NET TP<13> LOC  = B10 | IOSTANDARD=LVCMOS33;  #
    355355
    356356# on Connector T16
    357357# IO-Bank 0
    358 # NET TP<14> LOC  = A9 | IOSTANDARD=LVCMOS33;  #
    359 # NET TP<15> LOC  = B9 | IOSTANDARD=LVCMOS33;  #
    360 # NET TP<16> LOC  = A8 | IOSTANDARD=LVCMOS33;  #
    361 # NET TP<17> LOC  = B8 | IOSTANDARD=LVCMOS33;  #
     358NET TP<14> LOC  = A9 | IOSTANDARD=LVCMOS33;  #
     359NET TP<15> LOC  = B9 | IOSTANDARD=LVCMOS33;  #
     360NET TP<16> LOC  = A8 | IOSTANDARD=LVCMOS33;  #
     361NET TP<17> LOC  = B8 | IOSTANDARD=LVCMOS33;  #
    362362
    363363# on Connector T8
    364364# IO-Bank 0
    365 # NET TP<18> LOC  = C8 | IOSTANDARD=LVCMOS33;  #
    366 # NET TP<19> LOC  = D8 | IOSTANDARD=LVCMOS33;  #
    367 # NET TP<20> LOC  = C6 | IOSTANDARD=LVCMOS33;  #
    368 # NET TP<21> LOC  = B6 | IOSTANDARD=LVCMOS33;  #
     365NET TP<18> LOC  = C8 | IOSTANDARD=LVCMOS33;  #
     366NET TP<19> LOC  = D8 | IOSTANDARD=LVCMOS33;  #
     367NET TP<20> LOC  = C6 | IOSTANDARD=LVCMOS33;  #
     368NET TP<21> LOC  = B6 | IOSTANDARD=LVCMOS33;  #
    369369
    370370# on Connector T9
    371371# IO-Bank 0
    372 # NET TP<22> LOC  = C7 | IOSTANDARD=LVCMOS33;  #
    373 # NET TP<23> LOC  = B7 | IOSTANDARD=LVCMOS33;  #
     372NET TP<22> LOC  = C7 | IOSTANDARD=LVCMOS33;  #
     373NET TP<23> LOC  = B7 | IOSTANDARD=LVCMOS33;  #
    374374
    375375# on Connector T11
    376376# IO-Bank 3
    377 # NET TP<24> LOC  = Y1  | IOSTANDARD=LVCMOS33;  #
    378 # NET TP<25> LOC  = AA3 | IOSTANDARD=LVCMOS33;  #
    379 # NET TP<26> LOC  = AA2 | IOSTANDARD=LVCMOS33;  #
    380 # NET TP<27> LOC  = AC1 | IOSTANDARD=LVCMOS33;  #
     377NET TP<24> LOC  = Y1  | IOSTANDARD=LVCMOS33;  #
     378NET TP<25> LOC  = AA3 | IOSTANDARD=LVCMOS33;  #
     379NET TP<26> LOC  = AA2 | IOSTANDARD=LVCMOS33;  #
     380NET TP<27> LOC  = AC1 | IOSTANDARD=LVCMOS33;  #
    381381
    382382# on Connector T13
    383383# IO-Bank 3
    384 # NET TP<28> LOC  = AB1 | IOSTANDARD=LVCMOS33;  #
    385 # NET TP<29> LOC  = AC3 | IOSTANDARD=LVCMOS33;  #
    386 # NET TP<30> LOC  = AC2 | IOSTANDARD=LVCMOS33;  #
    387 # NET TP<31> LOC  = AD2 | IOSTANDARD=LVCMOS33;  #
     384NET TP<28> LOC  = AB1 | IOSTANDARD=LVCMOS33;  #
     385NET TP<29> LOC  = AC3 | IOSTANDARD=LVCMOS33;  #
     386NET TP<30> LOC  = AC2 | IOSTANDARD=LVCMOS33;  #
     387NET TP<31> LOC  = AD2 | IOSTANDARD=LVCMOS33;  #
    388388
    389389# on Connector T15
    390 # NET TP<32> LOC  = AD1 | IOSTANDARD=LVCMOS33;  # IO-Bank 3
     390NET TP<32> LOC  = AD1 | IOSTANDARD=LVCMOS33;  # IO-Bank 3
    391391# NET TP_in<33> LOC  = AE2 | IOSTANDARD=LVCMOS33;  # input only
    392392# NET TP_in<34> LOC  = AE1 | IOSTANDARD=LVCMOS33;  # input only
  • firmware/FTM/ftm_definitions.vhd

    r10639 r10740  
    331331      --X"0010", -- SD_ADDR_general_settings  -- general settings
    332332      X"0000", -- SD_ADDR_led               -- on-board status LEDs
    333       X"03FF", -- SD_ADDR_lp_pt_freq        -- light pulser and pedestal trigger frequency
     333      X"03E8", -- SD_ADDR_lp_pt_freq        -- light pulser and pedestal trigger frequency
    334334      --X"0001", -- SD_ADDR_lp_pt_freq        -- light pulser and pedestal trigger frequency
     335      X"0000", -- SD_ADDR_lp_pt_ratio...    -- ratio between LP1, LP2 and pedestal triggers
    335336      --X"0001", -- SD_ADDR_lp_pt_ratio...    -- ratio between LP1, LP2 and pedestal triggers
    336       X"0001", -- SD_ADDR_lp_pt_ratio...    -- ratio between LP1, LP2 and pedestal triggers
    337337      X"0004", -- SD_ADDR_lp1_amplitude     -- light pulser 1 amplitude
    338338      X"0005", -- SD_ADDR_lp2_amplitude     -- light pulser 2 amplitude
     
    344344      X"0000", -- SD_ADDR_timemarker_delay  -- timemarker delay
    345345      X"0017", -- SD_ADDR_dead_time         -- dead time, 8ns + 4x23ns = 100ns
    346       --X"0000", -- SD_ADDR_dead_time         -- dead time, 8ns + 4x25ns = 108ns
    347346      X"0003", -- SD_ADDR_cc_R0_HI          -- clock conditioner R0 bits 31...16
    348347      X"8000", -- SD_ADDR_cc_R0_LO          -- clock conditioner R0 bits 15...0
  • firmware/FTM/ftu_control/FTM_ftu_control.vhd

    r10418 r10740  
    219219  signal frame_cnt           : integer range 0 to (FTU_RS485_BLOCK_WIDTH / 8) := 0;
    220220  signal FTU_list_reg_cnt    : integer range 0 to NO_OF_FTU_LIST_REG := 0;
    221   signal FTU_list_header_cnt : integer range 0 to FTU_LIST_RAM_OFFSET := 0;
     221  signal FTU_list_header_cnt : integer range 0 to (FTU_LIST_RAM_OFFSET  + 1):= 0;
    222222  signal DD_RAM_reg_cnt      : integer range 0 to NO_OF_DD_RAM_REG := 0;
    223223 
     
    442442          reset_crc_from_FSM_sig <= '0';
    443443          enable_crc_from_FSM_sig <= '0';
    444           new_config_done <= '0';
    445           ping_all_done   <= '0';
    446           read_rates_done <= '0';
     444          --new_config_done <= '0';
     445          --ping_all_done   <= '0';
     446          --read_rates_done <= '0';
    447447          if (new_config = '1') then
     448            new_config_done <= '0';--
    448449            new_config_started <= '1';
    449450            ping_all_started   <= '0';
     
    451452            FTM_ftu_rs485_control_State <= ACTIVE_LIST;
    452453          elsif (new_config = '0' and  ping_all = '1') then
     454            ping_all_done   <= '0';--
    453455            new_config_started <= '0';
    454456            ping_all_started   <= '1';
     
    457459            FTM_ftu_rs485_control_State <= PING;
    458460          elsif (new_config = '0' and  ping_all = '0' and read_rates = '1') then
     461            read_rates_done <= '0';--
    459462            new_config_started <= '0';
    460463            ping_all_started   <= '0';
     
    836839        when PING_END =>  -- add final ping statistics to FTU-list
    837840          if (FTU_list_header_cnt < FTU_LIST_RAM_OFFSET) then
    838             FTU_list_header_cnt <= FTU_list_header_cnt + 1;
     841            --FTU_list_header_cnt <= FTU_list_header_cnt + 1;
    839842            FTM_ftu_rs485_control_State <= PING_END_1;
    840843          else
     
    854857          if (FTUlist_RAM_busy = '0') then
    855858            write_FTUlist_RAM <= '1';
    856             addr_FTUlist_RAM <= conv_std_logic_vector((FTU_list_header_cnt - 1), FTU_LIST_RAM_ADDR_WIDTH);
    857             if ((FTU_list_header_cnt - 1) = 0) then
     859            --addr_FTUlist_RAM <= conv_std_logic_vector((FTU_list_header_cnt - 1), FTU_LIST_RAM_ADDR_WIDTH);
     860            addr_FTUlist_RAM <= conv_std_logic_vector((FTU_list_header_cnt), FTU_LIST_RAM_ADDR_WIDTH);
     861            --if ((FTU_list_header_cnt - 1) = 0) then
     862            if ((FTU_list_header_cnt) = 0) then
    858863              data_FTUlist_RAM <= conv_std_logic_vector(no_of_FTU_answer_sig, 16);
    859             elsif ((FTU_list_header_cnt - 1) < 5) then
    860               data_FTUlist_RAM <= conv_std_logic_vector(FTU_answer_array_sig(FTU_list_header_cnt - 2), 16);
    861             elsif ((FTU_list_header_cnt - 1) < 9) then
    862               data_FTUlist_RAM <= active_FTU_array_sig(FTU_list_header_cnt - 6);
     864            --elsif ((FTU_list_header_cnt - 1) < 5) then
     865            elsif ((FTU_list_header_cnt) < 5) then
     866              --data_FTUlist_RAM <= conv_std_logic_vector(FTU_answer_array_sig(FTU_list_header_cnt - 2), 16);
     867              data_FTUlist_RAM <= conv_std_logic_vector(FTU_answer_array_sig(FTU_list_header_cnt - 1), 16);
     868            --elsif ((FTU_list_header_cnt - 1) < 9) then
     869            elsif ((FTU_list_header_cnt) < 9) then
     870              --data_FTUlist_RAM <= active_FTU_array_sig(FTU_list_header_cnt - 6);
     871              --data_FTUlist_RAM <= conv_std_logic_vector(FTU_list_header_cnt - 6, 16);
     872              data_FTUlist_RAM <= active_FTU_array_sig(FTU_list_header_cnt - 5);
    863873            end if;
    864874            FTM_ftu_rs485_control_State <= PING_END_2;
     
    873883        when PING_END_3 =>
    874884          if (FTUlist_RAM_ready = '1') then
     885            FTU_list_header_cnt <= FTU_list_header_cnt + 1;
    875886            FTM_ftu_rs485_control_State <= PING_END;
    876887          end if;
Note: See TracChangeset for help on using the changeset viewer.