Сайт о телевидении

Сайт о телевидении

» » 8b 10b кодирование. Виды и способы кодирование данных. Пропускная способность InfiniBand

8b 10b кодирование. Виды и способы кодирование данных. Пропускная способность InfiniBand

Это продолженеие статьи о помехоустойчивом кодировании, которая очень долго лежала в черновиках. В прошлой части нет ничего интересного с практической точки зрения - лишь общие сведения о том, зачем это нужно, где применяется и т.п. В данной части будут рассматриваться некоторые (самые простые) коды для обнаружения и/или исправления ошибок. Итак, поехали.

Попытался все описать как можно легче для человека, который никогда не занимался кодированием информации, и без каких-либо особых математических формул.

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

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

k/(i+k) , где
k - количество проверочных бит,
i - количество информационных бит.
Например, мы передаем 3 бита и к ним добавляем 1 проверочный бит - избыточность составит 1/(3+1) = 1/4 (25%).

Код с проверкой на четность

Проверка четности – очень простой метод для обнаружения ошибок в передаваемом пакете данных. С помощью данного кода мы не можем восстановить данные, но можем обнаружить только лишь одиночную ошибку.

В каждом пакет данных есть один бит четности , или, так называемый, паритетный бит . Этот бит устанавливается во время записи (или отправки) данных, и затем рассчитывается и сравнивается во время чтения (получения) данных. Он равен сумме по модулю 2 всех бит данных в пакете. То есть число единиц в пакете всегда будет четно . Изменение этого бита (например с 0 на 1) сообщает о возникшей ошибке.
Ниже показана структурная схемы кодера для данного кода

и и декодера

Пример:

Начальные данные: 1111
0 (1 + 1 + 1 + 1 = 0 (mod 2))
Принятые данные: 10 110 (изменился второй бит)
Как мы видим, количество единиц в принятом пакете нечетно, следовательно, при передаче произошла ошибка.

Как говорилось ранее, этот метод служит только для определения одиночной ошибки. В случае изменения состояния двух битов, возможна ситуация, когда вычисление контрольного бита совпадет с записанным. В этом случае система не определит ошибку, а это не есть хорошо. К примеру:
Начальные данные: 1111
Данные после кодирования: 11110 (1 + 1 + 1 + 1 = 0 (mod 2))
Принятые данные: 100 10 (изменились 2 и 3 биты)
В принятых данных число единиц четно, и, следовательно, декодер не обнаружит ошибку.

Так как около 90% всех нерегулярных ошибок происходит именно с одиночным разрядом, проверки четности бывает достаточно для большинства ситуаций.

Код Хэмминга

Как говорилось в предыдущей части, очень много для помехоустойчивого кодирования сделал Ричард Хэмминг . В частности, он разработал код, который обеспечивает обнаружение и исправление одиночных ошибок при минимально возможном числе дополнительных проверочных бит. Для каждого числа проверочных символов используется специальная маркировка вида (k, i), где k - количество символов в сообщении, i - количество информационных символов в сообщении. Например, существуют коды (7, 4), (15, 11), (31, 26). Каждый проверочный символ в коде Хэмминга представляет сумму по модулю 2 некоторой подпоследовательности данных. Рассмотрим сразу на примере, когда количество информационных бит i в блоке равно 4 - это код (7,4), количество проверочных символов равно 3. Классически, эти символы располагаются на позициях, равных степеням двойки в порядке возрастания:
первый проверочный бит на 2 0 = 1;
второй проверочный бит на 2 1 = 2;
третий проверочный бит на 2 2 = 4;

но можно и разместить их в конце передаваемого блока данных (но тогда формула для их расчета будет другая).
Теперь рассчитаем эти проверочные символы:
r1 = i1 + i2 + i4
r2 = i1 + i3 + i4
r3 = i2 + i3 + i4

Итак, в закодированном сообщении у нас получится следующее:
r1 r2 i1 r3 i2 i3 i4

В принципе, работа этого алгоритма разобрана очень детально в статье Код Хэмминга. Пример работы алгоритма , так что особо подробно описывать в этой статье не вижу смысла. Вместо этого приведу структурную схему кодера:

и декодера


(может быть, довольно запутано, но лучше начертить не получилось)

E0,e1,e2 опрделяются как функции, зависящие от принятых декодером бит k1 - k7:

e0 = k1 + k3 + k5 + k7 mod 2
e1 = k2 + k3 + k6 + k7 mod 2
e2 = k4 + k5 + k6 + k7 mod 2

Набор этих значений e2e1e0 есть двоичная запись позиции, где произошла ошибка при передаче данных. Декодер эти значения вычисляет, и если они все не равны 0 (то есть не получится 000), то исправляет ошибку.

Коды-произведения

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


Передаваемая информация кодируется дважды: во внешнем и внутреннем кодерах. Между ними устанавливается буфер, работа которого показана на рисунке:

Информационные слова проходят через первый помехоустойчивый кодер, называемый внешним, т.к. он и соответствующий ему декодер находятся по краям системы помехоустойчивого кодирования. Здесь к ним добавляются проверочные символы, а они, в свою очередь, заносятся в буфер по столбцам, а выводятся построчно. Этот процесс называется перемешиванием или перемежением .

При выводе строк из буфера к ним добавляются проверочные символы внутреннего кода. В таком порядке информация передается по каналу связи или записывается куда-нибудь. Условимся, что и внутренний, и внешний коды – коды Хэмминга, с тремя проверочными символами, то есть и тот, и другой могут исправить по одной ошибке в кодовом слове (количество «кубиков» на рисунке не критично - это просто схема). На приемном конце расположен точно такой же массив памяти (буфер), в который информация заносится построчно, а выводится по столбцам. При возникновении пакетной ошибки (крестики на рисунке в третьей и четвертой строках), она малыми порциями распределяется в кодовых словах внешнего кода и может быть исправлена.

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

Использование кодов-произведений многократно увеличивает мощность помехоустойчивого кода при добавлении незначительной избыточности.

P.S.: Плотно занимался этой темой 3 года назад, когда писал дипломный проект, возможно что-то упустил. Все исправления, замечания, пожелания - пожалуйста через личные сообщения

Каждый вид компьютеров имеет свой внутренний вид кодирования для представления данных – символьной и текстовой информации. Наиболее часто используются коды ASCII (American Standard Code for Information Interchange, американский стандартный код для обмена информацией) и EBCDIC (Extended Binary Coded Decimal Interchange Code, расширенный двоично-десятичный код обмена информацией).

ASCII представляет собой 8-битную кодировку для представления десятичных цифр, латинского и национального алфавитов, знаков препинания и управляющих символов. Первую половину кодовой таблицы (0 - 127) занимают символы US-ASCII, которые включают 95 печатаемых и 33 управляющих символа (разработана ANSI – Американским институтом национальных стандартов). Вторая половина таблицы (128 - 255) содержит национальные шрифты (кириллица) и символы псевдографики. Этот код используется в персональных компьютерах и в несовместимых с IBM больших машинах. На больших компьютерах (мейнфреймах) используется 8-битовый код EBCDIC, разработанный компанией IBM. При передаче данных от одного компьютера к другому может потребоваться перекодировка символов, которая осуществляется системным МО передающего или принимающего компьютеров. Эти действия являются функциями уровня представления модели OSI. Далее рассмотрим наиболее часто применяемые методы кодирования на физическом уровне.

Большинство компьютеров для представления «0» и «1» оперирует стандартными уровнями сигналов (логическими уровнями), которые определяются видом микросхем. TTL-логика представляет 0,5В как «0», и 5В как «1». ECL и CMOS-логики представляют -1,75В как «0», и -0,9В как «1». Для передачи данных, например, в оптоволоконных системах, в трансивере (приемопередатчике) устанавливается специальный чип, обрабатывающий любую логику и выдающий управляющий сигнал источнику света с конвертацией 0,5В и 5В TTL в 0 мA и 50 мА соответственно (включи свет, выключи свет).

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

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

Сигнал в виде импульсной последовательности имеет бесконечный спектр. Основная энергия сигнала сосредоточена в диапазоне частот от нуля до частоты f=1/t о (первый лепесток энергетического спектра сигнала), где t о – бодовый интервал, то есть длительность единичного импульса линейного сигнала.

Теоретически в соответствии с пределом Найквиста максимально допустимая скорость изменения значений дискретного сигнала (B=1/t о, скорость передачи в Бодах) при передаче последовательности прямоугольных импульсов по каналу связи, эквивалентом которого является идеальный ФНЧ с прямоугольной АЧХ и линейной ФЧХ и с частотой среза f гр, равна B max =2f гр. Указанное ограничение связано с наличием переходных процессов на выходе ФНЧ, при этом время нарастания/спада фронта сигнала определяется как

При максимально допустимой скорости передачи сигнала t о =t н. Если интервал t о

Используемый метод физического цифрового кодирования должен достигать несколько целей:

  • Обеспечивать наименьшую ширину спектра сигнала при заданной скорости передачи информации N (Бит/с). Минимизировать величину постоянной составляющей в спектре линейного сигнала.
  • Обеспечивать приемнику возможность тактовой синхронизации (clocking). Так называемые самосинхронизирующиеся коды позволяют приемнику выделять из принимаемого цифрового потока колебание тактовой частоты и затем формировать из него тактовые импульсы при любой статистике битового потока на входе передатчика.
  • Обладать способностью распознавать ошибки
  • Обладать низкой стоимостью реализации.

Рассмотрим методы физического цифрового кодирования сигналов.

Потенциальный код без возвращения к нулю NRZ (Non Return to Zero)

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

Рассмотрим частные случаи передачи данных кодом NRZ (рис.4.1): чередующаяся последовательность нулей и единиц, последовательность нулей и последовательность единиц. Определим частоту основной гармоники спектра сигнала в каждом из этих случаев.

Рис.4.1. Кодирование по методу NRZ

При чередовании единиц и нулей и скорости передачи N (Бит/с) период основной гармоники в спектре сигнала равен T=2t 0 =2/N (с). Частота основной гармоники f 0 равна f о =N/2 (Гц).

При передаче только единиц, или только нулей сигнал в линии представляет собой постоянный ток.

Спектр реального сигнала постоянно меняется в зависимости от того, какова структура данных, передаваемых по линии связи. При передаче длинных последовательностей нулей или единиц, спектр сигнала сдвигается в сторону низких частот. Линейный сигнал NRZ обычно содержит постоянную составляющую и не всегда обеспечивает приемнику возможность синхронизироваться с поступающим сигналом. С другой стороны код NRZ прост в реализации, обладает хорошей помехоустойчивостью (из-за двух резко отличающихся уровней сигнала). Основная энергия сигнала в коде NRZ сосредоточена на частотах от 0 до N/2 (Гц).

В чистом виде код NRZ в сетях не используется. Тем не менее, используются его различные модификации, в которых с успехом устраняют как плохую самосинхронизацию, так и наличие постоянной составляющей.

Потенциальный код с инверсией при единице NRZI (Non Return to Zero with ones Inverted, NRZI)

При этом методе кодирования передаче нуля соответствует уровень сигнала, который был установлен в предыдущем битовом интервале (уровень сигнала не меняется), а при передаче единицы – уровень изменяется на противоположный.

Код используется при передаче по оптоволоконным кабелям, где приемник устойчиво распознает два состояния сигнала - свет и темнота.

Рис.4.2. Кодирование по методу NRZI

Определим частоты основных гармоник линейного сигнала для частных случаев битовых последовательностей.

Для последовательности чередующихся единиц и нулей период сигнала равен T=4t 0 (с), основная частота сигнала f о =N/4 (Гц), при последовательности единиц – f о =N/2 (Гц), при передаче последовательности нулей f о =0 - постоянный ток в линии (или отсутствие света).

Код NRZI использует только два уровня сигнала и поэтому обладает хорошей помехоустойчивостью. Максимальную энергию имеют спектральные составляющие сигнала около частоты N/4 (Гц). Следует отметить, что код NRZI стал основным при разработке улучшенных методов кодирования для систем передачи данных.

Метод биполярного кодирования с альтернативной инверсией (Bipolar Alternate Mark Inversion, AMI, квазитроичный код)

В этом методе используются три значения сигнала –«-1», «0» и «+1». Для различения трех уровней необходимо лучшее соотношение сигнал/шум на входе приемника. Дополнительный уровень требует увеличение мощности передатчика примерно на 3 дБ для обеспечения той же достоверности приема бит на линии. Это общий недостаток кодов с несколькими состояниями сигнала по сравнению с двухуровневыми кодами.

Для кодирования логического нуля используется нулевой потенциал, логическая единица кодируется попеременно либо положительным потенциалом, либо отрицательным.

Рис.4.3. Квазитроичное кодирование (AMI)

При передаче любой битовой последовательности сигнал в линии не содержит постоянную составляющую. При передаче единиц основная гармоника сигнала находится на частоте f o =N/2 (Гц). В случае чередующегося набора единиц и нулей основная гармоника находится на частоте f o =N/4 (Гц), что в два раза меньше чем у кода NRZ. Но остается проблема синхронизации при передаче последовательности нулей.

В целом, для различных комбинаций бит использование кода AMI приводит к более узкому спектру сигнала, чем для кода NRZ. Код AMI предоставляет также некоторые возможности по распознаванию ошибочных сигналов. Так, нарушение строгого чередования полярности сигналов говорит о ложном импульсе или исчезновении корректного импульса.

Манчестерский код (Manchester)

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

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

Рис.4.4. Манчестерское кодирование

При передаче любой битовой последовательности сигнал не содержит постоянную составляющую. Длительность единичного импульса линейного сигнала t 0 равна половине битового интервала, то есть B=2N. Частота основной гармоники сигнала зависит от характера битовой последовательности и находится в диапазоне f о =N/2 – N (Гц).

Манчестерский код используется в сетях Ethernet со скоростью передачи 10 Мбит/с (спецификация 10Bаsе-Т).

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

Потенциальный код 2B1Q

Это потенциальный код с четырьмя уровнями сигнала для кодирования данных. Название отражает суть кодирования – каждые два бита (2В) передаются за один такт сигналом определенного уровня (1Q). Линейный сигнал имеет четыре состояния.

Дибиту «00» соответствует потенциал -2,5 В (-3), «01» - потенциал -0,833 В (-1), «11» - потенциал +0,833 В (+1), «10» - потенциал +2,5 В (+3). Скорость передачи сигнала В при таком кодировании в 2 раза меньше скорости передачи информации N. На рис.4.6 изображен сигнал, соответствующий последовательности бит: 01 01 10 00.

Рис.4.6. Сигнал в коде 2B1Q

Основная частота сигнала не превышает f о =N/4 Гц. Однако для реализации этого метода кодирования мощность передатчика должна быть выше, чтобы четыре значения потенциала четко различались приемником на фоне помех.

Код MLT3 (Multi Level Transmission - 3).

Используются три уровня линейного сигнала: «-1», «0», «+1». Логической единице соответствует обязательный переход с одного уровня сигнала на другой. При передаче логического нуля изменение уровня линейного сигнала не происходит.

При передаче последовательности единиц период изменения уровня сигнала включает четыре бита. В этом случае f о =N/4 (Гц). Это максимальная основная частота сигнала в коде MLT-3. В случае чередующейся последовательности нулей и единиц основная гармоника сигнала находится на частоте f о =N/8 (Гц).

Рис.4.7. Сигнал в коде MLT-3

Логическое кодирование выполняется передатчиком до физического кодирования, рассмотренного выше, обычно средствами физического уровня. На этапе логического кодирования борются с недостатками методов физического цифрового кодирования - отсутствие синхронизации, наличие постоянной составляющей. Таким образом, сначала с помощью средств логического кодирования формируются исправленные последовательности данных, которые потом с помощью методов физического кодирования передаются по линиям связи.

Логическое кодирование подразумевает замену бит исходной информационной последовательности новой последовательностью бит, несущей ту же информацию, но обладающей, кроме этого, дополнительными свойствами.

Различают два метода логического кодирования:

  • избыточные коды;
  • скремблирование.

Избыточные коды основаны на разбиении исходной последовательности бит на группы и замене каждой исходной группы в соответствии с заданной таблицей кодовым словом, которое содержит большее количество бит.

Логический код 4В/5В заменяет исходные группы (слова) длиной 4 бита словами длиной 5 бит. В результате, общее количество возможных битовых комбинаций 25=32 больше, чем для исходных групп 24=16. В кодовую таблицу включают 16 кодовых слов, которые не содержат более двух нулей подряд, и используют их для передачи данных. Код гарантирует, что при любом сочетании кодовых слов на линии не могут встретиться более трех нулей подряд.

Остальные комбинации кода используются для передачи служебных сигналов (синхронизация передачи, начало блока данных, конец блока данных, управление передачей). Неиспользуемые кодовые слова могут быть задействованы приемником для обнаружения ошибок в потоке данных. Цена за полученные достоинства при таком способе кодирования данных - снижение скорости передачи полезной информации на 25%.

Имеются также коды и с тремя состояниями сигнала, например, в коде 8В/6Т для кодирования 8 бит исходной информации используются кодовые слова из 6 элементов, каждый из которых может принимать одно из трех значений. Избыточность кода 8В/6Т выше, чем кода 4В/5В, так как на 28=256 исходных комбинаций приходится 36=729 результирующих комбинаций.

В коде 8B/10В каждые 8 бит исходной последовательности заменяются десятью битами кодового слова. При этом на 256 исходных комбинаций приходится 1024 результирующих комбинаций. При замене в соответствии с кодовой таблицей соблюдаются следующие правила:

  • ни одна результирующая комбинация не должна иметь более 4-х одинаковых бит подряд;
  • ни одна результирующая комбинация не должна содержать более 6 нулей или 6 единиц;

Все рассмотренные избыточные коды применяются в сетях Ethernet, которые нашли самое широкое распространение. Так, код 4B/5B используется в стандартах 100Base-TX/FX, а код 8B/6T - в стандарте 100Base-T4, который в настоящее время практически уже не используется. Код 8B/10В используется в стандарте 1000Base-Х, код 64/66 в стандарте 10 GbE (когда в качестве среды передачи данных используется оптоволокно).

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

Для обеспечения заданной пропускной способности линии передатчик, использующий избыточный код, должен работать с повышенной скоростью (тактовой частотой). Так, для обеспечения скорости передачи информации 100 Мбит/с с использованием кодирования 4В/5В + NRZI передатчик должен работать на скорости 125 МБод. При этом спектр линейного сигнала расширяется. Тем не менее, спектр сигнала избыточного потенциального кода уже спектра сигнала в манчестерском коде, что оправдывает дополнительный этап логического кодирования, а также работу приемника и передатчика на повышенной скорости.

Скремблирование представляет собой "перемешивание" исходной последовательности данных таким образом, чтобы вероятность появления единиц и нулей на линии становилась близкой 0,5. Устройства (или программные модули), выполняющие такую операцию, называются скремблерами (scramble - свалка, беспорядочная сборка).

Скремблер в передатчике выполняет преобразование структуры исходного цифрового потока. Дескремблер в приемнике восстанавливает исходную последовательность бит. Практически единственной операцией, используемой в скремблерах и дескремблерах, является XOR - "побитное исключающее ИЛИ" (сложение по модулю 2).

Рис.4.8. Вариант реализации скремблирования

Пусть, например, скремблер реализует соотношение Вi=Ai+Bi-5+Bi-7.

Здесь Bi – бит результирующего кода, полученный на i-м такте работы скремблера; Ai – бит исходного кода, поступающий в передатчике на вход скремблера на i-м такте; Bi-5 и Bi-7 – биты результирующего кода, полученные на предыдущих тактах работы скремблера, соответственно на «i-5» и «i-7» тактах.

Дескремблер в приемнике восстанавливает исходную последовательность, используя соотношение Ci=Bi+Bi-5+Bi-7=(Ai+Bi-5+Bi-7)+Bi-5+Bi-7=Ai

Выводы

В сетях высокоскоростной передачи данных используются различные виды логического и физического кодирования данных. Логическое кодирование выполняется передатчиком до физического кодирования средствами физического уровня. На этапе логического кодирования борются с недостатками методов физического цифрового кодирования - отсутствие синхронизации, наличие постоянной составляющей. Сформированные исправленные последовательности данных затем с помощью методов физического кодирования передаются по линиям связи.

Дополнительная информация.

Руководство по технологиям объединенных сетей. Cisco systems. Inc. Вильямс. 2004

Контрольные вопросы.

  • Какой вид логического кодирования сигнала применяется в высокоскоростных оптоволоконных системах?
    • Manchester
    • 8B10B
  • Декодируйте линейный сигнал 2B1Q: один символ – один элемент сигнала +1 -1 +1 -1 +3 +3 -3 +1
    • 1 1 0 1 1 1 0 1 1 0 1 0 0 0 1 1
    • 1 0 0 1 1 1 0 0 0 1 0 1 1 0 1 0
    • 0 1 0 1 0 1 0 0 1 1 0 1 1 0 0 0
    • 0 1 0 1 1 1 0 0 0 1 0 1 0 0 1 0
  • Определите скорость передачи линейного сигнала (В, Бод) при манчестерском кодировании, если скорость передачи информации составляет N=64Кбит/с:
    • 131072 Бод
    • 65536 Бод
    • 64 Кбод
    • 128 Кбод

дискретных частотах, что порождает значительный EMI шум. В случае систем с неэкранированными проводами и высокочастотной передачей в 2.5 Гбит/с, EMI шум достигает значительных величин. Скремблирование делает излучаемую мощность канала связи похожей на белый шум. Это помогает обеспечить требования злектромагнитной совместимости.

Скремблер, смотри рис. 2.5.14., реализован на 16-ти битном сдвиговом регистре с обратной связью (LFSR), который реализует полином

G(x) = X16 + X5 + X4 + X3 +1

16-битовый регистр

сдвига с обратной

связью (LFSR) ,

реализующий полином

G(x) = X16 +X5 +X4 + X3 +1

X 1X 2

X 7X 8

X 9X 10

X 13X 14

Регистр сдвига

байта Scr(k:k+7)

Буферный регистр

байта Scr(k:k+7)

Скремблированный

байт (A’B’C’D’E’F’G’H’)

Рис 2.5.14. Скремблер

Некоторые правила реализации скремблера

1. В много линейной реализации канала связи скремблеры, связанные с каждой линией должны работать согласованно, поддерживая одно и то же значение одновременно во всех LFSR

2. Скремблирование применяется к ‘D’ знакам, составляющим пакеты TLP(DLL) и DLLP, включая последовательность логического ожидания (00h). ‘D’ знаки в командных наборах TS1 и TS2 не скремблируются.

3. ‘K’ знаки и знаки в командных наборах, таких как TS1, TS2, SKIP, FTS и электрическое ожидание не скремблируются. Эти знаки минуют логику скремблирования.

4. Знаки, относящиеся к последовательностям согласования не скремблируются.

5. Когда знак COM выходит из скремблера (СОМ не скремблируется) он инициализирует LFSR. Инициализированное значение 16-тибитного LFSR равно FFFFh. Таким же образом, на стороне приемника, когда знак СОМ входит в дескремблер, он инициализируется.

6. С одним исключением LFSR последовательно продвигается восемь раз для передачи каждого знака (D или K знака). LFSR не продвигается на SKP знаках, принадлежащих командным набором SKIP. Причина этого состоит в том, что приемник входящего пакета может добавлять или удалять SKP символы, чтобы произвести подстройку тактового генератора. Изменение числа знаков в приемнике по сравнению с переданным числом знаков приведет к потере синхронизации между значениями LFSR приемника и передатчика.

После скремблирования 8-битные знаки (8b знаки) кодируются в 10битные символы (10b символы) с помощью логики8b/10b кодера . При этом, конечно, происходит 25%-ная потеря реальной скорости передачи из-за расширения каждого 8b знака в 10b символ.Знак определяется как 8-битный не кодрированный байт из пакета. 8-ми битный знак поставляется в 8b/10b кодер вместе с сигналом, показывающим является ли он знаком данных (D) или управляющим знаком (К).Символ определяется как 10-битный кодированный эквивалент 8-ми битного знака.Основная задача 8b/10b

кодирования знаков пакета состоит в том, чтобы создать достаточную плотность переходов 1-в-0 и 0-в-1 в битовом потоке символов так, чтобы

приемник смог выделить в потоке символов синхросигнал с помощью

контура фазовой автоподстройки частоты (PLL)и тем самым решить задачу битовой синхронизации потока символов на входе приемника и задачу кадровой синхронизации входящих пакетов. Заметим, что синхросигнал, используемый для синхронизации последовательного битового потока на выходе из передатчика отдельно не передается по линии связи. Для синхронизации входящих пакетов используется синхросигнал, выделяемый приемником с помощью контура фазовой автоподстройки частоты.

Логика 8b/10b кодирования была изобретена в IBM в 1982 году и изложена в документе ANSI X3.230-1994, статья 11 (а также IEEE 802.3z, 36.2.4) и в патенте США номер 4,486,739, под названием "Byte Oriented DC Balanced 8b/10b Partitioned Block Transmission Code".

Ниже перечисляются преимущества кодирования 8b/10b:

- встроенный синхросигнал;

- баланс постоянного тока;

- кодирование специальных управляющих знаков;

- обнаружение ошибок.

Недостаток 8b/10b кодирования состоит в том, что из-за расширения каждого 8-ми битного знака в 10-ти битный символ перед передачей, реальная скорость передачи уменьшается на 25% .

Свойства 10-тибитных (10b) символов

При передаче 10-ти битных символов, среднее число передаваемых единиц за период времени равно числу передаваемых нулей, вне зависимости от того, какой 8-ми битный знак передается, то есть передача символов сбалансирована по постоянному току.

- Битовый поток 10битного символа никогда не содержит более пяти последовательных единиц или нулей.

Каждый 10-ти битный символ содержит четыре 0 и шесть 1 (не обязательно смежных) или шесть 0 и четыре 1 (не обязательно смежных) или пять 0 и пять 1(не обязательно смежных).

Каждый 10-ти битный символ разделен на два блока: первый длиной шесть бит и второй длиной четыре бита. В 6-ти битном блоке не более четырех 1 или четырех 0. В 4-х битном блоке не более трех 1 или трех 0.

- Любой символ, не обладающий вышеописанными свойствами, считается ошибочным и преемник сообщает об ошибке.

Понятие неравенство символов относится к разности между числом единиц и нулей в 10-тибитном символе. Когда в символе число нулей больше, чем число единиц – этоотрицательное неравенство (например, 0101000101b).

Когда в символе число единиц больше, чем число нулей – это положительное неравенство (например, 1001101110b). Когда в символе одинаковое число единиц и нулей – этонейтральное неравенство (например, 0110100101b).

Каждый 10-ти битный символ содержит одно из следующих количеств нулей и единиц (не обязательно последовательных):

- четыре 0 и шесть 1 (+ неравенство);

- шесть 0 и четыре 1 (- неравенство);

- пять 0 и пять 1 (нейтральное неравенство)

Кодер на выходе выдает эквивалентный 10-ти битный символ вместе с

текущей проверкой четности (Current Running Disparity, CRD), илитекущим неравенством символа (Current Running Disparity,CRD), которое отражает баланс общего числа единиц и нулей, переданных по линии с момента ее инициализации, и имеет следующие характеристики:

Текущее состояние CRD отражает баланс единиц и нулей, переданных с момента инициализации линии;

- начальное состояние CRD (перед передачей данных) может быть положительным (+) или отрицательным ( –);

- текущее состояние CRD может быть положительным (+), если передано больше единиц, чем нулей, или отрицательным (-), если передано больше нулей, чем единиц;

- каждый знак конвертируется по таблице, учитывая текущее состояние

- после того, как закодирован последний символ, CRD остается таким же, если сгенерированный 10-ти битный символ имеетнейтральное неравенство (н), или меняется на противоположную полярность, если сгенерированный символ имеетположительное (+) или отрицательное (–) неравенство .

Процедура кодирования 8b/10b

Кодирование производится путем просмотра двух пар таблиц (одна пара для кодирования знаков данных, другая пара для кодирования знаков команд), Рис.2.5.15. Выбор пары таблиц определяется значением D/K знака. Как для знаков данных, так и для знаков команд биты кодируемого знака ABCDE, поступающие на вход кодера из скремблера, с учетом значения CRD, вычисленного по результатам кодирования предшествующего знака, определяют по соответствующей таблице значения битов abcdei части символа (таблица 5b/6b кодирования). Как для знаков данных, так и для знаков команд биты кодируемого знака FGH, поступающие на вход кодера из скремблера, с учетом значения CRD, вычисленного по результатам кодирования предшествующей части abcdei знака, определяют по соответствующей таблице значения битов fghj части символа (таблица 3b/4b кодирования). Совокупность битов abcdeifghj образует символ знака D/K

ABCDEFGH. По совокупности битов abcdeifghj также вычисляется текущее неравенство символа, которое в свою очередь определяет значение CRD для кодирования следующего знака.

Байт от скремблера

8b текущий знак

Таблица 5b/6b кодирования

для знаков данных

кодиро вания для зна ков команд

дущее значе-

ние символа

Параллельнопоследова-

тельное преобразование

Последовательный поток, тактируемый Tx синхроимпульсом

Рис. 2.5.15. Процедура кодирования 8b/10b

1. Для удобства записи знаки данных и знаки команд из двоичной формы

- биты в знаке обозначаются заглавными буквами от A до H;

- знак разделяется на два блока, первый знак длиной 3 бита (старшие) и второй знак длиной 5 бит (младшие);

- блоки зеркально отображаются;

- знак принимает форму Zxx.y, где:

Z - D или K для знаков данных или управляющих знаков

хх - десятичное значение 5-ти битного поля

у - десятичное значение 3-х битного поля

Выбранный для примера знак 6Ah на рис. 2.5.16.

представляется как D10.3

в таблицах преобразований 8b/10b

8b обозначение

Пример данных

Перестановка

подблоков

Децимальные зна-

чения подблоков

Окончательная

Рис. 2.5.16. Алгоритм перевода знака из двоичной формы в форму имени знака.

2. Если текущее неравенство предыдущего символа положительно (CRD +), то при кодировании 5-ти разрядного блока EDCBA из табл. 2.5.14. (для знака

данных) и из табл. 2.5.15.(для знака команды) выбираются биты abcdei. cоответствующие текущему значению CRD- .

Табл. 2.5.14.. Кодирование 5 бит в 6 бит для знаков данных

Название байта

Некодированные

Текущее RD -

Текущее RD +

биты EDCBA

Если текущее неравенство предыдущего символа отрицательно (CRD -), то при кодировании 5-ти разрядного блока EDCBA из табл. 2.5.14.(для знака

данных) и из табл. 2.5.15. (для знака команды) выбираются биты abcdei. cоответствующие текущему значению CRD + .Т.е. при кодировании 5-ти разрядного блока EDCBA значение CRD меняется на противоположное.

Табл. 2.5.15. Кодирование 5 бит в 6 бит для управляющих знаков

Название байта

Некодированные

Текущее RD -

Текущее RD +

биты EDCBA

3. Вычисляется неравенство для последовательности битов abcdei. Оно может принимать значения: положительное, отрицательное или нейтральное.

4. Если вычисленное значение неравенства положительно или отрицательно (+ или -), то при кодировании 3-х разрядного блока HGF из табл. 2.5.16. (для знака данных) и из табл. 2.5.17. (для знака команды) выбираются биты fghj, cоответствующие текущему положительному или отрицательному значению CRD . Т.е CRD сохраняет предшествующее значение.

Если значение неравенства нейтральное, то при кодировании 3-х разрядного блока HGF из табл. 2.5.16. (для знака данных) и из табл. 2.5.17. (для знака

команды) выбираются биты fghj, cоответствующие текущему

принятому при выборе битов abcdei.

4. Значения битов abcdeifghj составляют символ исходного двоичного знака

5. Вычисляется неравенство для символа abcdeifghj.

6. Если неравенство символа abcdeifghj положительное или отрицательное, то CRD предыдущего символа изменяет свое значение на противоположное. Если неравенство символа abcdeifghj нейтральное, то CRD предыдущего символа сохраняет свое значение.

Табл. 2.5.16. Кодирование 3 бита в 4 бита для знаков данных

Название байта

Некодированные

Текущее RD - fghj

Текущее RD + fghj

биты HGF

Табл. 2.5.17. Кодирование 3 бита в 4 бита для управляющих знаков

Название байта

Некодированные

Текущее RD - fghj

Текущее RD + fghj

биты HGF

Рис. 2.5.17. поясняет логику 8b/10b кодирования последовательности знаков

D10.3, D27.0, D23.7, K23.7, K28.5.

Кодирование управляющих символов

Табл. 2.5.13. иллюстрирует кодирование управляющих знаков, принятых в PCI-XP. Эти знаки не скремблируются передающей логикой, но они

Кодирование на двух нижних каналах характеризует метод представления информации сигналами, которые распространяются по среде транспортировки. Кодирование можно рассматривать как двухступенчатое. И ясно, что на принимающей стороне реализуется симметричное декодирование.

Логическое кодирование данных изменяет поток бит созданного кадра МАС-уровня в последовательность символов, которые подлежат физическому кодированию для транспортировки по каналу связи. Для логического кодирования используют разные схемы:

  • 4B/5B — каждые 4 бита входного потока кодируются 5-битным символом (табл 1.1). Получается двукратная избыточность, так как 2 4 = 16 входных комбинаций показываются символами из 2 5 = 32. Расходы по количеству битовых интервалов составляют: (5-4)/4 = 1/4 (25%). Такая избыточность разрешает определить ряд служебных символов, которые служат для синхронизации. Применяется в 100BaseFX/TX, FDDI
  • 8B/10B — аналогичная схема (8 бит кодируются 10-битным символом) но уже избыточность равна 4 раза (256 входных в 1024 выходных).
  • 5B/6B — 5 бит входного потока кодируются 6-битными символами. Применяется в 100VG-AnyLAN
  • 8B/6T — 8 бит входного потока кодируются шестью троичными (T = ternary) цифрами (-,0,+). К примеру: 00h: +-00+-; 01h: 0+-+=0; Код имеет избыточность 3 6 /2 8 = 729/256 = 2,85. Скорость транспортировки символов в линию является ниже битовой скорости и их поступления на кодирования. Применяется в 100BaseT4.
  • Вставка бит — такая схема работает на исключение недопустимых последовательностей бит. Ее работу объясним на реализации в протоколе HDLC. Тут входной поток смотрится как непрерывная последовательность бит, для которой цепочка из более чем пяти смежных 1 анализируется как служебный сигнал (пример: 01111110 является флагом-разделителем кадра). Если в транслируемом потоке встречается непрерывная последовательность из 1 , то после каждой пятой в выходной поток передатчик вставляет 0 . Приемник анализирует входящую цепочку, и если после цепочки 011111 он видит 0 , то он его отбрасывает и последовательность 011111 присоединяет к остальному выходному потоку данных. Если принят бит 1 , то последовательность 011111 смотрится как служебный символ. Такая техника решает две задачи — исключать длинные монотонные последовательности, которые неудобные для самосинхронизации физического кодирования и разрешает опознание границ кадра и особых состояний в непрерывном битовом потоке.

Таблица 1 — Кодирование 4В/5В

Входной символ Выходной символ
0000 (0) 11110
0001 (1) 01001
0010 (2) 10100
0011 (3) 10101
0100 (4) 01010
0101 (5) 01011
0110 (6) 01110
0111 (7) 01111
1000 (8) 10010
1001 (9) 10011
1010 (A) 10110
1011 (B) 10111
1100 (C) 11010
1101 (D) 11011
1110 (E) 11100
1111 (F) 11101

Избыточность логического кодирования разрешает облегчить задачи физического кодирования — исключить неудобные битовые последовательности, улучшить спектральные характеристики физического сигнала и др. Физическое/сигнальное кодирование пишет правила представления дискретных символов, результат логического кодирования в результат физические сигналы линии. Физические сигналы могут иметь непрерывную (аналоговую) форму — бесконечное число значений, из которого выбирают допустимое распознаваемое множество. На уровне физических сигналов вместо битовой скорости (бит/с) используют понятие скорость изменения сигнала в линии которая измеряется в бодах (baud). Под таким определением определяют число изменений различных состояний линии за единицу времени. На физическом уровне проходит синхронизация приемника и передатчика. Внешнюю синхронизацию не используют из-за дороговизны реализации еще одного канала. Много схем физического кодирования являются самосинхронизирующимися — они разрешают выделить синхросигнал из принимаемой последовательности состояний канала.

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

  • Транзитное кодирование — информативным есть переход из одного состояния в другое
  • Потенциальное кодирование — информативным есть уровень сигнала в конкретные моменты времени
  • Полярное — сигнал одной полярности реализуется для представления одного значения, сигнал другой полярности для — другого. При оптоволоконное транспортировке вместо полярности используют амплитуды импульса
  • Униполярное — сигнал одной полярности реализуется для представления одного значения, нулевой сигнал — для другого
  • Биполярное — используется отрицательное, положительное и нулевое значения для представления трех состояний
  • Двухфазное — в каждом битовом интервале присутствует переход из одного состояния в другое, что используется для выделения синхросигнала.

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

AMI/ABP

AMI — Alternate Mark Inversion или же ABP — Alternate bipolare, биполярная схема, которая использует значения +V, 0V и -V. Все нулевые биты имеют значения 0V, единичные — чередующимися значениями +V, -V (рис.1). Применяется в DSx (DS1 — DS4), ISDN. Такая схема не есть полностью самосинхронизирующейся — длинная цепочка нулей приведет к потере синхронизации.

Рисунок — 1

MAMI — Modified Alternate Mark Inversion, или же ASI — модифицированная схема AMI, импульсами чередующейся полярности кодируется 0, а 1 — нулевым потенциалом. Применяется в ISDN (S/T — интерфейсы).

B8ZS — Bipolar with 8 Zero Substitution, схема аналогичная AMI, но для синхронизации исключает цепочки 8 и более нулей (за счет вставки бит).

HDB3 — High Density Bipolar 3, схема аналогичная AMI, но не допускает передачи цепочки более трех нулей. Вместо последовательности из четырех нулей вставляется один из четырех биполярных кодов. (Рис.2)

Рисунок — 2

Манчестерское кодирование

Manchester encoding — двухфазное полярное/униполярное самосинхронизирующееся кодирование. Текущий бит узнается по направлению смены состояния в середине битового интервала: от -V к +V: 1. От +V к -V: 0. Переход в начале интервала может и не быть. Применяется в Ethernet. (В начальных версиях — униполярное). (рис.3)

Рисунок — 3

Differential manchester encoding — двухфазное полярное/униполярное самосинхронизирующиеся код. Текущий бит узнается по наличию перехода в начале битового интервала (рис. 4.1), например 0 — есть переход (Вертикальный фрагмент), 1 — нет перехода (горизонтальный фрагмент). Можно и наоборот определять 0 и 1.В середине битового интервала переход есть всегда. Он нужен для синхронизации. В Token Ring применяется измененная версия такой схемы, где кроме бит 0 и 1 определенны также два бита j и k (Рис. 4.2). Здесь нет переходов в середине интервала. Бит К имеет переход в начале интервала, а j — нет.

Рисунок — 4.1 и 4.2

Трехуровневое кодирование со скремблированием который не самосинхронизуется. Используются уровни (+V, 0, -V) постоянные в линии каждого битового интервала. При передаче 0 значения не меняются, при передаче 1 — меняются на соседние по цепочке +V, 0, -V, 0, +V и тд. (рис. 5). Такая схема является усложнонным вариантом NRZI. Применяется в FDDI и 100BaseTX.

Рисунок — 5

NRZ и NRZI

NRZ — Non-return to zero (без возврата к нулю), биполярная нетранзиктивная схема (состояния меняются на границе), которая имеет 2 варианта. Первый вариант это недифференциальное NRZ (используется в RS-232) состояние напрямую отражает значение бита (рис. 6.а). В другом варианте — дифференциальном, NRZ состояние меняется в начале битового интервала для 1 и не меняется для 0. (рис.6.Б). Привязки 1 и 0 к определенному состоянию нету.

NRZI — Non-return to zero Inverted, измененная схема NRZ (рис. 6.в). Тут состояния изменяются на противоположные в начале битового интервала 0, и не меняются при передаче 1. Возможна и обратная схема представления. Используются в FDDI, 100BaseFX.

Рисунок — 6-а,б,в

RZ — Return to zero (с возвратом к нулю), биполярная транзитивная самосинхронизирующаяся схема. Состояние в определенный момент битового интервала всегда возвращается к нулю. Имеет дифференциальный/недифференциальный варианты. В дифференциальном привязки 1 и 0 к состоянию нету. (рис. 7.а).

Рисунок — 7-а,б

FM 0 — Frequency Modulation 0 (частотная модуляция), самосинхронизирующийся полярный код. Меняется на противоположное на границе каждого битового интервала. При передаче 1 в течение битового интервала состояние неизменное. При передаче 0, в середине битового интервала состояние меняется на противоположное. (рис. 8). Используется в LocalTalk.

Рисунок — 8

PAM 5 — Pulse Amplitude Modulation, пятиуровневое биполярное кодирование, где пара бит в зависимости от предыстории оказывается одним из 5 уровней потенциала. Нужен неширокая полоса частот (вдвое ниже битовой скорости). Используется в 1000BaseT.

Здесь пара бит оказывается одним четверичным символом (Quater-nary symbol), где каждому соответствует один из 4 уровней сигнала. В табллице показано представление символов в сети ISDN.

4B3T — блок из 4 бит (16 состояний) кодируется тремя троичными символами (27 символов). Из множества возможных методов изменений рассмотрим MMS43, который используется в интерфейсе BRI сетей ISDN (таблица). Тут применяются специальные методы для исключения постоянной составляющей напряжения в линии, в следствии чего кодирования ряда комбинаций зависит от предыстории — состояния, где находится кодер. Пример: последовательность бит 1100 1101 будет представлена как: + + + — 0 -.

Двоичный код S1 Переход S2 Переход S3 Переход S4 Переход
0001 0 — + S1 0 — + S2 0 — + S3 0 — + S4
0111 — 0 + S1 — 0 + S2 — 0 + S3 — 0 + S4
0100 — + 0 S1 — + 0 S2 — + 0 S3 — + 0 S4
0010 + — 0 S1 + — 0 S2 + — 0 S3 + — 0 S4
1011 + 0 — S1 + 0 — S2 + 0 — S3 + 0 — S4
1110 0 + — S1 0 + — S2 0 + — S3 0 + — S4
1001 + — + S2 + — + S3 + — + S4 — — — S1
0011 0 0 + S2 0 0 + S3 0 0 + S4 — — 0 S2
1101 0 + 0 S2 0 + 0 S3 0 + 0 S4 — 0 — S2
1000 + 0 0 S2 + 0 0 S3 + 0 0 S4 0 — — S2
0110 — + + S2 — + + S3 — — + S2 — — + S3
1010 + + — S2 + + — S3 + — — S2 + — — S3
1111 + + 0 S3 0 0 — S1 0 0 — S1 0 0 — S3
0000 + 0 + S3 0 — 0 S1 0 — 0 S2 0 — 0 S3
0101 0 + + S3 — 0 0 S1 — 0 0 S2 — 0 0 S3
1100 + + + S4 — + — S1 — + — S2 — + — S3

Итог

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

Часто название протокола доступа к среде передачи в соответствующей конфигурации - «петля с арбитражем доступа» (Fibre Channel Arbitrated Loop, FC-AL) - используют в качестве эквивалента названия технологии Fibre Channel. Однако, по иронии судьбы, получивший такую известность протокол не входил в первоначальный вариант стандарта и лишь впоследствии был принят в качестве дополнения к нему.

Ниже мы рассмотрим основные процедуры, протоколы и технологии уровня передачи FC-1 и сигнального уровня FC-2 и, в частности, непосредственно сам арбитраж доступа.

КОДИРОВАНИЕ 8B/10B

Рисунок 1. Преобразование 8В/10В.

Уровень FC-1 определяет протокол передачи, в том числе правила кодирования и декодирования, специальные символы и контроль ошибок. В соответствии со схемой кодирования 8B/10B блоки данных из 8 бит преобразуются в блоки данных из 10 бит. Эта схема была изначально разработана компанией IBM для ESCON и позволяет, в частности, обеспечить баланс напряжения постоянного тока.

Некодированная информация разбивается на блоки по 8 бит: A, B, C, D, E, F, G, H, плюс контрольная переменная Z (см. Рисунок 1). Последняя может принимать значение D в случае обычных символов данных (D-типа) или K в случае специальных символов (K-типа). Эта информация преобразуется в соответствии с правилами 8B/10B в так называемый передаваемый символ (Transmission Character) из 10 бит: a, b, c, d, e, i, f, g, h, j. Правила, в частности, предусматривают, что передаваемый символ D-типа должен содержать не менее четырех нулей и единиц, причем число идущих подряд нулей или единиц не должно быть больше четырех. Каждый имеющий смысл передаваемый символ имеет свое обозначение Zxx.y в соответствии со следующим соглашением: Z - контрольная переменная; xx - десятичное значение двоичного числа, составленного из битов E, D, C, B и A, а y - десятичное значение двоичного числа, составленного из битов H, G, F. Так, например, передаваемый символ для специального (т. е. К-типа) байта 10111100 обозначается как K28.5. Иногда он называется также запятой (comma).

Каждый байт данных или специальный символ имеет два (возможно, одинаковых) передаваемых кода, т. е. каждый передаваемый символ имеет два представления, в частности K28.5 может быть представлен и как десятибитовая последовательность 0011111010, и как 1100000101. Какое из двух возможных представлений будет выбрано для передачи, зависит от значения «текущего дисбаланса» (Running Disparity, RD). Двоичный параметр RD вычисляется на основании баланса 0 и 1 в подблоках передаваемого символа. 1 соответствует сигналу с большей оптической мощностью (для оптических каналов) или сигналу с большим напряжением на контакте +, чем на контакте - (в случае медных линий). Текущий дисбаланс вычисляется после первых шести битов каждого передаваемого символа и затем после последних четырех его битов. Дисбаланс может быть положительным (больше единиц, чем нулей) или отрицательным (больше нулей, чем единиц). Такая схема призвана обеспечить равенство нулей и единиц с течением времени.

Всевозможных 10-битовых комбинаций больше, чем реально используется для представления 256 обычных символов. Таким образом, при получении 10-битовой последовательности битов, не соответствующей ни D-типу, ни K-типу, получатель сигнализирует об ошибке кодирования. Кроме того, как отправитель, так и получатель вычисляют новое значение текущего дисбаланса. Если полученный символ имеет отличное от ожидаемого значение дисбаланса (которое получатель определяет на основании предыдущего значения), то получатель сигнализирует об ошибке дисбаланса. Такой подход позволяет реализовать контроль ошибок. Вообще же, вероятность возникновения ошибки при передаче данных составляет ничтожную величину 10-12.

АРБИТРАЖ ДОСТУПА

В отличие от двух других топологий Fibre Channel, в случае петли с арбитражем доступа входящие в нее устройства вынуждены конкурировать друг с другом за доступ к среде передачи. Право передачи предоставляется тому из них, кто выиграет процедуру арбитража. Арбитраж осуществляется следующим образом.

При наличии данных для передачи устройство должно вначале получить контроль над петлей. Для этого оно передает кодовое слово - примитив арбитража ARBx (Arbitrate Primitive Signal), где x соответствует физическому адресу (Arbitrated Loop Physical Address, AL_PA). Если примитив ARBx возвращается обратно, то устройство получает контроль над петлей, после чего оно может передать адресату примитив открытия соединения (Open Primitive Signal, OPN). После этого два устройства взаимодействуют фактически напрямую. Все остальные устройства между ними служат лишь пассивными повторителями передаваемых данных.

Если же доступ к петле хотят получить одновременно несколько устройств, то тогда они сравнивают содержащийся в примитиве ARB адрес со своими собственными. Если участвующее в арбитраже устройство имеет больший адрес, то оно передает полученный примитив дальше без изменений; если же оно имеет меньший адрес, то полученный примитив изымается из обращения, и это устройство передает примитив со своим адресом. Таким образом, арбитраж выигрывает устройство с наименьшим адресом. Получившее контроль над петлей устройство может сохранять его неограниченно долго. Правда, стандарт предусматривает алгоритм обеспечения справедливого доступа (Access Fairness Algorithm), в соответствии с которым устройство не имеет права повторно участвовать в арбитраже, пока всем остальным устройствам не будет предоставлена возможность установить контроль над петлей. К сожалению, реализация этого алгоритма не является обязательной.

ИНИЦИАЛИЗАЦИЯ ПЕТЛИ

Функционирование петли возможно только после ее инициализации, причем после появления в петле нового устройства или отключения от нее имевшегося вся процедура должна повторяться заново. Инициализация состоит в назначении устройствам (точнее, их портам) физических адресов AL_PA.

Адрес AL_PA записывается в младший байт трехбайтного идентификатора адреса (Native Address Identifier, S_ID для отправителя и D_ID для получателя). Однако, в целях соблюдения баланса нулей и единиц, адрес AL_PA может в действительности принимать только 127 разных значений. В случае, если петля связывает более 127 устройств, некоторым из них адреса не достанется, и они будут переведены в пассивный режим (Nonparticipating Mode). В этом режиме устройство только повторяет передаваемые по петле слова. Если петля является автономной, т. е. не подключена к коммутатору, то первые два байта идентификатора остаются пустыми.

Процедура инициализации петли состоит из трех этапов и начинается с передачи примитива инициализации петли (Loop Initialization Primitive, LIP). При включении питания порт передает LIP и тем самым инициирует передачу этого примитива всеми остальными портами. Далее устройства в петле должны выбрать главного (master) для контроля за процессом выбора адресов. Когда петля подключена к коммутатору, главным назначается порт коммутатора; в противном случае главным выбирается порт с наименьшим именем (Port_Name). Наконец, порты выбирают себе адреса в соответствии со следующими приоритетами: назначенный коммутатором, используемый при предыдущей инициализации, запрограммированный производителем, свободный из оставшихся. В конце выбранный главным порт передает примитив CLS о завершении процедуры инициализации.

АДРЕСАЦИЯ

В отличие от многих других технологий локальных сетей, где используется фиксированный MAC-адрес длиной 6 байт, Fibre Channel использует динамически назначаемые при регистрации адреса - так называемые адресные идентификаторы. Адреса в диапазоне от FFFFF0 до FFFFFE (здесь и далее в этом разделе в шестнадцатеричном представлении) закреплены за определенными адресатами - коммутирующей структурой (Fabric), сервером многоадресной рассылки (Multicast Server) и т. д. Адрес FFFFFF зарезервирован для широковещательной рассылки. Адреса назначаются при регистрации в коммутирующей структуре. До регистрации идентификатор адреса не определен и равен 000000.

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

Однако, чтобы инициализация и регистрация вообще были возможны, т. е. чтобы можно было назначить адресные идентификаторы, порты необходимо каким-то образом идентифицировать. Это достигается за счет использования фиксированных именных идентификаторов (Name_Identifier). Именные идентификаторы служат для идентификации портов (Port_Name), узлов (Node_Name) и коммутаторов (Fabric_Name).

КОНТРОЛЬ ПОТОКОВ

Применяемый на уровне FC-2 контроль потоков позволяет согласовать скорость отправки кадров с возможностями коммутирующей структуры и конечных устройств-получателей по их обработке. Лежащая в основе идея достаточно проста: устройство может передавать кадры, только когда другое устройство готово их принять.

В соответствии с правилами Fibre Channel, при установлении соединения между ними устройства должны пройти взаимную регистрацию (login). Одним из результатов регистрации является открытие кредитов. Кредит - это количество кадров, которое отправитель может передать без получения подтверждения об их обработке. Fibre Channel использует два типа контроля потоков: межбуферный (buffer-to-buffer) и сквозной (end-to-end). Какой из механизмов применяется в каждом конкретном случае, зависит от сервисного класса (о сервисных классах см. статью «Fibre Channel» в предыдущем номере LAN). Сквозной контроль потоков используется в случае Класса 1, а межбуферный контроль потоков - для Класса 3; в случае Класса 2 применяются оба типа контроля потоков.

Межбуферный контроль потоков осуществляется по обоим концам прямого канала между узловым портом N_Port и коммутирующим портом F_Port или между двумя узловыми портами N_Port в двухточечной конфигурации. Порты с обеих сторон канала обмениваются друг с другом значениями числа кадров BB_Credit, которые каждый из них готов принять. Например, порт A готов принять X кадров, а порт B - Y кадров. Таким образом, BB_Credit для порта A устанавливается равным Y, а для порта B он будет равным X. Эти значения кредитов остаются неизменными на протяжении всего срока регистрации.

Каждый порт ведет учет числа отправленных им кадров, подтверждение о принятии которых не было получено. Первоначальное значение этого счетчика BB_Credit_CNT устанавливается равным 0 и с каждым отправленным кадром увеличивается на 1. При получении примитива о готовности получателя к приему (Receiver_Ready Primitive Signal, R_RDY) значение счетчика уменьшается на 1. Сигнал R_RDY означает, что получатель обработал кадр, освободил место в буфере и готов к приему следующего кадра. При достижении BB_Credit_CNT значения, равного BB_Credit, передача приостанавливается до получения R_RDY.

Процедура сквозного контроля во многом аналогична вышеописанной, за одним существенным исключением: скорость обмена согласуется двумя конечными устройствами. Как и в предыдущем случае, два взаимодействующих устройства согласуют во время регистрации размер буферов приема EE_Credit. При передаче каждого кадра значение счетчика EE_Credit_CNT увеличивается на 1. При получении кадра с подтверждением (ACK Link Control) значение счетчика уменьшается на указанную в подтверждении величину (кадры ACK позволяют подтвердить получение очередного кадра, нескольких кадров или всей последовательности кадров).

СИНТАКСИЧЕСКАЯ СТРУКТУРА

Вся информация в Fibre Channel передается блоками по четыре передаваемых символа. Эти блоки называются передаваемыми словами (Transmission Word). Начинающиеся с символа K28.5 слова являются служебными (Ordered Set). Сигнальный протокол определяет три типа служебных слов.

Ограничители начала и конца кадра (Start-Of-Frame, SOF и End-Of-Frame, EOF) определяют границы кадра. Отдельные примитивы (Primitive Signal) Idle и Receiver Ready сигнализируют, соответственно, о состоянии готовности порта к приему/передаче и о наличии места в буфере для приема последующих кадров. Последовательности примитивов (Primitive Sequence) Not Operational (NOS), Link Reset (LR) и т. п. представляют собой повторяющиеся служебные слова (не менее 3 раз подряд) и сигнализируют о специфическом состоянии порта.

В свою очередь, при передаче слова (за исключением примитивов) объединяются в кадры (см. Рисунок 2). Кадр начинается с ограничителя начала кадра SOF. За ним следует заголовок кадра длиной в шесть слов, где, в частности, указывается адреса получателя и отправителя. Основное содержимое кадра представляет полезная нагрузка (в принципе, она может и отсутствовать). Поле полезной нагрузки может также содержать вспомогательный заголовок. Завершается кадр контрольной последовательностью CRC и еще одним служебным словом EOF. Таким образом, длина кадра варьируется от 9 слов (36 10-битных байт) до 537 слов (2148 байт) при максимальной полезной нагрузке. Именно кадрами оперирует коммутирующая структура.

Каждый кадр может содержать самодостаточную информацию (например, команду SCSI) или же разбитую для удобства передачи часть целостного информационного массива (например, файла). Такой логически составляющий единое целое блок данных называется последовательностью (Sequence), или, в традиционной терминологии, пакетом. Каждая последовательность идентифицируется с помощью идентификатора Seq_ID в заголовке кадра, а положение кадра в последовательности - с помощью его порядкового номера Seq_Cnt. Таким образом, получатель способен восстановить правильную последовательность кадров, даже если они прибудут в ином порядке по сравнению с тем, в каком были отправлены.

Взаимодействие между приложениями происходит в контексте обмена или сеанса (exchange) между инициатором (originator) и реципиентом (responder). При передаче первого кадра инициатор присваивает данному диалогу номер OX_ID, этот идентификатор затем будет указываться во всех передаваемых реципиентом кадрах в качестве Exchange_ID. В свою очередь, в первом ответном кадре реципиент указывает номер RX_ID, который он присвоил данному обмену, этот идентификатор также будет затем указываться во всех передаваемых инициатором кадрах. Таким образом, и получатель, и отправитель могут однозначно определить, какому именно высокоуровневому протоколу или приложению им следует передать полученные данные.

НА ВСЕ СЛУЧАИ

Технология Fibre Channel находит себе многочисленные применения, в том числе в кластерах и сетях устройств хранения (Storage Area Network, SAN). Основные области применения Fibre Channel мы рассмотрим в следующем номере.

Дмитрий Ганьжа - ответственный редактор LAN. С ним можно связаться по адресу: