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

TimeQuest - CPU - MAXII - SPI intterface

Всем привет и доброго здравия.

Подскажите как обканстрейнить такую схему (attach), чтобы учитывались в MAXII

Заранее всем спасибо.

 

Untitled.png

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


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

Предлагаю взять за основу документ https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/manual/mnl_timequest_cookbook.pdf

Глава IO Constraints

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


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

21 hours ago, pavlovconst said:

Предлагаю взять за основу документ https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/manual/mnl_timequest_cookbook.pdf

Глава IO Constraints

т.е. получается надо описать как бы "наоборт" - для CP input это MO, а output MI. Соответственно для memory input это PI, а output PO. Так получается ?

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


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

@OLD_SHURiK Не понятно... Пожалуйста, пишите подробнее, тогда будет о чем говорить.

Исходя из схемы я ДОГАДЫВАЮСЬ, что вы хотите пробросить сигналы через MAX, не защелкивая их в ПЛИС. Если да, то зачем вам констрейны? Задержки распространения от этого не уменьшатся, не увеличатся. Если, конечно, МАХ не забит под завязку другой логикой, не показанной на схеме. Будьте готовы снижать частоту SPI, чтобы учесть задержки распространения сигналов.

Изменено пользователем pavlovconst

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


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

10 минут назад, pavlovconst сказал:

Исходя из схемы я ДОГАДЫВАЮСЬ, что вы хотите пробросить сигналы через MAX, не защелкивая их в ПЛИС. Если да, то зачем вам констрейны? Задержки распространения от этого не уменьшатся, не увеличатся. Будьте готовы снижать частоту SPI, чтобы учесть задержки распространения сигналов.

Так для начала надо написать, что за CPU. Но и так понятно, что вряд ли SPI и Память будет работать на частоте выше единиц - десятков Мгц. И не более. И это не частоты для ПЛИС, а скажем так "медленно изменяющиеся сигналы", поскольку внутри ПЛИС частоты могут быть в сотни Мгц. И тем более, что и данные и клоки идут через ПЛИС. Так что если их ПЛИС и задержит, то не настолько, чтобы "Память" это заметила.  

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


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

44 minutes ago, iosifk said:

Так для начала надо написать, что за CPU. Но и так понятно, что вряд ли SPI и Память будет работать на частоте выше единиц - десятков Мгц. И не более. И это не частоты для ПЛИС, а скажем так "медленно изменяющиеся сигналы", поскольку внутри ПЛИС частоты могут быть в сотни Мгц. И тем более, что и данные и клоки идут через ПЛИС. Так что если их ПЛИС и задержит, то не настолько, чтобы "Память" это заметила.  

да это spi шина. я хочу посчитать весь путь туда и обратно с учётом задержек распространения сигналов в MAX. 

На эту память будут работать два процессора. Так сказать некий мост. Да можно взять и посчитать ручками. Но зачем тогда TimeQuest?

Или он не умеет такое считать ? Или это должен будет считать трассировщик ?

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


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

On 4/18/2020 at 10:42 PM, OLD_SHURiK said:

да это spi шина. я хочу посчитать весь путь туда и обратно с учётом задержек распространения сигналов в MAX. 

Вам это зачем? если вам нужна цифра то по нетлисту запускаете команду детализации пути, если вам нужна задержка пути не больше максимальной, то задаете ее. Какую роль TQ и Quartus вы видите в вашей задаче? 

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


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

1 hour ago, des00 said:

Вам это зачем? если вам нужна цифра то по нетлисту запускаете команду детализации пути, если вам нужна задержка пути не больше максимальной, то задаете ее. Какую роль TQ и Quartus вы видите в вашей задаче? 

раньше всё по нетлисту и делали. Но зачем то появился TimeQuest. И задание задержек это тот же TimeQuest. По тому, что это его назначение считать все задержки распространения сигнала, не только клоки. И как говорится - если TimeQuest не выдаёт ошибок, то значит Вы не всё описали. Он же основан на базе Synopsys Design Constraints (SDC) который позволяет считать констрайны не только для случаев когда clock в FPGA - это частный случай. Поэтому и задан вопрос.

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


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

23 minutes ago, OLD_SHURiK said:

раньше всё по нетлисту и делали. Но зачем то появился TimeQuest

Это произошло совсем недавно, в 7-ой версии квартуса :mosking:

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


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

7 hours ago, OLD_SHURiK said:

раньше всё по нетлисту и делали. Но зачем то появился TimeQuest. И задание задержек это тот же TimeQuest. По тому, что это его назначение считать все задержки распространения сигнала, не только клоки. И как говорится - если TimeQuest не выдаёт ошибок, то значит Вы не всё описали. Он же основан на базе Synopsys Design Constraints (SDC) который позволяет считать констрайны не только для случаев когда clock в FPGA - это частный случай. Поэтому и задан вопрос.

эммм, TQ появился как ответ на все возрастающую сложность, появление многочастотных и высокочастотных проектов. Когда классический анализ не тянул. Что классический анализатор, что TQ, все работают по нетлисту. просто логи у них выдаются по разному.

Если я вас правильно понял, вы хотите что бы после сборки, TQ вам написал: задержка по этому пути, в случае Worst Case будет х.х нс? что бы сделать это, надо запустить скриптом или в TQ приложении команду анализа конкретного пути. Также как и натыкать кнопки в классическом анализаторе. Или вы хотите так: собрать проект, что бы "задержка здесь была не более х.х нс", а TQ после сборки сказал вам "Все хорошо, я уложился, задержка НЕ БОЛЕЕ х.х нс". Т.е. она может быть любой в диапазоне 0...х.х нс, но не больше. 

Или вам нужно просто посчитать бюджет задержки для выбора частоты SPI? Ну так один раз посчитали, взяли запасы по 1-2нс и этого достаточно. 

Какой конкретно вариант вас интересует? 

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


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

3 hours ago, des00 said:

Или вам нужно просто посчитать бюджет задержки для выбора частоты SPI? Ну так один раз посчитали, взяли запасы по 1-2нс и этого достаточно. 

Какой конкретно вариант вас интересует? 

вот этот.

Я понимаю что можно всё сделать ручками. Да , понимаю что проект не сложный. И используя Set_Maximum_Delay добился некоторых удовлетворяющих меня цифр. Но это должен считать и TimeQuest, это его работа. Задача описать ему клоки и задержки.

Я описывал приём как rising , передачу как falling , но он упорно считает весь такт , а не половину relationship = period а не period/2.

И хотелось бы заставить его это делать. На эту память могут работать несколько процессоров.

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


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

40 minutes ago, OLD_SHURiK said:

Я понимаю что можно всё сделать ручками. Да , понимаю что проект не сложный. И используя Set_Maximum_Delay добился некоторых удовлетворяющих меня цифр. Но это должен считать и TimeQuest, это его работа. Задача описать ему клоки и задержки.

дык именно TQ это и считает и используя Timing Driven Synthesis применяет. Логи посмотрите, временной анализ вызывается 2-3 раза за время сборки. Вы задали ограничения, их применили. Как получилось так получилось. Или вы как то по другому себе представляли эту серебряную пулю? 

Про другое, проект выложите, можно часть, тогда можно будет что-то сказать определенное)

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


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

Ещё раз всем привет и доброго здравия .

Главное здесь было задать как формируются клоки.

Схема немного изменена (сигналы как в проекте) 

Параметры заданы для частоты 20MHz.

579102968__2.thumb.jpg.cbe1d5dfc317575569de01465e3840b1.jpg

это кусочек *.SDC

Spoiler

#**************************************************************
# Time Information
#**************************************************************

set_time_format -unit ns -decimal_places 3

#**************************************************************
# Create Clock
#**************************************************************

create_clock -name {clock} -period 40.000 -waveform { 0.000 20.000 } [get_ports {clock}]
create_clock -name {cp1_sck} -period 50.000 -waveform { 0.000 25.000 } [get_ports {cp1_sck}]


#**************************************************************
# Create Generated Clock
#**************************************************************

create_generated_clock -name {m_sck_out} -source [get_ports {cp1_sck}] -master_clock {cp1_sck} -invert [get_ports {m_sck}] -add
create_generated_clock -name {m_sck_in} -source [get_ports {cp1_sck}] -master_clock {cp1_sck} [get_ports {m_sck}] -add
create_generated_clock -name {cp1_sck_in} -source [get_ports {cp1_sck}] -master_clock {cp1_sck} 
create_generated_clock -name {cp1_sck_out} -source [get_ports {cp1_sck}] -master_clock {cp1_sck} -invert 


#**************************************************************
# Set Clock Latency
#**************************************************************

#**************************************************************
# Set Clock Uncertainty
#**************************************************************

#**************************************************************
# Set Input Delay
#**************************************************************

set_input_delay -add_delay -max -clock [get_clocks {m_sck_out}]  25.000 [get_ports {cp1_mosi}]
set_input_delay -add_delay -min -clock [get_clocks {m_sck_out}]  0.000 [get_ports {cp1_mosi}]
set_input_delay -add_delay -max -clock [get_clocks {cp1_sck_out}]  2.500 [get_ports {m_miso}]
set_input_delay -add_delay -min -clock [get_clocks {cp1_sck_out}]  0.000 [get_ports {m_miso}]


#**************************************************************
# Set Output Delay
#**************************************************************

set_output_delay -add_delay  -clock [get_clocks {m_sck_in}]  10.000 [get_ports {cp1_miso}]
set_output_delay -add_delay -max -clock [get_clocks {cp1_sck_in}]  16.100 [get_ports {m_mosi}]
set_output_delay -add_delay -min -clock [get_clocks {cp1_sck_in}]  0.000 [get_ports {m_mosi}]


#**************************************************************
# Set Clock Groups
#**************************************************************

set_clock_groups -exclusive -group [get_clocks {clock}] -group [get_clocks {cp1_sck cp1_sck_in cp1_sck_out m_sck_in m_sck_out}] 
 

это две таблички из TimeQuesta

и как бы всё ПОЛУЧИЛОСЬ!

Всем спасибо за советы !!

TimeQuest!.jpg

TimeQuest!!.jpg

Изменено пользователем OLD_SHURiK

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


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

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

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

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

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

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

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

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

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

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