当前位置:文档之家› CRC循环码

CRC循环码

CRC循环码
CRC循环码

通信系统课程设计报告

课题名称(24,16)CRC循环码编解码器的设计学生姓名杨阳

班级 08通信2W 学号 08313225 指导教师程钦任艳玲

设计地点 60#507 2011年11 月18 日

目录

序言 (3)

第1章课程设计要求及平台 (4)

1.1 课程设计要求和目的 (4)

1.2 课程设计内容 (4)

1.3 个人在设计中的分工 (4)

1.4 课程设计平台 (4)

第2章 QUARTUSⅡ简介 (5)

2.1 VHDL语言的优点 (5)

2.2V H D L语言的基本结构 (5)

2.2.1实体(ENTITY) (6)

2.2.2 结构体(ARCHITECTURE) (7)

第3章编解码器设计及仿真结果分析 (7)

3.1编码器基本原理 (8)

3.2编码器仿真及设计 (8)

3.3解码器基本原理 (10)

3.4 个人对译码原理的认识 (11)

3.5解码器仿真及设计 (13)

第4章心得与体会 (18)

参考文献 (19)

附录 (20)

序言

CRC循环码是在严密的代数学理论基础上建立起来的,是线性分组码的一种。这种码的编码和解码设备都不太复杂,而且检错的能力较强。CRC循环码除具有线性码的一般性质之外,还具有循环性,即任一码组循环一位以后,仍为该码中的一个组码。

在代数编码理论中,为了便于计算,经常将循环码表示成码多项式的形式,设码组为 a= (a n-1a n-2...a1a0),则码多项式定义如下:T (X) =a n-1x +a n-2x +...+a1x+a0。

在循环码中除全“ 0”码组外,再没有连续 k 位均为“ 0”的码组,即连“0”的长度最多只有 (k-1) 位。否则,在经过若干次循环移位后将得到一个 k 位信息位全为“0”,但监督位不全为“0”的一个码组。因此,g (x) 必须是一个常数项不为“0”的 (n-k) 次多项式,而且这个 g (x) 还是这种码中次数为 (n-k) 的唯一一个多项式。称这唯一的 (n-k) 次多项式g(x) 为码的生成多项式。一旦确定了 g (x),则整个(n,k) 循环码就被确定了。由此,可以写出循环码的生成矩阵 G.

在本次计中,我使用的系统开发平台为 QuartusⅡ,在 QuartusⅡ上可以完成设计输入、元件适配、时序仿真和功能仿真、编程下载整个流程,它提供了一种与结构无关的设计环境,是设计者能方便地进行设计输入、快速处理和器件编程。

第1章课程设计要求及平台

1.1课程设计目的和要求

目的:通信原理课程设计的目的是为了使学生加深对所学的通信原理知识的理解,培养学生的专业素质,提高其利用通信原理知识处理通信系统问题的能力,为今后专业课程的学习,毕业设计和工作打下良好的基础。

要求:拿到题目后首先根据通信原理的框图进行建模,然后在微机上进行设计和软件彷真。按题目要求的功能进行设计,电路各个组成部分须有设计说明;采用原理图或VHDL 语言输入法,在微机上进行编译和软件仿真。

1.2课程设计内容

(24,16)CRC 循环码编解码器设计(2 人合作)

1、采用原理图输入法。

2、根据 CRC 循环码的编解码原理,确定编解码器具体设计方案。

3、设计(24,16)CRC 循环码编解码器电路图。

1.3 个人在设计中的分工

本次课程设计我和同组者所要完成的任务是(24,16)CRC 循环码编解码器设计;我们进行了分工合作,同组者做的是编码,我所要完成的是解码部分的设计。

1.4 课程设计平台

本次课程设计应用的软件是QuartusⅡ。

第2章QUARTUSⅡ简介

2.1 VHDL语言的优点

传统的硬件电路设计方法是采用自下而上的设计方法,即根据系统对硬件的要求,详细编制技术规格书,并画出系统控制流图;然后根据技术规格书和系统控制流图,对系统的功能进行细化,合理地划分功能模块,并画出系统的功能框图;接着就进行各功能模块的细化和电路设计;为了提高开发的效率,增加已有开发成果的可继承性以及缩短开发周期,各ASIC研制和生产厂家相继开发了具有自己特色的电路硬件描述语言(Hardware Description Language,简称HDL)。于是,美国于1981年提出了一种新的、标准化的HDL,称之为VHSIC(Very High Speed Integrated Circuit) Hardware Description Language,简称VHDL。这是一种用形式化方法来描述数字电路和设计数字逻辑系统的语言。设计者可以利用这种语言来描述自己的设计思想,然后利用电子设计自动化工具进行仿真,再自动综合到门级电路,最后用PLD实现其功能。

综合起来讲,VHDL语言具有如下优点:

1.覆盖面广,描述能力强,是一个多层次的硬件描述语言。具有良好的可读性,即容易被计算机接受,也容易被读者理解。

2.使用期长,不会因工艺变化而使描述过时。因为VHDL的硬件描述与工艺无关,当工艺改变时,只需修改相应程序中的属性参数即可。

3.支持大规模设计的分解和已有设计再利用。一个大规模的设计不可能由一个人独立完成,必须由多人共同承担,VHDL为设计的分解和设计的再利用提供了有力的支持。

2.2 VHDL语言的基本结构

一个完整的VHDL语言程序通常包含实体(Entity)、构造体(Architecture)、配置(Configuration)、程序包(Package)和库(Library)5个部分。前4个部分是可分别编译的源设计单元。实体用于描述所设计的系统的外接口信号;构造体用于描述系统内部的结构和行为;程序包存放各种设计模块都能共享的数据类型、常数和子程序等;

配置用于从库中选取所需单元来组成系统设计的不同版本;库存放已经编译的实体、构造体、程序包和配置。

2.2.1 实体(ENTITY)

在VHDL中,实体类似于原理图中的一个部件符号,它可以代表整个系统、1块电路板、一个芯片或一个门电路,是一个初级设计单元。在实体中,我们可以定义设计单元的输入输出引脚和器件的参数,其具体的格式如下:

ENTITY 实体名 IS

[ 类属参数说明;]

[ 端口说明;]

END 实体名;

1)类属参数说明

类属参数说明为设计实体和其外部环境的静态信息提供通道,特别是用来规定端口的大小、实体中子元件的数目、实体的定时特性等等。

2)端口说明

端口说明为设计实体和其外部环境的动态通信提供通道,是对基本设计实体与外部接口的描述,即对外部引脚信号的名称、数据类型、和输入输出方向的描述。其一般格式如下:

PORT(端口名:方向数据类型;

端口名:方向数据类型);

端口名是赋予每个外部引脚的名称;端口方向用来定义外部引脚的信号方向是输入还是输出;数据类型说明流过该端口的数据类型。

3)数据类型

VHDL语言中的数据类型有多种,但在数字电路的设计中经常用到的只有两种,即BIT和BIT_VECTOR(分别等同于STD_LOGIC和STD_LOGIC_VECTOR)。当端口被说明为BIT时,该端口的信号取值只能是二进制数“1”和“0”,即位逻辑数据类型;而当端口被说明为BIT_VECTOR时,该端口的信号是一组二进制的位值,即多位二进制数。

2.2.2 结构体(ARCHITECTURE)

结构体描述一个设计的结构或行为,把一个设计的输入和输出之间的关系建立起来。一个设计实体可以有多个结构体,每个结构体对应着实体不同的实现方案,各个结构的地位是同等的。

结构体对其基本设计单元的输入输出关系可以用三种方式进行描述,即行为描述、寄存器传输描述和结构描述。不同的描述方式,只是体现在描述语句的不同上,而结构体的结构是完全一样的。

结构体分为两部分:结构说明部分和结构语句部分,其具体的描述格式为:

ARCHITECTURE 结构体名 OF 实体名 IS

--说明语句

BEGIN

--并行语句

END 结构体名;

第3章编解码器设计及仿真结果分析

3.1编码器设计原理

根据给定的(n,k)值选定生成多项式g (x),即从xn+1的因子中选一个(n-k)次多项式作为生成多项式,假设给定信息码组为m (x)= (m k-1,m k-2...m0),其次数小于k,则x n-k m (x)的次数必定小于n。用g (x)除x n-k m (x),得到余式r (x),r (x)的次数必定小于g (x)的次数,即小于(n-k)。将此余式r (x)加于信息位之后作为监督位,即r (x)和x n-k m (x)相加,得到多项式必定是一个码组多项式。因为它必定能被g (x)整除,且商的次数不大于(k-1)。

根据以上原理,循环码的编码步骤可以归纳如下:

(1)用x n-k乘信息码m (x),这一运算实际上是在信息码后附加上(n-k)个“0”;

(2)用g (x)除x n-k m (x),得到商Q (X);

(3)编出的码组T (x) =x n-k m (x) +r (x)。

由此可见,编码的核心是如何确定余式r (x),找到r (x)后,可直接将其所代表的编码位附加到信息位之后,完成编码。编码电路可采用(n-k)级反馈移位寄存器和异或门(模2加)组成的除法电路实现。

3.2编码器的仿真及设计

编码器设计原理图:

编码器设计仿真波形图:

下面以例子说明:

若信息码为0000 0101 1011 0000,可以得到信息序列为 0000 0101 1011 0000 1100 1000

若信息码为 0000000000000001,可以得到信息序列为 000000000000000100110001

下面对第一幅图进行分析:

第一,时延问题,由于在每个时钟到来时才能进行移位寄存并且输出信号,因此一个码元输出时必须等待时钟信号的到来。

第二,对第一幅图编码的理解,列表如下:

3.3译码器的设计原理:

接收端译码的要求有两个:检错和纠错。

(1)检错

若接收码组R (x)与发送码组相同,即R (x) =T (x),则R (x)必定能被g (x)整除;若在传输中发生错误,即R (x)≠T (x),则R (x)被g (x)除时可能除不尽而有余项,从而发生错误。因此,可以以余项是否为零来判断接收码组中有无错误。但是,有错码的接收码组也有可能被g (x)整除,这时的错码就不能检出。这种错误称为不可检错误,其误码必定超过了此编码的检错能力。

(2)纠错

为了能够纠错,要求每个可纠正的错误图样必须与一个特定余式有一一对应关系。只有存在上述一一对应的关系时,才可能从上述余式唯一地决定错误图样,从而纠正错码。以下是为纠错而设计的。由于(24,16)CRC 循环码的最小码距为d0=3,由d0≥2t+1得,此循环码只能纠正一个错码。当经过信道传输后发生错误时,接收码组多项式R (x)不再是的倍式。

其中S (x) 是R (x) 除以g (x) 后的余式,是不大于r-1次的码组多项式,称为伴随多项式或校正子多项式。时接收码组多项式可表示为发送码组多项式T (x) 与差错多项式 E (x) 之和,即:R (x) =T (x) +E (x)。综合以上式子,我们就可进一步确定E (x):S (x) =rem [T (x) +E (x) ]=rem [E (x) ]

g (x) g (x)

对于一个S (x),E (x) 可能有多种形式。由S (x) 确定E(x) 时同样使用最大似然比准则。对最小码重的差错多项式E(x),由上式求出对应的伴随多项式S (x),将 E (x) 与S (x) 的对应关系列成译码表。当收到任一码组R (x) 后,利用S (x)=rem [R (x) /g (x)]求出S (x),对照译码表找到E (x),再用R (x) =T (x) +E (x) 求T (x),即T (x) =R (x) +E (x) 为已经纠错的原发送码组。纠错完毕之后,只需要取纠错后的前四位,即为所译码元。而在实际电路设计过程中,由于二进制只有0 与 1 两种状态,知道错误位置后,可以直接对该位置的码元取反即可。

综上所述,纠错的步骤如下:

(1)把接收码组R ( x) 送入除法电路,得到余数D1D2D3 即为伴随矩阵S (x)。

(2)由典型生成矩阵G 和典型监督矩阵HT 之间的关系可进一步求得,再由S=E.HT 可得错误图样E(x),这样就可以确定错码的位置。

(3)根据错误的码位,对该码位的码元取反输出便可得到原发送码组T (x)。其中,T (x) 的前四位即为译出码元m(x)。

3.4 个人对译码原理的认识

首先是生成多项式的选取问题。在老师验收提问过程中老师给我们留下了这样一个问题:生成多项式可不可以自己随意选取只要满足是x n+1的因子,即我们在用生成多项式时,可不可以自己选取一个多项式w(x),然后用信息码 w(x) 除 x n-k m (x),得到商 Q ’(X),余数r’(x)。

(3)编出的码组T (x) =x n-k m (x) +r’(x)。

例如:使用(7,4)循环码对提出的问题进行验证,我选取了一组因子

g’(x)=x+1;m(x)=x经计算可得编出的码为0010001

译码电路图:

正确码:

译码输出:

错误码:

译码输出:

得出结论:

首先,按照这种形式选择生成多项式时,出现的第一种情况:可能有重复的监督位;

第二种情况:经过以此生成多项式解出的码输出后,译码器中的移位寄存器中数据总是不全为0,如上图信号输出总是为1,因此检错端不能如实反映情况。所以生成多项式必须选取正确。

3.5 译码器仿真及设计

译码器设计原理图:

在做译码器电路时,我尝试了自己编了一个24位移位寄存器代替直接用24个触发器搭成的移位寄存器,生成的打包图形如下:

我还自己做了一个8输入输出触发器,但由于水平有限做出来的触发器时延过长导致寄存器中的八位在24个时钟后不全为0,因此没能在图中应用。触发器程序见附录。 译码器设计仿真波形图: 下面两个例子:

1.从编码器输入到译码器:0000 0101 1011 0000 1100 1000 输入正确码时:

译码输出:

输入有错码时:

译码输出:

2.从编码器输入到译码器:0000 0000 0000 0001 0011 0001 输入正确码:

译码输出:

输入有错码时:

译码输出:

分析:

第一,由上面两信号所对应的图可以看出,在输入正确码与错误码时信号

在第240ns以后的电平不同,当输入信号正确时信号输出低电平,当输入信号

错误时,信号输出高电平。

第二,当输入信号正确时,译码器中的寄存器中存储的信号全是0,所以各信号“或”以后仍然为0.可以利用下面的分析,编码时x n-k m (x) 除以g(X) = Q (X) +R(X), T (x) =x n-k m (x) +r (x),可以推导出T(X)除以g(x)= Q (X);即如果信号正确,可以被整除,寄存器中存放的余数全为0;

第三,输出信号状态:

从第24个周期至48个周期,只要输入码元正确判断输出应该全是0。在第24个周期之前判断输出并非全0,即有非0,本例选用的循环码在第17个周期至24个周期时为1。

第4章心得与体会

作为通信专业的学生,通过通信原理的课程设计,可以提高我们对通信电路设计领域的认识,有利于培养我们在通信电路设计方面的能力。通过和同学分工合作既锻炼了我们合作能力同时也提高了我们独立分析问题和解决问题的能力。设计过程的复杂加老师的严格要求有益于培养我们严谨的工作作风。

对于通信原理课程设计,我们经过两个星期的实训从简单操作(四个小实验)到熟练运用,大家都付出了努力。此次通信原理课程设计增加了同学们的动手能力和思考能力,为我们今后步入社会打下了坚实的基础。通过理论学习到实际应用,我们更加深刻了解到了理论与实践结合的重要性,在设计之中也遇到了种种问题和困难,通过对这些问题的解决也相应的提高了我们的动手和解决问题的本领,总之,此次课程设计我收益匪浅。

参考文献

[1] 樊昌信,曹丽娜《通信原理》,国防工业出版社,2010年3月(第六版)

[2]潘松,黄国栋.VHDL实用教程.电子科技出版社.

[3]VHDL课程综合设计指导书(江苏技术师范学院电信学院).

附录

24位移位寄存器程序:

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

ENTITY Y24 IS

PORT(A,P,CLK:IN STD_LOGIC;

B:OUT STD_LOGIC);

END Y24;

ARCHITECTURE one OF Y24 IS

BEGIN

PROCESS(clk,p)

VARIABLE Y:STD_LOGIC_VECTOR(23 DOWNTO 0);

BEGIN

if p='1' then Y:=(others=>'0');

elsif(clk'event AND clk='1') THEN B<=Y(0);

FOR I IN 0 TO 22 LOOP

Y(I):=Y(I+1);

END LOOP;

Y(23):=A;

end if;

END PROCESS;

END one;

相关主题
文本预览
相关文档 最新文档