реклама на сайте
подробности

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


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 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 не ругается?
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
3 страниц V  < 1 2 3  
Start new topic
Ответов (30 - 41)
Shivers
сообщение Jan 11 2018, 05:30
Сообщение #31


Знающий
****

Группа: Свой
Сообщений: 680
Регистрация: 11-02-08
Из: Msk
Пользователь №: 34 950



Виртуальный клок нужен чтобы достроить граф STA на интерфейсах: по входу он создает входную арку, а по выходу - выходную. При этом можно варьировать тип арки, к примеру - выбирать фронт (rise или fall), выбирать тип проверки для этой арки (setup или hold). Но поскольку арка должна иметь два конца (иначе путь будет unconstrained), то виртуальный клок должен быть синхронен принимающему клоку (по входу) и/или запускающему (по выходу). Виртуальных клоков можно создавать сколько угодно. Но и в схеме может быть много асинхронных клоков, и тогда надо следить - какой виртуальный клок синхронен какому внутреннему клоку. Соответственно, при создании виртуальных клоков потребуется задавать дополнительные фалзпасы.

Требование алтеры констрейнить интерфейсы виртуальным клоком выглядит странно. Если констрейнить синхронный вход не относительно собственного клока, а относительно виртуального, то действительно - тайминг будет отличаться на величину uncertainty и drive adjustment клокового пина (поскольку к виртуальному клоку эти твики не применяются). Но эту разницу в тайминге куда проще упрятать в величину задержки констрейнта, чем плодить виртуальные клоки. Обычно виртуальный клок используется, чтобы констрейнить асинхронные входы, чтобы они хоть как то контролировались тулом. Либо для каких то тонких моментов вроде DDR, где констрейнить интерфейс надо по обоим фронтам клока, и может оказаться проще задать два виртуальных клока со сдвигом фазы 50%, и написать констрейнт относительно переднего фронта каждого из них. Т.е. виртуальный клок - вещь специфическая, почти как кунгфу (применяется при необходимости). Но, альтере виднее, конечно. Возможно, у них тул так специфически работает, что необходимо заводить виртуальную копию каждому интерфейсному клоку.
Go to the top of the page
 
+Quote Post
_Anatoliy
сообщение Jan 11 2018, 06:15
Сообщение #32


Утомлённый солнцем
******

Группа: Свой
Сообщений: 2 646
Регистрация: 15-07-06
Из: г.Донецк ДНР
Пользователь №: 18 832



Цитата(ViKo @ Jan 10 2018, 16:20) *
Вот, картинкой подкреплю. Соответствует рисункам 13 и 12 из Cookbook. Слева - для выхода, справа - для входа.

Здесь похожая арифметика. Смотрели?
Timing_Constraints
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jan 11 2018, 07:45
Сообщение #33


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 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) *
Возможно, у них тул так специфически работает, что необходимо заводить виртуальную копию каждому интерфейсному клоку.

Это несложно. rolleyes.gif Все задержки снаружи ПЛИС описывать виртуальными тактами.
Я описываю задержки в АЦП и в дорожках на плате, подключенных к ПЛИС. И т.п. Все, как в учебниках.
Go to the top of the page
 
+Quote Post
dima32rus
сообщение Jan 11 2018, 09:45
Сообщение #34


Частый гость
**

Группа: Свой
Сообщений: 134
Регистрация: 9-11-12
Из: г. Брянск
Пользователь №: 74 311



Цитата(ViKo @ Jan 11 2018, 10:45) *
и в дорожках на плате, подключенных к ПЛИС

Не поделитесь методикой?
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jan 11 2018, 10:02
Сообщение #35


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 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[*]}
Go to the top of the page
 
+Quote Post
dima32rus
сообщение Jan 11 2018, 10:45
Сообщение #36


Частый гость
**

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
_Anatoliy
сообщение Jan 11 2018, 10:52
Сообщение #37


Утомлённый солнцем
******

Группа: Свой
Сообщений: 2 646
Регистрация: 15-07-06
Из: г.Донецк ДНР
Пользователь №: 18 832



Цитата(dima32rus @ Jan 11 2018, 13:45) *
Простите за любопытство, а что есть эти магические цифры: 15.893, 42.767

Длина дорожки умноженная на удельную задержку Tpd (ns/mm)
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jan 11 2018, 10:54
Сообщение #38


Универсальный солдатик
******

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



Цитата(_Anatoliy @ Jan 11 2018, 13:52) *
Длина дорожки умноженная на удельную задержку Tpd (ns/mm)

Да. Так развели плату. Погонную задержку в Saturn PCB прикинул.
Go to the top of the page
 
+Quote Post
dima32rus
сообщение Jan 11 2018, 11:50
Сообщение #39


Частый гость
**

Группа: Свой
Сообщений: 134
Регистрация: 9-11-12
Из: г. Брянск
Пользователь №: 74 311



Цитата(_Anatoliy @ Jan 11 2018, 13:52) *
Длина дорожки умноженная на удельную задержку Tpd (ns/mm)

ADC1dat_min и ADC1dat_max - так это разные дорожки? Мне показалось, что одна и та же, просто рассчитывается мин. и макс. задержка. Если первая цифра - это длина, а Tpd - погонная задержка, тогда не понятно было, как длина одной и той же дорожки может быть разной... Названия сбили с толку.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jan 11 2018, 11:55
Сообщение #40


Универсальный солдатик
******

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



Цитата(dima32rus @ Jan 11 2018, 14:50) *
ADC1dat_min и ADC1dat_max - так это разные дорожки? Мне показалось, что одна и та же, просто рассчитывается мин. и макс. задержка. Если первая цифра - это длина, а Tpd - погонная задержка, тогда не понятно было, как длина одной и той же дорожки может быть разной... Названия сбили с толку.

Во-первых, это дифференциальные сигналы, длина дорожек + и - могут отличаться.
Во-вторых, с АЦП идет шина данных.
В данном случае описана самая короткая и самая длинная дорожки в шине.
Go to the top of the page
 
+Quote Post
dima32rus
сообщение Jan 11 2018, 12:02
Сообщение #41


Частый гость
**

Группа: Свой
Сообщений: 134
Регистрация: 9-11-12
Из: г. Брянск
Пользователь №: 74 311



Цитата(ViKo @ Jan 11 2018, 14:55) *
Во-первых, это дифференциальные сигналы, длина дорожек + и - могут отличаться.
Во-вторых, с АЦП идет шина данных.
В данном случае описана самая короткая и самая длинная дорожки в шине.

Да, теперь понятно, спасибо
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Jan 16 2018, 10:13
Сообщение #42


В поисках себя...
****

Группа: Свой
Сообщений: 729
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140



Вот наткнулся на интересную штуку по констрейнам: http://www.in2p3.fr/actions/formation/Nume...A_TimeQuest.pdf
Go to the top of the page
 
+Quote Post

3 страниц V  < 1 2 3
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 06:04
Рейтинг@Mail.ru


Страница сгенерированна за 0.0147 секунд с 7
ELECTRONIX ©2004-2016