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

TimeQuest, кто ж тебя выдумал?

А если взять другую версию Квартуса?

Я весь проект, фактически, показал. В нем два файла: .sv и .sdc. Каждый может испытать на своем Квартусе.

Вот картину из RTL Viewer показываю, чтобы интереснее было.

post-10362-1515484248_thumb.jpg

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


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

На клоковый вход блока DataOut подан не клок! А некий меандр с выхода мультиплексора.

Как-то так.

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


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

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_in -period "100 MHz" [get_ports ClkIn]

create_clock -name clk_virt -period "100 MHz"

# create_generated_clock -name clk_div ClkDiv -divide_by 2 -source ClkIn
create_generated_clock -name clk_div -divide_by 2 -source [get_ports ClkIn] \
    [get_registers ClkDiv]

set_clock_groups -exclusive -group {clk_in} -group {clk_div}

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_input_delay -clock clk_virt -min 0.0 [all_inputs]
# max -> iExt
set_input_delay -clock clk_virt -max 0.4 [all_inputs]

set_output_delay -clock clk_virt -min 0.0 ClkOut
# max -> -oExt
set_output_delay -clock clk_virt -max 0.8 ClkOut

set_output_delay -clock clk_virt -min 0.0 DataOut
set_output_delay -clock clk_virt -max 1.2 DataOut

# set_output_delay -clock clk_virt -min 0.0 [all_outputs]
# set_output_delay -clock clk_virt -max 1.0 [all_outputs]

set_min_delay -from ClkIn -to ClkOut 0.6
set_max_delay -from ClkIn -to ClkOut 8.0
set_min_delay -from ClkSel -to ClkOut 1.0
set_max_delay -from ClkSel -to ClkOut 8.0

С таким файлом укладывается. Такие дробные и разные числа задал только для того, чтобы легче находились на графиках.

Нужно запомнить, увеличение set_input_delay уменьшает резервы времени внутри ПЛИС (к Launch clock добавляется iExt). Аналогично, увеличение set_output_delay тоже уменьшает резервы внутри ПЛИС (от Latch clock отнимается время oExt).

В-общем, за ~7нс сигналы добираются с одного края ПЛИС на другой.

 

На клоковый вход блока DataOut подан не клок! А некий меандр с выхода мультиплексора.

Как-то так.

Вам на третью страницу: https://www.altera.com/en_US/pdfs/literatur...st_cookbook.pdf

и на седьмую.

Картину из первого сообщения комментировать не смогу. Будем считать, неправильно задал некие ограничения.

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


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

Я как понял ваших данных работает на частоте clk_div и защелкивает данные DataOut.

У меня вопрос. А зачем Вам виртуальный клок, если у Вас есть клок относительно которого вы задаете констрейны для данных ?

 

 

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


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

Я как понял ваших данных работает на частоте clk_div и защелкивает данные DataOut.

У меня вопрос. А зачем Вам виртуальный клок, если у Вас есть клок относительно которого вы задаете констрейны для данных ?

А я же цитату привел, и цифрами подкрепил.

Я еще и такт наружу вывел.

В самом проекте не ищите смысла. Только в ограничениях для него.

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


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

А я же цитату привел, и цифрами подкрепил.

Я еще и такт наружу вывел.

В самом проекте не ищите смысла. Только в ограничениях для него.

Я просто прочитал то, на что Вы указали, и нигде не увидел того, что нужно констрейнить относительно виртуального клока.

Также сейчас перед глазами пример из "TimeQuest для чайников" - вывод пилы на синхронный параллельный ЦАП. Там так же нет никаких виртуальных клоков.

Вот я и пытаюсь понять где я перестал понимать :biggrin:

Изменено пользователем Flip-fl0p

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


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

Я просто прочитал то, на что Вы указали, и нигде не увидел того, что нужно констрейнить относительно виртуального клока.

Также сейчас перед глазами пример из "TimeQuest для чайников" - вывод пилы на синхронный параллельный ЦАП. Там так же нет никаких виртуальных клоков.

Вот я и пытаюсь понять где я перестал понимать :biggrin:

Выше. Сообщение 14. Документ все тот же - Cookbook. Там правильные примеры.

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

Разница, как видите, небольшая, около 20 ps. Можно забить.

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


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

Вам на третью страницу: https://www.altera.com/en_US/pdfs/literatur...st_cookbook.pdf

и на седьмую.

Никогда не порождал клоки таким образом и не планирую!

Если так породить сигнал и потом объявить его клоком - не везде получится такой клок использовать и не представляю как его можно завести на клоковое дерево ПЛИС.

Тоесть с точки зрения описания констрейнтов все корректно, но чтобы выход регистра использовать как клок для другого регистра - бррррр...

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


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

Никогда не порождал клоки таким образом и не планирую!

Если так породить сигнал и потом объявить его клоком - не везде получится такой клок использовать и не представляю как его можно завести на клоковое дерево ПЛИС.

Тоесть с точки зрения описания констрейнтов все корректно, но чтобы выход регистра использовать как клок для другого регистра - бррррр...

Не зарекайтесь!

Сам заведется. Но можно и помочь, если химер боитесь.

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


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

Никогда не порождал клоки таким образом и не планирую!
не так страшен чёрт, как его малютка.

Если так породить сигнал и потом объявить его клоком - не везде получится такой клок использовать и не представляю как его можно завести на клоковое дерево ПЛИС.
Инстанцировать глобальный буфер.

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


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

Меня вот один вопрос мучает. А как Timequest понимает, что виртуальный клок - это клок, который мы выдаем с порта ПЛИС ?

 

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


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

Меня вот один вопрос мучает. А как Timequest понимает, что виртуальный клок - это клок, который мы выдаем с порта ПЛИС ?

Мы не выдаем виртуальный такт с порта или на порт. Он существует за пределами ПЛИС (виртуально). На порт или из порта идет реальный тактовый сигнал. А временные сдвиги между ними определяются по описанию create_clock, и далее по задержкам.

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


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

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

 

set_input_delay задает задержку сигнала относительно виртуального такта,

совпадающего с реальным тактом на входе в ПЛИС. Для внешнего устройства это

будет launch такт. Положительная величина означает, сигнал приходит после такта.

 

set_output_delay задает задержку сигнала относительно виртуального такта,

совпадающего с реальным тактом на входе в ПЛИС. Для внешнего устройства это

будет latch такт. Положительная величина означает, сигнал выходит до такта.

 

Вот, картинкой подкреплю. Соответствует рисункам 13 и 12 из Cookbook. Слева - для выхода, справа - для входа.

post-10362-1515591102_thumb.jpg

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


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

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

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

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

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

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

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

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

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

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