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

Долбежка тактами поможет. Ведь защелкиваться будет уже новое состояние входов, которое, будем надеяться, в этот момент уже стабильное.

 

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

 

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

 

Если внутри нелогической зоны нет плато, то это всё не имеет никакого значения.

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


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

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

 

Почти.

 

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

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


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

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

Спасибо! Мне понравилось -> =появления там немного устойчивого состояния=

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

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

Изменено пользователем Мур

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


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

Да, частоты зависимы и генерируются от одного клока. Сейчас использую S3 и ISE 12.4. Среда понимает соотношение частот.

Это хорошо, что от одного генератора. Теперь остаётся уточнить, как Вы получали эти частоты: при помощи DLL ? Хорошо бы схемку (ну или HDL описание) глянуть этого места.

 

Если всё сделать правильно, то и метастабильности не будет - а значит, всё будет тривиально (как функционально моделируется - так и работает,.. если, конечно all constraints are met).

Т.к. схематика/описания схемы генерирующей clock 100М и 50М от автора не последовало, то предположу, что он сделал это место "правильно". Тогда для пересаживания импульса, длинной от 1 до 2 периодов CLK_100M на частоту 50М (получится импульс длинной в один период), достаточно такой схемы:

post-18188-1302628139_thumb.png

ISE разведёт сигнал A с ограничениями как для 100М, и обратная связь (цепь Event_50M) со второго триггера на первый тоже будет разведена с ограничением как для 100М. Цепь Event_50M ко всем остальным синхронным элементам домена Clk_50M будет разведена с ограничениями как для 50М.

 

Ну вот, как-то так примитивно всё получается,.. если схема генерирующая clock’и сделана правильно.

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


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

Хочу вернуться к рис.8 (см. сообщение №58).

Возник у меня вопрос о целесообразности мультиплексора в "желтой" части схемы. И подумал я, почему его не заменить на схему И - один вход - Data, другой /Q с триггера.

Что делает мультиплексор в "желтой" части.

Пока на Data 0, это латч, поддерживающий свой 0. Незнамо, зачем.

Пришла "длинная" 1, мультиплексор переключился на вход 1, передает 1 с инверсного выхода триггера на вход D триггера. По такту Clock1 эта 1 записалась в регистр. На инверсном выходе триггера появился 0, и этот 0 пришел через мультиплексор на D. Пришел следующий такт, в триггер записался 0, на входе мультиплексора 1. И т.д., генерация.

Когда Data стала 0, мультиплексор запомнил свое последнее состояние. И триггер записал его, и выдал наружу.

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

При "короткой" 1 на Data, однотактовой, обе схемы работают одинаково.

"Развод" какой-то!? :)

 

 

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


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

Что делает мультиплексор в "желтой" части.

Пока на Data 0, это латч, поддерживающий свой 0. Незнамо, зачем.

Пришла "длинная" 1, мультиплексор переключился на вход 1, передает 1 с инверсного выхода триггера на вход D триггера. По такту Clock1 эта 1 записалась в регистр. На инверсном выходе триггера появился 0, и этот 0 пришел через мультиплексор на D. Пришел следующий такт, в триггер записался 0, на входе мультиплексора 1. И т.д., генерация.

Когда Data стала 0, мультиплексор запомнил свое последнее состояние. И триггер записал его, и выдал наружу.

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

При "короткой" 1 на Data, однотактовой, обе схемы работают одинаково.

"Развод" какой-то!? :)

Там синхронизатор, передающий 1clk импульсы, поэтому "длинная" 1 на входе может быть, только если мы хотим передать много-много импульсов, идущих друг за другом.

А если на входе "короткий" импульс (1clk), то выход желтого каскада переключится в инверсное состояние, после чего смененное состояние зафиксируется. Выходной сигнал будет передан во второй домен, где смена состояния будет отловлена по xor.

 

А с лэтчем они криво нарисовали, да. На самом деле там что-то вроде:

always @(posedge clkA)
Out<=(En)?~Out:Out;

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


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

А если на входе "короткий" импульс (1clk), то выход желтого каскада переключится в инверсное состояние, после чего смененное состояние зафиксируется.

Импульс может и должен быть равен такту. Но даже если он и короче, то он уже отловлен триггером. Зачем его держать? Разве что чтобы выдержать время удержания на входе D?

А если не отловлен - туда ему и дорога! :)

 

А с лэтчем они криво нарисовали, да. На самом деле там что-то вроде:

не думаю

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


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

Присмотрелся внимательнее к рисунку. Да, есть в нем смысл. Был неправ.

 

1. Короткие импульсы 1 на Data захватываются защелкой, затем триггер фиксирует это состояние. И находится в нем долго, до следующего импульса на Data. По этому импульсу защелкивается 0, и дальше триггер... Таким образом, состояние триггера по каждому импульсу на Data изменяется на противоположное.

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

 

2. Если на Data импульс достаточно длительный, так, что в него попадает один фронт Clock1, или в короткий импульс попал фронт Clock1, "желтый" триггер сформирует импульс в один такт. Который может не словиться "синими" триггерами. А если словится, сформируются два подряд идущих импульса. Нехорошо.

 

3. Если на Data импулься длинный, "желтый" триггер будет генерировать то 0, то 1. Аналогичный сигнал появится на выходе синхронизатора. Тоже не хорошо.

 

Особо нужно посмотреть, когда импульс на Data равен периоду Clock1. В этом случае выход триггера переключается одновременно со срезом Data. Вот она - потенциальная возможность для метастабильного состояния защелки-мультиплексора. Если защелкнется новое состояние триггера - сформируется одиночный импульс (вариант 2). Если сохранится старое - все нормально (вариант 1). Но, так как при "защелкивании" сигнал с триггера проходит по мультиплексору дважды, сначала по цепи для входа 1, потом по цепи для входа 0, то он гарантированно "защелкнет" старое состояние триггера. Триггер начнет формировать длинный импульс (вариант 1).

 

Примерно так. :)

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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