comm.HDLCRCGenerator

Сгенерируйте биты кода CRC и добавьте к входным данным

Описание

Эта HDL-оптимизированная система генератора кода циклической избыточности (CRC) object™ генерирует биты кода циклической избыточности (CRC). Вместо обработки систем координат, HDLCRCGenerator Системный объект обрабатывает потоковые данные. Объект имеет систему координат сигнала управления синхронизацией для обоих потоков входных и выходных данных.

Чтобы сгенерировать циклическую избыточность кода битах:

  1. Создайте comm.HDLCRCGenerator Объекту и установите его свойства.

  2. Вызывайте объект с аргументами, как будто это функция.

Дополнительные сведения о работе системных объектов см. в разделе «Что такое системные объекты?».

Создание

Описание

пример

CRCGen = comm.HDLCRCGenerator создает HDL-оптимизированный генератор CRC Системного объекта, CRCGen. Этот объект генерирует биты CRC в соответствии с заданным полиномом генератора и добавляет их к входным данным.

CRCGen = comm.HDLCRCGenerator(Name,Value) устанавливает свойства с помощью одной или нескольких пар "имя-значение". Заключайте каждое имя свойства в одинарные кавычки. Для примера,

CRCGen = comm.HDLCRCGenerator('Polynomial',[1 0 0 0 1 0 0 0 0], ...
'FinalXORValue',[1 1 0 0 0 0 0 0]);
задает CRC8 полином и 8-битное значение XOR с конечной контрольной суммой.

CRCGen = comm.HDLCRCGenerator(poly,Name,Value) устанавливает Polynomial свойство к poly, и другие заданные имена свойства к заданным значениям.

Свойства

расширить все

Если не указано иное, свойства являются нетронутыми, что означает, что вы не можете изменить их значения после вызова объекта. Объекты блокируются, когда вы вызываете их, и release функция разблокирует их.

Если свойство настраивается, можно изменить его значение в любой момент.

Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Использование Системных объектов.

Полином генератора, заданный как двоичный вектор, с коэффициентами в порядке убывания степеней. Длина вектора должна быть равна степени полинома плюс 1.

Начальные условия регистра сдвига, заданные как двоичный, двойная точность или одинарная точность скаляра или вектора. Если вы задаете это свойство как вектор, длина вектора является степенью полинома генератора, которую вы задаете в Polynomial свойство. Если вы задаете это свойство как скаляр, объект расширяет значение до вектора длины, равной степени полинома генератора.

Метод вычисления контрольной суммы, заданный как логический скаляр. Когда это свойство trueобъект использует прямой алгоритм вычисления контрольной суммы CRC.

Чтобы узнать о прямых и непрямых алгоритмах, смотрите Циклические Проверки кода Избыточности.

Вход байта, заданный как логический скаляр. Когда это свойство trueобъект переворачивает входные данные на байтовом базисный, прежде чем он входит в регистр сдвига.

Порядок байта контрольной суммы, заданный как логический скаляр. Когда это свойство trueобъект разворачивает выходную контрольную сумму CRC вокруг своего центра.

Маска контрольной суммы, заданная как двоичная, двойная или одинарная точность данных тип скаляра или вектора. Объект XOR определяет контрольную сумму с этим значением перед добавлением контрольной суммы к входным данным. Если вы задаете это свойство как вектор, длина вектора является степенью полинома генератора, которую вы задаете в Polynomial свойство. Если вы задаете это свойство как скаляр, объект расширяет значение до вектора длины, равной степени полинома генератора.

Использование

Описание

[Y,startOut,endOut,validOut] = CRCn(X,startIn,endIn, validIn) генерирует контрольные суммы CRC для входного сообщения X на основе управляющих сигналов и добавляет контрольные суммы к X.

Входные параметры

расширить все

Вход сообщение, заданное как двоичный вектор или скаляр целое число, представляющее несколько битам. Для примера вектора введите [0,0,0,1,0,0,1,1] эквивалентно uint8 входной 19.

Если вход является вектором, тип данных может быть двойным или логическим. Если вход является скаляром, тип данных может быть беззнаковым целым числом или беззнаковым фиксированной точкой с 0 дробными битами (fi([],0,N,0)).

X может быть частью или всем кодируемым сообщением.

Длина X должно быть меньше или равно длине CRC, а длина CRC должна быть делиться на длину X.

Длина CRC является порядком полинома, который вы задаете в Polynomial свойство.

Типы данных: double | uint8 | uint16 | uint32 | logical | unsigned fi

Начало входного сообщения, заданное как логический скаляр.

Конец входного сообщения, заданный как логический скаляр.

Валидность входных данных, заданная как логический скаляр. Когда validIn равен 1 (true), объект вычисляет контрольную сумму CRC для входных X.

Выходные аргументы

расширить все

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

Начало входного сообщения, возвращаемое как логический скаляр.

Конец входного сообщения, возвращенный как логический скаляр.

Валидность входных данных, возвращенная как логический скаляр. Когда validOut равен 1 (true), выходные данные Y является допустимым.

Функции объекта

Чтобы использовать функцию объекта, задайте системный объект в качестве первого входного параметра. Например, чтобы освободить системные ресурсы системного объекта с именем obj, используйте следующий синтаксис:

release(obj)

расширить все

stepЗапуск алгоритма системного объекта
releaseОтпустите ресурсы и допустите изменения в значениях свойств системного объекта и входных характеристиках
resetСброс внутренних состояний Системного объекта

Примеры

свернуть все

Закодируйте и декодируйте сигнал, используя HDL-оптимизированные генератор CRC и детектор Системных объектов. В этом примере показано, как включить каждый объект в функцию для генерации HDL-кода.

Создайте 32-битное сообщение для кодирования в двух 16-битных столбцах.

msg = randi([0 1],16,2);

Выполните 12 шагов, чтобы учесть задержки для обоих объектов. Назначьте управляющие сигналы для всех шагов. Первые две выборки являются допустимыми данными, а оставшиеся являются задержками обработки.

numSteps = 12;
startIn = logical([1 0 0 0 0 0 0 0 0 0 0 0]);
endIn   = logical([0 1 0 0 0 0 0 0 0 0 0 0]);
validIn = logical([1 1 0 0 0 0 0 0 0 0 0 0]);

Передайте случайный вход в HDLCRCGenerator Системное object™ во время обработки входа сообщения. Случайные данные не кодируются, потому что входной допустимый сигнал 0 для шагов, 3 для 10.

randIn = randi([0, 1],16,numSteps-2);
dataIn = [msg randIn];

Написание функции, которая создает и вызывает каждый Системный object™. Из этих функций можно сгенерировать HDL. Оба объекта генератора и детектора имеют длину CRC 16 и используют полином по умолчанию.

function [dataOut,startOut,endOut,validOut] = HDLCRC16Gen(dataIn,startIn,endIn,validIn)
%HDLCRC16Gen
% Generates CRC checksum using the comm.HDLCRCGenerator System object(TM)
% dataIn is a binary column vector. 
% startIn, endIn, and validIn are logical scalar values.
% You can generate HDL code from this function.

  persistent crcg16;
  if isempty(crcg16)
    crcg16 = comm.HDLCRCGenerator()
  end    
  [dataOut,startOut,endOut,validOut] = crcg16(dataIn,startIn,endIn,validIn);
end


function [dataOut,startOut,endOut,validOut,err] = HDLCRC16Det(dataIn,startIn,endIn,validIn)
%HDLCRC16Det
% Checks CRC checksum using the comm.HDLCRCDetector System object(TM)
% dataIn is a binary column vector. 
% startIn, endIn, and validIn are logical scalar values.
% You can generate HDL code from this function.

  persistent crcd16;
  if isempty(crcd16)
    crcd16 = comm.HDLCRCDetector()
  end    
  [dataOut,startOut,endOut,validOut,err] = crcd16(dataIn,startIn,endIn,validIn);
end


Вызовите функцию генератора CRC. Закодированное сообщение является исходным сообщением плюс 16-битовая контрольная сумма.

 for i =  1:numSteps
 [dataOutGen(:,i),startOutGen(i),endOutGen(i),validOutGen(i)] = ...
     HDLCRC16Gen(logical(dataIn(:,i)),startIn(i),endIn(i),validIn(i));
 end
crcg16 = 

  comm.HDLCRCGenerator with properties:

            Polynomial: [1 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 1]
          InitialState: 0
          DirectMethod: false
          ReflectInput: false
    ReflectCRCChecksum: false
         FinalXORValue: 0

Добавьте шум, развернув немного в сообщении.

dataOutNoise = dataOutGen;
dataOutNoise(2,4) = ~dataOutNoise(2,4);

Вызовите функцию CRC-детектора. Выводом детектора является вход сообщение с удаленной контрольной суммой. Если контрольная сумма входа была неправильной, err флаг устанавливается с последним словом выхода.

for i = 1:numSteps
[dataOut(:,i),startOut(i),endOut(i),validOut(i),err(i)] = ...
    HDLCRC16Det(logical(dataOutNoise(:,i)),startOutGen(i),endOutGen(i),validOutGen(i));
end
crcd16 = 

  comm.HDLCRCDetector with properties:

            Polynomial: [1 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 1]
          InitialState: 0
          DirectMethod: false
          ReflectInput: false
    ReflectCRCChecksum: false
         FinalXORValue: 0

Используйте Logic Analyzer, чтобы просмотреть входные и выходные сигналы.

channels = {'validIn','startIn','endIn',...
    {'dataIn','Radix','Hexadecimal'},...
    'validOutGen','startOutGen','endOutGen',...
    {'dataOutGen','Radix','Hexadecimal'},...
    {'dataOutNoise','Radix','Hexadecimal'},...
    'validOut','startOut','endOut','err',...
    {'dataOut','Radix','Hexadecimal'}};
la = dsp.LogicAnalyzer('Name','CRC Encode and Decode','NumInputPorts',length(channels),...
                      'BackgroundColor','Black','DisplayChannelHeight',8);

 for ii = 1:length(channels)
    if iscell(channels{ii})
        % Display data signals as hexadecimal integers
        c = channels{ii};
        modifyDisplayChannel(la,ii,'Name',c{1},c{2},c{3})
        % Convert binary column vector to integer
        dat2 = uint16(bi2de(eval(c{1})'));
        chanData{ii} = squeeze(dat2);
    else
        modifyDisplayChannel(la,ii,'Name',channels{ii})
        chanData{ii} = squeeze(eval(channels{ii})');
    end
 end
la(chanData{:})

Алгоритмы

расширить все

Расширенные возможности

.
Введенный в R2012a