Intekus 0 23 января, 2009 Опубликовано 23 января, 2009 · Жалоба Почитал руководство, посмотрел близкие темы (Quartus TimeQuest, кто-нибудь пользуется? , констрейны в Квартусе, как использовать?????, Quartus TimeQuest), точного ответа пока не нашёл. Я выполняю переход между тактовыми доменами, синхронизатором на 2 триггерах (схему изображение тоже видел, как работает понял, но пользуюсь обычными синхронизаторами, обрабатывая длительности импульсов самостоятельно). ВОПРОС как правильно "обконстрейнить" их в TimeQuest? Вариант0: задать false_path - вроде бы, логично. Вариант1: задать входную и выходную частоту в разных группах с параметром -asyncronous - проверено, тогда анализатор вообще не формирует междоменных путей на setup / hold - и, соответственно,, разводит как ему удобно. А как вообще выполняется анализ, если частоты "плохо кратные" - я пробовал 100 МГц и 100 МГц*18/11 - и выполнялась какая-то разводка без предупреждений, и строились временные диаграммы на setup и hold - но ведь всё это, по идее, плавает от такта к такту? Более того, между частотами брался ещё и некий фазовый сдвиг (setup / hold relationship, на диаграмме не относящаяся ко времени распространения ни одной из частот) - откуда они брались? А как он поступает при переходе к кратным частотам, например к половинной? В документации сказано, что по умолчанию все они считаются взаимосвязанными - а как это на самом деле? А каковы вообще фазовые сдвиги между частотами, если они берутся с одной и той же PLL? И изменяются ли они при каждом включении / выключении устройства? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 23 января, 2009 Опубликовано 23 января, 2009 · Жалоба вот кстати мой вариант для передачи стробов меж доменами. Данные - просто подрегистрить на задержку строба, если это надо. Выход completed - так, на всякий случай. Стробы обязаны быть на входе длиной в один период клока. На выходах тоже будут в один период. Какой клок быстрее - пофигу. Опробован уже и в асиках-кремнии, и на ФПГА, работает надежно. Что касается констрейнов - в разные клокогруппы их, в асинхронные, клоки эти, и забыть и забить. Если уж очень хочется обконстрейнить - то можно через set_max_delay внаглую от регистра-выхода одного клокодомена до входа другого. ЗЫ разные асинхронные клокогруппы и false_path это синонимы. Первое автоматически объявляет междоменные цепи false_path-ами, так что ваши варианты 0 и 1 это синонимы. module interck2 ( in, out, clka, clkb, reset, completed); input in, clka,clkb,reset; output out, completed; reg in_at_clka; reg [1:0] out_at_clkb; wire clra = reset | out_at_clkb[1]; always @(posedge clka or posedge clra) if (clra) in_at_clka <= 1'b0; else if (in) in_at_clka <= 1'b1; always @(posedge clkb or posedge reset) if (reset) out_at_clkb <= 2'b00; else out_at_clkb <= {out_at_clkb[0] & !out_at_clkb[1], in_at_clka}; assign out = out_at_clkb[1]; reg [1:0] cmpl_at_clka; reg cmpl_at_clkb; wire clrb = reset | cmpl_at_clka[1]; always @(posedge clkb or posedge clrb) if (clrb) cmpl_at_clkb <= 1'b0; else if (out_at_clkb[1]) cmpl_at_clkb <= 1'b1; always @(posedge clka or posedge reset) if (reset) cmpl_at_clka <= 2'h0; else cmpl_at_clka <= {cmpl_at_clka[0] & !cmpl_at_clka[1], cmpl_at_clkb}; assign completed = cmpl_at_clka[1]; endmodule Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Intekus 0 27 января, 2009 Опубликовано 27 января, 2009 · Жалоба Про эквивалентность вариантов - спасибо, понял; предпочту указание как асинхронных, наверное - чтоб не возиться с каждым путём. Вопрос про выход completed Вашей схемы - это, фактически, выход, задержанный на ещё один такт b и 2 такта a - где и как удобно его использовать? А обычные синхронизаторы из 2 триггеров домена-приёмника - что можете сказать об опыте их использования? И остались теоретические вопросы про PLL - каков взаимный сдвиг снимаемых с неё кратных частот, меняется ли он для устройства от включения к включению? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 27 января, 2009 Опубликовано 27 января, 2009 · Жалоба Вопрос про выход completed Вашей схемы - это, фактически, выход, задержанный на ещё один такт b и 2 такта a - где и как удобно его использовать? completed - это строб out, пропущенный обратно из домена clkb в clka точно также, как и in пробрасывался на out. Импульс на completed, синхронный с clka, говорит о том, что импульс прошел с in на out. По нему например можно подавать следующее данное... А обычные синхронизаторы из 2 триггеров домена-приёмника - что можете сказать об опыте их использования? Ну работают, вполне надежно работают. Только вопрос цели и задачи. Если просто пропустить сигнал с одного домена в другой, убив метастабильность - то это оно. А если нужен обмен с подтверждением, и при этом нет гарантий, что один клок быстрее второго, и клоки могут отличаться на порядки, например 32 кГц и 150 МГц, то это другое. И остались теоретические вопросы про PLL - каков взаимный сдвиг снимаемых с неё кратных частот, меняется ли он для устройства от включения к включению? Ну это доки читайте, часто это программируется параметрами PLL. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Intekus 0 3 февраля, 2009 Опубликовано 3 февраля, 2009 · Жалоба Спасибо, по вопросам всё стало ясно, про PLL, когда возникнет задача, почитаю доки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ilyge 0 11 февраля, 2009 Опубликовано 11 февраля, 2009 · Жалоба Советую прочитать классику, начиная со стр. 874 :) Проектирование цифровых устройств, Дк. Ф. Уэйкерли. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Builder 0 12 февраля, 2017 Опубликовано 12 февраля, 2017 · Жалоба вот кстати мой вариант для передачи стробов меж доменами. Данные - просто подрегистрить на задержку строба, если это надо. Выход completed - так, на всякий случай. Стробы обязаны быть на входе длиной в один период клока. На выходах тоже будут в один период. Какой клок быстрее - пофигу. Опробован уже и в асиках-кремнии, и на ФПГА, работает надежно. Что касается констрейнов - в разные клокогруппы их, в асинхронные, клоки эти, и забыть и забить. Если уж очень хочется обконстрейнить - то можно через set_max_delay внаглую от регистра-выхода одного клокодомена до входа другого. ЗЫ разные асинхронные клокогруппы и false_path это синонимы. Первое автоматически объявляет междоменные цепи false_path-ами, так что ваши варианты 0 и 1 это синонимы. module interck2 ( in, out, clka, clkb, reset, completed); input in, clka,clkb,reset; output out, completed; reg in_at_clka; reg [1:0] out_at_clkb; wire clra = reset | out_at_clkb[1]; always @(posedge clka or posedge clra) if (clra) in_at_clka <= 1'b0; else if (in) in_at_clka <= 1'b1; always @(posedge clkb or posedge reset) if (reset) out_at_clkb <= 2'b00; else out_at_clkb <= {out_at_clkb[0] & !out_at_clkb[1], in_at_clka}; assign out = out_at_clkb[1]; reg [1:0] cmpl_at_clka; reg cmpl_at_clkb; wire clrb = reset | cmpl_at_clka[1]; always @(posedge clkb or posedge clrb) if (clrb) cmpl_at_clkb <= 1'b0; else if (out_at_clkb[1]) cmpl_at_clkb <= 1'b1; always @(posedge clka or posedge reset) if (reset) cmpl_at_clka <= 2'h0; else cmpl_at_clka <= {cmpl_at_clka[0] & !cmpl_at_clka[1], cmpl_at_clkb}; assign completed = cmpl_at_clka[1]; endmodule Тема старая, так получилось, случайно нарвался, копаясь в архивах по теме. Не совсем понял, по модулю SM: почему при пере-синхронизации в новый домен сигнал до анализа пропускается только один триггер, а не как обычно по классике в перессинхронизаторах - через два, и сделано в модуле из сообщения #15 ? По идее строка "reg [1:0] out_at_clkb;", должны быть "reg [2:0] out_at_clkb;" где первые два триггера просто пропускают сигнал и только перед третьим ставим логику. Разве так можно, с одним чистым триггером? Считаем что простейшая логика с сигналом от своего триггера работает так-же как и чистый триггер? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dvladim 0 15 февраля, 2017 Опубликовано 15 февраля, 2017 · Жалоба Почему? Предположу что один 2И особой роли не сыграет. В принципе так и есть: не знаю как у Xilinx, а у Altera два рядом стоящих триггера трассируются через локальные ресурсы и LUT. А луту все равно какую функцию выполнять - буфер или 2И. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Builder 0 15 февраля, 2017 Опубликовано 15 февраля, 2017 · Жалоба Почему? Предположу что один 2И особой роли не сыграет. В принципе так и есть: не знаю как у Xilinx, а у Altera два рядом стоящих триггера трассируются через локальные ресурсы и LUT. А луту все равно какую функцию выполнять - буфер или 2И. Вы не знаете, будут они рядом стоящие, или не рядом. Только если обконстренить, что хлопотно очень. Если встречали в рекомендации по метастабильности такой вариант - покажите где. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 15 февраля, 2017 Опубликовано 15 февраля, 2017 · Жалоба надо всего 2 триггера. Первый может зашелкнуть устойчивое или неустойчивое состояние, которое практически наверняка к следующему клоку свалиться в устойчивое. Даже если так произойдет что не свалиться, то второй триггер на свое усмотрение это состояние как-то интерпретирует либо нулем либо единицей. Вероятность что он тоже повиснет ничтожна. Вся следующая схема будет работать от однозначно определившегося триггера. Если бы был один начальный триггер, то в неустойчивых состояниях часть схемы могла считать его 1, а другая часть 0, и все бы развалилось, добавление второго триггера решает эту неоднозначность и поставляет всей схеме принятое вторым триггером решение. Так что для пересинхрона надо всего 2 триггера, выход второго триггера используется в схеме и считается наверняка достоверным. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x736C 0 15 февраля, 2017 Опубликовано 15 февраля, 2017 · Жалоба Так что для пересинхрона надо всего 2 триггера, выход второго триггера используется в схеме и считается наверняка достоверным. Это все же зависит от частотности и тиражности. В большинстве случаев 2, действительно, достаточно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 16 февраля, 2017 Опубликовано 16 февраля, 2017 · Жалоба Имеете ввиду что все же вероятность провала остается и чем чаще мы ее испытываем тем больше шансов все же ее поймать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sonycman 0 16 февраля, 2017 Опубликовано 16 февраля, 2017 · Жалоба Насколько я понял - шанс получить метастабильность на выходе синхронизатора есть всегда, даже если он состоит из большего, чем два, количества триггеров. И чем больше частота схемы - тем больше этот шанс. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 16 февраля, 2017 Опубликовано 16 февраля, 2017 · Жалоба Насколько я понял - шанс получить метастабильность на выходе синхронизатора есть всегда, даже если он состоит из большего, чем два, количества триггеров. И чем больше частота схемы - тем больше этот шанс. Да, вероятность этого события не равна нулю. Но при двух и более синхронизаторов эта вероятность очень близка к нулю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 16 февраля, 2017 Опубликовано 16 февраля, 2017 · Жалоба С частотой понятно, я больше интересуют участием "тиражности" и тем правильно ли я понял смысл слова:)? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться