首页
游戏
影视
直播
广播
听书
音乐
图片
更多
看书
微视
主播
统计
友链
留言
关于
论坛
邮件
推荐
我的云盘
我的搜索
我的记录
我的文件
我的图书
我的笔记
我的音乐
我的影视
我的邮件
Search
1
科普:Memory Compiler生成的Register file和SRAM有何区别?
90 阅读
2
在IC617中进行xa+vcs数模混仿
88 阅读
3
virtuoso和empyrean alps模拟仿真和混仿教程
87 阅读
4
vcs debug rtl或者netlist 中的loop
54 阅读
5
文档内容搜索哪家强? 15款文件搜索软件横向评测
42 阅读
默认分类
芯片市场
数字电路
芯片后端
模拟电路
芯片验证
原型与样片验证
算法与架构
DFX与量产封装
PC&Server OS设置
移动OS设置
软件方案
新浪备份
有道备份
登录
Search
标签搜索
python
Docker
vcs
PyQT
STM32
cadence
linux
systemverilog
EDA
Alist
vscode
uos
package
MCU
C
QT
CXL
sed
sv
webdav
bennyhe
累计撰写
344
篇文章
累计收到
31
条评论
首页
栏目
默认分类
芯片市场
数字电路
芯片后端
模拟电路
芯片验证
原型与样片验证
算法与架构
DFX与量产封装
PC&Server OS设置
移动OS设置
软件方案
新浪备份
有道备份
页面
游戏
影视
直播
广播
听书
音乐
图片
看书
微视
主播
统计
友链
留言
关于
论坛
邮件
推荐
我的云盘
我的搜索
我的记录
我的文件
我的图书
我的笔记
我的音乐
我的影视
我的邮件
搜索到
344
篇与
的结果
2025-07-14
硬盘和光驱的跳线设置 (2008-06-09 15:32:31)
如今硬盘容量是越来越大,价格也越来越便宜。对于用户来说,硬盘空间是“韩信点兵,多多益善”,而为电脑安装两块硬盘便成了“扩容”的最常见手段。不过,如何安装和使用双硬盘也成为我们必须面对的问题……双PATA硬盘的安装相信现在还有很多人在使用PATA(并行ATA)接口的硬盘。这类硬盘外观最大的特点就是通过扁平的IDE数据线来进行数据传输。那么如果有两块PATA硬盘,该如何安装呢?1.规划IDE设备的主从关系一般主板都提供了两个IDE接口,可以接四个IDE设备。但除了硬盘外,用户一般还有1个或2个光驱。因此,要想获得更好的性能,就要规划好这3个或4个设备的安装位置。(1)双PATA硬盘+1个光驱建议将容量大、速度快的硬盘设置为主盘,接在IDE 1接口的数据线上;将另外一个硬盘设置为主盘,光驱设置为从盘,两者一起接在IDE 2接口的数据线上。小提示:系统启动时搜索启动盘的顺序是先IDE 1,后IDE 2。将高速硬盘设置成主盘接在IDE 1上作为系统盘,可以提高系统的性能。(2)双PATA硬盘+双光驱与上面的连接方式相似,建议在IDE 1上除了接那个高速硬盘作为主盘外,再接一个光驱(从盘)。同时IDE 2上也是一个硬盘加一个光驱。2.设置硬盘及光驱的跳线从上面的主从关系规划可以看出,不论是双PATA硬盘加一个光驱,还是双PATA硬盘加两个光驱,硬盘都是“主盘”,光驱都是“从盘”。因此,必须将硬盘及光驱的跳线按此要求进行设置。在IDE设备的跳线设置中,一般用“Master”表示“主盘”,“Slave”表示“从盘”。硬盘出厂时一般默认就是“主盘”,而光驱出厂时的跳线一般默认是“从盘”。在安装硬盘与光驱时,要仔细查看该设备的主/从盘的跳线设置。3.安装PATA硬盘设置好跳线之后,就可以按照上面规划的安装位置,将硬盘、光驱一一装入机箱中,然后连接好设备的数据线与电源线。注意,在使用数据线的时候必须注意——数据线上的三个端口是有定义的,不能随便连接设备。中间的那个端口是“Slave”,是用来连接从盘的;离“Slave”端口最近的那个是“Master”,是用来连接主盘的;离“Slave”最远的那个是“System”,它是插在主板的IDE接口上的4.BIOS设置与硬件检测硬盘安装好以后,我们就可以进入BIOS查看硬盘是否工作正常了:启动电脑,进入BIOS中的“Standard CMOS Setup”(标准CMOS设定)。将硬盘的“Type(类型)”和“Mode(模式)”设为“Auto”,让BIOS自动检测硬盘。也可以通过主菜单中的“IDE HDD Auto Detection”选项来自动检测硬盘。如今的主板都具备自动检测功能,只要没有物理故障,一般都能检测出来,此时就可以看到BIOS中4个IDE端口上的设备了小提示:如果电脑检测不到硬盘,或者检测硬盘时死机,请考虑以下几种情况:硬盘跳线错误;数据线连接错误;没插电源线;主板BIOS不支持大硬盘;前面几种情况比较容易解决,至于BIOS不支持大硬盘,可以采用升级BIOS的方法解决。当然,也可以通过第三方软件来跳过主板BIOS限制,各硬盘生产商都免费提供这种砑蠹铱梢缘焦俜酵旧舷略亍?br> “1个PATA+1个SATA”双硬盘安装SATA(串行ATA)是硬盘今后的发展趋势,如今市场上SATA硬盘及支持SATA硬盘的主板也越来越多。SATA硬盘在外观上最大的变化就是采用了非常窄小的“L”形数据线接口及扁平的电源线接口.支持SATA硬盘的主板一般都会提供2个或4个SATA接口。1.Intel系列芯片组主板的设置(1)1个PATA硬盘+1个SATA硬盘+1个光驱以ICH5、ICH5R、ICH6、ICH6R为代表的Intel南桥芯片支持SATA,目前的i865、i875及最新的i915、i925系列芯片组都提供了对SATA的支持。如果主板的SATA接口是由ICH5/ICH5R芯片提供的,那么应该这样连接:将SATA硬盘的数据线连接到主板的“SATA1”接口中;将PATA硬盘与光驱通过一根IDE数据线连接起来,其中PATA硬盘的跳线设置为“主盘”,并连接到数据线的“Master”端,将光驱的跳线设置为“从盘”,并连接到数据线的“Slave”端,最后将这根IDE数据线连接到主板的“IDE2”接口中。在连接SATA硬盘时要注意:有些SATA硬盘一般都具备传统的4针电源接口及SATA电源接口,在使用时可以任意选择其中一个接口来连接电源,但是绝对不要将这两个接口都接上电源插头,否则会烧毁硬盘的。将所有硬盘及光驱的数据线按上述方法连接好之后,再连接好设备的电源线。接下来启动电脑进入BIOS,选择并进入“Integrated Peripherals”设置窗口,然后进入“OnChip IDE Device”设置画面。在该画面中,除了将“IDE HDD Block Mode”、“On-Chip Primary PCI IDE”、“On-Chip Secondary PCI IDE”三个选项设置为“Enabled”外,其他8个选项全部设置为“Auto"再将光标移动到窗口下方的“On-Chip Serial ATA”选项上按回车键,然后在弹出的窗口中选中“Combined Mode”后按回车键;最后将光标移动到“Serial ATA Port0 Mode”上按回车键,在弹出的窗口中选中“Primary Master”并回车。此时“On-Chip Serial ATA”和“Serial ATA Port0 Mode”选项的设置分别为“Combined Mode”和“Primary Master"按“F10”键保存BIOS设置,重新启动电脑后,再次进入BIOS的“Standard CMOS Features”窗口就会发现,SATA硬盘占据了“IDE Channel 0 Master”通道,而PATA硬盘则占据了“IDE Channel 1 Master”通道,光驱占据“IDE Channel 1 Slave”通道小提示:经过以上设置后,SATA硬盘的优先级比PATA硬盘的高,建议将操作系统安装在SATA硬盘上(此时在DOS下SATA硬盘的第一个分区是“C”盘)。如果不想将SATA硬盘作为系统盘,而想把操作系统安装在PATA硬盘上,则可以在BIOS中将PATA硬盘的启动优先级提高:进入“Advanced BIOS Features”窗口,选择“Hard Disk Boot Priority”并进入硬盘启动优先顺序设置窗口。在该窗口中,默认是SATA硬盘排在PATA硬盘的前面,此时可以选中PATA硬盘,然后按“Page Up”键,使PATA硬盘排在SATA硬盘的前面。最后保存BIOS设置并重新启动电脑,这样PATA硬盘的第一个分区在DOS下便成了“C”盘。(2)1个PATA硬盘+1个SATA硬盘+2个光驱将SATA硬盘的数据线连接到主板的“SATA1”接口中;将PATA硬盘设置为“从盘”,然后用1根IDE数据线将它连接到主板的“IDE1”接口上;将两个光驱分别设置为“主盘”和“从盘”,然后利用一根IDE数据线将这两个光驱连接到主板的“IDE2”接口上.注意,在连接硬盘及光驱的时候,要注意数据线端口的选择。设备安装好以后也要到BIOS中进行设置,具体设置方法和前面“1个PATA硬盘+1个SATA硬盘+1个光驱”的设置方法大同小异。不同的地方是“On-Chip Serial ATA”选项和“Serial ATA Port0 Mode”选项的设置,其中前者应设置为“Enhanced Mode”,后者须设置为“SATA0 Master”保存BIOS设置并重新启动电脑,再次进入BIOS的“Standard CMOS Features”窗口就会发现,此时共有6个IDE设备通道,其中PATA硬盘占据了“IDE Channel 0 Slave”通道,而两个光驱分别占据了“IDE Channel 1 Master”与“IDE Channel 1 Slave”通道,SATA硬盘占据了“IDE Channel 2 Master”通道.经过以上设置后,PATA硬盘的优先级比SATA硬盘的高。如果想把SATA硬盘作为第一启动盘,则可以在“Hard Disk Boot Priority”窗口中将SATA硬盘排在PATA硬盘的前面。此外,在设置“On-Chip Serial ATA Setting”选项时,也可以将“On-Chip Serial ATA”设置为“Auto”,由主板自动根据设备的多少及连接位置来选择SATA工作模式。2.VIA系列芯片组主板的设置VIA的VT8237也提供了对SATA硬盘的支持,在一些采用PT880、KT880、KT800等芯片组的主板上,采用的往往就是VT8237南桥。如果主板采用的是VT8237南桥,那么其SATA硬盘的物理安装、BIOS设置与Intel的ICH5/5R差不多,只须按照前面讲述的连接方案连接好硬盘与光驱,然后在BIOS中找到带有“SATA”或“Serial ATA”字样的选项,将它设置为“Enabled”或“Auto”即可。3.采用第三方芯片的主板的设置也有很多主板芯片组的南桥并不支持SATA,因此主板厂商便会通过板载第三方的SATA控制芯片来提供对SATA的支持。目前使用比较多的第三方控制芯片,主要有Silicon Image公司的Sil3114与Sil3112、Promise公司的PDC20376、SiS公司的SiS180、VIA公司的VT6420等。对于采用第三方SATA控制芯片的主板而言,由于其传输通道并不占用传统的IDE通道,因此无须过多考虑设备的主从关系。也就是说,SATA硬盘只管接在SATA接口上即可,至于PATA硬盘及光驱,可以享用IDE1、IDE 2两个接口(即4个IDE传输通道)。由于不同主板厂商所用的第三方SATA控制芯片不尽相同,因此要想在BIOS中打开SATA功能,其选项名称也各不一样。不过有一点相同的是,该选项一般都在“Integrated Peripherals”设置窗口中。用户只需在此设置窗口中查找带“Serial ATA”、“SATA”字样或与SATA控制芯片厂商名相同的选项就对了。而更多的厂商是在BIOS设置中添加了诸如“Serial ATA Controller”、“Serial ATA Setting”这样的选项,只需将它们设置为“Enabled”即可。双SATA硬盘的安装如果两块硬盘都是SATA接口的,那么它们的安装更加简单,只要利用SATA硬盘数据线将两个SATA硬盘分别连接到SATA1、SATA2接口即可。至于光驱,建议利用IDE数据线将它连接到主板的IDE 2接口上。如果是一个光驱,则一个光驱独占IDE 2;如果两个光驱,则分别设置为主盘、从盘,然后用一根IDE数据线将它们连接到IDE 2上。物理连接好之后,在BIOS中打开SATA控制器即可。具体的设置方法可参考上面介绍的方法,或者查阅主板说明书。PATA硬盘也称并行硬盘。它采用的是称为Ultra ATA/DMA的并行总线接口(俗称IDE接口),目前主流的并行ATA硬盘仅支持ATA/100和ATA/133两种数据传输规范,外部传输速率最高能达到100MB/s或133MB/s。SATA硬盘也称串行硬盘。由于改用线路相互之间干扰较小的串行线路进行信号传输,SATA硬盘数据传输性能有了很大提高,因此相比原来的并行传输方式,SATA的工作频率得到了大幅度的提升。目前的SATA 1.0标准工作频率为150MB/s,未来的SATA 2.0和3.0可提升到300MB/s和600MB/s。
2025年07月14日
2 阅读
0 评论
0 点赞
2025-07-14
Impulse C-to-FPGA设计工具 (2008-06-09 12:21:01)[
Impulse Accelerated Technologies公司最近推出2.0版的CoDeveloper C-to-FPGA设计工具。新版本包括一个新的编译器,速度提高达两倍,并提高了设计质量,使其可与手工优化的设计相比。2.0版增加了对模块生成的支持,允许从C语言生成硬件IP模块,并使用指定端口将这些模块与整体设计集成在一起。在改进对VHDL的支持的同时,新版本增加了Verilog编译器输出。Impulse公司透露,新版本包含扩展指令调度和循环管线操作,大大地改善了设计结果的质量,改进的地方包括:支持定宽(fixed-width integer)整数、定点数学操作、优化器报告(包括管线有效率估计)、通过应用管理器和应用监控器接口进行的桌面模拟。新版本改进了对嵌入式处理器的支持,包括支持最新的Altera和Xilinx处理器和相关软件设计环境。CoDeveloper的设计初衷是促使FPGA算法可与现有的C/C++工具协同开发和调试。这种软件到硬件编译器将C语言处理翻译成低级FPGA硬件语言,并优化生成的逻辑。目前用FPGA实现嵌入式系统呈现越来越最流行的趋势。本书介绍了用C 语言为FPGA编程的原理和技术,以及如何用C语言实现FPGA硬件的平台。该平台提供了一个类似C语言的描述硬件需求的语言Impulse C,设计者只需用该语言描述要实现的硬件的行为,在设计平台的支持下,就可以在FPGA 上实现所要求的硬件。因此,这种设计方法既简化了硬件设计者的设计过程,又为软件设计人员提供了一种可行的硬件设计的途径。本书注重理论与实际相结合,既有原理的介绍,又对设计方法和过程作了详尽的介绍,同时提供了丰富的实例。本书可作为高等院校自动化、电子信息类专业高年级本科生和研究生的教材和学习参考资料,也可作为从事FPGA编程的工程技术人员和EDA工具开发者的参考书。-
2025年07月14日
2 阅读
0 评论
0 点赞
2025-07-14
一种数字集成电路测试系统的设计
一种数字集成电路测试系统的设计http://www.ee365.cn 2005-11-01 20:34 摘要:介绍了一种数字集成电路测试系统的工作原理、组成。提出了系统的软硬件设计方案。该系统基于自定义总线结构,可测试电平范围宽。关键词:数字集成电路测试功能测试通道板精密测量单元随着数字集成电路的广泛应用,测试系统就显得越来越重要。在网络化集成电路可靠性试验及测试系统项目中,需要检验某些具有宽电平范围的军用数字集成电路芯片,而市场上常见的中小型测试系统可测电平范围达不到要求,而大型测试系统价格昂贵。本文介绍了为此项目研制的一种数字集成电路测试系统,可测电平范围达±32V,使用方便,且成本较低。测试系统结构及工作原理系统需要对集成电路进行功能测试和直流参数测试。功能测试通过向集成电路输入端施加设定的测试向量,检测并比较其输出的测试向量,从而验证器件的逻辑功能是否正常。直流参数测试是以电压或电流的形式验证集成电路的电气参数,要保证较高的测试精度。为了使系统结构灵活,便于升级,采用了基于总线的模块化结构,其结构如图1所示。系统由通道板、数控电源板(DPS板)、精密测量单元板(PMU板)、测试接口板、单片机系统板(CPU板)和总线板组成。各个板卡通过总线板进行数据连接和交换。DPS板给测试系统提供电源、电压参考,给被测器件(DUT)提供工作电压。测试接口板功能是给DUT提供测试接口,给器件上电。http://www1.ti.com.cn/customer/article/2004/images/040305_35.gif 在功能测试过程中,计算机把预先生成的测试向量送到单片机系统,单片机控制通道板把信号电平转换为测试所需的电平,并把转换后的时序波形施加到待测器件(DUT)的输入管脚上,然后检测DUT的输出,把检测结果通过总线传到单片机进行判断处理。直流参数测试过程是向DUT施加直流参数测试条件,通过PMU实现DUT直流参数的精密测量。通道板通道板功能有两个,一是把测试码合成最终的测试信号施加到DUT,另外的功能是对DUT的返回信号进行分析比较,将比较结果通过总线返回到单片机系统。通道板的结构设计如图2所示。控制总线通过译码与逻辑控制单元设定并控制DUT管脚的地址,管脚驱动与控制单元驱动并控制继电器阵列完成DUT管脚数据的输入和输出功能。VIH(VIL)是由DPS板设定产生的测试所需的高(低)驱动电平。总线发送由程序预先生成的测试向量,电平转换与驱动单元把测试向量转换为设定电平的测试时序波形,管脚驱动与控制单元控制继电器阵列把波形施加到DUT的输入管脚。管脚电平比较单元检测输出管脚信号电平,与预期输出数据进行逻辑比较后把比较结果传回下位机。在直流参数测试过程中,继电器控制单元将测试接口板上的DUT连接到PMU,利用PMU模块实现电压或电流的精密测量。在通道板的电平转换部分设计如图3所示。电路在稳定后,在无信号输入时,V1略高于V2,输出为VIH;当TTL输入为低电平时,由于电容电压不能突变,使得V1低于V2,比较器翻转,输出为VIL;当TTL输入为高电平时,同样,V1略高于V2,输出为VIH。由于电容充放电,输出端电平不能长久保持在低电平,选取足够大的电容可满足本系统的测试需要。http://www1.ti.com.cn/customer/article/2004/images/040305_36.gif 精密测量单元精密测量单元(PMU)是系统精密测量直流参数的基本单元。系统采用12位A/D和D/A转换器、分档以及开尔文接法等手段来实现高精度测量。PMU可实现加压测流(FVMI)和加流测压(FIMV)两种工作方式。其中PMU中加压测流原理图如图3所示。Vin作为输入,器件施加电压Vp经测试接口板施加到DUT,通过测试Vout可得到到测试电流I。根据电路图可以计算出:这样,根据公式(1),通过控制Vin就可以向被测器件施加设定的电压Vp,根据公式(2)可通过测试Vout来计算被测器件管脚上流过的电流I。http://www1.ti.com.cn/customer/article/2004/images/040305_38.gifhttp://www1.ti.com.cn/customer/article/2004/images/040305_37.gif 直流参数测试中,PMU可通过测试输出端高/低电平、输入端漏电流、输出短路电流以及静态功耗电流等来检测器件的负载特性和静态功耗。为了使PMU具有足够宽的测试范围和测试精度,A3采用具有FET输入级的高压运放OPA445,接成跟随器,使得流入A3的电流极小,保证了电流测试的精度,并且其高压特性保证了PMU的测试范围。 http://www1.ti.com.cn/customer/article/2004/images/040305_39.gif软件部分软件部分的作用是用计算机控制测试系统,并为用户提供一个友好、易于操作的界面。下位机软件用C51程序编写,主程序流程图如图4所示。上位机采用VC#.net编写。下位机软件的主要工作是根据上位机传送的测设参数设置系统电压及测试条件,载入测试向量向DUT管脚发送输入波形,然后测试输出端波形数据,发送到上位机并存储到数据库。经过用户的实际应用,证明该系统性价比高,测试准确。 http://www1.ti.com.cn/customer/article/2004/images/040305_40.gif参考文献
2025年07月14日
8 阅读
0 评论
0 点赞
2025-07-14
循环冗余校验CRC的算法分析和程序实现(cont')(2008-06-09 09:34:21)
三、CRC-32的程序实现。为了提高编码效率,在实际运用中大多采用查表法来完成CRC-32校验,下面是产生CRC-32校验吗的子程序。unsigned long crc_32_tab[256]={0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,0x0edb8832,…, 0x5a05df1b, 0x2d02ef8d};//事先计算出的参数表,共有256项,未全部列出。unsigned long GenerateCRC32(char xdata * DataBuf,unsigned long len){unsigned long oldcrc32;unsigned long crc32;unsigned long oldcrc;unsigned int charcnt; char c,t; oldcrc32 = 0x00000000; //初值为0 charcnt=0; while (len--) { t= (oldcrc32 >> 24) & 0xFF; //要移出的字节的值 oldcrc=crc_32_tab[t]; //根据移出的字节的值查表 c=DataBuf[charcnt]; //新移进来的字节值 oldcrc32= (oldcrc32 << 8) | c; //将新移进来的字节值添在寄存器末字节中 oldcrc32=oldcrc32^oldcrc; //将寄存器与查出的值进行xor运算 charcnt++; } crc32=oldcrc32; return crc32; }参数表可以先在PC机上算出来,也可在程序初始化时完成。下面是用于计算参数表的c语言子程序,在Visual C++ 6.0下编译通过。include <stdio.h>unsigned long int crc32_table[256];unsigned long int ulPolynomial = 0x04c11db7;unsigned long int Reflect(unsigned long int ref, char ch){ unsigned long int value(0);// 交换bit0和bit7,bit1和bit6,类推for(int i = 1; i < (ch + 1); i++){ if(ref & 1)value |= 1 << (ch - i); ref >>= 1; } return value;}init_crc32_table(){ unsigned long int crc,temp;// 256个值for(int i = 0; i <= 0xFF; i++){ temp=Reflect(i, 8);crc32_table[i]= temp<< 24;for (int j = 0; j < 8; j++){ unsigned long int t1,t2; unsigned long int flag=crc32_table[i]&0x80000000;t1=(crc32_table[i] << 1);if(flag==0) t2=0; else t2=ulPolynomial; crc32_table[i] =t1^t2 ; }crc=crc32_table[i];crc32_table[i] = Reflect(crc32_table[i], 32);}}结束语CRC校验由于实现简单,检错能力强,被广泛使用在各种数据校验应用中。占用系统资源少,用软硬件均能实现,是进行数据传输差错检测地一种很好的手段。参考文献[1] 王新梅 肖国镇. 纠错码-原理与方法.西安:西安电子科技大学出版社,2001[2] 罗伟雄 韩力 原东昌 丁志杰 通信原理与电路. 北京:北京理工大学出版社,1999[3] 王仲文 ARQ编码通信.北京:机械工业出版社,1991[4] Ross Williams, A PAINLESS GUIDE TO CRC ERROR DETECTION ALGORITHMS.
2025年07月14日
3 阅读
0 评论
0 点赞
2025-07-14
循环冗余校验CRC的算法分析和程序实现 (2008-06-09 09:33:23)
摘要 通信的目的是要把信息及时可靠地传送给对方,因此要求一个通信系统传输消息必须可靠与快速,在数字通信系统中可靠与快速往往是一对矛盾。为了解决可靠性,通信系统都采用了差错控制。本文详细介绍了循环冗余校验CRC(Cyclic Redundancy Check)的差错控制原理及其算法实现。关键字 通信 循环冗余校验 CRC-32 CRC-16 CRC-4 概述 在数字通信系统中可靠与快速往往是一对矛盾。若要求快速,则必然使得每个数据码元所占地时间缩短、波形变窄、能量减少,从而在受到干扰后产生错误地可能性增加,传送信息地可靠性下降。若是要求可靠,则使得传送消息地速率变慢。因此,如何合理地解决可靠性也速度这一对矛盾,是正确设计一个通信系统地关键问题之一。为保证传输过程的正确性,需要对通信过程进行差错控制。差错控制最常用的方法是自动请求重发方式(ARQ)、向前纠错方式(FEC)和混合纠错(HEC)。在传输过程误码率比较低时,用FEC方式比较理想。在传输过程误码率较高时,采用FEC容易出现“乱纠”现象。HEC方式则式ARQ和FEC 的结合。在许多数字通信中,广泛采用ARQ方式,此时的差错控制只需要检错功能。实现检错功能的差错控制方法很多,传统的有:奇偶校验、校验和检测、重复码校验、恒比码校验、行列冗余码校验等,这些方法都是增加数据的冗余量,将校验码和数据一起发送到接受端。接受端对接受到的数据进行相同校验,再将得到的校验码和接受到的校验码比较,如果二者一致则认为传输正确。但这些方法都有各自的缺点,误判的概率比较高。 循环冗余校验CRC(Cyclic Redundancy Check)是由分组线性码的分支而来,其主要应用是二元码组。编码简单且误判概率很低,在通信系统中得到了广泛的应用。下面重点介绍了CRC校验的原理及其 算法实现。 一、循环冗余校验码(CRC)CRC校验采用多项式编码方法。被处理的数据块可以看作是一个n阶的二进制多项式,由 。如一个8位二进制数10110101可以表示为: 。多项式乘除法运算过程与普通代数多项式的乘除法相同。多项式的加减法运算以2为模,加减时不进,错位,和逻辑异或运算一致。采用CRC校验时,发送方和接收方用同一个生成多项式g(x),并且g(x)的首位和最后一位的系数必须为1。CRC的处理方法是:发送方以g(x)去除t(x),得到余数作为CRC校验码。校验时,以计算的校正结果是否为0为据,判断数据帧是否出错。CRC校验可以100%地检测出所有奇数个随机错误和长度小于等于k(k为g(x)的阶数)的突发错误。所以CRC的生成多项式的阶数越高,那么误判的概率就越小。CCITT建议:2048 kbit/s的PCM基群设备采用CRC-4方案,使用的CRC校验码生成多项式g(x)= 。采用16位CRC校验,可以保证在 bit码元中只含有一位未被检测出的错误。在IBM的同步数据链路控制规程SDLC的帧校验序列FCS中,使用CRC-16,其生成多项式g(x)= ;而在CCITT推荐的高级数据链路控制规程HDLC的帧校验序列FCS中,使用CCITT-16,其生成多项式g(x)= 。CRC-32的生成多项式g(x)= 。CRC-32出错的概率比CRC-16低 倍。由于CRC-32的可靠性,把CRC-32用于重要数据传输十分合适,所以在通信、计算机等领域运用十分广泛。在一些UART通信控制芯片(如 MC6582、Intel8273和Z80-SIO)内,都采用了CRC校验码进行差错控制;以太网卡芯片、MPEG解码芯片中,也采用CRC-32进行差错控制。二、CRC校验码的算法分析CRC校验码的编码方法是用待发送的二进制数据t(x)除以生成多项式g(x),将最后的余数作为CRC校验码。其实现步骤如下:设待发送的数据块是m位的二进制多项式t(x),生成多项式为r阶的g(x)。在数据块的末尾添加r个0,数据块的长度增加到m+r位,对应的二进制多项式为 。用生成多项式g(x)去除 ,求得余数为阶数为r-1的二进制多项式y(x)。此二进制多项式y(x)就是t(x)经过生成多项式g(x)编码的CRC校验码。用 以模2的方式减去y(x),得到二进制多项式 。 就是包含了CRC校验码的待发送字符串。从CRC的编码规则可以看出,CRC编码实际上是将代发送的m位二进制多项式t(x)转换成了可以被g(x)除尽的m+r位二进制多项式,所以解码时可以用接受到的数据去除g(x),如果余数位零,则表示传输过程没有错误;如果余数不为零,则在传输过程中肯定存在错误。许多CRC的硬件解码电路就是按这种方式进行检错的。同时可以看做是由t(x)和CRC校验码的组合,所以解码时将接收到的二进制数据去掉尾部的r位数据,得到的就是原始数据。为了更清楚的了解CRC校验码的编码过程,下面用一个简单的例子来说明CRC校验码的编码过程。由于CRC-32、CRC-16、CCITT和CRC-4的编码过程基本一致,只有位数和生成多项式不一样。为了叙述简单,用一个CRC-4编码的例子来说明CRC的编码过程。设待发送的数据t(x)为12位的二进制数据100100011100;CRC-4的生成多项式为g(x)= ,阶数r为4,即10011。首先在t(x)的末尾添加4个0构成 ,数据块就成了1001000111000000。然后用g(x)去除,不用管商是多少,只需要求得余数y(x)。下表为给出了除法过程。除数次数 被除数/ g(x)/结果 余数 0 1 001000111000000 100111000000 1 0011 0 000100111000000 1 1 00111000000 1000000 1 0011 0 00001000000 2 1 000000 1100 1 0011 0 001100 从上面表中可以看出,CRC编码实际上是一个循环移位的模2运算。对CRC-4,我们假设有一个5 bits的寄存器,通过反复的移位和进行CRC的除法,那么最终该寄存器中的值去掉最高一位就是我们所要求的余数。所以可以将上述步骤用下面的流程描述://reg是一个5 bits的寄存器把reg中的值置0. 把原始的数据后添加r个0. While (数据未处理完) Begin If (reg首位是1) reg = reg XOR 0011. 把reg中的值左移一位,读入一个新的数据并置于register的0 bit的位置。 Endreg的后四位就是我们所要求的余数。这种算法简单,容易实现,对任意长度生成多项式的G(x)都适用。在发送的数据不长的情况下可以使用。但是如果发送的数据块很长的话,这种方法就不太适合了。它一次只能处理一位数据,效率太低。为了提高处理效率,可以一次处理4位、8位、16位、32位。由于处理器的结构基本上都支持8位数据的处理,所以一次处理8位比较合适。为了对优化后的算法有一种直观的了解,先将上面的算法换个角度理解一下。在上面例子中,可以将编码过程看作如下过程:由于最后只需要余数,所以我们只看后四位。构造一个四位的寄存器reg,初值为0,数据依次移入reg0(reg的0位),同时reg3的数据移出 reg。有上面的算法可以知道,只有当移出的数据为1时,reg才和g(x)进行XOR运算;移出的数据为0时,reg不与g(x)进行XOR运算,相当与和0000进行XOR运算。就是说,reg和什么样的数据进行XOR移出的数据决定。由于只有一个bit,所以有 种选择。上述算法可以描述如下,//reg是一个4 bits的寄存器初始化t[]={0011,0000}把reg中的值置0. 把原始的数据后添加r个0. While (数据未处理完) Begin 把reg中的值左移一位,读入一个新的数据并置于register的0 bit的位置。reg = reg XOR t[移出的位]End上面算法是以bit为单位进行处理的,可以将上述算法扩展到8位,即以Byte为单位进行处理,即CRC-32。构造一个四个Byte的寄存器reg,初值为0x00000000,数据依次移入reg0(reg的0字节,以下类似),同时reg3的数据移出reg。用上面的算法类推可知,移出的数据字节决定reg和什么样的数据进行XOR。由于有8个bit,所以有 种选择。上述算法可以描述如下://reg是一个4 Byte的寄存器初始化t[]={…}//共有 =256项把reg中的值置0. 把原始的数据后添加r/8个0字节. While (数据未处理完) Begin 把reg中的值左移一个字节,读入一个新的字节并置于reg的第0个byte的位置。reg = reg XOR t[移出的字节]End算法的依据和多项式除法性质有关。如果一个m位的多项式t(x)除以一个r阶的生成多项式g(x), ,将每一位(0=<k<m)提出来,在后面不足r个0后,单独去除g(x),得到的余式位 。则将后得到的就是t(x)由生成多项式g(x)得到的余式。对于CRC-32,可以将每个字节在后面补上32个0后与生成多项式进行运算,得到余式和此字节唯一对应,这个余式就是上面算法种t[]中的值,由于一个字节有8位,所以t[]共有=256项。多项式运算性质可以参见参考文献[1]。这种算法每次处理一个字节,通过查表法进行运算,大大提高了处理速度,故为大多数应用所采用。
2025年07月14日
9 阅读
0 评论
0 点赞
1
...
38
39
40
...
69