




免费预览已结束,剩余13页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
CRC码编码译码器的设计一数字数据通信的优点与模拟数据通信相比较,数字数据通信具有下列优点:l 数字技术比模拟技术发展更快,数字设备很容易通过集成电路来实现,并与计算机相结合,而由于超大规模集成电路技术的迅速发展,数字设备的体积与成本的下降速度大大超过模拟设备,性能价格比高;l 来自声音、视频和其他数据源的各类数据均可统一为数字信号的形式,并通过数字通信系统传输;l 在长距离数字通信中可以通过中继器放大和整形来保证数字信号的完整性而不累积噪音;l 以数据帧为单位传输数据,并通过检错编码和重发数据帧来发现与纠正通信错误,从而有效保证通信的可靠性;l 使用加密技术可有效增强通信的安全性;l 多路光纤技术的发展大大提高了数字通信的效率。二差错控制编码1概述通信系统中,信道存在的大量噪声和干扰使得经信道传输后接收到的码元波形变坏,故在接收端可能发生错误判决,造成误码(差错)。由信道中乘性干扰引起的码间串扰,通常可以采用均衡的方法纠正;而加性干扰的影响则要通过其他途径解决。通常,在设计数字通信系统时,首先应从合理地选择调制制度、解调方法以及发送功率等方面考虑。若采取上述措施仍难以满足要求,则要考虑采用下述的差错控制技术了。按加性干扰引起的错码分布规律的不同,可将差错分为三种类型:(l)随机差错:由随机噪声(如热噪声)造成的误码。错码的出现是随机的,错码之间没有相关性,是统计独立的,错码的分布是零散的。 (2)突发差错:由脉冲噪声(如闪电等)造成的误码。错码的出现是成串的,差错分布比较密集,也就是说,在一些短促的时间区间内会出现大量错码;差错之间有相关性。差错的持续时间称为突发长度。(3)混合差错:既出现随机差错又出现突发出错,而且哪一种都不能忽略不计时的差错称为混合差错。出现上述三种差错的信道,分别称为随机信道、突发信道和混合信道。为了降低误码率,提高数字通信的可靠性,往往要采用差错控制技术来发现可能产生的错码或发现并纠正错码。差错控制方式常用的有以下四种: (1)检错重发方式(ARQAutomation Repeat Request):接收端收到发送端发出的信码后经检验,如果发现有错码,但不知道该错码的准确位置,则通过反向信道把这一判断结果告诉发送端。然后,发送端把前面发出的信息重新传送,直到接收端确认已正确地收到信息为止。这种方式实时性不是很强,而且需要具备双向信道。适用于非实时通信系统,如计算机数据通信;。 (2)前向纠错方式(FECForward Error Correction):接收端在收到的信码中不仅能发现错码,而且还能够确定错码的准确位置,并纠正错码。对于二进制系统,如果能够确定错码的位置,就能够纠正它(只要将出错处的bit取反即可)。这种方式的优点是不需要反向清道(传送重发指令),也不存在由于反复重发所造成的时延,实时性好;但是纠错设备要比检错设备复杂。适用于实时通信系统,如语音通信等。(3)反馈校验方式:接收端将收到的信码原封不动地转发回发送端,并与原发送信码相比较。如果发现错误,则发送端再进行重发。这种方法原理和设备都较简单,但需要有双向信道。由于每一信码都相当于至少传送了两次,所以传输效率较低。 (4)混合纠错方式(HECHybrid Error Correction):该方式是(1)、(2)两种方式的结合,接收端若发现有少量错码,在码的纠错能力以内,则用前向纠错方式进行纠错;如果错码很多,超出了码的纠错能力范围,但能检测出有错码,则自动采用检错重发方式。这种方式能使通信系统的误码率达到很低,因此得到了广泛应用。此法又称为“纠检结合方式”。在上述几种方法中,第(1)、(2)和(4)种都需要在接收端识别有无错码。但信息码元序列是一随机序列,接收端是无法预知的(如果预先知道,就没有必要发送了),也无法识别其中有无错码。为了能够在接收端识别错码,要由发送端的信道编码器在信息码元序列中增加一些监督码元。这些监督码元和信码之间有一定的关系,使接收端可以利用这种关系由信道译码器来发现或纠正可能存在的错码。这种在信息码元序列中加入监督码元的编码就称为差错控制编码,又称为信道编码或纠错编码。在信息码中附加冗余的监督码降低了编码效率。可见,信道编码是以降低通信的有效性为代价来换取通信可靠性的提高。差错控制编码可以从不同的角度进行分类:按码的控制功能分为:检错码(只能发现差错)和纠错码(能发现并纠正错码)。 按信息码元和附加的监督码元之间的关系分为:分组码和非分组码。将信息码分组,为每组信码附加若干监督码,监督码元仅监督本码组中的信息码元,也就是说,每个码组的监督码元只和该码组的信息码元相关,而与其它组的信息码元无关,则这种码组称为分组码。如果分组内信息码元和监督码元之间是线性关系,则称为线性分组码;否则称为非线性分组码。如果采用的编码规则使若干个相邻的码组都具有了一定的相关性,则称这种码为非分组码。常用的卷积码就是非分组码中最主要的一类。卷积码虽然编码后的码元序列也划分为码组,但每组的监督码元不仅与本组的信息码元有关,而且与前面码组的信息码元也有约束关系。2纠错编码的基本原理如前所述,信道编码是在被传送的信息中附加一些监督码元,来检错和纠错。下面以三位二进制码组为例,说明检错纠错的基本原理。三位二进制码元共有23=8种可能的组合;000、001、010、011、100、101、110、111。下面分三种情况讨论(l)如果这8种码组都用于传送消息,即每个码组都是许用码组。在传输过程中若发生一个或多个误码,则一种码组会错误地变成另一种码组。这样的编码既不能检错,也不能纠铝,完全没有抗干扰能力;(2)若只选其中的000、011、101、110四种码组作为许用码组。除上述4种许用码组以外的另外4种码组001、010、100、111称为禁用码组。经观察我们可以发现,许用码组中“1”的个数为偶数个,禁用码组中“1”的个数为奇数个。如果在传输过程中发生了一位或三位的错码,则“1”的个数就变为奇数个,许用码组就变为禁用码组;接收端一旦发现这些禁用码组,就表明传输过程中发生了错误。用这种简单的校验关系可以发现一个和三个错误,但不能纠正错误。例如,当接收到的码组为010时,我们可以断定这是禁用码组,但无法判断原来的正确码组是哪个许用码组。虽然原发送码组为101的可能性很小(因为发生三个误码的情况极少),但不能绝对排除;即使传输过程中只发生一个误码,也有三种可能的发送码组:000、011和110。显然,上述编码无法发现2个错码。以上编码方法相当于只传递00、01、10、11四种信息,而第三位是附加的监督位。这位附加的监督码位与前面两位信息码元和在一起,保证码组中“1”码的个数为偶数。下表示出了这种情况:(3)如果进一步将许用码组限制为二种:000和 111。则不难看出,用这种方法可以发现所有不超过2个的误码;或能纠正一位错码。纠正一位错码的方法是:将 8个码组分成二个子集,其中000、 100、 010、001与许用码组000对应,111、011、101、110与许用码组111对应;这样,在接收端如果认为码组中仅有一个错码,只要收到第一子集中的码组即判为 000,收到第二子集中的码组即判为 111。例如,当收到的码组为禁用码组100时,如果认为该码组中仅有1个错码,则可判断此错码发生在“1”位,从而纠正为000;若认为上述接收码组中的错码数不超过两个,则存在两种可能性:000错一位和111错两位都可能变成100,因而只能检测出存在错码而无法纠正它。分组码一般用符号(n,k)表示,其中k是每个码组中二进信息码元的数目;n是每个码组的总位数,又称为码组长度(码长);nk = r为每码组中的监督码元数目,或称监督位数目。通常,将分组码规定为具有如下图所示的结构。图中前面k位(an-1ar)为信息位,后面附加个监督位(ar-1a0)。 分组码的结构在信道编码中,定义码组中非零码元的数目为码组的重量,简称码重,例如 010码组的码重为1,011码组的码重为2。把两个码组中对应码位上具有不同二进制码元的位数定义为两码组的距离,称为汉明(Hamming)距离,简称码距。我们把某种编码中各个码组间距离的最小值称为最小码距,可记为dmin。在上述三位二进制码组例子中,8种码组均为许用码组时,两码组间的最小距离为1,常记作dmin=1。在选四种码组为许用码组情况下,最小码距式中dmin=2;采用两种许用码组时,dmin=3。由上例可知,一种编码的最小码距直接关系到这种码的检错和纠错能力,码距实际上是由一种码组变成另一种码组必须变化的比特数。因此最小码距是信道编码的一个重要参数。在一般情况下,对于分组码有以下结论:为检测e个误码,要求该编码的最小码距dmine+1为纠正t个误码,要求该编码的最小码距dmin2t+1为纠正t个误码,同时检测e(et)个误码,要求最小码距dminte1所谓“纠正t个误码,同时检测e个误码”,是指若接收码组与某一许用码组间的距离在纠错能力范围t内,则按前向纠错方式工作,自动将误码予以纠正;而当与任何许用码组间的距离都超过t时,则按检错方式工作。也就是按“纠检结合的方式”工作。在简要讨论了编码的纠(检)错能力后,再来分析一下差错控制编码的效用。假设在信道中传输“0”和“l”的错误概率p相等,且p1,则在码长为n位的码组中发生r位错码的概率(误码率)为 例如,当码长n7,p103时,则有 可见,采用了差错控制编码,即使只能纠正(或检测)码组中的l2个错0码,也可以使误码率下降几个数量级。这就表明,只能纠(检)12个错码的简单编码也有很大实用价值。事实上,常用的差错控制编码大多数也只能纠正(或检测)码组中的l2个错码。3常用的简单信道编码实际常用的信道编码主要有两类:奇偶校验(Parity Check)编码和CRC循环冗余校验(Cyclic Redundancy Check)编码。(1)奇偶校验编码: 奇偶校验码分两种:一维奇偶校验码(又称单向奇偶校验码Row Parity Check,也又称为单个位奇偶校验码Single Bit Parity Check):特点是,无论信息位有多少,都在后面只加一位奇偶监督位。一维奇偶校验码又分为奇校验(Odd Check)码和偶校验(Even Check)码。奇校验码所加的监督位保证码组中“1”的数目为奇数,即满足下式条件:式中a0为监督位,前边的为信息位。偶校验与奇校验类似,只不过是保证码组中“1”的数目为偶数,即满足条件: 以上两种一维奇偶校验码的检错能力相同,都只能检测奇数个的错码。在接收端,按照以上两式计算各个码元的模2加和。若结果与上式一样,就认为无错;若相反,就说明存在错码。二维奇偶校验码(又称双向奇偶校验Row and Column Parity Check,也又称为双向冗余校验Vertical and Longitudinal Redundancy Check、矩阵码、方阵码或水平垂直奇偶校验码):它是把上述奇偶校验码的若干码组按行排列成矩阵,然后再按列的方向为每一列增加一位奇偶监督位,如下图所示。 图中a01a02a0m为每行奇偶校验码的监督位,cn-1cn-2c0为按列进行第二次奇偶校验编码所增加的奇偶监督位,它们构成了一监督位行。二维奇偶校验码克服了一维奇偶校验码只能检测奇数个错码的弊端,特别是不能检测突发错误的缺陷。这种二维奇偶校验码不但能发现某一行或某一列上的奇数个错误,还能发现某一行(某一列)上的偶数个错误。当某一行(某一列)出现偶数个差错时,该行(或该列)虽不能发现,但只要差错所在的列(或行)没有同时出现偶数个差错,这样的差错是可以检测出来的。 二维奇偶校验编码之所以检测突发错码,是配合交织技术来实现的。在编码时将信息码元序列按行排成矩阵,每一行和每一列都加一位奇偶监督位。发送时按列的顺序传输,收端仍将码元排成发送时的矩阵形状,即采用所谓的交织技术,将在一列上的突发错误转换为行上的随机错误,然后按行和按列进行奇偶校验。(2)CRC循环冗余校验编码CRC循环冗余校验编码以下简称为循环码,它是一种重要的线性分组码。 线性码有一个重要性质,就是它具有封闭性。所谓封闭性,是指一种线性码中的任意两个码组之和仍为这种码中的一个码组。这就是说,若A1和A2是一种线性码中的两个许用码组,则(A1A2)(指模2加,也就是异或)仍为其中的一个码组。循环码不仅具有封闭性,它还具有另外一个重要性质循环性,即循环码中任一码组循环一位(将最右端的码元移至左端,或反之)以后,仍为该码中的一个码组。在下表中,给出了一种(7,3)循环码的全部码组,共有238个码组。由此表可以直观的看出这种码的循环性。 表 (7,3)循环码码组序号 信息位(a6a5a4) 监督位(a3a2a1a0)100000002001011130101110401110051001011610111007110010181110010下表给出了另一种循环码(7,4)循环码的全部码组,共有2416个。与上边(7,3)循环码相比,(7,4)循环码不但含有全0码,还含有全1码,而且除全0全1码组外的14个码组构成了两个循环组(每组中的码组互为循环关系)。如下表中的特殊符号所示,打“”号的为一个循环组,打“”号的为另一个循环组,全0和全1码组各自成一个循环。 表 (7,4)循环码码组序号 信息位(a6a5a4a3)监督位(a2a1a0)10000000 20001101 30010111 40011010 50100011 60101110 70110100 80111001 91000110 101001011 111010001 121011100 131100101 141101000 151110010 161111111 以上介绍了循环码的循环性。CRC循环冗余校验编码的原理和编译码方法是我们所关心的重点问题,将在下一部分重点介绍。在总线或存储器部分经常用到奇偶校验码 ,它以最小的冗余量去检测某位错误 ,提供了不可靠的小型测量。然而 ,奇偶校验只能发现 1个错误或奇数个错误 ,而且不能纠错。另一些系统更深入一些 ,利用汉明码来检测和纠正错误 ,而汉明码的每字节或字比奇偶码需要更多的冗余位大多数情况下 ,高速串行通信传送数据的错误是多位并发的。这种情况下 ,奇偶校验码无意义 ,而汉明码的检验效果也受到许多限制 ,比如汉明码中有大量的冗余码 (32位字需 7位码 ) ,每个字的冗余位传输将使带宽减弱15,即需要增加 2 0 %的带宽来传送冗余位。这在串行通信中是不可取的。实际上 ,在电磁屏蔽或光纤传输的情况下 ,任何类型的位错误都是相当少的 (1,1012位 ,而这些错误通常不能被汉明码纠正或被奇偶码检测 ,所以 ,那些校验位的带宽开销也是无意义的。在串行通信系统中 ,数据的完整性最好通过CRC校验码来检测。三、CRC循环冗余校验码:1 CRC码的基本原理CRC码是线性分组码中最重要的一种。它是在严密的代数学理论基础上建立起来的。这种码的编码和解码设备都不太复杂,且检(纠)错的能力较强,是各种差错控制编码中使用较多的一种。循环码常采用码多项式的形式表示,方法是把码组中各码元当作是一个多项式的系数。把一个长为n的码组(an-1an-2an-3a0)表示为一个n1次多项式这样,任何一个由二进制位串组成的码组可以和一个只含有0和1两个系数的多项式建立一一对应的关系。例如,7位码组1100101可以表示为码多项式注意,在码多项式中,x只是码元位置的标记,我们并不关心x的取值。对于一个分组码,k位信息位可对应一个(k1)次多项式K(x);r位监督位对应于一个(r1)次多项式R(x);由k位信息位后面加上r位监督位组成的nkr位码组,则对应于一个(n1)次多项式 T(x)=xrK(x)+R(x) 其中,K(x)乘以因子xr,相当于将k位信息位左移r位;“R(x)”对应于添加在其后的监督位。在循环码编码时,要由已知的k位信息位产生r位监督位,就是要已知多项式K(x)求多项式R(x)。 生成矩阵设码组A(a6a5a4a3a2a1a0),其中高四位为信息位,低三位为监督位。则码组A与信息位的关系可由下式表示 或者 其中G为一个47(也就是kn)的矩阵 可见,已知k位信息位,由矩阵G就可以产生整个循环码组,因此,G被称为循环码的生成矩阵。Ik是一个kk阶单位方阵,Q是一个kr阶矩阵。具有IkQ形式的生成矩阵称为典型生成矩阵。由典型生成矩阵得出的码组A中,信息位不变,监督位附加于其后,这种码称为系统码。注意:在利用式计算循环码组时,加法均为模2加。因此,如果找到了码的生成矩阵G,则编码的方法就完全确定了。由代数理论可知,G矩阵的各行应该是线性无关的。因为由式可以看出,任一码组A都是G的各行的线性组合。G共有k行,若它们线性无关,则可组合出2k种不同的码组A,它恰是有k位信息位的全部码组;若G的各行有线性相关的,则不可能由G生成2k种不同码组了。实际上,G的各行本身就是一个码组。因此,如果已有k个线性无关的码组,则可以用其作为生成矩阵G,并由它生成其余的码组。 生成多项式在循环码中,一个(n,k)码有2k个不同码组。若用g(x)表示其中前(k1)位皆为“0”的码组,则g(x)、xg(x)、x2g(x)、xk1g(x)都是该循环码的码组,而且这k个码组是线性无关的。因此它们可以用来构成此循环码的生成矩阵G。在循环码中除全“0”码组外,其余码组连“0”的长度最多只能有(k1)位。否则,在经过若干次循环移位后将得到一个k位信息位全为“0”,但监督位不全为“0”的码组,这在线性码中显然是不可能的。因此g(x)必须是一个常数项不为“0”的(nk)次多项式,而且,这个g(x)还是这种(n,k)码中次数为(nk)的唯一的一个多项式。因为如果有两个,则由码的封闭性,把这两个相加也应该是一个码组,且此码组多项式的次数将小于(nk),即连续“0”的个数多于(k1)。显然,这是与前面的结论矛盾的,故是不可能的。我们称这唯一的(nk)次多项式g(x)为码的生成多项式。一旦确定了g(x),则整个(n,k)循环码就被确定了。根据以上讨论,已知g(x),则循环码的生成矩阵G可以写成 类似式,我们可以写出表所示的(7,3)循环码组,即 上式表明,所有码多形式T(x)都可以被生成多项式g(x)整除,而且任一次数不大于(k1)的多项式乘以g(x)都是码多项式。关于生成多项式,有个重要的结论:(n,k)循环码的生成多项式g(x)一定是xn1的因式,即xn1g(x)h(x);反之,如果g(x)是一个nk次多项式,且能除尽xn1,则此g(x)一定生成一个(n,k)循环码。例如,(x71)可以分解为 (7,4)循环码的生成多项式可以选择x3x21或x3x1;而(7,3)循环码的生成多项式可以选择(x1)( x3x21)或(x1)( x3x1);(7,6)循环码的生成多项式为x1,实际上就是简单的奇偶校验码。2循环码的编码和译码方法以上介绍了循环码的基本原理。那么,我们应该如何根据k位信息位求出对应的r位监督位,也就是在式中,我们应该如何根据信息多项式K(x)求出监督位R(x)。由以上讨论可知,T(x)应能被生成多项式g(x)整除。不难看出,对于给定的信息多项式K(x),并已知g(x), xrK(x)g(x)所得的余式即为R(x)。简单的推导如下:设 xrK(x)g(x)Q(x)(商式)R(x)(余式),则有xrK(x)= Q(x)g(x)+R(x)。所以有 T(x) =xrK(x)+R(x) =Q(x)g(x)+R(x)+R(x) = Q(x)g(x)因为以上多项式间的加法为模2 加,则有R(x)+ R(x)=0。但要注意:上述多项式的除法是模2除,即码多项式系数间的减法要用模2加代替,即在列竖式计算时,上下两行系数不是相减,而是做模2加(即异或运算)。在接收端检验所接收到数据信号列T(x) (含有信息位序列和监督位序列)是否能被g(x)对二取模整除,如果不能,则存在传输错误位。 CRC循环冗余校验常用的标准生成多项式常用的标准生成多项式有如下4个(其中前三个生成多项式是国际标准): CRC(12位)X12+X11+X3+X2+X+1 CRC(16位) = X16+X15+X2+1 CRC(CCITT) = X16+X12 +X5+1 CRC(32位) = X32+X26+X23+X16+X12+X11+X10+ X8+X7+X5+X4+X2+X+1CRC(16位)多项式对应的二进制校验序列为1 1000 0000 0000 0101B。国际电报电话咨询委员会(CCITT)推荐的多项式CRC(CCITT) 对应的二进制校验序列为1 0001 0000 0010 0001B。 CRC-12码通常用于字长6-bit,CRC-16、CRC-CCITT及CRC-32码则用于字长8-bit;其中CRC-16为美国采用,而CRC-CCITT为欧洲国家所采用,CRC-32码大都被采用在一种称为Point-to-Point的同步传输中。CRC循环冗余校验具有比奇偶校验强得多的检错能力。CRC16和CRCCCITT两种生成多项式生成的CRC码可以捕捉一位错、二位错、具有奇数个错 的全部错误,可以捕捉突发错长度小于16的全部错误、长度为17的突发错的99.99 8%、长度为18以上的突发错的99.997%。但是,当传输中发生的错误多项式e(x)能被生成多项式g(x)对二取模整除时,它就不可能被g(x)探测出来。例如当e(x)g(x)时,接收端收到的T(x)T(x)e(x) (模2加),因此会有假象T(x)g(x)0,此时的错误无法检测出来。 具体的编译码步骤采用CRC编码方法,发端和收端必须事先商定一个生成多项式g(x),其最高位和最低位的系数必须是1。具体步骤如下: 选定生成多项式g(x),阶数为r,对应r1位校验序列G。发端将信息码流分成为m位的码组(信息帧),相应的信息多项式为m(x)。在信息帧的末尾附加r个0,使帧成为m十r位比特串M,相应的多项式则为xrm(x)。 按模2除法用g(x)除xrm(x),求出余式r(x),它所对应的r位比特串R就是附加在信息帧末尾的CRC监督位。也就是用比特串M除以校验序列G,得到的r位余数比特串R就是CRC监督位。 编出的码组对应的多项式 T(x)= xrm(x) + r(x)。可见 T(x)g(x)的余数为0。 T(x)所对应的mr位比特串T就是在信息帧尾附加CRC监督位而成的。 传输与T(x)所对应的比特串T。 设T 代表收端收到的比特串,相应的多项式为T(x)。接收端将按模2除法用g(x)除T(x)。若余数为0,则收端认为T=T,传输中未发生差错;否则,收端则认为有差错并要求重传。 简单说,CRC监督位的求法就是:在信息位后添加r个0,然后除以生成多项式对应的校验序列G,所得余数就是原信息位对应的监督位。下面举例说明CRC是如何工作的:假设生成多项式为g(x)=x4x31,阶数r = 4。与g(x)对应的比特串G为11001。假设要发送的信息比特串为1101011,在信息串尾加r个0,变成比特串M为11010110000。将它除以 11001,得到余数1010。这就是CRC监督位比特串R。在信息帧尾附加 CRC监督位 R,得 11010111010。这就是要发送的比特串 T。注意: T(x)除以g(x),余数为0。若串T传输无误,收端将它除以比特串G,余数为0。若串T传输中有差错,收端收到的比特串T为11000001010(中间的 3个 1变为 0),将它除以G,余数为 0101,收端就认为发生了错误。注意:并不是所有有差错的比特串T除以g(x),其余数总是为非0,也有可能为0。但只要g(x)选取得当,发生这种情况的概率就会很小。四、CRC编码译码模块程序设计 本课题的最终目标是,用Verilog HDL硬件描述语言编写出CRC循环冗余校验码的编解码模块电路,并通过仿真。前边三部分讨论了CRC码的编译码理论,下面以这些理论为指导,来编些CRC编译码模块。本课题选用CCITT建议的标准生成多项式,即g(x)= X16+X12 +X5+1。因此,nkr16,即有16位监督位。但k的值并未给定,也就是信息位的个数没有给定。确定信息位的个数k时,一定要把握一条原则:通过nk16计算出n值后,必须保证使g(x)是xn1的因式。根据此原则,可以得出对k取值的要求:k必须为字节长度的整数倍数,这样才能保证xn1被g(x)整除。 为了提高编译码模块的通用性,本程序采用可参数化设计,设参数width表示输入数据的位宽,参数amount表示码组中的信息位部分含有输入数据的个数。模块中width暂取值为1,amount暂取值为32。也就是说,每32位信息位后加16位CRC监督位。 编码模块“crc_send”和译码模块“crc_receive”的外部引脚和连接关系如下图所示:以上两模块的各个引脚定义如下: data_inwidth-1:0编码模块信息数据输入,位宽为width。 reset编码模块计数器预置信号输入(上升沿有效)。clk时钟信号输入。err迫使接收端接收数据出错信号输入(高电平有效)。data_sendwidth*amount+15:0编码后的CRC循环码组输出,位宽为width*amount+16。ready(output)编码模块的准备就绪信号输出,告诉译码模块可以接收了(高电平有效)。data_receivewidth*amount+15:0译码模块接收CRC循环码组的输入。ready(input)译码模块准备就绪信号输入(高电平有效)。data_outwidth-1:0译码模块译码后信息数据的输出,位宽为width。resend重发信号输出(高电平有效)。1编码模块设计整体思路:每个时钟上升沿到来时,输入端送来一组位宽为width的数据data_inwidth-1:0,在输入缓冲器buf_in里将前amount个时钟上升沿到来的width*amount位数据累积起来作为码组中的信息位部分,并在最后一个时钟周期里进行除法运算(将信息位左移16位,再除以CCITT标准生成多项式对应的校验序列1,0001,0000,0010,0001)求得16位余数作为监督位,再与信息位组装起来成为完整的CRC码组并发送给译码端,同时将准备就绪信号ready置为1。Verilog HDL程序如下:module crc_send(data_send,ready,data_in,reset,clk);parameter width=1,amount=32; /参数定义,输入数据位宽width,码组中的信息/位部分由amount个输入数据组成。 output width*amount+15:0 data_send; output ready; /握手信号,即发送数据准备就绪信号。 input width-1:0 data_in; input reset,clk; reg width*amount+15:0 data_send; reg ready; reg width*amount+15:0 buf_in; /输入缓冲器。integer n,i; / n为累积amount个输入数据的计数器; / j为做除法时的计数器。 /initial n=0; initial语句不被综合器支持,因此,为计数器n预置0值时不能用/如上所示的initial语句。在此,引入预置端reset,专门用于开始计数前为计数器n赋0/值。 always (posedge reset or posedge clk) begin if(reset) n=0; /检测到reset信号的上升沿时,为n赋0值。 else if(namount-1) begin /先在buf_in中,累积前31个输入数据。 ready=0; /此处必须使用非阻塞型赋值语句,以保证在第一个/时钟周期末尾,将ready信号赋为0值。 buf_in=buf_inwidth; buf_inwidth-1:0=data_in; n=n+1; end elsebegin /在第32个时钟周期里累积完最后一个输入数据,并做/除法运算求出监督位部分,组装成完整的CRC循环码,/最后发送给译码端。 buf_in=buf_inwidth; buf_inwidth-1:0=data_in; buf_in=buf_in16; data_send=buf_in; for(i=0;iwidth*amount;i=i+1) /进行模2除法,求出余数。 if(buf_inwidth*amount+15-i) begin buf_inwidth*amount+15-i=buf_inwidth*amount+15-i; buf_inwidth*amount+11-i=buf_inwidth*amount+11-i; buf_inwidth*amount+4-i=buf_inwidth*amount+4-i; buf_inwidth*amount-1-i=buf_inwidth*amount-1-i; end data_send15:0=buf_in15:0; n=0;ready=1; /此处必须用非阻塞型赋值,以保证在第32个/时钟周期末尾,将ready置为1值。 end end endmodule以上编码程序中设计关键点有三个:为计数器n赋初值0时,不能用initial语句,而应引入预置端reset(见以上程序中的解释);对握手信号ready的赋值一定要用非阻塞型赋值语句,不能用阻塞型赋值语句。如果使用阻塞型赋值,会造成时序错误,实现不了预期功能;多项式除法的编程实现:上程序中用一个以变量i计数的for循环实现了除法求余的过程。该思想完全来源于列竖式进行模2除法的计算过程。下面举一简单的例子加以说明:计算多项式x6+x5除以多项式x4x2+x1;与x6+x5对应的码元序列为1100000,与x4x2+x1对应的码元序列为10111,两多项式的模2除法就相当于两码元序列的模2除法,列竖式计算如下 1 1 1 1 0 1 1 1 )1 1 0 0 0 0 0 1 0 1 1 1 1 1 1 1 0 1 0 1 1 1 1 0 0 1 0 1 0 1 1 1 0 1 0 1注意到,上下两行间为模2加(即,异或)计算,而非减法计算。具体到本设计,做除数的序列就是CCITT标准生成多项式对应的序列G1,0001,0000,0010,0001。与G中1对应的码元跟1异或后取反,与G中0对应的码元跟0异或后不变。根据此思想,以上除法就可以通过循环的移位和四个取反计算来实现。只要处理好以上三个关键点,编码模块的功能就会顺利实现。2译码模块的实现整体思路:在第33个时钟信号(即,下一轮的第一个时钟信号)的上升沿来到时,检测到ready信号为高电平,则在此时钟周期内对收到的循环码组做除法运算(除以CCITT标准生成多项式对应的码元序列),看余数是否为0。若余数为0,则说明没有传输错误,在从该时钟周期开始的连续32个时钟周期内逐个将32个位宽为width的信息数据输出;若余数非0,说明有传输错误,于是将重发信号resend置1,通知发送端重发。可以看出,在不出错的情况下,译码后输出的数据比编码端输入数据延迟了32个时钟周期。Verilog HDL程序如下:module crc_receive(data_out,resend,data_receive,ready,clk,err); parameter width=1,amount=32; output width-1:0 data_out; output resend; input width*amount+15:0 data_receive; input ready,clk,err; /err 为迫使译码端接收数据出错的控制信号。 reg width-1:0 data_out; reg resend; /重发信号。 reg width*amount+15:0 buf_receive; reg right; integer j,m; always (posedge clk) begin if(ready) /在第33个时钟周期的上升沿检测到ready信号有效。 begin buf_receive=data_receive; if(err) buf_receive47=buf_receive47; /如果强制出错信/号err有效,则使接收码组的最高位出错。 for(j=0;jwidth*amount;j=j+1)/对接收到的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医用护理技术题库及答案解析
- 潍坊专职安全员c证题库及答案解析
- 《安全护我成长》测试题及答案解析
- 投资顾问从业资格考试及答案解析
- 2025年国考真题试卷及答案
- 康复医学治疗技术(副高级职称)试卷及答案详解
- 2025年普通外科副高真题及答案
- 2025年考研英语二真题及答案
- 计算机应用基础统考试题及答案
- 2025年保安员证考试备考真题及答案
- 临床技术操作规范麻醉学分册
- CNAS-CC121-2017 环境管理体系审核及认证的能力要求
- 电力工程项目中八大员的具体职责
- 纪念九·一八:致敬那场永不妥协的抗争-主题班会课件
- 铂耐药复发性卵巢癌诊治中国专家共识(2025年版)解读课件
- 《人工智能基础与应用-(AIGC实战 慕课版)》全套教学课件
- 2025年护士执业资格考试题库(社区护理学专项)-社区护理护理法律法规试题
- 第一单元 从感知到物联 第2课传感之古今未来 教学设计2024-2025学年 人教版新教材 初中信息技术八年级上册
- 2024年同等学力申硕《英语》试题真题及答案
- 胃疡病中医护理查房
- 水泥电杆行业分析报告
评论
0/150
提交评论