FPGA/ASIC技术
本文提出了一种基于SoPC的FPGA在线测试方法,是对现有FPGA在线测试方法的一种有效的补充。
1 在线测试数据操作流程
基于SoPC的FPGA在线测试方法的数据操作流程如图1所示。如果用户需要采集FPGA的测试数据并且上传至PC机,则用户首先要将被测试数据写入DMA读从外设,然后系统自动启动DMA控制器,将数据送入Nios II的数据存储器。再由JTAG UART控制器经JTAG接口上传至Nios II IDE(NiosⅡIntegrated Development Environment,Nios II开发环境),Nios II IDE将接收到的数据写入测量数据存储文件,从而完成了FPGA测试数据的上传。如果用户需要将PC机中的激励数据文件下载至FPGA,则系统首先在Nios II IDE中通过Host-Based File System读出激励文件数据,然后由JTAG接口经JTAG UART控制器下载至Nios II处理器的数据存储器,Nios II发起DMA写传输把数据从数据存储器搬运至DMA写从外设并写入FPGA片上FIFO,从而完成了激励数据的下载。
2 SoPC平台架构
SoPC系统部件组成见图2,系统包括Nios II处理器、On-Chip RAM、JTAG UART、EPCS控制器,SYSID、定时器、DMA读控制器dma_0、DMA写控制器dam_1,以及自定义DMA读从外设fifo_control与自定义DMA写从外设ext_rdfifo_controller。NiosⅡ的复位地址为EPCS控制器,异常地址为On_ChipRAM。DMA读控制器的读主端口连接至自定义DMA读从外设,写主端口连接至On-Chip RAM,DMA写控制器的读主端口连接至On-Chip RAM,写主端口连接至自定义DMA写从外设。系统的JTAG UART主要实现JTAG接口的控制,使FPGA能够通过JTAG接口与PC机进行通信。
3 DMA读、写从外设的设计
测试数据在DMA控制器读数据之前是存储在片上FIFO的,而激励数据是通过DMA控制器写入片上FIFO的。然而DMA控制器数据读、写主端口采用的是Avalon存储器映射接口(Avalon Memory Mapped Interface,Avalon-MM接口),不能直接对FIFO进行操作,Altera公司也没有提供相应的控制器核,需要用户自己开发DMA读从外设用于控制FIFO把测试数据传送给DMA控制器,以及DMA写从外设用于控制FIFO接收DMA控制器的激励数据。本文开发的DMA读从外设模块结构框图如图3所示。
DMA读从外设包括了3个端口,即控制从端口、DMA从端口以及FIFO写端口。DMA读从外设的控制从端口包括3个寄存器,分别是状态寄存器status、控制寄存器control、FIFO已使用字数寄存器usedw。NiosⅡ通过读/写这些寄存器获取此外设的状态以及实现对此外设的控制。另外,控制端口还包含了中断接口用于此外设向NiosⅡ发起中断请求。DMA读从外设产生中断请求有2种情况:一是内部FIFO写满;二是收到外部测试数据的包结束信号。此时,即使FIFO未写满,DMA读从外设也会发起中断请求,从而实现采集的测试数据的立即传输。DMA从端口采用带流控制信号的AvalonMM总线,用于实现DMA控制器的测试数据读操作;管道接口是测试数据写入此外设的FIFO接口,包括数据总线、写有效信号和一些状态信号(如FIFO写满信号等)。DMA写从外设的结构与DMA读从外设类似,只是没有中断请求信号,这里不再详述。
4 数据传输的NiosⅡ控制
4.1 DMA控制器的操作
Altera公司为DMA控制器提供了硬件抽象层(HAL)接口函数,使用这些函数编程需要注意的地方主要有2点:一是要考虑到Cache数据的一致性问题,在调用发送/接收函数之前需要调用相关函数清除数据Cache中的内容;另外一个需要注意的地方是DMA控制器的alt_dma_txchan _send()函数以及alt_dma_rxchan_prepare()函数的第3个参数表示的是请求DMA控制器发送/接收的字节数,而不是字或者双字、四字数。
4.2 Host-Base File System
Altera公司提供的Host-Base File System组件可以使正在目标板上执行的程序读/写存储在主机上的文件,文件的数据是NiosⅡIDE通过Altera下载线缆与目标板进行数据交互的。目标板上的程序可以使用ANSIC标准库函数如fopen、fread等函数来进行文件的操作,用户使用Host-Base File System前必须先在NtosII IDE工程中添加这个软件组件,而且只能运行在Debug模式下。另外,对于上传至PC的测试数据,也可以使用设置标准输入/输出信息存放于主机上的某个文件(在NiosⅡIDE/Run/Run…/Common下指定)而绕开Host-BaseFile System,但是对于主机文件数据下载给目标板的情况,对文件的操作必须添加这个组件。
4.3 测试数据读、写控制
当需要采集测试数据时,首先在FPGA内部用硬件语言编写模块把测试数据存入DMA读从外设的FIFO,然后DMA读从外设产生中断请求,NiosⅡ接到中断请求后,首先查看中断产生的原因是FIFO写满还是数据包结束。若中断原因是数据包结束,则NiosⅡ读DMA读从外设的usedw寄存器获取FIFO已使用字数,并把这个值作为DMA控制器的传输长度发起DMA传输;若是FIFO写满,则发起固定长度(如FIFO深度)的DMA读传输,DMA传输完毕后用ANSIC标准函数fwrite()把数据写入PC机的数据文件。
对于存储在PC机上的数据激励文件,NiosⅡIDE首先通过ANSIC标准函数fread()读入NiosⅡ的数据存储器,在查询DMA写从外设中FIFO未满时,把数据写入外部的FIFO,完成数据激励文件的传输。
5 系统验证
5.1 系统测试条件
本次测试中FPGA芯片为Altera公司的CycloneIII EP3C120F484C8,系统时钟为50 MHz,使用的JTAG传输线缆为USB Blaster,NiosⅡ为经济模式,自定义DMA读、写外设内部FIFO均为2 K×16 b,NiosⅡ数据存储器On-Chip RAM大小为60 KB,使用Host-Base File System组件,在NiosⅡ工程属性中选中“Reduced device drivers”,经过NiosⅡIDE编译后代码占用程序存储空间为50 KB。
5.2 测试数据传输测试
在FPGlA目标系统测试数据上传至PC的测试中,在FPGA内部用verilog语言编写了一个数据源模块,数据源输出为2~8 000的计数值,数据宽度为16位,在数据8 000输出时,数据包结束信号有效,这样既可以验证FIFO满中断的情况又可以验证数据包结束中断的情况。测试数据源首、尾部的SignalTapⅡ测试波形如图4所示。在NiosⅡIDE,通过把pritnf()函数输出的调试信息自动存放到一个文本文件中,删去首、尾的调试信息即得到有效数据文件。文本文件数据结果如图5所示,其中数字后面的小黑块代表换行符,从结果看,此方法实现了测试数据的正确上传(注:由于测试数据太长,文中只给出数据的首部和尾部的截图)。
5.3 激励数据传输测试
在激励数据传输测试时激励数据为存储于PC机上的计数值为1~2048二进制流文件,数据宽度为16位,通过加入Host-Base File System组件调用fopen()与fread()函数完成数据的读出,当查询DMA写从设备未满时发起DMA传输,图6是外部逻辑读DMA写从设备中FIFO的Signal Tap II测试波形图。从图中的结果看,数据读出为1~2 048,实现了激励数据的正确下载。
6 结语
本文提出了一种基于SoPC的FPGA在线测试方法,这种在线测试方法可以把存储在FPGA片上FIFO的测试数据通过JTAG接口上传至PC机并写入文件,也可以把存储在PC机上的激励文件通过JTAG接口下载到FPGA的片上FIFO。相比Altera已有的在线测试方法,此方法采用DMA操作,具有较高的数据吞吐量;采用NiosⅡ控制测试/激励数据的传输,无需手动操作;采集过程的控制由C语言编写,简单易用;使用PC机上的激励文件或者把测试数据存储为PC机上的文件,可以使用其它分析工具(如Matlab)产生激励文件或者对测试数据文件进行分析;另外,此方法对测试数据的采样深度没有限制。因此,这种在线测试方法具有广泛的应用前景。
全部0条评论
快来发表一下你的评论吧 !