CRC校验码系统的设计
crc校验码编程

crc校验码编程
CRC校验码是一种常用的差错检测方法,广泛应用于数据通信和数据存储领域。
它通过对数据进行一系列运算,生成一个校验码,用于检测数据传输过程中是否发生了错误。
CRC校验码的生成过程相对简单,但其原理却非常巧妙。
首先,需要选择一个预定的生成多项式,通常是一个固定的二进制位数。
然后,将待校验的数据与一个初始值进行异或运算,得到一个结果。
接下来,将这个结果不断地与生成多项式进行异或运算,直到所有数据都被处理完毕。
最后,将最终的结果作为校验码附加在原始数据后面。
CRC校验码的优点在于,它可以快速检测出错误,且具有很高的检测概率。
通过对数据的每一个位进行计算,CRC校验码可以有效地检测出单个或多个位的错误。
而且,CRC校验码的生成过程是不可逆的,即无法通过校验码推导出原始数据,从而保证了数据的安全性。
在实际应用中,CRC校验码被广泛用于网络通信、存储设备和传感器等领域。
例如,在网络传输中,发送方会将数据进行分组,并计算每个分组的CRC校验码。
接收方在接收到数据后,同样计算CRC 校验码,并与接收到的校验码进行比对。
如果两者一致,说明数据传输无误;如果不一致,则意味着数据可能发生了错误,需要进行重新传输或纠错处理。
总的来说,CRC校验码作为一种差错检测方法,具有简单、高效、可靠的特点。
它在保障数据传输的准确性和可靠性方面起到了重要的作用。
通过合理应用CRC校验码,我们可以提高数据传输的质量,确保信息的完整性和可靠性。
CRC校验算法详解及代码实现

CRC校验算法详解及代码实现CRC校验算法的原理是利用生成多项式来计算数据的校验值。
在发送端,将数据和生成多项式进行计算得到一个校验值,然后将这个校验值附加到发送的数据后面一起传输。
在接收端,接收到数据后再次进行计算,并与接收到的校验值进行比较,如果相同则说明数据传输过程中没有错误,否则说明数据传输过程中出现错误。
下面是CRC校验算法的具体步骤:1.选择一个生成多项式,通常用一个二进制数表示。
生成多项式的位数称为CRC位数,常见的有CRC-8,CRC-16,CRC-32等。
2.将生成多项式的最高位与数据的最高位对齐,然后进行异或运算。
异或运算的结果作为下一次异或运算的输入,直到将所有数据都计算完毕。
3.将计算得到的结果作为校验值附加到数据后面一起传输。
下面是一个简单的CRC校验算法的代码实现:```pythondef crc(data, generator):crc_value = 0generator_length = len(generator)for bit in data:crc_value ^= bitif crc_value & 0x1:crc_value = (crc_value >> 1) ^ int(generator, 2)else:crc_value = crc_value >> 1return crc_value#测试数据data = [1, 0, 1, 1]generator = "1011"#进行CRC校验residue = crc(data, generator)print(residue)```在上面的代码中,`data`表示要进行校验的数据,以列表的形式表示,每个元素是一个二进制位。
`generator`表示生成多项式,以字符串的形式表示,每个字符是一个二进制位。
程序输出的结果为校验值。
总结:本文详细介绍了CRC校验算法的原理和步骤,并给出了一个简单的代码实现。
基于FPGA的CRC校验设计

基于FPGA的CRC校验设计基于FPGA的CRC(循环冗余校验)校验设计是一种用于数据完整性验证的算法。
在通信和数据传输中,CRC校验可用于检测数据传输错误。
FPGA(现场可编程门阵列)是一种可重新编程的硬件设备,可实现定制的数字逻辑电路。
将CRC校验算法实现在FPGA上,可以提高校验的速度和效率。
CRC校验算法通过生成和校验数据块的校验码来验证数据的完整性。
它基于多项式除法,将数据块与一个预定义的生成多项式进行除法运算,生成的余数作为校验码。
接收方收到数据时,再次进行CRC计算,如果生成的校验码与接收到的校验码一致,则说明数据传输没有错误。
在FPGA上实现CRC校验设计,需要将CRC校验算法转化为硬件逻辑电路。
以下是一个基于FPGA的CRC校验设计的示例:1.数据块输入:从输入端口接收数据块。
使用FPGA中的输入引脚来接收数据。
数据块可以是任意长度的二进制数据。
2.寄存器初始化:CRC校验算法需要一个初始寄存器值,用于生成校验码。
通过在FPGA中定义一个初始化寄存器,并将其值设为所有位都为1的初始值。
3.寄存器移位:将数据块输入与当前寄存器存储的值进行XOR操作,并将结果存入一个新的寄存器。
4.数据块除法:执行多项式除法操作,将新的寄存器值与生成多项式进行除法运算。
5.寄存器更新:将除法操作的余数存入一个更新的寄存器,并将该寄存器的值作为下一个循环的输入。
6.循环:重复执行步骤3至步骤5,直到所有的数据块输入被处理完。
7.生成校验码:当所有的数据块输入都被处理完后,从最后一个更新的寄存器中读取生成的校验码。
校验码可用于后续的数据传输完整性验证。
8.输出校验码:将生成的校验码从FPGA输出,可以将校验码发送到接收端进行验证,或进行显示和保存等操作。
以上是一个基于FPGA实现的CRC校验设计的基本步骤。
实际设计中,还可以根据具体需求进行优化和改进,例如使用流水线技术以提高计算效率,或者添加错误检测和纠正机制以增强鲁棒性。
CRC校验的设计与实现

5.3.4 循环冗余校验的设计与实现本系统中数据通信技术占据重要地位,是保证数据采集准确性的关键。
客户端与称重仪表进行通信时,为减小产量信息在传输过程中由于电磁干扰等因素导致的错误,需进行数据校验。
数据校验方法有很多,比较传统的有:行列冗余校验、重复码校验、奇偶校验、循环冗余校验等。
本系统采用循环冗余校验(CRC )进行通信过程中的数据校验。
CRC 是一种检错能力很强的循环码,利用模2取余的原理对数据进行循环校验,计算效率高且误判概率极低,几乎为零。
从性能和开销上考虑,CRC 远优于传统的算术和校验及奇偶校验。
1.CRC 编码原理CRC 校验通常采用多项式编码的方式,参与校验的数据信息(以下简称“待校验数”)可看作一个n 阶的二进制形式的多项式,即121210...n n n n a x a x a x a ----++++。
例如,一个6位二进制数101101可表示为:54325321011011x x x x x x x x +++++=+++(为方便下文描述,把该类型的多项式称为“转换多项式()x g ”)。
CRC 的编码方式是把待校验数转变成二进制数()x t ,然后再将()x t 转变为转换多项式()x g ,令()()()R e t x R x g x ⎡⎤=⎢⎥⎣⎦(式中的[]Re 表示对中括号内的式子进行取余运算),将余数()R x 做为待校验数的CRC 校验码。
CRC 校验码具体求解步骤如下:①假设待校验数是n 位二进制形式的多项式()x t ,把()x t 转变为转换多项式()x g ,位数为n 。
在待校验数的末尾附加r 个零,则待校验数的长度变为n r +位,其对应的二进制形式的多项式变成()x t x r 。
②把()x g 和()x t x r 进行取余运算,设余数为()x y ,则()()()R e r x t x y x g x ⎡⎤=⎢⎥⎣⎦,()x y 位数为1-r 。
CRC编码器的设计

CRC编码器的设计
CRC(循环冗余校验)编码器是一种常用的错误检测编码器,其设计目标是通过增加校验位来提高数据的可靠性,以便在传输过程中检测出错误情况。
1.确定生成多项式:
CRC编码器的核心是一个生成多项式,它用于计算校验位。
生成多项式可以是任意的,在计算中应该选择与通信环境适应的生成多项式。
一般情况下,长度为n的CRC编码器使用n+1位的生成多项式,其中最高位和最低位都是1、生成多项式的选择对于CRC编码的性能有很大的影响,需要进行仔细的考虑和测试。
2.计算校验位:
校验位的计算是CRC编码器的关键步骤。
校验位的计算是通过将数据和生成多项式进行按位异或运算得到的。
具体步骤如下:
-在待发送的数据后面添加n个零(其中n是生成多项式的位数减1),得到新的数据块。
-将新的数据块除以生成多项式,得到的余数就是校验位。
3.添加校验位:
校验位计算完成后,将校验位添加到原始数据中。
校验位通常作为一个帧的最后一个字节。
4.发送数据:
将带有校验位的数据发送给接收端。
CRC编码器的性能可通过几个参数来评估,如最大错误检测能力(可以检测到的最大连续错误的位数)、最小错误检测能力(可以检测到的最小连续错误的位数)等。
这些参数与生成多项式的选择有关,因此在设计CRC编码器时,需要仔细选择生成多项式,以满足通信环境的要求。
总之,CRC编码器是一种常用的错误检测编码器,通过增加校验位来提高数据的可靠性。
设计一个有效的CRC编码器需要确定生成多项式、计算校验位、添加校验位和发送数据等步骤,并注意选择适合的生成多项式来满足通信环境的要求。
如何在VB中编写CRC校验程序

如何在VB中编写CRC校验程序
在VB中编写CRC校验程序,可以通过以下步骤来实现:
1.了解CRC校验算法:
CRC(Cyclic Redundancy Check)校验是一种常见的错误检测机制,
通过对数据进行计算生成固定长度校验码来验证数据的完整性。
CRC校验
算法使用生成多项式来计算校验码,具体的生成多项式由所使用的CRC标
准决定。
2.导入系统命名空间:
3.创建CRC校验类:
在VB中,可以创建一个类来封装CRC校验的相关操作。
可以定义该
类的属性来存储生成多项式等信息,以及定义方法来执行CRC校验。
4.实现CRC校验方法:
根据CRC校验算法,可以实现一个方法来计算数据的校验码。
具体步
骤如下:
-准备一个数据缓冲区,将待校验的数据按照一定的规则放入缓冲区。
-根据生成多项式,对缓冲区中的数据进行逐位运算,得到校验码。
-返回校验码。
5.调用CRC校验方法:
在主程序中,可以实例化CRC校验类,并调用其中的方法来进行校验。
将待校验的数据作为参数传递给校验方法,获取校验码。
6.完善错误处理:
在代码中需要加入适当的错误处理机制,以捕捉可能出现的异常情况,并给出相应的提示或处理方法。
综上所述,以上是在VB中编写CRC校验程序的基本实现步骤。
具体
的代码实现可以从以下几个方面来展开:导入命名空间、创建CRC校验类、实现CRC校验方法、调用CRC校验方法、错误处理和测试验证等。
编写时
需要根据具体的应用场景和需求来确定具体的实现细节和功能。
crc校验实例
crc校验实例本文介绍了CRC(循环冗余校验)校验算法及其实例。
CRC是一种在数据传输过程中常用的校验方式,其基于多项式计算,通过生成冗余的比特序列来实现数据完整性的验证。
CRC可以检测出数据在传输过程中是否发生了错误或篡改。
本文将以一个简单的实例来介绍CRC校验的实现过程。
1. CRC校验算法的基本原理在传输数据时,常常会发生数据出现差错或者被人恶意篡改的情况,一旦出现这种情况,就会使得接收方的结果出错、含义歧义、甚至数据完全失效。
而CRC在数据传输期间可以帮助检测出这种变化,从而确保数据的完整性和正确性。
CRC校验可以通过一个多项式来实现。
假设数据D以二进制形式传输,那么CRC校验就是生成一个比特序列,然后与D拼接在一起,形成了一个长的二进制序列S。
然后S被除以一个特定的多项式P,并令余数为R。
根据CRC算法的定义,如果数据D正确接收到,那么R应该等于0。
也就是说,如果接收到的数据D出现错误,那么P就无法整除S,余数R也不等于0。
这样,接收方就可以根据R的值来判断数据是否正确。
2. CRC校验的实现过程下面,我们将通过一个简单的例子来介绍CRC校验的具体实现步骤。
我们假设要发送的数据为1001011,设计的多项式为1011。
因此,接收方会接收到101101010,其中最后三位000是CRC校验码。
a. 将1011(多项式)左移三位,即得到1011000。
b. 在1001011的最后加入三个0,得到1001011000c. 将1001011000除以1011,得到商10001000,余数011。
d. 将余数011拼接到1001011后面,即得到了完整的传输数据1001011011,其中最后三位为CRC校验码011。
接收方收到1001011011后,对其进行同样的计算,如果得到的余数不为0,则说明数据出现了错误。
3. CRC校验的应用场景CRC校验常常用于网络传输数据的数据完整性验证。
例如,当一个文件在Internet上传输时,发送方将计算出文件的CRC值并将其附加到文件末尾。
crc校验程序设计要求
crc校验程序设计要求一、引言CRC校验是一种常用的数据传输错误检测方法,它通过对数据进行多项式计算,生成一个校验码,接收方在接收到数据后同样进行多项式计算,与发送方生成的校验码进行比较,如果不一致则说明数据传输出现了错误。
本文将介绍CRC校验程序设计要求。
二、CRC校验原理CRC校验的核心原理是通过对数据进行多项式计算来生成一个校验码。
具体过程如下:1. 选择一个固定的多项式G(x),例如:x^16+x^12+x^5+1。
2. 将要发送的数据D(x)左移G(x)的位数-1位(即在最高位填充0),得到新的数据M(x)。
3. 对M(x)除以G(x),得到商Q(x)和余数R(x)。
4. 将R(x)作为校验码CRC发送给接收方。
5. 接收方同样将接收到的数据左移G(x)的位数-1位,并对其进行除法运算,得到余数R'(x)。
6. 如果R'(x)=0,则说明没有出现错误;否则说明出现了错误。
三、CRC校验程序设计要求1. 选择合适的多项式:CRC校验中选择合适的多项式非常重要,不同的多项式会影响到检错能力和效率。
一般情况下,多项式的次数越高,检错能力越强,但计算效率越低。
因此,在选择多项式时需要根据具体需求进行权衡。
2. 实现多项式计算:CRC校验中的核心是多项式计算,因此需要实现多项式加法、乘法和除法运算。
在实现时需要注意运算精度和性能问题。
3. 实现数据处理:在进行CRC校验时需要对数据进行处理,包括左移位、填充0等操作。
在实现时需要考虑数据类型和处理逻辑。
4. 实现接收方校验:接收方同样需要对接收到的数据进行CRC校验,因此需要实现接收方的CRC校验程序。
在实现时需要考虑通信协议和数据格式等问题。
四、总结本文介绍了CRC校验的原理及程序设计要求。
在设计CRC校验程序时,需要注意选择合适的多项式、实现多项式计算、实现数据处理和实现接收方校验等问题。
通过合理设计和优化,可以提高CRC校验程序的效率和可靠性。
CRC校验原理及实现
CRC校验原理及实现CRC(Cyclic Redundancy Check,循环冗余校验)是一种常用的错误检测技术,用于检测数据传输过程中的错误。
它通过使用一个或多个生成多项式来计算数据的校验值,然后将校验值添加到数据末尾传输。
接收方将使用相同的生成多项式来计算接收到的数据的校验值,并将其与接收到的校验值进行比较,如果不匹配,则说明数据存在错误。
CRC校验的核心原理是多项式除法,其中数据位被视为多项式的系数,并且我们可以使用位运算来表示多项式除法。
CRC校验使用的生成多项式通常是固定的,并被称为CRC多项式。
生成多项式的选择对于CRC校验的性能非常关键。
常用的CRC多项式包括CRC-16、CRC-32等。
实现CRC校验的步骤如下:1.选择一个适当的CRC多项式。
这个选择取决于应用的特定要求和标准。
2.将CRC初始值设为0。
3.将待传输的数据的每一个字节按位表示为一个多项式,并将他们连接成一个多项式。
4.对于每一个数据字节,将多项式除以CRC多项式。
可以使用位运算来进行除法运算。
5.将余数作为CRC多项式的系数与下一个数据字节连接形成一个新的多项式,并继续除法运算。
6.对于最后一个数据字节,除法完成后会有一个最终的余数。
将这个余数作为校验值。
7.在传输数据时,将校验值附加到数据的末尾。
8.接收方通过接收到的数据和附加的校验值进行相同的CRC校验过程。
9.接收方计算得到的校验值与接收到的校验值比较,如果相同,则数据传输正确;如果不同,则数据传输存在错误。
CRC校验具有高效、可靠和简单的特点。
它可以检测到大部分单比特错误和多比特错误。
然而,CRC校验只能检测错误,而不能纠正错误。
所以在实际应用中,通常需要结合其他的纠错方法,如重传机制,以确保数据传输的可靠性。
总结起来,CRC校验是一种常用的错误检测技术,利用多项式除法计算数据的校验值。
实现CRC校验需要选择适当的CRC多项式,并进行多次除法运算,然后将计算得到的校验值附加到数据末尾进行传输。
CRC校验原理及步骤
CRC校验原理及步骤CRC(Cyclic Redundancy Check)校验是一种常用的错误检测方法,用于验证数据传输过程中是否存在错误。
CRC校验采用生成多项式对数据进行计算,从而生成一个固定长度的冗余校验码,将该校验码附加在数据后面进行传输,接收方利用同样的生成多项式对接收到的数据进行计算,并与接收到的校验码进行比较,如果校验码一致,则认为数据传输没有错误;如果校验码不一致,则认为数据传输存在错误。
1.选择生成多项式:在进行CRC校验前,需要选择一个生成多项式。
常用的生成多项式有:CRC-8,CRC-16,CRC-32等。
根据实际情况选择不同的生成多项式。
2.数据填充:在数据的末尾添加一组"0",长度等于生成多项式的次数加1、例如,如果选择的生成多项式为CRC-8,则在数据末尾填充一组"0",长度为9;如果选择的生成多项式为CRC-16,则在数据末尾填充一组"0",长度为173.生成校验码:利用生成多项式对填充后的数据进行除法运算,计算余数。
余数即为校验码。
通常,余数的位数为生成多项式的次数。
4.将校验码添加到数据中:将生成的校验码添加到数据末尾,并进行传输。
5.接收方计算校验码:接收方接收到数据后,利用接收到的数据和相同的生成多项式进行除法运算,计算余数。
6.比较校验码:接收方得到余数后,将其与接收到的校验码进行比较。
如果两者一致,则认为数据传输没有错误;如果两者不一致,则认为数据传输存在错误。
CRC校验的原理是利用多项式除法运算,将数据作为一个伪多项式进行计算,并得到一个余数。
由于多项式的特性,如果在数据传输过程中出现了错误,那么接收方计算得到的余数一定与发送方生成的校验码不一致。
通过比较余数和校验码,接收方可以判断数据是否传输正确。
1.简单高效:CRC校验算法计算速度快,适用于高速数据传输。
2.安全性高:CRC校验算法能够高效地检测出多种错误,包括单比特错误、双比特错误等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
南华大学电气工程学院《通信原理课程设计》设计题目: CRC校验码系统的设计专业:电子信息工程学生姓名:学号:起迄日期: 2014年5月24日—2014年6月6日指导教师:系主任:《通信原理课程设计》任务书CRC校验码的设计摘要:本课程设计设想采用专用集成电路芯片实现循环码编译码器的功能。
在本次计中,使用的系统开发平台为QuartusⅡ,描述语言是VHDL。
设计方案中,实现了编码,纠错,译码。
从循环的原理出发,讨论循环码编译码系统的特点。
CRC即循环冗余校验码(Cyclic Redundancy Check)是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。
以一个(7,4)循环码为例,语言对该系统进行了设计,能实现循环码以及一位错码的纠错译码。
依据设计方案和设计平台完成了程序编写和程序调试,通过运行程序及时序波形的仿真有效验证了设计的正确性,初步实现了设计目标。
关键词专用集成电路;VHDL;循环码编译码器;QuartusⅡ目录1引言 (1)1.1课程设计目的和要求 (2)2 VHDL (3)2.1 VHDL语言介绍 (3)2.2 VHDL语言的特点 (3)3 设计原理 (5)3.1编码器的设计 (5)3.2译码器的设计 (6)4 设计步骤 (8)4.1系统分析 (8)4.2程序流程分析 (9)4.3程序设计 (9)4.4系统仿真 (12)4.5结果分析 (14)5 结束语 (14)参考文献 (16)1引言循环码是在严密的代数学理论基础上建立起来的,是线性分组码的一种。
这种码的编码和解码设备都不太复杂,而且纠错的能力较强。
顾名思义,循环码除具有线性码的一般性质之外,还具有循环性,即任一码组循环一位以后,仍为该码中的一个码组。
在代数编码理论中,为了便于计算,经常将循环码表示成码多项式的形式,设码组为 a= (an-1an-2...a1a0),则码多项式定义如下:T (X) =an-1x +an-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.通常这时得到的循环码的生成矩阵不是典型矩阵,可通过线性变换转为典型矩阵,则循环码组可写成:T (X) = [an-1 an-2 ...an-k] G (X)G (X) = [an-1 x +an-2 x +...+an- (k-1) x+a ] .g (x)所有的码组多项式 T (X) 都可被 g (x) 整除,而且任意一个次数不大于(k-1)的多项式乘 g (x) 都是码多项式,该条性质用于编码,还可用于验证接收码组是否出错。
由于任一循环码多项式 T (X) 都是 g (x) 的倍式,故可写成 T (X) =h (x) .g (x),而g (x) 本身也是一个码组,即有 T'(X) = g (x)。
由于 T' (X) 是一个(n-k)次多项式,故xkT' (x)是一个 n 次多项式,在模 xn+1 运算下,也是该编码中的一个许用码组。
可以写成x T'(x)=Q(x)+T(x) ,又由于等式左端分子和分母都是 n 次多项式,故 Q (x) =1。
因此,上式可化成xkT'(x) =(xn+1) +T (x)。
最后,可得到 xn+1=g (x)[xk+h (x)]。
由此说明,g (x) 应该是 xn+1 的一个因子。
在本次计中,我使用的系统开发平台为QuartusⅡ,在QuartusⅡ上可以完成设计输入、元件适配、时序仿真和功能仿真,它提供了一种与结构无关的设计环境,是设计者能方便地进行设计输入、快速处理和器件编程。
在本次设计中,采用的硬件描述语言是VHDL[3](Very-High-Speed Integrated Circuit HardwareDescription Language)。
VHDL语言是一种用于电路设计的高级语言。
VHDL主要用于描述数字系统的结构、行为、功能和接口。
除了含有许多具有硬件特征的语句外,VHDL的语言形式、描述风格以及语法是十分类似于一般的计算机高级语言。
1.1课程设计目的和要求提高我们的分析能力及运用QuartusⅡ,懂得自己动手和验证,如系统结构模拟、电路特性分析,灵活的运用VHDL语言。
本课程设计中将一组循环码输入,并且能编码,再纠错,再到解码输出的一个过程。
作为电子专业的学生,通过这次QuartusⅡ方面的课程设计,可以提高我们对QuartusⅡ领域及通信电路设计领域的认识,有利于培养我们在通信电路QuartusⅡ方面的设计能力。
一人一题特别有利于锻炼我们独立分析问题和解决问题的能力。
设计过程的复杂加老师的严格要求有益于培养我们严谨的工作作风。
2 VHDL2.1 VHDL语言介绍VHDL 的英文全名是Very-High-Speed Integrated Circuit Hardware Description Language,诞生于 1982 年。
1987 年底,VHDL被 IEEE 和美国国防部确认为标准硬件描述语言。
VHDL主要用于描述数字系统的结构,行为,功能和接口。
除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。
VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可视部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。
在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。
这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。
2.2 VHDL语言的特点VHDL 语言能够成为标准化的硬件描述语言并获得广泛应用 , 它自身必然具有很多其他硬件描述语言所不具备的优点。
归纳起来 ,VHDL 语言主要具有以下优点:[1](1) VHDL 语言功能强大 , 设计方式多样VHDL 语言具有强大的语言结构, 只需采用简单明确的VHDL语言程序就可以描述十分复杂的硬件电路。
同时, 它还具有多层次的电路设计描述功能。
此外 ,VHDL 语言能够同时支持同步电路、异步电路和随机电路的设计实现, 这是其他硬件描述语言所不能比拟的。
VHDL 语言设计方法灵活多样 , 既支持自顶向下的设计方式, 也支持自底向上的设计方法; 既支持模块化设计方法, 也支持层次化设计方法。
(2) VHDL 语言具有强大的硬件描述能力VHDL 语言具有多层次的电路设计描述功能,既可描述系统级电路 ,也可以描述门级电路;描述方式既可以采用行为描述、寄存器传输描述或者结构描述,也可以采用三者的混合描述方式。
同时,VHDL 语言也支持惯性延迟和传输延迟,这样可以准确地建立硬件电路的模型。
VHDL 语言的强大描述能力还体现在它具有丰富的数据类型。
VHDL 语言既支持标准定义的数据类型,也支持用户定义的数据类型,这样便会给硬件描述带来较大的自由度。
(3) VHDL 语言具有很强的移植能力VHDL 语言很强的移植能力主要体现在: 对于同一个硬件电路的 VHDL 语言描述 , 它可以从一个模拟器移植到另一个模拟器上、从一个综合器移植到另一个综合器上或者从一个工作平台移植到另一个工作平台上去执行。
(4) VHDL 语言的设计描述与器件无关采用 VHDL 语言描述硬件电路时, 设计人员并不需要首先考虑选择进行设计的器件。
这样做的好处是可以使设计人员集中精力进行电路设计的优化, 而不需要考虑其他的问题。
当硬件电路的设计描述完成以后 ,VHDL 语言允许采用多种不同的器件结构来实现。
(5) VHDL 语言程序易于共享和复用VHDL 语言采用基于库 ( library) 的设计方法。
在设计过程中 , 设计人员可以建立各种可再次利用的模块 , 一个大规模的硬件电路的设计不可能从门级电路开始一步步地进行设计 , 而是一些模块的累加。
这些模块可以预先设计或者使用以前设计中的存档模块, 将这些模块存放在库中 , 就可以在以后的设计中进行复用。
由于 VHDL 语言是一种描述、模拟、综合、优化和布线的标准硬件描述语言 , 因此它可以使设计成果在设计人员之间方便地进行交流和共享, 从而减小硬件电路设计的工作量, 缩短开发周期。
3 设计原理3.1编码器的设计VHDL 是一种行为描述语言,其编程结构类似于计算机中的 C 语言,在描述复杂逻辑设计时,非常简洁,具有很强的逻辑描述和仿真能力,是未来硬件设计语言的主流。
在本设计中,应用 VHDL 语言,在 Altera 公司的Quartus II 7.2 软件环境下,按照自顶而下的设计方法,对编译码器进行设计仿真。
根据给定的(n,k) 值选定生成多项式 g (x),即从 xn+1 的因子中选一个 (n-k)次多项式作为,假设给定信息码组为 m (x)= (mk-1,mk-2...m0),其次数小于 k,则xn-km (x) 的次数必定小于n。
用 g (x) 除xn-km (x),得到余式 r (x),r (x) 的次数必定小于 g (x) 的次数,即小于 (n-k)。
将此余式 r (x) 加于信息位之后作为监督位,即 r (x) 和xn-km (x) 相加,得到多项式必定是一个码组多项式。
因为它必定能被 g (x) 整除,且商的次数不大于 (k-1)。
根据以上原理,循环码的编码步骤可以归纳如下:(1)用xn-k 乘信息码 m (x),这一运算实际上是在信息码后附加上 (n-k)个“0”。
(2)用 g (x) 除xn-km (x),得到商 Q (X),(3) 编出的码组 T (x) =xn-km (x) +r (x)。
由此可见,编码的核心是如何确定余式 r (x),找到 r (x)后,可直接将其所代表的编码位附加到信息位之后,完成编码。
编码电路可采用(n-k)级反馈移位寄存器和异或门(模2 加)组成的除法电路实现。
以生成矩阵 g (x) =x3+x+1 生成(7,4)循环码的编码器为例,其除法电路如图3. 1 所示。
图3.1 除法电路图此移位寄存器的个数与 g (x) 的次数相等,并且 g (x) 的系数 1 表示有反馈,0 表示无反馈。