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

Влияние асинхронного сброса на Fmax

2. использование Синхронного ресета забирает чуть больше ресурсов на формирование входного значения для регистра, вместо дерганья спец входа элемента, но дает схему "для ленивых", поведение которой более предсказуемо и устойчиво.

У Xilinx-а синхронные сброс тоже является спец-входом, так что от его использования ничего не теряется. ;)

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

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


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

Подведу итоги, с вашего позволения.

Если рассматривать задачу именно для ПЛИС, причем достаточно современной с большими ресурсами:

1. использование Асинхронного ресета позволяет сбрасывать состояние регистров без наличия тактового сигнала, платим за это чуть большим вниманием по архитектуре автомата, чтобы учесть все неприятности связанные с появлением сигнала в любой момент.

2. использование Синхронного ресета забирает чуть больше ресурсов на формирование входного значения для регистра, вместо дерганья спец входа элемента, но дает схему "для ленивых", поведение которой более предсказуемо и устойчиво.

 

При этом оба метода не оказывают существенного влияния на частоту работы схемы. Отсюда я делаю выводы что выскочкам(современным) программистам предпочтительнее использовать синхронные ресеты везде, до тех пор пока не понадобятся специальные свойства асинхронных ресетов. Поскольку цена ресурсов ПЛИС сильно ниже цены ошибки.

 

При создании схем для изготовления кристаллов аргументация и подходы другие.

1) ничего не платим. Просто правильно подаём внешний сигнал на FF.RN (см ответ ViKo)

2) единократная подача (в начале) синхронного сброса (тоже что подача 0 на вход FF.D) ничего вообще не даёт, кроме понижения максимальной частоты (сложнее комбинаторика перед тригером).

И к тому-же, как ни крути, синхронный сброс всё равно надо делать с внешнего асинхронного сигнала (как минимум это один модуль для формирования общего синхронного сброса).

3) предпочтительнее не парится о ресете вообще . При синтезе все тригеры можно подключить к глобальному ресету (с оговоркой п.1)).

4) для ASIC всё то-же самое.

 

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


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

откуда такие данные что более а что менее вероятно? Насколько я знаю - это равноодинаково.

 

Из информации, которая под NDA от SMIC. Грубо, практически никогда подача "полууровня" с триггера с одного края кристалла на триггер на другом краю того же кристалла не вгоняет его в метастабильность. Вгоняет, если в это время идет выход из метастабильности, и уровень находится в той самой "точке Х" принимающего триггера, которая не такая, как у генерирующего - градиент техпроцесса, свои шумы на питании, и т.п.

 

-----

Итак...

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

Мы установили, что:

1) подача 0.5 уровня на вход или изменение данных во время клока равновероятно устанавливает тригер в метастабильное состояние.

2) мы поняли, что комбинаторика на выходе метастабильного тригера скорее увеличивает время метастабильности.

3) мы предположили, что следующий фронт клока выводит тригер с метастабильного состояния за время ~0.5 clk-to-out.

При этом, за счёт HOLD time delay метастабильное состояние гарантировано удерживается на входе следующего тригера в момент прихода фронта клока и как следствие имеем ситуацию п.1).

 

Выводы отсюда такие:

а) в общем случае, блоки имеют комбинаторику на выходе. Согласно п.2) время пребывания такого блока в метастабильном состоянии увеличивается.

б) Если метастабильное состояние сохранится до следующего фронта клока (а согласно п.а) этому способствует схема), то согласно п.1) и 3) Х может попасть в следующий тригер и .т.д (Х побежит по схеме)

в) предложенное решение (" кодировки состояний, модуль, попавший в метастабильность, либо переходит в следующее правильное состояние либо остаётся в ресете") не только не способствует подавлению метастабильности, а наоборот (за счёт комбинаторики) способствует её распространению.

 

Правильно?

 

1) неверно. Подача 0.5 уровня менее вероятно введет триггер в метастабильность, нежели динамический процесс. В том числе и на этом основана работа синхронизатора, где каждый следующий FF в цепочке снижает вероятность прохождения метастабильности.

2) тоже неверно. Логика влияет на время (продолжительность) метастабильности только в плане его УМЕНЬШЕНИЯ за счет коэффициента усиления, никаких средств для увеличения продолжительности метастабильности в логике нет физически. однако вводит общую задержку распространения сигнала, и в каждом конкретном случае надо рассматривать эти влияния вместе - что кого перевесит.

 

Ну и выводы отсюда неверные. Если, допустим, вероятность на первом триггере получить метастабильность раз в 15 часов, то вероятность того, что она пройдет через второй - допустим уже раз в 10^12 лет, чего для большинства применений более, чем достаточно.

 

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

 

У Xilinx-а синхронные сброс тоже является спец-входом, так что от его использования ничего не теряется. ;)

Зато теряется, если синтезатор мог бы применить этот вход для других целей - обнуления триггера от других источников, кроме резета. Таким образом синтезатору понадобится или на логике мешать эти сигналы, или второй вариант обнуления делать в цепи входа D

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


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

У Xilinx-а синхронные сброс тоже является спец-входом, так что от его использования ничего не теряется. ;)

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

 

вот тут кстати есть интересный момент, даже серия

 

1. Правильно ли я понимаю что если модуль имеет вход асинхронного ресета, но на вход идет сигнал с внутренней логики типа

always @(posedge clk)
  reset <= 1;

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

 

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

 

 

Подход для создания АСИКов не может быть таким же, очень разные приоритеты.

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


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

1) Правильно (только именно такой always синтезатор выкинет с формулировкой "stuck at one")

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

 

А подходы к проектированию ДОЛЖНЫ БЫТЬ одинаковыми в ASIC и FPGA, это залог успеха. Пока они разные, это не проектирование, а мышиная возня. Единственное, что может быть разным, это усилия на тестбенчи, в ФПГА вообще без тестбенчей писать можно (тестировать на живую в железе), в ASIC - не реально.

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


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

1) Правильно (только именно такой always синтезатор выкинет с формулировкой "stuck at one")

это условный пример, вы заморачиваетесь деталями.

 

 

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

 

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

 

 

А подходы к проектированию ДОЛЖНЫ БЫТЬ одинаковыми в ASIC и FPGA, это залог успеха. Пока они разные, это не проектирование, а мышиная возня. Единственное, что может быть разным, это усилия на тестбенчи, в ФПГА вообще без тестбенчей писать можно (тестировать на живую в железе), в ASIC - не реально.

 

не должны, а могут. Вы не верите, но правда бывают проекты для ПЛИС, в которых нет смысла экономить деньги на ней, как на кристале, и поставить плис побольше ничего не стоит, если от этого результат будет быстрее... Конечно если есть возможность написать быстро и качественно - это приветствуется, но часто лучше отдать часть ресурсов, чем думать про вероятности распространения метастабильности....

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


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

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

Ну по моему опыту, это бывает только в одном случае - если эта ПЛИС прототип ASIC, тогда да, экономить на ней не стоит :) В остальных случаях, все таки, лучше на день больше поработать, а потом несколько лет получать больше прибыли за счет более дешовой ПЛИС. Хоть немного, но БОЛЬШЕ! Уверяю Вас, этот лишний день будет совсем не лишним и с лихвой окупится!

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


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

1) неверно. Подача 0.5 уровня менее вероятно введет триггер в метастабильность, нежели динамический процесс. В том числе и на этом основана работа синхронизатора, где каждый следующий FF в цепочке снижает вероятность прохождения метастабильности.

2) тоже неверно. Логика влияет на время (продолжительность) метастабильности только в плане его УМЕНЬШЕНИЯ за счет коэффициента усиления, никаких средств для увеличения продолжительности метастабильности в логике нет физически. однако вводит общую задержку распространения сигнала, и в каждом конкретном случае надо рассматривать эти влияния вместе - что кого перевесит.

 

Ну и выводы отсюда неверные. Если, допустим, вероятность на первом триггере получить метастабильность раз в 15 часов, то вероятность того, что она пройдет через второй - допустим уже раз в 10^12 лет, чего для большинства применений более, чем достаточно.

 

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

1) ну поверим секретной "информации, которая под NDA от SMIC" что подача 0.5 с меньшей вероятностью даст метастабильность чем изменение уровня во время клока (но как вы написали "вероятность, в общем, не сильно менее")...

физически по-моему суть процесса одна и та-же...

 

2) следуя вашей логике, на первом буфере метастабильность должна исчезнуть вообще и дальше не пойдёт (а вместо метастабильности (уровень 0.5), побежит усиленный 0 или 1).

Таким образом, наличие логики решает проблему с метастабилтьностью полностью.

Как метастабильность пойдёт дальше если первый-же усилитель её превратит в 0 или 1?

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

Но метастабильность на вход FF2.D попасть вообще не должна в этом случае....

А синхронизаторы зачемто без логики внутри....

 

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


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

Я нигде не писал, что лог. элемент, как усилитель, 100%-но превращает средний уровень в 0 или 1. Это уже Ваши домыслы, докучи неверные. Часть средних уровней превращает, часть - нет. Еще, в момент выхода из метастабильного состояния выход логики тоже может идти по какому-то пути 0->1 или 1->0, даже, если до этого, во время самой метастабильности, выход логики сидел в нуле или единице.

 

Я писал выше, что вставление логики (точнее буфера-усилителя) выгодно для достаточно медленных клоков. А на быстрых клоках не выгодно из-за вносимой задержки, которая перекрывает выигрыш от усиления.

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


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

Я нигде не писал, что лог. элемент, как усилитель, 100%-но превращает средний уровень в 0 или 1. Это уже Ваши домыслы, докучи неверные. Часть средних уровней превращает, часть - нет. Еще, в момент выхода из метастабильного состояния выход логики тоже может идти по какому-то пути 0->1 или 1->0, даже, если до этого, во время самой метастабильности, выход логики сидел в нуле или единице.

 

Я писал выше, что вставление логики (точнее буфера-усилителя) выгодно для достаточно медленных клоков. А на быстрых клоках не выгодно из-за вносимой задержки, которая перекрывает выигрыш от усиления.

ну ОК.

1) допустим метастабильность FF1.Q медленно ползёт к 1. По вашему каждый следующий буфер должен ускорять это приближение к 1 и тем самым с буферами метастабильность быстрее достигнет 1 чем без.

Такая ваша логика?

 

2) Или всётаки из-за разброса уровня перехода (0.5) на каждом буфере, метастабильность FF1.Q медленно ползущая к 1 может быть перенаправлена буфером в 0, следующим буфером назад 1, след в 0 и.т.п... Так помоему мы получим длительные колебания около 0.5 (удлинение метастабильности), вместо изначального медленного стремления FF1.Q к 1....

Собственно, это и обясняет почему синхронизаторы не содержат буферов и почему комбинаторика на выходе удлиняет метастабильное состояние.

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


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

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

 

Буфер делает две вещи - первое, так как у него порог не совсем тот, как у триггера, то он может выдать на выходе уровень, смещенный к 0 или 1 на усиленную разницу порогов (в т.ч. и жесткие 0/1), второе - ускоряет выход из метастабильного состояния, увеличивая скорость нарастания в процессе выхода из неустойчивого равновесия, симуляция дает после одного буфера (двух инверторов) скорость уже штатного фронта. Таким образом, буфер уменьшает вероятность распространения метастабильного состояния через себя. Но учитывая распределение длительностей этого состояния (короткие заходы туда сильно более вероятны, нежели длительные), далеко не всегда его вставление оправдано.

 

Если один буфер сильно сместил уровень к 0/1, то следующий буфер его окончательно затащит в 0/1, разброс порогов не на столько уж велик, чтобы туда-сюда гонять 0-1-0

 

И, еще раз, буфера НИЧЕГО УДЛИНИТЬ никак не могут!!!! В них нет ничего такого, удлиняющего. Они могут только задержать, сместить во времени, за счет их задержки, или укоротить за счет усиления.

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


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

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

 

Буфер делает две вещи - первое, так как у него порог не совсем тот, как у триггера, то он может выдать на выходе уровень, смещенный к 0 или 1 на усиленную разницу порогов (в т.ч. и жесткие 0/1), второе - ускоряет выход из метастабильного состояния, увеличивая скорость нарастания в процессе выхода из неустойчивого равновесия. Таким образом, буфер уменьшает вероятность распространения метастабильного состояния через себя. Но учитывая распределение длительностей этого состояния (короткие заходы туда сильно более вероятны, нежели длительные), далеко не всегда его вставление оправдано.

 

Если один буфер сильно сместил уровень к 0/1, то следующий буфер его окончательно затащит в 0/1, разброс порогов не на столько уж велик, чтобы туда-сюда гонять 0-1-0

так в итоге, буфер уменьшает время пребывания в метастабильном состоянии или увеличивает?

Как это обясняет что в библиотечных синхронизаторах стоят быстрые тр игеры и нет буферов?

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


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

так в итоге, буфер уменьшает время пребывания в метастабильном состоянии или увеличивает?

Как это обясняет что в библиотечных синхронизаторах стоят быстрые тр игеры и нет буферов?

 

Буфер уменьшает время, но сдвигает его, задерживая сигнал.

 

Библиотечных синхронизаторов я не видел. По крайней мере в библиотеках SMIC и TSMC таких ячеек нет, поэтому судить о "библиотечных синхронизаторах" я не берусь. Почему в стандартных рекомендациях так рекомендуют делать - я писал уже ранее, повторяться не хочу.

 

PS

Смутно я припоминаю сравнение по метастабильности buffered latch vs unbuffered latch, так вот там графики замеров пересекались, на быстрых тактовых выигрывали unbuffered, на медленных - buffered. Статью я эту найти пока не смог, забыл как называется. Но мне то, главное, что я суть запомнил, что buffered хорошо, когда тактовые не на пределе, и для больших fanout-ов.

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


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

Буфер уменьшает время, но сдвигает его, задерживая сигнал.

 

Смутно я припоминаю сравнение по метастабильности buffered latch vs unbuffered latch, так вот там графики замеров пересекались, на быстрых тактовых выигрывали unbuffered, на медленных - buffered. Статью я эту найти пока не смог, забыл как называется.

 

"уменьшает время, но сдвигает его" - сложная формулировка... честно говоря даж нарисовать не смог...

 

"на быстрых тактовых выигрывали unbuffered, на медленных - buffered" - сложно коментировать даже....

Если это результаты измерений - очень интересно их увидеть...

 

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

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

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


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

"уменьшает время, но сдвигает его" - сложная формулировка... честно говоря даж нарисовать не смог...

 

Что сложного то? Была, например длиной 600 ps с нулевого времени (500ps была в середине и 100ps выхода), а после буфера стала начиная с 50 ps и закончилась на 580ps (50-550 ps те же 500ps среднее состояние и 30 ps выход)

 

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

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


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

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

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

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

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

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

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

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

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

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