Как обрабатываются высокоскоростные последовательные сигналы?

Высокоскоростные последовательные каналы, такие как Gb Ethernet, PCIe, Firewire и т. д., поддерживают скорости передачи данных, которые предполагают частоты передачи сигналов, намного превышающие типичную тактовую частоту типичных микросхем. Мне интересно, как эти сигналы обрабатываются.

Пример: SATA поддерживает скорость до 6 Гбит/с на одной паре дифференциальных сигнальных линий. Это предполагает частоту передачи сигналов порядка 6 ГГц, верно?

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

Ответы (2)

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

Для этого параллельные данные из микросхемы-отправителя отправляются в сериализатор, который кодирует данные для баланса и синхронизации постоянного тока (коды 8b/10b). Данные подаются в сдвиговый регистр, а сдвиговый регистр работает на частоте 6 ГГц. На принимающей стороне часы должны быть восстановлены из сигнала, отправленного по проводу с помощью PLL, и PLL воссоздает часы с частотой 6 ГГц, которые использовались для отправки данных. Используя эти часы, сдвиговый регистр сдвигает данные из последовательной линии, а затем данные декодируются. На данный момент данные готовы для использования с внутренней логикой чипа. Этот процесс иногда называют SerDes или SERialize — DESerialize.

Чтобы показать, как это может работать с чипом со скромной тактовой частотой, давайте упростим систему и предположим, что нам нужно заполнить канал 6 Гбит/с 6*10^9 бит данных в секунду. Если у нас есть 32-битный размер слова в нашем устройстве, мы можем загрузить наш сериализатор (или выгрузить наш десериализатор). Если мы заполняем буфер 32 битами данных каждый такт, то нам нужно заполнять его со скоростью (6000 Мбит/с / 32 бита = 187,5 МГц) 187,5 МГц. Опять же, при этом не учитываются какие-либо накладные расходы протокола, поэтому на практике это может быть меньше. Это очень разумная тактовая частота для высокопроизводительного чипа (например, приемопередатчика SATA или PCIe). Вы можете работать на более высокой тактовой частоте, чтобы получить больше накладных расходов, или работать на более низкой частоте, используя более широкую шину данных (64 бита, 128 бит вместо 32 бит).

Спасибо. Это действительно помогло. Правильно ли я предполагаю, что из-за того, что часть чипа должна работать на очень высоких скоростях, высокоскоростная обработка последовательных данных может выполняться только с помощью ASIC? Невозможно воспроизвести в FGPA или подобном без специальной схемы?
@Arik, ты не сможешь создать SerDes с базовой логикой в ​​FPGA. Однако многие ПЛИС имеют специальные схемы, необходимые для высокоскоростных последовательных шин, даже недорогие, такие как Spartan 6 от Xilinx и Cyclone V/IV от Altera.

Serial ATA использует сигнал LVDS с любой желаемой скоростью передачи данных (1,5, 3 или 6 Гбит/с). Насколько я помню из спецификации SATA, это пара LVDS, связанная с переменным током (и Википедия подтверждает это).

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

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

Редактировать

Я не упомянул, что для достижения последовательной связи с высокой скоростью передачи данных часто используются подавление акцентов и выравнивание. Эти же методы часто используются с FPGA, которые поддерживают последовательные интерфейсы с высокой скоростью передачи данных, такие как RocketIO и PCI Express.

Редактировать 2

Как указывает mng, два логических блока (передача и получение) охватываются термином SerDes (сериализатор, десериализатор). Один из этих блоков (сериализатор) берет параллельный источник данных (скажем, 32-битное DWORD) и сдвигает его по сети на один бит за раз. Этот процесс происходит асинхронно с часами основного процессора (поскольку он для этого не используется). Часы, используемые для процесса сериализации, работают со скоростью передачи данных последовательной шины (например, 6 ГГц для SATA 6 Гбит/с). Это аналогичная концепция (хотя и с совершенно другой скоростью передачи данных, причем в большинстве случаев шина медленнее, чем ЦП), используемая в SPI и I2C. Кроме того, как часть процесса сериализации вставки битовчасто трудоустроен. Это делается для обеспечения равного количества старших и младших битов на линии, а также для облегчения процесса восстановления тактовой частоты.

Я думаю, что ключевым словом для упоминания является SerDes .
@tallganglyguy Спасибо за этот ответ. Однако меня особенно интересовало, как такие высокоскоростные сигналы обрабатываются чипами, которые работают намного медленнее. Я считаю, что ваши правки указывают в этом направлении, но это слишком абстрактно для меня, чтобы понять. Подсказка относительно снижения акцента и выравнивания помогает только в том случае, если вы уже знаете, что это такое ... Может быть, у вас есть ссылка на Википедию или что-то подобное для новичка?