|
|
  |
Каким методом лучше захватывать данные АЦП в Spartan 6?, Режим DDR, Различные реализации и способы симуляции проекта |
|
|
|
Dec 23 2011, 05:50
|

Знающий
   
Группа: Свой
Сообщений: 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? Если есть еще какие документы которые следует почитать по теме?
--------------------
Нажми на кнопку - получишь результат, и твоя мечта осуществится
|
|
|
|
|
Dec 23 2011, 06:20
|
Знающий
   
Группа: Свой
Сообщений: 610
Регистрация: 22-04-05
Пользователь №: 4 410

|
Цитата(BlackOps @ Dec 23 2011, 08:50)  Есть проект в разработке, где планируется использовать АЦП, брать с него данные, ну и алгоритм над ними работает и выдает результат. Пока различные компоненты проекта гоняю в Behavioral симуляции. Но А зачем пост-роут симуляция то? Задает правильно констрейн и не паритесь. Про констрейны написано в wp237. К тому же ацп на 400 мгц и 14 разрядов наверняка умеет двигать данные относительно клоков лучше чем плис. Так что в плис даже ПЛЛ может не понадобиться. Разные АЦП - разные констрейны.
|
|
|
|
|
Dec 28 2011, 17:05
|

Знающий
   
Группа: Свой
Сообщений: 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? или подскажите как это осуществить?
Эскизы прикрепленных изображений
--------------------
Нажми на кнопку - получишь результат, и твоя мечта осуществится
|
|
|
|
|
Dec 29 2011, 06:30
|

Знающий
   
Группа: Свой
Сообщений: 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 нс... соответственно по этому критерию и задаю констрейны, так в чем же может быть дело?
Эскизы прикрепленных изображений
--------------------
Нажми на кнопку - получишь результат, и твоя мечта осуществится
|
|
|
|
|
Dec 30 2011, 06:49
|
Знающий
   
Группа: Участник
Сообщений: 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:Вы меня запутали своими констрейнами  . Вам же 200МГц DDR надо, это должно получиться. Что касается топологии - посмотрите картинку 1-18 в документе "spartan 6 FPGA clocking resources", я думаю, надо сделать всё как на ней, только использовать DLL c выходами CLK90 и CLK270 вместо PLL.
Сообщение отредактировал Timmy - Dec 30 2011, 09:08
|
|
|
|
|
Dec 30 2011, 07:34
|
Знающий
   
Группа: Свой
Сообщений: 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
|
|
|
|
|
Jan 4 2012, 04:02
|

Знающий
   
Группа: Свой
Сообщений: 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 режиме тоже работает.
Эскизы прикрепленных изображений
--------------------
Нажми на кнопку - получишь результат, и твоя мечта осуществится
|
|
|
|
|
Jun 5 2012, 16:16
|
Участник

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

|
Цитата(Timmy @ Dec 30 2011, 10:49)  На 400МГц DDR только Virtex, может быть, сможет принимать данные. А spartan 6 только с автокалибровкой, которая в данном случае работать не будет, так как на некоторых линиях данных сигнал может подолгу не меняться. Правда, если есть возможность периодически переключать АЦП в тестовый режим, то можно и откалиброваться. Из лоукостеров по-моему только Lattice ECP2/ECP3 могут нормально ловить 400МГц. Зато у них нет внутренних терминаторов. UPD:Вы меня запутали своими констрейнами  . Вам же 200МГц DDR надо, это должно получиться. Что касается топологии - посмотрите картинку 1-18 в документе "spartan 6 FPGA clocking resources", я думаю, надо сделать всё как на ней, только использовать DLL c выходами CLK90 и CLK270 вместо PLL. Сейчас еще ECP4. Внутренние терминаторы LVDS? если да - то есть
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|