Shivers 0 11 января, 2018 Опубликовано 11 января, 2018 · Жалоба Виртуальный клок нужен чтобы достроить граф STA на интерфейсах: по входу он создает входную арку, а по выходу - выходную. При этом можно варьировать тип арки, к примеру - выбирать фронт (rise или fall), выбирать тип проверки для этой арки (setup или hold). Но поскольку арка должна иметь два конца (иначе путь будет unconstrained), то виртуальный клок должен быть синхронен принимающему клоку (по входу) и/или запускающему (по выходу). Виртуальных клоков можно создавать сколько угодно. Но и в схеме может быть много асинхронных клоков, и тогда надо следить - какой виртуальный клок синхронен какому внутреннему клоку. Соответственно, при создании виртуальных клоков потребуется задавать дополнительные фалзпасы. Требование алтеры констрейнить интерфейсы виртуальным клоком выглядит странно. Если констрейнить синхронный вход не относительно собственного клока, а относительно виртуального, то действительно - тайминг будет отличаться на величину uncertainty и drive adjustment клокового пина (поскольку к виртуальному клоку эти твики не применяются). Но эту разницу в тайминге куда проще упрятать в величину задержки констрейнта, чем плодить виртуальные клоки. Обычно виртуальный клок используется, чтобы констрейнить асинхронные входы, чтобы они хоть как то контролировались тулом. Либо для каких то тонких моментов вроде DDR, где констрейнить интерфейс надо по обоим фронтам клока, и может оказаться проще задать два виртуальных клока со сдвигом фазы 50%, и написать констрейнт относительно переднего фронта каждого из них. Т.е. виртуальный клок - вещь специфическая, почти как кунгфу (применяется при необходимости). Но, альтере виднее, конечно. Возможно, у них тул так специфически работает, что необходимо заводить виртуальную копию каждому интерфейсному клоку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_sda 0 11 января, 2018 Опубликовано 11 января, 2018 · Жалоба Вот, картинкой подкреплю. Соответствует рисункам 13 и 12 из Cookbook. Слева - для выхода, справа - для входа. Здесь похожая арифметика. Смотрели? Timing_Constraints Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 11 января, 2018 Опубликовано 11 января, 2018 · Жалоба Здесь похожая арифметика. Смотрели? Timing_Constraints Да, смотрел, спасибо. Хороший документ. И этот тоже покажем для коллекции. http://www.alterawiki.com/wiki/TimeQuest_User_Guide Жаль, на дописал его Райан Сковиль. Возможно, у них тул так специфически работает, что необходимо заводить виртуальную копию каждому интерфейсному клоку. Это несложно. :rolleyes: Все задержки снаружи ПЛИС описывать виртуальными тактами. Я описываю задержки в АЦП и в дорожках на плате, подключенных к ПЛИС. И т.п. Все, как в учебниках. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demon3200 0 11 января, 2018 Опубликовано 11 января, 2018 · Жалоба и в дорожках на плате, подключенных к ПЛИС Не поделитесь методикой? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 11 января, 2018 Опубликовано 11 января, 2018 · Жалоба Не поделитесь методикой? Все согласно сказанному выше. Проверил только что. Вот фрагменты из sdc файла. Там некоторые данные и такты инверсные используются. Так LVDS развелись. И еще длина дорожек (задержка) разные в разных цепях шины. Это уже разводчики постарались. Убил бы сейчас. # Задержка распространения рассчитана на калькуляторе Saturn PCB # Microstrip, W = 0.250 mm, H = 0.345 mm, FR-4 STD, 0.18 + 0.18 µm (Zo = 77 Ohm) # было Tpd = 0.00563 # Saturn PCB V6.88, Conductor Impedance, Tpd (ns/mm) # Microstrip, W = 0,25 mm, H = 0,34 mm, FR-4 STD, 0,18 um + 0,35 um (Zo = 75.5 Ohms) set Tpd 0.00584 set ADC1clk_min [expr 53.453 * $Tpd] set ADC1clk_max [expr 55.604 * $Tpd] set ADC2clk_min [expr 50.640 * $Tpd] set ADC2clk_max [expr 54.596 * $Tpd] # Задержки преобразования в АЦП (1.9 valid,min | 2.8 pd,typ | 3.8 pd,max) # Окно верных данных с АЦП set ADCtco_min 3.8 set ADCtco_max [expr 1.9 + 4.0] # Задержки данных из АЦП по плате set ADC1dat_min [expr 15.893 * $Tpd] set ADC1dat_max [expr 42.767 * $Tpd] set ADC2dat_min [expr 15.325 * $Tpd] set ADC2dat_max [expr 34.516 * $Tpd] # Задержки тактов для ПЛИС set PLDclk_min [expr 14.693 * $Tpd] set PLDclk_max [expr 15.099 * $Tpd] # Входные такты (сдвинуты на полпериода, потому что инверсные) create_clock -name plc -period "250 MHz" -waveform {2.0 4.0} [get_ports {PLC_N}] # Внешние виртуальные такты для тактирования сигналов с АЦП create_clock -name clka -period "250 MHz" # Канал 1 set_input_delay \ -clock clka -min \ [expr $ADC1clk_min + $ADCtco_min + $ADC1dat_min - $PLDclk_max] \ {S1D_N[*] S1D_P} set_input_delay \ -clock clka -max \ [expr $ADC1clk_max + $ADCtco_max + $ADC1dat_max - $PLDclk_min] \ {S1D_N[*] S1D_P} # Канал 2 set_input_delay \ -clock clka -min \ [expr $ADC2clk_min + $ADCtco_min + $ADC2dat_min - $PLDclk_max] \ {S2D_P[*] S2D_N[*]} set_input_delay \ -clock clka -max \ [expr $ADC2clk_max + $ADCtco_max + $ADC2dat_max - $PLDclk_min] \ {S2D_P[*] S2D_N[*]} Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demon3200 0 11 января, 2018 Опубликовано 11 января, 2018 · Жалоба # Задержки данных из АЦП по плате set ADC1dat_min [expr 15.893 * $Tpd] set ADC1dat_max [expr 42.767 * $Tpd] Простите за любопытство, а что есть эти магические цифры: 15.893, 42.767 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_sda 0 11 января, 2018 Опубликовано 11 января, 2018 · Жалоба Простите за любопытство, а что есть эти магические цифры: 15.893, 42.767 Длина дорожки умноженная на удельную задержку Tpd (ns/mm) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 11 января, 2018 Опубликовано 11 января, 2018 · Жалоба Длина дорожки умноженная на удельную задержку Tpd (ns/mm) Да. Так развели плату. Погонную задержку в Saturn PCB прикинул. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demon3200 0 11 января, 2018 Опубликовано 11 января, 2018 · Жалоба Длина дорожки умноженная на удельную задержку Tpd (ns/mm) ADC1dat_min и ADC1dat_max - так это разные дорожки? Мне показалось, что одна и та же, просто рассчитывается мин. и макс. задержка. Если первая цифра - это длина, а Tpd - погонная задержка, тогда не понятно было, как длина одной и той же дорожки может быть разной... Названия сбили с толку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 11 января, 2018 Опубликовано 11 января, 2018 · Жалоба ADC1dat_min и ADC1dat_max - так это разные дорожки? Мне показалось, что одна и та же, просто рассчитывается мин. и макс. задержка. Если первая цифра - это длина, а Tpd - погонная задержка, тогда не понятно было, как длина одной и той же дорожки может быть разной... Названия сбили с толку. Во-первых, это дифференциальные сигналы, длина дорожек + и - могут отличаться. Во-вторых, с АЦП идет шина данных. В данном случае описана самая короткая и самая длинная дорожки в шине. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demon3200 0 11 января, 2018 Опубликовано 11 января, 2018 · Жалоба Во-первых, это дифференциальные сигналы, длина дорожек + и - могут отличаться. Во-вторых, с АЦП идет шина данных. В данном случае описана самая короткая и самая длинная дорожки в шине. Да, теперь понятно, спасибо Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 16 января, 2018 Опубликовано 16 января, 2018 · Жалоба Вот наткнулся на интересную штуку по констрейнам: http://www.in2p3.fr/actions/formation/Nume...A_TimeQuest.pdf Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться