1 引言
数据采集很多时候需要将数据传输到远程计算机,也有些采集系统有很多采集点,比如火灾传感器,这就需要数据传输部分能够方便地组网。在短距离内USB传输和1394火线传输都是一个较为理想的方法,但涉及到远距离传输和组网时,它们就不是那么方便了。所以很多时候通过以太网传输采集到的数据是一种较好的方式。目前设备实现联网的做法一般是使用CPU运行操作系统,由操作系统里的软件协议栈完成对TCP/IP协议的处理。这种方式需要编写CPU与数据采集部分接口的驱动和网络通讯的传输软件,开发工作量较大,设计较为复杂。并且CPU在产生接口时序方面较为不便,很多时候需要用FPGA+CPU的方式:FPGA完成与数据采集部分接口时序的产生和数据的缓存,CPU完成数据传输。因为数据采集系统中经常会使用FPGA,如果能用FPGA和少量易用的外围器件实现网络传输则是一种较为理想的方式。我们设计了一个网络传输平台,主要包括FPGA、DDR芯片和硬件化的网络协议栈芯片,可以通过以太网和计算机通讯,将数据传输到计算机中。
2 平台结构
平台结构包括硬件上的结构和FPGA逻辑结构。其结构如图1所示。其中数据采集模块是数据采集系统的传输平台需要的一个模块,但是目前没有,可以根据实际需要进行开发。
2.1 硬件结构
平台主要包括三个部分:FPGA,DDR存储芯片和网络协议栈芯片。FPGA为平台的主控芯片,使用Alter Cyclone IIEP2C20F256,该FPGA具有1 8,752个LE,239,616位存储器空间,26个嵌入式乘法器,4个PLL,152个用户可用管脚,封装采用256脚F'meline BGA,体积较小。
DDR存储芯片使用MICRONM’r46V128M8—6T,容量128MB,数据线宽度为8bit,该容量是DDR单片芯片中容量最大的。芯片最高可工作在167MHz。使用DDR对布板有较高的要求,我们在布板时考虑到了过孔和焊盘长度对走线长度的影响,保证了对同一组数据线和时钟的精确等长布线。通过估计信号的回流路径进行走线和参考平面分割,以保证信号回路阻抗的连续性,减小信号之间的串扰。选择了适当的线宽、叠层方式及叠层厚度,使得单端走线的阻抗控制在50欧姆,差分走线阻抗在100欧姆,以确保传输线的阻抗匹配。这些措施保证了良好的信号的完整性,提高了时序余度,降低了对DDR IPCore的时间参数精确性的要求,为平台的稳定运行打下了基础。
网络协议栈芯片使用的是WIZNETW5300,芯片内部集成了以太网物理层(PHY)、802.3以太网MAC和TCP/IP协议栈。该芯片可用在10M/100M以太网中,完成ISO七层模型中的物理层、数据链路层、网络层和数据传输层的任务,将控制器从复杂的网络协议处理中解脱出来,提供了一个易于实现的网络传输方式。
因此我们选取了并行接口,工作在直接寻址模式。
2.2 FPGA逻辑结构
在进行FPGA逻辑编写时采用了模块化设计,结构主要包括四个部分:DDR接口模块、网络接口模块、传输协议解析模块和寄存器模块。DDR接口模块对DDR芯片进行上电初始化,产生DDR的读写时序并控制DDR刷新。网络接口模块对网络协议栈芯片进行上电初始化,产生芯片的读写时序,并控制芯片发送和接受数据。传输协议解析模块对网络接口模块送来的数据进行解析,转换成对DDR或寄存器的读写操作,并将DDR模块或寄存器模块读出的数据送给网络接口模块,通过网口发送出去。寄存器模块包括16个16位的寄存器,存放参数设定和状态信息,远程用户通过读写寄存器实现对数据采集的控制。
在进行FPGA逻辑编写时采用了层次化的设计。每层完成其特定工作,使得设计清晰明了。系统的层次结构如图2所示。
从整体上来看,平台结构分为设备层、接口层和控制层。设备层为FPGA外围芯片,接口层作为设备层和控制层的桥梁,面向设备发送相应指令,产生特定时序的信号;面向控制层提供数据。
控制层将接口层送来的数据进行解析,转化成对接口层的操作,控制整个平台的工作。在网络接口模块中,同样也可分为接口层和控制层。接口层将上层所有对w5300访问的操作按照其时序要求产生相应地信号,控制层则控制w5300芯片完成以太网通信。
2.2.1 DDR接口模块
DDR接口使用Altera提供的IPcore。该IPcore包括控制逻辑和数据通道两部分,如图3所示。
控制逻辑面向DDR芯片执行总线的操作,对内提供一个简单的接口。数据通道在内部读写数据总线与DDR芯片的双向数据总线之间提供一个接口,因为DDR芯片的数据总线是上升下降沿都传送数据,内部总线仅在上升沿传送数据。所以内部数据总线宽度是DDR芯片数据总线的两倍。本设计中内部总线的宽度为16位。DDR突发数据传输长度选择2。
FPGA逻辑巾还包括一个随机数Ⅻ4试模块。可以产生伪随机数写入DDR芯片。然后将其读出。
通过比较两者是否相同,可毗判断芯片的好坏。随机数Ⅻ5试在上电时会执行一次。执行结果由扳子上LED灯指示。
2.2 2 时络接口模块
网络接口模块丹为控制层和接口层。控制层由多个处理模块组成,包括:复位模块、初始化模块、数据接收模块、数据发送模块和中断处理模块,每个模块完成一种情况的处理。这些模块受一十状态机的控制,状志机根据不同的话分别执行相应的模块。状态机的跳转如图4所示:
系统上电开始,状态机进入复位W5300状态。在其复位管脚上产生一个2微秒的负脉冲以复位芯片。复位完成后进八初始化阶段。初始化阶段设置芯片工作方式、平台网络接口的MAC地址、源口地址、源端口号、掩码、同蓑和协议类型等。车系统采用的是直接寻址方式,协议娄型选择UDp。初始化完成后状态机进人空用状态。在这个状态下,先检测是否有中断㈣产生。如果有中断则进入中断处理状态,执行中断处理模块,如果没有中断则检剁是否有发送数据请求(SendReq)。
如果有则进入数据技逆状志,执行数据发送模块。如果既没有中断也投有菱送数据请求。则进入数据接收状态,执行数据接收模块。数据接收模块执行时。首先要读取W5300内部的接收数据字节长度寄存器。如果不为0表明W5300接啦到数据,则读取数据,否则直接结束数据接收过程,状态机返到空闲状态。
2.2.3 协议解析模块
网络接口模块从W5300中读取到数据后,将数据发送到协议解析模块。协议解析模块根据这些数据解析出相应的操作,读写寄存器或DDR存储器。因为数据写入寄存器只需要一个时钟周期,所以写入寄存器的数据可以被即时写入。而DDR有突发数据传输长度的限制和刷新的存在,使得数据无法即时写入。因此写入DDR的数据先缓存在一个写入FIFO中,当该FIFO中的数据大于突发数据传输长度时,向DDR接口模块请求一次数据写入。读取数据时,因为读寄存器和DDR的速度远大于网络的传输速度,因此读取的数据需要存放在读出FIFO中。读取DDR时,采用了预读方式,持续读取DDR直到读出FIFO满,但实际发送的数据个数仍然为实际需要的数据量,这种方式降低了对DDR读取的复杂度。
4 测试结果
我们将一台计算机和平台通过交叉线连接起来,设定好双方的m地址后,在计算机上通过软件向平台上的DDR读写数据来测试平台的数据传输速度。写入时使用的协议长度字段为1462,读取时为1472,这样发送的数据长度或读取的数据长度加上UDP首部的长度为1500,是以太网的最大传输单元(MTU)的长度。在这种情况下测得平台接收数据速率在70Mbps,发送数据速率达到了30Mbps。
5 结论
我们设计了一个网络传输平台,使用FPGA控制硬件化的TCP/IP协议栈芯片来完成网络传输,避免了由于使用CPU带来的一些问题,同时平台具有大容量的存储器,剩余丰富的Io管脚,在平台基础上再进行少量的开发即可实际使用。我们采用了模块化的设计和层次化的结构。使得平台结构清晰。设计了自定义的传输协议,针对实际环境进行了优化。经测试平台达到了较高的传输速度,其接收数据速率达到了70Mbps,发送数据速率达到了30Mbl硌。本平台具有设计简洁、灵活可靠、性能突出等优点,适合数据采集系统中的数据传输的应用。