Каналы приёмного и передающего fifo
Контроллер модуля ВОСК осуществляет обмен данными с модулем буфера данных посредством приемного и передающего FIFO. Интерфейс канала приемного FIFO формирует из поступивших по 18-разрядной шине данных 36-разрядные слова, а также признак готовности данных (строб данных), подтверждающий наличие данных на выходе канала приемного FIFO.
Интерфейс канала передающего FIFO формирует 18-разрядные полуслова из поступившего со стороны коммутатора потоков данных 36-разрядного слова, а также признак не готовности канала передающего FIFO более принимать данные со стороны коммутатора потоков данных, вследствие заполненного внешнего передающего FIFO.
Каналы а и в
Оба канала (А и В) работают как на прием, так и на передачу. Структурно и функционально оба канала идентичны друг другу. Структурная схема канала показана на рисунке 2.
В состав канала контроллера входят следующие функциональные блоки:
- интерфейс приемо-передатчика канала. Служит для обмена 20-ти разрядными данными с внешними приемо-передатчиками физической среды передачи соответствующих каналов;
- FIFO-компенсатор – FIFO, обеспечивающее компенсацию разбега фазы частоты передающего и принимающего каналов;
- кодировщик в формате 8В/10В – кодирует входные 16-разрядные данные в формате 8В/10В;
- декодер в формате 8В/10В – декодирует входные данные из формата 8В/10В;
- преобразователь данных из 36 в 16 – преобразует входные 36-разрядные данные в 16- разрядные слова;
- преобразователь данных из 16 в 36 – преобразует входные 16- разрядные слова в 36- разрядные данные;
- FIFO 64Х36 – FIFO данных и команд размером 64 36-разрядных слов с механизмом остановки/запуска.
Ниже описаны два режима работы каналов контроллера.
Рис. 2 Структурная схема канала контроллера
Режим чтения. С внешних приемо-передатчиков данные в виде 20-разрядного слова поступают в интерфейс приемо-передатчика канала (А или В). Затем они записываются в FIFO-компенсатор, которое необходимо для компенсации разбега частот передающего и принимающего блока.
Структура данных представляет собой последовательность данных/команд (D/C), разделенных между собой разделителем Co, где Co – (Comma) код K28.5/D5.6, К28.5/D16.2 стандарта кодирования 8В/10В. Количество данных/команд между разделителем может быть произвольным.
Далее данные поступают в декодер формата 8В/10В. Декодер дешифрирует 20-разрядные данные, в результате на выходе декодера формируются 16-разрядные данные и признак разделителя. 16-разрядные данные с признаком кадра (разделителем) поступают в преобразователь данных из 16 в 36. Преобразование данных из 16-разрядного формата в 36-разрядный необходимо по следующим причинам: так как формат слова данных/команд параллельного порта представляет собой 36-битную палитру, а разрядность слова поступающего с декодера канала равняется 16, следовательно, необходимо данные, поступающие из канала, перевести в 36-битное представления. Ниже приведен алгоритм преобразования.
Алгоритм преобразования данных:
- данные, поступающие из декодера, накапливаются в памяти преобразователя по восемь 16–разрядных слов. Причем, D0L является первым словом в кадре, идущим после разделителя или начала кадра PS. Нечетные, относительно начала кадра, слова являются младшими 16 битами 36-разрядного слова, а четные – старшими 16 битами 36-разрядного слова. Таким образом, пара DnL и DnH представляет собой 32 разряда из необходимых 36 разрядов;
- недостающие до 36 разрядов четыре бита накапливаются в отдельном регистре. Таким образом, получается, чтобы передавать 16-разрядными словами, с оптимальной загрузкой канала (без лишних передач), необходимо передавать восемь 36-разрядных слов, из которых получается восемнадцать 16-разрядных слов;
- после чтения восемнадцати 16-разрядных слов, происходит группировка исходного слова: первые 32 бита формируются исходя из того, что DnL и DnH являются младшим и старшим полусловом исходных данных, а 4 бита тэга берутся с соответствующих разрядов регистра-накопителя. Причем разряды с 0 по 3 соответствуют первому слову, разряды с 4 по 7 – второму и т.д.;
- полученные данные в виде 36-разрядных слов поступают на вход FIFO 64x36. FIFO 64x36 служит для предотвращения потери данных, поступающих из интерфейса канала. FIFO 64x36 включает в себя механизм запуска и остановки входных данных (см. п.А3.1.2.3). С выхода FIFO 64x36 данные поступают на вход коммутатора потоков данных, где происходит перенаправление их на соответствующий источник, исходя из конфигурации контроллера.
Преобразование данных из 36 разрядов в 16 разрядов выполняется по алгоритму, описанному выше, только в данном случае преобразование выполняется в обратном порядке.
Режим записи. Контроллер не будет производить передачу данных в любой из каналов, а также в канал передающего FIFO, если не активизирован бит OP_MODE конфигурационного регистра REG_CFG_CTRL. С помощью данного бита происходит активация контроллера, и он начинает передавать данные, исходя из конфигурации коммутатора потоков данных.
В режиме записи данных в один из каналов данные, поступившие с коммутатора потоков данных, преобразуются из 36-битного представления в 16-битное с помощью алгоритма, описанного выше. Преобразователь данных из 36 в 16 помимо 16-разрядных данных выставляет также признак наличия данных, которые необходимо передать в канал. Пара данные – признак поступают в кодировщик формата 8В/10В, который кодирует данные в стандарте 8В/10В, а также вставляет разделитель отсутствия признака наличия данных.
В результате преобразования данных потока из 36-разрядного формата в 16-разрядный на каждые 8 переданных слов необходимо передать одно слово, содержащее накопленный остаток. Это ограничение накладывает требование к формированию блоков данных, которые необходимо отправить в один из каналов со стороны канала приемного FIFO, в группы по 8 слов в каждой.
В случае, если необходимо передать меньше чем 8 слов, контроллер, прочитав данные из канала, автоматически добавит недостающее до 8 количество слов с тэгом равным «1111» (не данные). Таким образом, посылка будет выглядеть следующим образом: действительные данные (8 - N) и последнее слово действительных данных с тэгом «1111» N раз, где N – количество недостающих до 8 действительных данных.
Ошибки при передаче. В каналах могут возникать ошибки при передаче данных. Поиск одинарных ошибок без исправления производит декодер приемо-передатчика физической линии канала. В случае обнаружения ошибочной ситуации декодер формирует признак ошибки. Преобразователь данных из 16 в 36 получает признак и, если число принятых в составе октета слов не равно 8, преобразователь помечает только ошибочные слова, меняя поле тэга на “1111” (не данные). Причем, слова принятые без ошибок, не маркируются. Если же число принятых в составе октета слов равно 8, преобразователь маркирует весь октет, так как последние два полученных полуслова представляют собой 4-х битные остатки (см. алгоритм преобразования из 16 в 36) всех слов октета.
Потеря несущей. В случае отсутствия несущего сигнала в канале (обрыв в линии, не подсоединённые внешние соединители и т.п.) контроллер автоматически выставляет признак ошибки при потере несущей в любом из каналов в статусном регистре контроллера REG_STATUS_CTRL. При этом, в приемной части соответствующего канала формируется признак отсутствия данных в канале.
