В этом примере показано, как использовать библиотечные блоки 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- Coder™.
Можно использовать команды makehdl (subsystemname) и makehdltb (subsystemname), чтобы сгенерировать 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.