摘        要:本文介绍了基于FPGA、功能经过扩展的以太网MII接口的硬件实现方法。硬件结构上由控制信号模块、分频器、异步FIFO缓冲和4b/5b编×××4个部分组成。
关键词:100M以太网MII;FPGA;奇偶分频器;4b/5b编解码;异步双口FIFO
引言
传统以PC为中心的互联网应用现已开始转向以嵌入式设备为中心。据网络专家预测,将来在互联网上传输的信息中,有70%来自小型嵌入式系统,因此, 对嵌入式系统接入因特网的研究是有必要的。目前有两种方法可以实现单片机系统接入因特网:一种方法是利用NIC (网络控制/网卡)实现网络接口,由单片机来提供所需的网络协议;另外一种方法是利用具有网络协议栈结构的芯片和PHY(物理层的接收器)来实现网络接 口,主控制器只负责往协议栈结构芯片的某个寄存器里放上适当的数据。与此同时,用FPGA实现单片机系统接入因特网的方法也日益受到人们的重视。本文提出 采用FPGA实现网络协议栈,介绍100M以太网MII接口协议的硬件实现方法,其中的奇偶模块分频器和异步FIFO等通用器件在日常中也很有应用价值。
图1 硬件结构框图
图2       模块发送时序波形图
以太网MII接口协议
IEEE802协议标准系列中,数据链路层包括LLC (逻辑链路控制)子层和MAC (媒体访问控制)子层。其中MAC单独作为一个子层,完成数据帧的封装、解封、发送和接收功能。物理层PHY的结构随着传输速率的不同而有一定差异,在 100M和1000M以太网中,依次为PCS子层、PMA子层和PMD子层。MII接口是连接数据链路层和物理层的接口,因为本设计中以太网速率采用 100Mb/s,所以MII接口实际连接的是MAC子层和PCS子层。根据协议,要求MII接口具有的功能有:数据和帧分隔符的读写时钟同步,提供独立的 读写数据通道,为MAC层和PCS层提供相应的管理信号,以及支持全双工模式。
扩展MII接口功能及其
FPGA实现
由于100M以太网的物理层采用4b/5b编码,为了扩展MII接口的功能,要求其能够实现直接物理层5位数据和MAC层8位数据的发送接收传输转 换。即把从MAC子层用于发送的数据和从PHY用于接收的数据存入数据缓冲FIFO,同时要求MII接口将从PHY传来的信号COL、CRS转为信号 Carrier和Collision,并提供给MAC子层用于载波监听和冲突检测,以及发送和接收时的时钟、使能、错误位信号的传送。扩展功能后的MII 接口硬件结构框图如图1所示,由4b/5b编×××、控制信号与4位/8位转换、分频器及双口FIFO 4个模块组成,而且能够同时支持半双工和全双工模式。
在设计过程中,为了考虑测试和支持多种速率传输的需要,要求设计带有分频参数的可实现奇偶分频的分频器和支持能够同时进行读写操作和异步读写时钟的FIFO。这是MII接口设计中的难点,本身也具有很高的实用价值。
奇偶分频器的实现
分频器是数字系统设计中的基本电路,同一个设计中有时要求多种形式的分频。通常由计数器或计数器的级联构成各种形式的偶数分频及非等占空比的奇数分 频,实现较为简单;对等占空比的奇数分频实现则较为困难。本文对2n+1等占空比奇数分频的基本思路是:先通过模2n+1的计数器实现占空比为n+1/n 的奇数分频(比如三分频,正负波形的占空比为2:1),然后有两种方法可以实现等占空比的奇数分频,一种是当计数器至n+1时,让此波形与输入时钟波形相 “与”,不过可能会存在毛刺输出;另一种是当计数器至n+1时,在输入时钟的下降沿触发产生低电平脉冲,然后再和原波形相“或”,这种方法没有毛刺产生。 因此本文采用第二种方法。
4b/5b编×××的设计
为了减少系统的开销,本文把4b/5b的编码和解码同时集中到一个模块上实现。数据0~F可以直接编、解码。PCS层有6个特殊的5b 码:11111为帧间填充码;11000、10001和01101、00111是两对成对出现的码组,分别为数据流开始和结束时的分隔符;00100则是 数据错误位,用以表示错误。数据接收时,可以直接对这几个5b码组解码,00100则产生信号rx_er。发送时,需要对从MII接口传来的信号位进行判 断:若tx_en上升沿,则在头两个前导码时编码输出SSD;若tx_en下降沿(帧间隔),则在FCS后输出ESD,然后一直用11111为数据流间隔 填充码;若有tx_er触发,则编码00100输出。
异步双口FIFO的设计
为了满足PCS层数据的物理层时钟以及MAC层总线时钟不同步的需求,需要FIFO有异步的读、写时钟。当冲突检测COL为高时,要求发送帧执行退回操作回至FIFO中等待下一个Transmitting信号。
FIFO的设计思路如下:设置异步Reset,高电平触发;设置8位寄存器fifodata保存FIFO的数据;设置fifo_rp和 fifo_wp为读、写指针;cr_rp和cr_wr为进位标志,fifo_rp和fifo_wp为FIFO_DEPTH-1的时候取反;设置 nempty、nfull、near_empty、near_full为数据空、满指示。
读写时,FIFO_RD为1,则fifo_out<=fifodata[fifo_rp],fifo_rp& lt;=fiforp+1;FIFO_WR为1,则fifodata[fifo_wr]<=fifo_in,fifo_wr& lt;=fifo_wr+1。nempty、nfull位信号值的变化通过借助r_rp和cr_wr的进位输出来判断实现。当读写两个指针的值相等,即 fifo_rp==fifo_wp时,判断cr_rp^cr_wr(异或)的值:若是1,则FIFO满,nfull<=0;若是0,则FIFO 空,nempty<=0。如果fifo_rp!=fifo_wp,则nfull=nempty=0,FIFO不为空也不为满。
测试时,暂定容量FIFO_DEPTH为32(实际要求是至少一个帧的大小即1530字节大小),读、写时钟分别为50MHz和25MHz,在写550ns之后同时读写。时序仿真波形如图2所示,FIFO能够成功读写。
主控制模块的实现
主控制模块要求实现的功能是:4/8位数据的转换;给MAC层和PCS层的控制信号输出;双向数据MDIO,表征MII接口与物理层相连接的情况,可以异步输入输出控制。
实现4/8位数据转换的要求是:发送时,将8位数据分成两个nibble依次输出;接收时,将4b/5b编×××接收到的4位数据依次填入高、低nibble组成8位数据输出。
采用状态寄存器对控制信号的输出是MII模块的核心。设立3位status1[2:0],从高位到低位依次是{duplex, col, crs}输入;4位status2[3:0],从高位到低位依次是{ transmitting ,transmiterror ,rx_en ,rx_er }输入。输出控制信号的基本算法流程如下:
.status1[2]为1时,工作在全双工模式。CollisionDetect和CarrierSense输出始终置为0。
.status1[2]为0时,工作在半双工模式。如果status1[1]为1,则CollisionDetect输出置为1,开始执行退回(backoff)程序;如果status1[0]为1,则CarrierSense输出置为1,继续等待。
. status2 [1]为1时,工作在接收状态,Receiving输出置为1 (此时status2[3]必须为0)。此时如果status2[0]为0,则接收数据有效,ReceiveDataValid输出为1;反之则置为0,停止数据传输。
. status2 [1]为0时,工作在接收停止状态,Receiving输出置为0。此时如果status2[0]为1,ReceiveDataValid输出为0,若接 收端数据为1110,则表示载波错误,若接收端数据为0000,则表示正常的帧间隔阶段;如果status2[0]为0,则表示正常的帧间隔阶 段,ReceiveDataValid输出为1。
. status2 [3]为1时,工作在发送状态,tx_en输出置为1(此时status2[1]必须为0)。此时如果status2[2]为0,则正常发送,tx_er置为0;否则发送错误,tx_er置为1,且跳过该字节继续执行发送程序。
. status2 [3]为0时,若status2 [2]为0,则处于正常帧间隔,tx_en、tx_er置为0;若status2 [2]为1,则为无效状态。
综合与仿真
本文采用Altela公司的Cyclone系列EP1C20F400C8芯片,整个设计全部采用Verilog HDL硬件描述语言来实现,并在Quatus4.0的设计平台上完成整个模块的设计、综合、仿真、映射及布局布线。发送时序仿真的波形如图3所示,从图中 可以看出,当传输过程中发生冲突时,继续发送32比特的阻塞码(16进制FF),然后随机延时一段时间重新争用介质以传输数据,这说明本模块满足了协议要 求以及CSMA/CD。
结语
本文介绍了一种简易的基于FPGA的以太网MII协议的设计方法。通过本模块可以简单方便地实现小型嵌入式系统的因特网 接口,如果再结合基于FPGA实现的MAC层协议和TCP/IP协议栈及其他辅助功能模块,不仅可以使小型嵌入式系统接入网络更加简单,系统的集成度、稳 定性也将进一步得到提高
摘要:互联网络硬件、软件的迅猛发展,使得网络用户呈指数增长,在使用计算机进行网 络互联的同时,各种家电设备、仪器仪表以及工业生产中的数据采集与控制设备在逐步地走向网络化,以便共享网络中庞大的信息资源。在电子设备日趋网络化的背 景下,利用廉价的51单片机来控制RTL8019AS实现以太网通讯具有十分重要的意义。
     关键词:RTL8019AS      Ethernet     51单片机     TCP/IP协议
1 以太网(Ethernet)协议
一个标准的以太网物理传输帧由七部分组成(如表1所示,单位:字节)。
      
                            表1 以太网的物理传输帧结构表
  
除了数据段的长度不定外,其他部分的长度固定不变。数据段为46~1500字节。以太网规定整个传输包的最大长度不能超过1514字节(14字节为DA、 SA、TYPE),最小不能小于60字节。除去DA、SA、TYPE14字节,还必须传输46字节的数据,当数据段的数据不足46字节时需填充,填充字符 的个数不包括在长度字段里;超过1500字节时,需拆成多个帧传送。事实上,发送数据时,PR、SD、FCS及填充字段这几个数据段由以太网控制器自动产 生;而接收数据时,PR、SD被跳过,控制器一旦检测到有效的前序字段(即PR、SD),就认为接收数
据开始。
2 RTL8019AS以太网控制器简介
由台湾Realtek公司生产的RTL8019AS以太网控制器,由于其优良的性能、低兼的价格,使其在市场上10Mbps网卡中占有相当的比例。
2.1 主要性能
(1)符号Ethernet II与IEEE802.3(10Base5、10Base2、10BaseT)标准;
(2)全双工,收发可同时达到10Mbps的速率;
(3)内置16KB的SRAM,用于收发缓冲,降低对主处理器的速度要求;
(4)支持8/16位数据总线,8个中断申请线以及16个I/O基地址选择;
(5)支持UTP、AUI、BNC自动检测,还支持对10BaseT拓扑结构的自动极性修正;
(6)允许4个诊断LED引脚可编程输出;
(7)100脚的PQFP封装,缩小了PCB尺寸。
2.2 内部结构
RTL8019AS内部可分为远程DMA接口、本地DMA接口、MAC(介质访问控制)逻辑、数据编码解码逻辑和其他端口。内部结构如图1所示。
             
远程DMA接口是指单片机对RTL8019AS内部RAM进行读写的总线,即ISA总线的接口部分。单片机收发数据只需对远程DMA操作。本地DMA接口是把RTL8019AS与网线的连接通道,完成控制器与网线的数据交换。
MAC(介质访问控制)逻辑完成以下功能:当单片机向网上发送数据时,先将一帧数据通过远程DMA通道送到RTL8019AS中的发送缓存区,然后 发出传送命令;当RTL8019AS完成了上帧的发送后,再开始此帧的发送。RTL819接收到的数据通过MAC比较、CRC校验后,由FIFO存到接收 缓冲区;收满一帧后,以中断或寄存器标志的方式通知主处理器。FIFO逻辑对收发数据作16字节的缓冲,以减少对本地DMA请求的频率。
2.3 内部RAM地址空间分配
RTL8019AS内部有两块RAM区。一块16K字节,地址为0x4000~0x7fff;一块32字节,地址为0x0000~0x001f。 RAM按页存储,每256字节为一页。一般将RAM的前12页(即0x4000~0x4bff)存储区作为发送缓冲区;后52页(即 0x4c00~0x7fff)存储区作为接收缓冲区。第0页叫Prom页,只有32字节,地址为0x0000~0x001f,用于存储以太网物理地址。
要接收和发送数据包就必须通过DMA读写RTL8019AS内部的16KB RAM。它实际上是双端口的RAM,是指有两套总线连接到该RAM,一套总线RTL8019AS读或写该RAM,即本地DMA;另一套总线是单片机读或写该RAM,即远程DMA。
2.4 I/O地址分配
RTL8019AS具有32位输入输出地址,地址偏移量为00H~1FH。其中00H~0FH共16个地址,为寄存器地址。寄存器分为4 页:PAGE0、PAGE1、PAGE2、PAGE3,由RTL8019AS的CR(Command Register命令寄存器)中的PS1、PS0位来决定要访问的页。但与NE2000兼容的寄存器只有前3页,PAGE3是RTL8019AS自己定义 的,对于其他兼容NE2000的芯片如DM9008无效。远程DMA地址包括10H~17H,都可以用来做远程DMA端口,只要用其中的一个就可以了。复 位端口包括18H~1FH共8个地址,功能一样,用于RTL8019AS复位。

3 接口电路设计
下面介绍51系列单片机与RTL8019AS的接口电路,实现的网络接口采用UTP(无屏蔽双绞线)RJ-45接口。
图2给出了89C52单片机控制RTL8019AS实现以太网通讯的接口电路框图。用到的主要芯片有80C52、RTL8019AS、 93C46(64×16bit的EEPROM)、74HC573(8位锁存)、62256(32K字节的RAM)。为分配好地址空间,采用对93C46进 行读(或写)操作来设置RTL8019AS的端口I/O基地址和以太网物理地址。
93C46是采用4线SPI串行接口的Serial EEPROM,容量为1Kbit(64×16bit),主要保存RTL8019AS的配置信息。00H~03H的地址空间用于存储RTL8019AS内配 置寄存器CONFIG1~4的上电初始化值;地址04H~11H存储网络节点地址即物理地址;地址12H~7FH内存储即插即用的配置信息。 RTL8019AS通过引脚EECS、EESK、EEDI控制93C46的CS、SK、DI引脚,通过EEDO接收93C46的DO引脚的状态。RTL8
019AS复位后读取93C46的内容并设置内部寄存器的值,如果93C46中内容不正确,RTL8019AS就无法正常工作。先通过编程器如ALL07把配置好的数据写入93C46,再焊入电路。
对93C46进行数据配置:数据00H写入93C46的地址00H内;93C46地址04H~0AH中存放的是物理地址,可以写入设置所需的物理地 址值,或不修改,采用原始值为物理地址。通过编程器读出04H~0AH的原始值为52544CC59906,即所采用的物理地址。
这样,RTL8019AS复位后读取93C46中配置好的内容,对应设置配置寄存器CONFIG1的值为00H,CONFIG1的低4位IOS3~0用于选择I/O基地址。IOS3~0设置值均为0时,RTL8019AS选择的端口I/O基地址为300H。
RTL8019AS的地址为20位,那么用到RTL8019AS的地址空间为00300H~0031FH,用二进制表示 00300H~0031FH,可以发现第19位到第5位是固定的:000000000011000。RTL8019 AS的20根地址线SA0~SA19如表2连接。
                         表2 RTL8019AS地址线的连接表
通过ADDR15、I/OW、I/OR来划分RTL8019AS和62256的地址空间。ADDR15接62256的CE脚,低电平时选择 62256;高电平时选择RTL8019AS的地址空间80C52单片机的地址为16位,按图2的电路框图连接RTL8019AS的地址空间。定义 reg00~reg1f来对应端口00300H~0031FH。
#define reg00 XBYTE[0x8000]/*300H*/
#define reg01 XBYTE[0x8001]/*301H*/
#define reg1f XBYTE[0x801F]/*31FH*/
读写操作、复位操作对应的引脚按表3连接。
    
                    表3 RTL8019AS的ISA总线接口引脚与单片机的连接表
采用10BASE-T布线标准通过双绞线进行以太网通讯,而RTL8019AS内置了10BASE-T收发器,所以网络接口的电路比较简单。外接一 个隔离LPF滤波器0132,TPIN±为接收线,TPOUT±为发送线,经隔离后分别与RJ-45接口的RX±、TX±端相连。
时钟电路通过T1、T2接口一个20MHz晶振以及2个电容,实现全双工方式。
LED0、LED1各接一发光二极管以反映通讯状态:LED0表示LED_COL,即通讯有冲突;LED1表示LED_RX,即接收到网上的信息包。
4 程序设计
所有程序采用Framclin C51语言编制,可读性强,移植性好,开发简易。
4.1 复位RTL8019AS
80C52的P3.4连接RTL8019AS的RESDRV来进行复位操作。RSTDRV为高电平有效,至少需要800ns的宽度。给该引脚旋加一 个1μs以上的高电平就可以复位。施加一个高电平后,然后施加一个低电平。复位过程将执行一些操作,至少需要2ms的时间,推荐等待更久的时间之后如 100ms之后才对它操作,以确保完全复位。
4.2 初始化RTL8019AS
初始化页0与页1的相关寄存器,页2的寄存器是只读的,不可以设置,页3的寄存器不是NE2000兼容的,不用设置。
(1)CR=0x21,选择页0的寄存器;
(2)TPSR=0x45,发送页的起始页地址,初始化为指向第一个发送缓冲区的页即0x40;

(3)PSTART=0x4c,PSTOP=0x80,构造缓冲环:0x4c~0x80;
(4)BNRY=0x4c,设置指针;
(5)RCR=0xcc,设置接收配置寄存器,使用接收缓冲区,仅接收自己地址的数据包(以及广播地址数据包)和多点播送地址包,小于64字节的包丢弃,校验错的数据包不接收;
(6)TCR=0xe0,设置发送配置寄存器,启用CRC自动生成和自动校验,工作在正常模式;
(7)DCR=0xc8,设置数据配置寄存器,使用FIFO缓存,普通模式,8位数据DMA;
(8)IMR=0x00,设置中断屏蔽寄存器,屏蔽所有中断;
(9)CR=0x61,选择页1的寄存器;
(10)CURR=0x4d,CURR是RTL8019AS写内存的指针,指向当前正在写的页的下一页,初始化时指和0x4c+1=0x4d;
(11)设置多址寄存器MAR0~MAR5,均设置为0x00;
(12)设置网卡地址寄存器PAR0~PAR5;
(13)CR=0x22,选择页1的寄存器,进入正常工作状态。
图2 89C52单片机控制RTL8019AS实现以太网通讯的接口电路框图

4.3 发送帧
将待发送的数据按帧格式封装,通过远程DMA通道送到RTL8019AS中的发送缓存区,然后发出传送命令,完成帧的发送。需要设置以太网目的地 址、以太网源地址、协议类型,再按所设置的协议类型来设置数据段。之后启动远程DMA,数据写入RTL8019AS的RAM,再启动本地DMA,将数据发 送网上。
RTL8019AS无法将整个数据包通过DMA通道一次存入FIFO,则在构成一个新的数据包之前必须先等待前一数据包发送完成。为提高发送效率,设计将12页的发送缓存区分为两个6页的发送缓存区,一个用于数据包发送,另一个用于构造端的数据包,交替使用。
5 软件的调试与验证
调试环境包括RTL8019AS实验板、PC机(带网卡)以及网线。
用C51语言编程,实现TCP/IP协议中ARP数据帧的收发。
实验中,单片机首先构造一个ARP请求包发送给PC机,PC机收到后会发送一个ARP应答包给单片机,单片机收到该应签包后再发一个ARP请求包给 PCF机,如此不断循环,来测试系统的性能。在PC机上采用Sniffer软件如Windump软件来监视(或截获)PC机网卡接收ARP包的情况,取得 了满意的效果
  :本文介绍了一种实用的基于FPGA的以太网视频广播接收系统,由于采用了FPGA技术,使得系统结构简单,可靠性高。最后进行了波形仿真,结果表明了设计的正确性。
关键词:视频广播;接收系统;以太网;现场可编程门阵列;设计
一、引 言
  近年来,现场可编程门阵列(FPGA)技术以其独有的优势,在电子设计领域得到越来越广泛的应用。FPGA除具有集成度高、体积 小、功耗低、电路简单、可靠性高等优点外,还有自身突出的优点,即“现场可编程性”,用户可以很方便地通过相应的软件,在较短时间内对FPGA内部逻辑反 复设计或修改,直到满意为止。这就大大缩短了开发周期,提高了最终产品的性能。

  以太网是最广泛使用的网络标准。它成为最受欢迎的技术,不仅因为其在市场上最低的NIC(网络接口卡)和HUB端口价格,还因为它具有维护简单、易于扩充等优点。

  本文介绍的视频广播接收系统是基于标准以太网(10 Mbps)和快速以太网(100 Mbps)的系统。由于系统的主要部分采用了FPGA设计技术,使得系统的成本较低和开发周期较短,而且由于前端采用的是具有10M/100M兼容的芯 片,并同时支持两种特性的以太网(全双工和半双工),有助于实现全双工和半双工以太网之间的无缝连接,从而使得该系统具有广阔的应用前景和实用性。

基本原理
  系统实现中涉及到网络方面的许多相关技术和各种相关的协议、标准,下面作一简要介绍。

1.CSMA/CD协议
  以太网用载波侦听多路访问/冲突检测(CSMA/CD)作为它的媒体访问控制协议,CSMA/CD定义了以太网节点为传输数据如何获得对网络媒体的访问。其工作过程如下:

     (1)如果介质空闲,则传输数据,否则,转(2); 
  (2)如果介质忙,则坚持侦听,直到介质空闲,立即传送数据;
  (3)如果在传送过程中,检测到冲突发生,发送一个短的阻塞码,以确保让所有终端都检测到冲突发生,然后停止发送;
  (4)发送完阻塞码后,等待一个随机时间,再试图重新发送,即转(1)。

  目前,实际使用较多的冲突检测方法是终端发送器把数据发送到线缆上,终端接收器又把数据接收回来和发送的数据比较,判别是否一致,若一致,没有冲突;若不一致,表示冲突发生。

2.以太网帧格式
  当应用程序用UDP(TCP)传送数据时,数据被送入协议栈中,然后逐个通过每一层直到被当作一串比特流送入网络,其中每一层对收 到的数据都要增加一些首部信息(有时还要增加尾部信息)。UDP传给IP的数据单元称作UDP报文段或简称为UDP段,IP传给网络接口层的数据单元称作 IP数据报。

  在OSI模型中,数据链路层传输的数据单位是帧。同样,以太网CSMA/CD也是通过帧来发送实际数据的。以太网802.3u的MAC子层定义了帧结构,如图1所示。

  其中:前导码用于物理信号的同步,为7个字节的10101010序列和1个字节的10101011序列;目的地址和源地址使用的是MAC地址,前3个 字节称为Block ID,它标志生产设备的厂家并由IEEE赋值;后3个字节称为设备ID,它由厂家赋值,而且总是唯一的;数据长度指要传送的数据的总长度;数据和填充字符 可以从0到1 500字节不等,若实际数据小于所需的最小长度,MAC将追加一些可变的填充字符(PAD),以维持64字节的最小帧规模。若数据比1 500字节长,则更高层(一般是第三层)将把数据字段分成不同的帧进行传送;帧校验用来确保进行正确的传送,循环冗余校验(CRC)用来进行有效帧的检 查。在以太网数据包的数据部分,包含了各种上层协议的首部。在本文的系统中,包含了IP首部和UDP首部。

3.介质无关接口(MII)
    MII是一个用于互连控制器和收发器的全新介质无关接口,它是100 Mbit/s快速以太网开发工作的一个组成部分。此接口提供了新的物理连接机制以及控制器和收发器的功能划分。该接口主要由以下一些信号组成:

      (1)发送信号
  包括半字节宽(Nibble-wide)的发送数据信号,加上相关的发送时钟、发送允许信号和发送差错信号。数据用时钟同步,时钟率是数据率的1/4 (即100 Mbit/s以太网用25 MHz的时钟),发送信号用于将数据从控制器移动到收发器,然后编码并发送到LAN上。

      (2)接收信号
  包括半字节宽的接收数据,加上相关的接收时钟、接收数据有效信号和接收差错信号。数据用时钟同步,时钟率是数据率的1/4。接收信号用于将解码的数据从收发器移动到控制器。

      (3)以太网控制信号
  这些信号是由收发器生成的载波侦听和冲突检测信号,用于控制器做介质访问控制。它们只用于半双工模式,在全双工模式中被忽略。

      (4)管理信号
  包括一个串行管理I/O信号和相关的时钟信号。用于在控制器和收发器之间双向交换配置和控制的管理信息。

三、系统设计
   
该系统实现的总体框图如图2所示。
  其中以太网接口采用的是传统的RJ45接口,10M/100M收发器可以采用DM9101 单片实现,FPGA部分采用的是Xilinx公司的Spartan II系列的芯片,MPEG-1解码芯片采用了C-Cube公司的解码芯片。10M/100M收发器到FPGA之间采用MII标准的接口,FPGA到 MPEG-1解码芯片之间采用I2S形式的接口。

1.DM9101
  DM9101是一个物理层的、单片、低功耗的100Base-TX和10Base-T操作的转换器。在介质这一边,它既为用于 100Base -TX快速以太网的非屏蔽双绞线对(5类同轴电缆)提供一个直接的接口,也为用于10Base-T以太网的UTP5/UTP3提供直接的接口。通过 IEEE802.3u介质无关接口(MII),DM9101可以与介质接入控制(MAC)层相连接,确保了在不同生产商的产品之间的高度互操作性。

  该芯片集成了MII标准接口、100Base-TX发送/接收器、10Base-T发送/接收器、自动协商、冲突检测、载波侦听、4B5B编/×××、加/解扰器、串口和并口之间的转换等功能。

  由于采用了MII标准接口,使得设计者可以通过该接口的管理信号线对该芯片的寄存器进行设置,从而完成对10 Mbps和100 Mbps两种速率的选择,突出了设计的灵活性。

2.FPGA设计
    
由于要使数据能在以太网上传输,服务器端的发送程序应该把要传输的 数据进行打包(或封装)。本系统中所要传输的数据为视频数据(VCD数据),而VCD数据一般是以dat格式存放在光盘中的。因而在接收端应对接收到的数 据包进行解包,并同时完成数据格式转换的功能,使得送到MPEG-1解码芯片的数据格式为dat格式的数据,从而进行解码,最后用普通的电视机就能够接 收。

  因而该部分主要要实现的功能是:先完成对接收到的以太网数据帧进行解包,取出封装在以太网数据帧中的数据部分,然后再分别解IP数据包和UDP数据 包,把真正的具有VCD播放格式的数据取出来,经过一个先进先出(FIFO)缓冲器输出到MPEG-1解码芯片进行解码。其中在解包的过程中,要对数据进 行校验,校验正确的数据包才进行传送,对于校验不正确的数据包采用了直接丢弃的方法,所采用的校验算法是循环冗余校验算法(CRC)。

  设计框图如图3所示。

  (1)前导检测:当系统检测到连续出现了15个nibble的1010,同时随后的一个nibble为1011时,说明一个以太网数据帧开始了,应该对该部分的数据作进一步的处理。

  (2)组字节:由于从DM9101芯片出来的数据信号是以一次四位元组(nibble)的形式传输的,因而要对它进行组字节操作,每2个nibble组成一个字节,具体操作过程依据的是MII帧结构中的字节组成格式进行。

  (3)CRC校验:对以太网帧中的目的地址、源地址、长度、数据进行CRC校验,并与帧的最后四个字节进行比较,如果一致,即为正确的以太网数据;若不一致,则丢弃这一帧。

  (4)MPEG-1数据:取出以太网帧中的长度字节的值,用这个值来预置一个计数器,从而对数据进
行计数控制,取出其中的MPEG-1格式的有效数据。

  (5)FIFO:由于普通的以太网的数据传输速率是10
Mbps或100 Mbps,而进行MPEG-1解码时的速率一般为1.5 Mbps左右,因而要对数据流进行速率调整。该FIFO直接利用了Spartan II系列芯片内部的存储模块进行缓存。

  (6)同步头检测:dat格式的数据帧有一个同步头为:00FFFFFFFFFFFFFFFFFFFF00(十六进制),当检测到该同步头时,表明一个dat数据帧开始了,应将其后的数据连同该同步头信息一起输出至解码芯片。

  (7)串行输出:把最后得到的数据转换为串行数据,并以I2S的格式将数据和时钟等信号输出到  MPEG-1解码芯片中进行解码。  

四、仿真结果
1.组字节仿真结果
  数据从2个nibble组成一个字节的仿真结果如图4所示。其中,CLK信号是25 MHz的时钟信号,DA是由4位数据组成的数据信号,它们由DM9101芯片输出;DATA为组成字节后的8位数据信号,CLK B是由CLK信号二分频所得到的Byte时钟信号。

2.I2S格式仿真结果
  以I 2S格式输出的数据的仿真结果如图5所示。仿真中采用的格式是:32位BCK,MSB最先,右通道为低电平。其中BCK是位时钟信号,LRCK是左右时钟选择时钟,DATA是VCD格式的MPEG-1视/音频数据。


 
  本系统所采用的FPGA芯片为Xilinx公司的Spartan II系列芯片,用Foundation软件工具开发。设计输入完成后,进行整体的编译和逻辑仿真,然后进行转换、布局、延时仿真生成配置文件,最后下载至 FPGA器件,实现其硬件功能。由于系统的很多功能由一块FPGA实现,外围器件很少,所以系统体积小、可靠性高,且器件的可编程性使得系统功能易于完 善。仿真结果表明,各信号的逻辑功能和时序配合完全达到了设计要求
引言
     软件无线电(SDR)技术近年来发展迅速,在无线通信中的数字接收机领域应用尤其广泛。SDR中数据接口设计是关键的环节,以太网是目前最通用的数据接口 之一,但是中低端的FPGA通常不具备以太网接口,这为FPGA在SDR中的应用造成了不便。如果为FPGA配置以太网接口,与外部网络实现通信,将有利 于SDR平台的功能延伸,方便数据传输和与现有系统接口。
     本文在自行设计开发的SDR基带信号处理平台上,为实现高速解调数据的实时远程传输处理及接收机参数的远程配置,提出了采用FPGA直接控制 DM9000A进行以太网数据收发的设计思路,采用Xilinx系列XC2V1000 FPGA和DM9000A芯片,实现了一种低成本、低功耗和高速率SDR平台的网络传输功能,最高传输速率可达100Mbps。
     DM9000A简介
     主要特点
     DM9000A实现以太网媒体介质访问层(MAC)和物理层(PHY)的功能,包括MAC数据帧的组装/拆分与收发、地址识别、CRC编码/校验、MLT-3编码器、接收噪声抑制、输出脉冲成形、超时重传、链路完整性测试、信号极性检测与纠正等。
     工作原理
     DM9000A可以和微处理器以8位或16位的总线方式连接,并可根据需要以单工或全双工等模式运行。在系统上电时,处理器通过总线配置DM9000A内 的网络控制寄存器(NCR)、中断寄存器(ISR)等,以完成DM9000A的初始化。随后,DM9000A进人数据收发等待状态。
     当处理器要向以太网发送数据帧时,先将数据打包成UDP或IP数据包,并通过8位或16位总线逐字节发送到DM9000A的数据发送缓存中,然后将数据长 度等信息填充到DM9000A的相应寄存器内,随后发送使能命令,DM9000A将缓存的数据和数据帧信息进行MAC组帧,并发送出去。
     当DM9000A接收到外部网络送来的以太网数据时,首先检测数据帧的合法性,如果帧头标志有误或存在CRC校验错误,则将该帧数据丢弃,否则将数据帧缓 存到内部RAM,并通过中断标志位通知处理器,处理器收到中断后将DM9000A接收RAM的数据读出进行处理。
     DM9000A自动检测网络连接情况,根据网速设定内部的数据收发速率是10Mbps或100Mbps。同时,DM9000A还能根据RJ45接口是采用 对等还是交叉连接方式而改变数据收发引脚的方向,因此,无论外部网线采用对等还是交叉方式,系统均能正常通信。
     基于DM9000A的SDR基带信号处理平台网络接口设计与实现
     下面以SDR基带信号处理平台的网络接口实现为例,给出DM9000A与FPGA的硬件设计和软件配置方法。在SDR基带信号处理平台上,全数字接收机的 中频模拟信号经过A/D转换、数字下变频、抽取滤波等解调处理后,形成连续的解调数据流,其速率为10Mbps。在FPGA内部,解调输出的数据流和以太 网接口部分通过FIFO进行缓冲,当解调数据达到规定的数据帧长度时,FPGA启动以太网发送程序,将解调数据发送到DM9000A,完成数据发送过程。 在接收方向,网络工作站把控制指令按照一定的帧格式组帧发送到以太网,DM9000A接收到发给自己的以太网帧并通知FPGA启动以太网接收程 序,FPGA将相应的数据从DM9000A的接收FIFO读到FPGA内部RAM中,利用数据中的控制命令配置接收机参数,完成网络对全数字接收机的远程 控制。
    与FPGA的数据接口和控制接口
     DM9000A的外部总线符合ISA标准。可通过ISA总线直接与FPGA无缝连接。其硬件连接原理如图1所示。
      基于FPGA的以太网MII接口扩展设计与实现_第1张图片
     DM9000A内部集成了PHY功能,因此可与以太网接口无缝连接。
     DM9000A的FPGA控制
    初始化模块
     DM9000A正常工作需要在上电后对内部寄存器进行初始化,该过程通过FPGA对DM9000A外部控制总线和数据总线的读写操作完成。具体流程如下所示:
     >激活PHY
     设置GPR(REG_1F)CEPIO0bit[0]=0;
     复位后,DM9000A恢复默认的休眠状态,以降低功耗,因此需要首先唤醒PHY。
     >进行两次软复位,步骤如下:
     设置NCR(REG_00)bit[2:0]=011,至少保持20μs;
     清除NCR(REG_00)bit[2:0]=000;
     设置NCR(REG_00)bit[2:0]=011,至少保持20μs;
     清除NCR(REG_00)bit[2:0]=000;
     >配置NCR寄存器;
     设置NCR(REG_00)bit[2:1]=00;配置为正常模式。
     通过改变该寄存器可以选择设置内部或者外部PHY、全双工或者半双工模式、使能唤醒事件等网络操作。
     >清除发送状态;
     设置NSR(REG_01)bit[5]=1bit[3]=1 bit[2]=1;
     >设置IMR寄存器(REG_FF)PAR bit[7]=1,以肩用RX/TX FIFOSRAM读/写地址指针自动返回功能;
     >通过IMR寄存器(REG_FF)PRM bit[0]/PTM bit[1],对RX/TX中断使能。如果需要在一个数据帧发送完后产生一个中断,就应该将PTM bit[1]置1,如果需要在接收到一帧新数据时产生一个中断,就应该将PRM bit[1]置1;
     >设置RCR寄存器,使能数据接收功能。
     通过以上步骤,可以通过LED指示灯观测到DM9000A是否已成功初始化。
     数据发送模块
     DM9000A中的发送缓冲区可以同时存储两帧数据,可以按照先后顺序命名为帧I和帧II。DM9000A上电初始化后,发送缓存区的起始地址是00H, 当前数据帧编号为帧I。两帧数据的状态控制字分别记录在DM9000A的状态寄存器03H和04H中。发送过程如下:
     首先,FPGA利用写操作寄存器MWCMD(REG_F8)向DM9000A的发送缓存区中写入发送数据帧,即需要先写入6字节的目的MAC地址,再写入6字节的源MAC地址,最后再写入发送数据。
     随后,FPGA利用写操作寄存器MWCMD(REG_F8)将数据帧长度写入寄存器FCH和FDH,数据长度为16位,将高8位写入寄存器FCH,低8位写入寄存器FDH。
     最后,FPGA将发送控制寄存器TCR(REG_02)的bit[1]置为高电平,向DM9000A发出发送数据指令。DM9000A会自动做一些处理才 将数据发往以太网,这包括:插入报头和帧起始分隔符;插入来自上层协议的数据,如果数据量小于64字节,则自动补齐64字节;根据目标地址、源地址、长度 /类型和数据产牛CRC校验序列,并插入校验序列位。这些处理都无需FPGA干预。处理完毕后,DM9000A即开始发送帧I,在帧I发送的同时,帧II 的数据即可写入发送缓存区。在帧I发送完后,将帧II的数据长度写入寄存器FCH和FDH,最后将发送控制寄存器NSR(REG_01)的bit[1]置 为高电平,即可开始帧II的发送。依此类推,下面发送的帧将会继续编号为帧I、帧II、帧I、帧II……按照同样的方式发送。
     如果FPGA将中断屏蔽寄存器 IMR(REG_FF)的bit[1]置为高电平,那么发送完毕后,DM9000A将会产生一个指示发送完成的中断信号。在发送过程中,FPGA可以查询 寄存器标志位寄存器NSR(REG_01)中的TX1END bit[2]或者TX2END bit[3],得到数据帧的发送状态。
     发送流程如图2所示,寄存器ISR中的PTS标志位是发送中断标志位,当一帧数据发送完毕,PTS=0,FPCA检测到该标志后,应清除标志位以便发送新 的数据帧。这里需要注意的是,向FC、FD所写的帧长度应该包含目的MAC地址段、源MAC地址段和有效数据的总长度。
      基于FPGA的以太网MII接口扩展设计与实现_第2张图片
    接收模块
     DM9000A中的接收缓存区是一个环形结构,初始化后的起始地址为0C00H,每帧数据都有4字节长的首部,然后是有效数据和CRC校验序列。首部4字节依次是01H、状态、长度低字节和长度高字节。
     首部4字节含义如下:
     第一个字节用来检测接收缓存区中是否有数据,如果这个字节是01H,表明接收到了数据;如果为00H,则说明没有数据。但是,如果第一个字节既不是01H,也不是00H,DM9000A就必须作一次软复位来从这种异常状态中恢复。
     第二个字节存储着以太网帧状态,由此可判断所接收帧是否正确。
     第三和第四字节存储着以太网帧长度。后续的字节就是有效数据。
     接收过程如下:
     查看中断状态寄存器,如果接收到新数据,寄存器ISR的PRS位将被置为0;
     如果检测到PRS=0,清除PRS,FPGA开始读接收缓存区数据。如果第一字节是01H,则说明有数据,00H说明无数据,否则要进行复位;
     根据获取的长度信息,判断是否读完一帧,如果读完,接着读下一帧,直到遇到首字节是00H的帧,说明接收数据已读完。FPGA可以重新查看中断状态寄存器,等待新的有效数据帧。
    结语

     本文对以太网控制器DM9000A进行了原理和功能介绍,并结合自行开发的SDR基带信号处理平台,基于FPGA设计实现了100M以太刚接口,其设计思路新颖,硬件连接简单。整体系统具有功耗低,体积小,运行稳定可靠等优点