桂婧 李建东
(1.广东技术师范学院天河学院 2.广州多浦乐电子科技有限公司)
随着科技水平的发展,高性能、多通道超声无损探伤仪需要在工作时将实时采集到的图像数据传输给PC机进行图像处理。然而随着实时成像要求的不断提高和图像质量的不断改善,要求的数据传输速率呈现出几何级的增长趋势。同时,在采集传输数据的过程中要求数据的完整性和正确性是非常重要的,少量的数据丢失都可能无法生成正确的图像,给最终的物体探伤检测判断造成影响。所以,如何保证数据高速可靠的传输,成为超声探伤仪设计中越来越重要的问题。
本系统中,图像显示存储与操作控制均在PC机上实现,受机械传动机构的限制,要求PC机与超声检测单元相距至少 6m;大容量实时数据传输速度要求达到10MB/s。
当今可用于工业环境的高速通信接口包括:PCI、PCI-E、USB3.0、蓝牙2.0、WIFI和有线网络等。但受6m距离的限制,PCI、PCI-E、USB3.0三种接口不可用;蓝牙2.0的实际稳定速度建议为10kB/s,不满足速度要求;WIFI理论速度13.5MB/s,速度达到要求,但由于工业环境比较复杂,在准确性稳定性方面存在一定的不确定性;而有线网络,尤其是千兆网络,采用TCP/IP协议速度可以达到18MB/s,且稳定可靠,是一个理想的选择。
FPGA的以太网控制器设计包括基于FPGA IP核设计的以太网MAC子层,该MAC子层与上层网络通信协议的HAL接口设计以及MAC子层与物理层芯片(PHY)的RGMII接口设计。整个系统分为MAC模块、主机接口模块和管理数据输入输出模块。其中MAC模块主要执行在全双工模式下的流量控制,MAC模块实现发送和接收功能,其主要操作有MAC帧的封装与解包以及错误检测,物理层处理直接利用商用千兆PHY器件,主要开发集中在MAC控制器以及软件协议的研究。管理数据输入输出模块提供了标准的IEEE 802.3介质独立接口,可用于连接以太网的链路层和物理层。主机接口则提供以太网控制器与上层协议(如TCP/IP协议)之间的接口,用于数据的发送、接收以及对控制器内各种寄存器的设置。
(1) 添加DDR3 SDRAM控制器,用于存放正在运行的程序和数据,由于在多通道超声探伤仪中所需处理的实时数据量很大,对存储器的运行速度和带宽要求比较高,所以本文选用了大容量的 DDR3 SDRAM,设置其运行在 300MHz,半速率,则本地带宽为150MHz×64bits;
(2) 添加 Avalon-MM 三态总线桥,用于外挂的flash存储器和CPU相连;
(3) 添加flash,用于存放需要固化的FPGA配置文件和所需要运行的程序与数据,并在掉电时保存数据;
(4) 添加Nios II处理器IP,在Nios II Core配置选项中选择全功能型CPU核(Nios II/f)。其最高性能的优化,具有Nios II 处理器的所有功能,包括一些高级功能,需要的LE数目最多;
(5) 添加三速以太网;
(6) 添加DMA总线控制器,添加两个DMA控制器;
(7) 添加片内存储器,命名为descriptor_memory;
(8) 添加Avalon-MM pipeline bridge,用于简化CPU和外设的连接;
(9) 添加 JTAG_UART,实现 PC与 FPGA 上SOPC系统间串行通信。
根据uC/OS-II的要求,将uC/OS-II移植到一个新的体系结构上需要提供2~3个文件:OS_CPU.H、OS_CPU_C.C、OS_CPU_A.ASM。在某些极其罕见的情况下可以不需要 OS_CPU_A.ASM[3],uC/OS-II需要移植的部分见表1。
2.4.1 NicheStack TCP/IP协议栈的移植
NicheStack在Nios II IDE中配置的过程[4]如下:
① 在IDE环境中左边的工程栏中,右键单击要配置的工程,单击 Nios II→BSP Editor,打开 BSP Editor对话框;
② 选择Software Packages,显示所要选择的软件包属性对话框;
③在 Software Packages Name下选择altera_iniche;
④ 双击打开 Settings→Advanced→altera_iniche,不用选择enable_dhcp_client;
⑤ 单击Generate按钮,完成配置。
2.4.2 NicheStack TCP/IP协议栈的初始化
在初始化之前,需要由main()函数调用OSStart()函数开始uC/OS-II调度,并确保RTOS跑起来和相关IO是可用的。初始化协议栈需要调用两个函数:alt_iniche_init()和netmain()。当初始化完成后,全局变量 iniche_net_ready会被设置为一个非零值,这时才能启动用户应用程序[5]。
表1 uC/OS-II需要移植的代码
在此项目中,多通道超声探伤仪作为网络通路中的服务器端,将超声探头收集到的数据经由千兆网络传送给上位PC机,因此在Nios II上需要编写服务器端(server)的基于Socket API的程序[6]:
//判断本地地址绑定所创建的套接字连接是否成功
执行完上述程序之后,服务器端会一直监听是否有客户端申请连接,如果有连接,即可处理客户端的连接请求并给出回应,这时就可以用send()或sendto()传送数据,完成之后服务器端会继续监听客户端的连接请求。
把 Quartus II生成的文件通过 Quartus II Programmer下载到FPGA中,然后回到Nios II IDE,鼠标右键点击左边工程名,选择RUN→RUN AS,在Nios II Console中会显示连接成功。
实验结果表明:经连续24小时传输测试,速度稳定,没有大的波动;传输速度达到10MB/s,见图1所示。
图1 网络传送数据速度测试
本文基于ALTERA大规模高速FPGA器件,结合内部NIOS II处理器、MAC IP、外部PHY芯片,采用TCP/IP协议,实现了嵌入式千兆以太网的连接。千兆以太网的稳定传输速度可以达到 10MB/s,已经高出同样条件下百兆以太网的实际运行速度,为超声探伤仪的数据传输,提供了高效廉价的解决方案。
[1]Altera Corp.Nios II Hardware Development Tutorial,2009.
[2]Jean J.Labrosse.邵贝贝等译.嵌入式实时操作系统 uC/OS-II(第2版)[M].北京:北京航空航天大学出版社,2005.
[3]周立功等.ARM嵌入式系统基础教程(第2版)[M].北京:北京航空航天大学出版社,2008.
[4]Altera Corp. Using the NicheStack TCP/IP Stack-Nios II Edition Tutorial, 2010.
[5]Altera Corp.Nios II Software Developer’s Handbook, 2010.
[6]Michael J.Donahoo,Kenneth L. Calvert 著,陈宇斌译. Sockets编程(C语言实现)(第2版)[M].北京:清华大学出版社,2009.