Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

.Проектирование устройств и систем с высокоскоростными соединениями

.pdf
Скачиваний:
41
Добавлен:
15.11.2022
Размер:
21.68 Mб
Скачать

лельные данные шириной до 10 бит (фактор десериализации) из микроструктуры FPGA (FPGA Fabric), запоминает их в регистре загрузки и преобразует в последовательные данные, используя регистр сдвига и тактирование от ФФАПЧ. Старший бит параллельных данных передается первым.

Рис. 6.2. Структурная схема ALTLVDS

передатчика LVDS SERDES Stratix V

ФФАПЧ генерирует сигнал разрешения загрузки LVDS_LOAD_EN (зависит от фактора десериализации) и сигнал diffioclk на частоте передачи последовательных данных, инициирующий работу регистров загрузки и сдвига. Можно также сконфигурировать передатчик для формирования синхросигнала интерфейса с синхронизацией от источника. Гибкость позволяет устанавливать выходной синхросигнал рядом с выводами сигналов данных, что упрощает разводку печатной платы и уменьшает временной перекос между данными и синхросигналом. Рис. 6.3 демонстрирует передатчик в режиме формирования синхросиг-

нала Txclkout.

Рис. 6.3. Передатчик в режиме формирования синхросигнала

131

Рис. 6.4. Обход сериалайзера

Элемент IOE позволяет обойти сериалайзер, для того чтобы поддержать операции DDR (x2) и SDR (x1) с факторами десериализации 2 и 1 соответственно. IOE содержит двухразрядный выходной регистр, работающий в режиме DDR или SDR (рис. 6.4).

6.1.2. Приемник MGT Altera Stratix V

На рис. 6.5 приведена схема приемника LVDS SERDES. Приемник имеет дифференциальный входной буфер, ФФАПЧ, которую можно разделять между передатчиком и приемником, блок DPA, синхронизатор, блок ресинхронизации (Bit Slip) и десериализатор.

В режимах SDR и DDR из IOE поступают 1- и 2-разрядные данные соответственно. Десериализатор состоит из сдвигового регистра и параллельного регистра загрузки, который передает максимум 10-разрядные данные во внутреннюю логику.

Блок DPA обрабатывает высокоскоростные последовательные данные из входного дифференциального буфера и выбирает одну из восьми фаз, генерируемых ФФАПЧ для стробирования данных. DPA выбирает фазу, ближайшую к фазе последовательных данных. Максимальное смещение фазы между принятыми данными и выбранной фазой составляет 1/8 UI, которое является максимальной ошибкой квантования для DPA. Восемь фаз синхросигнала равномерно отстоят друг от друга на величину 45°. Рис. 6.6 демонстрирует соотношение фаз между вариантами синхросигнала DPA и входящими последовательными данными.

132

Рис. 6.5. Структурная схема приемника LVDS SERDES Stratix V

Рис. 6.6. Варианты синхросигнала DPA

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

чения порта RX_DPLL_HOLD DPA.

Блок синхронизатор – это одноразрядное FIFO из 6 ячеек памяти, предназначенное для компенсации разности фаз между DPA_diffioclk (оптимальная тактовая частота выборки фазы DPA) и LVDS_diffioclk (генерирует ФФАПЧ). Синхронизатор может компенсировать только разность фаз, но не разность частот входного потока данных и опорной частоты приемника.

Блок ресинхронизации (Bit Slip – бит-проскальзывание).

Расфазировка в передаваемых данных вместе с расфазировкой,

133

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

Если используется DPA, то принимаемые данные захватываются в различные фазы синхросигнала на каждом канале. Для компенсации этой межканальной расфазировки и установления корректной границы принимаемых слов в каждом канале каждый канальный приемник имеет специальную схему ресинхронизации, которая перегруппировывает данные путем введения битовой задержки в последовательный поток. На рис. 6.7 показан выход приемника (rx_out) с фактором десериализации 4 после одного импульса проскальзывания.

Блок десериализатор. С помощью Quartus II можно установить фактор десериализации равным x3, x4, x5, x6, x7, x8, x9 или x10. Можно также обойти десериализатор (рис. 6.8) для обеспечения операций DDR (x2) или SDR (x1).

Рис. 6.7. Временная диаграмма ресинхронизации

Рис. 6.8. Обход десериализатора

134

На рис. 6.9, а изображена схема LVDS SERDES в режиме non-DPA, на рис. 6.9, б – в режиме soft-CDR.

а

б

Рис. 6.9. Режимы non-DPA и soft-CDR LVDS SERDES

Итак, три разных режима – non-DPA, DPA и soft-CDR – по-

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

6.2. ПРИМЕР РЕАЛИЗАЦИИ ПОЛЬЗОВАТЕЛЬСКОГО ПРОТОКОЛА НА ALTERA STRATIX V

Рассмотрим реализацию с использованием трансиверов LVDS SERDES пользовательского протокола из примера в подразд. 3.1.2. В этом примере узлы Serializer и Deserializer были построены исходя из отсутствия в FPGA специализированных схем, таких как MGT. В дальнейшем этот проект будем называть вторым (#2). Рис. 6.10 иллюстрирует взаимосвязи мегафункций Altera_PLL и ALTLVDS после их настройки для случая раздельной синхронизации передатчика и приемника с использованием внешнего режима ФАПЧ для нового проекта. Временная диаграмма сигналов мегафункции Altera_PLL приведена на рис. 6.11. Скорость передачи равна 2,5 Гбит/с, фактор десериализации равен 10.

135

Настройки Altera_PLL для передатчика и приемника в режи-

ме – Soft-CDR:

• outclk0: частота = скорость передачи, сдвиг фазы = –180°, длительность импульса = 50 %;

• outclk1: частота= скорость передачи/фактордесериализации, сдвиг фазы = [(фактор десериализации – 2)/фактор де-

сериализации] x 360°,

длительность = 100/фактор десериализации;

• outclk2: скорость передачи/фактор десериализации, сдвиг фазы = –180/ фактор десериализации, длительность = 50.

Настройка Altera_PLL для приемника в режиме Soft-CDR:

• outclk3: устанавливается так же, как и outclk0.

Рис. 6.10. Интерфейс между мегафункциями Altera_PLL и ALTLVDS для пользовательского протокола

На рис. 6.12 приведена структурная схема передающей части пользовательского протокола проекта #2. Узел coder8B10B является копией узла coder_8B10B из реализации #1. Узел conv_12_to_8 выполняет ту же функцию, что и узел conv_2_12_to_3_8 старой реализации.

136

Рис. 6.11. Соотношение сигналов Altera_PLL для передатчика пользовательского протокола

Рис. 6.12. Структурная схема передающей части пользовательского протокола проекта #2

В реализации #1 узел serializer формировал все необходимые сигналы для согласованной работы остальных узлов передатчика. В реализации #2 встроенный MGT формирует только тактовый сигнал tx_coreclock, по которому должен получить очередные 10-разрядные данные для сериализации. Ниже приведена синтезируемая программа на VHDL узла conv_12_to_8, реализующая точно такой же автомат управления, как на рис. 3.10.

137

VHDL программа-спецификация узла conv_12_to_8 проекта #2. library IEEE;

use IEEE.STD_LOGIC_1164.all; use IEEE.NUMERIC_STD.all; entity conv_12_to_8 is

port( reset_n : in STD_LOGIC; tx_coreclock: in STD_LOGIC; en_fifo : out STD_LOGIC;

data_in12 : in STD_LOGIC_VECTOR(11 downto 0); op_code : out STD_LOGIC_VECTOR(2 downto 0); data_out8 : out STD_LOGIC_VECTOR(7 downto 0)

);

end conv_12_to_8;

architecture conv_12_to_8 of conv_12_to_8 is signal buff: STD_LOGIC_VECTOR(7 downto 0);

type TYPE_STATE is (SF1, SF2, DATA0, DATA1, DATA2,EF1,EF2,IDLE1,IDLE2);

signal state: TYPE_STATE;

signal symbol_counter:unsigned(2 downto 0);

begin

with state select -- Преобразование перечислимого кода состояния автомата управления

op_code <= "000" when SF1 | SF2 | IDLE2, -- в двоичный код для передачи "001" when DATA0 to DATA2, -- узлу кодирования

"010" when EF1, "011" when EF2, "100" when IDLE1,

"101" when others;

STATE_MACHINE: -- Процесс автомата управления формированием структуры кадра

process(tx_coreclock,reset_n)

begin

if reset_n='0' then -- Асинхронный сброс сигналов процесса в начальное

состояние

 

state<=SF1;

 

symbol_counter<=(others=>'0');

 

en_fifo<='0';

 

elsif falling_edge(tx_coreclock) then

-- Реализация таблицы

STATE_MACHINE: case state is

when SF1 =>

-- переходов-выходовавтомата

state<=SF2;

-- Безусловный переход

when SF2 =>

 

state<=DATA0;

 

en_fifo<='1';

 

when DATA0 =>

 

138

 

state<=DATA1; when DATA1 =>

state<=DATA2; en_fifo<='0';

when DATA2 =>

if symbol_counter=7 then -- Условный переход state<=EF1;

else symbol_counter<=symbol_counter+1; state<=DATA0;

en_fifo<='1'; end if;

when EF1=> state<=EF2;

when EF2=> state<=IDLE1;

symbol_counter<=(others=>'0'); when IDLE1=>

state<=IDLE2; when IDLE2=>

state<=SF1; when others =>

null;

end case; end if;

end process;

CONVERTOR: -- Процесс формирования входных данных для кодера process(tx_coreclock,reset_n)

begin

if reset_n='0' then -- Асинхронный сброс сигналов процесса в начальное состояние

data_out8<=(others=>'0'); buff<=(others=>'0');

elsif rising_edge(tx_coreclock) then

case state is

when DATA0 => -- Первыйэтаппреобразования(младшие8 бит data_out8 <=data_in12(7 downto 0); --первого 12-разрядного buff(3 downto 0)<= data_in12(11 downto 8); -- слова)

when DATA1 => --Второйэтаппреобразования(старшие4 бита data_out8(3 downto 0) <=buff(3 downto 0); --первого слова buff(7 downto 0)<= data_in12(11 downto 4); -- + младшие8 бит data_out8(7 downto 4) <=data_in12(3 downto 0); -- 2-гослова) when DATA2 => --Третий этап преобразования (старшие 8 бит

data_out8 <=buff; --2-го слова) when others =>

139

null;

end case; end if;

end process;

end conv_12_to_8;

На рис. 6.13 приведена структурная схема приемной части пользовательского протокола проекта #2. В узле deframer реализованы поиск разделителя comma для определения границ символов (процесс DETECTOR_COMMA) и разбор формата кадра пользовательского протокола (оператор STATE_MACHINE).

Рис. 6.13. Структурная схема приемной части пользовательского протокола проекта #2

Представим процесс разбора кадра узлом deframer в виде синхронного автомата (рис. 6.14), в котором состояния интерпретируются следующим образом:

wait_comma1 – ожидание первого символа стартового маркера кадра;

wait_comma2 – ожидание второго символа стартового маркера кадра;

data_0 – прием первого символа поля данных;

data_1, data_2, data_3 – прием последующих символов поля данных и формирование сигнала, определяющего этап сборки 12-разрядных данных пользователя узлом decoder_8b10b;

wait_end – обнаружен первый символ конечного маркера кадра;

140

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]