реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Чтение данных быстрого АЦП, Поделитесь опытом
Titus
сообщение Apr 27 2007, 11:18
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 21
Регистрация: 12-07-06
Пользователь №: 18 765



Привет всем!

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

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

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

Буду благодарен за высказанные идеи.
Прикрепленные файлы
Прикрепленный файл  AD9410_0.pdf ( 305.14 килобайт ) Кол-во скачиваний: 83
 
Go to the top of the page
 
+Quote Post
DmitryR
сообщение Apr 27 2007, 14:10
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 535
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770



Захлопнуть порт А по нарастающему фронту, порт В - по ниспадающему фронту, далее либо просто перевести порт В на нарастающий фронт, либо смультиплексировать оба на удвоенную частоту. В чем собственно сложность видится?
Go to the top of the page
 
+Quote Post
EvgenyNik
сообщение Apr 27 2007, 14:12
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 597
Регистрация: 24-05-06
Из: г. Чебоксары
Пользователь №: 17 402



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


--------------------
Почему разработчики систем повышенной надёжности плохо справляются с простыми проектами? :)
Go to the top of the page
 
+Quote Post
Titus
сообщение Apr 27 2007, 14:45
Сообщение #4


Участник
*

Группа: Новичок
Сообщений: 21
Регистрация: 12-07-06
Пользователь №: 18 765



Цитата
Захлопнуть порт А по нарастающему фронту, порт В - по ниспадающему фронту..


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

Начало кода может так выглядеть(ведь 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 вообще нет.
Принятые данные хочу с удвоенной частотой запихивать либо в фифо(как раз для перехода в другой домен), либо обрабатывать в реальном времени.

Сообщение отредактировал Titus - Apr 27 2007, 14:47
Go to the top of the page
 
+Quote Post
sazh
сообщение Apr 27 2007, 17:47
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804



Если же обеспечивается разрядность данных 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;
Go to the top of the page
 
+Quote Post
sergunas
сообщение May 4 2007, 11:14
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 441
Регистрация: 7-12-04
Пользователь №: 1 373



Данные следует защёлкивать в FIFO по фронтам сигналов DCO
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 15:12
Рейтинг@Mail.ru


Страница сгенерированна за 0.01376 секунд с 7
ELECTRONIX ©2004-2016