Changeset 10328 for firmware/FTM


Ignore:
Timestamp:
04/08/11 14:26:50 (14 years ago)
Author:
weitzel
Message:
changes in FTM firmware to debug rates readout, clock conditioner added
Location:
firmware/FTM
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • firmware/FTM/FTM_central_control.vhd

    r10256 r10328  
    6666architecture Behavioral of FTM_central_control is
    6767
    68   signal reset_scaler_sig  : std_logic := '0';
    69   signal scaler_counts_sig : integer := 0;
    70   signal scaler_period_sig : integer range 0 to 128 * (LOW_FREQUENCY / SCALER_FREQ_DIVIDER) := 128 * (LOW_FREQUENCY / SCALER_FREQ_DIVIDER);
     68  signal reset_scaler_sig    : std_logic := '0';
     69  signal reset_period_sig    : std_logic := '0';
     70  signal scaler_counts_sig   : integer := 0;
     71  signal scaler_period_sig   : integer range 0 to 128 * (LOW_FREQUENCY / SCALER_FREQ_DIVIDER) := 128 * (LOW_FREQUENCY / SCALER_FREQ_DIVIDER);
     72  signal period_finished_sig : std_logic := '0';
     73  signal wait_cnt_sig        : integer range 0 to 10 := 0;
     74  signal new_period_sr_sig   : std_logic_vector(1 downto 0) := (others => '0');
     75  signal new_period_sig      : std_logic := '0';
     76  signal new_period_ack_sig  : std_logic := '0';
     77  signal prescaling_FTU01_sig : std_logic_vector(7 downto 0) := "00100111";
    7178 
    7279  type state_central_proc_type is (CP_INIT,
    7380                                   CP_CONFIG_START, CP_CONFIG, CP_CONFIG_01,
    7481                                   CP_CONFIG_CC, CP_CONFIG_CC_01,
    75                                    CP_CONFIG_FTU, CP_CONFIG_FTU_01, CP_CONFIG_SCALER,
     82                                   CP_CONFIG_FTU, CP_CONFIG_FTU_01,
     83                                   CP_CONFIG_SCALER, CP_CONFIG_SCALER_01,
    7684                                   CP_IDLE, CP_PING, CP_READ_RATES, CP_READ_RATES_01,
    7785                                   CP_SEND_START, CP_SEND_END);
     
    8997         
    9098        when CP_CONFIG_START =>
    91           reset_scaler_sig <= '1';
    9299          if (config_started_ack = '1') then
    93100            config_started <= '0';
     
    96103
    97104        when CP_CONFIG =>
    98           reset_scaler_sig <= '1';
    99105          config_start_eth <= '1';
    100106          if (config_started_eth = '1') then
     
    133139            state_central_proc <= CP_CONFIG_SCALER;
    134140          end if;
    135 
     141         
    136142        when CP_CONFIG_SCALER =>
    137           --if ((conv_integer(unsigned(prescaling_FTU01))) mod 2 = 0) then
    138             --scaler_period_sig <= ((((conv_integer(unsigned(prescaling_FTU01)) / 2)) * (LOW_FREQUENCY / SCALER_FREQ_DIVIDER)) + (LOW_FREQUENCY / (2 * SCALER_FREQ_DIVIDER)));
    139           --else
    140             --scaler_period_sig <= (((conv_integer(unsigned(prescaling_FTU01)) - 1) / 2) + 1) * (LOW_FREQUENCY / SCALER_FREQ_DIVIDER);
    141           --end if;
    142           reset_scaler_sig <= '1';
    143           state_central_proc <= CP_IDLE;
    144          
     143          prescaling_FTU01_sig <= prescaling_FTU01;
     144          --reset_period_sig <= '1';
     145          state_central_proc <= CP_CONFIG_SCALER_01;
     146
     147        when CP_CONFIG_SCALER_01 =>
     148          --reset_period_sig <= '0';
     149          if wait_cnt_sig < 5 then
     150            wait_cnt_sig <= wait_cnt_sig + 1;
     151            reset_scaler_sig <= '1';
     152            state_central_proc <= CP_CONFIG_SCALER_01;
     153          else
     154            wait_cnt_sig <= 0;
     155            reset_scaler_sig <= '0';
     156            state_central_proc <= CP_IDLE;
     157          end if;
     158           
    145159        when CP_IDLE =>
    146           reset_scaler_sig <= '0';
    147160          if (new_config = '1') then
    148161            config_started <= '1';
    149162            state_central_proc <= CP_CONFIG_START;
    150163          elsif (ping_ftu_start = '1') then
    151           --else
    152164            ping_ftu_start_ftu <= '1';
    153165            if (ping_ftu_started_ftu = '1') then
     
    158170            end if;           
    159171          --elsif (scaler_counts_sig = scaler_period_sig) then
    160           --  reset_scaler_sig <= '1';
    161           --  rates_ftu <= '1';
    162           --  state_central_proc <= CP_READ_RATES;
     172          elsif (new_period_sig = '1') then
     173            new_period_ack_sig <= '1';
     174            rates_ftu <= '1';
     175            state_central_proc <= CP_READ_RATES;
    163176          end if;
    164177
     
    173186
    174187        when CP_READ_RATES =>
    175           reset_scaler_sig <= '0';
     188          new_period_ack_sig <= '0';
    176189          if (rates_started_ftu = '1') then
    177190            rates_ftu <= '0';
     
    202215  scaler_process: process(reset_scaler_sig, clk_scaler)
    203216  begin
    204     if reset_scaler_sig = '1' then
     217    if (reset_scaler_sig = '1') then
    205218      scaler_counts_sig <= 0;
     219      period_finished_sig <= '0';
    206220    elsif rising_edge(clk_scaler) then
    207221      if (scaler_counts_sig < scaler_period_sig) then
    208222        scaler_counts_sig <= scaler_counts_sig + 1;
     223        period_finished_sig <= '0';
    209224      else
    210         scaler_counts_sig <= scaler_counts_sig;
     225        period_finished_sig <= '1';
     226        scaler_counts_sig <= 0;
    211227      end if;
    212228    end if;
    213229  end process scaler_process;
    214230
    215   process(reset_scaler_sig, prescaling_FTU01)
    216   begin
    217     if rising_edge(reset_scaler_sig) then
    218       if ((conv_integer(unsigned(prescaling_FTU01))) mod 2 = 0) then
    219         scaler_period_sig <= ((((conv_integer(unsigned(prescaling_FTU01)) / 2)) * (LOW_FREQUENCY / SCALER_FREQ_DIVIDER)) + (LOW_FREQUENCY / (2 * SCALER_FREQ_DIVIDER)));
     231--  process(reset_period_sig)
     232--  begin
     233--    if rising_edge(reset_period_sig) then
     234--      if ((conv_integer(unsigned(prescaling_FTU01))) mod 2 = 0) then
     235--        scaler_period_sig <= ((((conv_integer(unsigned(prescaling_FTU01)) / 2)) * (LOW_FREQUENCY / SCALER_FREQ_DIVIDER)) + (LOW_FREQUENCY / (2 * SCALER_FREQ_DIVIDER)));
     236--      else
     237--        scaler_period_sig <= (((conv_integer(unsigned(prescaling_FTU01)) - 1) / 2) + 1) * (LOW_FREQUENCY / SCALER_FREQ_DIVIDER);
     238--      end if;
     239--    end if;
     240--  end process;
     241
     242  process(prescaling_FTU01_sig)
     243  begin
     244    if ((conv_integer(unsigned(prescaling_FTU01_sig))) mod 2 = 0) then
     245      scaler_period_sig <= ((((conv_integer(unsigned(prescaling_FTU01_sig)) / 2)) * (LOW_FREQUENCY / SCALER_FREQ_DIVIDER)) + (LOW_FREQUENCY / (2 * SCALER_FREQ_DIVIDER)));
     246    else
     247      scaler_period_sig <= (((conv_integer(unsigned(prescaling_FTU01_sig)) - 1) / 2) + 1) * (LOW_FREQUENCY / SCALER_FREQ_DIVIDER);
     248    end if;
     249  end process;
     250 
     251  detect_period_finished: process(clk)
     252  begin
     253    if rising_edge(clk) then
     254      new_period_sr_sig <= new_period_sr_sig(new_period_sr_sig'left - 1 downto 0) & period_finished_sig;
     255      if(new_period_ack_sig = '1') then
     256        new_period_sig <= '0';
    220257      else
    221         scaler_period_sig <= (((conv_integer(unsigned(prescaling_FTU01)) - 1) / 2) + 1) * (LOW_FREQUENCY / SCALER_FREQ_DIVIDER);
     258        if (new_period_sr_sig(1 downto 0) = "01") then
     259          new_period_sig <= '1';
     260        end if;
    222261      end if;
    223262    end if;
    224   end process;
    225 
     263  end process detect_period_finished;
     264 
    226265end Behavioral;
  • firmware/FTM/FTM_top_tb.vhd

    r10256 r10328  
    117117      -- Clock conditioner LMK03000
    118118      -------------------------------------------------------------------------------
    119       -- CLK_Clk_Cond  : out STD_LOGIC;  -- MICROWIRE interface serial clock
    120       -- LE_Clk_Cond   : out STD_LOGIC;  -- MICROWIRE interface latch enable   
    121       -- DATA_Clk_Cond : out STD_LOGIC;  -- MICROWIRE interface data
     119      CLK_Clk_Cond  : out STD_LOGIC;  -- MICROWIRE interface serial clock
     120      LE_Clk_Cond   : out STD_LOGIC;  -- MICROWIRE interface latch enable   
     121      DATA_Clk_Cond : out STD_LOGIC;  -- MICROWIRE interface data
    122122   
    123       -- SYNC_Clk_Cond : out STD_LOGIC;  -- global clock synchronization
    124       -- LD_Clk_Cond   : in STD_LOGIC;   -- lock detect, should be checked for                 
     123      SYNC_Clk_Cond : out STD_LOGIC;  -- global clock synchronization
     124      LD_Clk_Cond   : in STD_LOGIC;   -- lock detect, should be checked for                 
    125125
    126126   
     
    379379      LED_ye        => LED_ye_sig,
    380380      LED_gn        => LED_gn_sig,
    381 --      CLK_Clk_Cond  => CLK_Clk_Cond_sig,
    382 --      LE_Clk_Cond   => LE_Clk_Cond_sig,
    383 --      DATA_Clk_Cond => DATA_Clk_Cond_sig,
    384 --      SYNC_Clk_Cond => SYNC_Clk_Cond_sig,
    385 --      LD_Clk_Cond   => LD_Clk_Cond_sig,               
     381      CLK_Clk_Cond  => CLK_Clk_Cond_sig,
     382      LE_Clk_Cond   => LE_Clk_Cond_sig,
     383      DATA_Clk_Cond => DATA_Clk_Cond_sig,
     384      SYNC_Clk_Cond => SYNC_Clk_Cond_sig,
     385      LD_Clk_Cond   => LD_Clk_Cond_sig,               
    386386      Bus1_Tx_En    => Bus1_Tx_En_sig,                               
    387387      Bus1_Rx_En    => Bus1_Rx_En_sig,
  • firmware/FTM/ftm_definitions.vhd

    r10260 r10328  
    8686  constant INT_CLK_FREQUENCY_2 : integer := 250000000;  -- 250MHz
    8787  constant LOW_FREQUENCY       : integer :=   1000000;  -- has to be smaller than INT_CLK_FREQUENCY_1
    88   constant SCALER_FREQ_DIVIDER : integer :=         1;  -- for simulation, should normally be 1
     88  --constant SCALER_FREQ_DIVIDER : integer :=     10000;  -- for simulation, should normally be 1
     89  constant SCALER_FREQ_DIVIDER : integer :=         1;
    8990 
    9091  --FTM address and firmware ID
     
    9596  constant FTU_RS485_BAUD_RATE   : integer := 250000;  -- bits / sec in our case
    9697  constant FTU_RS485_TIMEOUT     : integer := (INT_CLK_FREQUENCY_1 * 2) / 1000;  -- 2ms @ 50MHz (100000 clk periods)
    97   -- constant FTU_RS485_BAUD_RATE   : integer := 10000000;  -- for simulation
    98   -- constant FTU_RS485_TIMEOUT     : integer := (INT_CLK_FREQUENCY_1 * 2) / 40000;  -- for simulation
     98  --constant FTU_RS485_BAUD_RATE   : integer := 10000000;  -- for simulation
     99  --constant FTU_RS485_TIMEOUT     : integer := (INT_CLK_FREQUENCY_1 * 2) / 40000;  -- for simulation
    99100  constant FTU_RS485_NO_OF_RETRY : integer range 0 to 2 := 2;  -- in case of timeout, !!! HAS TO BE < 3 !!!
    100101  constant FTU_RS485_BLOCK_WIDTH : integer := 224;  -- 28 byte protocol
  • firmware/FTM/ftu_control/FTM_ftu_control.vhd

    r10256 r10328  
    916916                FTM_ftu_rs485_control_State <= RATES;
    917917              else
     918                retry_cnt <= 0;
    918919                FTU_cnt <= FTU_cnt;  -- move on
    919920                FTM_ftu_rs485_control_State <= RATES;
Note: See TracChangeset for help on using the changeset viewer.