基于FPGA的以太网MII接口扩展设计与实现.doc_第1页
基于FPGA的以太网MII接口扩展设计与实现.doc_第2页
基于FPGA的以太网MII接口扩展设计与实现.doc_第3页
基于FPGA的以太网MII接口扩展设计与实现.doc_第4页
基于FPGA的以太网MII接口扩展设计与实现.doc_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于FPGA的以太网MII接口扩展设计与实现 摘要:本文介绍了基于FPGA、功能经过扩展的以太网MII接口的硬件实现方法。硬件结构上由控制信号模块、分频器、异步FIFO缓冲和4b/5b编解码器4个部分组成。关键词:100M以太网II;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的编码和解码同时集中到一个模块上实现。数据0F可以直接编、解码。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=fifodatafifo_rp,fifo_rp& lt;=fiforp+1;FIFO_WR为1,则fifodatafifo_wr=fifo_in,fifo_wr& lt;=fifo_wr+1。nempty、nfull位信号值的变化通过借助r_rp和cr_wr的进位输出来判断实现。当读写两个指针的值相等,即 fifo_rp=fifo_wp时,判断cr_rpcr_wr(异或)的值:若是1,则FIFO满,nfull=0;若是0,则FIFO 空,nempty激活PHY 设置GPR(REG_1F)CEPIO0bit0=0; 复位后,DM9000A恢复默认的休眠状态,以降低功耗,因此需要首先唤醒PHY。 进行两次软复位,步骤如下: 设置NCR(REG_00)bit2:0=011,至少保持20s; 清除NCR(REG_00)bit2:0=000; 设置NCR(REG_00)bit2:0=011,至少保持20s; 清除NCR(REG_00)bit2:0=000; 配置NCR寄存器; 设置NCR(REG_00)bit2:1=00;配置为正常模式。 通过改变该寄存器可以选择设置内部或者外部PHY、全双工或者半双工模式、使能唤醒事件等网络操作。 清除发送状态; 设置NSR(REG_01)bit5=1bit3=1 bit2=1; 设置IMR寄存器(REG_FF)PAR bit7=1,以肩用RXTX FIFOSRAM读写地址指针自动返回功能; 通过IMR寄存器(REG_FF)PRM bit0PTM bit1,对RXTX中断使能。如果需要在一个数据帧发送完后产生一个中断,就应该将PTM bit1置1,如果需要在接收到一帧新数据时产生一个中断,就应该将PRM bit1置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)的bit1置为高电平,向DM9000A发出发送数据指令。DM9000A会自动做一些处理才将数据发往以太网,这包括:插入报头和帧起始分隔符;插入来自上层协议的数据,如果数据量小于64字节,则自动补齐64字节;根据目标地址、源地址、长度类型和数据产牛CRC校验序列,并插入校验序列位。这些处理都无需FPGA干预。处理完毕后,DM9000A即开始发送帧I,在帧I发送的同时,帧II 的数据即可写入发送缓存区。在帧I发送完后,将帧II的数据长度写入寄存器FCH和FDH,最后将发送控制寄存器NSR(REG_01)的bit1置为高电平,即可开始帧II的发送。依此类推,下面发送的帧将会继续编号为帧I、帧II、帧I、帧II按照同样的方式发送。 如果FPGA将中断屏蔽寄存器 IMR(REG_FF)的bit1置为高电平,那么发送完毕后,DM9000A将会产生一个指示发送完成的中断信号。在发送过程中,FPGA可以查询寄存器标志位寄存器NSR(REG_01)中的TX1END bit2或者TX2END bit3,得到数据帧的发送状态。 发送流程如图2所示,寄存器ISR中的PTS标志位是发送中断标志位,当一帧数据发送完毕,PTS=0,FPCA检测到该标志后,应清除标志位以便发送新的数据帧。这里需要注意的是,向FC、FD所写的帧长度应该包含目的MAC地址段、源MAC地址段和有效数据的总长度。 接收模块 DM9000A中的接收缓存区是一个环形结构,初始化后的起始地址为0C00H,每帧数据都有4字节长的首部,然后是有效数据和CRC校验序列。首部4字节依次是01H、状态、长度低字节和长度高字节。 首部4字节含义如下: 第一个字节用来检测接收缓存区中是否有数据,如果这个字节是01H,表明接收到了数据;如果为00H,则说明没有数据。但是,如果第一个字节既不是01H,也不是00H,DM9000A就必须作一次软复位来从这种异常状态中恢复。 第二个字节存储着以太网帧状态,由此可判断所接收帧是否正确。 第三和第四字节存储着以太网帧长度。后续的字节就是有效数据。 接收过程如下: 查看中断状态寄存器,如果接收到新数据,寄存器ISR的PRS位将被置为0; 如果检测到PRS=0,清除PRS,FPGA开始读接收缓存区数据。如果第一字节是01

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论