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

Правильный констрейн на асинхронную запись/чтение

Форумчане привет. 

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

1) Имею регистры шириной 32 бита.
2) В одном клоком домене я в него пишу
3) В другом клоковом домене я из него читаю

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

1) set_false_path? Если да, то тогда какой? только -to? -from я думаю нельзя, меня важно чтобы при чтении не было слаков.
2) или связку set_multicycle_path  setup/hold. Если да, не могли бы подкинуть пример как правильно в данной ситуации (очень много тактов между записью и чтением). Тут я пока особо путаюсь, перечитал уже кучу статей, не все с ним получается.

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

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


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

-from LaunchClk -through path_to_register/Q -to CaptureClk

Раз регистр малтибит, то лучше set_multycycle_path -setup 2 использовать, а не фалзпас - так мэппер сильнее зажат, и постарается все регистры рядом разместить. Если же без разницы, то можно и set_false_path использовать - саммый расслабленный вариант для синтезатора и мэппера.

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


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

Если есть уверенность в завтрашнем дне отсутствии проблем синхронизации, то я бы использовал set_max_delay - придётся написать количество времени задержки ( не относительно клоков, а просто в наносекундах) но вариант нравится больше. Ибо с мультисайклами я не подружился :smile:

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


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

30 minutes ago, Nick_K said:

Если есть уверенность в завтрашнем дне отсутствии проблем синхронизации,

уверенность полная. Я на старте передаю определенные значения, сохраняю. Потом в процессе работы их использую (через десятки минут). Передача значений просто идет по другому клоку.

30 minutes ago, Nick_K said:

Ибо с мультисайклами я не подружился

ой да. Однажды прописал setup, а hold не прописал. Вместо 40мин, ждал 9 часов Fitter. Читаю много по этой тематике, но вот до конца не въехал.

 

30 minutes ago, Nick_K said:

set_max_delay - придётся написать количество времени задержки

ни разу не использовал, сейчас почитаем, спасибо

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

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


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

1 hour ago, new123 said:

ой да. Однажды прописал setup, а hold не прописал. Вместо 40мин, ждал 9 часов Fitter. Читаю много по этой тематике, но вот до конца не въехал.

Это вполне обьяснимо. set_multycycle_path -setup сдвигает и сетап и холд вправо по оси времени на четное число тактов, а set_multycycle_path -hold сдвигает только холд, и только влево (т.е. в обратную сторону) по оси времени.

Поэтому констрейнт

set_multycycle_path -setup N

образует окно, где переходной процесс может начаться в момент времени (T-1)*N  (проверка холд, N- число тактов), и заканчивается в момент T*N (проверка сетап).

а связка

set_multycycle_path -setup N

set_multycycle_path -hold [N-1]

образует окно, где переходной процесс может начаться в момент времени 0 (проверка холд), и заканчивается в момент T*N (проверка сетап, N- число тактов).

В первом случае (set_multycycle_path -setup N без ключа -hold) фиттер должен сделать так, чтобы самый длинный путь был не больше T*N, а короткий не короче (T-1)*N - и вот здесь то фиттер и начал спотыкаться. Почему? В эсике тул просто бы навставлял буферов и элементов задержки, а в ПЛИС такой фозможности нет и фиттер разводит те ресурсы что есть. Отсюда и большой рантайм. В вашей задаче ключ -hold конечно надо использовать.

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


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

Just now, Aleх said:

и только влево (т.е. в обратную сторону) по оси времени.

вот оно что, я этого не знал. Спасибо

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


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

10 minutes ago, Aleх said:

Это вполне обьяснимо. set_multycycle_path -setup сдвигает и сетап и холд вправо по оси времени на четное число тактов, а set_multycycle_path -hold сдвигает только холд, и только влево (т.е. в обратную сторону) по оси времени.

Поэтому констрейнт

set_multycycle_path -setup N

образует окно, где переходной процесс может начаться в момент времени (T-1)*N  (проверка холд, N- число тактов), и заканчивается в момент T*N (проверка сетап).

а связка

set_multycycle_path -setup N

set_multycycle_path -hold [N-1]

образует окно, где переходной процесс может начаться в момент времени 0 (проверка холд), и заканчивается в момент T*N (проверка сетап, N- число тактов).

В первом случае (set_multycycle_path -setup N без ключа -hold) фиттер должен сделать так, чтобы самый длинный путь был не больше T*N, а короткий не короче (T-1)*N - и вот здесь то фиттер и начал спотыкаться. Почему? В эсике тул просто бы навставлял буферов и элементов задержки, а в ПЛИС такой фозможности нет и фиттер разводит те ресурсы что есть. Отсюда и большой рантайм. В вашей задаче ключ -hold конечно надо использовать.

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

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


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

У альтеры кстати более менее есть мануал, как засинхронить с быстрой на медленную и с медленной на быструю. И еще пару каких то научных работ. Но там никак не сказано, что надо hold влево отмерять. Кучу картинок интересных, но про лево ни сном, ни духом. Все пишут N-1

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

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


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

Я тоже долго путал, пока не обьяснили. Но если заглянуть в книжки, то там все наглядно написано. Не знаю как запостить сюда страницу, вот копипаста из Constraining Designs for Synthesis and Timing Analysis  (жирным выделено важное). Сорри за стену текста, можете сами эту книжку посмотреть

For the purpose of this section, we will assume that both the launching device and the capturing device are triggered by the same clock. The implication of different clock frequencies will be discussed in Sect. 12.4 . A clock waveform is depicted in Fig. 12.3 . Timing analysis will assume that the launching fl op will launch the data at edge A . For setup analysis, it will consider that the data will be captured at the edge B . So, setup relation is analyzed between edges A and B . Use of -setup switch causes the capturing edge for setup analysis to be moved further to the right – away from A to C , D, etc., depending upon the number of cycles specifi ed. Let us assume that the capturing edge for setup has been moved to edge D , through -setup switch. For the purpose of hold analysis, the timing analysis tool considers the immediately preceding edge at the capture fl op (when launch and capture clocks are the same). Thus, hold analysis will be considered using the edge C for capture. Use of -hold switch causes the capturing edge for hold analysis to be moved towards left, to either B or A – depending upon the number of cycles speci- fi ed. The general practice is to restore the hold check back to edge A . If the hold check is not brought back to edge A , there might be buffers inserted in the path to ensure some delay. These buffers will take up silicon area as well as power . We have assumed above, the setup edge was moved to 3 cycles (so that it reached edge D ). The hold edge automatically moved to edge C (the immediately preceding edge). Now, in order to bring it back, it has to be moved back by 2 cycles. This can be achieved through use of -hold switch. In order to move the hold check edge back to A , we have moved it by 2 cycles. It has now come back to the same edge as launch edge , i.e., at 0 th edge (with launch edge being considered Origin). It should be noted that we are now talking about two different numbers. A hold multiplier number 2 which specifi es the number of edges by which the hold edge needs to move towards left. This is the number that is speci- fi ed in the set_multicycle_path with -hold. And, another is number 0 , which speci- fi es the actual edge number, where the check is happening. These two numbers are often a source of confusion during conversation. When you are talking about hold edge – specially in the context of multi cycle path – make sure that all the people involved understand, whether the number being mentioned is the “hold multiplier ” the number by which the edge will move towards left, or the edge number, where the check will be performed. For the waveform shown in Fig. 12.3 (assuming setup number of 3), edge A corresponds to a hold multiplier number of 2 , edge B corre- sponds to a hold multiplier number of 1 , and edge C corresponds to a hold multiplier number of 0 , in the context of the set_multicycle_path defi nition. -setup switch specifi es the period to which (not “by which”) the setup capture edge will move to the right. Thus, a specifi cation of N means move to N th period. This is different from move by N cycles. The -hold switch on the other hand speci- fi es the period by which (not “to which”) the hold capture edge will move to the left. If setup edge was moved to N th edge, the hold edge is automatically moved to N–1 th edge. In order to restore it back to its original location, the hold check needs to be moved backwards by N–1 cycles, so that it goes back to “ 0 ” edge. Thus, -setup switch will move the capturing edge for setup. Simultaneously, it also moves the capturing edge for hold. After that, another set_multicycle_path might be needed with -hold switch to restore the hold check back to the original edges. Multi cycle path specifi cations are usually found in pairs of -setup and -hold . If the -hold specifi cation is not given, the hold edge remains where it had got moved due to setup edge movement.

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


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

В 10.01.2020 в 16:34, Nick_K сказал:

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

Ещё вот этот док (стр. 48) даёт очень внятное объяснение на тему мультициклов. Да и вообще в целом по STA. Рекомендую к изучению независимо от используемого синтезатора.

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


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

21 hours ago, dxp said:

Ещё вот этот док (стр. 48) даёт очень внятное объяснение на тему мультициклов

спасибо, такого у меня еще нет в коллекции

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


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

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

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

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

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

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

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

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

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

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