Changeset 10072 for firmware


Ignore:
Timestamp:
Jan 3, 2011, 3:26:12 PM (9 years ago)
Author:
neise
Message:
block to block communication 
debugged - part 1
Location:
firmware/FAD/FACT_FAD_20MHz_VAR_PS/FACT_FAD_lib/hdl
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • firmware/FAD/FACT_FAD_20MHz_VAR_PS/FACT_FAD_lib/hdl/control_manager_beha.vhd

    r9912 r10072  
    3232      config_data_valid : OUT    std_logic := '0';
    3333      config_busy       : OUT    std_logic := '0';
     34      -- --
     35      config_rw_ack, config_rw_ready : out std_logic := '0';
     36      -- --
    3437      ram_addr          : OUT    std_logic_vector (ADDR_WIDTH - 1 DOWNTO 0);
    3538      ram_data_in       : OUT    std_logic_vector (15 DOWNTO 0);
    3639      ram_write_en      : OUT    std_logic_vector (0 DOWNTO 0);
    3740      dac_array         : OUT    dac_array_type;
    38       roi_array         : OUT    roi_array_type;
    39       drs_address       : OUT    std_logic_vector (3 DOWNTO 0);
    40       drs_address_mode  : OUT    std_logic
     41      roi_array         : OUT    roi_array_type
    4142   );
    4243
     
    4748ARCHITECTURE beha OF control_manager IS
    4849 
    49   type TYPE_CTRL_STATE is (CTRL_INIT, CTRL_IDLE, CTRL_WAIT_IDLE, CTRL_WRITE,
     50  type TYPE_CTRL_STATE is (CTRL_INIT, CTRL_IDLE, CTRL_WAIT_IDLE, CTRL_WRITE, CTRL_WRITE_READY,
    5051                           CTRL_LOAD_ADDR, CTRL_LOAD_WAIT, CTRL_LOAD_DATA,
    5152                           CTRL_READ_ADDR, CTRL_READ_WAIT, CTRL_READ_DATA);
     
    5556  signal int_dac_array : dac_array_type := DEFAULT_DAC;
    5657  signal int_roi_array : roi_array_type := DEFAULT_ROI;
    57   signal int_drs_address: std_logic_vector (3 DOWNTO 0) := DEFAULT_DRSADDR;
    58   signal int_drs_address_mode: std_logic := DEFAULT_DRSADDR_MODE;
    5958
    6059BEGIN
     
    8180          elsif (addr_cntr < NO_OF_ROI + NO_OF_DAC) then
    8281            ram_data_in <= conv_std_logic_vector(int_dac_array(addr_cntr - NO_OF_ROI), 16);
    83           elsif (addr_cntr < NO_OF_ROI + NO_OF_DAC + 1) then
    84             ram_data_in <=  "0000" & "0000"
    85                             & "000" & conv_std_logic_vector(int_drs_address_mode, 1)
    86                             & int_drs_address;
    8782          else
    8883            ram_write_en <= "0";
     
    9186     
    9287        when CTRL_IDLE =>
    93           --
    9488          addr_cntr <= 0;
    9589          ram_write_en <= "0";
     
    10397          if (config_wr_en = '1') then
    10498            config_busy <= '1';
     99            config_rw_ack <= '1';
     100            config_rw_ready <= '0';
    105101            config_data <= (others => 'Z');
    106102            ctrl_state <= CTRL_WRITE;
     
    129125            dac_array(addr_cntr - NO_OF_ROI) <= conv_integer(ram_data_out);
    130126            ctrl_state <= CTRL_LOAD_ADDR;
    131           elsif (addr_cntr < NO_OF_ROI + NO_OF_DAC + 1) then
    132              drs_address <= ram_data_out(3 downto 0);
    133              drs_address_mode <= ram_data_out(4);
    134              ctrl_state <= CTRL_LOAD_ADDR;
    135           else
     127          else
    136128            addr_cntr <= 0;
    137129            config_started <= '0';
     
    144136          ram_addr <= config_addr;
    145137          ram_write_en <= "1";
    146           ctrl_state <= CTRL_IDLE;
     138          ctrl_state <= CTRL_WRITE_READY;
     139        when CTRL_WRITE_READY =>
     140          config_rw_ack <= '0';
     141          config_rw_ready <= '1';
     142          if (config_wr_en = '0') then
     143            ctrl_state <= CTRL_IDLE;
     144          end if;
    147145       
    148146        -- *** IMPORTANT ***
  • firmware/FAD/FACT_FAD_20MHz_VAR_PS/FACT_FAD_lib/hdl/data_generator.vhd

    r9912 r10072  
    2525  );
    2626   port(
     27--      led            : OUT    std_logic_vector (7 DOWNTO 0) := (OTHERS => '0');
     28
    2729      clk            : in     std_logic;
    2830      data_out       : out    std_logic_vector (63 downto 0);
     
    3234      ram_write_ea : in std_logic;
    3335      ram_write_ready : out std_logic := '0';
     36      -- --
     37      ram_write_ready_ack : IN std_logic;
     38      -- --
    3439      config_start_mm, config_start_cm, config_start_spi : out std_logic := '0';
    3540      config_ready_mm, config_ready_cm, config_ready_spi : in std_logic;
     
    4550      trigger_id     : in std_logic_vector (47 downto 0);
    4651      trigger        : in std_logic;
    47       s_trigger      : in std_logic;
     52--      s_trigger      : in std_logic;
    4853      new_config     : in std_logic;
    4954      config_started : out std_logic := '0';
     
    5560      drs_dwrite : out std_logic := '1';
    5661      drs_clk_en, drs_read_s_cell : out std_logic := '0';
     62
     63      drs_srin_write_8b : out std_logic := '0';
     64      drs_srin_write_ack : in std_logic;
     65      drs_srin_data : out std_logic_vector (7 downto 0) := (others => '0');
     66      drs_srin_write_ready : in std_logic;
     67
    5768      drs_read_s_cell_ready : in std_logic;
    5869      drs_s_cell_array : in drs_s_cell_array_type
     
    6273architecture Behavioral of data_generator is
    6374
    64 type state_generate_type is (INIT, CONFIG, CONFIG1, CONFIG2,CONFIG3, CONFIG4, WRITE_HEADER, WRITE_EXTERNAL_TRIGGER, WRITE_INTERNAL_TRIGGER, WRITE_BOARD_ID, WRITE_TEMPERATURES,
     75type state_generate_type is (INIT, CONFIG, CONFIG1, CONFIG2,CONFIG3, CONFIG4, CONFIG5, CONFIG6, WRITE_HEADER, WRITE_EXTERNAL_TRIGGER, WRITE_INTERNAL_TRIGGER, WRITE_BOARD_ID, WRITE_TEMPERATURES,
    6576                             WRITE_DAC1, WRITE_DAC2, WRITE_CHANNEL_ID, WRITE_START_CELL, WRITE_ROI, WRITE_ADC_DATA, WRITE_DATA_END, WRITE_DATA_END_WAIT,
    6677                             WRITE_END_FLAG, WRITE_DATA_STOP,
     
    7687signal adc_wait_cnt : integer range 0 to 7 := 0;
    7788
    78 signal trigger_flag : std_logic := '0';
    79 
     89signal trigger_flag :std_logic := '0';
     90signal ram_write_ea_flag : std_logic := '0';
     91signal new_config_int : std_logic := '0';
     92
     93signal roi_max_int : roi_max_type;
    8094
    8195begin
     
    95109        when CONFIG =>
    96110          config_started <= '1';
    97           -- config config manager
    98           config_start_cm <= '1';
    99           if (config_started_cm = '1') then
    100             state_generate <= CONFIG1;
     111          if (new_config = '0') then
     112            config_started <= '0';
     113            -- config config manager
     114            config_start_cm <= '1';
     115            if (config_started_cm = '1') then
     116              config_start_cm <= '0';
     117              state_generate <= CONFIG1;
     118            end if;
    101119          end if;
    102120        when CONFIG1 =>
    103121          if (config_ready_cm = '1') then
    104             config_started <= '0';
    105             config_start_cm <= '0';
    106122            config_start_mm <= '1';
    107123          end if;
    108124          if (config_started_mm = '1') then
     125            config_start_mm <= '0';
    109126            state_generate <= CONFIG2;
    110127          end if;
    111128        when CONFIG2 =>
    112129          if (config_ready_mm = '1') then
    113             config_start_mm <= '0';
    114130            config_start_spi <= '1';
    115131          end if;
    116132          if (config_started_spi = '1') then
     133            config_start_spi <= '0';
    117134            state_generate <= CONFIG3;
    118135          end if;
    119136        when CONFIG3 =>
    120137          if (config_ready_spi = '1') then
    121             config_start_spi <= '0';
     138            state_generate <= CONFIG4;
     139--            state_generate <= WRITE_DATA_IDLE;
     140          end if;
     141        -- configure DRS
     142        when CONFIG4 =>
     143          drs_channel_id <= DRS_WRITE_SHIFT_REG;
     144          drs_srin_data <= "10101010";
     145          drs_srin_write_8b <= '1';
     146          if (drs_srin_write_ack = '1') then
     147            drs_srin_write_8b <= '0';
     148            state_generate <= CONFIG5;
     149          end if;
     150        when CONFIG5 =>
     151          if (drs_srin_write_ready = '1') then
     152            roi_max_int <= roi_max;
    122153            state_generate <= WRITE_DATA_IDLE;
    123154          end if;
     155        -- end configure DRS
    124156
    125157        when WRITE_DATA_IDLE =>
     
    127159            state_generate <= CONFIG;
    128160          end if;
    129           if (ram_write_ea = '1' and (trigger_flag = '1' or s_trigger = '1')) then
     161--          if (ram_write_ea = '1' and (trigger_flag = '1' or s_trigger = '1')) then
     162          if (ram_write_ea = '1' and trigger_flag = '1') then
    130163            -- stop drs, dwrite low
    131164            drs_dwrite <= '0';
     
    248281        when WRITE_EXTERNAL_TRIGGER =>    -- external trigger ID
    249282          addr_out <= start_addr + conv_std_logic_vector(1, RAM_ADDR_WIDTH);
    250           data_out <= X"0000" & trigger_id(39 downto 32) & trigger_id(47 downto 40) & trigger_id(15 downto 0) & trigger_id(31 downto 16);
     283--          data_out <= X"0000" & trigger_id(39 downto 32) & trigger_id(47 downto 40) & trigger_id(15 downto 0) & trigger_id(31 downto 16);
     284          data_out <= X"0000" & trigger_id(39 downto 32) & trigger_id(47 downto 40) & evnt_cntr(15 downto 0) & evnt_cntr(31 downto 16);
    251285          state_generate <= WRITE_INTERNAL_TRIGGER;
    252286        when WRITE_INTERNAL_TRIGGER =>    -- internal trigger ID
     
    263297                                        state_generate <= WRITE_DATA_END_WAIT;
    264298                                when WRITE_DATA_END_WAIT =>
    265                                   state_generate <= WRITE_DATA_STOP;
     299          -- --
     300                                  if (ram_write_ready_ack = '1') then
     301                                    state_generate <= WRITE_DATA_STOP;
     302                                    -- --
     303            ram_write_ready <= '0';
     304            -- --
     305                                  end if;
     306                                  -- --
    266307                when WRITE_DATA_STOP =>
    267           drs_dwrite <= '1';
    268                                         data_cntr <= 0;
    269                                         addr_cntr <= 0;
    270                                         channel_id <= 0;
    271                                         ram_write_ready <= '0';
    272                                         state_generate <= WRITE_DATA_IDLE;
    273                                
     308                  -- --
     309                  if (ram_write_ready_ack = '0') then
     310                  -- --
     311            drs_dwrite <= '1';
     312                                          data_cntr <= 0;
     313                                          addr_cntr <= 0;
     314                                          channel_id <= 0;
     315                                          state_generate <= WRITE_DATA_IDLE;
     316                                        -- --
     317                                        end if;
     318                                  -- --
    274319                                when others =>
    275320                                        null;
  • firmware/FAD/FACT_FAD_20MHz_VAR_PS/FACT_FAD_lib/hdl/data_generator.vhd.bak

    r9912 r10072  
    7676signal adc_wait_cnt : integer range 0 to 7 := 0;
    7777
     78signal trigger_flag : std_logic := '0';
     79
    7880
    7981begin
     
    8385        begin
    8486                if rising_edge (clk) then
     87                  trigger_flag <= trigger;
    8588                 
    8689      addr_out <= start_addr + conv_std_logic_vector(addr_cntr, RAM_ADDR_WIDTH);
     
    124127            state_generate <= CONFIG;
    125128          end if;
    126           if (ram_write_ea = '1' and (trigger = '1' or s_trigger = '1')) then
     129          if (ram_write_ea = '1' and (trigger_flag = '1' or s_trigger = '1')) then
    127130            -- stop drs, dwrite low
    128131            drs_dwrite <= '0';
  • firmware/FAD/FACT_FAD_20MHz_VAR_PS/FACT_FAD_lib/hdl/drs_pulser_dummy.vhd

    r9912 r10072  
    2323         stop_pos_valid : out std_logic := '0';
    2424
     25         start_srin_write_8b : in std_logic;
     26         srin_write_ready : out std_logic := '0';
     27         srin_write_ack : out std_logic := '0';
     28         srin_data : in std_logic_vector (7 downto 0);
     29         SRIN_out : out std_logic := '0';
     30
    2531         RSRLOAD : out std_logic := '0';
    2632         SRCLK : out std_logic := '0'
     
    3137ARCHITECTURE behavior of drs_pulser IS
    3238
    33 type state_main_type is (MAIN, READ_STOP_POS, ENDLESS_MODE);
     39type state_main_type is (MAIN, SRIN_WRITE_8B, SRIN_WRITE_END, READ_STOP_POS, ENDLESS_MODE);
    3440signal state_main : state_main_type := MAIN;
    3541signal stop_pos_cntr, wait_cntr : integer range 0 to 31 := 0;
     
    3743signal stop_pos_int : drs_s_cell_array_type;
    3844signal RSRLOAD_EN, SRCLK_EN : std_logic := '0';
     45
     46signal srin_cntr : integer range 0 to 7 := 1;
    3947
    4048begin
     
    4957      case state_main is
    5058        when MAIN =>
     59          if (start_srin_write_8b = '1') then
     60            srin_write_ready <= '0';
     61            srin_write_ack <= '1';
     62            srin_cntr <= 0;
     63            SRCLK_EN <= '1';
     64            state_main <= SRIN_WRITE_8B;
     65          end if;
    5166          if (start_read_stop_pos_mode = '1') then
    5267            RSRLOAD_EN <= '1';
     
    5873            state_main <= ENDLESS_MODE;
    5974          end if;
     75       
     76        when SRIN_WRITE_8B =>
     77          srin_out <= srin_data (7 - srin_cntr);
     78          if (srin_cntr = 7) then
     79            SRCLK_EN <= '0';
     80            state_main <= SRIN_WRITE_END;
     81          else
     82            srin_cntr <= srin_cntr + 1;
     83          end if;
     84        when SRIN_WRITE_END =>
     85          srin_out <= '0';
     86          srin_write_ready <= '1';
     87          srin_write_ack <= '0';
     88          state_main <= MAIN;
     89         
    6090         
    6191        when ENDLESS_MODE =>
  • firmware/FAD/FACT_FAD_20MHz_VAR_PS/FACT_FAD_lib/hdl/fad_definitions.vhd

    r9912 r10072  
    7979
    8080--
    81   constant W5300_TX_FIFO_SIZE : integer := (15360 / 2); -- Socket TX FIFO-Size in 16 Bit Words
     81  constant W5300_TX_FIFO_SIZE_8B : integer := 15360; -- Socket TX FIFO-Size in Bytes
     82  constant W5300_TX_FIFO_SIZE : integer := (W5300_TX_FIFO_SIZE_8B / 2); -- Socket TX FIFO-Size in 16 Bit Words
    8283
    8384  constant LOG2_OF_RAM_SIZE_64B : integer := 15;
     
    119120  constant CMD_READ : std_logic_vector        := X"0A";
    120121  constant CMD_WRITE : std_logic_vector       := X"05";
     122-- Config-RAM
     123  constant BADDR_ROI : std_logic_vector := X"00"; -- Baseaddress ROI-Values
     124  constant BADDR_DAC : std_logic_vector := X"24"; -- Baseaddress DAC-Values
    121125
    122126  constant CMD_DENABLE : std_logic_vector     := X"06";
     
    135139
    136140constant CMD_PS_RESET : std_logic_vector     := X"17";
    137 
     141-- DRS Registers
     142  constant DRS_WRITE_SHIFT_REG : std_logic_vector := "1101"; 
    138143 
    139144 
  • firmware/FAD/FACT_FAD_20MHz_VAR_PS/FACT_FAD_lib/hdl/memory_manager_beha.vhd

    r9912 r10072  
    3636      config_start : IN std_logic;
    3737      ram_write_ready : IN std_logic;
     38      -- --
     39      ram_write_ready_ack : OUT std_logic := '0';
     40      -- --
    3841      roi_array : IN roi_array_type;
    3942      ram_write_ea : OUT std_logic := '0';
     
    5962ARCHITECTURE beha OF memory_manager IS
    6063
    61 type state_mm_type is (MM_CONFIG, MAX_ROI, MAX_ROI1, MAX_ROI2, FIFO_CALC, RAM_CALC, RAM_CALC1, RAM_CALC2, MM_MAIN, MM_MAIN1);
     64type state_mm_type is (MM_CONFIG, MAX_ROI, MAX_ROI1, MAX_ROI2, FIFO_CALC, RAM_CALC, RAM_CALC1, RAM_CALC2, MM_MAIN, MM_MAIN1, MM_MAIN2, MM_MAIN3, MM_MAIN4);
    6265signal state_mm : state_mm_type := MM_CONFIG;
    6366
     
    9396signal write_start_addr : integer range 0 to (RAM_SIZE_16B - 1);
    9497signal event_ready_flag : std_logic := '0';
    95 signal wiz_ack_flag : std_logic := '0';
     98signal wiz_ack_flag, wiz_write_ea_flag: std_logic := '0';
    9699
    97100signal roi_index : integer range 0 to 45 := 0;
     
    99102
    100103BEGIN
     104
     105--  led <= conv_std_logic_vector (events_in_ram, 4) & "00" & wiz_ack & wiz_busy;
    101106 
    102107  mm : process (clk)
     
    207212            roi_max(i) <= conv_std_logic_vector(roi_max_array(i), 11);
    208213          end loop;
     214         
     215          event_ready_flag <= '0';
     216          wiz_ack_flag <= '0';
     217          wiz_write_ea_flag <= '0';
    209218          state_mm <= MM_MAIN;
    210219         
    211220        when MM_MAIN =>
    212221          state_mm <= MM_MAIN1;
    213           if ((ram_write_ready = '1') and (event_ready_flag = '0')) then
    214             ram_write_ea <= '0';
    215             events_in_ram <= events_in_ram + 1;
    216             if ((event_start_addr + event_size_ram_64b) < (RAM_SIZE_64B - event_size_ram_64b)) then
    217               event_start_addr <= event_start_addr + event_size_ram_64b;
    218             else
    219               event_start_addr <= 0;
    220             end if;
    221             event_ready_flag <= '1';
    222           end if;
    223 
    224    
    225         when MM_MAIN1 =>
    226           state_mm <= MM_MAIN;
    227222          if (config_start = '1') then
    228223            config_ready <= '0';
     
    231226            end if;
    232227          end if;
    233           if (event_ready_flag = '1') then
     228
     229        when MM_MAIN1 =>
     230          state_mm <= MM_MAIN2;
     231          if ((ram_write_ready = '1') and (event_ready_flag = '0')) then
     232            ram_write_ea <= '0';
     233            -- --
     234            ram_write_ready_ack <= '1';
     235            -- --
     236            events_in_ram <= events_in_ram + 1;
     237            if ((event_start_addr + event_size_ram_64b) < (RAM_SIZE_64B - event_size_ram_64b)) then
     238              event_start_addr <= event_start_addr + event_size_ram_64b;
     239            else
     240              event_start_addr <= 0;
     241            end if;
     242            event_ready_flag <= '1';
     243          end if;
     244         
     245
     246        when MM_MAIN2 =>
     247          state_mm <= MM_MAIN3;
     248          if ((event_ready_flag = '1') and (ram_write_ready = '0')) then
    234249            if (events_in_ram < max_events_ram) then
    235250              ram_write_ea <= '1';             
    236251              ram_start_addr <= conv_std_logic_vector(event_start_addr, RAM_ADDR_WIDTH_64B);
    237252              event_ready_flag <= '0';
    238             end if;
    239           end if;
    240 
     253              -- --
     254              ram_write_ready_ack <= '0';
     255              -- --
     256            end if;
     257          end if;
     258
     259        when MM_MAIN3 =>
     260          state_mm <= MM_MAIN4;
     261          if ((wiz_ack = '1') and (wiz_ack_flag = '0')) then
     262            wiz_ack_flag <= '1';
     263            wiz_write_ea <= '0';
     264            package_index <= package_index + 1;
     265            if (package_index = (number_of_packages - 1)) then
     266              -- next address
     267              if ((write_start_addr + fifo_package_size_ram (package_index)) < (RAM_SIZE_16B - event_size_ram)) then
     268                write_start_addr <= write_start_addr + fifo_package_size_ram (package_index);
     269              else
     270                write_start_addr <= 0;
     271              end if;
     272            else
     273              write_start_addr <= write_start_addr + fifo_package_size_ram (package_index);
     274            end if;
     275          end if; -- wiz_ack_int
     276         
     277        when MM_MAIN4 =>
     278          state_mm <= MM_MAIN;
    241279          if ((events_in_ram > 0) and (wiz_busy = '0')) then
    242280            if (package_index < number_of_packages) then             
     
    264302          end if; 
    265303         
    266           if ((wiz_ack = '1') and (wiz_ack_flag = '0')) then
    267             wiz_ack_flag <= '1';
    268             wiz_write_ea <= '0';
    269             package_index <= package_index + 1;
    270             if (package_index = (number_of_packages - 1)) then
    271               -- next address
    272               if ((write_start_addr + fifo_package_size_ram (package_index)) < (RAM_SIZE_16B - event_size_ram)) then
    273                 write_start_addr <= write_start_addr + fifo_package_size_ram (package_index);
    274               else
    275                 write_start_addr <= 0;
    276               end if;
    277             else
    278               write_start_addr <= write_start_addr + fifo_package_size_ram (package_index);
    279             end if;
    280           end if; -- wiz_ack
    281          
     304       
    282305      end case; -- state_mm
    283306    end if;
  • firmware/FAD/FACT_FAD_20MHz_VAR_PS/FACT_FAD_lib/hdl/w5300_modul.vhd

    r9912 r10072  
    6060      config_wr_en : out std_logic := '0';
    6161      config_rd_en : out std_logic := '0';
     62      -- --
     63      config_rw_ack, config_rw_ready : in std_logic;
     64      -- --
    6265      config_busy : in std_logic;
    6366     
     
    8285type state_init_type is (INTERRUPT, RESET, WRITE_REG, READ_REG, WRITE_DATA,
    8386                         INIT, IM, MT, STX, STX1, STX2, STX3, SRX, SRX1, SRX2, SRX3, MAC, MAC1, MAC2, GW, GW1, SNM, SNM1, IP, IP1, TIMEOUT, RETRY,
    84                          SI, SI1, SI2, SI3, SI4, SI5, SI6,      ESTABLISH, EST1, CONFIG, MAIN, CHK_RECEIVED, READ_DATA);
    85 type state_write_type is (WR_START, WR_LENGTH, WR_WAIT1, WR_01, WR_02, WR_03, WR_04, WR_05, WR_06, WR_07, WR_08, WR_FIFO, WR_FIFO1, WR_ADC, WR_ADC1, WR_ADC2,
     87                         SI, SI1, SI2, SI3, SI4, SI5, SI6,      ESTABLISH, EST1, CONFIG, MAIN, MAIN1, MAIN2, MAIN3, CHK_RECEIVED, READ_DATA);
     88type state_write_type is (WR_START, WR_LENGTH, WR_WAIT1, WR_01, WR_02, WR_03, WR_04, WR_05, WR_05a, WR_05b, WR_06, WR_07, WR_08, WR_FIFO, WR_FIFO1, WR_ADC, WR_ADC1, WR_ADC2,
    8689                          WR_ENDFLAG, WR_ENDFLAG1, WR_ENDFLAG2, WR_ENDFLAG3);
    8790type state_interrupt_1_type is (IR1_01, IR1_02, IR1_03, IR1_04);
     
    120123signal socket_rx_received : std_logic_vector (31 downto 0) := (others => '0');
    121124signal chk_recv_cntr : integer range 0 to 10000 := 0;
     125
     126-- --
     127signal wait_cntr : integer range 0 to 10000 := 0;
     128-- --
     129
    122130signal rx_packets_cnt : std_logic_vector (15 downto 0);
    123131signal next_packet_data : std_logic := '0';
     
    133141signal local_fifo_channels : std_logic_vector (3 downto 0);
    134142
     143signal data_valid_int : std_logic := '0';
     144
     145-- only for debugging
     146--signal error_cnt : std_logic_vector (7 downto 0) := (others => '0');
     147--signal last_trigger_id : std_logic_vector (15 downto 0) := (others => '0');
     148
     149
    135150begin
    136151
     
    138153  RST_TIME <= X"00120";
    139154  --synthesis translate_on
     155
    140156
    141157        w5300_init_proc : process (clk, int)
     
    220236                                        -- reset W5300
    221237                                        when RESET =>
     238                                          busy <= '1';
    222239                                                zaehler <= zaehler + 1;
    223240            wiz_reset <= '0';
    224             led <= X"FF";
     241--            led <= X"FF";
    225242                                                if (zaehler >= X"00064") then -- wait 2µs
    226243                                                        wiz_reset <= '1';
     
    356373                                                par_data (7 downto 0) <= conv_std_logic_vector(IP_ADDRESS (3),8);
    357374                                                state_init <= WRITE_REG;
    358                                                 next_state <= TIMEOUT;
    359                                         when TIMEOUT =>
    360                                                 par_addr <=     W5300_RTR;
    361                                                 par_data <= X"07D0"; -- 0x07D0 = 200ms
    362                                                 state_init <= WRITE_REG;
    363                                                 next_state <= RETRY;
    364                                         when RETRY =>
    365                                                 par_addr <=     W5300_RCR;
    366                                                 par_data <= X"0008";
    367                                                 state_init <= WRITE_REG;
    368375                                                next_state <= SI;
     376--                                      when TIMEOUT =>
     377--            par_addr <=       W5300_RTR;
     378--            par_data <= X"07D0"; -- 0x07D0 = 200ms
     379--            state_init <= WRITE_REG;
     380--            next_state <= RETRY;
     381--          when RETRY =>
     382--            par_addr <=       W5300_RCR;
     383--            par_data <= X"0008";
     384--            state_init <= WRITE_REG;
     385--            next_state <= SI;
     386--                                       
    369387
    370388                                        -- Socket Init
     
    418436                                                next_state <= EST1;
    419437                                        when EST1 =>
    420                                                 led <= data_read (7 downto 0);
     438--                                              led <= data_read (7 downto 0);
     439--            led <= X"00";
    421440                                                case data_read (7 downto 0) is
    422441                                                        when X"17" => -- established
     
    434453                                       
    435454                                        when CONFIG =>
    436             led <= X"F0";
     455--                                        led <= X"F0";
    437456                                          new_config <= '1';
    438457                                          if (config_started = '1') then
    439                                             led <= X"0F";
     458--                                          led <= X"0F";
    440459                                            new_config <= '0';
    441                                             busy <= '0';
    442460                                            state_init <= MAIN;
    443461                                          end if;
     
    448466                                          ps_reset <= '0';
    449467            if (trigger_stop = '1') then
    450                                             s_trigger <= '0';
    451                                           end if;
     468              s_trigger <= '0';
     469            end if;
     470            data_valid_ack <= '0';
     471            state_init <= MAIN1;
     472            data_valid_int <= data_valid;
     473                                        when MAIN1 =>
    452474            if (chk_recv_cntr = 1000) then
    453475              chk_recv_cntr <= 0;
     
    456478              busy <= '1';
    457479            else
    458               busy <= '0';
    459               data_valid_ack <= '0';
    460480              chk_recv_cntr <= chk_recv_cntr + 1; 
    461                                                   if (data_valid = '1') then
    462                                                     data_valid_ack <= '1';
    463                 local_write_length <= write_length;
    464                 local_ram_start_addr <= ram_start_addr;
    465                 local_ram_addr <= (others => '0');
    466                 local_write_header_flag <= write_header_flag;
    467                 local_write_end_flag <= write_end_flag;
    468                 local_fifo_channels <= fifo_channels;
    469                                                           next_state <= MAIN;
    470                                                           state_init <= WRITE_DATA;
    471                                                           busy <= '1';
    472               end if;
    473                                                 end if;
     481              state_init <= MAIN2;
     482            end if;
     483          when MAIN2 =>
     484            busy <= '0';
     485                                          if (data_valid = '1') then
     486                                            data_valid_int <= '0';
     487                                            busy <= '1';
     488              local_write_length <= write_length;
     489              local_ram_start_addr <= ram_start_addr;
     490              local_ram_addr <= (others => '0');
     491              local_write_header_flag <= write_header_flag;
     492              local_write_end_flag <= write_end_flag;
     493              local_fifo_channels <= fifo_channels;
     494--                data_valid_ack <= '1';
     495--                next_state <= MAIN;
     496--                state_init <= WRITE_DATA;
     497              state_init <= MAIN3;
     498            else
     499              state_init <= MAIN1;
     500            end if;
     501          when MAIN3 =>
     502--            led <= local_ram_start_addr (7 downto 0);
     503            data_valid_ack <= '1';
     504            next_state <= MAIN;
     505            state_init <= WRITE_DATA;
     506                                         
    474507
    475508                                        -- read data from socket 0 
     
    507540                else
    508541                  state_read_data <= RD_END;
    509 --                  if (new_config_flag = '1') then
    510 --                    new_config_flag <= '0';
    511 --                    state_init <= CONFIG;
    512 --                  else
    513 --                    busy <= '0';
    514 --                    state_init <= MAIN;
    515 --                  end if;
    516542                end if;
    517543              when RD_6 =>
    518                 led <= data_read (15 downto 8);
     544--                led <= data_read (15 downto 8);
    519545                -- read command
    520546                if (next_packet_data = '0') then
     
    523549                      trigger_stop <= '1';
    524550                      s_trigger <= '1';
    525                       state_read_data <= RD_WAIT;
     551                      state_read_data <= RD_5;
    526552                    when CMD_DWRITE_RUN =>
    527553                      dwrite_enable <= '1';
    528                       state_read_data <= RD_WAIT;
     554                      state_read_data <= RD_5;
    529555                    when CMD_DWRITE_STOP =>
    530556                      dwrite_enable <= '0';
    531                       state_read_data <= RD_WAIT;
     557                      state_read_data <= RD_5;
    532558                    when CMD_SCLK_ON =>
    533559                      sclk_enable <= '1';
    534                       state_read_data <= RD_WAIT;
     560                      state_read_data <= RD_5;
    535561                    when CMD_SCLK_OFF =>
    536562                      sclk_enable <= '0';
    537                       state_read_data <= RD_WAIT;
     563                      state_read_data <= RD_5;
    538564                    when CMD_DENABLE =>
    539565                      denable <= '1';
    540                       state_read_data <= RD_WAIT;
     566                      state_read_data <= RD_5;
    541567                    when CMD_DDISABLE =>
    542568                      denable <= '0';
    543                       state_read_data <= RD_WAIT;
     569                      state_read_data <= RD_5;
    544570                    when CMD_TRIGGER_C =>
    545571                      trigger_stop <= '0';
    546572                      s_trigger <= '1';
    547                       state_read_data <= RD_WAIT;
     573                      state_read_data <= RD_5;
    548574                    when CMD_TRIGGER_S =>
    549575                      trigger_stop <= '1';
    550                       state_read_data <= RD_WAIT;
     576                      state_read_data <= RD_5;
    551577                    -- phase shift commands here:
    552578                    when CMD_PS_DO =>
    553579                      ps_do_phase_shift <= '1';
    554                       state_read_data <= RD_WAIT;
     580                      state_read_data <= RD_5;
    555581                    when CMD_PS_DIRINC =>
    556582                      ps_direction <= '1';
    557                       state_read_data <= RD_WAIT;
     583                      state_read_data <= RD_5;
    558584                    when CMD_PS_RESET =>
    559585                      ps_reset <= '1';
    560                       state_read_data <= RD_WAIT;
     586                      state_read_data <= RD_5;
    561587                    when CMD_SRCLK_ON =>
    562588                      srclk_enable <= '1';
    563                       state_read_data <= RD_WAIT;
     589                      state_read_data <= RD_5;
    564590                    when CMD_SRCLK_OFF =>
    565591                      srclk_enable <= '0';
    566                       state_read_data <= RD_WAIT;
     592                      state_read_data <= RD_5;
    567593                    when CMD_PS_DIRDEC =>
    568594                      ps_direction <= '0';
    569                       state_read_data <= RD_WAIT;
     595                      state_read_data <= RD_5;
    570596                    when CMD_WRITE =>
    571597                      next_packet_data <= '1';
     
    586612                end if;
    587613              when RD_WAIT =>
    588                 state_read_data <= RD_WAIT1;
     614                if (config_rw_ack = '1') then
     615                  state_read_data <= RD_WAIT1;
     616                end if;
    589617              when RD_WAIT1 =>
    590                 config_data <= (others => 'Z');
    591                 config_wr_en <= '0';
    592                 state_read_data <= RD_5;
     618                if (config_rw_ready = '1') then
     619                  config_data <= (others => 'Z');
     620                  config_wr_en <= '0';
     621                  state_read_data <= RD_5;
     622                end if;
    593623              when RD_END =>
    594624                par_addr <= W5300_S0_CR;
     
    599629                  next_state <= CONFIG;
    600630                else
    601 --                busy <= '0';
    602631                  next_state <= MAIN;
    603632                end if;
     
    619648                                                          if (local_write_header_flag = '1') then
    620649                                                            local_socket_nr <= ram_data (2 downto 0);
     650--                                                          local_socket_nr <= "000";
    621651                                                          end if;
    622652                                                                next_state_tmp <= next_state;
     
    640670                                                                state_write <= WR_04;
    641671                                                        when WR_04 =>
    642                                                                 if (socket_tx_free (16 downto 0) < write_length_bytes) then
     672                                                         
     673--                                                        led <= socket_tx_free (15 downto 8);
     674                                                               
     675--                                                              if (socket_tx_free (16 downto 0) < write_length_bytes) then
     676                if (socket_tx_free (16 downto 0) < W5300_TX_FIFO_SIZE_8B) then
    643677                                                                        state_write <= WR_01;
    644678                                                                else
     
    751785                state_init <= WRITE_REG;
    752786                next_state <= WRITE_DATA;
    753                 state_write <= WR_05;
     787                state_write <= WR_05a;
    754788             
    755789              -- End Write End Package Flag
     790             
     791              -- Wait????
     792              when WR_05a =>
     793                if (wait_cntr < 10) then -- 3000 works???
     794                  wait_cntr <= wait_cntr + 1;
     795                else
     796                  wait_cntr <= 0;
     797                  state_write <= WR_05b;
     798                end if;
     799              when WR_05b =>
     800                state_write <= WR_05;
    756801
    757802              --Send FIFO
     
    773818                                                                state_write <= WR_08;
    774819                                                        when others =>
    775 --                                                      busy <= '0';
    776820                                                                state_init <= next_state_tmp;
    777821                                                                state_write <= WR_START;
Note: See TracChangeset for help on using the changeset viewer.