Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
430
Добавлен:
01.06.2015
Размер:
20 Мб
Скачать
☆

Память типа fifo

Во многих случаях ОЗУ применяется для буферизации потока данных, когда дан­ные считываются из памяти в той же последовательности, в которой они туда за­носились, но поступление и считывание происходят с различной скоростью. Час­то для этой цели применяют обычное ОЗУ, однако здесь одновременная запись и считывание информации невозможны. Более эффективным видом ОЗУ, где оба действия могут вестись одновременно, служит память типа FIFO. Микросхема представляет собой двухпортовое ОЗУ, где один порт предназначен для занесе­ния информации, а второй — для считывания. Для FIFO-памяти характерны все технологические приемы, свойственные двухпортовой памяти, в частности способы арбитража при одномоментном обращении к одной и той же ячейке.

В то же время есть и существенные отличия.

Первое состоит в том, что у микросхемы нет входов для указания адреса ячейки, занесение и считывание данных производится в порядке их поступления через одну входную точку и одну выходную.

Второе отличие связано с необходимостью слежения за состоянием очереди. Для этого в микросхеме имеются регистры-указатели адресов начала и конца очереди, а также специальные флаги, которые указывают на две ситуации: отсутствие данных (в этом случае блокируется считывание из микросхемы) и полное заполнение памяти (блокируется запись).

Обнаружение и исправление ошибок

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

Вне зависимости от того, как именно реализуется контроль и исправление ошибок, в основе их всегда лежит введение избыточности. Это означает, что контроли­руемые разряды дополняются контрольными разрядами, благодаря которым и воз­можно детектирование ошибок, а в ряде методов — их коррекция. Общую схему обнаружения и исправления ошибок иллюстрирует рис. 5.15.

На рисунке показано, каким образом осуществляются обнаружение и исправление ошибок. Перед записью М-разрядных данных в память производится их обработка, обозначенная на схеме функцией «f», в результате которой формируется добавочный К-разрядный код. В память заносятся как данные, так и этот вычис­ленный код, то есть (М+К)-разрядная информация. При чтении информации повторно формируется К-разрядный код, который сравнивается с аналогичным кодом, считанным из ячейки. Сравнение приводит к одному из трех результатов:

- Не обнаружено ни одной ошибки. Извлеченные из ячейки данные подаются на выход памяти.

- Обнаружена ошибка, и она может быть исправлена. Биты данных и добавочного кода подаются на схему коррекции. После исправления ошибки в М-раз­рядных данных они поступают на выход памяти.

- Обнаружена ошибка, и она не может быть исправлена. Выдается сообщение о неисправимой ошибке.

Коды, используемые для подобных операций, называют корректирующими кодами или кодами с исправлением ошибок.

Простейший вид такого кода основан на добавлении к каждому байту инфор­мации одного бита паритета. Бит паритета — это дополнительный бит, значение которого устанавливается таким, чтобы суммарное число единиц в данных, с уче­том этого дополнительного разряда, было четным (или нечетным). В ряде систем за основу берется четность, в иных — нечетность. Для 64-разрядного слова требу­ется восемь битов паритета, то есть ячейка памяти должна хранить 36 разрядов. При записи слова в память для каждого байта формируется бит паритета. Это мо­жет быть сделано с помощью схемы в виде дерева, составленного из схем сложе­ния по модулю 2. При чтении из памяти выполняется аналогичная операция над считанными информационными битами, а ее результат сравнивается с битом па­ритета, вычисленным при записи и хранившимся в памяти. Метод позволяет об­наружить ошибку, если исказилось нечетное количество битов. При четном числе ошибок метод неработоспособен. К сожалению, фиксируя ошибку, данный способ кодирования не может указать на ее местоположение, что позволило бы внести исправления, в силу чего его называют кодом с обнаружением ошибки (EDC — Error Detection Code).

В основе корректирующих кодов лежит достаточно простая идея [39]. Для кон­троля двоичного информационного кода длиной М бит добавим к ней К дополни­тельных контрольных разрядов так, что общая длина последовательности теперь будет равна М + К разрядам. В этом случае из возможных N = 2М"К комбинаций интерес представляют только L = 2м последовательностей, которые называют: разрешенными. Оставшиеся N- L последовательностей назовем запрещенными. Если при обработке (записи в память, считывании или передаче) разрешенной кодовой последовательности произойдут ошибки и возникнет одна из запрещенных после­довательностей, то тем самым эти ошибки обнаруживаются. Если же ошибки пре­вратят одну разрешенную последовательность в другую, то такие ошибки не могут быть обнаружены. Для исправления ошибок необходимо произвести разбиение множества запрещенных последовательностей на L непересекающихся подмножеств и каждому подмножеству поставить в соответствие одну из разрешенных последовательностей. Тогда, если была принята некоторая запрещенная последо­вательность, входящая в одно из подмножеств, считается, что передана разрешен­ная последовательность, соответствующая этому подмножеству, производится за­мена, чем и исправляется возникшая ошибка.

Простейший вариант корректирующего кода также может быть построен на базе битов паритета. Для этого биты данных представляются в виде матрицы, к каждой строке и столбцу которой добавляется бит паритета. Для 64-разрядных данных этот подход иллюстрирует табл. 5.1 [200]. Здесь D — биты данных, С — столбец битов паритета строк, К — строка битов паритета столбцов, Р — бит паритета, кон­тролирующий столбец С и строку К. Таким образом, к 64 битам данных нужно до­бавить 17 бит паритета: по 8 бит на строки и столбцы и один дополнительный бит для контроля строки и столбца битов паритета. Если в одной строке и одном столбце обнаружено нарушение паритета, для исправления ошибки достаточно просто инвертировать бит на пересечении этих строки и столбца. Если ошибка паритета выявлена только в одной строке или только одном столбце либо одновременно в нескольких строках и столбцах, фиксируется многобитовая ошибка и формирует­ся признак невозможности коррекции.

Таблица 5.1. Формирование корректирующего кода для 64-битовых данных

Недостаток рассмотренного приема в том, что он требует большого числа до­полнительных разрядов. Более эффективным представляется код, предложенный Ричардом Хэммингом и носящий его имя (код Хэмминга). Логику этого кода для четырехразрядных слов (М = 4) иллюстрирует диаграмма Венна2, приведенная на рис. 5.16

Три пересекающихся окружности образуют семь сегментов. Четырем битам данных назначаются внутренние сегменты (см. рис. 5.16, а), а остальные сегменты заполняются битами паритета. Биты паритета

Рис. 5.16. Иллюстрация кода Хэмминга для четырехразрядного слова

выбираются таким образом, чтобы общее число единиц в каждой окружности было четным (см. рис.. 5.16, б). Так, поскольку окружность А содержит одну единицу, бит паритета для нее принимается равным 1. Теперь, если в результате ошибки изменится один из битов данных (см. рис. 5.16, в), это легко выявить. Путем проверки паритета обнаруживаются несоответствия в окружностях А и В. Для окружности Б несоответствия нет. Только один из семи сегментов присутствует в окружностях А и В и отсутствует в Б, и ошибка может быть исправлена за счет изменения бита в этом сегменте (см. рис. 5.16, г).

Для пояснения концепции, положенной в основу кода Хэмминга, построим код, обнаруживающий и исправляющий однобитовые ошибки в 8-разрядных словах (пример взят из [47]).

Сначала определим требуемую длину корректирующего кода. В соответствии с рис. 5.15, на вход схемы сравнения поступают два К-разрядных значения. Срав­нение производится путем поразрядной операции «исключающее ИЛИ» (сложе­ние по модулю 2) над входными кодами. Результатом является так называемое слово синдрома. В зависимости от того, было ли совпадение входных кодов или нет, соответствующий бит синдрома будет равен 0 или 1.

Слово синдрома состоит из К разрядов, то есть его возможные значения лежат в диапазоне от 0 до 2К - 1. Значение 0 соответствует случаю, когда ошибки не об­наружено, остальные 2К — 1 случая свидетельствуют о наличии ошибки и указывают на ее местоположение.

Поскольку ошибка может возникнуть в любом из М битов данных или К контрольных битов, мы должны иметь 2к - 1 > М + К. Это выраже­ние позволяет определить число битов, необходимое для исправления одиночной ошибки в М-разрядных данных.

В табл. 5.2 приведено количество корректирующих разрядов, нужное для конт­роля данных различной разрядности. Из таблицы видно, что для 8-разрядных слов требуется четыре корректирующих разряда.

Для удобства будем формировать четырехразрядный синдром со следующими характеристиками:

- Если синдром содержит все нули, значит, не обнаружено ни одной ошибки.

- Если синдром содержит единственную единицу в одном из разрядов, это озна­чает, что выявлена ошибка в одном из четырех корректирующих разрядов и ни­какой коррекции не требуется.

- Если в синдроме в единичное состояние установлены несколько битов, то чис­ленное значение синдрома соответствует позиции ошибки в данных, для исправ­ления которой необходимо инвертировать бит в этой позиции.

Таблица 5.2. Количество корректирующих разрядов, используемое в коде Хэмминга

Разрядность

Исправление одиночной ошибки

Исправление одиночной ошибки Обнаружение двойной ошибки

Контрольные биты

% увеличения длины кода

Контрольные биты

% увеличения длины кода

8

4

50

5

62,5

16

5

31,25

6

37,5

32

6

18,75

7

21,875

64

7

10,94

8

12,5

128

8

6,25

9

7,03

256

9

3,52

10

3,91

Под контрольные разряды отводятся те биты, чьи позиционные номера пред­ставляют собой степень числа 2 (табл. 5.3). Отдельный контрольный разряд от­вечает за определенные биты данных. Так, разрядная позиция п контролируется теми битами Р/, которые делают справедливым соотношение = п. Например, раз­ряд данных с позиционным номером 710 (01112) контролируется битами 4, 2 и 1 (7 = 4 + 2 + 1), а разряд с номером 1010 (10102) - битами 8 и 2 (10 = 8 + 2).

Таблица 5.3. Распределение разрядов 12-разрядного слова между данными и контрольным кодом

Десятичный номер позиции

12

11

10

9

8

7

6

5

4

3

2

1

Двоичный код номера позиции

1100

1011

1010

1001

1000

0111

оно

0101

0100

0011

0010

0001

Биты данных

D8

D7

D6

D5

D4

D3

D2

D1

Контрольные

Р3

Р4

Р2

Р

биты

Таким образом, для рассматриваемого случая значения контрольных разрядов вычисляются по следующим правилам:

Проверим корректность такой схемы на примере. Пусть входной код равен 00101011, где разряду Д соответствует правая цифра. Контрольные разряды вы­числяются следующим образом:

Предположим, что данные в бите 3 содержат ошибку и там вместо 0 находит­ся 1. После пересчета контрольных разрядов имеем

Путем сложения по модулю двух результатов старой и новой проверок полу­чим слово синдрома (S8S4S2S1)

Результат 01102 (610) означает, что в разряде 6, содержащем третий бит данных, присутствует ошибка.

Описанный код называется кодом с исправлением одиночной ошибки (SEC — Single Error Correcting). В большинстве микросхем памяти используется код с ис­правлением одиночной и обнаружением двойной ошибки (SECDED — Single Error Correcting, Double Error Detecting). Из табл. 5.2 видно, что, по сравнению с SEC, такой код требует одного дополнительного контрольного разряда.

Коды с исправлением ошибок применяются в большинстве ВМ. Например, в ос­новной памяти ВМ типа IBM ЗОхх используется 8-разрядный код SECDED на каж­дые 64 бита данных, то есть емкость памяти примерно на 12% больше, чем имеет в своем распоряжении пользователь. В ВМ типа VAX на каждые 32 разряда данных добавлен 7-разрядный код SECDED, следовательно, избыточность составляет 22%.

242

Структура одного из вариантов построения устройства для обнаружения оди­нарных и двойных ошибок с коррекцией одинарных ошибок приведена на рис. 5.17. Схема предназначена для контроля 16-разрядных данных и размещается между процессором и памятью. Из табл. 5.2 видно, что код SECDED предполагает шесть дополнительных разрядов. Таким образом, из процессора и в процессор поступа­ют 16-разрядные коды (UD15 ...UD0), а в память заносятся 22-разрядные данные (М21... М0). Хранящаяся в ячейках памяти информация состоит из 16 бит инфор­мации (MD15... MD0) и 6 контрольных битов (МР5... МР„). В последующем первые буквы в обозначении разрядов могут быть опущены, при этом D будет означать информационный разряд кода, а Р — контрольный разряд.

Система размещения основных и контрольных разрядов была рассмотрена ра­нее, и для данной схемы она приведена в табл. 5.4.

Таблица 5.4. Распределение информационных и контрольных разрядов в 22-разрядном слове

Номер позиции

22

21

20

19

18

17

16

15

14

13

12

Биты данных

D15

D14

D13

D12

D11

D10

D9

D8

D7

Контрольные биты

Р5

P4

Номер позиции

11

10

9

8

7

6

5

4

3

2

1

Биты данных

D6

D5

D4

D3

D2

D1

D0

Контрольные биты

Р3

Р2

Р1

P0

Контрольные разряды Р4... Р0 вычисляются по стандартной схеме кода Хэмминга:

Особенность, рассматриваемой схемы состоит в способе формирования конт­рольного разряда Р5. Он вычисляется путем суммирования по модулю 2 всех ос­тальных 21 разрядов кода (D15... Da и МР4... МР„). По мнению авторов рассматри­ваемой схемы, это облегчает фиксацию факта неисправимой двойной ошибки.

При чтении из памяти формирователем синдрома вычисляется синдром S4... S0:

Здесь Р4... Р0 — контрольные разряды, вычисленные генератором контрольных разрядов на основании информационных битов считанного из памяти кода (MD15... MD0). MP5... МР0 — такие же контрольные разряды, полученные тем же генерато­ром, но перед записью информации в память и хранившиеся там вместе с основной информацией.

Рис. 5.17. Схема обнаружения одинарных и двойных ошибок с коррекцией одинарных.

Если синдром не равен нулю, то он указывает на позицию иска­зившегося бита при одиночной ошибке. С учетом контрольного разряда Р5 воз­можны четыре ситуации, показанные в табл. 5.5.

Таблица 5.5. Обнаружение ошибок

Синдром

Р5

Тип ошибки

Примечания

0

0

Ошибки нет

#0

1

Одиночная ошибка

Корректируемая: синдром указывает на позицию искаженного разряда

#0

0

Двойная ошибка

Неисправимая

0

1

Ошибка

в контрольном разряде

Искажен контрольный разряд Р5, и он может быть откорректирован

Сигнал Чт/Зп на схеме определяет выполняемую операцию. Чт/Зп = 1 означает чтение из памяти, а Чт/Зп = 0 — запись в память.

Проанализировав полученный синдром и разряд Р5, обнаружитель ошибки фор­мирует двухразрядный код ошибки Е1Е0 (табл. 5.6).

Таблица 5.6. Кодирование ошибок

Код ошибки (Е1 , ЕО)

Описание

00

Ошибки нет

01

Одиночная ошибка — исправимая

10

Двойная ошибка — неисправимая

11

Ошибка в контрольном разряде — исправимая