严丹
摘要 为给单片机实现EDAC功能,采用了FPGA进行编码设计,设计了FPGA与单片机的硬件和软件接口,将FPGA作为单片机数据与EDAC校验数据之间的中转编译,实现了单片机系统内的EDAC校验功能。
【关键词】单片机 FPGA 单粒子翻转 EDAC
1 引言
单片机80032在卫星、飞船等航天器上应用广泛,常规的单片机系统由单片机、程序存储器和数据存储器组成,在航天器上应用时,程序存储器可以使用不可擦除的PROM来实现功能,该类型程序存储器大多具备单粒子翻转免疫的功能,而对于数据存储器SRAM,该类型器件的特性决定了器件本身无法免疫单粒子翻转,因此在使用中存在单粒子翻转导致数据位错误的现象发生,应用EDAC技术可实现对数据错误的检二纠一,大幅度降低单粒子翻转带来的风险,考虑到单片机80C32无自带的EDAC功能,需要使用FPGA来实现EDAC功能。
利用FPGA实现80C32的EDAC可辨别一位数据或校验位错误,并能够将正确的数据传送到数据线中,但是具体对纠正后数据的SRAM回写,如果采用FPGA实现,硬件上需要增加26根SRAM地址线,还需要增加60个左右的寄存器资源,同时亦存在FPGA回写SRAM与单片机读写时序冲突的问题,所以对SRAM的回写建议采用单片机软件完成,FPGA只提供错误信息。对于二位及以上数据或校验位的错误,不能实现纠正,只提供错误信息。
2 EDAC设计原理
(Error Detect And Correct)EDAC即错误检测及纠正,在实现方法中存在多种编码方式,比较常用的一种编码方式是汉明码,该编码规则是一种线性分组码。在实际应用中,比较常用的是(12-8)汉明码编码方式,但该编码方式仅能纠一位错误,且无法区分两位错误和一位错误的分别,因此在航天器上使用存在较大风险,而使用(13,8)改进版的汉明码编码方式可以实现检两位错误纠正一位错误,因此在使用中无风险,该编码规则其原理如下:
对单片机的8位数据位按一定的编碼规则进行编码,产生5位校验码组成13位数据位,编码规则如下:
CD(4)= CD(3)○ CD(2)○ CD(1)○ CD(0)○ DT(7)○ DT(6)○ DT(5)○ DT(4)○ DT(3)○ DT(2)○ DT(1)○ DT(O);
CD(3)=DT(7)○ DT(6)○ DT(5)○ DT(4);
CD(2)=DT(7)○ DT(3)○ DT(2)○ DT(1);
CD(1)= DT (6)0 DT (5)○ DT (3)○ DT(2)○ DT (O);
CD(O)= DT (6)○ DT (4)○ DT (3)○ DT(1)○ DT (O)。
式中DT表示真实有效数据的数据位(共8位),CD表示编码产生的校验码(共5位)。
当单片机读取SRAM中的数据时,将SRAM中的真实数据和校验码同时读取到FPGA中,FPGA将读取到的数据位和校验码按上述编码规则重新进行编码,产生新的5位校验码,将使用读取操作再通过编码产生的新校验码和数据与从SRAM中读取的数据和校验码进行异或比较运算,将异或运算出的结果组成向量组S,S=(S4,S3,S2,Sl,SO),根据运算出的不同向量S值,对照表1进行纠错检查。
在FPGA设计中,对于数据SRAM -位错误时,仅记录错误信息放入专用寄存器中,不进行中断响应,单片机可通过专用寄存器查询数据错误情况并决定回写时间,如发生两位错误或者不可纠错时则进行中断处理,通过中断口发送中断信号给单片机。
3 外部接口设计
在现有硬件的基础上,只需要增加一块校验SRAM,并扩展FPGA的外部连线即可满足EDAC实现要求,如图1所示。
4 FPGA功能设计
对于FPGA的设计,主要涉及到处理器写总线和读总线二种操作模式。
4.1 写操作
t0:写SRAM操作时的地址保持时间(至少137ns);
tl: FPGA完成校验数据的逻辑操作时间(不大于50ns):
t2:实际写SRAM(包括数据和校验SRAM)的时间(至少200ns)。
FPGA检测到WR低电平时,将数据SRAM的数据线接入到单片机的数据总线,将校验SRAM的数据线接入到校验数据组合逻辑中,如图2所示。
4.2 读操作
t0:单片机读信号RD有效到SRAM数据有效的时间(60ns以下);
tl: FPGA完成EDAC功能的逻辑操作时间(50ns以下);
注:t0和t1的总时间应该小于单片机读时序中RD变低到有效数据的最大延迟时间(16M时钟下,时间为148ns)。
FPGA检测到RD低电平时,将单片机的数据总线接入到EDAC组合逻辑中,将EDAC组合逻辑中的数据线接入到SRAM的数据线中。
FPGA检测到RD上升沿时,检测EDAC是否发生错误,并产生相应的错误信号输出,如图3所示。
4.3 单片机软件接口
EDAC发生错误时,将写入到相应的地址空间中,供单片机进行中断或查询。同时也增加不可纠错计数器和可纠错计数器,分别为8位,上电复位是为O,在有EDAC错误时,进行循环计数,单片机对计数器只能读操作。
5 仿真分析结果
对EDAC设计的仿真如图4-6所示,通过仿真表明EDAC功能正确。
6 结论
本文通过使用FPGA芯片实现了单片机系统的EDAC功能,在FPGA内部设计了EDAC运算和一位或两位数据出错计数功能,并在FPGA内部实现了单片机读取数据的当前出错地址存储功能,达到了预期的设计要求。本设计成功应用在某型号智能处理器中,经长期运行验证了本设计的正确性。
参考文献
[1]陈微等.改进汉明码检错纠错技术的设计与实现[J].全国抗恶劣环境计算机学术年会,2006:192-199.