Приемник манчестерского кода

Пример Приемника манчестерского кода показывает, как использовать HDL Verifier™, чтобы спроектировать, протестировать и проверить модель VHDL Manchester Receiver с возможностями восстановления тактового сигнала.

Фон на Манчестерском кодировании

Передача цифровых данных часто требует, чтобы некоторая форма модуляции преодолела пределы в канале физического сигнала. Один метод, используемый для модуляции цифровых данных, является Манчестерским Кодированием. Этот метод имеет следующие полезные характеристики:

  • Сигнал часов передачи может быть легко извлечен из принятых данных.

  • Кодируемое сообщение никогда не производит частотные составляющие около DC, независимо от данных, которые полезны для передачи по каналам, которые требуют связи AC.

  • Схема кодирования является очень простой и не сохраняющей состояние.

На отрицательной стороне Манчестерское кодирование требует существенной полосы пропускания (выше предела Шеннона), который имеет тенденцию ограничивать его полноценность в приложениях беспроводной связи. Однако для связанных приложений, таких как Оптоволокно для ближних перевозок и Ethernet, это часто - хорошее решение.

Следующие разделы обсуждают:

Кодирование

Манчестерское Кодирование включает передатчик, который кодирует часы и сигналы данных в синхронном потоке битов, таком, что каждый бит представляет переход сигнала. Следующая таблица показывает, как каждая битная установка задана для кодирования:

Переходы в Манчестерском Кодировании происходят в центре и начало каждого бита. Переход в центре задан битовым значением, в то время как переход вначале зависит от значения предыдущего бита. Рассмотрите следующую схему:

Как кодируемые сообщения предыдущего Манчестера показывает:

  • Значение 1 для первого бита обеспечивает высокий-к-низкому переход в центре того бита.

  • Значение 0 для второго бита обеспечивает низкий-к-высокому переход в центре того бита и, потому что первый бит перешел от высокого-к-низкому, никакой переход не происходит в начале того бита.

  • Значение 0 для третьего бита обеспечивает низкий-к-высокому переход в центре того бита и потому что второй бит перешел от низкого-к-высокому, высокий-к-низкому переход происходит в начале того бита.

  • Значение 1 для четвертого бита обеспечивает высокий-к-низкому переход в центре того бита и, потому что третий бит перешел от низкого-к-высокому, никакой переход не происходит в начале того бита.

  • Значение 0 для пятого бита обеспечивает низкий-к-высокому переход в центре того бита и, потому что четвертый бит перешел от высокого-к-низкому, никакой переход не происходит в начале того бита.

Приемник

Устройство, которое получает закодированный поток битов, ответственно за декодирование потока битов путем разделения информации о данных и часов. В большинстве случаев приемник должен получить исходный поток данных только при помощи кодируемого сообщения. Это упрощает коммуникационный канал, но означает, что приемник должен преодолеть следующее:

  • Различия между часами раньше кодировали сообщение и часы в приемнике (см. рисунок ниже).

  • Два часов могут быть близкими в частоте, но небольшие ошибки частоты происходят.

  • Фаза между часами будет произвольна.

Пример Приемника манчестерского кода подтверждает расчеты, выполняемые устройством Приемника манчестерского кода, которое смоделировано в VHDL и симулировано в ModelSim®. Многочисленные подходы доступны для реализации Приемника манчестерского кода. Этот пример использует Цикл блокировки задержки (DLL), который требует, чтобы приемник использовал часы, которые очень близки в частоте к часам передачи. Это приводит к простой схеме восстановления тактового сигнала, которая имеет ограниченную область значений блокировки частоты.

Приемник сверхдискретизировал поток принятых данных на 16 раз скорости передачи данных. Таким образом получить часы должны иметь номинальный период 1/16-х период данных. Чтобы компенсировать незначительные различия между передачей и получением часов или дрейфов в задержке канала, приемник настраивает свой период данных до одного такта (+/-) на период данных. Таким образом приемник может использовать 15, 16 или 17 тактов, чтобы восстановить данные, закодированные с поступления произведенный сигнал. Например, если часы приемника немного быстрее затем часы передатчика (ошибка частоты), получить цикл иногда должен добавлять дополнительный такт, чтобы компенсировать.

Большие внезапные ошибки фазы, такие как те, которые происходят во время запуска, требуют, чтобы несколько периодов данных получили хорошую блокировку на сигнале. Путем ограничения максимальной коррекции фазы 1/16-м из общего периода данных приемник может не спешить корректировать большие ошибки фазы.

Декодирование с синфазным и квадратурной сверткой

Декодирование полученного Манчестерского сигнала может произойти несколькими способами, но подход, проявленный в этом примере, должен рассмотреть Манчестер, Кодирующий как цифровую фазовую модуляцию с двумя символами: +180 и-180 градусов. Путем свертки к входящему сигналу со ссылкой, синфазной (I) и квадратура (Q) форма волны на частоте модуляции, возможно извлечь данные и получить информацию о любых ошибках фазы в принятой форме волны. После одного цикла данных приемник вычисляет два значения (называемый Isum и Qsum в коде VHDL), которые являются измерениями значения свертки I/Q. Приемник затем декодирует значения, чтобы предсказать:

  • Исходное значение передаваемых данных для цикла

  • Оценка ошибки фазы между входящим сигналом и периодом данных приемника

Критическим аспектом этого проекта является интерпретация значений свертки I/Q. В конце данных получают цикл, приемник переводит значения I/Q в оценку ошибки фазы и передаваемых данных. Один способ представить эту информацию состоит в том, чтобы показать эти интерпретации графиками по сравнению с измеренными значениями I/Q.

Данные рассматриваются недопустимыми, если измеренное я и Q абсолютно неоднозначны о закодированном значении данных.

Похожим способом можно сгенерировать отображение I/Q значения коррекции фазы в формате графика. Такой график дает визуальное представление блока декодирования. На практике детали этого отображения оказывают сильное влияние на устойчивость и эффективность Приемника манчестерского кода.

В идеальном случае, где приемник отлично заблокирован к входящей форме волны, получить цикл является 16 циклами долго, и измеренные значения свертки I/Q довольно легко интерпретировать. Однако циклы данных, которые являются 15 или 17 циклами долго, создают некоторое смещение в измерении свертки IQ. Возможно настроить измерение I/Q во время этих циклов, но это увеличило бы размер и сложность приемника. Вместо этого цикл сбора данных расширен или сокращен без изменения в декодировании получившихся значений. Однако это смещение декодера может создать проблемы с размыванием или уменьшало шумовую неприкосновенность.

Реализация VHDL приемника манчестерского кода

Особым вниманием этого примера является реализация VHDL Приемника манчестерского кода. Декодирование закодированного сигнала Манчестера представляет собой несколько проблем, самой видной из которых является восстановление тактового сигнала. Часы встраиваются в полученный сигнал и должны быть извлечены, чтобы воспроизвести исходный поток данных. Рисунок ниже показывает проект в качестве примера, который разделен на три основных раздела кода VHDL:

Конвольвер IQ: Производит полученный сигнал и вычисляет свертку для синфазного (I) и квадратура (Q) формы волны. Для каждой формы волны расчет реализован как сумма операций "исключающее ИЛИ" на демонстрационной и декодируемой форме волны, полученной от счетчика состояния.

Декодер: Моделирует комбинаторную схему, которая интерпретирует результаты конвольвера I/Q.

Счетчик состояния: Генерирует формы волны I/Q, к которым применяют операцию свертки с полученными сигналами, учитывая ошибки фазы (отстает и ведет), по мере необходимости. Фаза генератора I/Q настроена, чтобы соответствовать, входящий Манчестер закодировал форму волны. Чтобы выполнить необходимую корректировку, в начале нового цикла, счетчик состояния проверяет значение корректировки, прил, и затем изменяет период следующего цикла I/Q. Это значение корректировки ограничивается добавлением или удалением одного периода часов с 16 периодов, которые номинально используются для формы волны I/Q.

Следующая схема синхронизации показывает синфазную форму волны, квадратурную форму волны и результаты, к которым применяют операцию свертки, без ошибки фазы, задержек данных, и данные ведут.

Модели MATLAB® компонентов VHDL

Пример включает три функции MATLAB®, которые тестируют модель VHDL. Функция MATLAB сопоставляет с каждым из трех компонентов VHDL:

Конвольвер I/Q: Проверяет, что VHDL код конвольвера I/Q вычисляет ожидаемый выход для случайным образом сгенерированного потока выборок. Функция MATLAB проверяет это путем вычисления свертки для синфазных форм волны и квадратурных форм волны (I_wf и Q_wf). Расчет реализован как XOR и накопление двоичных сигналов.

Декодер: Отображает график I/Q отображение сгенерированного декодером для визуальной верификации.

Счетчик состояния: Генерирует синфазные формы волны и квадратурные формы волны. Во время тестового террасирования эта функция MATLAB имеет полный контроль над сигналами, примененными во время симуляции, включая генерацию тактовых сигналов, сброс, и так далее.

Выполнение примера

Запуск сервера MATLAB

Пример запускает сервер MATLAB, hdldaemon, такой, что это использует связь сокета TCP с номером порта сокета, идентифицированным как доступную операционной системой.

hdldaemon('socket',0)      % Activate MATLAB server to accept foreign VHDL calls
HDLDaemon socket server is running on port 4040 with 0 connections

Пример затем вызывает hdldaemon с опцией 'состояния', чтобы получить номер назначенного порта и сохранить его в portnum для дальнейшего использования.

dstat = hdldaemon('status');
portnum = dstat.ipc_id;
HDLDaemon socket server is running on port 4040 with 0 connections

И сервер и клиентские части ссылки на приложение должны использовать тот же номер порта. Таким образом, в какой-то момент, пример программы должен передать portnum ModelSim.

Тестирование декодера

Первый компонент модели Manchester Receiver, которая будет протестирована, является декодером. Скрипт создает 2 графика передаточной функции этой сущности. Этот тест является просто визуализацией поведения декодера. Скрипт в качестве примера:

1. Устанавливает флаг testisdone на 0 и отображает информационные сообщения.

global testisdone;
testisdone = 0;

2. Устанавливает каталог проекта на директорию, которая имеет доступ для записи и подходит для содержания проекта ModelSim.

projectdir = pwd;

3. Изменяет формат каталога проекта и технических требований файла VHDL декодера к формату UNIX®, который ModelSim и использование Tcl, заменяя обратные косые черты (\) с наклонными чертами вправо (/).

unixprojectdir =  ['"' strrep(projectdir,'\','/')  '"'];
unixsrcfile = ['"' ...
    strrep(fullfile(matlabroot,'toolbox','edalink','extensions','modelsim',...
    'modelsimdemos','vhdl','manchester','decoder.vhd'),'\','/') ...
    '"'];

4. Задает последовательность команд Tcl, которые будут выполняться в контексте ModelSim.

tclcmd = { ['cd ' unixprojectdir ],...
            'vlib work',...
           ['vcom -performdefaultbinding ' unixsrcfile],...
            'vsimmatlab work.decoder',...
           ['matlabtb decoder -mfunc manchester_decoder -socket ',num2str(portnum)],...
            'run 3000',...
            'quit -f'};

Предыдущий список задает каждую команду:

  • Изменения в перезаписываемом каталоге проекта.

  • Настраивает размещение окна ModelSim, таким образом, это не затеняет окно MATLAB.

  • Создает библиотеку проекта, работают, если она уже не существует.

  • Компилирует файл VHDL. Скрипт в качестве примера задает 'performdefaultbinding' опцию, чтобы включить привязку по умолчанию, если они были отключены в modelsim.ini файле.

  • Загружает экземпляр декодера сущности VHDL для тестового террасирования MATLAB с vsimmatlab командой. Эта команда является расширением HDL Verifier набора команд ModelSim.

  • Инициирует тестовый сеанс террасирования MATLAB для загруженного экземпляра декодера сущности с matlabtb командой. Эта команда является расширением набора команд ModelSim. Команда в примере задает экземпляр сущности, функция MATLAB, которая должна протестировать сущность (manchester_decoder.m), и связь сокета TCP с портом сокета portnum. Для ссылки, которая будет установлена между ModelSim и MATLAB, значение portnum должно совпадать с портом сокета, который был задан, когда сервер MATLAB (hdldaemon) был запущен.

  • Запускает симуляцию ModelSim для 3 000 итераций текущего предела разрешения. По умолчанию симуляция запускается в течение 3 000 наносекунд. Выходы ModelSim, не прося подтверждение.

5. Запускает ModelSim для использования с HDL Verifier с вызовом vsim.

vsim('startupfile','decoder.do','tclstart',tclcmd);

Эта команда начинает ModelSim с командного сценария Tcl, который выполняет некоторые команды запуска общего назначения и затем пользовательские команды, заданные с 'tclstart' свойством. 'startfile' свойство заставляет vsim писать целому запуску командный сценарий Tcl в decoder.do для дальнейшего использования или использование.

6. Отображает информационные сообщения и ожидает (manchester_decoder.m), чтобы выполнение до завершения.

disp('Waiting for testing of ''decoder.vhd'' to complete');
disp('(flag from manchester_decoder.m indicates completion)');
while testisdone == 0,
    pause(0.501);
end
disp('MATLAB test of decoder.vhd is complete!');
disp('Check the generated plot for results.');
Waiting for testing of 'decoder.vhd' to complete
(flag from manchester_decoder.m indicates completion)
done
MATLAB test of decoder.vhd is complete!
Check the generated plot for results.

Тестирование Конвольвера I/Q

Так же для конвольвера I/Q. Скрипт в качестве примера:

1. Устанавливает флаг testisdone на 0 и отображает информационные сообщения.

testisdone = 0;

2. Устанавливает каталог проекта на директорию, которая имеет доступ для записи и подходит для содержания проекта ModelSim.

projectdir = pwd;

3. Изменяет формат каталога проекта и технических требований файла VHDL декодера к формату UNIX, который ModelSim и использование Tcl, заменяя обратные косые черты (\) с наклонными чертами вправо (/).

unixprojectdir =  ['"' strrep(projectdir,'\','/')  '"'];
unixsrcfile = ['"' ...
    strrep(fullfile(matlabroot,'toolbox','edalink','extensions','modelsim',...
    'modelsimdemos','vhdl','manchester','iqconv.vhd'),'\','/') ...
    '"'];

4. Задает последовательность команд Tcl, которые будут выполняться в контексте ModelSim.

tclcmd = { ['cd ' unixprojectdir ],...
            'vlib work',...
           ['vcom -performdefaultbinding ' unixsrcfile],...
            'vsimmatlab work.iqconv',...
            'force /iqconv/clk 1 0, 0 5 ns -repeat 10 ns ',...
            'force /iqconv/enable 1',...
            'force /iqconv/reset 1',...
            'run 100',...
           ['matlabtb iqconv -rising /iqconv/clk -mfunc manchester_iqconv -socket ',num2str(portnum)],...
            'run 1000',...
            'quit -f'};

Следующий список задает каждую команду:

  • Изменения в перезаписываемом каталоге проекта.

  • Настраивает размещение окна ModelSim, таким образом, это не затеняет окно MATLAB.

  • Создает библиотеку проекта, работают, если она уже не существует.

  • Компилирует файл VHDL. Скрипт в качестве примера задает-performdefaultbinding опцию, чтобы включить привязку по умолчанию, если они были отключены в modelsim.ini файле.

  • Загружает экземпляр сущности VHDL iqconv для тестового террасирования MATLAB с vsimmatlab командой. Эта команда является расширением HDL Verifier набора команд ModelSim.

  • Применяет команду силы ModelSim, чтобы управлять clk сущности, включить и сбросить сигналы, которые передаются испытательному стенду как oport данные. Первая команда силы указывает, что clk должен быть установлен в 1 во время, равняется 0, в 0 после 5 наносекунд, и повторяйте высокий-к-низкому цикл каждые 10 наносекунд. Вторые и третьи команды силы устанавливают разрешение и сигналы сброса к 1.

  • Запускает симуляцию ModelSim для 100 итераций текущего предела. По умолчанию симуляция запускается в течение 100 наносекунд. Это составляет фазу запуска.

  • Инициирует тестовый сеанс террасирования MATLAB для загруженного экземпляра сущности iqconv с matlabtb командой. Эта команда является расширением набора команд ModelSim. Команда в примере задает экземпляр сущности iqconv, событие, которое инициировало вызов функции MATLAB, функция MATLAB, которая должна протестировать сущность (manchester_iqconv.m), и связь сокета TCP с портом сокета portnum. - возрастающая опция указывает, что функция MATLAB называется, когда clk испытывает возрастающее ребро. Для ссылки, которая будет установлена между ModelSim и MATLAB, значение, заданное с - сокет должен совпадать с портом сокета, который был задан, когда сервер MATLAB (hdldaemon) был запущен.

  • Запускает симуляцию ModelSim для 1 000 итераций текущего предела разрешения. По умолчанию симуляция запускается в течение 1 000 наносекунд.

  • Выходы ModelSim, не прося подтверждение.

5. Запускает ModelSim для использования с HDL Verifier с вызовом vsim.

vsim('startupfile','iqconv.do','tclstart',tclcmd);

Эта команда начинает ModelSim с командного сценария Tcl, который выполняет некоторые команды запуска общего назначения и затем пользовательские команды, заданные с 'tclstart' свойством. 'startfile' свойство заставляет vsim писать целому запуску командный сценарий Tcl в iqconv.do для дальнейшего использования или использование.

6. Отображает информационные сообщения и ожидает (manchester_iqconv.m), чтобы выполнение до завершения.

disp('Waiting for testing of ''iqconv.vhd'' to complete');
disp('(flag from manchester_iqconv.m indicates completion)');
while testisdone == 0,
    pause(0.501);
end
disp('Test of iqconv.vhd complete (If it failed, there would be an error message printed above)!');
Waiting for testing of 'iqconv.vhd' to complete
(flag from manchester_iqconv.m indicates completion)
Test of iqconv.vhd complete (If it failed, there would be an error message printed above)!

Тестирование счетчика состояния

Теперь мы тестируем Счетчик состояния (statecnt.vhd). Скрипт создаст проверки isum и qsum выходные параметры для случайным образом сгенерированного потока выборок данных и устанавливает флаг testisdone на 0 и отображает информационные сообщения.

testisdone = 0;
projectdir = pwd;
unixprojectdir =  ['"' strrep(projectdir,'\','/')  '"'];
unixsrcfile = ['"' ...
    strrep(fullfile(matlabroot,'toolbox','edalink','extensions','modelsim','modelsimdemos',...
    'vhdl','manchester','statecnt.vhd'),'\','/') ...
    '"'];

tclcmd = { ['cd ' unixprojectdir ],...
            'vlib work',...
           ['vcom -performdefaultbinding ' unixsrcfile],...
           'vsimmatlab -t 1ns work.statecnt ',...
            'force /statecnt/clk 1 0, 0 5 ns -repeat 10 ns ',...
           ['matlabtb statecnt -mfunc manchester_statecnt -socket ',num2str(portnum)],...
            'run 30000',...
            'quit -f'};

Следующий список задает каждую команду TCL в tclcmd:

  • Изменения в перезаписываемом каталоге проекта.

  • Настраивает размещение окна ModelSim, таким образом, это не затеняет окно MATLAB.

  • Создает библиотеку проекта, работают, если она уже не существует.

  • Компилирует файл VHDL. Скрипт в качестве примера задает-performdefaultbinding опцию, чтобы включить привязку по умолчанию, если они были отключены в modelsim.ini файле. Загружает экземпляр сущности VHDL statecnt для тестового террасирования MATLAB с vsimmatlab командой. Эта команда является расширением HDL Verifier набора команд ModelSim.-t опция задает разрешение времени средства моделирования ModelSim 1 наносекунды (значение по умолчанию). Применяет команду силы ModelSim, чтобы управлять сигналом clk сущности, который передается испытательному стенду как oport данные. Команда силы указывает, что clk должен быть установлен в 1 во время, равняется 0, в 0 после 5 наносекунд, и повторяйте высокий-к-низкому цикл каждые 10 наносекунд.

  • Инициирует тестовый сеанс террасирования MATLAB для загруженного экземпляра сущности statecnt с matlabtb командой. Эта команда является расширением набора команд ModelSim. Команда в примере задает экземпляр сущности statecnt, функция MATLAB, которая должна протестировать сущность (manchester_statecnt.m), и связь сокета TCP с портом сокета portnum. Для ссылки, которая будет установлена между ModelSim и MATLAB, значение, заданное с - сокет должен совпадать с портом сокета, который был задан, когда сервер MATLAB (hdldaemon) был запущен.

  • Запускает симуляцию ModelSim для 30 000 итераций текущего предела разрешения. По умолчанию симуляция запускается в течение 30 000 наносекунд.

  • Выходы ModelSim, не прося подтверждение.

vsim('startupfile','statecnt.do','tclstart',tclcmd);

disp('Waiting for testing of ''statecnt.vhd'' to complete');
disp('(flag from manchester_statecnt.m indicates completion)');
while testisdone == 0,
    pause(0.501);
end
disp('MATLAB test of statecnt.vhd is complete!');
disp('Check the generated plot for results.');
Waiting for testing of 'statecnt.vhd' to complete
(flag from manchester_statecnt.m indicates completion)
MATLAB test of statecnt.vhd is complete!
Check the generated plot for results.

Уничтожьте hdldaemon

hdldaemon('KILL');
HDLDaemon server was shutdown

Тест завершенного statecnt.vhd (Исследуют произведенный график). Это завершает манчестерский пример примера.