коммуникация. HDLCRCDetector

Обнаружьте ошибки во входных данных с помощью CRC

Описание

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

Вычислить и сравнить контрольные суммы:

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

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

Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты? MATLAB.

Создание

Синтаксис

CRCDet = comm.HDLCRCDetector
CRCDet = comm.HDLCRCDetector(Name,Value)
CRCDet = comm.HDLCRCDetector(poly,Name,Value)

Описание

пример

CRCDet = comm.HDLCRCDetector создает оптимизированный HDL Системный объект детектора CRC, CRCDet, который обнаруживает ошибки во входных данных согласно заданному полиному генератора.

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

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

CRCDet = comm.HDLCRCDetector(poly,Name,Value) создает оптимизированный HDL Системный объект детектора CRC, CRCDet, с набором свойств Polynomial к poly и другим заданным набором имен свойства к заданным значениям.

Свойства

развернуть все

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

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

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

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

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

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

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

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

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

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

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

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

Например, y = step(obj,x) и y = obj(x) выполняют эквивалентные операции.

Синтаксис

[Y,startOut,endOut,validOut,err] = CRCn(X,startIn,endIn,validIn)

Описание

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

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

развернуть все

Входной сигнал и добавленная контрольная сумма, заданная как бинарный вектор или скалярное целое число, представляющее несколько битов. Например, векторный вход [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.

Запустите входного сигнала, возвращенного как логический скаляр.

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

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

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

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

Чтобы использовать объектную функцию, задайте Системный объект как первый входной параметр. Например, чтобы выпустить системные ресурсы Системного объекта под названием 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 и используйте полином по умолчанию.

Примечание: Этот объектный синтаксис запускается только в R2016b или позже. Если вы используете более ранний релиз, заменяете каждый вызов объекта с эквивалентным синтаксисом step. Например, замените myObject(x) на step(myObject,x).

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{:})

Алгоритмы

развернуть все

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

Представленный в R2012b