摘 要:介绍了基于NIOS II和μclinux应用于工业CT的数据传输系统。将FPGA的嵌入式软核作为数据传输系统的核心处理器,μclinux操作系统移植到嵌入式系统中,并加入并行处理模块,使得系统不但发挥了FPGA的并行处理的能力和强可配置性,也利用了μclinux系统强大的网络功能。
关键词:NIOS II;μclinux; FPGA; 高速数据传输
在数据传输方面,网络传输TCP/IP协议具有通用性和安全性上的优势,而在数据处理方面,特别是高速数据的处理,FPGA一直是首选方案。通过硬件并行处理的速度在软件看来是难以超越的。用FPGA作前级处理,而后通过DSP数字处理是国际上常用的做法。所以应用FPGA+MCU(或DSP)的做法很普遍,效果也很好。
在数据传输系统中,NIOS Ⅱ嵌入式处理器软核能最大处理200DMIP,与ARM9相当。它最大的特点是可配置性高,可以在里面嵌入DSP硬件、各种存储设备、I/O口以及可以定制用户指令等。通过NIOS Ⅱ可以将FPGA+MCU+DSP系统有机地综合起来,发挥它们各自的优势,用一片FPGA完成系统的构建。从软件上看,μclinux操作系统以高效、简洁著称,而在性能上又继承了linux的高效、开放、实时性好、网络功能强的特点。本系统正是基于NIOS Ⅱ和μclinux设计的,应用于工业CT机的数据传输系统中。
1 系统功能
如图1所示,本系统的主要功能是将工业CT系统数据采集模块得到的数字信号高速可靠地传输到图像处理计算机。数据采集模块的功能是将X(或γ)射线转换为光信号后变为计算机可接收的数字信号。本系统要完成的工作就是高效可靠地接收工业CT需要的数百甚至上千通道的数字信号,并将这些信号有序准确地传输到图像处理计算机。同时要求系统对数据有一定深度的缓冲,即本系统同时能存储8次以上的工业CT系统采样值。传输的方式采用基于TCP/IP的网络协议,数据通过局域网传输。工业CT数据传输间隔时间最短约为3ms。
2 方案简介
如图2所示,系统主要是由片上系统和片外设备构成的嵌入式系统。而片上系统主要是由NIOS Ⅱ系统[1]和FPGA上的前级数据处理模块构成。
NIOS Ⅱ系统使用了用户自定义指令和DMA加速模块来实现数据传输系统核心硬件的加速。用户自定义指令是硬件化了的逻辑模块,它嵌入到CPU中,形成了用户的专用CPU。其作用是实现一个循环冗余码校验(CRC)。将一个64K字的缓冲区中实现CRC的逻辑块作为一个定制的指令,这要比软件快27倍[2]。DMA加速模块的作用是将片上交换缓存(On-Chip RAM)的数据加载到SDRAM中去,这样比使用CPU的指令传输要快得多。
FPGA前级数据处理模块实现数据的前级数据处理:它将CT机的数据采集卡上的高速数据流并行接收到片上交换缓存中。在交换缓存中开辟两片缓冲区,使用乒乓模式来实现数据存放。片外设备包括SDRAM、Flash和Ethernet网络设备。SDRAM用于运行程序和存放待传输的数据。Flash用于存放系统kernal和filesystem。Ethernet网络设备为smsc91c111,它是100M网络传输设备,用于数据的网络传输。
3 系统软件
系统主要采用μclinux操作系统来实现,μclinux在嵌入式系统中非常稳定,并且有NIOS II专用kernal,这样给系统的移植和驱动的编写带来了方便。在8MB的系统中,使用2MB装载内核,6MB装载文件系统。
引导程序U-boot的移植:
Bootloader的设计除了依赖于CPU的体系结构外,也依赖于具体的嵌入式板级设备的配置,对于两块不同的嵌入式板而言,即使它们是基于同一种CPU[3]构建的,在移植操作系统时,这部分代码也需要修改。
Bootloader引导加载程序是系统加电后的第一段程序,系统通过它初始化硬件设备、建立内存空间映射,为调用内核做准备。U-boot是由早期的ppcboot发展而来,它的特点是开源、功能强大,下面作一简要介绍。
首先通过NIOS-elf-tools建立交叉编译环境,选择U-boot-1.0.0.tar版的U-boot。本系统选择μclinux-2.4.17-ucl.tgz版的μclinux版本。而后使用configure命令检查宿主机上U-boot交叉编译环境是否正确,并且通过configure文件的内容对U-boot各子目录的makefile进行修改。这一步只要保证./configure通过就可以了。接下来通过交叉编译环境对U-boot-1.0.0编译。有了编译环境后,就可以根据系统设备配置对U-boot源代码进行移植。修改后,参考README中的内容重新把U-boot 建立起来,这是最终需要的可以在Flash中运行的代码。
4 软件实现
4.1 FPGA程序
如图3所示,FPGA中的前级数据处理模块主要完成数据串转并,并使用乒乓模式缓存。在CT机的数据采集模块中每秒钟产生250次采集每次1 024路、每路20位、再加上各种表头等,这样每秒的数据量大约为5.2Mbit。模块通过SOPC中的接口元件与NIOS Ⅱ处理器相连。
串转并模块的输入为SDA和SCL的I2C标准总线。而后作为乒乓模式的两个缓存将FIFO模块的数据缓存到模块中,每个模块的大小为16KB。FIFO模块将高速I2C的串行数据转换成并行数据,并存入其中一个缓存。当数据存满后产生中断,CPU响应中断后通过DMA方式将数据取走,并存入SDRAM中。在DMA传输过程中,实时数据则存放到另一块缓冲区中。而后交替运行,提高DMA的使用效率。
4.2 下位机应用程序
下位机程序流程示意图如图4所示,在μclinux操作系统中,下位机程序的实现由两个主要部分组成:循环传输部分和中断部分。当FPGA中的前级数据采集模块缓存完毕后,模块将向ARM发送中断信号,这时系统将进入中断部分程序。中断程序将FPGA中缓存的数据读到ARM中并以文件的形式保存到SDRAM中,然后返回主程序循环传输。循环传输的作用是将文件数据传输到上位机,循环读取中断保存的文件,判断文件的格式、顺序等有没有错误,如果有就提示出错;如果文件没有错误并且文件数量满足传输条件,则由循环传输程序将需要传输的文件打包并传输到上位机。使用这种机制可以很好地响应中断,并即时将SDRAM中的数据传输到上位机。
4.3 下位机驱动程序
下位机μclinux中的嵌入式驱动设计的目的:一是初始化I/O口,完成读取FPGA 中乒乓缓存中的数据,二是完成缓存数据模块发来的中断信号。其中最重要的是网络设备的驱动设计。设计用户接口电路与91c111 连接, 采用Verilog HDL 编写91c111和NIOS II[4]系统连接逻辑电路,实现高速以太网通讯。运行SOPC Builder 生成系统文件,创建在NIOS II 硬件系统上运行软件系统所需的支撑文件,提供给软件开发程序NIOS II 集成开发环境,同时生成硬件描述语言文件,描述系统的硬件信息。Quartus Ⅱ软件使用这些文件来编译整个FPGA设计项目。
使用SOPC Builder中的组件编辑器可以把用户外设和系统连接起来。外设既可以放在NIOS Ⅱ系统中,也可以放在NIOS Ⅱ系统外部,这里采用91c111以太网控制器,使用片外方式。根据91c111各个引脚不同的功能和类型, 把91c111各个引脚和FPGA 的引脚连接;设定91c111为AVALON总线的从器件,通过AVALON总线与NIOS Ⅱ系统相连,而且用到了AVALON总线模块的16位输入输出数据信号线、1位地址线、低电平有效的读写信号线、片选和复位信号线,以及中断请求信号线。通过编写Verilog HDL 程序,把这些信号线和91c111对应的数据线、命令信号线、读写信号线等连接起来。
4.4 上位机程序
上位机程序采用VC编写,它为下一步数据处理做测试并提供一些API[5]接口,便于后续程序的调用。在ICT系统中,数据通过本系统传输到上位机作三维图像重建。而这里的上位机程序的作用只是对数据传输系统的测试。上位机软件采用基于TCP/IP[6]的socket编程,由于TCP/IP本身具有很好的安全机制,所以传输的准确性是可以保证的。而且TCP/IP的通用性好,便于移植。
上位机通过TCP/IP建立TCP server并监听相应的端口,等待下位机传输请求。而后连接请求并实现接收和保存功能,为图像的重建作准备。
通过对本系统的测试,能够达到设计的5.2MB/s带宽要求,并在传输带宽上有很大的提升空间,可以达到6.8MB/s的带宽。系统已成功应用于重庆大学ICT中心研制的CD-900型工业CT中。基于μclinux的下位机系统的移植性强,可以很方便地移植到其他平台上,并作相应的性能提升。
参考文献
[1] 彭澄廉.挑战SOC——基于NIOS的SOPC设计与实践[M].北京:清华大学出版社,2004.
[2] 姚天任,孙洪. 现代数字信号处理[M]. 武汉:华中科技大学出版社,1999.
[3]Altera公司.Nios Ⅱprocessor reference book[M]. NII5V2-5.1. 2005:25-75.
[4] Altera公司. Nios Ⅱsoftware developer’s hand-book[M].NII5V2-5.1. 2005:101-114.
[5] 孙鑫,余安萍.VC++深入详解[M].北京:电子工业出版社,2006:35-99.
[6] 代拥,李昌禧.基于嵌入式以太网接口的数据采集处理系统.微机发展[J],2005,15(5):125-127.