随着电子技术的高速发展,越来越多的信号处理系统,需要高速的数据采集和大吞吐量的数据传输,来实现数据的高速实时处理能力。在雷达系统中,原始数据中包含丰富的信息,及时获得原始数据并进行实时分析就显得尤为重要,因此在雷达处理机中需要大量使用板间通信,并保证板间数据传输具有高速性和可靠性。单板系统已经不能满足需求,需要多板共同实现。
在数据传输系统中,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 II/s(标准)--高性能,低FPGA使用量;Nios II/e(经济)--低性能,的FPGA使用量。这3种产品具有32位处理器的基本结构单元--32位指令大小,32位数据和地址路径,32位通用寄存器和32个外部中断源;使用同样的指令集架构(ISA),100%二进制代码兼容,设计者可以根据系统需求的变化更改CPU,选择满足性能和成本的方案,而不会影响已有的软件投入。Nios II系列支持使用专用指令。专用指令是用户增加的硬件模块,它增加了算术逻辑单元(ALU)。用户能为系统中使用的每个Nios II处理器创建多达256个专用指令,这使得设计者能够细致地调整系统硬件以满足性能目标。
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中运行的代码。
μClinux是一个完全符合GNU/GPL公约的操作系统,完全开放源代码,现在由Line公司支持维护。μClinux的发音是you-see-linux,它的名字来自于希腊字母μ和英文大写字母C结合。μ代表"微小"之意,字母C代表"控制器",所以从字面上就可以看出它的含义,即"微控制领域中的Linux系统".μClinux操作系统的用户可以使用几乎所有Linux的API函数,不会因为没有内存管理单元MMU而受到影响;而且,μClinux在标准的Linux基础上进行了适当的裁剪和优化,形成了一个高度优化的、代码紧凑的嵌入式Linux.
4 软件实现
4.1 FPGA程序
FPGA(Field-Programmable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。FPGA一般来说比ASIC(专用集成芯片)的速度要慢,无法完成复杂的设计,而且消耗更多的电能。但是他们也有很多的优点比如可以快速成品,可以被修改来改正程序中的错误和更便宜的造价。
如图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的下位机系统的移植性强,可以很方便地移植到其他平台上,并作相应的性能提升。
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。