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

Есть АЦП подключенное к ПЛИС через DDR LVDS. Частота дискретизации 250 МГц.
АЦП выдает клок и данные на ПЛИС. Форма сигнала на входных ногах ПЛИС показана на приложенной картинке.



По по осциллограмме видно что время от момента переключения данных, до момента последующего нарастания клока равно 1.44 нс.
Эту величину и надо указывать как set_input_delay?

Или же в set_input_delay надо указывать время от нарастания клока до следующего переключения данных = 0.56 нс?

Запутался совсем.
PS В "ТаймКвест для чайников" не отправлять, уже изучаю sm.gif
ViKo
И сюда не отправлять?
http://www.alterawiki.com/wiki/File:TimeQuest_User_Guide.pdf
krux
0. как на плате сделано выравнивание шины DDR LVDS относительно тактового сигнала?
1. плис какая?
2. судя по наличию слова "Timequest" намекаете на альтеру, тогда их рекомендации здесь: https://www.altera.com/en_US/pdfs/literature/an/an433.pdf
soldat_shveyk
Цитата
0. как на плате сделано выравнивание шины DDR LVDS относительно тактового сигнала

Для простоты будем счтать, осциллограф подключен непосредственно к ногам ПЛИС.
Выравнивание, тип ПЛИС не имеет значения.

Цитата
И сюда не отправлять?

Чувсво юмора оценил, спасибо.

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

krux
Цитата(soldat_shveyk @ Jul 6 2016, 21:39) *
Выравнивание, тип ПЛИС не имеет значения.

по факту ты только что этим самым сказал что подсказки тебе не нужны.

Цитата(soldat_shveyk @ Jul 6 2016, 21:39) *
Если поставить один вход осциллографа на тактовый вход ПЛИС, а другой на вход данных и получить вышеуказанную осциллограмму, то
как из нее получить констрэйн для этой конкретной ситуации?

и прочтение TimeQuest_User_Guide.pdf не помогло? я тебя умоляю =))))))
делать твою работу за тебя никто не будет.
soldat_shveyk
Цитата
делать твою работу за тебя никто не будет.

Вы все о своем, о наболевшем ?
Это не работа, это развлечение. Кто-то пиво пьет по вечерем у телека, а я ТаймКвест решил освоить sm.gif

На осциллограмме имеем t_setup = 1.44 нс и t_hold = 0.56 нс на входе ПЛИС.
Если я правильно понял, то максимальная задержка на входе не должна превышать t_hold, а минимальная не должна быть меньше -t_setup ?
Тогда входные констрэйны я делаю такие:

create_clock - name dsp_clk -period 4.000 [get_ports adc_clkb]
create_clock - name virt_clk -period 4.000
derive_clock_uncertainty
set T_SETUP 1.440
set T_HOLD 0.560
set_input_delay -clock virt_clk -max T_HOLD [get_ports adc_db11]
set_input_delay -clock virt_clk -min -T_SETUP [get_ports adc_db11]

Я правильно рассуждаю?
Или может быть надо уменьшить оба значения, чтобы отступить от моментов переключения данных?




Dima_G
Цитата(soldat_shveyk @ Jul 7 2016, 02:50) *
create_clock - name dsp_clk -period 4.000 [get_ports adc_clkb]
create_clock - name virt_clk -period 4.000
derive_clock_uncertainty
set T_SETUP 1.440
set T_HOLD 0.560
set_input_delay -clock virt_clk -max T_HOLD [get_ports adc_db11]
set_input_delay -clock virt_clk -min -T_SETUP [get_ports adc_db11]

Я правильно рассуждаю?
Или может быть надо уменьшить оба значения, чтобы отступить от моментов переключения данных?


Лучше эти значения взять из документации на АЦП. То, что вы видите сейчас - это одно, при другой температуре/чипе/политической обстановке на Кубе - может быть другие сетапы и холды.
И еще:
set_input_delay -clock virt_clk -max $T_HOLD [get_ports adc_db11]
_Anatoliy
Например так. Здесь delta_t можно приравнять нулю.
Код
#**************************************************************
# Set Input Delay
#**************************************************************
#ADC parameters AD9634
set tPD_min 4.1
set tPD_max 5.2
set tDCO_min 4.7
set tDCO_max 5.8
set Tco_max [expr $tPD_max - $tDCO_min]
set Tco_min [expr $tPD_min - $tDCO_max]

set freqDCO 216.00
set period [expr 1000.0/$freqDCO]
set delta_t [expr $phi_pll_adc * $period / 360.0]
set data_delay_max [expr $Tco_max - $delta_t]
set data_delay_min [expr $Tco_min - $delta_t]

set_input_delay $data_delay_max -max -clock {clk4x4sps_ph}                             [get_ports {InAdc[*]}]
set_input_delay $data_delay_max -max -clock {clk4x4sps_ph} -add_delay -clock_fall  [get_ports {InAdc[*]}]
set_input_delay $data_delay_min -min -clock {clk4x4sps_ph}                               [get_ports {InAdc[*]}]
set_input_delay $data_delay_min -min -clock {clk4x4sps_ph} -add_delay -clock_fall  [get_ports {InAdc[*]}]
set_false_path -rise_from [get_clocks clk4x4sps_ph] -fall_to [get_clocks clk4x4sps_ph]
set_false_path -fall_from [get_clocks clk4x4sps_ph] -rise_to [get_clocks clk4x4sps_ph]
soldat_shveyk
Anatoliy, спасибо!
_Anatoliy
Цитата(soldat_shveyk @ Jul 7 2016, 11:16) *
Anatoliy, спасибо!

Весьма неплохая страничка здесь:
Timing_Constraints
Zwerg_nase
Цитата(soldat_shveyk @ Jul 6 2016, 23:50) *
На осциллограмме имеем t_setup = 1.44 нс и t_hold = 0.56 нс на входе ПЛИС.
Если я правильно понял, то максимальная задержка на входе не должна превышать t_hold, а минимальная не должна быть меньше -t_setup ?
Тогда входные констрэйны я делаю такие:

create_clock - name dsp_clk -period 4.000 [get_ports adc_clkb]
create_clock - name virt_clk -period 4.000
derive_clock_uncertainty
set T_SETUP 1.440
set T_HOLD 0.560
set_input_delay -clock virt_clk -max T_HOLD [get_ports adc_db11]
set_input_delay -clock virt_clk -min -T_SETUP [get_ports adc_db11]

Я правильно рассуждаю?
Или может быть надо уменьшить оба значения, чтобы отступить от моментов переключения данных?


Вообще говоря, t hold определяет минимальную задержку, t setup - максимальную см. Figure 62 здесь https://www.altera.com/en_US/pdfs/literature/an/an433.pdf.

В Вашем случае, я бы написал:

set T_UI 2

set_input_delay -max [expr $T_UI - $T_SETUP] -clock virt_clk [get_ports adc_db11]
set_input_delay -min $T_HOLD -clock virt_clk -add_delay [get_ports adc_db11]
soldat_shveyk
Цитата
Вообще говоря, t hold определяет минимальную задержку, t setup - максимальную

Точно!

Вот только мне кажется, что период учитывать не надо, если в качестве максимальной задержки поставить $T_PERIOD - $T_SETUP (4.00 - 1.44 = 2.56), то
данные могут "уехать" и в регистр защелкнется значение из другого тактового интервала.
Если я рассуждаю верно, то должно быть так:
set_input_delay -max $T_SETUP -clock virt_clk [get_ports adc_db11]
_Anatoliy
Minimal setup slack = T - tSU_FPGA - maximum_input_delay, отсюда и пляшите.
Zwerg_nase
Цитата(soldat_shveyk @ Jul 7 2016, 13:03) *
Вот только мне кажется, что период учитывать не надо, если в качестве максимальной задержки поставить $T_PERIOD - $T_SETUP (4.00 - 1.44 = 2.56), то
данные могут "уехать" и в регистр защелкнется значение из другого тактового интервала.
Если я рассуждаю верно, то должно быть так:
set_input_delay -max $T_SETUP -clock virt_clk [get_ports adc_db11]


На мой взгляд, Ваше соображение не вполне корректно. Eсли Вы посмотрите на тот же Figure 62, то увидите, что для одних и тех же данных, максимальная и минимальная входные задержки в TimeQuest определяются по умолчанию для РАЗНЫХ фронтов входного клока. Поэтому, В Вашем случае, максимальная задержка (и это хорошо видно на рисунке) равна T_UI - T_SETUP.

Небольшая коррекция предыдущего поста: так как у Вас DDR, то в максимальной задержке надо учитывать не период, а пол-периода, а именно:

set T_UI 2

set_input_delay -max [expr $T_UI - $T_SETUP] -clock virt_clk [get_ports adc_db11]
set_input_delay -min $T_HOLD -clock virt_clk -add_delay [get_ports adc_db11]
soldat_shveyk
Цитата
так как у Вас DDR, то в максимальной задержке надо учитывать не период, а пол-периода

Меня это и смутило.
_Anatoliy
Цитата(soldat_shveyk @ Jul 7 2016, 13:42) *
Меня это и смутило.

Вот Ваш случай.
soldat_shveyk
Anatoliy, спасибо!!!

В скрипте, который Вы прислали, есть два клока vclk_in и clk0.
Если я правильно понял, то их можно задать так:
set period 4.000
create_clock - name clk0 -period $period [get_ports adc_clkb]
create_clock - name vclk_in -period $period
_Anatoliy
Цитата(soldat_shveyk @ Jul 7 2016, 17:27) *
Anatoliy, спасибо!!!

В скрипте, который Вы прислали, есть два клока vclk_in и clk0.
Если я правильно понял, то их можно задать так:
set period 4.000
create_clock - name clk0 -period $period [get_ports adc_clkb]
create_clock - name vclk_in -period $period

Извиняюсь, стормозил. Нужно было сразу весь документ выложить wacko.gif
Страница 23.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.