主要内容

comm.HDLCRCGenerator

生成CRC编码比特和添加到输入数据

描述

这HDL-optimized循环冗余码(CRC)发电机系统对象™生成循环冗余码(CRC)。而不是帧处理,HDLCRCGenerator系统对象流程流数据。对象有帧同步控制信号的输入和输出数据流。

生成循环冗余代码:

  1. 创建comm.HDLCRCGenerator对象并设置其属性。

  2. 调用对象的参数,就好像它是一个函数。

了解更多关于系统对象是如何工作的,看到的系统对象是什么?

创建

描述

例子

CRCGen= comm.HDLCRCGenerator创建一个HDL-optimized CRC发电机系统对象,CRCGen。这个对象生成CRC位根据指定的发电机多项式和附加的输入数据。

CRCGen= comm.HDLCRCGenerator (名称,值)设置使用一个或多个属性名称-值对。在单引号附上每个属性的名字。例如,

CRCGen = comm.HDLCRCGenerator(“多项式”,[1 0 0 0 1 0 0 0 0),…“FinalXORValue”, [1 1 0 0 0 0 0 0]);
指定一个CRC8多项式和一个8位值XOR和最后的校验和。

CRCGen= comm.HDLCRCGenerator (,名称,值)设置多项式财产,另指定属性名称指定的值。

属性

全部展开

属性,除非另有注明nontunable后,这意味着你不能改变它们的值调用对象。对象锁当你叫他们,释放函数打开它们。

如果一个属性可调在任何时候,你可以改变它的值。

改变属性值的更多信息,请参阅系统设计在MATLAB使用系统对象

指定为一个二进制向量发生器多项式,系数按照降序排列的权力。向量长度必须等于多项式的次数+ 1。

移位寄存器的初始条件,指定为一个二进制,双精度或单精度标量或矢量。如果这个属性指定为一个向量,向量长度的学位是发电机多项式中指定多项式财产。如果这个属性指定为一个标量,对象扩展值向量的长度等于发电机多项式的程度。

校验和的计算方法,指定为一个逻辑标量。当这个属性真正的,对象使用CRC校验和计算的直接算法。

了解直接和非直接算法,明白了循环冗余校验码

输入字节顺序,指定为一个逻辑标量。当这个属性真正的输入数据,对象掀bytewise基础上进入前移位寄存器。

校验和字节顺序,指定为一个逻辑标量。当这个属性真正的,对象翻转输出CRC校验和围绕其中心。

校验和面具,指定为一个二进制,双或单精度的数据类型标量或矢量。对象之前,这个值异或校验和附加输入数据的校验和。如果这个属性指定为一个向量,向量长度的学位是发电机多项式中指定多项式财产。如果这个属性指定为一个标量,对象扩展值向量的长度等于发电机多项式的程度。

使用

描述

(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长度多项式中指定的顺序多项式财产。

数据类型:|uint8|uint16|uint32|逻辑|无符号fi

输入消息,指定为一个逻辑标量。

输入消息,指定为一个逻辑标量。

输入数据的有效性,指定为一个逻辑标量。当validIn是1 (真正的),输入的对象计算CRC校验和X

输出参数

全部展开

输出消息,组成的X与附加校验和,作为一个标量返回整数或二进制宽度和相同的列向量数据类型作为输入X

输入消息,作为一个逻辑标量返回。

输入消息,作为一个逻辑标量返回。

输入数据的有效性,作为一个逻辑标量返回。当validOut是1 (真正的),输出数据Y是有效的。

对象的功能

使用一个目标函数,指定系统对象作为第一个输入参数。例如,释放系统资源的系统对象命名obj使用这个语法:

发行版(obj)

全部展开

一步 运行系统对象算法
释放 释放资源,并允许修改系统对象属性值和输入特征
重置 重置的内部状态系统对象

例子

全部折叠

使用HDL-optimized CRC编码和解码信号发生器和探测器系统对象。这个例子展示了如何在一个函数包含每个对象对HDL代码生成。

创建一个32位的消息编码,在两个16位的列。

味精=兰迪([0,1],16岁,2);

运行了12步骤来适应这两个对象的延迟。为所有步骤指定控制信号。前两个样品是有效数据,其余的正在处理延迟。

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

通过随机输入HDLCRCGenerator系统对象™虽然处理的输入消息。随机数据不是因为输入有效信号进行编码0步骤3到10。

randIn =兰迪([0,1],16日numSteps-2);dataIn =(味精randIn);

编写一个函数,每个系统™对象创建和调用。你可以从这些函数生成高密度脂蛋白。发电机和探测器对象都有一个CRC的长度16和使用默认的多项式。

函数[dataOut, startOut endOut validOut] = HDLCRC16Gen (dataIn、startIn endIn, validIn)% HDLCRC16Gen%生成CRC校验和使用comm.HDLCRCGenerator系统对象(TM)% dataIn是一个二进制列向量。% startIn, endIn, validIn逻辑标量值。%从这个函数可以生成HDL代码。持续的crcg16;如果isempty (crcg16) crcg16 = comm.HDLCRCGenerator ()结束[dataOut, startOut endOut validOut] = crcg16 (dataIn, startIn, endIn validIn);结束
函数[dataOut, startOut endOut validOut,犯错]= HDLCRC16Det (dataIn、startIn endIn, validIn)% HDLCRC16Det%检查CRC校验和使用comm.HDLCRCDetector系统对象(TM)% dataIn是一个二进制列向量。% startIn, endIn, validIn逻辑标量值。%从这个函数可以生成HDL代码。持续的crcd16;如果isempty (crcd16) crcd16 = comm.HDLCRCDetector ()结束[dataOut, startOut endOut validOut,犯错]= crcd16 (dataIn, startIn, endIn validIn);结束

CRC生成器函数的调用。编码的消息是原始消息+ 16位校验和。

i = 1: numSteps [dataOutGen(:,我),startOutGen(我),endOutGen(我),validOutGen (i)) =HDLCRC16Gen(逻辑(dataIn(:,我)),startIn(我),endIn(我),validIn(我));结束
crcg16 = comm.HDLCRCGenerator属性:多项式:[1 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 1]InitialState: 0 DirectMethod:假ReflectInput:假ReflectCRCChecksum:假FinalXORValue: 0

添加噪声抛一点的消息。

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

调用CRC探测器函数。探测器的输出是输入消息校验和删除。如果输入的校验和是不正确的,犯错标志设置输出的最后一句话。

i = 1: numSteps [dataOut(:,我),startOut(我),endOut(我),validOut(我),犯错(i)) =HDLCRC16Det(逻辑(dataOutNoise(:,我)),startOutGen(我),endOutGen(我),validOutGen(我));结束
crcd16 = comm.HDLCRCDetector属性:多项式:[1 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 1]InitialState: 0 DirectMethod:假ReflectInput:假ReflectCRCChecksum:假FinalXORValue: 0

使用逻辑分析仪查看输入和输出信号。

渠道= {“validIn”,' startIn ',“endIn”,{“dataIn”,“基数”,十六进制的},“validOutGen”,“startOutGen”,“endOutGen”,{“dataOutGen”,“基数”,十六进制的},{“dataOutNoise”,“基数”,十六进制的},“validOut”,“startOut”,“endOut”,“呃”,{“dataOut”,“基数”,十六进制的}};la = dsp.LogicAnalyzer (“名字”,“CRC编码和解码”,“NumInputPorts”、长度(渠道),“写成BackgroundColor”,“黑”,“DisplayChannelHeight”8);2 = 1:长度(渠道)如果iscell({2})频道%显示数据信号十六进制整数c ={2}渠道;modifyDisplayChannel(洛杉矶,二世,“名字”c, c {1}, {2}, {3})%二进制列向量转换为整数cVal = eval (c {1});dat2 = uint16 (bit2int (cVal、尺寸(cVal 1)) ');chanData{2} =挤压(dat2);其他的modifyDisplayChannel(洛杉矶,二世,“名字”、通道{2})chanData{2} =挤压(eval({2})频道”);结束结束洛杉矶(chanData {}):

算法

全部展开

扩展功能

版本历史

介绍了R2012a