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

 
 
> 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
 
Start new topic
Ответов
ViKo
сообщение Jan 10 2018, 13:20
Сообщение #2


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

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



В результате изучения литературы сделал следующие выводы.

set_input_delay задает задержку сигнала относительно виртуального такта,
совпадающего с реальным тактом на входе в ПЛИС. Для внешнего устройства это
будет launch такт. Положительная величина означает, сигнал приходит после такта.

set_output_delay задает задержку сигнала относительно виртуального такта,
совпадающего с реальным тактом на входе в ПЛИС. Для внешнего устройства это
будет latch такт. Положительная величина означает, сигнал выходит до такта.

Вот, картинкой подкреплю. Соответствует рисункам 13 и 12 из Cookbook. Слева - для выхода, справа - для входа.
Прикрепленное изображение
Go to the top of the page
 
+Quote Post
_Anatoliy
сообщение Jan 11 2018, 06:15
Сообщение #3


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

Группа: Свой
Сообщений: 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
Сообщение #4


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

Группа: Модераторы
Сообщений: 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
Сообщение #5


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

Группа: Свой
Сообщений: 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
Сообщение #6


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

Группа: Модераторы
Сообщений: 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
Сообщение #7


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

Группа: Свой
Сообщений: 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
Сообщение #8


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

Группа: Свой
Сообщений: 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   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   Цитата(_Anatoliy @ Jan 11 2018, 13:52) Дл...   Jan 11 2018, 11:50
|- - ViKo   Цитата(dima32rus @ Jan 11 2018, 14:50) AD...   Jan 11 2018, 11:55
|- - 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


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

 


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


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