В этом примере показано, как использовать блоки библиотеки оптимизированного генератора CRC HDL и детектора CRC, а затем сконфигурировать эти блоки в соответствии со стандартом IEEE ® 802.11 [1].
В модели показано, как использовать оптимизированные блоки генератора CRC HDL и библиотеки детекторов для моделирования и генерации кода HDL. В качестве приложения используется стандарт 802.11. Дополнительные сведения о поддержке HDL для блоков CRC, оптимизированных для HDL, см. в документации. Дополнительные сведения об алгоритме, используемом в блоках, см. в статье [2].
Чтобы открыть эту примерную модель, выполните следующие команды.
modelname = 'commcrchdl';
open_system(modelname);

В этой модели подсистема CRC верхнего уровня содержит оптимизированные блоки генератора CRC HDL и детектора. Эта подсистема также имеет подсистему 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] представляет многочлен:

Начальное состояние
Оптимизированный блок генератора CRC HDL в демо-версии использует метод Direct, т.е. он подает сообщение в старший бит (MSB) регистра сдвига контрольной суммы и обрабатывает сообщение без заполнения нулей. Подробности реализации CRC можно найти в этой модели. Схема реализации IEEE 802.11 CRC показана на рис. 15-2 стандарта 802.11. Начальное состояние устанавливается равным 1.
Окончательное значение XOR
Конечное значение XOR устанавливается как 0xFFFF для реализации одного дополнения контрольной суммы CRC.
Тестовый вектор в этой модели использует пример сигнала DBPSK, указанный в стандарте 802.11. Данные испытаний, дополненные нолями CRC_length, обработаны на уровне 16 битов/образцов в текущем способе. Параметр dataIn_width, который представляет собой ширину порта данных входного порта генератора CRC В, определяет скорость обработки данных. mlen определяет период в сигналах элементов управления startIn, endIn и validIn. dlen определяет длительность импульса сигнала validIn. Входные сигналы настраиваются в функции обратного вызова InitFcn в диалоговом окне Свойства модели (Model Properties).
%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 функции показано, как настроить отображение логического анализатора. Для получения дополнительной информации о 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 являются входными данными и управляющими сигналами для генератора CRC ЛПВП. dataOut_gen (выход генератора CRC) отображает сообщение с контрольной суммой, добавляемой каждые dataIn_width бит на выборку. Контрольную сумму можно считать, если в выходной форме сигнала endOut_gen высокое значение. Значение 0x5B57 соответствует CRC-16 FCS, указанному в стандарте 802.11 раздела 15.2.3.6. dataIn_det показывает сообщение с поврежденной контрольной суммой. dataOut_det отображает выходной сигнал детектора CRC. Ошибка обнаруживается при высоком сигнале ошибки. err является действительной, когда endOut_det активен.
Начальные задержки вводятся на выходе генератора CRC и детектора. Вычислить начальные задержки можно с помощью следующей команды:
initial_delay_gen = crc_len/dataIn_width + 2; initial_delay_det = 4*crc_len/dataIn_width + 4;
Для проверки и генерации кода HDL в этом примере необходимо иметь лицензию HDL Coder™.
Команды makehdl (имя подсистемы) и makehdltb (имя подсистемы) можно использовать для генерации кода HDL и тестовых средств для подсистем HDL CRC в передатчике и HDL CRC в приемнике.
Укажите имя подсистемы как «commcrchdl/CRC Subsystem/HDL CRC в передатчике» или «commcrchdl/CRC Subsystem/HDL CRC в приемнике».
IEEE 802.11: Спецификации управления доступом к среде беспроводной локальной сети (MAC) и физического уровня (PHY). (редакция 2007 года). IEEE-SA. 12 июня 2007 года.
Джузеппе Кампобелло, Джузеппе Патане, Марко Руссо. «Параллельная реализация CRC», транзакции IEEE на компьютерах, том 52, № 10, стр. 1312-1319, октябрь 2003.