29 мая 2012
О лаборатории специальных исследований
Часть 22
К вопросу оценки ПЭМИН цифровых сигналов (продолжение)
Итак, приспело время поговорить об одном из основных устройств типовой ПЭВМ – накопителях на «дисках». Причём сразу обо всех (HDD, CD, DVD и т.д.). В более ранних публикациях о них упоминалось, вообще-то. Но в контексте и без подробностей. А поскольку эти «девайсы» непременная часть любой современной ПЭВМ, то обойти их молчанием никак не получается.
Ещё раз напомним, что практически любой девайс из серии «внешних» хранителей данных является с нашей профессиональной точки зрения двумя устройствами:
- интерфейс связи с собственно ПЭВМ
- узлы записи на носитель.
У каждого из этих участков информационного тракта свои особенности, тактовые частоты, длительности импульса, системы кодирования и т.д. Начнём рассмотрение с интерфейса, как наиболее универсального и однотипного (особенно сейчас).
Рассматривать классический параллельный IDE интерфейс уже нет смысла. Во-первыз параллельный (следовательно, менее «опасный), во-вторых уже всё реже и реже встречающийся. Его место в дисковых интерфейсах безраздельно занимает интерфейс SATA в различных своих вариантах.
Пожалуй, наиболее практически распространённым на сегодняшний день следует назвать SATA1 (Revision 1.0) и SATA2 (Revision 2.0). SATA3 с версией протокола Revision 3.0 почти не встречается. На смену ему уже «поднимает голову» SATA 6.0 с версией протокола Revision 3.1.
Рассмотрим подробнее то, что важно именно с точки зрения проведения СИ.
Две симметричные пары «А» и «В» в семипроводном кабеле интерфейса SATA (остальные проводники «земля») работают в многократно уже упомянутом протоколе LVDS (Low-Voltage Differential Signaling; TIA-644) фирмы National Semiconductor. Сам интерфейс уже довольно подробно рассматривался в публикации, посвящённой TFT мониторам. Поэтому подробно рассматривать его уже не имеет смысла, но надо упомянуть, что версия для SATA предусматривает дифференциальные напряжения в витопаре около 250 мВ. Совсем немного, как видим.
Рисунок 22.1 Принципиальная схема LVDS
Кодирование потока данных в этом кабеле выполняется методом NRZI Non Return to Zero Invert to ones - метод без возврата к нулю с инвертированием для единиц. Этот метод представляет собой модификацию простого потенциального метода кодирования, называемого Non Return to Zero (NRZ), когда для представления 1 и 0 используются потенциалы двух уровней. В методе NRZI также используется два уровня потенциала сигнала, но потенциал, используемый для кодирования текущего бита зависит от потенциала, который использовался для кодирования предыдущего бита (так называемое дифференциальное кодирование). Если текущий бит имеет значение 1, то текущий потенциал представляет собой инверсию потенциала предыдущего бита, независимо от его значения. Если же текущий бит имеет значение 0, то текущий потенциал повторяет предыдущий.
Из описания метода NRZI видно, что для обеспечения частых изменений сигнала, а значит и для поддержания самосинхронизации приемника, нужно исключить из кодов слишком длинные последовательности нулей. Коды 4B/5B построены так, что гарантируют не более трех нулей подряд при любом сочетании бит в исходной информации..
А вот последовательность из сплошных единиц, похоже, ничем в кабеле «искусственным» не нарушается, обеспечивает постоянную тактовую частоту. Вполне должно подходить для тест-режима.
Оно-то так, но ещё до того, как попасть в кабель, поток данных кодируется логически по принципу 8b/10b (кодирование RLL). То есть каждый байт (8 бит) исходной последовательности заменяются на 10 бит в соответствии с определенными правилами. В результате для 256 возможных комбинаций из 8 входных бит получаем 1024 возможные комбинации для 10 выходных бит.
В случае протокола SATA разрешенных к использованию 10 битовых комбинаций значительно больше, чем 256. При этом каждой входной последовательности может соответствовать несколько выходных, а какая именно выходная комбинация будет использована, зависит от контрольного сигнала rd, формируемого в процессе передачи. Рассмотрим подробнее два этапа кодирования.
При кодировании 8 исходных бит разбиваются на две подгруппы: из 5 бит и из 3 бит. На первом этапе подгруппа 5 бит подвергается кодированию 5b/6b, то есть каждые 5 бит заменяются на 6. На втором этапе оставшиеся 3 бита подвергаются кодированию 3b/4b.
Целесообразность использования двухэтапного кодирования вызвана тем, что при кодировании каждой группы (сначала 5 бит, а потом оставшихся 3 бит) формируется специальный бинарный контрольный сигнал rd (Running Disparity), который может быть либо отрицательным (rd-), либо положительным (rd+).
При кодировании 5b/6b для 32 возможных 5-битных комбинаций на входе существует 46 6-битных возможных комбинаций на выходе (не 32 и не 64, а именно 46!). Получаются эти 46 возможных комбинаций следующим образом: каждой из 32 возможных 5-битных комбинаций на входе ставится в соответствие две 6-битные выходные последовательности: прямая и инверсная, за исключением тех 6-битных последовательностей, для которых количество «1» совпадает с количеством «0» -- отсюда именно 46 возможных комбинаций на выходе.
При кодировании 3b/4b для 8 возможных 3-битных комбинаций на входе существует 14 возможных 4-битных комбинаций на выходе, которые формируются так же, как и прежде.
При кодировании 3b/4b, так же как и при 5b/6b, использование прямой или инверсной выходной последовательности определяется текущим значением контрольного сигнала rd. Если сигнал rd положителен, то используется прямая последовательность, а если отрицателен -- то инверсная. При этом текущее значение сигнала rd определяется по предыдущей переданной последовательности из 6 или 4 бит.
Правило для формирования сигнала rd достаточно простое. Сигнал положителен, если количество единиц больше количества нулей в группе закодированных бит. Исключение составляют последовательности с равным количество нулей и единиц. Для последовательностей 000111 (подгруппа 6 бит) и 0011 (подгруппа 4 бит) сигнал считается положительным, а для последовательностей 111000 и 1100 -- отрицательным. Во всех остальных случаях сигнал rd нейтрален и не меняет своего состояния.
К примеру, если входная последовательность 5 бит 00001 подвергается кодированию 5b/6b, то при положительном текущем сигнале rd+ последовательность 00001 будет заменена на последовательность 100010. Если текущее значение сигнала rd отрицательно (rd-), то будет сформирована инверсная последовательность 011101. Но в обоих случаях последующее состояние сигнала rd изменится на противоположное, так как при rd+ в последовательности 100010 нулей больше, чем единиц, и, следовательно, сигнал rd примет отрицательное значение, а при rd- в последовательности 011101 единиц больше, чем нулей, и сигнал rd станет положительным.
Аналогичному кодированию в зависимости от текущего значения сигнала rd подвергается и подгруппа из 3 бит (кодированию 3b/4b), причем с учетом того, что сперва происходит кодирование 5b/6b, а потом 3b/4b, текущее значение сигнала rd при кодировании 3b/4b определяется по результату кодирования 5b/6b.
Рисунок 21.2 PRML-кодирование
Продолжение следует