APP下载

FPGA核心系统自检设计

2014-04-29盛锐

电子世界 2014年15期

【摘要】自检是指通过设备和系统内部的程序对主要部分进行自动测试,并定位故障。自检功能可以减少故障检测的时间,提高检测的效率,是提高系统可靠度的必要手段。本文根据FPGA核心系统的结构特点,设计了FPGA核心系统的自检方案。

【关键词】FPGA;核心系统;自检

1.引言

FPGA(Field-Programmable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。随着集成电路技术的不断发展,FPGA已经广泛运用在航空,医疗,自动化控制等各个领域,FPGA核心系统的可靠稳定是整个系统能够正常运行的基础。FPGA核心系统主要由两部分组成,即FPGA主机电路和外扩存储电路。FPGA主机电路由FPGA,电源,晶振构成,外扩存储电路采用同步动态随机存储器(Synchronous Dynamic Random Access Memory,SDRAM)。自检是指通过设备和系统内部的程序对主要部分进行自动测试,并定位故障。自检功能可以减少故障检测的时间,提高检测的效率,是提高系统可靠度的必要手段。FPGA核心系统的自检不仅可以提高系统的可靠性,还能及时发现故障,便于系统的维护。本文以ALTERA公司的Cyclone III系列的一款FPGA为例,设计了FPGA核心系统的自检方案。

2.自检结构

自检结构一般包括三个功能模块:自检控制器模块、激励信号模块和结果分析模块。如图1所示,激励信号模块在自检控制器控制下将激励信号加载到被测单元上,通过结果分析模块将被测单元的输出响应与正确响应特征比较,得到该系统单元的测试结果。自检控制器根据系统的控制信号来控制自检过程的运行和中断,激励信号模块根据自检控制器的命令进行原始信号和自检激励信号的切换。

图1 自检系统结构框图

3.FPGA主机电路自检设计

FPGA主机电路自检的主要任务是检测时钟,锁相环以及FIFO等内核模块能否正常工作,即检测控制电路中的时钟电路和电源电路是否工作正常。FPGA不同于单片机等微处理器需要对其指令系统进行检测,但由于其可重构的特点,可以在FPGA内部设计检测电路对常用的内核模块进行检测。图2所示中的模块通过简单的LED灯的亮暗来判断控制电路是否能正常工作,模块利用锁相环PLL和FIFO模块来检测控制电路能否正常工作。

图2 控制电路自检模块

利用FPGA锁相环输出100MHz时钟对20MHz外部时钟进行检测,对20MHz时钟的周期进行计数,并将计数值写入FIFO中,同时将计数值从FIFO中读出在模100M的累加器中,当累加器溢出时,改变LED的状态。假设FPGA可以正常工作,且LED正常。经过一个20MHz时钟的周期,累加器中的值增加10,累加器溢出需要0.5s,LED灯1s闪烁一次。仿真时序见图3所示。

clk_100m:锁相环输出100MHz时钟;clk:外部时钟电路提供20MHz时钟;cnt:对20MHz时钟检测的计数值;restult:FIFO中读出的计数值;counter:累加器的累加值。

当模拟锁相环模块故障时,锁相倍频模块将输出不稳定的低频信号,即clk_100m信号无法正确检测20MHz信号的周期。当FIFO缓冲模块故障时,累加器将无法得到正确的累加值。这些主机电路的故障都将导致LED灯的闪烁不正常。

图4 SDRAM自检流程

4.数据存储器自检设计

FPGA核心系统的外扩存储电路电路采用2片16位同步动态随机存储器(Synchronous Dynamic Random Access Memory,SDRAM)组成4M×32bits的存储模块。该存储模块具有读写速度快,容量大,信号多,控制复杂等特点。数据在SDRAM中采用矩阵的方式存储,地址译码通过行列地址选通,根据地址信号来选取要操作的某几个(或某行)数据,以便读写控制电路对这些相应的单元进行读写操作。不同于SRAM這种静态存储器,SDRAM不仅提供的同步时钟信号以进行高速的读写,由于其动态存储方式,还需要不断的进行自刷新来保证数据不丢失。

FPGA在保存或读取数据时,需要对连续的内存地址进行操作,采用突发长度为256的读写方式,即连续读/写256个存储单元,进行一次行列地址选通。基于这种数据传输方式,SDRAM自检时,在进行地址线扫描检测的同时,通过改变写入数据的方式对数据线故障进行检测,流程图如图4所示。

本设计中采用12位寄存器add_flag[11:0]的各个二进制位对应地址线A0~A11,16位寄存器data_flag[15:0]的各个二进制位对应数据线DB0~DB15,在选取测试数据时,同样按照地址线扫描法的思想对数据线进行扫描,当Ai=0时,突发写入时依次循环写入0001H,0002H…8000H,当Ai=1时依次写入FFFEH,FFFDH~8FFFH。采取这样的数据的好处是当某个数据线发生短路或断路时,能明显的检测出来。然后读取所存入的测试数据,判断数据线是否存在故障。以图5为例,SDRAM_ADD为当前选通的行地址,SDRAM_DB为输入的数据,SDRAM_DATA为从SDRAM中读取的数据,data_flag为数据线故障标志。将SDRAM_DB和SDRAM_DATA进行比较,可见当SDRAM_DB=0008H时,SDRAM_DATA=0000H,可见数据线DB4发生了故障,DB4在data_flag中的对应位置1,即data_flag=0008H。

图6所示中,address为当前检测的地址线,add_flag为地址线故障标志,data1为A8=1时读出的数据,data0为A8=0时读出的数据,由于读出的数据data1和data0相同时(均为fffdH),该地址线故障,对应表示为置1,即add_flag=008H。

用寄存器sdram_err来表示数据存储电路模块是否存在故障,若存在故障则置1,若能正常使用则为0。采用这种方法的优点是:(1)对地址线进行了逐根扫描,可以覆盖由地址连线带来的故障。(2)由于相邻两个单元的内容不同,检测了SDRAM的突发读/写的操作方式。(3)覆盖了数据线之间的故障和数据线的连线故障。

5.结束语

本文设计FPGA核心系统可以实时检测FPGA主机电路的锁相环模块,FIFO缓存模块,IO接口等基本功能,保证FPGA能够正常运行,并且可以及时发现故障,方便故障的检测和维修。外扩存储器电路的自检功能可以快速检测存储器数据线和地址线的故障。FPGA核心系统的正常运行是整个系统实现功能,可靠运行的基础,因此FPGA核心系统的自检具有很重要的实际意义。

作者简介:盛锐(1982—),男,江苏常州人,大学本科,现供职于天地(常州)自动化股份有限公司,主要从事工矿安全监控等成套系统的建设工作。