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

переход из одного клокового домайна в друго

господа,

 

есть два синхронных процесса которые работают от разных тактовых частот. Cигнал из первого процесса идет во второй (старт) и сигнал из второго идет в первый (финиш), тактовые частоты не кратные.

 

хотелось бы узнать кто и как решает эту задачу чтобы соблюдать тайминг

 

заранее благодарен

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


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

есть два синхронных процесса которые работают от разных тактовых частот. Cигнал из первого процесса идет во второй (старт) и сигнал из второго идет в первый (финиш), тактовые частоты не кратные.

 

хотелось бы узнать кто и как решает эту задачу чтобы соблюдать тайминг

 

Оба сигнала пропустить через линию задержки из хотя бы двух триггеров, работающих от того клокового домена, в котором они будут чем-то управлять, чтобы метастабильность не пакостила, и констрейны объявить (в виде синопсис SDC, их же понимает квартусовский TimeQuest)

 

set_false_path -from [get_clocks clock_A] -to [get_clocks clock_B]

set_false_path -from [get_clocks clock_B] -to [get_clocks clock_A]

 

чтобы тайминг-аналайзер забыл о том, что меж доменов надо что-то проверять вообще.

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


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

уважаемый SM

 

раскажите по подробнее как это обявить

констрейны объявить (в виде синопсис SDC, их же понимает квартусовский TimeQuest)

 

set_false_path -from [get_clocks clock_A] -to [get_clocks clock_B]

set_false_path -from [get_clocks clock_B] -to [get_clocks clock_A]

в квартусе (использую 6.1)

 

спасибо

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


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

уважаемый SM

 

раскажите по подробнее как это обявить

констрейны объявить (в виде синопсис SDC, их же понимает квартусовский TimeQuest)

 

set_false_path -from [get_clocks clock_A] -to [get_clocks clock_B]

set_false_path -from [get_clocks clock_B] -to [get_clocks clock_A]

в квартусе (использую 6.1)

 

В опциях включить TimeQuest (в settings->compilation process settings->timing analysis processing) , тогда из Ваших старых квартусных констрейнов после перекомпиляции оно сгенерит .sdc файл, с новыми, стандартными констрейнами. Дальше файл править текстовым редактором - там теперь все констрейны будут. В констрейнах "по-старинке" это было тоже реализуемо, кажется называлось

"cut timing path" - но с появлением таймквеста от него лучше уйти

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


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

Имеет смысл ознакомиться с соответствующей литературой, где данные вопросы освещены достаточно полно, например "Real Chip Design and Verification Using Verilog and VHDL". Рекомендую топик "Flancter" (публикация была и у Xilinx - xcell37_54) - решение простое, и надежное (если представлять некоторые его ограничения и особенности). Я, кстати, был очень удивлен, что поиск по данному ключевому слову в конференции ничего не выдал.

 

Более продвинутая публикация, например, "Fourteen Ways to Fool Your Synchronizer" - найти ее несложно.

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


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

Синтезаторы синплифай и прецизион не анализирует времянки между клоками, принадлежащих разным клоковым группам.

Статьи по clock domain ищите на http://www.sunburst-design.com/papers/ например http://www.sunburst-design.com/papers/Cumm...SJ_AsyncClk.pdf

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


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

Есть хорошая книжка - "Advanced ASIC chip synthesis using synopsys design compiler, physical compiler and primetime" - она есть и в электронном виде, по крайней мере в осле. Там очень хорошо описано, как констрейнить многоклоковые дизайны, и это все применимо в квартусе с версии 6.0.

 

И, самое главное, это собственно альтерские описания:

 

http://www.altera.com/literature/hb/qts/ug_tq_tutorial.pdf

http://www.altera.com/literature/hb/qts/qts_qii53018.pdf (раздел Clock Specification - там рассказано, как обконстрейнить клоки, зависящие друг от друга, а также независимые)

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


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

господа,

 

есть два синхронных процесса которые работают от разных тактовых частот. Cигнал из первого процесса идет во второй (старт) и сигнал из второго идет в первый (финиш), тактовые частоты не кратные.

 

хотелось бы узнать кто и как решает эту задачу чтобы соблюдать тайминг

 

заранее благодарен

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

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


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

всем огромное спасибо сижу разбираюсь

 

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

 

Например, классический одновибратор:

one = DFF( DFF(VCC, CLK1, !one, ), clk2, , ); -- дает пропуски сигнала из-за глитчей на сигнале асинхронного сброса

 

Синхронные системы не всегда работают, если частоты CLK1 и CLK2 близки по значению...

 

Поэтому систему нужно усложнять. И как это сделать наиболее просто и эффективно - вот интересная тема для обсуждения :)

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


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

А не лучше сделать нормальный переход между доменами, чем обходить его в настройках Quartus'а, чтобы тот не ругался ?

 

Никто и никогда не говорил, что не надо делать нормального перехода между доменами. НО (!) обходить его в настройках синтезатора надо обязательно, если, конечно, синтезатор сам по себе его не обойдет.

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


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

Я использую для переноса сигнала с одной частоты на другую вот такой модуль, в принципе нормально работаетpost-6536-1171889059_thumb.jpg

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


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

Я использую для переноса сигнала с одной частоты на другую вот такой модуль, в принципе нормально работаетpost-6536-1171889059_thumb.jpg

А как такой модуль на VHDL выглядит?

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


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

Я использую для переноса сигнала с одной частоты на другую вот такой модуль, в принципе нормально работаетpost-6536-1171889059_thumb.jpg

А как такой модуль на VHDL выглядит?

 

я эту схему использую для синхронизации сигналов между модулями работающими на разных частотах, у меня сделан его схемный элемент, этот модуль у меня как связующее звено, я никогда не задавался целью его переписать на VHDL, но это не так сложно можно прямо схему структурно описать, идея там в принципе сразу видна , выделить фронт, защелкнуть полученный импульс, пронести через два триггера, и сбросить защелку, работает железно при переходе с большой частоты на малую, или с малой на большую

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


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

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

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

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

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

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

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

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

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

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