![](/user_photo/_userpic.png)
книги из ГПНТБ / Хетагуров, Я. А. Повышение надежности цифровых устройств методами избыточного кодирования
.pdfВ блоьшинстве ЗУ на магнитных дисках информация записывается последовательно на концентрически распо ложенные дорожки, которые физически представляют собой окружности на поверхности диска. Обычно все за писи должны оканчиваться на той же дорожке, на кото рой они начинаются. В данном параграфе рассматрива ются методы повышения надежности ЗУ при последова тельной записи и считывании информации, а в следую щем— при параллельно-последовательном размещении данных.
В подавляющем большинстве современных ЗУ приме няются простейшие групповые коды — коды с проверкой количества единиц на нечетность. Не являются в этом отношении исключением и дисковые ЗУ. Для современ ного этапа развития вычислительной техники является
характерным |
использование символа (слога) стандарт- |
нон длины, |
называемого байтом. В современных ма |
шинах байт |
содержит девять двоичных разрядов, один |
из которых является контрольным. При отсутствии оши бок байт всегда содержит нечетное количество единиц. Таким образом, если в ЗУ записываются байты с кон трольными разрядами, то при считывании производится контроль количества единиц в каждом байте. К сожале нию, такой метод контроля имеет существенный недо статок: вопышка ошибок с четным весом W(E) не обна руживается. Если предположить, что вероятности четного и нечетного веса вспышки одинаковы, то 50% ошибок побайтовым контролем не обнаруживаются.
Поэтому, например, в дисковых ЗУ IBM/360 2311 ис пользуется следующий метод контроля [Л. 52]. Устройст во управления при записи информации отбрасывает кон-
Интерфейс ввода-вывоба
Оперативная |
Канал |
Устройства |
|
ЗУ . |
||
управления |
на магнитных |
|||||
ввода-вывода |
||||||
|
дисками |
' 1 ' |
дисках |
|||
|
|
|
||||
|
\Ка^т£альные^саряв^ |
|
Данные |
|
|
|
|
|
|
|
|
||
|
<5э |
|
Контрольные байты |
|||
|
блок данных |
|
|
|
|
|
Рис . 7-24. Форматы данных в интерфейсе ввода—вывода |
и на вхо |
|||||
де—выходе |
ЗУ на дисках, принятые |
в IBM/36Q |
(дисковые |
ЗУ 2311). |
231
трольные разряды символов (байтов), поступающие из канала, и передает в ЗУ 8-разрядные символы последова тельно (рис. 7-24). В конце записи записывается два контрольных байта, вычисленных в устройстве управле ния следующим образом. Первый контрольный -байт ра вен инверсной поразрядной сумме по модулю 2 всех не четных по номеру 8-разрядных байтов, записываемых на дорожку диска. А второй контрольный байт равен
инверсной |
поразрядной |
|
сумме |
всех четных |
по |
номеру |
|||||||
8-разрядных |
байтов. |
|
|
|
|
|
|
|
|
|
|
||
Например, пусть необходимо записать на дорожку |
|||||||||||||
диска массив: |
|
|
|
|
|
|
|
|
|
|
|
||
Номер байта |
|
|
Информационные разряды |
|
Контрольный разряд |
||||||||
1 |
|
|
0 |
1 1 1 0 |
|
1 1 0 |
|
|
0 |
|
|||
9 |
|
|
1 |
1 0 |
0 0 0 0 0 |
|
|
1 |
|
||||
3 |
|
|
0 |
0 |
0 0 0 0 0 1 |
|
|
0 |
|
||||
4 |
|
|
1 1 1 1 1 0 |
0 1 |
|
|
1 |
|
|||||
5 |
|
|
0 |
0 0 |
1 0 |
1 0 |
1 |
|
|
0 |
|
||
Тогда значения контрольных байтов равны: |
|
||||||||||||
Первый байт |
|
|
|
|
|
Второй |
байт |
|
|||||
0 1 1 1 0 1 1 0 |
|
|
|
1 1 0 0 0 0 0 0 |
|
||||||||
0 0 0 0 0 0 0 1 |
|
|
|
1 1 1 1 1 0 0 1 |
|
||||||||
0 0 0 1 0 1 0 1 |
|
|
|
1 1 1 1 1 1 1 1 |
|
||||||||
1 |
1 1 1 1 1 1 1 |
|
|
1 1 0 |
0 0 |
1 1 |
0. |
|
|||||
1 0 |
0 |
1 1 1 0 |
1, |
|
|
|
|
|
|
|
|
||
Байты из всех единиц добавляются для получения |
|||||||||||||
инверсной |
суммы. |
|
|
|
|
|
|
|
|
|
|
||
Данный метод контроля при последовательной |
записи |
позволяет: 1) обнаружить любое нечетное количество ошибок; 2) обнаружить любую вспышку ошибок длиной 16 или менее двоичных разрядов. Кроме того, по срав нению с контролем каждого 'байта достигается экономия
памяти, которая |
равна (М—16) |
двоичных разрядов, где |
М — количество |
байтов в массиве, записываемом на диск. |
|
Например, если |
записываемый |
массив содержит 1 024 |
байта, то экономится 1 008 бит, т. е. примерно 10%.
232
Рассмотрим возможность автоматической коррекции: вспышек ошибок с помощью циклических кодов. Для: этой цели могут быть использованы циклические коды Файра (§ 3-2). Пусть А (х) = ао+сцх+.. . + an-ixn-i— ко довый полином, т. е. А(х)=0 по модулю G(x). Если при считывании информации возникла вспышка ошибок Е(х) длиной не более / разрядов, где / — максимальная длина> одиночных вспышек ошибок, исправляемых данным ко
дом, то при делении полинома |
А(х)+Е(х) |
на G(x) по |
|||||
лучим: |
|
|
|
|
|
|
|
|
|
£i(x) |
=Е(х) |
по модулю G(x), |
|
|
|
где |
Q(x)—содержимое |
запоминающих ячеек |
блока де |
||||
ления после |
приема двоичного |
кода А + Е |
в |
буферное- |
|||
ЗУ |
(см. рис. 3-5). |
|
|
|
|
|
|
|
Вспышку ошибок Е длиной / можно представить в ви |
||||||
де |
следующего |
двоичного |
кода длиной |
п |
разрядов- |
||
00 |
.. . 0ei<?i+1 |
.. . ei+г—2614-;—10 .. . 0, где ег -= 1 и индекс 0 ^ |
|||||
|
—/ показывает |
«начало» ошибки, ей при |
|||||
^ k ^ i + l—2 |
равно 0 или 1. Учитывая (3-9) и последо |
||||||
вательность |
поступления рассматриваемых |
символов; |
(первым на вход блока деления поступает символ ей за
тем e,+i и т. д.), получаем последовательность |
состояний: |
||||||
блока |
деления (при нулевом |
исходном состоянии): |
|||||
B{jc |
; |
|
|
|
|
|
|
^г+\Х |
|
* —{— е^х |
|
} по модулю G(x) |
|||
0 л - 1 |
+ |
... + |
0 л - < л - г ' - " + |
||||
|
|
||||||
+ e * + i _ I x - < » - < - ' + 1 > |
+ ... + ei Jc-<*-« |
|
|||||
или, так как хп=1 |
по модулю G(x), то окончательно по |
||||||
лучаем: |
|
|
|
|
|||
|
|
Q (х) = e i + i |
_хх ~(" - * ~ 1 |
+ 1 ' + . . . + e * J C < N " Г > |
= = |
||
|
|
= etxi + . . . -(- e i + i _ , J C * + 1 ~1 = . х* ( в г + |
|
||||
|
|
-\-вг |
+ 1Х-{- |
..^\~в1+1_хХ1'1) |
ПО МОДУЛЮ |
G(X). |
Если продолжить работу декодирующего устройства (блок деления продолжает работать в автономном ре жиме и двоичные символы с выхода БЗУ последователь но поступают на выход схемы), то в момент, когда пер вый ошибочный символ Сг + ег займет крайнюю правую-
233.
ячейку БЗУ, содержимое блока деления будет равно:
Q (х) Х~ *" = Х^вг |
-\-вг+1Х-{-...-\- |
вг+l _ |
~l)X~ |
i |
= |
=щег-\-вг+1х-j-... |
-\-ег+1_1х1~г |
подмодулю |
G(x). |
||
Другими словами, в г запоминающих |
ячейках |
блока |
деления (рис. 3-5) установится код б^г-и- • • бг+г-iOO • • • 0. Эта ситуация, т. е. появление нулей во всех (<г—I) пра вых запоминающих ячейках блока деления, фиксируется с помощью логической схемы, которая вырабатывает сигнал отключения обратной связи в блоке деления и коммутации выхода на вход сумматора но модулю 2 до окончания всей процедуры декодирования. Поэтому в сле дующем такте на один вход сумматора из БЗУ поступит
символ ai + ei, |
на второй |
вход — символ |
на выходе |
декодирующего |
устройства |
получим a,- + ei + et- = a;, т. е. |
исправленный символ. Аналогично исправляются осталь ные ошибки вспышки.
Для иллюстрации изложенного рассмотрим исправление |
вспышек |
|
ошибок с помощью кода, порождаемого полиномом |
|
|
G(x) = (x*+x+\) (х* + |
\)=х*+х11+х5+ха+х+\. |
|
Этот полином порождает код Файра |
длиной я = 3 5 разрядов, из |
|
которых восемь контрольных, и позволяет |
исправить любую |
одиноч |
ную вспышку ошибок длиной 3 или менее |
(§ 3-2). |
|
6 |
ml |
50 , |
DUD №UDh\m2\
r i i .
[
|
|
|
|
Начало |
|
|
IS |
|
|
|
|
|
|
|
|
|
декодирования |
|
|
|
|
|
|||
Вход |
|
Буферное запоминающее |
устройства |
|
Выход |
|||||||
|
№ mmт № |
|
№mm№ mm |
т |
||||||||
|
|
|
|
|||||||||
|
|
|
|
|
|
|||||||
|
|
|
|
Рис. 7-25. Схема КУ. |
|
|
|
|||||
|
Пусть |
возникла |
следующая вспышка ошибок Е= (00...00101000000). |
|||||||||
Значение |
кодового |
слова |
А=(а0, |
fli, |
. . . , an-t) |
рассматривать |
не |
|||||
имеет |
смысла, ибо |
соответствующий |
полином А (х) = 0 |
по модулю |
||||||||
G(x). |
Дл я определенности |
будем |
полагать, что Л =(00 . . . 0). Тогда |
|||||||||
в момент |
окончания |
первого |
этапа |
декодирования |
в БЗУ будет |
запи |
||||||
сан |
код ошибки, показанный |
на ряс. 7-25, |
а содержимое |
блока деле |
||||||||
ния |
равно |
остатку |
от деления полинома |
хв(1+хг) |
=х°+х* |
на |
G(x). |
234
При делении |
на модуль |
G(x) =xs+xB+xs+x3+x+[ |
получаем: |
|
|
|
Q(x)=xs+x3+x+\. |
|
|
Другими |
словами, в запоминающих |
ячейках |
блока деления будет |
|
записан код 11010100. |
|
|
|
|
На втором этапе декодирования получаем следующую последо |
||||
вательность |
состояний блока деления: |
|
|
|
|
исходное состояние |
11010100; |
||
|
после |
1-го такта |
00000101; |
|
|
после |
2-го такта |
00001010; |
после 6-го такта |
10100000. |
i |
Таким образом, после 6-го такта конъюнктор обнаруживает ну левой код в старших пяти ячейках блока деления и вырабатывает сигнал, устанавливающий триггер Г в состояние, при котором пер вый конъюнктор закрывается, а второй — открывается. В этот мо мент в старших ячейках БЗУ записан код . . . 00101. В течение сле дующих тактов декодирования сшибка будет исправлена.
Рассмотренный метод коррекции вспышек ошибок с помощью циклических кодов позволяет сделать сле дующие выводы.
1. Соответствующим выбором параметров циклическо го кода можно обеспечить коррекцию ошибок при инфор мационной избыточности (n—k) In порядка нескольких процентов.
2.Затраты аппаратуры на декодирующее устройство оказываются значительными из-за того, что количество ячеек в БЗУ должно равняться длине п используемого кода. Например, если п=889, то БЗУ должно иметь ем-, кость 889 бит.
3.При считывании быстродействие памяти с декоди рующим устройством на выходе уменьшается в следую щее число раз:
n/h + n/h |
_ f , + |
f i |
я/Л |
~~ h |
* |
где fi — тактовая частота работы дискового ЗУ; fz = максимальная тактовая частота работы декодирующего устройства. Например, если в дисковом ЗУ fi=0,2 мгц, а /г=1 мгц, то быстродействие снизится в 1,2 раза.
235
4. Исключение БЗУ из декодирующего устройствапозволяет существенно уменьшить затраты аппаратуры на его реализацию.
В этом случае коррекция ошибок в данных, записан ных в оперативную память, производится с помощью спе циальной подпрограммы. Место и структура вспышки ошибок локализуются блоком деления, как описано вы ше. Так как ошибки возникают относительно редко, т. е. как правило, после считывания массива из памяти содер жимое блока деления равно нулю, то рассматриваемый метод коррекции практически не оказывает влияния на быстродействие памяти.
Обычно в память на дисках могут записываться мас сивы переменной длины, не превышающей длины п ис пользуемого кода. В этом случае может быть использо вана изложенная выше процедура коррекции ошибок, если предположить, что в п—п' разрядах кодового слова записаны нули, где п' — длина считываемого массива. Однако, если величина /г—п' значительна, то при аппа ратурной реализации декодирующего устройства значи тельно увеличивается задержка в декодировании, свя занная с необходимостью учета фиктивных нулей, до полняющих считываемый массив до стандартной дли ны п. Применение аппаратно-программного метода деко дирования позволяет свести влияние этой задержки к ми нимуму благодаря низкой частоте возникновения оши бок.
Рассмотрим другой метод коррекции ошибок, исполь зование которого целесообразно в том случае, когда ко дирование и декодирование производятся с помощью программных средств. В этом случае каждый элемент кодового слова представляет со'бой /га-разрядное двоич ное число. Значение т может равняться произвольному числу, но обычно оно равно либо разрядности машины, либо стандартной длине используемого символа (8 бит). В рассматриваемом ниже классе кодов операции сложе ния и умножения над элементами кода производятся по модулю N=2m или N=2m—1. Для описания данных ко дов будем использовать контрольную матрицу Н, анало гичную контрольной матрице линейных групповых ко дов.
Контрольная матрица, соответствующая коду с обна ружением ошибок, имеет вид:
Н = ||1 1 1 . . . 1 Ц . |
(7-17) |
236
Значение единственного контрольного элемента ai,+t вычисляется по формуле
|
|
k |
|
|
ah+1== |
— Yi ai п о модулю N, |
|
|
|
1=1 |
|
где |
их — информационные |
элементы кода; k — количест |
|
во |
информационных символов в коде. Таким образом, |
||
кодовый вектор (кодовое |
слово) А = (а&г . . . dkCtk+i) и |
||
AHt |
= 0 по модулю |
N, |
|
k
так как ай + 1 -)-2 си==0 по модулю N.
[=1
Обратите внимание на полную аналогию матрицы (7-17), т. е. способа вычисления одного контрольного разряда, и контрольной матрицы, соответствующей кон тролю по четности количества единиц в слове! Отличие состоит лишь в том, что в данном случае все операции производятся не в двоичном поле, а в кольце классов вычетов по модулю N.
|
Например, |
пусть |
элементами кода |
являются |
двоичные числа |
дли |
|||||
ной |
т - 1 0 |
разрядов; |
|
Л / = 2 т — 1 = 1 |
023 |
и пусть |
а, = 121, |
а 2 =999, |
а 3 = |
||
=512, а4 |
= 75, |
а 5 = 3 |
(для кратности |
записаны десятичные |
эквивален |
||||||
ты |
двоичных |
чисел). |
Тогда значение |
контрольного элемента |
|
||||||
« s = |
— 6 8 7 = 1 023 — 687=336, так к а к — Ц at |
= — 1 710 = — 687 |
|||||||||
по |
модулю |
/V = 1 023. |
Проверяем |
правильность |
кодирования: |
|
|||||
|
б |
|
|
|
|
|
|
|
|
|
|
|
2 |
at |
= |
1 710 + |
336 = 2 046 = |
0 по модулю Л' = 1 023. |
|
||||
|
i = i |
|
|
|
|
|
|
|
|
|
|
Коду, описываемому матрицей (7-17), соответствует широко используемая в ЦВМ процедура контрольного суммирования массивов чисел. Любая ошибка в одном элементе кодового слова будет обнаружена всегда. Об щее количество различных сочетаний ошибок в двух фик сированных элементах (напомним, что под элементом понимается m-разрядное двоичное слово) равно ( 2 т — I ) 2 . Двойная ошибка не будет обнаружена, если
е1 -\- е, = 0 по модулю N .
237
Если значение ei задано, то последнее сравнение мо жет быть выполнено при единственном значении е2. Сле довательно, из общего числа сочетаний ошибок ( 2 m — I ) 2 не будут обнаружены (2m —1) ошибок, т. е. условная вероятность пропуска двойной ошибки равна:
. Q a = l / ( 2 " - l ) .
Из аналогичных рассуждений следует, что вероят ность пропуска ошибки произвольной кратности
s^l/(2m — 1). Например, |
|
если m = 30, то |
Q < 2 - 3 0 ~ 1 0 - 9 . |
|
Код с исправлением любой ошибки в одном элементе |
||||
можно построить с помощью следующей |
контрольной |
|||
матрицы: |
|
|
|
|
Н = |
1 |
1 1 ... 1 1 |
О |
(7-18) |
.1 |
2 3 . . J 0 |
1 |
|
|
где k<N. |
|
|
|
|
Данный код требует |
всего два |
контрольных элемен |
та. Из матрицы (7-18) получаем уравнения для вычисле
ния контрольных |
элементов: |
|
|
|||
+ i = |
- |
У. |
<*i |
|
|
|
— |
|
|
|
|||
|
|
i = I |
|
по модулю N. |
(7-19) |
|
= —ft2 ia.i |
||||||
|
|
Контрольные уравнения для кодовых слов имеют вид:
ft+i |
1 |
|
У, |
а г - = 0 |
|
|
по модулю N. |
(7-20) |
k |
I |
|
Если ошибка возникла в одном из контрольных эле ментов, то будет нарушено только одно контрольное со отношение. Если же ошибка возникла в информацион ном элементе, то будут нарушены оба соотношения. При чем значение кода коррекции ei определяется из первого» контрольного соотношения
ft+i
= S о* по модулю N,
238
а фаза х ошибки или номер элемента, содержащего ошибку, является решением сравнения
по модулю N, |
(7-21 > |
k |
|
где е2 = <2й+ 2 ^+2 i a i п о модулю N, |
Kx<k. |
1=1 |
|
Если сравнение (7-21) не имеет решения, то это сви детельствует о наличии ошибки более высокой кратности,, которая не может быть исправлена.
Рассмотрим построение кода с исправлением ошибки в однойэлементе для рассмотренного выше примера. Согласно (7-19) полу чаем:
|
|
|
|
|
а 6 =336, |
а 7 = — 901 ='122. |
|
|
||
|
|
Пусть при передаче информации произошла ошибка |
в элементе |
|||||||
02 и получено значение а*2=500. Тогда из |
контрольных |
уравнении.. |
||||||||
(7-20) определяем: |
|
|
|
|
|
|
||||
|
|
|
6 |
|
|
|
I |
|
|
|
|
|
< ? , = |
£ |
^ 1 = 1 547 = |
524 |
(, п о |
модулю /V = |
1 023. |
||
|
|
|
i = i |
|
|
|
|
|
|
|
|
|
<?2 = |
122 + 2972 = |
3094 = |
25 |
|
|
|
||
|
|
Далее |
рассматриваем |
сравнение (7-21) |
при |
значениях * = 1 , 2"_ |
||||
3, |
4, |
5: |
|
1- 524 = |
514 |
|
)> по модулю |
|
|
|
|
|
|
|
|
N = |
1 023, |
|
|||
|
|
|
|
2- 524 = |
2 5 = ^ а |
/ |
|
|
|
т. е. фаза ошибки равна 2. Исправление ошибки производится вычи танием £| из а*2-
а*2—е1=500—524=—24, но — 24= 1 023—24 = 999 по модулю N.
Рассмотренный код, описываемый матрицей (7-18),. позволяет исправить любую вспышку ошибок длиной пи или менее двоичных разрядов, расположенную в преде лах одного элемента. Вспышка ошибок, искажающая два смежных элемента, не может быть исправлена. Поэтому для исправления произвольной вспышки ошибок длиной- 2т или менее двоичных разрядов необходимо использо вать код, описываемый матрицей
1 |
о 1 о 1 о ... |
1 .о о |
|
|
Н = || о |
1 о 1 о 1 ...о |
1 |
о . |
(7-22> |
1 |
1 2 2 3 3 . . . 0 0 |
1 |
|
При возникновении ошибки в одном информационном, •элементе нарушатся два контрольных соотношения (иер-
23*
•вое и третье или второе и третье) и процедура исправ-
.ления будет аналогичной рассмотренной выше. Если же ошибка возникнет в двух смежных информационных эле
ментах, то будут нарушены все три контрольных |
соотно |
||||
шения. Пусть значения кодов коррекции равны |
е ь е% е3. |
||||
Тогда фаза х ошибки — решением |
одного из сравнений |
||||
{x-\-'\)el-{-xei=set |
|
по |
модулю N. |
(7-23) |
|
|
|
|
|
|
|
Заметим, что значение первого контрольного |
элемен |
||||
та, определяемого матрицей |
(7-22), |
равно сумме по мо- |
|||
|
L |
|
|
|
|
Иастрайщ^дразраммы |
(по |
место |
|
||
расположению |
и длине массива) |
|
|||
Вычисление |
et*Ea[ |
па модулю |
N |
|
|
i-нечетные |
|
|
|
||
Вычисление |
г2«£а,- па модулю |
N |
|
||
|
i-четные |
|
|
|
Ыа |
\Да |
\Да |
|
Исправление |
ошибок в |
соответствии |
|
с |
найденными |
значениями |
х, е, и е2 |
Рис. 7-26. Структурная схема программы декодирования.
дулю N всех нечетных элементов, а второй контрольный элемент равен сумме всех четных элементов. Другими словами, здесь используется принцип, аналогичный прин ципу вычисления контрольных байтов в дисковых ЗУ IBM/360 2311 (см. начало данного параграфа).
240