Использование оптимизированных библиотечных блоков CRC HDL

В этом примере показано, как использовать библиотечные блоки HDL-оптимизированного CRC-генератора и CRC-детектора, а затем сконфигурировать эти блоки в соответствии со стандартом IEEE ® 802.11 [1].

Введение

Модель показов, как использовать HDL-оптимизированный генератор CRC и детектор библиотечных блоков для симуляции и генерации HDL-кода. В качестве приложения используется стандарт 802.11. Дополнительные сведения о поддержке HDL для блоков оптимизированного CRC HDL см. в документации. Чтобы узнать больше об алгоритме, используемом в блоках, смотрите статью в [2].

Чтобы открыть эту модель примера, запустите следующие команды:

modelname = 'commcrchdl';
open_system(modelname);

В этой модели Подсистема CRC верхнего уровня содержит блоки HDL Optimized CRC Generator и Detector. Эта подсистема также имеет подсистему AddNoise, которую можно выбрать, чтобы добавить шум к сгенерированной контрольной сумме CRC. Чтобы открыть эту подсистему, выполните следующие команды:

systemname = [modelname '/CRC Subsystem'];
open_system(systemname);

Настройки параметров

  • Полином

CRC-CCITT используется в стандарте IEEE ® 802.11 для защиты полей SIGNAL, SERVICE и LENGTH. Вектору-строке [1 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 1] представляет полином:

  • Начальное состояние

Оптимизированный HDL блок CRC Generator в демонстрационном ролике использует метод Direct Method, т.е. подает сообщение в самый значительный бит (MSB) регистра сдвига контрольной суммы и обрабатывает сообщение без заполнения нулями. Детали реализации CRC можно найти в этой модели. Схема реализации CRC IEEE 802.11 показана на фигуре 15-2 стандарта 802.11. Начальное состояние устанавливается равным 1.

  • Окончательное значение XOR

Окончательное значение XOR устанавливается следующим 0xFFFF, чтобы реализовать таковые контрольной суммы CRC.

Входные сигналы

Тестовый вектор в этой модели использует пример сигнала DBPSK, заданный в стандарте 802.11. Тестовые данные, заполненные нулями CRC_length, обрабатываются со скоростью 16 битов/выборка в потоковом режиме. Параметр dataIn_width, который является шириной порта генератора CRC входа данных порта In, определяет скорость обработки данных. mlen определяет период в сигналах управления startIn, endIn и validIn. dlen определяет ширину импульса сигнала validIn. Входные сигналы сконфигурированы в функции обратного вызова InitFcn в диалоговом окне Свойства.

 %DBPSK data
 data = [0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0];
 crc_len = 16;
 % pad crc_len zero
 msg = [data zeros(1,crc_len)];
 dataIn_width = 16;
 mlen = length(msg)/dataIn_width;
 dlen = length(data)/dataIn_width;

Вы можете изменить dataIn_width на 8,4,2,1 биты (биты ) (ы) в этом примере, чтобы соответствовать вашим требованиям проекта. Например, если вы обрабатываете данные с длиной 56, помимо заполнения 8-битовых нулей и использования dataIn_with 16, можно выбрать dataIn_width, чтобы быть 8, чтобы убедиться, что mlen и dlen все являются целыми числами.

Выходные сигналы

Запустите модель с помощью следующей команды:

sim(modelname);

Несколько ключевых сигналов были зарегистрированы в рабочей области. Эти сигналы можно просмотреть в окне Logic Analyzer. Функция commcrchdl_plot показывает, как установить отображение Logic Analyzer. Для получения дополнительной информации о системной object™ Logic Analyzer см. dsp.LogicAnalyzer.

h = commcrchdl_plot(dataIn,startIn,endIn,validIn,...
                dataOut_gen,startOut_gen,endOut_gen,validOut_gen,...
                dataIn_det,dataOut_det,startOut_det,endOut_det,validOut_det,err);

dataIn, startIn, endIn и validIn являются входными данными и управляющими сигналами к генератору HDL CRC. dataOut_gen (выход генератора CRC) отображает сообщение с контрольной суммой, добавленной каждый dataIn_width бит на выборку. Контрольную сумму можно считать, когда endOut_gen высока в выход форме волны. Значение 0x5B57 соответствует CRC-16 FCS, указанному в стандартном разделе 802.11 15.2.3.6. dataIn_det показывает сообщение с поврежденной контрольной суммой. dataOut_det отображает выходные данные сообщения детектора CRC. Ошибка обнаруживается, когда сигнал err высок. err действительно, когда endOut_det активно.

Начальные задержки вводятся на выходе генератора CRC и детектора. Вычислить начальные задержки можно с помощью следующей команды:

 initial_delay_gen =  crc_len/dataIn_width + 2;
 initial_delay_det =  4*crc_len/dataIn_width + 4;

Проверяйте и генерируйте HDL-код

Чтобы проверить и сгенерировать HDL-код этого примера, вы должны иметь лицензию HDL- Coder™.

Можно использовать команды makehdl (subsystemname) и makehdltb (subsystemname), чтобы сгенерировать HDL-код и тестбенч для подсистем HDL CRC в передатчике и HDL CRC в приемнике.

Укажите подсистему как 'commcrchdl/CRC Subsystem/HDL CRC в передатчике' или 'commcrchdl/CRC Subsystem/HDL CRC в приемнике'.

Выбранные ссылки

  1. IEEE 802.11: Спецификации управления доступом к среде беспроводной локальной сети (MAC) и физического слоя (PHY). (редакция 2007 года). IEEE-SA. 12 июня 2007 года.

  1. Джузеппе Кампобелло, Джузеппе Патане, Марко Руссо. «Параллельная реализация CRC», Транзакции IEEE на компьютерах, том 52, № 10, стр. 1312-1319, октябрь 2003.