错误检测与纠正电路的设计与实现
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
0
0
1
1
1
1
1
0
0
0
0
0
1
1
1
0
0
0
0
1
0
0
S5
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
0
0
0
0
0
1
0
本文链接地址:http://www.oyaya.net/fanwen/view/157424.html
当S = [0 0 0 0 0 0]时,数据正确无误;
当S = [0 0 1 0 1 1]时,数据错一位,并且错误发生在d0位,可将d0位的数据取反加以纠正;
当S = [0 0 1 1 0 1]时,数据错一位,并且错误发生在d1位,可将d1位的数据取反加以纠正;
.
.
.
当S= [1 1 0 1 0 0]时,数据错一位,并且错误发生在d15位,可将d15位的数据取反加以纠正;
当S = [0 0 0 0 0 1]时,数据错一位,并且错误发生在C0位;
.
.
.
当S = [1 0 0 0 0 0]时,数据错一位,并且错误发生在C5位;
当S为其它情况时,至少发生两位错误。
可以看出,这种编码方式可以满足自动纠正一位错误,而发现两位错误的要求。下面就进一步讨论如何用电路来实现。
2 EDAC电路的设计
EDAC电路必须配合CPU的读写时序进行工作,不同类型CPU的时序往往是不一样的。一般来说,总可以分为读周期和写周期。在写周期时,按照上面的设计逻辑,根据16位数据位生成6位的校验字,这时,数据位是输入,校验位是输出,并在该写周期中将数据位和校验位都存储到相应的存储器位置中去,这种情况比较简单。在读周期时,情况复杂些,可以设计成三步完成。第一步,在CPU读信号来之前,由于存储器地址和片选信号已经有效,可先将数据位和校验位读入,这时,数据位和校验位都是作为输入。第二步,在读信号来时,将数据位、校验位锁存,同时进行检测,如果无错,则不进行任何处理,直接将数据输出;如果发现二位错,则产生中断;如果是一位错,在输出上有所反应,并进入下一步。
《错误检测与纠正电路的设计与实现(第2页)》