НАУКА и ОБРАЗОВАНИЕ
Эл№ФС77- 30569. Государственная регистрация №0421100025.155М 1994-0408_
Метастабильность в цифровых устройствах 77-30569/238113
# 10, октябрь 2011 Иванов С. Р., Буренков В. С.
УДК 004.312
МГТУ им. Н.Э. Баумана Уап8Бигеп@шш1 .ги [email protected]
Метастабильность - явление, которое может привести к нарушению нормальной работы цифровых устройств, возникающее при передаче сигнала между частями устройства, управляемыми несвязанными друг с другом синхросигналами. Если момент изменения входных данных триггера не удовлетворяет требованиям, устанавливаемым временами предустановки и выдержки, то сигнал на выходе триггера может перейти в метастабильное состояние. В данном состоянии значение сигнала колеблется между уровнями логического нуля и единицы в течение некоторого периода времени, что означает, что переход сигнала в единицу либо нуль задерживается на время, большее времени задержки распространения триггера.
В синхронных системах входные сигналы всегда удовлетворяют требованиям, предъявляемым триггерами к временным соотношениям сигналов, следовательно, метастабильность отсутствует. Проблемы, связанные с метастабильностью, обычно возникают в асинхронных системах, где разработчик не может гарантировать соблюдения времен предустановки и выдержки, так как сигнал из передатчика может прийти в любое время относительно синхросигнала приемника.
Для того чтобы минимизировать сбои при асинхронной передаче сигналов, вызванные метастабильностью, возможно использование
последовательности триггеров (синхронизирующей цепочки триггеров, или синхронизатора) в приемнике с тем, чтобы все изменения сигналов в нем происходили по активному фронту управляющего им синхросигнала.
Синхронизирующая цепочка триггеров, или синхронизатор - это последовательность триггеров, удовлетворяющая следующим требованиям:
• все триггеры в цепи тактируются одним синхросигналом;
• на вход первого триггера цепи поступают данные из передатчика, тактируемого другим синхросигналом (либо эти данные поступают асинхронно);
• выход каждого триггера является входом только одного триггера, за исключением последнего триггера в цепи.
Наиболее часто используются синхронизаторы, состоящие из двух триггеров. Первый триггер такого синхронизатора принимает на вход асинхронный сигнал, за один такт метастабильность сигнала на его выходе будет угасать, затем сигнал с выхода первой ступени поступает на вход второй ступени. Сигнал на выходе второй ступени является стабильным, и его изменение происходит по активному фронту синхросигнала, тактирующего триггеры синхронизатора и в то же время все триггеры приемника.
Основная проблема, связанная с синхронизаторами, заключается в том, что сигнал от передатчика может изменить свое значение дважды до того, как он будет передан в более медленно работающий приемник. В результате приемник не получит информацию, которую он должен был получить.
Передача многоразрядных данных между частями устройства, тактируемыми разными синхросигналами, является примером передачи множества случайным образом изменяющихся сигналов. Использование синхронизаторов при передаче данных, как правило, неприемлемо: слишком много ситуаций, при которых изменение данных приведет к их неправильной передаче.
Существует два распространенных метода синхронизации данных:
• использование сигналов подтверждения для передачи данных между частями устройства;
• использование FIFO-буферов, в которых запись данных в память осуществляется в передатчике, а их чтение - в приемнике.
Основным недостатком первого способа является наличие задержки, требуемой для передачи и распознавания всех сигналов подтверждения для каждого слова передаваемых данных, причем, чем больше сигналов подтверждения используется, тем больше задержка при передаче данных.
Второй способ является наиболее распространенным. В данном случае двухпортовая память используется для хранения данных. Один порт контролируется передатчиком, записывающим данные со скоростью в одно слово за такт синхросигнала записи. Другой порт контролируется приемником, считывающим данные из памяти со скоростью в одно слово за такт синхросигнала чтения. Два управляющих сигнала используются для индикации заполненности или опустошенности буфера.
БШО-буфер может быть построен различными способами.
Определение того, является ли буфер полным или пустым, требует некоторых математических манипуляций и/или операций сравнения над указателями чтения и записи. Проблема заключается в том, что эти два указателя генерируются в частях устройства, тактируемых разными синхросигналами. Одним из возможных решений этой проблемы является передача одного или обоих указателей в противоположную часть устройства через синхронизатор до того, как можно будет корректно исполнять математические операции и операции сравнения. Лучшим подходом к передаче указателей является использование для обоих указателей счетчиков, работающих в коде Грея. Такие счетчики изменяют свое значение только на один бит за раз, следовательно, если фронт синхросигнала появится в середине перехода состояния счетчика Грея, то будет принято либо старое значение, либо новое, и никаких потерь не возникнет.
Операцию сравнения указателей записи и чтения FIFO можно выполнять асинхронно. В этом случае уменьшается количество используемых синхронизирующих триггеров.
Структура счетчиков Грея также может быть различной. Возможна структура, в которой регистр используется для хранения значений в коде Грея. Сигнал с выхода этого регистра подается на вход преобразователя кода Грея в двоичный код, двоичное значение увеличивается на единицу и передается на преобразователь двоичного кода в код Грея, управляющий входами регистра. Однако данная структура не является оптимальной. Оптимизировать ее можно следующим образом: использовать два регистра -один в качестве двоичного счетчика, а другой - для хранения значения в коде Грея. При этом двоичный счетчик увеличивает значение, представляемое двоичным кодом, которое передается на вход данного счетчика в качестве следующего двоичного значения и на преобразователь двоичного кода в код Грея, сигнал с выхода которого поступает на вход регистра, хранящего значения в коде Грея. Такие модификации позволяют упростить преобразование из кода Грея в двоичный код, уменьшить количество комбинационной логики и увеличить максимальную частоту работы счетчика.
При проектировании FIFO-буфера необходимо решить еще одну сложную проблему: нужно корректно сгенерировать сигналы,
свидетельствующие о заполненности либо опустошенности буфера. Оба этих сигнала генерируются в момент, когда указатели чтения и записи сравниваются. Следовательно, необходимо еще какое-то условие для того, чтобы отличить эти сигналы друг от друга. Получить такое условие можно путем разделения адресного пространства FIFO на четыре квадранта и декодирования двух старших битов обоих счетчиков. Если указатель записи находится на один квадрант позади указателя чтения, то это говорит о том, что буфер, возможно, заполнится. Если указатель записи находится на один квадрант впереди указателя чтения, то это говорит о возможности опустошения буфера.
Проблемы, вызываемые метастабильностью, необходимо учитывать при проектировании современных цифровых устройств на программируемых логических интегральных схемах (ПЛИС) или сверхбольших интегральных схемах с использованием языков описания аппаратуры, таких как Verilog. Если устройство состоит из частей, тактируемых различными несвязанными синхросигналами, то разработчик должен обеспечить правильную передачу данных между этими частями, то есть не допустить потери данных либо приема неверных данных. Для этого, в зависимости от ситуации, ему, как правило, нужно выбирать между использованием синхронизаторов или FIFO-буферов.
FIFO-буфер с асинхронным сравнением указателей записи и чтения и выполнением этих указателей в виде модернизированных счетчиков, работающих в коде Грея, был применен автором во впервые разрабатывающемся блоке сбора и обмена цифровыми данными. В данном блоке данные с аналого-цифрового преобразователя (АЦП) поступают с одной частотой и затем считываются контроллером прямого доступа к памяти процессора (DMA-контроллером) с другой рабочей частотой. Для обеспечения корректного обмена данными между АЦП и DMA-контроллером в блок входит ПЛИС, в которой был реализован указанный FIFO-буфер.
Литература:
1. Altera. Understanding Metastability in FPGAs, 2009.
2. Clifford E. Cummings. Synthesis and Scripting Techniques for Designing
Multi-Asynchronous Clock Designs, 2002.
3. Clifford E. Cummings, Peter Alfke. Simulation and Synthesis Techniques
for Asynchronous FIFO Design with Asynchronous Pointer Comparisons,
2002.
4. Угрюмов Е.П. Цифровая схемотехника. - СПб.: БХВ - Санкт-
Петербург, 2000. - 528 с.