Контроль и исправление ошибок памяти
Хотя надежность микросхем памяти велика, тем не менее, в ее работе могут происходить сбои и систематические ошибки, приводящие к искажению информации при записи и считывании. Для предотвращения тяжелых последствий от этого применяют аппаратно-программные средства контроля и исправления ошибок (ECC –Error Checking and Correction).
К
онтроль и исправление ошибок основаны на использовании избыточных кодов, т.е. таких, в которых кроме информационных разрядов добавляются дополнительные разряды контроля. Самым простым вариантом таких кодов с одним контрольным разрядом служит контроль четности (Parity) (рис. 2.22). Обычно контрольный разряд добавляется отдельно для каждого байта записываемых данных.
Контрольный разряд формируется аппаратно при записи байта в память как дополнение до четного числа единиц в записываемом коде, включающем контрольный разряд. Для этого используются схемы контроля, построенные на логических элементах сложения по модулю 2 (рис. 2.23).При считывании из памяти схемы контроля вновь формируют контрольные разряды байтов, которые сравниваются со считанными из памяти контрольными разрядами. Несовпадение свидетельствует об ошибке, что передается в процессор по специальной линии для инициализации программных средств обработки.
Контроль по четности обнаруживает однократные ошибки, но не позволяет их исправить.
В 1948 г. Ричардом Хеммингом предложены коды с обнаружением и исправлением ошибок. В кодах Хемминга количество контрольных разрядов зависит от длины контролируемых кодов и числа исправляемых ошибок. В качестве примера рассмотрим код Хемминга с обнаружение и исправлением однократных ошибок для 16-тиразрядного двоичного кода.
Разряды корректирующего кода нумеруются слева на право, начиная с 1. Все разряды, номера, которых равны какой-либо степени числа 2, являются контрольными, а остальные используются как информационные. Так для 16-тиразрядного двоичного кода будет добавлено еще 5 контрольных разрядов по четности с номерами 1, 2, 4, 8, 16 (рис. 2.24).
Рис. 2.24
Каждый контрольный разряд используется для контроля определенных разрядов корректирующего кода, включая и сам этот разряд, как это показано в
табл. 2.2.
Таблица 2.2
Контрольный разряд | Правило | Контролируемые разряды |
через 1 по 1 | 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21 | |
через 2 по 2 | 2, 3, 6, 7, 10, 11, 14, 15, 18, 19 | |
через 4 по 4 | 4, 5, 6, 7, 12, 13, 14, 15, 20, 21 | |
через 8 по 8 | 8, 9, 10, 11, 12, 13, 14, 15 | |
через 16 по 16 | 16, 17, 18, 19, 20, 21 |
Также как и при контроле по четности, контрольные разряды формируются при записи в память и при чтении. Если при чтении нет совпадения хотя бы одного контрольного разряда, то номер разряда, в котором произошла ошибка, находится суммированием номеров всех контрольных разрядов, в которых нет совпадения. Ошибка исправляется инвертированием значения найденного таким образом разряда с ошибкой.
Рассмотренный метод контроля значительно повышает надежность, но заметно увеличивает объем памяти. Применяется в вычислительных системах высокой ответственности.