摘 要:多总线融合测试系统基于LXI总线,兼容PXI、VXI、GPIB、1553B、ARINC429,RS422、RS485总线。实现多总线融合的测试系统必须解决LXI总线到其它总线的协议转换。本文采用SOPC技术在一块FPGA芯片上实现了LXI到GPIB、1553B、ARINC429、RS485、RS422总线的协议转换,软件层基于µC/OS-Ⅱ实时操作系统和lwip协议,开发了应用程序。 关键词:多总线融合;SOPC;µC/OS-Ⅱ;Lwip
目前测控系统中仪器与计算机之间常见的连接方式有串行总线、并行总线。串行总线主要有RS-232总线、RS-422总线、RS-485总线、USB总线、IEEE1394(FireWire)总线、ARINC 429总线和1553B总线等;并行总线中主要有IEEE-488(GPIB)总线、SCSI总线、MXI总线等。每种总线都有其各自的特色和相应的应用领域。目前尚没有那种总线能够适用于所有的应用领域,因此多总线共存的局面将在很长一段时间存在。典型的多总线融合式自动测试系统包含的总线平台有LXI、PXI、VXI、GPIB、1553B、ARINC429、RS485、RS422等。由于各种总线的机械特性、电气特性、传输协议等标准的不同,只有在数字接口总线上开发出一系列接口转换器,才能使不同的总线相互兼容。
1 多总线融合测试系统的模型和解决方案
组建多总线融合的自动测试系统必须以一种总线为主,本系统基于LXI总线,融合了PXI、VXI、GPIB、1553B、ARINC429、RS485、RS422等总线,系统模型如图1所示。选用LXI总线作为基础总线组建系统是由其本身的优点和测试系统的发展趋势决定的。2004 年Agilent公司和VXI科技公司在结合了GPIB和VXI总线优点的基础上,开发了基于以太网的LXI总线[1]。Agilent公司指出了组建LXI自动测试系统的10个优点:易于使用、灵活性高、模块化和可扩缩性、性能强、分布式应用、长寿命、成本低、通过IEEE1588同步、机架空间、合成仪器,LXI 解决了系统开发者所面临的各种主要问题:降低成本、缩小系统尺寸、简化集成、提高吞吐率,以及为硬件和软件的重复利用提供更多机会[2]。这些好处使LXI 成为适应当前和未来的测试体系结构的新一代总线。[1]

图1 多总线融合测试系统模型
基于LXI总线组建多总线测试系统,其他测试总线系统向LXI总线转换可以分为两种情况:1)VXI、PXI总线系统需要零槽控制器来完成LXI到PXI、VXI的转换,这些零槽控制器不仅具备协议转换的功能而且具有独立的嵌入式处理器和时钟,来完成对VXI、PXI板卡的控制,这类转换器开发困难,所以本系统选用了市场上成熟的商品;2)LXI到GPIB、1553B、ARINC429、RS422、RS485的扩展,相对于第1种情况,这类转换器开发起来比较简单。转换器主要完成协议间的转换,所以我们基于SOPC技术开发了通用总线转换器。
2 基于SOPC技术通用总线转换器的总体设计方案
SOPC(System on a Programmable Chip,片上可编程系统)是由Altera公司倡导提出的,这个概念其实是SOC(System On Chip,片上系统)概念的扩展。它将处理器、存储器、I/O口、LVDS、CDR等系统设计需要的功能模块集成到一个PLD器件上,具有灵活的设计方式、可裁减、可扩充、可升级,并具备软硬件在系统的可编程能力[5]。
Nios II是Altera特有的基于通用FPGA架构的软CPU内核。一个Nios II处理器由Nios II CPU和一系列外设组成,Altera提供SOPC Builder软件用于生成所需要的处理器结构。本转换器所需生成的CPU及功能外设包括:32位标准型Nios II软核、串口组件、以太网组件、1553B组件,其中1553B为用户自定义外设组件,其他两个外设组件Altera已经提供。
转换器总体功能结构框图如图2所示,其中 RS485、RS422接口由Nios II自带的UART外设加相应的电平转换芯片产生;以太网接口采用Nios II提供的LAN 91C111控制组件,并用相应的控制芯片LAN 91C111实现,而对于1553B总线Nios II并没有提供外设组件,因此针对1553B的实现有三种方案可以选择:1)在FPGA剩余的门电路中,用硬件描述语言实现1553B逻辑;2)采用外部协议转换芯片,并且把协议芯片当作普通的外部设备PIO来控制;3)采用外部协议转换芯片,定制用户外设,把协议芯片当作外部存储设备来控制。从以上三种方案中不难看出,第一种方案实现难度最大,需要用户对1553B协议非常熟悉。第二种方案实现最为简单,但是这种方案适于较为简单的组件,对于1553B协议控制芯片,如采用这种方案将极大的增加软件的工作量。对于第三种方案,用户自定义组件、自定义指令,不仅极大地减少了软件工作量,而且自定义的组件可以进行封装后重复利用,同时自定义指令也提高了执行效率。所以我们采用了方案3来实现1553B逻辑。

图2 通用转换器总体设计方案
GPIB、ARINC429总线,因为他们的逻辑实现起来比较简单,而且有成熟的FPGA硬件逻辑设计电路,所以我们在FPGA芯片剩余的空间内用VerilogHDL硬件描述语言来实现。
3 开发流程

图3 开发流程图
系统的开发可以分为三部分,如图3所示。三部分可以同时进行也可以分别进行,第一部分为Nios II软核处理器及其外设的设计,所用的软件为SOPC Builder ,需要做的主要工作是自定义组件BU61688控制逻辑的设计。第二部分GPIB和ARINC429总线逻辑Verilog HDL 源代码的书写,所用的软件是Quartus II,第一部分生成的Nios II 处理器及其外设与第二部分的总线逻辑也是在Quartus II软件中通过原理图输入方式或文本输入方式进行组合的。第三部分为操作软件的书写,是在开发环境Nios II IDE中进行的,所需做的主要工作是在µC/OS-Ⅱ实时操作系统的基础上开发应用程序,主要包括TCP/IP协议的实现,嵌入式Web界面的实现,以及与其它接口进行通讯的应用程序。
4 基于µC/OS-Ⅱ实时操作系统的软件设计
在Nios II IDE中进行软件设计时需要实现复杂的TCP/IP协议,并且要进行网络接口到其它数据接口转化的多任务操作,如果不采用嵌入式操作系统,软件的工作量很大,而且工作效率也比较低。在Nios II IDE中已经移植了µC/OS-Ⅱ操作系统,而且移植了基于µC/OS-Ⅱ操作系统的轻量TCP/IP协议,这就大大降低了我们编程的工作量。
4.1 嵌入式TCP/IP协议的实现。
Nios II IDE中已经嵌入了lwip协议,具体的实现过程及实现函数如图4所示[4]。

图4 lwip协议实现过程
接收数据流程:网络接口驱动通过low_level_input()函数从网络接口接收数据包,区分是ARP包还是IP包。如果是ARP包将调用ARP功能函数处理这个包,如果是ARP请求,则发送一个ARP地址应答包,如果是ARP应答报,则更新ARP地址影射表。如果是一个IP包,则更新ARP地址影射表,然后将数据包交由ip_input()函数处理,ip_input()函数将数据包进行简单的处理后分析该数据包是否需要转发,如果需要则进行转发,如果数据包有误则发送ICMP包。如果该包是发送给本机的正常数据包,ip_input()则根据数据包的类型,分别发送给udp_input(),tcp_input()或icmp_input()函数进行处理。如果是发送给icmp_input()的的数据包则必然是echo包,由icmp处理函数发送应答。如果是发送给UDP或TCP协议的数据包,UDP或TCP协议的处理函数将进行相应的处理,最后发送给应用程序。
发送数据流程:当应用程序需要发送一个数据包时,它将调用UDP或TCP协议处理函数udp_send()或tcp_write()函数发送一个数据包,UDP或TCP协议处理函数接到数据后,将对数据进行打包、分段,然后发送给IP层的ip_output_if()函数(需要的时候调用ip_route函数进行路由选择),该函数把数据打包、封装然后调用网络接口驱动函数low_level_output()函数将数据发送给网络接口。
4.2 应用软件设计

图5 程序层次结构图
4.1讲述了lwip协议实现的具体过程,但是我们在编辑应用程序时并没有直接调用协议栈中的回调函数,图5表示了应用程序的层次结构,我们在开发应用程序时调用了Nios II IDE中提供的标准接口函数。例如在对lwip协议的初始化和网络接口的初始化时我们调用了Nios II IDE提供的两个初始化函数lwip_stack_init()和lwip_devices_init(),而在实现lwip协议时我们调用了lwip提供的标准套字编程接口函数,它跟普通的socket API 一样是基于open_read_write_close模型的,提供了一套标准的方法使用lwip,在这里我们不进行详细的讲解。lwip_stack_init()函数的原型是void lwip_stack_init(int thread_prio, void (* init_done_func)(void *), void *arg) 其中thread_prio是TCP/IP协议的优先级,init_done_func()是协议初始完后调用的函数,这个函数可以完成设备的初始化和任务的建立,arg是传递给init_done_func()函数的变量,一般情况下为0。lwip_devices_init()函数的原型是int lwip_devices_init(int rx_thread_prio) 函数的返回值表示网络接口设备初始化成功,接下来你就可以创建基于TCP/IP协议的任务,rx_thread_prio是网络接口接收发送数据任务优先级,在这个函数中还需要调用其它两个函数get_mac_addr()和get_ip_addr()。其中get_mac_addr()函数的原型为err_t get_mac_addr(alt_lwip_dev* lwip_dev),在这个函数内部你要填写网络设备的MAC地址。函数get_ip_addr()的原型为int get_ip_addr(alt_lwip_dev* lwip_dev, struct ip_addr* ipaddr, struct ip_addr* netmask, struct ip_addr* gw, int* use_dhcp),你可以动态或者静态的获得IP地址,只需修改use_dhcp的值,如果静态获得IP地址,你需要在相应的区域内手动输入初始化值[7]。
另外我们还编写了other_devices_init()函数来完成其他外设的初始化,其原型为int other_devices_init(int rx1_thread_prio, int rx2_thread_prio, int rx3_thread_prio, int rx4_thread_prio,)其中rx1_thread_prio,rx2_thread_prio,rx3_thread_prio,rx4_thread_prio,rx5_thread_prio对应于GPIB、1553B、ARINC429、RS485、RS422外设接口接收发送数据的优先级。
在完成对系统的初始化后我们就可以创建任务。主程序流程图如图6。

图6主程序流程图
在主程序中,可以看到我们建立了6个主要任务,这些任务都是基于µC/OS-Ⅱ操作系统的,一个任务,就是一个线程,是一个无限的循环程序,它有五种状态——休眠态、就绪态、运行态、挂起态、中断态,在这里我们不进行详细的讲述。任务之间的通讯与同步是通过信号量、事件标签和消息队列完成的[3]。下面我们讲解各个任务的功能和工作过程。
网络接口任务完成以太网数据的接收和发送。TCP/IP协议服务主要是实现TCP/IP协议,完成对网络数据的网络层和数据层的接收和发送。Web界面任务主要是实现应用层的http协议,从而实现嵌入式Web界面。其他外设接口任务来实现GPIB、1553B、ARINC429、RS485、RS422外设接口的数据接收和发送。数据转发任务来完成数据的转发,来实现各个接口间的数据转换。其他辅助任务主要是完成如LED灯控制和按键控制等任务。
任务之间的工作过程如下:各个任务完成初始化后进入挂起状态,当有数据从某个外设接口进入后(这里我们以网络接口为例),将引起中断请求,在中断函数内通过信号量使网络接口任务处于运行态,网络接口任务将接收到的数据包发送给TCP/IP协议服务任务来完成数据的处理,然后根据请求的不同调用不同的任务,如果是Web界面请求则调用Web界面任务,如果请求是向其它外设接口发送数据则调用数据转换任务,将转换的数据发到相应的端口,调用相应的外设接口任务,最终完成数据在对应外设接口的输出。
5 仿真和实验
在程序的开发过程中,我们对用Verilog HDL语言开发的GPIB和ARIC429总线逻辑进行了时序仿真。仿真图如图7和图8所示。

图8 GPIB发送数据时序图

图7 ARIC429发送数据时序图
对嵌入式Web界面的实现,我们在Altera公司的DE2 Development and Education board上进行了实验,Web欢迎界面如图9所示。

图 9 嵌入式Web欢迎界面
6 结束语
实现LXI总线到其他总线协议的转换,有多种方案可供选择。一种是采用以太网控制器+单片机(DSP)+FPGA,这种方案要在单片机或DSP内实现TCP/IP协议,工作量大而且电路复杂;一种是网络芯片+控制器+FPGA,采用专门的网络芯片来实现TCP/IP协议,减少了工作量,但是这种协议是固化的,不一定和我们的需要相一致。本文作者的创新点是采用以太网控制器+FPGA方案,在FPGA内嵌入Nios II软核处理器,实现控制作用,并移植了µC/OS-Ⅱ和lwip实现了TCP/IP协议,在FPGA剩余的空间内实现其它的接口逻辑,这样做既简化了电路,也增加了系统的通用性和重构性。
参考文献
1 LXI Consortium.Inc LXI Standard Revision 1.0[S], 2005.9.23,
2 Agilent Technologies.转向LXI的十个好理由.www.agilent.com [EB/OL],2006.7
3 JeanJ.Labrosse 著.邵贝贝译.嵌入式实时操作系统 uC/OS-I第二版[M].北京:北京航空航天大学出版社.2003
4 陈渝,李明,杨晔等.源代码开放的嵌入式系统软件分析与实践[M].北京:北京航空航天大学出版社.2005
5 李英兰等.Nios II嵌入式软核SOPC设计原理及应用[M].北京:北京航空航空航天大学出版社.2006
6 Jun Gu,Huiqin Zhan.INSTRUMENT MODULAR DESIGN BASED ON LXI BUS[A].USA Anaheim: IEEE Autotestcon Proceedings[C],2006,96-99.
7 Ateral Corporation.Nios II Software Developer’s Handbook[Z].www.ateral.com,2007
8 Ateral Corporation.Nios II Hardware Developer’s Handbook[Z].www.ateral.com,2007
9 张岩,陈利学等.基于SOPC的嵌入式web服务器的设计和实现 [J].微计算机信息,2007,1-2:160-162。
|