Перейти к содержанию
    

Как задать правильные констрэйны для приема от АЦП

Доброго дня!

 

Есть АЦП подключенное к ПЛИС через DDR LVDS. Частота дискретизации 250 МГц.

АЦП выдает клок и данные на ПЛИС. Форма сигнала на входных ногах ПЛИС показана на приложенной картинке.

 

ADC_250_MHz_Data_Clock_Out.png

 

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

Эту величину и надо указывать как set_input_delay?

 

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

 

Запутался совсем.

PS В "ТаймКвест для чайников" не отправлять, уже изучаю :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

http://www.alterawiki.com/wiki/File:TimeQuest_User_Guide.pdf

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

0. как на плате сделано выравнивание шины DDR LVDS относительно тактового сигнала?

1. плис какая?

2. судя по наличию слова "Timequest" намекаете на альтеру, тогда их рекомендации здесь: https://www.altera.com/en_US/pdfs/literature/an/an433.pdf

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

0. как на плате сделано выравнивание шины DDR LVDS относительно тактового сигнала

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

Выравнивание, тип ПЛИС не имеет значения.

 

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

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

 

Могу поставить вопрос в более общем виде:

Если поставить один вход осциллографа на тактовый вход ПЛИС, а другой на вход данных и получить вышеуказанную осциллограмму, то

как из нее получить констрэйн для этой конкретной ситуации?

Технослогический разброс выходных таймингов источника (АЦП), температурный дрейф и прочие нюансы пока выносим за скобки.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Выравнивание, тип ПЛИС не имеет значения.

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

 

Если поставить один вход осциллографа на тактовый вход ПЛИС, а другой на вход данных и получить вышеуказанную осциллограмму, то

как из нее получить констрэйн для этой конкретной ситуации?

и прочтение TimeQuest_User_Guide.pdf не помогло? я тебя умоляю =))))))

делать твою работу за тебя никто не будет.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

делать твою работу за тебя никто не будет.

Вы все о своем, о наболевшем ?

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

 

На осциллограмме имеем 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]

 

Я правильно рассуждаю?

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

 

 

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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]

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Например так. Здесь 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]

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Anatoliy, спасибо!

Весьма неплохая страничка здесь:

Timing_Constraints

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На осциллограмме имеем 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]

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вообще говоря, 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]

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Minimal setup slack = T - tSU_FPGA - maximum_input_delay, отсюда и пляшите.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот только мне кажется, что период учитывать не надо, если в качестве максимальной задержки поставить $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]

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

так как у Вас DDR, то в максимальной задержке надо учитывать не период, а пол-периода

Меня это и смутило.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...