source: FPGA/FTU/test_firmware/FTU_test2/FTU_test2_spi_distributor.vhd @ 242

Last change on this file since 242 was 242, checked in by qweitzel, 10 years ago
more add-ons for FTU_test2
File size: 3.0 KB
Line 
1--
2-- VHDL Architecture FACT_FAD_lib.spi_distributor.beha
3--
4-- Created:
5--          by - Benjamin Krumm.UNKNOWN (EEPC8)
6--          at - 09:24:21 23.04.2010
7--
8-- using Mentor Graphics HDL Designer(TM) 2009.1 (Build 12)
9--
10
11LIBRARY ieee;
12USE ieee.std_logic_1164.all;
13USE ieee.std_logic_arith.all;
14USE ieee.std_logic_unsigned.all;
15library ftu_definitions;
16USE ftu_definitions.ftu_array_types.all;
17
18ENTITY FTU_test2_spi_distributor IS
19  PORT(
20    clk               : IN    std_logic; -- 50MHz
21    config_start      : IN    std_logic;
22    config_ready      : OUT   std_logic := '0'; 
23    config_started    : OUT   std_logic := '0'; 
24    dac_array         : IN    dac_array_type;
25    dac_config_start  : OUT   std_logic := '0';
26    dac_config_ready  : IN    std_logic;
27    dac_id            : OUT   std_logic_vector(2 downto 0) := (others => '0');
28    --data              : INOUT std_logic_vector(15 downto 0) := (others => 'Z')
29    data              : OUT std_logic_vector(15 downto 0) := (others => '0')
30  );
31END ENTITY FTU_test2_spi_distributor;
32
33ARCHITECTURE beha OF FTU_test2_spi_distributor IS
34
35  type TYPE_SPI_DISTRIBUTION_STATE is (INIT, IDLE, CONFIG_DAC);
36   
37  signal spi_distr_state       : TYPE_SPI_DISTRIBUTION_STATE := INIT;
38  signal dac_id_cnt            : integer range 0 to 4 := 0;
39  signal wait_cnt              : integer range 0 to 3 := 0;
40 
41BEGIN
42 
43  spi_distribute_proc: process (clk)
44  begin
45   
46    if rising_edge(clk) then
47      --data <= (others => 'Z');
48      data <= (others => '0');
49      case spi_distr_state is
50        when INIT =>
51          --data <= (others => 'Z');
52          data <= (others => '0');
53          if wait_cnt < 3 then
54            wait_cnt <= wait_cnt + 1;
55            spi_distr_state <= INIT;
56          else
57            spi_distr_state <= IDLE;
58          end if;
59        when IDLE =>
60          --data <= (others => 'Z');
61          data <= (others => '0');
62         -- start DAC configuration
63          if (config_start = '1') then
64            config_started <= '1';
65            config_ready <= '0';
66            dac_config_start <= '1';
67            dac_id <= conv_std_logic_vector(dac_id_cnt, dac_id'length);
68            data <= conv_std_logic_vector(dac_array(dac_id_cnt),data'length);         
69            spi_distr_state <= CONFIG_DAC;
70          end if;
71                 
72        -- DAC configuration
73        when CONFIG_DAC =>
74          dac_config_start <= '1';
75          dac_id <= conv_std_logic_vector(dac_id_cnt, dac_id'length);
76          data <= conv_std_logic_vector(dac_array(dac_id_cnt),data'length);
77          if (dac_config_ready = '1') then
78            dac_config_start <= '0';
79            if (dac_id_cnt < 4) then
80              dac_id_cnt <= dac_id_cnt + 1;
81              dac_config_start <= '1';
82              spi_distr_state <= CONFIG_DAC;             
83            else
84              dac_id_cnt <= 0;
85              config_started <= '0';
86              config_ready <= '1';
87              spi_distr_state <= IDLE;
88            end if;
89          end if; 
90      end case; 
91    end if;
92   
93  end process spi_distribute_proc;
94 
95END ARCHITECTURE beha;
96
Note: See TracBrowser for help on using the repository browser.