位置:51电子网 » 技术资料 » 模拟技术

错误检测与纠正电路的设计与实现

发布时间:2008/5/27 0:00:00 访问次数:528

来源:单片机及嵌入式系统应用 作者:李 飞 张志敏 王岩飞摘要:针对一些恶劣的电磁环境对随机存储器(ram)电路误码影响的情况,根据纠错编码的基本原理,提出简单实用的能检查两位错误并自动纠正一位错误的edac算法;通过vhdl语言编程设计,由fpga器件来实现,并给出仿真结果。

关键词:错误检测与纠正(edac) 汉明距离 fpga vhdl

引 言

在一些电磁环境比较恶劣的情况下,一些大规模集成电路常常会受到干扰,导致不能正常工作。特别是像ram这种利用双稳态进行存储的器件,往往会在强干扰下发生翻转,使原来存储的"0"变为"1",或者"1"变为"0",造成的后果往往是很严重的。例如导致一些控制程序跑飞,存储的关键数据出错等等。现在,随着芯片集成度的增加,发生错误的可能性也在增大。在一些特定的应用中,这已经成为一个不能忽视的问题。例如在空间电子应用领域,单粒子翻转效应就成为困扰设计师的一个难题。

在这种情况下,我们可以采用错误检测与纠正edac(error detection and correction)电路来有效地减少或避免这种情况的出现。根据检错、纠错的原理,主要思想是在数据写入时,根据写入的数据生成一定位数的校验码,与相应的数据一起保存起来;当读出时,同时也将校验码读出,进行判决。如果出现一位错误则自动纠正,将正确的数据送出,并同时将改正以后的数据回写覆盖原来错误的数据;如果出现两位错误则产生中断报告,通知cpu进行异常处理。所有这一切动作都是靠硬件设计自动完成的,具有实时性和自动完成的特点。通过这样的edac电路,能大大提高系统的抗干扰能力,从而提高系统的可靠性。

当然,有一些现成的集成电路芯片可以完成上述功能,如74系列的74630芯片等。但由于嵌入式系统中,往往由于集成化的需要,要将这样的功能集成到fpga中去实现,因此采用vhdl语言进行设计具有灵活性和通用性的特点。

1 检错与纠错原理

首先来看看检错和纠错的基本原理。进行差错控制的基本思想是在信息码组中以一定规则加入不同方式的冗余码,以便在信息读出的时候依靠多余的监督码或校验码来发现或自动纠正错误。

针对误码发生的特点,即错误发生的随机性和小概率性,它几乎总是随机地影响某个字节中的某一位(bit),因此,如果能够设计自动纠正一位错误,而检测两位错误的编码方式,就可以大大的提高系统的可靠性。

现在我们以16位的cpu数据总线为例,假定信息源的位数为16,要构造一种能够纠正一位错误,检查两位错误的编码方式。根据"纠错定理",需要设计最小汉明距离≥4的码组。我们可以采用线形分组码,利用线性分组码的概念可以构造六位监督码,它们由如下线性关系产生:

其中,d0~d15为16位数据(15为最高位msb,0为最低位lsb),c0~c5为产生的六位监督码,表示进行异或运算。

在数据读出时,我们只需要考察伴随式s=[s0 s1 s2 s3 s4 s5],其中:

很容易证明,根据伴随式进行误差诊断,符合表1所列情况。

表1 误差诊断码表

伴随式

错 误 位 置

数 据 位

校 验 位

无错

d0

d1

d2

d3

d4

d5

d6

d7

d8

d9

d10

d11

d12

d13

d14

d15

c0

c1

c2

c3

c4

c5

s0

1

1

0

1

1

0

0

0

1

1

1

0

0

1

0

0

1

0

0

0

0

0

0

s1

1

0

1

1

0

1

1

0

1

0

0

1

0

0

1

0

0

1

0

0

0

0

0

s2

0

1

1

0

1

1

0

1

0

1

0

0

1

0

0

1

0

0

1

0

0

0

0

s3

1

1

1

0

0

0

1

1

0

0

1

1

1

0

0

0

0

0

0

1

0

0

0

s4

0

来源:单片机及嵌入式系统应用 作者:李 飞 张志敏 王岩飞摘要:针对一些恶劣的电磁环境对随机存储器(ram)电路误码影响的情况,根据纠错编码的基本原理,提出简单实用的能检查两位错误并自动纠正一位错误的edac算法;通过vhdl语言编程设计,由fpga器件来实现,并给出仿真结果。

关键词:错误检测与纠正(edac) 汉明距离 fpga vhdl

引 言

在一些电磁环境比较恶劣的情况下,一些大规模集成电路常常会受到干扰,导致不能正常工作。特别是像ram这种利用双稳态进行存储的器件,往往会在强干扰下发生翻转,使原来存储的"0"变为"1",或者"1"变为"0",造成的后果往往是很严重的。例如导致一些控制程序跑飞,存储的关键数据出错等等。现在,随着芯片集成度的增加,发生错误的可能性也在增大。在一些特定的应用中,这已经成为一个不能忽视的问题。例如在空间电子应用领域,单粒子翻转效应就成为困扰设计师的一个难题。

在这种情况下,我们可以采用错误检测与纠正edac(error detection and correction)电路来有效地减少或避免这种情况的出现。根据检错、纠错的原理,主要思想是在数据写入时,根据写入的数据生成一定位数的校验码,与相应的数据一起保存起来;当读出时,同时也将校验码读出,进行判决。如果出现一位错误则自动纠正,将正确的数据送出,并同时将改正以后的数据回写覆盖原来错误的数据;如果出现两位错误则产生中断报告,通知cpu进行异常处理。所有这一切动作都是靠硬件设计自动完成的,具有实时性和自动完成的特点。通过这样的edac电路,能大大提高系统的抗干扰能力,从而提高系统的可靠性。

当然,有一些现成的集成电路芯片可以完成上述功能,如74系列的74630芯片等。但由于嵌入式系统中,往往由于集成化的需要,要将这样的功能集成到fpga中去实现,因此采用vhdl语言进行设计具有灵活性和通用性的特点。

1 检错与纠错原理

首先来看看检错和纠错的基本原理。进行差错控制的基本思想是在信息码组中以一定规则加入不同方式的冗余码,以便在信息读出的时候依靠多余的监督码或校验码来发现或自动纠正错误。

针对误码发生的特点,即错误发生的随机性和小概率性,它几乎总是随机地影响某个字节中的某一位(bit),因此,如果能够设计自动纠正一位错误,而检测两位错误的编码方式,就可以大大的提高系统的可靠性。

现在我们以16位的cpu数据总线为例,假定信息源的位数为16,要构造一种能够纠正一位错误,检查两位错误的编码方式。根据"纠错定理",需要设计最小汉明距离≥4的码组。我们可以采用线形分组码,利用线性分组码的概念可以构造六位监督码,它们由如下线性关系产生:

其中,d0~d15为16位数据(15为最高位msb,0为最低位lsb),c0~c5为产生的六位监督码,表示进行异或运算。

在数据读出时,我们只需要考察伴随式s=[s0 s1 s2 s3 s4 s5],其中:

很容易证明,根据伴随式进行误差诊断,符合表1所列情况。

表1 误差诊断码表

伴随式

错 误 位 置

数 据 位

校 验 位

无错

d0

d1

d2

d3

d4

d5

d6

d7

d8

d9

d10

d11

d12

d13

d14

d15

c0

c1

c2

c3

c4

c5

s0

1

1

0

1

1

0

0

0

1

1

1

0

0

1

0

0

1

0

0

0

0

0

0

s1

1

0

1

1

0

1

1

0

1

0

0

1

0

0

1

0

0

1

0

0

0

0

0

s2

0

1

1

0

1

1

0

1

0

1

0

0

1

0

0

1

0

0

1

0

0

0

0

s3

1

1

1

0

0

0

1

1

0

0

1

1

1

0

0

0

0

0

0

1

0

0

0

s4

0

相关IC型号

热门点击

 

推荐技术资料

泰克新发布的DSA830
   泰克新发布的DSA8300在一台仪器中同时实现时域和频域分析,DS... [详细]
版权所有:51dzw.COM
深圳服务热线:13692101218  13751165337
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式


 复制成功!