Ignore:
Timestamp:
04/13/11 15:02:49 (10 years ago)
Author:
weitzel
Message:
FTM trigger manager from MCSE added; DCM arrangement changed; changes in FTM ethernet module
File:
1 edited

Legend:

Unmodified
Added
Removed
  • firmware/FTM/ethernet/w5300_modul.vhd

    r10256 r10366  
    2323USE IEEE.STD_LOGIC_ARITH.all;
    2424USE IEEE.STD_LOGIC_UNSIGNED.all;
    25 -- LIBRARY FACT_FTM_lib;
    26 -- USE FACT_FTM_lib.ftm_array_types.all;
    27 -- USE FACT_FTM_lib.ftm_constants.all;
     25
     26--LIBRARY FACT_FTM_lib;
     27--USE FACT_FTM_lib.ftm_array_types.all;
     28--USE FACT_FTM_lib.ftm_constants.all;
    2829library ftm_definitions;
    2930USE ftm_definitions.ftm_array_types.all;
     
    3435library UNISIM;
    3536use UNISIM.VComponents.all;
    36 
    3737
    3838ENTITY w5300_modul IS
     
    8888    fl_busy        : IN     std_logic;
    8989    --
     90    ftu_error_send        : IN  std_logic;
     91    ftu_error_send_ack    : OUT std_logic := '1';
     92    ftu_error_send_ready  : OUT std_logic := '1';
     93    ftu_error_calls       : IN  std_logic_vector (15 DOWNTO 0);
     94    ftu_error_data        : IN  std_logic_vector (223 DOWNTO 0);  -- (28 * 8) - 1
     95    --
    9096    get_header                : OUT std_logic := '0';
    9197    get_header_started        : IN  std_logic;
     
    95101    header_trigger_counter    : IN  std_logic_vector (31 DOWNTO 0);
    96102    header_timestamp_counter  : IN  std_logic_vector (47 DOWNTO 0)
     103
    97104  );
    98105
     
    103110  type state_init_type is (INTERRUPT, RESET, WRITE_REG, READ_REG, WRITE_DATA,
    104111                           INIT, IM, MT, STX, STX1, STX2, STX3, SRX, SRX1, SRX2, SRX3, MAC, MAC1, MAC2, GW, GW1, SNM, SNM1, IP, IP1, TIMEOUT, RETRY,
    105                            SI, SI1, SI2, SI3, SI4, SI5, SI6, ESTABLISH, EST1, CONFIG, MAIN, MAIN1, MAIN2, MAIN3, CHK_RECEIVED,
    106                            READ_DATA, WRITE_TO_SD_ADDR, READ_FROM_SD_ADDR, READ_FROM_DD_ADDR, READ_FROM_FL_ADDR, READ_FROM_HEADER_MODUL);
     112                           SI, SI1, SI2, SI3, SI4, SI5, SI6, ESTABLISH, EST1, CONFIG, MAIN, MAIN1, MAIN2, MAIN3, CHK_RECEIVED, SEND_FTU_ERROR,
     113                           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);
    107114  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,
    108115                            WR_GET_HEADER, WR_GET_HEADER_WAIT, WR_FIFO_DATA, WR_FIFO_DATA_01, WR_FIFO_HEADER, WR_FIFO_HEADER_01);
     
    116123  type state_read_dd_type is (READ_DD_START, READ_DD_WAIT, READ_DD_END);
    117124  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);
     125  type state_send_ftu_error_type is (SFE_START, SFE_END);
    118126
    119127  signal RST_TIME : std_logic_vector(19 downto 0) := X"7A120";
     
    137145  signal state_read_dd                           : state_read_dd_type            := READ_DD_START;
    138146  signal state_read_dd_block                     : state_read_dd_block_type      := READ_DD_BLOCK_START;
     147  signal state_send_ftu_error                    : state_send_ftu_error_type     := SFE_START;
    139148
    140149
     
    144153  signal zaehler     : std_logic_vector (19 downto 0) := (others => '0');
    145154  signal data_cnt    : integer                        := 0;
    146   signal header_cnt  : integer                        := 0;
     155  signal header_cnt  : std_logic_vector (7 DOWNTO 0)  := X"00";
    147156  signal socket_cnt  : std_logic_vector (2 downto 0)  := "000";
    148157
     
    164173  signal internal_cmd : std_logic := '0';
    165174
     175  signal autosend_flag : std_logic := '1';
     176 
    166177  -- -- --
    167178  signal led_int : std_logic_vector (7 downto 0) := X"00";
     
    289300              state_read_dd         <= READ_DD_START;
    290301              state_read_dd_block   <= READ_DD_BLOCK_START;
     302              state_send_ftu_error  <= SFE_START;
    291303              -- reset output signals
    292304              new_config <= '0';
     
    302314              dd_write_general <= '0';
    303315              fl_read <= '0';
     316              ftu_error_send_ack <= '1';
     317              ftu_error_send_ready <= '1';
    304318              -- set internal signals
    305319              new_config_flag <= '0';
     
    312326            end if;
    313327
    314                                         -- Init
     328          -- Init
    315329          when INIT =>
    316330            par_addr   <= W5300_MR;
     
    319333            next_state <= IM;
    320334
    321                                         -- Interrupt Mask
     335          -- Interrupt Mask
    322336          when IM =>
    323337            par_addr   <= W5300_IMR;
     
    326340            next_state <= MT;
    327341
    328                                         -- Memory Type
     342          -- Memory Type
    329343          when MT =>
    330344            par_addr   <= W5300_MTYPER;
     
    333347            next_state <= STX;
    334348
    335                                         -- Socket TX Memory Size
     349          -- Socket TX Memory Size
    336350          when STX =>
    337351            par_data <= X"4000";        -- 64K TX for socket 0, others 0
     
    375389            next_state <= MAC;
    376390
    377                                         -- MAC
     391          -- MAC
    378392          when MAC =>
    379393            par_addr   <= W5300_SHAR;
     
    392406            next_state <= GW;
    393407
    394                                         -- Gateway
     408          -- Gateway
    395409          when GW =>
    396410            par_addr               <= W5300_GAR;
     
    406420            next_state             <= SNM;
    407421
    408                                                       -- Subnet Mask
     422          -- Subnet Mask
    409423          when SNM =>
    410424            par_addr               <= W5300_SUBR;
     
    419433            state_init             <= WRITE_REG;
    420434            next_state             <= IP;
    421                                                       -- Own IP-Address
     435          -- Own IP-Address
    422436          when IP =>
    423437            par_addr               <= W5300_SIPR;
     
    432446            state_init             <= WRITE_REG;
    433447            next_state             <= SI;
    434                                                       -- Socket Init
     448          -- Socket Init
    435449          when SI =>
    436450            par_addr   <= W5300_S0_MR + socket_cnt * W5300_S_INC;
     
    438452            state_init <= WRITE_REG;
    439453            next_state <= SI1;
    440                                                       -- Sx Interrupt Mask
     454          -- Sx Interrupt Mask
    441455          when SI1 =>
    442456            par_addr   <= W5300_S0_IMR + socket_cnt * W5300_S_INC;
     
    493507                  dd_send_ack <= '0';
    494508                  dd_send_ready <= '0';
     509                  ftu_error_send_ack <= '0';
     510                  ftu_error_send_ready <= '0';
    495511                  led_int <= X"00";
    496512                  -- -- --
     
    538554              dd_send_ack <= '1';
    539555              dd_send_ready <= '0';
    540               -- "simulate" command read dynamic data block
    541               cmd_array (0) <= CMD_START_DELIMITER;
    542               cmd_array (1) <= CMD_READ;
    543               cmd_array (2) <= PAR_READ_DD;
    544               state_read_data <= RD_CMD_PARSE;
     556              if (autosend_flag = '0') then
     557                state_read_dd_block <= READ_DD_BLOCK_END;
     558              end if;
     559              state_read_data <= RD_READ_DD_BLOCK;
    545560              state_init <= READ_DATA;
     561            elsif (ftu_error_send = '1') then
     562              ftu_error_send_ack <= '1';
     563              ftu_error_send_ready <= '0';
     564              if (autosend_flag = '0') then
     565                state_send_ftu_error <= SFE_END;
     566              end if;
     567              state_init <= SEND_FTU_ERROR;
    546568            end if;
    547569
    548570
     571          -- send FTU error message
     572          when SEND_FTU_ERROR =>
     573            case state_send_ftu_error is
     574              when SFE_START =>
     575                next_state <= SEND_FTU_ERROR;
     576                read_addr_state <= READ_FTU_ERROR;
     577                local_sd_addr <= X"000";
     578                local_write_length <= "00000" & FTU_ERROR_LENGTH;
     579                state_send_ftu_error <=  SFE_END;
     580                state_init <= WRITE_DATA;
     581              when SFE_END =>
     582                if (ftu_error_send = '0') then
     583                  ftu_error_send_ack <= '0';
     584                  ftu_error_send_ready <= '1';
     585                  state_send_ftu_error <= SFE_START;
     586                  state_init <= MAIN;
     587                end if;
     588             end case;
     589           
     590           
    549591          -- read data from socket 0 
    550592          when READ_DATA =>
     
    664706                    state_ping <= PING_START;
    665707                    state_read_data <= RD_PING;
     708                   
     709                  when CMD_AUTOSEND =>
     710                    state_read_data <= RD_5;
     711                    case cmd_array (2) is
     712                      when PAR_AUTOSEND_EA =>
     713                        autosend_flag <= '1';
     714                      when PAR_AUTOSEND_DA =>
     715                        autosend_flag <= '0';
     716                      when others =>
     717                        null;
     718                      end case;
    666719                   
    667720                  when others =>
     
    791844            end case;  -- state_read_data
    792845           
    793 
     846         
     847          -- read FTU errors
     848          when READ_FTU_ERROR =>
     849            state_init <= next_state;
     850            if (data_cnt = 0) then
     851              local_sd_data <= ftu_error_calls;
     852            else
     853              local_sd_data <= X"00" & ftu_error_data (((data_cnt * 8) - 1) DOWNTO ((data_cnt * 8) - 8));
     854            end if;
     855         
     856         
    794857          -- read from header modul
    795858          when READ_FROM_HEADER_MODUL =>
    796859            state_init <= next_state;
    797860            case header_cnt is
    798               when 0 =>
     861              when X"00" =>
    799862                local_sd_data <= header_board_id (63 DOWNTO 48);
    800               when 1 =>
     863              when X"01" =>
    801864                local_sd_data <= header_board_id (47 DOWNTO 32);
    802               when 2 =>
     865              when X"02" =>
    803866                local_sd_data <= header_board_id (31 DOWNTO 16);
    804               when 3 =>
     867              when X"03" =>
    805868                local_sd_data <= header_board_id (15 DOWNTO 0);
    806               when 4 =>
     869              when X"04" =>
    807870                local_sd_data <= header_firmware_id;
    808               when 5 =>
     871              when X"05" =>
    809872                local_sd_data <= header_trigger_counter (31 DOWNTO 16);
    810               when 6 =>
     873              when X"06" =>
    811874                local_sd_data <= header_trigger_counter (15 DOWNTO 0);
    812               when 7 =>
     875              when X"07" =>
    813876                local_sd_data <= header_timestamp_counter (47 DOWNTO 32);
    814               when 8 =>
     877              when X"08" =>
    815878                local_sd_data <= header_timestamp_counter (31 DOWNTO 16);
    816               when 9 =>
     879              when X"09" =>
    817880                local_sd_data <= header_timestamp_counter (15 DOWNTO 0);
    818               when 10 =>
     881              when X"0A" =>
    819882                local_sd_data <= X"FFFF"; -- spare
    820883              when others =>
     
    920983                write_length_bytes <= (FTM_HEADER_LENGTH + local_write_length (15 downto 0)) & '0';  -- shift left (*2)
    921984                data_cnt           <= 0;
    922                 header_cnt         <= 0;
     985                header_cnt         <= X"00";
    923986                state_write        <= WR_01;
    924987              -- Check FIFO Size
     
    10741137
    10751138end Behavioral;
    1076 
Note: See TracChangeset for help on using the changeset viewer.