在好例子网,分享、交流、成长!
您当前所在位置:首页Others 开发实例一般编程问题 → (Verilog HDL)非常详细的以太网控制器(MAC)设计

(Verilog HDL)非常详细的以太网控制器(MAC)设计

一般编程问题

下载此实例
  • 开发语言:Others
  • 实例大小:0.92M
  • 下载次数:13
  • 浏览次数:219
  • 发布时间:2021-03-01
  • 实例类别:一般编程问题
  • 发 布 人:好学IT男
  • 文件格式:.pdf
  • 所需积分:2
 

实例介绍

【实例简介】
这是基于赛灵思芯片的以太网控制器的源代码分析,很不错,值得大家参考!
FPGA数字电子系统设计与开发实例导航 可以根据需求的不同进行选择,物理层可以根据网络速率不同选择特定的媒介物质。下面将详 细介绍有关MAC层的内容 系统A 系统B 发送文件f 棲收文件f FP物议 协议数据包 协议数据包政用层 TCP议 协议数揉包 协议数据包层 协议数据包 四议一协议数据包网编层 以太网 太阿协饺 数据轅 数据帧碎胶 TCP Header FTP Header 图10-3rIP协议的通信过程 10.1.2MAC子层 MAC子层在上层协议和以太网网络之间传输和接收数据,其主要功能是确保以太网上每 帧数据的传输都遵循了IEEE802.3规范所规定的介质存取规则 基本帧数据格式 IEEE802.3规范为实现MAC定义了套基本的帧数据格式,如图10-4所示。 数据传输方向 SFD A L ength/Typ: e DH La FCS 4 每个字段的长度以字节为单位 图10-4帧数据格式 各个字段的含义及规定如下。 · Preamble(PRE:报头,字段中1和0交替使用,接收方通过该字段知道导入帧,并 且该字段提供了同步接收物理层帧接收和导入数据流的方法 · Start-of-frame delimiter(SFD):帧起始分隔符,宇段中1和0交替使用,结尾是两个连 续的1,表示下一位是目的地址的第一个字节的第一位。 · Destination address(DA);:目标地址,用于识别需要接收帧的目的地 · Source address(SA):源地址,用于识别发送帧的源地址。 · Length/Type:长度/类型,表示包含在幀数据字段中的MAC数据大小,也可以表示帧 368 第10章以太网控制器(MAC) 的类型 ·Data:数据,是一组n(46≤n≤1500)字节的任意值序列 · Framc check scqμucnc(FCS六:帧教据校验序列,该序列包括32位的循环冗余校验(CRC) 值,由发送方生成,通过接收方进行计算以校验帧是否被破坏。 2.帧传输 MAC层从上层协议接收到发送帧数据的请求,首先按照下面的次序将数据和地址信息保 存到MAC层的帧数据缓冲区中。 ·插入报头和帧起始分隔符。 ·插入目标地址和源地址 ·统计来自上层协议数据的数量,插入数量值 插入来自上层协议的数据,如果数据量小于46字节,则补齐46字节。 根据目标地址、源地址、长度/类型和数据产生CRC校验序列,并插入校验序列 咴完整数据组成后,MAC层可以开始发送帧数据。有两种发送方式可供选择:半双⊥ ( half duplex)和全双工( full duplex)。IEEE802.3规范规定所有的以太网MAC都要支持半双 工方式,即一个时刻只能进行发送或者接收,而不能同时进行发送和接收。全双工方式下发送 和接收可以同时进行。 3.帧接收 帧接收的过稈和发送的过稈是相反的。首先检査帧数据中的目标地址和当前地址是否相 符,然后检査接收到的帧数据中的数据长度、CRC校验序列和实际的数据长度、CRC校验序 列是否相符。如果都相符,则将数据交给上层协议进行解析,MAC层的传输任务完成。 10.1.3媒体无关接口( Media Independent Interface) IEEE802.3规范提出媒体无关接口( Media Independent Interface,MI)就是为了能够实现 MAC层和不同的物理层(PIY)之间的逻辑连接,如图10-5所示 上层办议 媒体访控制层 妹体无关接彐 (Media Independent Interface) 勿理层 (PHY) 佟10-5媒体尢关接口 FPGA数字电子系统设计与开发实例导航 MAC层可以通过媒体无关接凵连接不同的物理层。根据对以太网通信速率的要求选择合 适物理层接口。针对不同的物理层,媒体无关接口可以以不同的方式实现到MAC的逻辑连接。 例如在10 Mbit/s以太网通信中,媒体无关接口使用1位来串行发送/接收数据流;在100Mbit/s 以太网通信中,媒体无关接∏使用4位来串行发送/接收数据流;在1000 Mbit/s以太网通信中, 媒体无关接口使用8位来串行发送/接收数据流。 10.2以太网控制器(MAC)的基本框架 下面将要介纽的以太网控制器(MAC)实现了以太网标准的第二层协议—MAC(媒体 访问控制)协议,完全符合IEE8023和IEEE8023u规范所规定的10Mbis和100 Mbit/s以 太网标准。如图10-6所示,使用这个以太网控制器外部连接一块PHY芯片(实现了物理层功 能的芯片)就可以进行数据链路层的通信,即唢通信。在此基础上可以方便、快捷地开发出更 高层次的协议,实现FTP、HTTP等协议。 H lFl. 扛发 !网 扣 片 H 空小:山 她天鸡 图10-6以太网控制器 这个以太网控制器具体实现了以下内容 ·符合IEEE802.3X规定的全双工帧控制。 半双工传输模式下的 CSMA/CD协议 ·32位CRC校验序列的自动产生和检查 ·报头的产生和去除 发送和接收数据包的完全状态控制 满足IEEE802.3规定的MI(媒体无关接口)。 针对以太网控制器需要完成的任务,本节将设计以太网控制器的程序框架,并对各个重要 部分进行讲解,如图10-7所示。 以太网控制器的程序框架包括如下几个主要部分。 主机接口( Host Interface):主机接口用来连接主机部分,将接收到的数据帧保存到存 储器中,同时从存储器中载入需要通过以太网接口传输的数据。主机上可以实现更高层 次的以太网协议 370 第10章以太网控制器(MAC) 以太网掉制器(MAC) 主机接口模块 寄存器模块 数据发送模块 (HoSt Inter face) (Register module) (Transimit module 发送数据状态 发送数据信号 接收数据信号 伏态显示模块 瓷存器设置 接收数据状态 媒体无关接口模块 (Media Independent 控制模块 数据接收模块 Control Module) Module) 接收数信号 图10-7以太网控制器程序框架 ·数据发送模块( Transmit module):完成所有与发送数据相关的操作,包括产生报头、 添加CRC校验序列等 ·数据接收模抉〔κeceiⅳ ve module):宄成所有与接收数据相关的操作,包括去除报头、 CRC校验。 控制模抉( Control modulo):完成以太网控制器所有功能需要执行的換作。 媒体无关接口模块( Media Independent Interlace):提供一个与媒体无关的接口,用来 连接外部的以太网PHY控制芯片。 状态显示模块( Status Module):记录以太网控制片进行数据传输时各个状态的变化 寄存器模块( Register Module):为以太网控制芯片提供需要的所有寄存器 10.3以太网控制器(MAC)程序的实现 这里介绍以太网控制器(MAC)程序的主要模块。 10.3.1顶层程序 eth top 顶层程序主要连接并控制各个子模块,代码如下 eth top /输入输出列表 输入输出信号 Input llk ∥时钟信号 input rsti;∥复位信号 Input[31:0]dati;∥数据输入信号 t[31:0 数据输出信号 output err o 错误输出信号 371 FPGA数字电子系统设计与开发实例导航 〃连接各个子模块 〃连接媒体无关接凵模块 eth miim miim1 Clk(wb clk 1) Reset(wb rst Divider(r ClkDiv) ); 〃连接寄存器模块 cth registers ethrel DataIn(wb dat 1) Address(wb adr 1[9: 21), ); 连接控制模块 eth maccontrol maccontroll MTxCIk(mLx clk pad 1) .TPause Ry(TPauseRy) ); 〃连接数据发送模块 eth txethmac txethmac l MTXCIk(mtx clk pad i Reset(wb rst CarrierSense(TxCarrierS ense ) 连接数据接收模块 eth rxethmac rxcthmac l MRxCIk(mrx clk pad 1), MRXDVOMRXDV Lb) MRXD( MRX D Lb ) ∥发送数据暂停请求同步 always(@ (posedge mtx clk pad i or posedge wb rst 1) begin if(wb rst i) begin TXPauseRq syncI <=#Tp 1b0 TxPauseRq sync <-#Tp Ibo IxPauscRq sync <=#Ip Ib0; begin TxPauseRq sync <=#Tp(r TxPauseRq &r TxFlow) TxPauseRq sync <=fTp TxPauseRq sync TXPauseRq sync<-#Tp TxPauseRq sync2 end ·372· 第10章以太网控制器(MAC) always(@ (posedge mtx clk pad i or posedge wb rst 1) begin TPauseRq <-#Tp 1bo else TPauserq <=#Tp TxPauseRq sync&(-TxPauseRq sync) 〃涟接状态显示模块 MRXCIk(mrx clk pad 1), Reset(wb rst 1) ); endmodule 10.3.2媒体无关接口模块( Media Independent Interface Module) 媒体无关接∏模块提倛个连接到外部以太网PHY控制器的接∏,用来设置PHY控制器 的寄有器并获得其状态信息,如图10-8所示。 獄求坛」其 Media i:1d i>cuk-lt Intci'f icicle 1.如亏 t生涉以 luck cineration 号门中亍 utpu〔ontr]1 位∵仁恺总具 Li二τ:19t:¥ 图10-8媒休无关接口模块 媒体无关接∏模块包括以下3个了模块和控制逻辑。 ·时钟产生模块:产生MIl接口的时钟信号,这个时钟信号需要满足外部PHY芯片对时 钟的要求 ·输岀控制模块:因为MI连接到外部PHY的数据线实际只冇一线,输岀控制模块嚅 要将输出、输入和使能信号联合形成一个信号 ·移位寄存器模块:将需要传输到外部PY芯片的数据串行化,同时将从外部PHY芯片 接收的串行数据并行保存到寄存器中 ·控制逻辑:实现读、写和查找等请求信号的冋步,提供入据的锁存信号,提供移位 输岀数据的字节选择信号,提供MI的计欻器,提供更新相关寄存器的信号 下面是媒体无关接口模块的主要代码 de "timescale. v' module eth miim Clk, Reset, Divider, NoPre, CtrlData, Rgad, Fiad, WCtrlData, RStat, ScanStat, Mdi FPGA数字电子系统设计与开发实例导航 Mdo, MdoEn, Mdc, Busy, Prsd, LinkFail, Nvalid, WCtrlData Start, RStatStart UpdateMIIRX DATAReg 输出输入信号 input Clk ∥主时钟 out Reset ∥复位信号 input 7: 0] Divider; ∥主时钟的分频参数 input [15: 0] CtrlData 写到外部PHY芯片寄存器的控制数据 input [4: 0]Read ∥外部PHY芯片寄存器的地址 input [4: 0] Fiad ∥PHY的地址 Input NoTre. 无报头 WCtrlData ∥写控制数据操作 Input SLAt; ∥读状态操作 Input Scans ∥查找状态操作 input ∥MI数据输入 output ∥MI数据时钟 output Mde ∥MI数据输入 output MoeN ∥Ml数据输出使能信号 output 忙信号 LinkFail; 连接整体信号 oulpul ∥非法状态 utput [15: 0 Prsd; ∥/从外韶PHY芯片读取状态数据 WCtrlData Star:复位M命令寄存器中 WCTRLDATA位的信号 output RStatstart 复位MI命令寄存器中 RSTAT位的信号 ouLu UpdateMIIRX DATAReg;用读数据来更新MI的 RX DATA寄存器 parameter Tp= l 寄存器 reg ∥产生结束忙信号,用来结束MI操作 always @(posedge Clk or posedge Reset) Degi if(Reset) begin d Busy d<=#Tp 1b0 EndBusy <=#Tp l else Endbusy d<=#Tp - InProgress q2 In Progress q3 #Tp EndBusy d; d ∥更新MI的 RX DATA寄存器 always (@(posedge Clk or posedge Reset gin if(Reset) UpdateMIIRX DATAReg <=+Tp 0: else if( EndBusy &-WCtrIData Start g) ·374· 第10章以太网控制器(MAC) UpdateMIIRX DATAReg <=#Tp 1: else UpdateMIRX DATAReg <=#Ip 0; end 产生延迟信号 always(@(posedge Clk or posedge Reset begin if( reset) gin wCtrIData ql<=#Tp Ib0 WCirlData 2<=#Tp 1'b0 WCtrlData q3 <=#Tp 1'b0 RStat q1 <=fTp 1'b0 RStat q2<-#Tp lb0; RStat q3<=#lp 1'b0: ScanStat ql <=4Tp 1'b0 ScanStat y2 <=fTp 1b0; Sync StatMdcEn <=#Tp 1b0 b WCtrlData q1<-#Tp WCtrlData WCurlData 2 <=#Tp WCurlData ql WCtrlData q3 < #Tp wCtrlData q2: Stat ql<=fTp rstat RStat q2<=#Tp rStat ql; RStat q3<=#Tp RStat 92, ScanStat ql <-#Tp Scan Stat ScanStat q2 < #Tp Scan Stat ql; if(macOn) Sync StatMdcEn <=#Tp Scan Stat q2 end 产生开始命令,写控制数据或者读状态 always @(posedge Clk or posedge Reset) begin if( reset) gin wCtrIDataStart. <=fTp 1 b0 WCtrlData Start q <-#Tp 1'b0 RSLatSlart <=fTp 1bo d begin if(EndBusy) 375 【实例截图】
【核心代码】

标签:

实例下载地址

(Verilog HDL)非常详细的以太网控制器(MAC)设计

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警