错误检测与纠正电路的设计与实现
导读:
摘要:针对一些恶劣的电磁环境对随机存储器(RAM)电路误码影响的情况,根据纠错编码的基本原理,提出简单实用的能检查两位错误并自动纠正一位错误的EDAC算法;通过VHDL语言编程设计,由FPGA器件来实现,并给出仿真结果。
关键词:错误检测与纠正(EDAC)汉明距离FPGAVHDL引言在一些电磁环境比较恶劣的情况下,一些大规模集成电路常常会受到干扰,导致不能正常工作。特别是像RAM这种利用双稳态进行存储的器件,往往会在强干扰下发生翻转,使原来存储的“0”变为“1”,或者“1”变为“0”,造成的后果往往是很严重的。例如导致一些控制程序跑飞,存储的关键数据出错等等。现在,随着芯片集成度的增加,发生错误的可能性也在增大。在一些特定的应用中,这已经成为一个不能忽视的问题。例如在空间电子应用领域,单粒子翻转效应就成为困扰设计师的一个难题。
在这种情况下,我们可以采用错误检测与纠正EDAC(ErrorDetectionAndCorrection)电路来有效地减少或避免这种情况的出现。根据检错、纠错的原理,主要思想是在数据写入时,根据写入的数据生成一定位数的校验码,与相应的数据一起保存起来;当读出时,同时也将校验码读出,进行判决。如果出现一位错误则自动纠正,将正确的数据送出,并同时将改正以后的数据回写覆盖原来错误的数据;如果出现两位错误则产生中断报告,通知CPU进行异常处理。所有这一切动作都是靠硬件设计自动完成的,具有实时性和自动完成的特点。通过这样的EDAC电路,能大大提高系统的抗干扰能力,从而提高系统的可靠性。
当然,有一些现成的集成电路芯片可以完成上述功能,如74系列的74630芯片等。但由于嵌入式系统中,往往由于集成化的需要,要将这样的功能集成到FPGA中去实现,因此采用VHDL语言进行设计具有灵活性和通用性的特点。
1、检错与纠错原理首先来看看检错和纠错的基本原理。
进行差错控制的基本思想是在信息码组中以一定规则加入不同方式的冗余码,以便在信息读出的时候依靠多余的监督码或校验码来发现或自动纠正错误。
针对误码发生的特点,即错误发生的随机性和小概率性,它几乎总是随机地影响某个字节中的某一位(bit),因此,如果能够设计自动纠正一位错误,而检测两位错误的编码方式,就可以大大的提高系统的可靠性。
现在我们以16位的CPU数据总线为例,假定信息源的位数为16,要构造一种能够纠正一位错误,检查两位错误的编码方式。根据“纠错定理”,需要设计最小汉明距离≥4的码组。我们可以采用线形分组码,利用线性分组码的概念可以构造六位监督码,它们由如下线性关系产生:其中,d0~d15为16位数据(15为最高位MSB,0为最低位LSB),C0~C5为产生的六位监督码,表示进行异或运算。
2、EDAC电路的设计
EDAC电路必须配合CPU的读写时序进行工作,不同类型CPU的时序往往是不一样的。一般来说,总可以分为读周期和写周期。在写周期时,按照上面的设计逻辑,根据16位数据位生成6位的校验字,这时,数据位是输入,校验位是输出,并在该写周期中将数据位和校验位都存储到相应的存储器位置中去,这种情况比较简单。在读周期时,情况复杂些,可以设计成三步完成。第一步,在CPU读信号来之前,由于存储器地址和片选信号已经有效,可先将数据位和校验位读入,这时,数据位和校验位都是作为输入。第二步,在读信号来时,将数据位、校验位锁存,同时进行检测,如果无错,则不进行任何处理,直接将数据输出;如果发现二位错,则产生中断;如果是一位错,在输出上有所反应,并进入下一步。第三步,如果是数据位出错,将其自动更正,并将正确的值再回写到相应的内存地址中,将正确的数据值输出到数据总线;如果是校验位出错,可以直接将正确的数据位输出到数据总线上。这部分功能是EDAC功能的核心,可以用VHDL语言来实现,以下是设计思路。[page]
(1)对输入的设计
①数据位和校验位的输入。
②控制端的输入。经过前面的分析,一共有四种状态(写一种状态、读三种状态),可以设计两个控制端,设为C0、C1.其功能.
(2)对输出的设计
①数据位和校验位的输出。其中校验位的输出在读周期和写周期有所不同:在写周期校验位输出是生成的校验位;而读周期就没有必要输出校验位了,可以设计为输出伴随式S.
②错误标记输出。在应用中,可以设计两种错误标记输出,分别记为ERR和INT.其中ERR输出“1”表示数据位有错误产生,包括可自动纠正的一位错误和两位或两位以上错误。INT输出“1”则表示发生了两位或以上错误,无法自动纠正,向CPU申请中断,由CPU进行异常处理。
利用这个EDAC模块再辅以简单的外围电路就可以实现较强的EDAC功能,可以把这一部分整个电路都集成到FPGA中。
3、仿真结果仿真环境:
MAX+plusII10.0.仿真模拟器件:FLEX10K系列,EPF10K10LC84-3.信号功能说明见表3.表3仿真信号说明信号名称功能说明CLK模拟CPU时钟,在该仿真中设定时钟频率为10MHzWRITE模拟CPU发出的写信号READ模拟CPU发出的读信号MEMW由EDAC电路发出的内存写信号,主要用于数据纠正后的回写HIGH恒为高电平,提供芯片使能信号INTEDAC电路检测到两个以上错误时发出的中断请求信号ERREDAC检测到错误时发出的信号,构校验位产生一位错误时不产生该信号CBIN[5……0]6位校验位输入DBIN[15……016位数据位输入CBOUT[5……0写周期时作校验输出,读周期时输出为伴随式SDBOUT[15……016位数据位输出。
(1)275~500ns仿真了一个写周期,数据输入是AA55,而校验位输出是00,通过验证是符合上面的设计逻辑的。
(2)读周期的仿真在读周期的仿真中,我们模拟了以下四种情况。
①正确的读周期:出现在650~975ns,校验位、数据位都是正确值。
②数据位出现一位错误:图2中1.25~1.65μs模拟了数据位产生一位错误的情况。数据正确的情况下应该是AA55,但现在d8位发生了错误,读入的数据变为AB55,可以看出数据已经被自动更正为AA55;同时,ERR输出“1”表明有错误发生,CBOUT输出为23,即100011,从表1可以看出是d8位发生了错误。
声明:该作品系作者结合法律法规,政府官网及互联网相关知识整合,如若内容错误请通过【投诉】功能联系删除.
相关知识推荐
在司法鉴定过程当中,它是需要根据法定程序来进行处理的,同时对于我国的司法程序它有很多类型,具体来说发生错误情况该如何处理?接下来法律快车小编为大家整理关于程序错
如今,司法鉴定在人们处理纠纷时应用的十分普遍,当事人委托律师提出鉴定申请后,通常一个月内就可以拿到鉴定结果。尽管大部分鉴定机构都会严格开展鉴定活动,但是仍然会有
工程先开工后签合同一般不合法,属于倒签合同的法律行为。倒签合同与企业风险防范的目标相悖,不符合企业管理制度的要求,同时存在较大的法律风险和经营管理风险,在实践中
没有资质挂靠拖欠工程款挂靠施工人可以自己名义起诉要求发包人支付工程款。承包人应当积极向发包人主张工程款,实际施工人有足够证据证明承包人未积极向发包人主张工程款的
建筑工程纠纷行使先履行抗辩权如下:负有先履行义务的一方不如约履行的,另一方可以行使先履行抗辩权、拒绝其相应的履行请求。先履行抗辩权基本上适用于先履行一方违约的场
个人名义签订了建筑工程承包合同无效。承包建筑工程的主体必须具有企业法人资格、持有工商行政管理机关核发的营业执照和建设行政主管部门颁发的资质证书,在核准的资质等级
施工企业与包工头之间的法律关系是劳务合同关系,双方建立承揽业务后包工头受施工企业管理。建筑企业与施工企业之间是建设工程承包(加工承揽)关系,包工头与农民工之间是
承包工程需要签合同,签订时需要注意对工程的真实性、可靠性及发包人的资信情况进行了解,写明单项承包工程名称和范围、施工准备、施工组织设计和工期、工程质量和检验、价