APP下载

一种FPGA中PowerPC最小系统故障分析及改进

2020-05-25曹孟刚

中国新通信 2020年1期

曹孟刚

摘要:FPGA具有丰富的可编程I/O引脚、逻辑宏单元、门电路以及RAM空间,在嵌入式领域的广泛应用。本文以FPGA使用中一种设计缺陷进行分析并进行了改进。

关键词:FPGA;PowerPC最小系统;故障分析及改进

0引言

本PowerPC最小系统故障为通讯模块中偶发故障。通讯模块由FPGA电路与协议芯片电路组成,处理GJB289A总线数据时,应用端数据通过PCI总线送到FPGA内部的双端口RAM缓冲区,FPGA内部的PowerPC405将数据从双口RAM中搬移至GJB289A总线协议芯片中,再通过GJB289A总线协议芯片转换成GJB289A总线格式的数据在总线上传输;CIM模块从GJB289A总线接收到的数据也通过PowerPC405搬移至双口,应用端通过双口获取到数据;处理429总线数据时,应用端数据通过PCI总线送到FPGA内部的双端口RAM缓冲区,FPGA内部的PowerPC405将数据从双口RAM中搬移至429总线协议芯片中,再通过429协议芯片转换成429格式的数据在总线上传输;CIM模块从429总线接收到的数据也通过PowerPC405搬移至双口,应用端通过双口获取到数据。在FPGA内部,包含两个PowerPC405硬核,分别处理GIB289A总线的数据和429总线的数据。通讯模块的设计原理框图如图1所示。

PowerPC最小系统由PowerPC405、PLB总线以及挂接在PLB总线上的RAM组成,其中,PowerPC405是运行总线数据处理软件的处理器,PLB总线是处理器本地总线,RAM是PowerPC405中软件的程序区、数据区及堆栈区的存储空间。

应用端周期通过PCI总线访问通讯模块上BRAM1上的数据较短,当访问周期较低时,PowerPC1偶发软件运行异常。

一、故障机理分析

在通讯模块的设计中,PPC405_1在运行时,通过PLB总线1访问RAM1,进行取程序指令操作、读写程序数据、进栈出栈操作,同时在程序运行时,通过PLB总线1对1553协议芯片通信模块进行读写访问,通过PLB2OPB桥访问挂接在OPB总线1上的BRAM1、中断控制器IP核、timebase核。PPC405_2在运行时,通过PLB总线2访问RAM2,进行取程序指令操作、读写程序数据、进栈出栈操作,同时在程序运行时,通过PLB2OPB桥访问挂接在OPB总线1上的BRAM2,通过PLB2OPB桥访问挂接在OPB总线2上的429通信模块。

基于上述设计,在进行GJB289A总线通信发送数据时,CPU通过PCI官方IP核,访问OPB总线1上挂接的BRAM1,将数据写入BRAM1中。1553软件通过PLB2OPB桥访问挂接在OPB总线1上的BRAM1将数据从BRAM1中搬移至挂接在PLB总线1上的1553协议芯片通信模块中。之后等待总线上来自总线控制器的消息命令,GJB289A总线协议芯片收到消息命令后,将已写入的数据发送至总线上,之后发送消息结束中断给FPGA,消息结束中断通过中断控制器核送给PPC405_1,PPC405_1中的软件进入中断服务程序执行,在中断服务程序中,首先通过PLB2OPB桥访问挂接在OPB总线1上的中断控制器核,读取中断状态等寄存器,然后进入用户的中断服务程序执行,在用户的中断服务程序中,存在对1553协议芯片通信模块和BRAM1的访问。

在上述程序运行及通信过程中,存在对PLB总线的频繁访问,导致PLB总线占用率过高,导致PPC405_1中的程序運行错误,出栈异常,导致PPC405_1访问非法地址,该非法地址通过PLB2OPB桥传到OPB总线上,导致OPB总线出现timeout现象,进而导致CPU通过PCI访问BRAM1和BRAM2异常。程序运行错误导致程序进入0x0700异常处理中断无法跳出,进而导致故障。

进一步分析OPB总线上出现访问非法地址的原因,监控PPC405内部的软件工作状态,通过软件debug的方式进行监控跟踪,发现出现故障时,程序运行出栈异常,堆栈溢出,程序访问了非法空间,该非法空间通过PLB2OPB桥传到OPB总线上,导致OPB总线上出现timeout信号。进一步通过debug的方式监控PPC405的行为,发现出现异常后,软件进入0x0700异常处理中断执行,且无法跳出。针对该现象,修改xilinx库文件中的源文件,修改0x0700异常处理中断程序,在该异常中断中,读取PLB和PLB2OPB桥的DCR寄存器,DCR寄存器中的值显示,在出现故障后,PPC405处理异常,存在对非法空间的访问,导致出现timeout信号。

更改软件,将0x0700异常处理中断挂接在用户的中断服务程序中,在用户的中断服务程序中增加GPIO输出,通过示波器测量PPC405的中断信号,发现在出现故障时,软件在用户挂接的中断服务程序中,进入一次700异常中断,之后中断服务程序正常结束,但是在下一次中断进入之前,PPC405反复进入700异常中断。导致软件运行无法恢复正常。

由于PowerPC405中的软件运行时,需要通过PLB总线访问RAM读取程序指令,读写程序运行的数据,并进行压栈出栈等操作。因此针对PLB总线进行分析,通过查看PLB总线数据手册可知,PLB总线不支持高总线占用率,详见图2。

二、优化设计

在FPGA逻辑中将原来PLB总线上挂接的供PPC405软件运行指令和数据的RAM去掉。启用OCM,将PPC405中软件的指令分配至isocm中运行,将数据分配至dsocm中运行。