На рис. 2.22 показан пример контроля логического преобразователя ЛП, воспроизводящего систему переключательных функций от m переменных. Для осуществления контроля к системе добавляется еще одна функция Fдоп = Fi F2 ... Fn, которая воспроизводится на индивидуальных элементах (во избежание маскирования контролируемых ошибок). Затем выработанные функции F1.-Fn свертываются по модулю 2, и результат сравнивается с дополнительной функцией Fдоп. Ясно, что при отсутствии ошибок должны сравниваться одинаковые величины. Если они различны, то на выходе элемента сложения по модулю 2 возникнет сигнал ошибки.
Ряд операций контролируется в условиях, когда контрольный разряд не постоянен, а изменяется по определенному закону. Это возможно, если установлена закономерность изменения контрольного разряда при выполнении операции. Например, при работе счетчика его содержимое меняется по известному закону. Если к слову, содержащемуся в счетчике, добавлять контрольный разряд. также изменяющийся по известному закону, то свертка содержимого счетчика вместе с контрольным разрядом покажет единичную ошибку в работе счетчика. Такой же подход возможен для контроля сумматоров.
Рис. 2.22. Схема контроля логического преобразователя по модулю 2
Контроль с использованием кодов Хемминга
Применение кодов Хемминга позволяет исправлять единичные ошибки. Добавление к коду Хемминга контрольного разряда, обеспечивающего четность/нечетность всей кодовой комбинации в целом, приводит к модифицированному коду Хемминга, с помощью которого можно исправлять единичные ошибки и обнаруживать двойные.
Методы контроля с помощью кодов Хемминга основаны на тех же идеях, что и контроль по модулю 2. Отсюда и область эффективного применения кодов Хемминга — устройства, в которых вероятность единичных ошибок много больше, чем вероятность групповых.
Для получения кодовой комбинации кода Хемминга к информационному слову добавляется несколько контрольных разрядов. Для простоты просмотра кодовых комбинаций с целью определения значений контрольных разрядов примем, что контрольные разряды занимают позиции с номерами 2i (i = 0, 1, 2,...).
Каждый контрольный разряд ассоциируется с некоторой группой разрядов кодовой комбинации и выводит вес группы, в которую он входит, на четность/нечетность.
Первый контрольный разряд входит в группу разрядов с номерами XX...XXI, где Х означает произвольное значение. Иными словами в первую группу входят разряды с нечетными номерами: 1, 3, 5, 7, 9,... .
Второй контрольный разряд входит в группу разрядов с номерами, имеющими единицу во втором справа разряде, т. е. номерами ХХ...Х1Х. Это номера 2, 3, 6, 7, 10, 11,... .
Третий контрольный разряд входит в группу, у которой номера разрядов имеют единицу в третьем справа разряде: ХХ...1ХХ, т. е. с номерами 4, 5, 6, 7, 12, 13, 14, 15,... . '
Таблица 2.10
Контрольные разряды выводят веса своих групп на четность/нечетность. Далее для определенности примем, что ведется контроль по четности. После выполнения операции (например, считывания кодовой комбинации из памяти) производится столько проверок по модулю 2, сколько контрольных разрядов в кодовой комбинации, т.е. проверяется сохранение четности весов групп. Если в кодовой комбинации произошла ошибка, то в одних проверках она скажется, а в других — нет. Это и позволяет определить разряд, в котором произошла ошибка. Для восстановления правильного значения слова теперь остается только проинвертировать ошибочный разряд. Такова идея построения и использования кода Хемминга.
Пример составления кода Хемминга для четырехразрядного информационного слова приведен в табл. 2.10.
Через р в таблице обозначен общий контрольный разряд для всей кодовой комбинации, через p1, р2, р3 — первый, второй и третий групповые контрольные разряды.
Для коротких слов избыточность кода Хемминга получилась значительной (здесь на четыре информационных разряда приходится четыре контрольных), но это нетипично, поскольку реально контролируются слова большей разрядности, для которых избыточность (относительная) быстро уменьшается с ростом разрядности слов. Короткое слово взято, чтобы пример не был громоздким.
Рассмотрим теперь процесс исправления и выявления ошибок. Пусть, например, передавалось информационное слово 0110 = 610. Не учитывая пока разряд р, получим, что правильная кодовая комбинация имеет вид:
Пусть во втором слева разряде произошла ошибка и принята комбинация:
о
Первая проверка (по группе разрядов с нечетными номерами) показывает сохранение четности, т. е. в этой группе ошибок нет, результат этой проверки отмечается нулем
Вторая проверка (по разрядам 2, 3, 6, 7) обнаруживает нарушение четности веса комбинации, ее результат отмечается единицей.
Третья проверка (по разрядам 4, 5, 6, 7) также обнаруживает нарушение четности, ее результат отмечается единицей.
Результаты проверок образуют слово, называемое синдромом. Синдром указывает номер разряда, в котором произошла ошибка. Во взятом примере результаты проверок дают слово 110 = 6ю. Проинвертировав разряд номер 6, возвращаемся к правильной кодовой комбинации — ошибка исправлена.
Минимальное кодовое расстояние обычного кода Хемминга равно трем. Добавление разряда проверки общей четности веса комбинации приводит к модифицированному коду Хемминга с минимальным кодовым расстоянием, равным 4 и, соответственно, добавляет возможность обнаружения двойной ошибки. Обнаружение двойной ошибки основано на сопоставлении наличия или отсутствия признаков ошибки в синдроме и общей четности. Если обозначить через S любое ненулевое значение синдрома, то возможные ситуации, используемые для обнаружения двойной ошибки, окажутся следующими (табл. 2.11).
Таблица 2.11
Схемы кодера и декодера для кода Хемминга
На рис. 2.23 показана схема кодирования и декодирования для кодов Хемминга. Верхняя часть, схемы показывает выработку контрольных разрядов для составления кода Хемминга. Нижняя часть содержит три четырехразрядных схемы свертки для проведения групповых проверок (разрядов синдрома). Синдром поступает на дешифратор, который вырабатывает единичный сигнал на линии, соответствующей номеру ошибочного разряда. Эта единица выполняет инвертирование ошибочного разряда слова А, поступая на второй вход элемента сложения по модулю 2, через который данный разряд передается на выход схемы. Таким образом, нижняя часть схемы представляет собою декодирующее устройство для кода Хемминга.
Двойная ошибка обнаруживается элементом 2k согласно логике ситуаций, указанной выше.
Кодирование-декодирование для 16-разрядных слов с формированием 6 контрольных разрядов модифицированного кода Хемминга реализуется микросхемой ВЖ1 серий К555, 533. Время кодирования-декодирования составляет для этой ИС 50...60 не.
Код Хемминга относится к числу простых. Есть много более сложных кодов с большими корректирующими возможностями (БЧХ, код Файра, код Рида-Соломона и др.).
Рис. 2.23. Схема кодирования и декодирования для кодов Хемминга
Базисные элементы
Очевидно, базис происходит от слова "база". Абсолютно в дырочку. Намек понятен? Базисом называется совокупность элементов, с помощью которых схемотехнически можно реализовать устройство любой сложности. Простым языком, базис - это те элементы, при помощи которых можно сделать любое устройство (речь идет о цифровой технике). Да да, абсолютно любое и самое интересное, что этих базисных элементов всего 2. На их основе можно сделать все вышеперечисленные элементы и еще кучу других, что, собственно, и делается.
Базис "И-НЕ"
И-НЕ - это схема И и схема НЕ, сложенные вместе. Операция, которую производит такой элемент называется инверсией логического умножения или отрицанием логического умножения, ну или инверсией конъюнкции и еще красивым словосочетанием штрих Шеффера. Штрих кого-то там называется потому, что в виде формулы опреция И-НЕ записывается так: y = x1 | x2. Вертикальная черта между иксами и есть штрих какого-то Шеффера.
Логический элемент И-НЕ обозначается так:
Таблица истинности для него:
x2
x1
y
Суть ясна? Сначала вроде как умножаем (логически), а потом все это отрицаем (тоже логически). Если к элементу И (см. выше) прилепить на выход инвертор, то получим такой вот элемент И-НЕ. Ну и кто уже догадался, если к элементу И-НЕ прилепить на выход инвертор, то получим элемент И. Если у элемента И-НЕ замкнуть входы, то получится тот самый инвертор.