您的当前位置:首页正文

基于FPGA的以太网MII接口扩展设计与实现

2020-05-21 来源:榕意旅游网
基于FPGA的以太网MII接口扩展设计与实现

电脑知识 2009-01-10 11:09:49 阅读80 评论0 字号:大中小 引言

传统以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<=fiforp+1; FIFO_WR为1,则fifodata[fifo_wr]<=fifo_in,fifo_wr<=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]

#define reg01 XBYTE[0x8001] …

#define reg1f XBYTE[0x801F]

读写操作、复位操作对应的引脚按表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包的情况,取得了满意的效果

因篇幅问题不能全部显示,请点此查看更多更全内容