《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 业界动态 > 基于PCI总线的通用网络协议实验平台

基于PCI总线的通用网络协议实验平台

2008-08-22
作者:刘振兵, 曹志刚, 翟立君

  摘 要: 介绍了一种利用以太网专用芯片在Linux操作系统下构建基于PCI总线的通用网络协议" title="网络协议">网络协议实验平台" title="实验平台">实验平台。通过修改该平台的软件部分,可以在实验平台上运行私有网络协议,测试协议性能,从而避免了针对每一种私有网络协议搭建专门的实验平台,节约了成本,缩短了开发时间。
  关键词: PCI设备 Linux 通用网络实验设备


  在网络技术快速发展的今天,根据用户特殊的需求,有时需要研发特殊的私有网络协议,以使网络的性能得到优化。研究新的网络协议,必须进行仿真以验证性能,但是网络结构复杂,性能指标多样,并且不同的协议需要的具体测试环境不同,因此很难用纯软件的方式(如NS2、OPNET)给出网络协议运行性能的有效描述。另一方面,如果针对每一种网络协议搭建专门的测试平台,则需要大量的人力、经费和时间。而采用软硬件相结合的方法搭建一种通用网络协议实验平台,既能很好地测试出整个设计的性能,又能大幅度节约开发成本,缩短开发时间,是一种切实可行的方法。
  为此,本文提出一种通用网络协议实验平台的软硬件设计方案,并详细介绍该平台的软硬件设计方法。
1 系统设计的思路
  该网络实验平台设计的目的是:针对不同的私有网络协议,开发者可以根据协议标准有针对性地修改网络层" title="网络层">网络层和传输层的程序代码,然后通过本系统测试其协议的性能。所以,该系统应该是一个与协议无关且可程控的数据传输通道" title="传输通道">传输通道。数据包经过该系统传输后,更多的工作由传输层、网络层和上层应用程序完成。该系统的整体框架结构如图1所示。


  为了保证实验平台的通用性及可操作性,采用PC机和与PCI总线接口的网络设备卡(以下简称PCI接口卡)组建该平台。
  近年来,Linux操作系统获得了突飞猛进的发展,它强大的功能、良好的界面、高效率以及全开放的特性使其具有很强的吸引力。基于以上考虑,在PC机中采用Linux操作系统。按Linux操作系统的设计标准,私有网络协议软件需要包含传输层代码、网络层代码以及与设备相关的驱动程序,并运行在系统“核心态”中。在本实验平台中,不需要用户关心驱动程序的设计,但允许将网络层和传输层代码运行在Linux“用户态”中。
  PCI接口卡是基于PCI总线的,它通过合理选择接口芯片屏蔽PCI总线协议的多余功能,并使用FPGA芯片把上层传输过来的数据包进行相应的处理(详见第2节),然后传递到物理层设备。
2 实验平台的硬件设计
2.1 PCI接口卡结构

  PCI接口卡由PCI总线接口芯片、数据处理模块FPGA、数据缓存模块RAM和有线传输驱动模块LVDS(Low Voltage Differential Signaling Driver)等四部分组成,模块间的数据传输如图2所示。


2.2 芯片的选择
  Winbond 公司以太网控制芯片 W89C840AF支持高达100Mbps的双向数据传输,该芯片不但具有良好的PCI总线接口设计,而且还有一整套的网络数据传输机制,技术成熟。所以在此选用W89C840AF,并借用该芯片的网络数据传输机制,通过对芯片合理配置,实现一条从驱动程序到物理层设备的透明数据传输通道,来满足设计要求。
  FPGA芯片只要能够提供足够多的I/O口和内部硬件资源即可。RAM是为了满足不同网络协议以及算法对存储器的需要而设置的,对于不同的私有网络协议,根据实际需要选用适当容量的RAM即可,没有很苛刻的要求。本系统中FPGA芯片选用ACEX1K50TC144,RAM芯片选用CY7C006AC_PLCC,主要考虑的是芯片的速率高、使用简单并且价格低廉。
  有线传输信号驱动模块选用LVDS芯片对(ds90c401,ds90c402),该芯片对的优点是速率高(155Mbps串行数据传输)、传输距离远、灵敏度高、功耗小。
2.3 PCI接口卡的功能
  PCI总线接口芯片(W89C840AF)把从PCI总线上传输过来的数据封装成“以太帧”的格式[1],传递给FPGA(RAM可以对传输的数据进行缓冲),FPGA去掉前8byte的“以太帧头”从而获得数据包。然后根据不同网络协议的数据包格式,在FPGA中灵活地设计相应的逻辑功能。如作者目前在研的卫星ATM网络实验系统,定义了一种私有的ATM协议,数据处理单元将完成以下任务:识别信元头,按优先级对信元进行排队、存储、打包并转发等。
  FPGA要完成以上功能,其内部模块需包括以下几个模块:“数据接口”、“控制接口”、“命令执行单元”、“实验网物理层访问控制单元”和“信道模拟单元”,如图3所示。


  FPGA把打包后的串行数据传向LVDS,信号经过LVDS驱动后传到接收方。
  在接收方,数据的处理与此相反,不再赘述。
2.4 W89C840AF与FPGA之间的接口设计
  在PCI接口卡电路板中,芯片之间的接口设计" title="的接口设计">的接口设计有三部分:FPGA与W89C840AF之间的接口;FPGA与RAM之间的接口;FPGA与LVDS之间的接口。后面两个接口比较简单,所以下面主要介绍FPGA与W89C840AF之间的接口设计。
  W89C840AF与FPGA之间的数据接口如图4所示。MTXCLK和MRXCLK分别是发送数据和接收数据的参考时钟,必须设置为25MHz。MTXEN和MRXDV是数据帧传输的指示信号,MTXD[3:0]和MRXD[3:0]为4bit宽的数据传输接口。


  W89C840AF芯片与FPGA之间除了传输数据外,还需要交换控制信息。由于W89C840AF芯片I/O接口有限,可以借用W89C840AF芯片的EECK、EEDI、EEDO三条控制线与FPGA交换控制信息。这里构建一个类似I2C串行总线协议的控制总线,其结构和工作时序如图5所示。


3 实验平台的软件设计
  为了实现从处于“用户态”的应用程序到处于“核心态”的驱动程序间的双向数据传输通道,按照Linux操作系统的网络相关代码的划分规则,实验网络结构中用户层以下的代码需要嵌入到Linux操作系统的核心代码树中,经过对内核的重新编译,运行在Linux操作系统的“核心态”,这样做比较复杂。鉴于以上原因,在本设计中采用了以下处理方法:考虑到“用户态”内部所有软件模块的通信比较简单,通过调用UDP/IP协议的socket,在下层利用UDP/IP数据包拆解/封装程序,构造出一个如图6所示的数据传输通道。在这里,把 “透明通道”定义为“过渡层”。
  使用UDP/IP协议会涉及到Linux操作系统处理IP协议的相关内容,特别需要注意以下三个方面:(1)去掉系统中所有其它网络硬件设备,关闭所有Linux操作系统的网络服务,关闭Linux操作系统防火墙;(2)设置本设备的IP地址为192.168.0.1(实验专用IP地址),绑定实验网络设备为192.168.0.X子网网关,更改“/etc/network”文件设置系统为“可以转发IP包”;(3)调用一个IP Socket发送数据,在特定端口上监听数据包的到达。


3.1 “过渡层”的设计
  对于上层传递过来的数据,“过渡层”要完成的任务是:去掉数据包前面的以太网帧头、IP数据包头、UDP数据包头,从而还原出原始数据包,然后传递给驱动部分。反之,下层传递过来的数据包经过相反的数据处理后向上层传递。
3.2 驱动程序的设计
  由于W89C840AF是以太网控制芯片,因此可以把PCI接口卡看作网络设备。对于网络设备,Linux操作系统中有一套标准的驱动程序设计方法[2],所以在这里仅介绍驱动程序设计中的几个值得注意的事项。主要有:(1)PCI设备的探测和注册函数;(2)W89C840AF芯片的配置;(3)网络设备基本功能函数组。
  PCI设备探测和注册函数可以建立网络设备对象,同时注册网络设备基本功能函数组,并参考W89C840AF芯片数据传输部分的说明赋予设备执行“DMA”能力。
  关于W89C840AF芯片的配置,主要是C18/CNCR 寄存器的配置。除了打开“传输允许”、“接收允许”、“全双工模式”和“100Mbps传输速率模式”等选项外,还要打开“Accept Error Packet”、“Accept Runt Packet”、“Accept Broadcast Packet”、“Accept Multicast Packet”和“Accept All Physical Packet”等选项,从而屏蔽所有与以太网协议相关的功能。
  网络设备基本功能函数组的核心是“发送”、“接收”和“中断响应”这三个基本函数。“发送函数”将发送的数据存入W89C840AF芯片的内存空间,然后写C04/CTSD寄存器,请求芯片发送数据。W89C840AF芯片将接收到的数据包传递到系统内存后就会触发中断,中断处理函数响应中断并调用接收函数,将数据包和相应的参数向系统的上层传递。
参考文献
1 Andrew S.Tanenbaum. COMPUTER NETWORKS(4).北京:清华大学出版社,2004
2 Alessandro Rubini,Jonathan Corbet. Linux设备驱动程序(2). 北京:中国电力出版社,2002
3 Glenn Herrin,Linux IP Networking,2000.http://kernelnewbies.org/4 范 磊.Linux内核源代码.北京:人民邮电出版社, 2002

本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306118;邮箱:aet@chinaaet.com。