|
TimeQuest, кто ж тебя выдумал?, поговорим на простом нестандартном примере |
|
|
|
Jan 7 2018, 11:06
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Возясь со своим реальным проектом, сделал простой учебный. Пытаюсь разобраться в констрейнах (хотя некогда считал себя достаточно грамотным в этой теме). Вот SystemVerilog проект. Ниже - констрейны для него. Работаю в Quartus 13.1, ПЛИС EP3C5E144I7. Код module ClockDivider ( (* chip_pin = "84" *) input ResetN, (* chip_pin = "89", altera_attribute = "-name io_standard lvds" *) input ClkIn, (* chip_pin = "28" *) output ClkOut, (* chip_pin = "30" *) input ClkSel, (* chip_pin = "32" *) input DataIn, (* chip_pin = "33" *) output DataOut );
bit ClkDiv; always_ff @(posedge ClkIn, negedge ResetN) if (!ResetN) ClkDiv <= 0; else ClkDiv <= !ClkDiv;
always_comb if (!ClkSel) ClkOut = ClkIn; else ClkOut = ClkDiv; always_ff @(posedge ClkOut, negedge ResetN) if (!ResetN) DataOut <= 0; else DataOut <= DataIn;
endmodule : ClockDivider Код set_time_format -unit ns -decimal_places 3
create_clock -name clk_in -period "100 MHz" -waveform {0 5.0} ClkIn
create_clock -name clk_virt -period "100 MHz"
create_generated_clock -name clk_div ClkDiv -divide_by 2 -source ClkIn
# derive_clocks
derive_clock_uncertainty
set_input_delay -clock clk_virt -min 0.0 ClkSel set_input_delay -clock clk_virt -max 1.0 ClkSel
set_input_delay -clock clk_virt -min 0.0 ResetN set_input_delay -clock clk_virt -max 1.0 ResetN
set_input_delay -clock clk_virt -min 0.0 DataIn set_input_delay -clock clk_virt -max 1.0 DataIn
set_output_delay -clock clk_virt -min -2.0 ClkOut set_output_delay -clock clk_virt -max -1.0 ClkOut
set_output_delay -clock clk_virt -min -2.0 DataOut set_output_delay -clock clk_virt -max -1.0 DataOut Вопросы. Почему работает описание триггера - делителя тактовой частоты, просто делить частоту на 2, без задержек в самом триггере? Как учитываются задержки в триггере? Почему для выходных сигналов пришлось сделать отрицательную задержку, иначе ограничения не выполнялись? Когда смотрел в TimeQuest временнЫе пути, Launch Clock запускался по срезу. Прикладываю картину ниже. Правильные ли вообще эти констрейны? Любые советы почитаю с интересом. (К сожалению, ответить смогу только завтра, ибо предстоит культурное мероприятие). Вот картина-отчет. Как ее интерпретировать? Нужно ли описывать сигнал после мультиплексора как тактовый? Пишут, вроде, нужно. А что же TimeQuest не ругается?
Эскизы прикрепленных изображений
|
|
|
|
|
 |
Ответов
|
Jan 10 2018, 13:20
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
В результате изучения литературы сделал следующие выводы. set_input_delay задает задержку сигнала относительно виртуального такта, совпадающего с реальным тактом на входе в ПЛИС. Для внешнего устройства это будет launch такт. Положительная величина означает, сигнал приходит после такта. set_output_delay задает задержку сигнала относительно виртуального такта, совпадающего с реальным тактом на входе в ПЛИС. Для внешнего устройства это будет latch такт. Положительная величина означает, сигнал выходит до такта. Вот, картинкой подкреплю. Соответствует рисункам 13 и 12 из Cookbook. Слева - для выхода, справа - для входа.
|
|
|
|
|
Jan 11 2018, 07:45
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Цитата(_Anatoliy @ Jan 11 2018, 09:15)  Здесь похожая арифметика. Смотрели? Timing_ConstraintsДа, смотрел, спасибо. Хороший документ. И этот тоже покажем для коллекции. http://www.alterawiki.com/wiki/TimeQuest_User_GuideЖаль, на дописал его Райан Сковиль. Цитата(Shivers @ Jan 11 2018, 08:30)  Возможно, у них тул так специфически работает, что необходимо заводить виртуальную копию каждому интерфейсному клоку. Это несложно.  Все задержки снаружи ПЛИС описывать виртуальными тактами. Я описываю задержки в АЦП и в дорожках на плате, подключенных к ПЛИС. И т.п. Все, как в учебниках.
|
|
|
|
|
Jan 11 2018, 09:45
|
Частый гость
 
Группа: Свой
Сообщений: 134
Регистрация: 9-11-12
Из: г. Брянск
Пользователь №: 74 311

|
Цитата(ViKo @ Jan 11 2018, 10:45)  и в дорожках на плате, подключенных к ПЛИС Не поделитесь методикой?
|
|
|
|
|
Jan 11 2018, 10:02
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Цитата(dima32rus @ Jan 11 2018, 12:45)  Не поделитесь методикой? Все согласно сказанному выше. Проверил только что. Вот фрагменты из sdc файла. Там некоторые данные и такты инверсные используются. Так LVDS развелись. И еще длина дорожек (задержка) разные в разных цепях шины. Это уже разводчики постарались. Убил бы сейчас. CODE # Задержка распространения рассчитана на калькуляторе 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[*]}
|
|
|
|
|
Jan 11 2018, 10:45
|
Частый гость
 
Группа: Свой
Сообщений: 134
Регистрация: 9-11-12
Из: г. Брянск
Пользователь №: 74 311

|
Цитата(ViKo @ Jan 11 2018, 13:02)  # Задержки данных из АЦП по плате set ADC1dat_min [expr 15.893 * $Tpd] set ADC1dat_max [expr 42.767 * $Tpd] Простите за любопытство, а что есть эти магические цифры: 15.893, 42.767
|
|
|
|
|
Jan 11 2018, 11:50
|
Частый гость
 
Группа: Свой
Сообщений: 134
Регистрация: 9-11-12
Из: г. Брянск
Пользователь №: 74 311

|
Цитата(_Anatoliy @ Jan 11 2018, 13:52)  Длина дорожки умноженная на удельную задержку Tpd (ns/mm) ADC1dat_min и ADC1dat_max - так это разные дорожки? Мне показалось, что одна и та же, просто рассчитывается мин. и макс. задержка. Если первая цифра - это длина, а Tpd - погонная задержка, тогда не понятно было, как длина одной и той же дорожки может быть разной... Названия сбили с толку.
|
|
|
|
|
Jan 11 2018, 11:55
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Цитата(dima32rus @ Jan 11 2018, 14:50)  ADC1dat_min и ADC1dat_max - так это разные дорожки? Мне показалось, что одна и та же, просто рассчитывается мин. и макс. задержка. Если первая цифра - это длина, а Tpd - погонная задержка, тогда не понятно было, как длина одной и той же дорожки может быть разной... Названия сбили с толку. Во-первых, это дифференциальные сигналы, длина дорожек + и - могут отличаться. Во-вторых, с АЦП идет шина данных. В данном случае описана самая короткая и самая длинная дорожки в шине.
|
|
|
|
Сообщений в этой теме
ViKo TimeQuest, кто ж тебя выдумал? Jan 7 2018, 11:06 Flip-fl0p А разве не надо писать констрейн между вашим клоко... Jan 7 2018, 11:27 ViKo Виртуальные такты - всегда снаружи ПЛИС. Ничего бо... Jan 7 2018, 11:47 Alexey_Rostov Цитата(ViKo @ Jan 7 2018, 14:06) Вопросы.... Jan 7 2018, 15:48 ViKo Видимо, Tclk-q?
Эти времена понятны. Но разве я их... Jan 7 2018, 15:56 krux текст, помеченный тегами [ b ] [ /b ] - моя писани... Jan 7 2018, 16:45 Flip-fl0p Вообще, если я не ошибаюсь то для мультиплексирова... Jan 7 2018, 17:59 ViKo krux, по делу есть чего сказать?
Это и есть top.
Н... Jan 7 2018, 18:03 Flip-fl0p А можно уточняющий вопрос ?
Задача учебного проект... Jan 7 2018, 18:28 Shivers Пример плохой, потому что мультиплексор клоков в н... Jan 7 2018, 18:46 krux ViKo
по делу - выкинуть и переписать.
но для нача... Jan 7 2018, 18:53 ViKo Жажду увидеть правильные констрейны. Выкинуть любо... Jan 7 2018, 19:31 krux я понял в чем проблема, в вашем чипе CLKCTRL так к... Jan 7 2018, 19:46 ViKo Насчет виртуальных тактов. Уже выбросил, заменил н... Jan 8 2018, 13:03 Flip-fl0p Цитата(ViKo @ Jan 8 2018, 16:03) Однако, ... Jan 9 2018, 05:46 wolfman А если взять другую версию Квартуса? Jan 9 2018, 07:36 _Anatoliy . Jan 9 2018, 07:38 ViKo Цитата(wolfman @ Jan 9 2018, 10:36) А есл... Jan 9 2018, 07:52 warrior-2001 На клоковый вход блока DataOut подан не клок! ... Jan 9 2018, 12:36 ViKo Кодset_time_format -unit ns -decimal_places 3
# c... Jan 9 2018, 12:42 warrior-2001 Цитата(ViKo @ Jan 9 2018, 15:42) Вам на т... Jan 10 2018, 09:23  ViKo Цитата(warrior-2001 @ Jan 10 2018, 12... Jan 10 2018, 09:42  andrew_b Цитата(warrior-2001 @ Jan 10 2018, 12... Jan 10 2018, 09:48 Flip-fl0p Я как понял ваших данных работает на частоте clk_d... Jan 9 2018, 13:03 ViKo Цитата(Flip-fl0p @ Jan 9 2018, 16:03... Jan 9 2018, 13:05  Flip-fl0p Цитата(ViKo @ Jan 9 2018, 16:05) А я же ц... Jan 9 2018, 13:15   ViKo Цитата(Flip-fl0p @ Jan 9 2018, 16:15... Jan 9 2018, 13:23 Flip-fl0p Меня вот один вопрос мучает. А как Timequest поним... Jan 10 2018, 10:19 ViKo Цитата(Flip-fl0p @ Jan 10 2018, 13:1... Jan 10 2018, 10:26       ViKo Цитата(_Anatoliy @ Jan 11 2018, 13:52) Дл... Jan 11 2018, 10:54         dima32rus Цитата(ViKo @ Jan 11 2018, 14:55) Во-перв... Jan 11 2018, 12:02 Shivers Виртуальный клок нужен чтобы достроить граф STA на... Jan 11 2018, 05:30 Flip-fl0p Вот наткнулся на интересную штуку по констрейнам: ... Jan 16 2018, 10:13
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|