Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Чтение данных быстрого АЦП
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Titus
Привет всем!

Поделитесь опытом, посоветуйте.

Есть быстрый АЦП (ad9410) и ПЛИС.
АЦП мультиплексирует выходные данные на два порта А и В, вырабатывая при этом тактовый сигнал.
По спадающему фронту этого сигнала данные выставляются на порт А, по возрастающему на порт В и т.д. Таким образом достигается быстродействие в два раза большее, чем для каждого из портов в отдельности.

Внимание вопрос: как принять эти данные в ПЛИС?

Буду благодарен за высказанные идеи.
DmitryR
Захлопнуть порт А по нарастающему фронту, порт В - по ниспадающему фронту, далее либо просто перевести порт В на нарастающий фронт, либо смультиплексировать оба на удвоенную частоту. В чем собственно сложность видится?
EvgenyNik
У этого АЦП 2 режима выдачи данных в порты А и В: параллельный и чередующийся. Особой разницы в быстродействии нет, есть лишь разница в удобстве обработки.
Время актуальности данных одной выборки одинаково, что в одном режиме, что в другом, поэтому для приёмника на ПЛИС совершенно всё равно - в каком режиме работать.
Здесь надо смотреть - в каком режиме удобнее принимать данные устройству, принимающему данные уже с ПЛИС (или приёмника в ПЛИС). Если разрядность шины данных допустимо увеличить в 2 раза (20 бит), то имеет смысл работать в параллельном режиме и снизить частоту выхода с приёмника ПЛИС в 2 раза.
Если же обеспечивается разрядность данных 30 (32 бита), то оптимальнее чередующийся режим с группированием по 3 выборки в один пакет исходящих данных, т.к. снижается частота исходящего потока в 3 раза.
Titus
Цитата
Захлопнуть порт А по нарастающему фронту, порт В - по ниспадающему фронту..


Это как? Если написать два процесса, один по возр, другой по ниспад, то как их смультиплексировать на удвоенную частоту?

Начало кода может так выглядеть(ведь bus имеет два источника)?
Код
process(dco) begin
if (dco = '1' and dco'event) then
bus <= portA;
end if;
end process;

process(dco) begin
if (dco = '0' and dco'event) then
bus <= portB;
end if;
end process;


Опыта мало, а в задачах, использующих переводы из одних доменов в другие и использования ddr вообще нет.
Принятые данные хочу с удвоенной частотой запихивать либо в фифо(как раз для перехода в другой домен), либо обрабатывать в реальном времени.
sazh
Если же обеспечивается разрядность данных 30 (32 бита), то оптимальнее чередующийся режим с группированием по 3 выборки в один пакет исходящих данных, т.к. снижается частота исходящего потока в 3 раза.
///////////////////////
Можно добавить, чтобы снизить частоту потока в три раза, нужно иметь разрядность данных 60.
Принимают на сдвигающие регистры, четный нечетный,перезаписывают уже фифо глобальным клоком.
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.std_logic_unsigned.all;

entity rx_ddr is
port (
inclock_gated : in std_logic;
datain_a : in std_logic_vector (9 downto 0);
datain_b : in std_logic_vector (9 downto 0);
dataout_pos : out std_logic_vector (29 downto 0);
dataout_neg : out std_logic_vector (29 downto 0)
);
end entity;


architecture rx_ddr_arch of rx_ddr is

signal datain_pos : std_logic_vector (29 downto 0);
signal datain_neg : std_logic_vector (29 downto 0);

begin

process (inclock_gated)
begin
if (inclock_gated'event and inclock_gated = '1') then
datain_pos <= datain_a & datain_pos (29 downto 10);
end if;
end process;

process (inclock_gated)
begin
if (inclock_gated'event and inclock_gated = '0') then
datain_neg <= datain_b & datain_neg (29 downto 10);
end if;
end process;

dataout_pos <= datain_pos;
dataout_neg <= datain_neg;

end architecture;
sergunas
Данные следует защёлкивать в FIFO по фронтам сигналов DCO
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.