Здравствуйте! Необходимо подключить АЦП AD7478А к ПЛИС. На вход ацп подается последовательность импульсов с частотой 4кГц, длительностью 1 мкс. Момент прихода импульса не известен. Т.е. необходимо поставить пороговое устройство(ПУ). Поясните, пожалуйста, как в этом случае необходимо считывать данные? На форуме нашел этот код. Правда он косячный. Необходимо сформировать cs-сигнал в момент прихода разрешающего сигнала с ПУ, и в этот же момент запустить тактовые импульсы, так? Просто нужно сформировать 12 импульсов,ацп выдаст по ним данные, которые придут в регистр?
Код
d:\zwork\tlc548(9)\top_lev.vhd
1 libraryIEEE;
2 useIEEE.STD_LOGIC_1164.ALL;
3 useIEEE.STD_LOGIC_ARITH.ALL;
4 useIEEE.STD_LOGIC_UNSIGNED.ALL;
5
6 entitytop_lev is
7 port(
8 clk : in std_logic; -- External clock
9 Data_adc: in std_logic; -- Data from ADC
10 cs : in std_logic; -- External ChipSelect
11 cs_adc : out std_logic; -- ChipSelect for ADC ==-Active Low-==
12 clk_adc : out std_logic; -- Clock for ADC
13 Data_out: out std_logic_vector(7 downto 0) -- Output Vector 8 bits
14 );
15 endtop_lev;
16
17 architectureBehavioral oftop_lev is
18
19 signalD_reg : std_logic_vector(7 downto 0);
20 signalcnt : std_logic_vector(2 downto 0);
21
22 begin
23
24 clk_adc <=clk;
25 cs_adc <=cs;
26
27 process(clk)
28 begin
29 if rising_edge(clk) then
30 ifcs ='0' then
31 D_reg <=D_reg(6 downto 0) &Data_adc;
32 --else
33 --D_reg <= (others => '0');
34 end if;
35 end if;
36 end process;
37
38 process(clk,cs)
39 begin
40 ifcs ='1' then
41 cnt <= (others =>'0');
42 elsif rising_edge(clk) then
43 cnt <=cnt +'1';
44 end if;
45 end process;
46
47 Data_out <=D_reg whencnt = "00000000";
48
49 endBehavioral;
50
Прикрепил временную диаграмму АЦП.
Эскизы прикрепленных изображений