Iouri 0 6 февраля, 2007 Опубликовано 6 февраля, 2007 · Жалоба господа, есть два синхронных процесса которые работают от разных тактовых частот. Cигнал из первого процесса идет во второй (старт) и сигнал из второго идет в первый (финиш), тактовые частоты не кратные. хотелось бы узнать кто и как решает эту задачу чтобы соблюдать тайминг заранее благодарен Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 6 февраля, 2007 Опубликовано 6 февраля, 2007 · Жалоба есть два синхронных процесса которые работают от разных тактовых частот. 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] чтобы тайминг-аналайзер забыл о том, что меж доменов надо что-то проверять вообще. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Iouri 0 6 февраля, 2007 Опубликовано 6 февраля, 2007 · Жалоба уважаемый 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 0 7 февраля, 2007 Опубликовано 7 февраля, 2007 · Жалоба уважаемый 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" - но с появлением таймквеста от него лучше уйти Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kiss 0 7 февраля, 2007 Опубликовано 7 февраля, 2007 · Жалоба Имеет смысл ознакомиться с соответствующей литературой, где данные вопросы освещены достаточно полно, например "Real Chip Design and Verification Using Verilog and VHDL". Рекомендую топик "Flancter" (публикация была и у Xilinx - xcell37_54) - решение простое, и надежное (если представлять некоторые его ограничения и особенности). Я, кстати, был очень удивлен, что поиск по данному ключевому слову в конференции ничего не выдал. Более продвинутая публикация, например, "Fourteen Ways to Fool Your Synchronizer" - найти ее несложно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Gate 0 7 февраля, 2007 Опубликовано 7 февраля, 2007 · Жалоба Синтезаторы синплифай и прецизион не анализирует времянки между клоками, принадлежащих разным клоковым группам. Статьи по clock domain ищите на http://www.sunburst-design.com/papers/ например http://www.sunburst-design.com/papers/Cumm...SJ_AsyncClk.pdf Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 7 февраля, 2007 Опубликовано 7 февраля, 2007 · Жалоба Есть хорошая книжка - "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 - там рассказано, как обконстрейнить клоки, зависящие друг от друга, а также независимые) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SergeyX 0 7 февраля, 2007 Опубликовано 7 февраля, 2007 · Жалоба господа, есть два синхронных процесса которые работают от разных тактовых частот. Cигнал из первого процесса идет во второй (старт) и сигнал из второго идет в первый (финиш), тактовые частоты не кратные. хотелось бы узнать кто и как решает эту задачу чтобы соблюдать тайминг заранее благодарен как вариант вы можете использовать двухпортовую память...к тому же на этой основе вы можете выполнить дополнительно буферизацию передаваемых данных (конечно если это имеет смысл для проекта) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lehho 0 7 февраля, 2007 Опубликовано 7 февраля, 2007 · Жалоба Ещё небольшая статейка по этому вопросу. CummingsSNUG2001SJ_AsyncClk.pdf Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Iouri 0 7 февраля, 2007 Опубликовано 7 февраля, 2007 · Жалоба всем огромное спасибо сижу разбираюсь Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nsemenoff 0 13 февраля, 2007 Опубликовано 13 февраля, 2007 · Жалоба всем огромное спасибо сижу разбираюсь А не лучше сделать нормальный переход между доменами, чем обходить его в настройках Quartus'а, чтобы тот не ругался ? Вы же потом получите неустойчивые состояния у триггеров, глитчи и так далее. Лучше один раз сделайте одновибратор с сигналом запуска из другого клокового домена, и проверьте его на железе. Например, классический одновибратор: one = DFF( DFF(VCC, CLK1, !one, ), clk2, , ); -- дает пропуски сигнала из-за глитчей на сигнале асинхронного сброса Синхронные системы не всегда работают, если частоты CLK1 и CLK2 близки по значению... Поэтому систему нужно усложнять. И как это сделать наиболее просто и эффективно - вот интересная тема для обсуждения :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 13 февраля, 2007 Опубликовано 13 февраля, 2007 · Жалоба А не лучше сделать нормальный переход между доменами, чем обходить его в настройках Quartus'а, чтобы тот не ругался ? Никто и никогда не говорил, что не надо делать нормального перехода между доменами. НО (!) обходить его в настройках синтезатора надо обязательно, если, конечно, синтезатор сам по себе его не обойдет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ILYCHOFF 0 19 февраля, 2007 Опубликовано 19 февраля, 2007 · Жалоба Я использую для переноса сигнала с одной частоты на другую вот такой модуль, в принципе нормально работает Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
khach 41 19 февраля, 2007 Опубликовано 19 февраля, 2007 · Жалоба Я использую для переноса сигнала с одной частоты на другую вот такой модуль, в принципе нормально работает А как такой модуль на VHDL выглядит? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ILYCHOFF 0 19 февраля, 2007 Опубликовано 19 февраля, 2007 · Жалоба Я использую для переноса сигнала с одной частоты на другую вот такой модуль, в принципе нормально работает А как такой модуль на VHDL выглядит? я эту схему использую для синхронизации сигналов между модулями работающими на разных частотах, у меня сделан его схемный элемент, этот модуль у меня как связующее звено, я никогда не задавался целью его переписать на VHDL, но это не так сложно можно прямо схему структурно описать, идея там в принципе сразу видна , выделить фронт, защелкнуть полученный импульс, пронести через два триггера, и сбросить защелку, работает железно при переходе с большой частоты на малую, или с малой на большую Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться