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

 
 
 
Reply to this topicStart new topic
> Каким методом лучше захватывать данные АЦП в Spartan 6?, Режим DDR, Различные реализации и способы симуляции проекта
BlackOps
сообщение Dec 23 2011, 05:50
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 618
Регистрация: 7-06-08
Из: USSR
Пользователь №: 38 121



Есть проект в разработке, где планируется использовать АЦП, брать с него данные, ну и алгоритм над ними работает и выдает результат. Пока различные компоненты проекта гоняю в Behavioral симуляции. Но по мере завершения планирую уже проводить Post-Route симуляцию с более подробным тайминг анализом и констрейнами.

В зависимости от выбора функционала финального изделия планируется использовать различные АЦП, поэтому какой именно пока незнаю.

Но предположим будет использоватся некий АЦП скажем в 400MSPS размером в 14бит, и передающий данные дифф. парой. Я думаю реализовать симуляцию этого проекта в тестбенче в режиме post-route, а данные считывать с жесткого диска (сейчас я почти тоже самое делаю, тока в Behavioral режиме и без всякой эмуляции дифф. пары).

Смотрю сейчас книжку предложенную Boris_TS в предыдущем посте, а также читаю документ харр1064 Source-Synchronous Serialization and
Deserialization (up to 1050 Mb/s)
от Хилых, где рассказывается как получать данные в режиме DDR используя PLL, DCM итд.

Но потом наткнулся вот на этот пост в онлайне:
http://e2e.ti.com/support/data_converters/...68/t/47555.aspx

где работник Texas Instruments рассказывает мол то что написано в документе хилых харр1064 это слишком комплексно и сложно синхронизуемо, и что он реализовал принятие данных в режиме DDR по другому, ниже он приводит блок диаграмму как это сделал он, в его случае все вроде как проще, и используются IDDR2 и различные элементы задержки.

кто что может по этому поводу сказать? По какому пути лучше пойти? И как лучше реализовать чтение данных от АЦП (различной скорости) в режиме DDR?

Если есть еще какие документы которые следует почитать по теме?


--------------------
Нажми на кнопку - получишь результат, и твоя мечта осуществится
Go to the top of the page
 
+Quote Post
disel
сообщение Dec 23 2011, 06:20
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 610
Регистрация: 22-04-05
Пользователь №: 4 410



Цитата(BlackOps @ Dec 23 2011, 08:50) *
Есть проект в разработке, где планируется использовать АЦП, брать с него данные, ну и алгоритм над ними работает и выдает результат. Пока различные компоненты проекта гоняю в Behavioral симуляции. Но


А зачем пост-роут симуляция то? Задает правильно констрейн и не паритесь. Про констрейны написано в wp237. К тому же ацп на 400 мгц и 14 разрядов наверняка умеет двигать данные относительно клоков лучше чем плис. Так что в плис даже ПЛЛ может не понадобиться.
Разные АЦП - разные констрейны.
Go to the top of the page
 
+Quote Post
Костян
сообщение Dec 23 2011, 07:08
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 740
Регистрация: 24-07-06
Из: Minsk
Пользователь №: 19 059



Достаточно след.
1. Входной триггер DDR для данных в лапу (жеталельно использовать свойство same egde)
2. Входной триггер frame (если последовальный интерфейс) в лапу, триггер тактировать от АЦП синхронизации
3. сигнал синхронизации на спец. лапу, позволяющую хватать клок.

Контрейн на сигнал синхронизации. DCM не требуется, если дорожки на PCB равной длины.

Go to the top of the page
 
+Quote Post
disel
сообщение Dec 23 2011, 07:42
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 610
Регистрация: 22-04-05
Пользователь №: 4 410



Положение данных относительно клока у разных ацп может быть самым разным. Я бы не стал утверждать что констрейн оффсет ин и дсм в плисе никогда не нужны.
Go to the top of the page
 
+Quote Post
Костян
сообщение Dec 26 2011, 11:34
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 740
Регистрация: 24-07-06
Из: Minsk
Пользователь №: 19 059



QUOTE (disel @ Dec 23 2011, 06:42) *
Положение данных относительно клока у разных ацп может быть самым разным. Я бы не стал утверждать что констрейн оффсет ин и дсм в плисе никогда не нужны.

как правило фронт клока смешен на 90 или 180 гр. Если клок заходит на gbuf пины, то задержки порядка 0.2..0.3нс. dcm не нужен.
Go to the top of the page
 
+Quote Post
BlackOps
сообщение Dec 28 2011, 17:05
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 618
Регистрация: 7-06-08
Из: USSR
Пользователь №: 38 121



Я думаю об АЦП ADS5474, вот его даташит: http://www.ti.com/lit/ds/symlink/ads4149.pdf на странице 7 показана диаграмма как данные на выход посылаются, как видите начало клока совпадает с началом данных, поэтому для лучшего захвата мне нужно задержать клок примерно на 90 градусов.

Я прикрепляю картинку где я набросал компоненты присущие Спартан 6, ну и вот по такой схеме я думаю захватывать данные. Данную конфигурацию я просимулировал в Behavioral режиме, работает нормально.

У меня вопрос такой: Как теперь правильно определить входные констрейны на клок и данные для данной конфигурации?

Я просмотрел документацию там приводится пример:
OFFSET = IN value VALID value BEFORE clock RISING;
OFFSET = IN value VALID value BEFORE clock FALLING;


Но дело в том, что на спартан 6 на компоненте IDDR2 FALLING констрейн игнорируется, и вот здесь: http://www.xilinx.com/support/answers/34634.htm Xilinx приводит пример как поставить констрейны в данном случае.

Однако тот пример уже предполагает что переход клока происходит в середине окна данных, в моем случае это не так. Надо задержать клок, а потом захватить

Так как же правильно в данном случае задать констрейны? кто нибудь чтото аналогичное клепал на спартан 6? (где переход данных и клока одновременно в режиме DDR) может поделитесь отрезком файла .ucf? или подскажите как это осуществить?
Эскизы прикрепленных изображений
Прикрепленное изображение
 


--------------------
Нажми на кнопку - получишь результат, и твоя мечта осуществится
Go to the top of the page
 
+Quote Post
BlackOps
сообщение Dec 29 2011, 06:30
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 618
Регистрация: 7-06-08
Из: USSR
Пользователь №: 38 121



Вобщем решил я попробовать так, подать просто данные на флоп с клоком входным, и вписать констрейны, прикрепляю диаграмму.

а вот мои констрейны:
NET "adc1_clk" TNM_NET = "adc1_clk";
TIMESPEC TS_adc1_clk = PERIOD "adc1_clk" 2.5 ns HIGH 50 %;

NET "adc1_data*" TNM = "IN_DDR";

TIMEGRP ddr_in_rising = RISING "adc1_clk";
TIMEGRP ddr_in_falling = FALLING "adc1_clk";

TIMEGRP "IN_DDR" OFFSET = IN -500 ps VALID 250 ps BEFORE "adc1_clk" TIMEGRP "ddr_in_rising";
TIMEGRP "IN_DDR" OFFSET = IN -750 ps VALID 250 ps BEFORE "adc1_clk" TIMEGRP "ddr_in_falling";


Выдает вот что:
Paths for end point IDDR2_inst (ILOGIC_X1Y175.D), 2 paths
--------------------------------------------------------------------------------
Slack (hold path): -1.718ns (requirement - (clock path + clock arrival + uncertainty - data path))
Source: adc1_data (PAD)
Destination: IDDR2_inst (FF)
Destination Clock: C0 rising at 0.000ns
Requirement: 0.750ns
Data Path Delay: 2.031ns (Levels of Logic = 2)(Component delays alone exceeds constraint)
Clock Path Delay: 4.474ns (Levels of Logic = 2)
Clock Uncertainty: 0.025ns


Paths for end point IDDR2_inst (ILOGIC_X1Y175.D), 2 paths
--------------------------------------------------------------------------------
Slack (hold path): -2.714ns (requirement - (clock path + clock arrival + uncertainty - data path))
Source: adc1_data (PAD)
Destination: IDDR2_inst (FF)
Destination Clock: C0 falling at 1.250ns
Requirement: 1.000ns
Data Path Delay: 2.031ns (Levels of Logic = 2)(Component delays alone exceeds constraint)
Clock Path Delay: 4.470ns (Levels of Logic = 2)
Clock Uncertainty: 0.025ns


Ведь вроде как правильно констрейны задаю, период входного клока 2.5 нс, данные каждые 1.25 нс, +/- 0.5 нс... соответственно по этому критерию и задаю констрейны, так в чем же может быть дело?
Эскизы прикрепленных изображений
Прикрепленное изображение
 


--------------------
Нажми на кнопку - получишь результат, и твоя мечта осуществится
Go to the top of the page
 
+Quote Post
Timmy
сообщение Dec 30 2011, 06:49
Сообщение #8


Знающий
****

Группа: Участник
Сообщений: 835
Регистрация: 9-08-08
Из: Санкт-Петербург
Пользователь №: 39 515



Цитата(BlackOps @ Dec 29 2011, 10:30) *
Ведь вроде как правильно констрейны задаю, период входного клока 2.5 нс, данные каждые 1.25 нс, +/- 0.5 нс... соответственно по этому критерию и задаю констрейны, так в чем же может быть дело?

На 400МГц DDR только Virtex, может быть, сможет принимать данные. А spartan 6 только с автокалибровкой, которая в данном случае работать не будет, так как на некоторых линиях данных сигнал может подолгу не меняться. Правда, если есть возможность периодически переключать АЦП в тестовый режим, то можно и откалиброваться.
Из лоукостеров по-моему только Lattice ECP2/ECP3 могут нормально ловить 400МГц. Зато у них нет внутренних терминаторов.

UPD:Вы меня запутали своими констрейнамиsm.gif. Вам же 200МГц DDR надо, это должно получиться.

Что касается топологии - посмотрите картинку 1-18 в документе "spartan 6 FPGA clocking resources", я думаю, надо сделать всё как на ней, только использовать DLL c выходами CLK90 и CLK270 вместо PLL.

Сообщение отредактировал Timmy - Dec 30 2011, 09:08
Go to the top of the page
 
+Quote Post
disel
сообщение Dec 30 2011, 07:34
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 610
Регистрация: 22-04-05
Пользователь №: 4 410



Цитата(Костян @ Dec 26 2011, 14:34) *
как правило фронт клока смешен на 90 или 180 гр. Если клок заходит на gbuf пины, то задержки порядка 0.2..0.3нс. dcm не нужен.


Видимо мы разные ацп пользуем.

2 BlackOps:
даташит на который вы дали ссылку на 250 мгц ацп. т..е. 4 нс. и tsu и th совсем другие, не совпадают с тем что в ваших констрейнах. и на 7 странице электрические параметры. вы уж определитесь чего хотите.
про то как ддр констрейны писать в wp237 на стр.13
Go to the top of the page
 
+Quote Post
BlackOps
сообщение Jan 4 2012, 04:02
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 618
Регистрация: 7-06-08
Из: USSR
Пользователь №: 38 121



Прошу прощения, с линком на даташит перепутал.

частоту тоже спутал, да 200МГц, это и есть 400MSPS. Просто в доке TI на разных страницах по разному говорилось, опечатка видимо.

Констрейны надо было поставить вот так:
NET "adc1_clk_p" TNM_NET = "adc1_clk_p";
TIMESPEC TS_adc1_clk_p = PERIOD "adc1_clk_p" 5 ns HIGH 50 %;

NET "adc1_data*" TNM = "IN_DDR";

NET "C0" TNM_NET = "clk0_grp";
NET "C1" TNM_NET = "clk180_grp";
TIMEGRP "IN_DDR" OFFSET = IN -500 ps VALID 1500 ps BEFORE "adc1_clk_p" TIMEGRP "clk0_grp";
TIMEGRP "IN_DDR" OFFSET = IN -3000 ps VALID 1500 ps BEFORE "adc1_clk_p" TIMEGRP "clk180_grp";



Это из-за того что ISE 13.3 игнорирует FALLING констрейн, обещано было исправить в версии 12.4, но даже в 13.3 этот баг еще присутствует.

А насчет того как входные данные принимать, я сделал вот так как на рисунке прикрепленном показано.
т.е. генерирую смещенные клоки, так setup/hold параметры намного лучще, меньше задержки клока.

Вобщем весь дизайн запустил, нормально без предупреждений, и тайминг нормальный. В Behavioral режиме тоже работает.




Эскизы прикрепленных изображений
Прикрепленное изображение
 


--------------------
Нажми на кнопку - получишь результат, и твоя мечта осуществится
Go to the top of the page
 
+Quote Post
Алга
сообщение Jan 9 2012, 09:10
Сообщение #11


Частый гость
**

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



Есть проекты (design package) с полной документацией (исходники и тд) от National Semiconductor для высокоскоростных АЦП (gsps adc). Реализация на Virtex-4.
http://www.national.com/en/adc/evalboard_u..._speed_adc.html
Go to the top of the page
 
+Quote Post
Алга
сообщение Jan 9 2012, 11:54
Сообщение #12


Частый гость
**

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



"..Смотрю сейчас книжку предложенную Boris_TS в предыдущем посте.."

Не нашел, помогите ссылкой. Спасибо.
Go to the top of the page
 
+Quote Post
Timmy
сообщение Jan 9 2012, 13:14
Сообщение #13


Знающий
****

Группа: Участник
Сообщений: 835
Регистрация: 9-08-08
Из: Санкт-Петербург
Пользователь №: 39 515



Цитата(BlackOps @ Jan 4 2012, 08:02) *
TIMEGRP "IN_DDR" OFFSET = IN -500 ps VALID 1500 ps BEFORE "adc1_clk_p" TIMEGRP "clk0_grp";
TIMEGRP "IN_DDR" OFFSET = IN -3000 ps VALID 1500 ps BEFORE "adc1_clk_p" TIMEGRP "clk180_grp";


Это из-за того что ISE 13.3 игнорирует FALLING констрейн, обещано было исправить в версии 12.4, но даже в 13.3 этот баг еще присутствует.

Мне кажется, в Вашем случае такое задание констрейнов без FALLING правильнее, так как клок пропускается через фазовый детектор PLL/DLL, который всё равно реагирует только на rising фронт клока. Окно ещё надо бы уменьшить на skew в PCB.
Go to the top of the page
 
+Quote Post
MishaN
сообщение Jun 5 2012, 16:16
Сообщение #14


Участник
*

Группа: Участник
Сообщений: 42
Регистрация: 2-06-12
Из: Минск
Пользователь №: 72 138



Цитата(Timmy @ Dec 30 2011, 10:49) *
На 400МГц DDR только Virtex, может быть, сможет принимать данные. А spartan 6 только с автокалибровкой, которая в данном случае работать не будет, так как на некоторых линиях данных сигнал может подолгу не меняться. Правда, если есть возможность периодически переключать АЦП в тестовый режим, то можно и откалиброваться.
Из лоукостеров по-моему только Lattice ECP2/ECP3 могут нормально ловить 400МГц. Зато у них нет внутренних терминаторов.

UPD:Вы меня запутали своими констрейнамиsm.gif. Вам же 200МГц DDR надо, это должно получиться.

Что касается топологии - посмотрите картинку 1-18 в документе "spartan 6 FPGA clocking resources", я думаю, надо сделать всё как на ней, только использовать DLL c выходами CLK90 и CLK270 вместо PLL.


Сейчас еще ECP4.
Внутренние терминаторы LVDS? если да - то есть
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 04:38
Рейтинг@Mail.ru


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