2 EDAC电路的设计
EDAC电路必须配合CPU的读写时序进行工作,不同类型CPU的时序往往是不一样的。一般来说,总可以分为读周期和写周期。在写周期时,按照上面的设计逻辑,根据16位数据位生成6位的校验字,这时,数据位是输入,校验位是输出,并在该写周期中将数据位和校验位都存储到相应的存储器位置中去,这种情况比较简单。在读周期时,情况复杂些,可以设计成三步完成。第一步,在CPU读信号来之前,由于存储器地址和片选信号已经有效,可先将数据位和校验位读入,这时,数据位和校验位都是作为输入。第二步,在读信号来时,将数据位、校验位锁存,同时进行检测,如果无错,则不进行任何处理,直接将数据输出;如果发现二位错,则产生中断;如果是一位错,在输出上有所反应,并进入下一步。第三步,如果是数据位出错,将其自动更正,并将正确的值再回写到相应的内存地址中,将正确的数据值输出到数据总线;如果是校验位出错,可以直接将正确的数据位输出到数据总线上。这部分功能是EDAC功能的核心,可以用VHDL语言来实现,以下是设计思路。
(1)对输入的设计
① 数据位和校验位的输入。
② 控制端的输入。经过前面的分析,一共有四种状态(写一种状态、读三种状态),可以设计两个控制端,设为C0、C1。其功能见表2。
(2)对输出的设计
① 数据位和校验位的输出。其中校验位的输出在读周期和写周期有所不同:在写周期校验位输出是生成的校验位;而读周期就没有必要输出校验位了,可以设计为输出伴随式S。
② 错误标记输出。在应用中,可以设计两种错误标记输出,分别记为ERR和INT。其中ERR输出"1"表示数据位有错误产生,包括可自动纠正的一位错误和两位或两位以上错误。INT输出"1"则表示发生了两位或以上错误,无法自动纠正,向CPU申请中断,由CPU进行异常处理。
在表2中,总结了上面所描述的功能设计。