микросхемы ПЛИС Speedster22i от Д^гошх:
самые быстрые и самые большие. Часть 4
Иосиф КАРШЕНБОИМ
Данная статья продолжает цикл материалов, посвященных ПЛИС Speedster22i HD1000 от компании ДсИгошх [1]. В этой части мы рассмотрим вопросы, связанные с работой аппаратного контроллера интерфейса ^еМакеп [2].
Введение
Описание интерфейса Interlaken мы начнем с упоминания о его предшественнике, интерфейсе пакетной передачи данных System Packet Interface Level 4 Phase 2 — SPI4.2 [3-5], принятом в 2003 году. Он использовался в качестве одного из основных интерфейсов для передачи данных от микросхемы к микросхеме, например для соединения сетевых процессоров (NPUs) с Ethernet-коммутатором или с трансиверами Ethernet (PHY).
Хотя интерфейс SPI4.2 реализует эффективный протокол для трафика данных, передающихся в канале связи, и имеет эффективное управление потоком в канале, но число линий связи физического интерфейса и синхронный способ передачи данных по интерфейсу ограничивают возможности пропускной способности SPI4.2 и его эффективную производительность. Протокол SPI4.2 не масштабируем, что делает его неподходящим для приложений, требующих скорости передачи данных большие, чем у OC-192 или 10-Гбит Ethernet.
Интерфейс Interlaken представляет собой интерфейс передачи данных от микросхемы к микросхеме по последовательному каналу связи, который сохраняет и расширяет возможности SPI4.2 с помощью масштабирования интерфейса, таким образом позволяя ему поддерживать различные требования к пропускной способности.
Поскольку физический интерфейс Interlaken реализуется на основе SerDes с синхронной передачей данных и с восстановлением данных и синхрочастоты на приемном конце, то Interlaken может использоваться как для передачи данных от микросхемы к микросхеме на одной плате, так и для передачи данных по бэкплейну или по кабелям.
Стандарт Interlaken
Стандарт Interlaken — это стандарт высокоскоростной передачи данных, разрабо-
танный компаниями Cisco Systems и Cortina Systems в 2006 году. Interlaken оптимизирован для надежной передачи с высокой пропускной способностью пакетов данных (10, 100 Гбит/с и более). Он основан на формировании каналов передачи данных и на функции управления потоком канала в соответствии с SPI4.2. Поскольку стандарт базируется на последовательной передаче с применением высокоскоростной технологии SerDes, при этом сокращается количество микросхем, задействованных для передачи данных, и число контактов ввода/вывода. Для передачи данных между двумя устройствами несколько физических каналов приема/передачи данных могут быть объединены в один логический канал, у которого есть возможность выполнять противодавление, есть средства для защиты целостности данных. Это позволяет значительно повысить производительность оборудования связи. Interlaken является единожды оплачиваемым протоколом связи, и его применение не требует роялти (royalty-free). В 2007 году был сформирован союз Interlaken Alliance [6].
Протокол Interlaken
Описание протокола Interlaken
Интерфейс Interlaken является высокоскоростным интерфейсом с последовательным способом передачи данных одновременно по нескольким линиям связи [7]. Основные характеристики интерфейса Interlaken:
• Поддержка 256 каналов передачи, или до 64К с расширением канала. При этом производительность масштабируется с увеличением числа линий связи.
• Простая структура слова управления позволяет одновременно формировать пакеты, подобные SPI4.2.
• Непрерывное следование метафреймов друг за другом с программируемой частотой, что гарантирует выравнивание по ли-
ниям связи, синхронизирует скремблер, выполняет компенсацию ухода синхро-частоты и позволяет оценивать правильность работы линий связи.
• Независимость протокола от числа линий связи с SerDes и скоростей работы SerDes.
• Простые опции управления потоком данных в канале, с простыми командами Xon/Xoff.
• Кодирование данных по 64B/67B.
Есть две фундаментальные структуры, которые определяются в протоколе Interlaken, — формат передачи данных и метафрейм. Формат передачи данных основан на концепции стандарта SPI4.2. Данные, передаваемые по интерфейсу, сегментируются в пакеты, которые являются подмножествами исходных пакетных данных. Каждый пакет ограничен двумя словами управления: одно следует в начале пакета, а другое — в его конце. В этих словах управления встроены субполя, указывающие или на предшествующие им данные, или на данные, следующие за ними, чтобы определить начало пакета (start-of-packet), конец пакета (end-of-packet), обнаружение ошибок (error detection) и другие случаи.
Логический канал передачи данных может представлять собой набор физических линий связи. Данные, передаваемые по интерфейсу, связываются с логическим каналом. То есть каждый передаваемый пакет данных связывается с логическим каналом, способным представить физический сетевой порт в системе или быть некоторым другим логически соединенным потоком данных. Пакетные данные передаются последовательно с помощью одного или нескольких пакетов, и размер пакетов является конфигурируемым параметром. Большие объемы данных разбиваются на более мелкие пакеты, при этом интерфейс позволяет чередовать передачу данных от различных каналов для работы с низкой задержкой.
Данные к приемникам
Линия связи О
Линия связи 1
Линия связи 2
Данные/управление Байты ВО, В1, В2.....BN
во В8 В16
В7 В15 В23
Линия СВЯЗИ М
3N+-
BN
Рис. 1. Разбивка передаваемых данных и слов управления по линиям связи для интерфейса Inteгlaken
66 6463 Слово данных 7 0
В0 В1 В2 ВЗ В4 В5 В6 В7
66 64 63 62 Слово управления пакета/неактивного состояния 0
Формат описан далее
Рис. 2. Формат слов данных и слов управления, передаваемых по линиям связи для интерфейса Interlaken
Метафрейм поддерживает передачу данных по множеству SerDes и представляет собой набор из четырех уникальных слов управления, которые определяются для того, чтобы обеспечить выравнивание по линиям связи, работу скремблера, компенсацию ухода синхрочастоты и диагностические функции. Сами метафреймы формируются при передаче данных, используя определенное форматирование слов управления, чтобы отличить слова управления от данных.
Формат передачи данных и метафреймы подробно описаны в следующих разделах.
Формат передачи
Данные передаются по интерфейсу Interlaken по заранее сконфигурированному числу линий связи с SerDes. Таким образом, линии связи определяются как симплексный последовательный канал между передатчиком и приемником. Стандарт протокола создан так, чтобы можно было работать с любым числом линий связи, начиная с одной линии, но без какого-либо заданного максимума для числа линий. Фактическая реализация может представлять собой фиксированное количество определенных линий связи, и нет каких-либо требований для того, чтобы поддерживать переменное число линий связи.
Основная единица данных, отправленных по интерфейсу, — 8-байтовое слово. Это число выбирается для того, чтобы применять кодер по стандарту кодирования 64B/67B, и такой же размер имеет слово управления, используемое для формирования пакетов. Поскольку основной размер блока данных для передачи равен размеру слова управления, это предоставляет возможность легко скорректировать разрядность интерфейса.
Данные и слова управления чередуются по линиям связи последовательно, начиная с линии 0 и заканчивая линией М, и далее они повторяются для следующего блока данных, как это показано на рис. 1.
Кодирование по 64B/67B происходит индивидуально в каждой из линий связи. Передача данных осуществляется при передаче всего двух типов слов: собственно слов данных и слов управления, передающих состояние канала «передача пакета/нет передачи» (Burst/Idle Control Word), которые отличают по битам определения фрейма в 64B/67B. Формат обоих типов слов иллюстрируется на рис. 2.
И данные, и управляющая информация передаются в следующем порядке: в каждом байте от старшего бита к младшему от бита [66] и до бита [0]. На уровне кадров (Framing Layer) в поток вставляются четыре дополнительных слова управления, которые далее описываются в разделе о фреймировании.
Структура пакетов и процедура передачи данных
Пропускная способность интерфейса Interlaken определяется тем, как пакеты
передаются по множеству физических каналов. Данные отправляются по интерфейсу одним или несколькими пакетами, которые разграничены между собой одним или более словами управления, как это описано в разделе о формате слов управления.
В стандарте определяются два основных параметра, позволяющих разбить большие пакеты данных произвольного размера на более мелкие пакеты:
• BurstMax — максимальный размер пакета данных, представляет собой число, кратное 64 байтам.
• BurstShort — минимальный размер пакета данных — это минимум 32 байт, с приращениями по 8 байт.
При обычной работе интерфейса происходит отправка пакетов данных, имеющих длину BurstMax, и эти данные сопровождаются словом управления. В устройстве передачи есть логика, назначающая порядок следования пакетов по нескольким линиям связи, и она может выбрать любой порядок, в котором обслуживаются эти линии, но с учетом ограничения состояния по управлению потоком. Пакеты передаются в каждом канале и в каждой линии связи, и только тогда, когда пакет полностью отправлен, начинается новая пакетная передача в этой линии связи указанного канала.
Поскольку интерфейс работает одновременно по нескольким линиям в канале передачи, конец пакета может прийти одновре-
менно на нескольких линиях связи с очень небольшим количеством остающихся данных в каждой линии. Для обработки такого сценария необходимо, чтобы и память передатчика, и память приемника были идеально синхронизированы с каналом передачи данных, состоящим из нескольких линий связи. Чтобы оптимальным образом построить канал передачи данных, и в приемнике, и в передатчике применяется параметр BurstShort, который гарантирует минимальное разделение по времени между последовательными словами управления в пакетах. Минимальный интервал BurstShort составляет 32 байт, но может иметь и большие значения, с приращениями от 32 байт по 8 байт.
На рис. 3 показано минимальное количество слов, определенное параметром BurstShort и вставленное в пакет для разделения.
Для того чтобы выполнить BurstShort, в пакет перед следующим словом управления, с которого он начинается, вставляются дополнительные слова, показывающие неактивное состояние канала. В примере, приведенном на рис. 3, в слове управления неактивным состоянием Idle Control Word 1 есть флаг EOP_Format (рис. 4), который указывает на конец пакета (EOP, End-of-Packet), его значение определяет размер пакета и указывает на последнее слово данных — Last Data Word. Также производится вычисление CRC24, подсчитанной для слова управления неактивным состоянием Idle Control Word 1 и по-
Дополнительные слова управления неактивного состояния для Bu retS hört
X X X X X X X X 1 (0 с * X X X <0 к 11 X § CN о; il х g m к il X g
X X X X X X X X S s il S fr s ft
га Ш а со га га а га œ s g. с о 5 а> а> га g RH
s о s о s о s о s о s о s о s о И si ai
О о о о о о о О о о о 5 S с s ° 5! X a» X Я s Ф
64-байтовый пакет
t
Последнее слово в пакете
Начало следующего пакета
Рис. 3. Формат слов данных и слов управления, передаваемых по линиям связи для интерфейса Interlaken
следнего слова данных. Далее вставляются слова управления неактивным состоянием Idle Control Word 1, Idle Control Word 2 и Idle Control Word 3 для того, чтобы создать паузу в передаче данных BurstShort. Затем вставлено очередное слово управления, которое относится к данным, отправленным после него и входящим в следующий пакет.
Есть и другой вариант передачи
Простое планирование распределения данных по линиям связи, описанное выше, в результате приводит к некоторым простоям при отправлении информации в конце пакета, поскольку необходимо передать сообщения о длине пакета и BurstMax и не дает возможности полностью загрузить пропускную способность тракта.
Когда длина части пакета BurstMax невелика и есть небольшое количество данных, которые еще надо отправить после последнего BurstMax, передаются дополнительные слова управления неактивного состояния, чтобы гарантированно отправить BurstShort. В худшем случае эта неиспользованная пропускная способность составляет (BurstShort - 1) байтов на пакет. Однако возможно и более эффективное планирование, если далее просмотреть пакет и определить в нем положение EOP. Следующая процедура иллюстрирует такой механизм и предлагается как дополнительная возможность для оптимизации производительности интерфейса.
Для этого определяется дополнительный параметр BurstMin, как число, кратное 32 байт, согласно следующему ограничению:
BurstMin <= BurstMax/2 and BurstMin >= BurstShort;
использование этого параметра описывается далее.
Существует дополнительный алгоритм для реализации более эффективного механизма передачи пакетов. Если передатчик действует каким-либо другим образом, чтобы сегментировать пакеты, то в логике приемника не требуется дополнительного оборудования до тех пор, пока соблюдаются параметры BurstShort и BurstMax. Например, могут быть ситуации, когда надо выполнить преобразование из одного типа интерфейса в другой, где переформатирование пакетов привело бы к ненужным дополнительным затратам оборудования. Есть и другие алгоритмы планирования, и разработчики могут создать их, учитывая все те ограничения, которые были определены выше.
Формат слова управления
Пакеты определяются посредством 8-байтового слова управления. Слово управления идентифицируется в потоке данных при использовании кода управления «х10» для битов [66:64] и бита [63] = 1. Формат слова данных и слова управления для неактивного состояния линии показан на рис. 4.
Формат слова управления пакета и слова управления неактивным состоянием (Idle/Burst Control Word) представлен в таблице 1.
Слово управления пакета/ неактивного состояния
бит 66 65 64 63 62 61 60
57 56 55
40
Бит инверсии
"10" фреймирование
"1" слово управления Тип
Старт пакета Формат конца пакета Сброс календаря
Программное
управление
потоком
передачи данных
Номер канала
Многоцелевые биты
CRC24
Слово управления фреймом
бит 66 - Бит инверсии
65
64 "10" фреймирование
63 "0" слово управления
62
Тип блока
58
57
Специальный
формат
для типа блока
0
Рис. 4. Формат слов управления (Control Word Format)
Слово управления пакетом (Тип = 1) указывает на начало пакета данных. Каждая пакетная передача данных должна начаться со слова управления пакетом, и к следующим за ним данным будут применены поля «старт пакета» (SOP) и «номер канала» (Channel Number). Когда слово управления пакетом попадает между пакетами данных, то поля EOP_Format и поля CRC применяются к данным, сразу предшествующим слову управления пакетом, а поля «старт пакета» (SOP) и «номер канала» (Channel Number) — к данным, следующим сразу за словом управления пакетом (чтобы работать так же, как и в SPI4.2).
Слово управления неактивным состоянием (Тип = 0) всегда передается, когда нет новых данных для отправления. Поскольку информация об управлении потоком должна всегда отправляться к приемному устройству, то поля управления потоком передаются и в слове управления неактивным состоянием, и в слове управления пакетом, и передатчик всегда отправляет текущее состояние управления потоком в обоих типах слов управления.
В поле EOP_Format в слове управления пакетом показано, сколько байтов последнего слова данных пакета входят в передаваемый пакет. Байты, которые не входят в пакет, отбрасываются приемником. Условно, первый входящий в пакет байт передается в битовом поле [63:56], второй входящий в пакет байт в битовом поле [55:48] и т. д.
Целостность данных и управления обеспечивается посредством 24-разрядного CRC. Контрольная сумма CRC24 вычисляется для всех данных в пакете и всех полей в слове управления. Полином CRC24 выбирается в соответствии с [8]:
x24+x2l+x20+xll+xlb+xll+x'+X8+X6+x5+x+1.
Диаграммы состояний
Логика работы основных компонентов интерфейса иллюстрируется следующими диаграммами состояний приемной и переда-
Таблица 1. Формат слова управления пакета и слова управления неактивным состоянием (Idle/Burst Control Word)
Поле Позиция двоичного разряда Функция
Инверсия (Inversion) 66 Инверсия битов [63:0], чтобы ограничить текущий сдвиг нулевого уровня (running disparity); «1» — инвертированы, «0» — не инвертированы
Фреймирование (Framing) 65:64 Кодирование по 64B/67B, чтобы отличить слова управление и слова данных; «01» — данные, «10» — управление
Управление (Control) 63 Если этот бит установлен в «1», это слово управления неактивным состоянием или слово управления пакетом; если бит в «0», это слово управления уровнем фрейма (Framing Layer)
Тип(Type) 62 Если этот бит установлен в «1», то допустимы номер канала и поля SOP, и пакет данных будет следовать за этим словом управления (слово управления пакетом); если бит установлен в «0», то поле номера канала и поля SOP недопустимы и данные не следуют за этим словом управления (слово управления неактивным состоянием)
Старт пакета (SOP) 61 Старт пакета. Если этот бит установлен в «1», то после этого слова управления происходит запуск пакета данных; если установлен в «0», то пакет данных, который следует за этим словом управления, является или серединой или концом пакета
Формат конца пакета (EOP_Format) 60:57 Это поле сообщает информацию о пакете данных, предшествующему этому слову управления. Информация кодируется следующим образом: «1xxx» — конец пакета, биты [59:57] определяют число допустимых байтов в последнем 8-байтовом слове в пакете. Биты [59:57] кодируются так, что: «000» — означает, что допустимы 8 байт, «001» — означает допустимый 1 байт, и т. д. «111» — означает допустимые 7 байт; допустимые байты запускаются с позиции двоичного разряда [63:56]. «0000» — нет конца пакета, нет ошибки. «0001» — ошибка и конец пакета. Все другие комбинации являются неопределенными
Сброс календаря (Reset Calendar) 56 Если этот бит установлен в «1», то он указывает, что программное управление состоянием потока передает информацию о начале календаря канала
Программное управление потоком передачи данных (In-Band Flow Control) 55:40 1-разрядное состояние управления потоком для текущих 16 календарных записей; «1» — канал или каналы, представленные записью в календаре, установлены в состояние Xon; «0» — канал, представленный записью в календаре, установлен в состояние Xoff.
Номер канала (Channel Number) 39:32 Канал, связанный с пакетом данных, передающимся после этого слова управления; для слова управления неактивным состоянием биты устанавливаются в нули.
Многоцелевые биты (Multiple-Use) 31:24 В зависимости от приложения это поле может служить нескольким целям. Если требуются дополнительные каналы, то есть более чем 256 каналов, то эти 8 бит могут использоваться в качестве расширения номера канала, представляя 8 младших значащих битов номера канала. Если требуются дополнительные биты управления потоком в программном управлении, то эти биты могут использоваться для того, чтобы представить состояние управления потоком для 8 календарных записей после 16 календарных записей, представленных в битах [55:40]. Эти биты могут также быть зарезервированы в специфичных для приложения целях
Проверка контрольной суммы CRC24 23:0 Проверка контрольной суммы CRC, которая производится по предыдущему пакету данных (если он был) и по этому слову управления
Потеряно восстановление
данных, границы слова или синхронизация скремблера
-
Нет Каждая из приемных линий исправна?
1 Да
Нет Линии выровнены?
1 Да
Установить управление потоком в ON
Каждая из приемных линий исправна?
Да
Процесс приема данных
рис. 5. Диаграмма состояний каждой линии связи в приемной части интерфейса
рис. 6. Диаграмма состояний приемной части интерфейса
ющей частей интерфейса и узла контроля интерфейса. Каждый приемник интерфейса с SerDes работает согласно диаграмме, приведенной на рис. 5.
Все линии связи на приемной стороне, соединенные вместе как один логический канал связи, работают согласно алгоритму, показанному на рис. 6.
Как только приемная сторона интерфейса переходит в состояние состояние RX Operational state, интерфейс приемника становится свободен и готов принимать данные. При этом передатчику дается разрешение передать по всем линиям связи состояние ON, сообщающее абоненту о том, что приемник готов принимать и передатчик может передавать данные.
Сторона передачи интерфейса, а именно все линии связи, объединенные вместе в логический канал связи, работает согласно схеме на рис. 7.
Управление потоком передачи данных
Главной особенностью Interlaken является возможность оказывать противодавление на канал связи, то есть при заполнении буферов приемника приостанавливать передатчик до тех пор, пока приемник не выберет данные из своего буфера. Для выполнения этой функции предусмотрены две возможности, которые определяются в интерфейсе управления потоком для канала. Одна действует вне тракта передачи данных и называется out-of-band flow control, или «внеполос-ное управление», а другая действует внутри тракта передачи данных и называется in-band flow control, или «внутриполосное управление». Но автор, по аналогии со старым добрым RS-232, предлагает воспользоваться проверенными терминами: «программное и аппаратное управление потоком передачи данных».
Так же как и в RS-232, информация об управлении потоком использует простой релейный механизм on-off, чтобы отправить разрешение на передачу в определенном канале связи.
Релейное состояние управления потоком on/off передается по одному биту состояния для каждого поддерживаемого канала. Условно, «1» выбирается для того, чтобы идентифицировать состояние Xon, указывая на разрешение для передатчика, отправить данные в этом канале. «0» идентифицирует состояние Xoff, указывая передатчику, что он должен прекратить отправлять данные в этом канале.
Для работы этого протокола нет каких-либо ограничений, и как только канал связи встал в состояние Xon, передатчик может передавать данные без каких-то ограничений на их количество до тех пор, пока состояние управления потоком не изменяется на Xoff. Порог, посредством которого приемник будет переключаться между состоянием Xon и состоянием Xoff, является программиру-
Рис. 7. Диаграмма состояний передающей части интерфейса
емой опцией, определяемой пользователем, и зависит от числа поддерживаемых линий связи, емкости буферов приемников в каждой из этих линий связи и задержки управления потоком данных в данной конкретной аппаратуре.
Теперь дадим описание календаря. Календарем в интерфейсе ШегЪкеп называется блок, находящийся между приемником и передатчиком. Этот блок содержит таблицу записей, отображающую состояние каждого канала. Блок-схема календаря и статуса календаря и их связь с приемной и передающей частями интерфейса приведена на рис. 8. Календарь используется для управления потоком, то есть приемник сообщает передатчику о своей неготовности/загруженности и передатчик соответственно принимает решение о дальнейшей работе с пакетами. Он может их отправлять или не передавать. В самом календаре записывается достаточно много значений, потому что их данные можно распределить между виртуальными каналами. Также данные можно распределить между пакетами разной приори-
Данные и управление
ТХ MAC
Тх-календарь
Захват статуса
Rx-календарь
Календарь и статус
ТХ PCS
Управление календарем для Тх
Счетчики «J Статус
статуса «1 линии
RX MAC
Ошибка по CRC24
RX PCS
Rx
тетности внутри каждого виртуального канала, то есть обеспечить QoS в случае перегрузки интерфейса пакетами. При этом сама форма записей в календаре жестко не закреплена спецификацией и отдана на откуп под различные реализации интерфейса.
В календаре могут быть дополнительно отображены каналы управления потоком так, чтобы само управление воспроизводилось в любом наборе календарных записей. Например, состояние потока данных может представлять собой отображение одного канала в одну запись в календарь или в несколько календарных записей, чтобы одновременно разрешить или запретить работать определенной группе каналов, или выполнить вставку нулевых полей для нескольких каналов.
Эта календарная структура может также использоваться для обеспечения управления потоком канального уровня, посредством чего один бит в календаре дает разрешение на передачу данных в интерфейсе в целом. Статус состояния канала связи будет определяться битом разрешения работы канала на передачу. Состояние канала «1» указывает на разрешение для передачи, а «0» — на немедленное прекращение передачи в канале. Чтобы разрешить работать этой функции, каждая календарная запись может быть сконфигурирована для отправления информации либо о статусе определенного канала, либо о состоянии соединения. Чтобы получить меньшие задержки (низкую латентность) при передаче информации о состоянии соединения, интерфейс должен осуществить достаточно много календарных записей и программировать состояние канала связи в каждом слове управления при передаче данных в пакете или в неактивном состоянии. Записи производятся в одних и тех же позициях битов в словах управления. Приведем пример, как это выполняется при использовании более чем 16 каналов.
• Первое слово управления:
- календарная Запись 0 = состояние соединения (link status);
- календарная Запись 1 = статус канала «0»;
- календарная Запись 2 = статус канала «1»;
- и т. д.
• Второе слово управления:
- календарная Запись 15 = состояние соединения (link status);
- календарная Запись 16 = статус канала «15».
При использовании этого метода состояние канала связи всегда передается в слове управления пакетом или неактивным состоянием канала в позиции бита [55].
Аппаратное управление потоком передачи данных
Для систем, которые работают в симплексном режиме, в качестве поддержки управления потоком имеется опция аппаратного (out-of-band) управления потоком. Она реализуется дополнительными сигналами, работающими как синхронный интерфейс, и определяется следующими сигналами:
• FC_CLK — синхрочастота, по которой синхронизируются биты управления потоком;
• FC_DATA — информация о статусе управления потоком (один бит);
• FC_SYNC — синхросигнал, по которому определяется начало календаря для управления потоком (flow control calendar). Стандарт выводов для каждого из этих сигналов может быть или
LVDS, или LVCMOS. Взаимодействие и синхронизация этих сигналов показаны на рис. 9. Сигналы FC_DATA и FC_SYNC передаются
FC CLK
_г
FC_DATA CalO Cal^X Cal2 Cal3 CRC3 CRC2 CRC1 CRCO CalO Call
Рис. 8. Блок-схема календаря и статуса календаря и их связь Рис. 9. Временная диаграмма сигналов при аппаратном управлении потоком
с приемной и передающей частями интерфейса (пример для четырех календарных записей)
на скорости передачи данных, и синхронизация производится под каждый положительный и отрицательный фронты относительно сигнала FC_CLK. При этом параметры по синхронизации будут одинаковы и на положительном, и на отрицательном фронтах синхрочастоты.
Аппаратный канал управления потоком защищен при вычислении 4-разрядных контрольных сумм CRC4, которые покрывают до 64 бит данных управления потоком. Полином CRC4, вычисляемый по рекомендациям в [8]:
x4x+1.
Когда число каналов меньше или равно 64, то контрольная сумма CRC4 сразу же передается после последнего календарного слота и сопровождается словом состояния управления потоком календарного слота 0. Когда число календарных слотов больше 64, контрольная сумма CRC4 передается один раз для каждых 64 битов состояния управления потоком. Для последней группы календарных слотов контрольная сумма CRC4 передается после последнего поддерживаемого календарного слота. Затем сразу передается состояние календарного слота 0.
Программное управление потоком передачи данных
Используя опцию программного управления потоком (In-Band Flow Control), приемник обрабатывает биты состояния в управлении потоком (flow control status), которые были переданы в словах управления, отправленных по интерфейсу как часть нормальной передачи данных. Эта возможность реализуется для полнодуплексных каналов связи, требующих минимального числа внешних сигнальных контактов.
Как показано на рис. 4, поле Flow Control в слове управления составляет 16 битов, расположенных в позициях двоичных разрядов [55:40]. Биты [31:24] в слове управления могут также использоваться еще для 8 битов управления потоком. В итоге для управления могут быть задействованы все 24 бита.
Эти биты представляют состояние управления потоком в режиме ON/OFF для каждого календарного канала Interlaken, с текущей календарной записью x в бите [55], календарная запись x+1 в бите [54], и т. д. Чтобы синхронизировать запуск календаря, календарный бит сброса устанавливается в слове управления пакетом/неактивным состоянием. Когда этот бит равен «1», календарная запись в бите [55] переводится в состояние «0». Когда бит сброса календаря устанавливается в «0», то календарь последовательно продолжается от того состояния, в котором он закончился при предыдущем слове управления. Как только все состояние каналов будет передано, передатчик устанавливает бит сброса календаря, и весь процесс
повторяется. В последнем слове управления календаря (то есть когда число каналов не является кратным числом для битов состояния) не требуются какие-либо дополнительные биты, все они игнорируются приемником и устанавливаются в «0» передатчиком.
Поскольку вычисление CRC24 для слова управления покрывает поле Flow Control, нет какого-либо специального требования для независимой проверки на ошибку и здесь не применяется вычисление CRC4, выполняемое для опции аппаратного управления потоком.
Информация об управлении потоком всегда отправляется и в слове управления неактивным состоянием, и в слове управления пакетной передачи данных.
Поскольку слова управления отправляются между каждой пакетной передачей данных, то худший случай появления информации об управлении потоком будет при появлении одного сообщения при каждой максимальной длине пакета. Это позволяет разработчику выбрать значение BurstMax, необходимое для заданной пропускной способности канала по управлению потоком.
В качестве примера вычисления производительности для интерфейса с 256-байтовым пакетом и 48 каналов приведены данные в канале во время календарной передачи:
Данные в канале = = (2 пакета)х(256 байт/пакет)+ +(2 слова управления)х х(слово на 8 байт/управление) = 528 байт.
Управление потоком
для режима передачи полного пакета
Интерфейс Interlaken не только оптимизируется для работы в плане чередования передачи по различным каналам, он функционирует с приложениями, для реализации которых необходима передача полных пакетов без разбиения их на части. Для этих приложений устройство передачи просто перестает переключаться от одного канала к другому до тех пор, пока в текущем канале не завершает передачу пакета.
Существует две интерпретации управления потоком в режиме передачи, когда только по одной линии передается полный пакет (full-packet mode). Это остановка передачи непосредственно после получения сообщения Xoff или завершение передачи текущего пакета, перед тем как остановить дальнейшую передачу. Первая интерпретация позволяет иметь в приемнике буфер меньшего размера, а вторая — предлагает противоположное компромиссное решение, поскольку здесь нужен буфер большего размера, причем текущий пакет будет принят полностью и передан на дальнейшую обработку.
Поскольку различные приложения требуют различных режимов работы, то может быть реализована как первая, так и вторая интерпретация работы протокола или обе
интерпретации одновременно в совместимых реализациях проектов.
Расширение управления потоком
Для некоторых приложений может понадобиться другая методология управления потоком, отличная от предусмотренной стандартом 1П:ег1акеп Xon/Xoff. В 1П:ег1акеп непосредственно не определено то, как это можно осуществить, но подобная реализация рассматривается как функция более высокого уровня, и она может быть произведена с помощью дополнительного канала или нескольких каналов для обработки дополнительной информации. При обработке это расширение рассматривается как часть полезной нагрузки данных, и любой протокол более высокого уровня может быть создан и достоверно передан поверх интерфейса Мейакеп.
Краткий обзор уровней фрейма
В интерфейсе 1П:ег1акеп определяется несколько уровней, которые позволяют достигнуть простого и надежного выполнения режима передачи данных. Эти уровни состоят из следующих компонентов (табл. 2), и каждый из них определен в следующих разделах.
Таблица 2. Краткий обзор уровней структурирования
Функция Цель
Кодирование по64В/67В Определяет границы 8-байтных слов. Определяет слова данных и слова управления. Убирает вандер нулевого уровня в приемнике
Синхронное скремблирование Гарантирует плотность переходов. Исключает умножение ошибки
Выравнивание линий Выравнивание линий в пределах устройства
Диагностика Проводит диагностику и опционально передает сообщения о статусе
Пропуск Компенсирует разность синхрочастот в репитере
Выравнивание скоростей Оптимизирует проект при выравнивании скоростей передачи данных от Ывг!аквп к последующим каналам передачи
Кодирование 64B/67B
Метод кодирования/скремблирования применяется для организации работы последовательного интерфейса и позволяет формировать границы слова, производить восстановление синхрочастоты, а также поддержать баланс по постоянному току. Протокол кодирования, выбранный для Interlaken, является модификацией кодирования по 64B/66B, используемого для спецификаций IEEE 802.3ae для 10-Гбит Ethernet.
Существующее кодирование по 64B/66B в 802.3 позволяет проводить формирование границы слова, комбинируя декодированные полезные данные с двумя дополнительными восстановленными битами, которые дополнительно принимаются на каждые 64-разрядные данные или слово управления. Если эти синхронизирующие биты равны значению «01», то они указывают на слово данных, и если они имеют значение «10», то указывают на слово управления, а комбинации «00» и «11» являются запрещенными. Приемное устройство производит сравнение входного
потока данных с теми паттернами, которые ему заданы для определения границы слова. При совпадении приемное устройство принимает решение об установке захвата границы слова после 64 корректных соответствий принятых данных и паттерна, и это состояние захвата непрерывно удерживается при получении соответствия принимаемого потока данных и заданного в этих двух битах паттерна. Но у такого подхода есть один недостаток — неограниченный дрейф нуля приемника.
Рассмотрим этот вопрос подробнее. Если в передаваемой последовательности импульсов будет присутствовать постоянная составляющая, то сигнал на приемной стороне будет также смещен относительно нулевого уровня. Поэтому при кодировании данных для передачи по линии связи необходимо выполнять кодирование таким образом, чтобы на приемном конце смещение нуля по постоянному напряжению было бы как можно меньшим, а в идеале стремилось к нулю. Это позволяет передавать по линии сигналы максимальной амплитуды, а значит, работать на самой высокой частоте и на самой длинной линии связи. Если же в передаваемом сигнале есть постоянная составляющая, то он будет принят с искажениями либо при передаче не окажется возможности передавать импульсы с полной амплитудой. Дрейф нуля приемника, или неустойчивость по постоянному напряжению, вызывается накопленным избытком переданных импульсов, имеющих уровень «1» или «0», и переданных в конкретной линии связи SerDes. В канале передачи для каждого импульса есть вполне определенное время, за которое сигнал переходит из одного состояния в другое. Но в высокоскоростных интерфейсах часто невозможно получить полный размах сигнала по напряжению из-за смещения в напряжении нулевого уровня для приемника и, соответственно, для глазковой диаграммы, снятой для какой-либо дифференциальной пары.
Анализ полинома 64B/66B для скремблера показывает, что, если рассматривать период времени, за который передается 64 кбит, в нем можно найти такой интервал, где после переданных 1000 бит может произойти заметный сдвиг нулевого уровня (disparity). Поэтому в интерфейсе Interlaken принято не 64B/66B, а 64B/67B. И именно наличие дополнительного бита позволяет принять меры для устранения постоянной составляющей.
Для того чтобы предотвратить эффект сдвига нулевого уровня, в интерфейсе Interlaken производится инвертирование значения битов в каждом переданном слове так, что рабочий сдвиг нулевого уровня всегда остается в требуемых пределах. Каждая линия связи, передающая пакеты, поддерживает сдвиг нулевого уровня: бит 1 постепенно увеличивает сдвиг нулевого уровня на одну единицу, а бит 0 соответственно уменьшает сдвиг нулевого уровня также на одну единицу. Перед передачей вычисляется сдвиг от нового слова и затем сравнивается с текущим рабочим сдвигом. Если и у нового слова, и у существующего сдвига присутствует тот же самый знак, то биты в новом слове инвертируются. Бит фреймирования находится в позиции двоичного разряда 66, таким образом, приемник может идентифицировать, инвертируются ли биты для того слова, как указано в таблице 3.
Такой способ кодирования сигналов в этом документе называется 64B/67B. Все биты в каждом слове, в том числе бит 66, включаются в рабочее количество битов, влияющих на сдвиг нулевого уровня (disparity count). Когда бит 66 устанавливается в «1», биты [63:0] инвертируются. Разрешенные значения трех синхронизирующих битов показаны в таблице 4.
В протоколе кодирование по IEEE 64B/66B определяется процедурой захвата синхронизации при помощи битов синхронизации. Приемник ищет переходы входного сигнала от высокого уровня к низкому или от низкого к высокому уровню и выбирает этот переход как гипотетический синхронизирующий паттерн. В следующей позиции бита фреймирования приемник снова ищет один из разрешенных паттернов изменения сигнала, и если разрешенный паттерн будет снова получен, то он повторяет эту процедуру. А в том случае если он не получает ожидаемый сигнал, приемник сбрасывает это состояние и ищет другой разрешенный паттерн. Когда приемник
Таблица 3. Бит инверсии 66
Биты [63:0] не инвертированы, и приемник может обрабатывать это слово без инверсии
Биты [63:0] инвертированы, и приемник сначала должен инвертировать это слово, а потом обрабатывать
Таблица 4. Кодирование битов синхронизации
Биты [66:64] Описание
001 Слово данных, без инверсии
010 Слово управления, без инверсии
101 Слово данных, биты [63:0] инвертированы
110 Слово управления, биты [63:0] инвертированы
Все остальные Запрещенные состояния
получит 64 последовательных совпадения входного потока данных с разрешенным паттерном синхронизации, то приемник считает, что произведен захват синхронизации.
В коде 64В/67В, примененном в Ш:ег1акеп, добавляется дополнительный синхронизирующий бит, но так же, как 64В/66В, только 50% возможных комбинаций этих трех битов являются разрешенными. Для достижения захвата синхронизации с тождественно низкой вероятностью неправильной синхронизации необходимо, чтобы приемник получил 64 последовательных совпадения входного потока данных с разрешенным паттерном синхронизации.
Кодирование 64В/67В создает издержки 4,5%. На блок-схеме (рис. 10) показан режим работы 64В/67В и захват синхронизации для выбора границы слова.
Выбрать новый бит как 67 бит в блоке
Сброс счетчика Нет Хорошая Увеличить
синхронизации синхронизация? на 1 слово
jfla t
Счетчик Нет Инкрементировать счетчик синхронизации
>64?
Да
Увеличить счетчик слов на 1
Счетчик слов >64?
Нет
Да
Сброс счетчика слов и счетчика ошибок
Да
Хорошая синхронизация?
Нет
Инкрементировать счетчик ошибок синхронизации
Нет
Счетчик ошибок синхронизации > 16?
Да
Рис. 10. Захват синхронизации границы слова по 64B/67B
Описание
0
1 Метафрейм
1
Sy Ss Sk Полезная нагрузка Di Эу | Ээ | Бк | нагрузи | | ПовтоРяется Д™ каждой линии с БегОвв
Синхронизация: Используется для выравнивания линий пакета
К S ä о s 2 S Состояние Используется для того, скремблера: чтобы синхронизировать скремблер
Л РЭ s I S к s Si с о о. С s о X Пропуск: Используется для компенсации синхрочастоты в репитере
s О о ä О 5 ffl s et Полезная Слова данных и слова нагрузка: управления передаются по интерфейсу
о 5 Диагностика: Обеспечивает проверку на ошибки для каждой линии и дополнительно сообщает о состоянии
рис. 11. Структура кадра метафрейма (для каждой линии)
Метафрейм
В интерфейсе Interlaken при разбивке передаваемого по линии потока на кадры вводится понятие о метафрейме. Метафрейм определяется для линии как набор слов, передающихся по каждой линии связи и состоящих из слов синхронизации, слова состояния скремблера, слова пропуска и слова диагностики, передаваемых наряду с данными полезной нагрузки (пакетные данные и управляющая информация). Рис. 11 иллюстрирует структуру метафрейма.
Размер метафрейма задается только одним программируемым параметром — MetaFrameLength, применяемым ко всем линиям связи, по которым передается этот пакет. Пакет представляет собой сумму слов, состоящих из полезной нагрузки, то есть слов данных, и одного набора слов — слова синхронизации, слова состояния скремблера, слова пропуска и слова диагностики. Структура кадра метафрейма является ортогональной к передачам данных. Метафреймы, как и слова управления кадром, могут быть вставлены в любом месте внутри пакета данных.
В дополнение к словам синхронизации, состоянию скремблера и слову диагностики определяется еще и слово пропуска, чтобы обеспечить компенсацию синхрочасто-ты в тех случаях, когда данные передаются не непосредственно от передатчика к приемнику, а после передатчика проходят через повторитель (electrical repeater applications)
Таблица 5. Слова управления кадрами метафрейма1
Тип блока
Слова управления в метафрейме положительный сдвиг нулевого уровня отрицательный сдвиг нулевого уровня
Слово синхронизации 011110 100001
Слово состояния скремблера 001010 110101
Слово пропуска 000111 111000
Слово диагностики 011001 100110
и уже затем попадают в приемник. В этом случае из-за разности скоростей синхро-частот приходится принимать дополнительные меры для выравнивания принимаемых в повторителе и передаваемых из повторителя данных. Более подробно типы каждого блока для слов управления метафреймом приведены в таблице 5.
Детали слов синхронизации, состояния скремблера, слова пропуска и слова диагностики описаны в следующих разделах.
Синхронный скремблер
При использовании кодировки по 64B/66B в соответствии со стандартом 802.3, на полезной нагрузке применяют самосинхронизирующийся скремблер. Он имеет определенное преимущество, так как не требует какой-либо синхронизации и состояние скремблера является функцией полученного потока данных. Это состояние скремблера может быть восстановлено после получения 58 бит данных. Но скремблер использует два сигнала обратной связи, и потому у него есть возможность тиражирования ошибки дважды, так что одноразрядная ошибка на входе может стать тремя одноразрядными ошибками в приемнике. Поскольку Interlaken чередует данные передаваемого пакета по линиям связи, это может продвинуть битовые ошибки за пределы слова. Следующее слово, принятое с ошибками, может находиться как в том же самом пакете, так и вне его. А потому для ошибок большей кратности такой способ работы нежелателен, поскольку подсчета контрольной суммы CRC24 может и не хватить для обнаружения всех ошибок.
Для того чтобы устранить этот недостаток, в интерфейсе Interlaken используется в каж-
дой линии связи независимый синхронный скремблер. Данный синхронный скремблер не подает входные данные к себе назад, как обратную связь. Вместо этого каждый бит берется по XOR с текущим состоянием скремблера, и таким образом ошибочное умножение не может произойти. Полином скремблера [9]:
х58+х39+1.
Полином скремблера активируется после сброса устройства, и передатчик никогда его снова не сбрасывает. Вместо этого текущее состояние скремблера отправляется приемнику, чтобы позволить ему декодировать данные, которые затем придут к нему по интерфейсу. Скремблер, соответственно, меняет свое состояние в процессе работы, за исключением передачи слова синхронизации и слова состояния скремблера, которые передаются без скремблирования.
Нет каких-либо требований, чтобы в каждой линии использовалось одно и то же состояние скремблера, как и нет требований минимизировать перекрестные помехи между линиями. При первоначальном сбросе в конкретных реализациях интерфейса скремблер в каждой линии может установиться в различные значения. Но единственное ограничение в этом — то, что скремблер никогда не сбрасывается к состоянию со всеми нулями. Поскольку состояние скремблера передается в канале передачи данных, на приемной стороне интерфейса нет необходимости точно знать, в какое состояние был сброшен скремблер на стороне передачи.
Для правильного декодирования полученных данных приемник должен синхронизироваться с состоянием полинома скремблера. Интерфейс Interlaken синхронизируется через комбинацию уникального 64-разрядного слова синхронизации и слово состояния скремблера, которые передаются последовательно как часть метафрейма (рис. 12).
Для того чтобы приступить к синхронизации в начале работы и после ошибок, слово синхронизации и слово состояния скрембле-ра передаются без скремблирования. Во время действия сброса каждая линия ищет уникальный паттерн слова синхронизации. Если полученное слово является словом синхронизации (соответствуют все 64 бит), то приемник принимает слова, которые были переданы в количестве до MetaFrameLength (измеренный в 8-байтовых словах), и проверяет их на наличие другого слова синхронизации.
1 В дальнейшем, с целью упрощения, на рисунках, приведенных в этой статье, для слов управления метафреймом все типы блоков показаны только для положительного сдвига нулевого уровня, хотя также существуют и типы блоков для отрицательного сдвига нулевого уровня.
ЬхЮ Ь011110 h0F678F678F678F6
ЬхЮ ьооюю состояние скремблера
56 63 58 57 0
рис. 12. Слово синхронизации и слово состояния скремблера
Если он идентифицирует принятые данные как слово синхронизации, то начинает последовательность снова, пока эта последовательность не будет идентифицирована как четыре последовательных слова синхронизации. Диаграмма состояний приведена на рис. 13.
Как только синхронизация достигнута, интерфейс использует восстановленное значение полинома скремблера, полученное от слова состояния скремблера, чтобы передать его в дескремблер.
Все данные и слова управления, за исключением слов состояния синхронизации и слова состояния скремблера, передаются скремблироваными для битов [63:0]. Но биты фреймирования — биты [66:64] — никогда не скремблируются. В каждой линии должно проверяться, что состояние скрем-блера, полученное в каждом слове состояния скремблера после синхронизации, не противоречит текущему ожидаемому состоянию скремблера, в противном случае выставляется сигнал ошибки после трех последовательных несоответствий.
Размер метафрейма всегда точно соответствует размеру, указанному в параметре MetaFrameLength. Поскольку Interlaken предусматривает вставку или удаление слова пропуска, чтобы управлять компенсацией син-хрочастоты в репитере (an electrical repeater), то репитер, возможно, должен скорректировать позицию слова синхронизации относительно того, как она была первоначально передана (см. далее раздел о компенсации син-хрочастоты). Это всегда происходит так, что приемник видит только постоянное количество данных между словами синхронизации.
Если слово синхронизации не находится, то приемник сигнализирует о том, что произошла ошибка. Если четыре последовательных слова синхронизации не будут опознаны, то приемник возвращается к состоянию сброса и начинает искать слово синхронизации.
Если три последовательных значения состояния скремблера противоречат ожидаемому состоянию скремблера приемника (на той же самой линии), приемник сообщает об ошибке и вновь пытается ресинхрони-зировать скремблер.
Текущее слово =
слово синхронизации?
Да
Четвертое последовательно принятое слово синхронизации?
Продолжение счета слов для определения длины метафрейма
Да
Четвертое последовательно
принятое неверное слово синхронизации?
Переход скремблера в следующее состояние, все слова не скремблируются
После получения пакета
с Ме!аРгате1_епд1М будет ли текущее слово = слову синхронизации?
Нет
Да
Третье последовательно принятое несовпадение слова скремблера?
Нет
Да
Рис. 13. Диаграмма состояний синхронизации скремблера
Выравнивание линий
Как только границы слова определены и скремблер должным образом сброшен, все линии, по которым ведется передача пакета, должны быть выровнены. Таким образом для интерфейса Мейакеп гарантируется, что слова синхронизации отправляются по интерфейсу с фиксированной регулярностью и они выравнивают канал передачи данных по линиям с SerDes. Чтобы достигнуть выравнива-
ния, слово синхронизации передается одновременно по всем линиям. Тогда приемник идентифицирует эти слова, измеряет расхождение между ними по линиям и соответственно корректирует это расхождение. На рис. 14 показана сегментация выравнивания линии связи для Шейакеп для четырех линий связи.
Частота передачи слов синхронизации определяется величиной параметра MetaFrameLength.
Рис. 14. Сегментация выравнивания линии связи для ЫеМакеп (пример для четырех линий связи)
Диагностика линий связи
Слова диагностики идентифицируется со значением поля «тип блока», равного «0b011001». Формат слова диагностики показан на рис. 15.
Есть две функции, связанные со словом диагностики, — сообщение статуса (Status Message) о состоянии линии и обнаружение ошибок в каждой линии связи. Двухразрядное поле статуса определяет место для сообщения о состоянии на линии, которое отправляется с приемника на передатчик. Контрольная сумма CRC32 применяется как диагностический инструмент для каждой линии так, чтобы ошибки в интерфейсе могли быть прослежены с точностью до отдельной линии связи. Контрольная сумма вычисляется по всем словам, переданным в пределах метафрейма. Контрольная сумма вычисляется до скремблирования и инверсии, за исключением 64B/67B битов фреймирования, но включая биты [63:0] слова диагностики, с полем CRC32, заполненным нулями.
Для простоты реализации 58-разрядное состояние скремблера при вычислении CRC32 обрабатывается так, что все значения считаются нулевыми. Полином CRC32 берется по [9]:
x,2+x2S+x27+x26+x25+x23+x22+x24x14x1S+ +x14+x13+x11+x1CI+x9+x8+X5+1.
Для простоты вычисления поля, по которым вычисляется CRC32, показаны на рис. 16.
Слова диагностики считаются частью MetaFrameLength так же, как и слова синхронизации, слова состояния скремблера, слова пропуска, слова данных, слова управления пакета и слова управления неактивного состояния.
Компенсация синхрочастоты
Теперь рассмотрим взаимодействие передатчика, приемника и репитера. В этом случае между передатчиком, отправляющим информацию в линию, и приемником, получающим эту информацию, включен репитер, как это показано на рис. 17. И не вызывает сомнения, что у передатчика, приемника и репитера синхрочастоты в принципе не могут быть идеально одинаковыми. А это значит, что репитер должен иметь возможность производить прием и передачу информации так, чтобы компенсировать небольшое расхождение синхрочастот. Для того чтобы репитер имел возможность выполнять компенсацию синхрочастоты, вводится слово пропуска. На приемной и передающей стороне тракта могут быть незначительные различия в тактовой частоте, и потому необходимо выполнять компенсацию, то есть периодически удалять из потока данных какое-нибудь называемое слово пропуска, если вторая синхрочастота медленнее, чем первая, или, наоборот, добавить слово про-
ЬхЮ Ь011001 hOOOOOO Статус CRC32
36 63 58 57 34 33 32 31
рис. 15. Слово диагностики
Синхронизация S.S. Пропуск Полезная нагрузка, данные Ь011001 hOOOOOO ST hOOOOOOOO Синхронизация
Биты [57:0] = 0
Новое слово диагностики
Все данные для расчета CRC32
рис. 16. Вычисление CRC32
пуска в поток данных, если вторая синхро-частота быстрее первой. Одно слово пропуска определяется как необходимая часть метафрейма, но дополнительные слова пропуска могут быть добавлены в любой точке в метафрейм, но не между словом диагностики, словом синхронизации и словами состояния скремблера. Это правило обязательно для приемников, чтобы они могли правильно идентифицировать и удалить слово пропуска из полученных данных.
Репитер может компенсировать более медленную синхрочастоту передачи, просто от-
брасывая слово пропуска. Если это происходит, он должен поддерживать постоянное разделение MetaFrameLength между словами синхронизации. Репитер выполняет это, смещая первое слово полезной нагрузки следующего метафрейма к текущему метафрейму и скремблируя его по корректному состоянию скремблера, которое будет у него к концу текущего метафрейма. На рис. 17 показана эта процедура.
Необходимо отметить, что процедура удаления слов пропуска и смещения слов полезной нагрузки от некоторого мета-
Пример: freqCLK_A > freqcLK_B
Длина метафрейма
Полезная нагрузка А
Полезная нагрузка В
Полезная нагрузка
Исходные данные со словом пропуска
Длина метафрейма
Полезная нагрузка А+В
Полезная нагрузка
Новая структура пакета, слово данных № 1 сдвинуто в предыдущий метафрейм
рис. 17. Процедура компенсации синхрочастоты при работе репитера
ЬхЮ ьооош h21E h1E h1E h1E h1E h1E h1E
66 63 5857 48 47 40
Рис. 18. Формат слова пропуска
Вариант 1
Блок верхнего уровня
Interlaken -►
Пропускная способность = X
фрейма к предыдущему метафрейму требует, чтобы слово диагностики, слово состояния скремблера и слово синхронизации от этого метафрейма были смещены к предшествующему метафрейму. В этом случае для сохранения правильного формата метафрейма слово диагностики, слово синхронизации и слово состояния скремблера должны быть удалены.
Если в вышеупомянутом примере ^К_В будет быстрее, чем ^К_А, нужен противоположный подход — добавляется дополнительное слово пропуска и последнее слово данных полезной нагрузки текущего метафрейма смещается к следующему метафрейму. В конечном счете, такой процесс требует добавления слова диагностики. В этом случае сообщение о состоянии должно сохранить ту же самую информацию как непосредственно предшествующее сообщение о состоянии.
Если есть различия в скорости синхрочастот не во всех, а только в некоторых из всех линий связи, повторитель будет вынужден удалить слово из-за этого различия. Причем он должен отбросить одновременно все такие слова, проходящие через интерфейс, а не только на тех линиях связи, на которых есть различия в син-хрочастотах. Используя величину параметра MetaFrameLength в 2К слов, на каждые 16 кбит отправляется самое большее шестнадцать байтов. Таким образом, служебные слова будут относиться к словам данных в отношении 1:1024.
SPI4.2
10 Гбит/с
Блок
интерфейса SPI4.2
^ 10 Гбит/с ^
Приложение нижнего уровня
Пропускная способность = Y
Расхождение в 100 ppm в тактовой частоте представляет собой отношение 1:10 000, то есть частота метафрейма удовлетворяет требованиям по компенсации. Необходимо заметить, что параметр MetaFrameLength может также быть установлен на меньшее значение, что позволит получить более быстрое выравнивание линий связи или меньшее количество данных, по которым вычисляется диагностическая CRC.
Слово пропуска идентифицируется со значением поля типа блока — «0b000111». Формат слова пропуска показан на рис. 18, а на рис. 19 представлены способы выравнивания скоростей у разных устройств.
Издержки
Поскольку слова синхронизации, диагностики и слово состояния скремблера передаются относительно редко, то они занимают минимальное время от пропускной способности интерфейса. Издержки зависят от размера MetaFrameLength, но для гипотетического случая передачи 2K слов издержки наихудшего случая с одним словом пропуска будут составлять 32/(16,384) = 0,2%.
Состояния ошибки
Состояния ошибки относятся к интерфейсу в целом или только к отдельным пакетам. В интерфейсе Interlaken имеется довольно
развитая логика, предназначенная для обнаружения ошибок. Она обеспечивает существенное улучшение для защиты по сравнению с существующими протоколами, такими как SPI4.2. Поскольку для различных приложений требуются различные варианты обработки ошибок, в статье не описывается, как должен быть обработан каждый ошибочный случай.
Заключение
Итак, мы ознакомились с очередной статьей, посвященной новым микросхемам семейства Speedster22i HD, работающим на максимальной частоте 750 МГц и имеющим 1,7 млн LUT. Они выполнены по 22-нм техпроцессу на фабрике Intel и предназначены для Hi-End-устройств.
В этой части был описан протокол интерфейса Interlaken, применение которого в разработках позволяет получить надежный и высокопроизводительный канал связи как между микросхемами на плате, так и по бэк-плейну.
В следующих статьях цикла мы более подробно рассмотрим аппаратный контроллер этого интерфейса, а также дадим краткое описание демонстрационного проекта для проверки работы интерфейса. ■
Литература
1. Каршенбойм И. Микросхемы ПЛИС Speedster22i от Achronix: самые быстрые и самые большие // Компоненты и технологии. 2014. № 9-11.
2. http://en.wikipedia.org/wiki/Interlaken_ (networking)
3. System Packet Interface Level 4 (SPI-4) Phase 2. http://en.wikipedia.org/wiki/SPI-4.2
4. IEEE: 802.3ae-2002 — Amendment: Media Access Control (MAC) Parameters, Physical Layers, and Management Parameters for 10Gbps Operation.
5. Optical Internetworking Forum (OIF): OIF-SPI4-02.1 — System Packet Interface Level 4 (SPI-4) Phase 2 Revision 1: OC-192 System Interface for Physical and Link Layer Devices.
6. www.interlakenalliance.com
7. Interlaken Protocol Definition. A Joint Specification of Cortina Systems and Cisco Systems. Revision 1.2. October 7, 2008.
8. Castagnoli G., Brauer S., Herrmann M. Optimization of Cyclic Redundancy-Check Codes with 24 and 32 Parity Bits. IEEE Transactions on Communications. June 1993. Vol. 41. № 6.
9. Koopman P., Chakravarty T. Cyclic Redundancy Code (CRC) Polynomial Selection for Embedded Networks. The International Conference on Dependable Networks and Systems, DSN-2004.
10. 100G Interlaken MegaCore Function User Guide UG-01128.
11. Руководство пользователя Speedster22i Interlaken User Guide UG032.
12. Speedster22i FPGA Family. Interlaken Single-User Interface. Reference Design User Guide. RD 006, June 30, 2014.
Interlaken 24 Гбит/с
В этом направлении FIFO в блоке интерфейса заполняется на скорости 24 Гбит/с - 20 Гбит/с = 4 Гбит/с
Вариант 2
Блок верхнего уровня
Блок нижнего уровня
Контроппер Interlaken
Рис. 19. Способы выравнивания скоростей у разных устройств