以太网控制器MAC设计

上传人:软*** 文档编号:179858556 上传时间:2023-01-03 格式:DOCX 页数:33 大小:469.51KB
收藏 版权申诉 举报 下载
以太网控制器MAC设计_第1页
第1页 / 共33页
以太网控制器MAC设计_第2页
第2页 / 共33页
以太网控制器MAC设计_第3页
第3页 / 共33页
资源描述:

《以太网控制器MAC设计》由会员分享,可在线阅读,更多相关《以太网控制器MAC设计(33页珍藏版)》请在装配图网上搜索。

1、专业综合课程设计报告以太网控制器 MAC 设计姓名:郑文灏学号:110260125同组 人:刘国阳、刘慧超指导老师:王新胜成 绩:目录绪论 课题研究的背景和意义 III第 1 章 课程设计的要求 11.1 课程设计的目的 11.2 课程设计的要求 1第 2 章 课程设计的内容 22.1 设计思路 22.2 功能模块分析 32.2.1 寄存器模块 32.2.2 接收帧模块 32.2.3 发送帧模块 62.2.4 MAC控制模块102.2.5 MII 模块112.3 HDL代码阐述122.4 ModelSim 验证21第3章 课程设计的总结与展望 23绪论 课题研究的背景和意义人类社会的进步要求信

2、息产业迅速发展,计算机网络已成为全球信息产业的基石,高度发达的 计算机互联网为人类社会的信息交流和资源共享提供了良好的环境,对人类生活方式的改变和社会 生产力的进步产生了革命性的影响。在计算机网络的发展过程中,以太网是众多网络技术中具有影 响力的一种技术,是当今主流的局域网(LAN)技术。以太网最初是由Xerox公司在70年代提出 的,1982年DEC、In tel和Xerox制定了 DIX标准,即10Mbps普通以太网标准。1983年,IEEE 组织公布了 IEEES023 标准, 10Mbps 以太网得到了国际的认可,标志着以太网标准的正式成 立,同时也标志着符合国际标准的以太网技术的面世

3、。1995年IEEE通过了 IEEE802. 3u标准, 标志着 100Mbps 快速以太网时代的到来。随着网络用户的日益增加, 10Mbps 带宽在一些环境下 不能满足人们对信息传输速率要求。因此快速以太网推出得到了广泛的推广。快速以太网是在 10Mbps 普通以太网上基础上发展起来的,它在保持帧格式,介质访问控制的前提下,工作速率比 普通以太网快 10 倍。 IEEE8023u 快速以太网标准是 IEEE8023 标准的补充,并且兼容 10Mbps以太网。10Mbps和100Mbps以太网组网方便,价格低廉,性能高效在局域网中受到了广 泛应用。1998年通过了 IEEE802. 3z标准,

4、以太网的运行速度达到 1Gbps,目前已出现了 10Gbps 的以太网。与传统的 CAN、 RS485 等相比较,以太网速度更快、通用性更好,而且能 直接与因特网相连,具有更大范围的远程访问。相对于新兴的 USB, IEEEl394 等总线,以太网在 传输距离和控制软件的通用性上有明显的优势。近几年随着深亚微米集成电路工艺技术的飞速发 展, SoC(System on a Chip)已经成为IC界关注的焦点,单一芯片上能够容纳更多的逻辑单元成为 芯片设计发展的必然趋势。将所有的功能块集成在一个单独的芯片上可以大幅度降低系统成本,减 少系统的面积和功耗,提高系统的可靠性。 SoC 已经渗透到通信

5、、多媒体、计算机控制以及其它 一些数字领域,以太网技术在嵌入式系统中的开发应用,已成为当前嵌入式领域研究的技术热点之 一。嵌入式以太网在工业控制、商业领域、交通行业、家庭自动化等有着良好的应用前景,同时嵌 入式设备以其价格低廉、体积小以及实时性使得嵌入式系统的网络化开发有着通用处理器无法比拟 的优点。嵌入式系统的网络化,使得 SoC 有了更广泛的应用范围。在嵌入式系统的网络化开发过 程中,首先要解决嵌入式设备与以太网络的连接问题,即网络芯片的设计。常见的具有网络功能的 芯片有两类,一类是专用的以太网芯片,集成了 MAC控制器和PHY,例如REALTEK 8019AS、 8039AS,这类芯片一

6、般用于网卡、路由器等设备,另一类是用控制、工业领域的具有网络功能的 SoC芯片,例如,PHILIPS LPC2400,这类芯片通常集成了 MAC控制器,但由于Pmr的模拟电 路特性及设计工艺的兼容性问题,这类芯片一般都使用外置的 PHY 芯片来实现对以太网的支持。 在嵌入式领域,通信技术的发展要求对网络的支持越来越广泛,所以研究和设计一个用于嵌入式 SoC 芯片的以太网 MAC 控制器,具有相当的实际意义。当今,以太网已经极大地影响我们的生 活,嵌入式系统上的开发应用,已经成为当前嵌入式研究领域的技术热点之一,一方面,与传统的 RS-485.CAN等相比较,以太网更加高速、通用,而且还可以直接

7、与In ter net相连接,提供更大范 围的远程访问;另一方面,相对于新兴的 USB2.0、 IEEE1394 等总线,以太网技术在传输距离、 不想成本以及控制软件的通用性上都有明显优势。第1章 课程设计的要求1.1 课程设计的目的 了解掌握以太网控制器的工作原理掌握较大工程的基本开发技能 培养综合运用 Modelsim,ISE 工具进行硬件开发的能力 培养数字系统设计的基本能力1.2 课程设计的要求 执行以太网IEEE802.3协议MAC要求的功能 自动产生和检查 32bit CRC 在发送时自动填充长度小于规定的帧 监测帧过长或过短 兼容10Mbps和100Mbps两种速率 当碰到过小的

8、帧间隔或过长的延迟时间时自动丢弃帧 在全双工模式下控制流量并且自动产生控制帧 在半双工模式下进行冲突检测并且在冲突时自动重传 完成对发送/接收的状态解析 容纳128个缓冲描述符的内部RAM和存储帧的内部RAM 发送和接收帧时的异步双口 FIFO 发送帧模块:处理所有有关帧发送的操作 接收帧模块:处理所有有关帧接收的操作 控制模块:在全双工的工作模式下,处理所有有关数据流控制的操作 状态模块:要写入到缓冲描述符或其他模块要调用的不同的状态 寄存器模块:所有要在MAC层操作中用到的寄存器第2章课程设计的内容2.1 设计思路本文主要阐述基于 FPGA 对 IEEE802.3 快速以太网 MAC 层功

9、能的实现。采用自顶向下、分 块设计的思路,逐个实现MAC主要功能模块,诸如发送模块、接收模块、MAC控制模块以及物 理层和主机接口模块等,按照IP核的标准进行设计。同时考虑到对主机和PHY总线连接,MAC 内部都采用8位数据线,32位地址线,而在和PHY接口连接时采用4位数据通道。MAC层主体 框架如图2-1所示,主要模块有:Mil模块、MAC控制模块、接收帧模块、发送帧模块、状态模 块、寄存器模块、存储模块、主机总线接口模块,以及用于时钟同步、复位和寄存器输出的模块。图 2-1 MAC 控制器结构框图这里,有必要说一下IEEE 802.3帧格式,如图2-2所示。7 bytes1 byte6

10、bytes6 bytes2 bytes46-1500 bytes4 bytes图 2-2 IEEE 802.3 帧格式l)Pre(Preamble):前导码,7字节0x55信号,接收站点通过该字段知道接收到数据帧信息,并使网络两端的物理层达到稳定同步状态。2) SFD(Start. of-Frame Delimiter):定界符,表示一个有效帧的开始,1字节的0xD5。当接收 站收到定界符时表示一帧数据的开始。3) DA(Destination Address):目的地址,69节。DA字段用于识别需要接收帧的站点。目的 地址可以分为单播地址,多播地址和广播地址。单播地址是一个站点的特定的地址,

11、当发送地址为 单播地址只有这个地址的站点才能接收。多播地址是一个组地址,当发送目的地址为多播地址时, 这一组站点才能接收。广播地址,当发送目的地址为广播地址时,这个广播域的地址都可以接收。 广播地址为特殊的组播地址,地址全为1。4) SA(Source Address):源地址,69节。SA字段用于识别发送帧的站点。5) Length/Type:长度/类型,29节。如果是采用可选格式组成帧结构时,该字段既表示包含 在帧数据字段中的MAC数据大小,也表示帧类型。6) Data(Pad):数据和填充域,是一组n(46WnW1500)字节的任意值序列。由于CSMA/CD 算法的限制,以太网帧必须不小

12、于64字节,如果小于该字节长度,则要进行数据填充以达到最小帧 长度。帧长度最长为1518字节。7) FCS(Frame Check Sequenee):帧校验,49节。该序列包括32位的循环冗余校验值,由发送MAC方生成,在接收时用同样的算法进行校验,用来判断这帧数据是不是在发送过程中产生错 误。被校验的范围包括目的地址域,源地址域,长度/类型域,数据域和填充域。2.2 功能模块分析2.2.1 寄存器模块eth_registers 是 MAC 层的寄存器模块。所有的寄存器都是 32 位宽度,但是具体用到的则由 寄存器实际所需宽度所决定,其余位填0.每个寄存器都有两个参数:宽度和Reset值。R

13、eset值定 义寄存器清零后设置的默认值。寄存器模块共有 23 个寄存器。通过访问寄存器并对寄存器内容进 行读写操作便可完成一些状态监测和功能选择。2.2.2 接收帧模块接收帧模块eth_rxethmae.v的任务就是接收帧数据。外部的以太网PHY芯片将串行数据传送 至Mil模块,最后成为一个个nibble (MRxD3:0)发送到接收模块里去,同时还有“数据有效”的 掩码位MRxDV.然后发送模块就把这些nibble聚集成字节byte的形式,再和一些表示数据开始和 结束的信号一起发送到主机总线接口。接收模块还需要实现的功能包括有移除接收到的帧的前导 码、帧起始定界符,产生用于地址识别并发送到

14、HASH表内,对所有接收到的包进行CRC校验。 图 2-3 是该模块的整体结构框图。图中“计数匹配信号”表示当计数器达到一些特定值时,将相应特 征信号触发输出为1。图2必帧的接收过程图 2-3 接收模块整体框图接收模块有下列子模块组成:eth_crcCRC(循环冗余校验码)模块 eth_rxaddrcheck地址识别模块 eth_rxcounters与数据包接收有关的计数器模块 eth_rxstatem接收模块状态机除了上述的子模块,接收模块还用到下列逻辑信号: 产生CRCHash值和HashGood信号位,用于地址识别模块 锁存从PHY芯片接收到的数据RxData_d 目的地址广播Broad

15、cast或者组播Multicast信号 产生信号RxValid、RxStartFrm、RxEndFrm,表征数据传输的有效性 HugEn,是否允许接收大包。定义与寄存器PACKETLEN、r_IFG,是否允许最小帧间 隔,用于计数器模块的判决条件 r_Pro、r_Bro、r_Iam 和寄存器 MAC、HASHO、HASH1,用于地址识别。HASH0 和 HASH1 是哈希算法的算法表接收数据帧的核心是各个状态之间的转换,如图2-4 所示为接收模块状态转换图。Transmitting | MRxDV ,MRxDVIdleDropMR:MRxDVDataOSFDMRxD ansmitti切 IFG

16、CounterEq24 MRxDV & MRxDEqDxdv TrPreambleMRxDVMRxDEq5Datal、MRxDV & MRxDEq5 . .TransmittingMRxDV & ByteCntMaxFrameMRxDV图 2-4 接收模块状态转换图通过状态机得出接收逻辑输出信号如下:判断广播帧:在Data0状态,当计数器ByteCnt为1,锁存的数据位0xff即目的地址第一字节 全为 1 ,为广播帧, Broadcast 置为 1 。判断组播帧:在 Data0 状态,当计数器 ByteCnt 为 1,锁存的数据字节最低位为 1,为组播 帧,Multicast 置为 1.设定开

17、始接收位: Data0 状态, 当计数器 ByteCnt 为 1 或允许 CRC 延迟, 计数器 DlyCrcCnt=3,经两次时钟同步设置信号RxStartFrm为1。设定结束接收位:当计数器ByteCnt大于2,若MRxDV从1变0,数据状态或者接收的数据 超过了最大帧限制状态时,出现这两种情况表明接收帧结束,经始终同步设置标志位 RxEndFrm 为1。判断接收数据有效:DataO状态,当计数器ByteCnt不等于零表明接收数据都是有效的,标致 信号RxValid经两次时钟同步置为1。四位/八位转换:在数据状态,如果接收数据有效,将从MII 接口接收到的四位 nibbleMRxD3:0依

18、次填入RxData7:0数据的高四位和第四位。目的地址识别模块:eth_rxaddrcheck 子模块,地址识别模块的功能是决定在接收一个数据帧的时候是否接受。 MAC 层的设计思路是开始接受所有的帧而后判断接收帧的目的地址,将在该子模块里面被检查。 帧接收需要以下一些条件: 寄存器MODER里的Pro位被置位,所有的帧都被接收。如果该位被清零,那就必须检 查每个接收帧的目的地址。 如果寄存器MODER里的Bro位被置位,那么所有包括广播地址的帧将被拒绝接收,二 球,此时 Pro 位必须清零。 MACMAC私人地址在接收组播帧时,出于安全上的考虑,除了要检查MAC地址以外,还要采用哈希算法进行

19、加 密和解密,主要是针对组播的情况。如前所述,无论待接收的帧的目的地址是否匹配,包接收都会先开始进行。一旦接收到目的地 址之后,就要检查是否和之前所述的任一条件匹配。如果不匹配的话那么接收的整个包都将被抛 弃,信号RxAbort被置位为1。该包也就不会写入到内存中,并且在接收缓冲FIFO里被擦除。CRC 模块:该模块eth_crc通过对32位CRC的值进行检验,判决接收进来的数据包的正确性和有效性。 该模块同样产生CRC校验值,并用于发送模块。CRC发送和检查的具体描述如下:在发送者发送数据之后,发送4字节该数据包的CRC,表明该数据包查过了 4个字节。接收 者接收该数据包(包括CRC数据)并

20、以此得出新的CRC值。如果新的CRC值不为0,表明接收到 的数据和发送的数据有了差异,置信号CrcError为1。2.2.3 发送帧模块发送模块 eth_txethmac 负责发送数据帧。发送模块从主机的总线接口得到需要被发送的字节 形式的数据。该模块也要接受表征开始数据帧发送的输入信号 TxStartFrm 以及结束数据帧发送的 信号TxEndFrm。图2-5是发送模块的整体框图,图中“计数匹配信号”表示当计数器达到一些特定 值是,将相应特征信号触发输出为1。ifc送媳幣,垦股卷延时T半取工冲究拉测7是否a发送状态机模 块发送计数器模 块理冲宪或速度. 于OOMbpi?匹配敲迭帧(_由進融状

21、态输出输出端SiSJAM发送圭发等特10運吋N泪琏K法幵始雄送输入端CprrievSensCollisionNibCnt和计,数匹配信号来自PHYRetryCnt3:0、MinFL、padFullD、HugEnIGPT、 IMaxFI十宀e十CRCEn来自寄存器配置来自主发送状态信号(开始、 机接口 结束、有效、丢弃)来自 MAC 控RxDnf n7:0 .制模块tPR等发送帧主模块WillTransmiMTxMThD30CRCEnStat eFC;LR;:3Rfand ndom1结束omEqByteCntSqoeJam yCRC校验模块t_”至发送模块至PHY、有效、4开始至主机丢弃)接口B

22、yteCnt15:0NibCnt15:0Random模块(用于执行后 退等待)图 2-5 发送模块整体框图该模块由下列四个子模块组成: eth_crcCRC模块,产生32-bitCRC校验码写在数据域之后 ethandom当碰到冲突(Collisio n),后退程序在执行的时候需要产生随机的延时,用于 CSMA/CD 算法 eth_txcounters在数据帧发送的时候需要用到的些许计数器 eth_txstatem发送模块状态机该模块同时设置了不同的信号组,想主机和以太网 PHY 芯片两边分别告知相关的发送操作状 态,完成、重试、忽略、错误等。连接到以太网PHY芯片的信号、功能设计如下: MT

23、xD3:0,发送数据,将通过PHY发送至以太网,其输出类型有:在状态DataO,输出发送数据低四位TxData3:0,在状态Datal,输出发送数据高四 位 TxData7:4在状态 FCS,依次输出校验码Crc28,Crc29,Crc30,Crc31,在状态Jam,输出0x9在状态Preamble,如果NibCnt等于15,输出0xd,其他则输出0x5空闲时,MTxD3:0输出为0 MtxEn,发送使能信号。告知PHY数据MTxD有效并且发送程序马上就要开始。在状态 Preamble、Data。、Data1、PAD、FCS、Jam 下 MtxEn 信号均置为 1 输出。 发送错误标志MtxE

24、rr,在信号TooBig或者信号UnderRun被触发为1。 连接到上层主机总线模块的信号有: TxDone,发送数据包完成信号 TxRetry,发送数据包重试信号 TxAbort,发送数据包忽略信号除以上信号,发送模块还输出其他信号作为模块控制,包括对CSMA/CD算法的调度和使用。 具体输出逻辑信号定义如下: WillTransmit,输出至eth_rxethmac模块,通知接收者发送者要开始发送数据了。在状 态 Preamble 、 Data0 、 Data1 、 PAD 、 FCS 、 Jam 以 及 开 始 前 导 码 的 标 识 StartPreamble,在时钟同步下置为1 Re

25、setCollision,冲突reset信号。将异步的冲突检测进行同步,该信号用于对同步触发 器reset。在状态Preamble、Data。、Data1、PAD、FCS几个状态下,该信号在时钟同 步下置为1 ColW in dow,冲突窗口。在该窗口内每个冲突都被认为是合法的冲突,数据帧将被重新 发送。在没有检测到冲突并且 ByteCnt 小于有效窗口打下的情况下,若状态处于 Data1,或者FCS、PAD,则该信号清零。Reset时该信号位1 RetryCnt3:0,重试发送次数的计数器。在冲突状态还没有退回,计数器ByteCnt等于7 且冲突窗口有效,或者执行退回操作且计数到达随机设定的

26、时间,就在时钟同步下对计 数器加1 Data_Crc3:0, Enable_Crc, Initialize_Crc,用于 CRC 的产生。Data_Crc3:0从高到低在分别对应发送数据nibble从低位到高位随机数模块:eth_random 是发送模块中的随机函数子模块。当有冲突发生时,所有相关的站都继续发送一 小段时间以保证让所有的站都能发现冲突,这个过程称为堵塞。发送模块首先发送 jam 形式的码 0x99999999,然后停止发送数据。在重发开始之前,模块先执行后退操作。后退以后,站从头开始处理并尝试重发帧。如果帧发送遭遇冲突次数达到 16,它将被丢弃。后退范围被重置,上报此事件,而站

27、继续处理发送队列中下一帧。任何传送尝试的后退时间都是一个随机变量,由随机数模块产生的时间长度其实是伪随机的,采用二进制的指数算法,其取值范围随重发次数指数型增长。发送模块状态机:statelPGFullD&NibCnt=IPG I,FullD& NibCnt=IPGR2stateidleTxtartFrmcarriersensestatefreamblentEql5ColliionstateDeferstateData0 JTxunderRstateJamColliion & TxEnFrmstateBackoffstateFCSCollision & TxEndFrmpad & CrcEn:

28、llisionstateDatal Jeth_txstatem 是发送模块的状态转换子模块,共有 11 个状态,如图 2-6 所示。其中 FullD 信 号表示全双工模式,IPGT和IPGR2分别表示全双工、双工模式下帧间隔的最大时间。statePAD J图 2-6 发送模块状态转换图在对系统复位之后,首先触发的状态时StateDefer。在此之后状态机进入帧间隔状态 StateIPGA,然后再进入空闲状态Stateidle。发送模块通常从该状态开始。当发送者无事时,状态 机就停留在idle状态等待发送请求信号。总线接口通过设置信号TxStartFrm触发为1表示请求发 送,该信号保持两个时钟

29、周期,信号MtxEn被触发为1,通知以太网PHY芯片开始发送帧。与此 同时数据线MTxD3:0被设为前导码的值0x5。在前导码之后,发送数据帧间隔符Oxd。然后状态 机进入到StateData0状态,信号TxUsedData被触发为1,通知主机总线提供下一个数据字节。8 位数据的低四位被发送,然后状态机进入到 StateData1 状态,同时发送数据字节的高四位。状态 机在 data0 和 data1 之间反复切换直到数据包发送完毕。当还有最后一个字节要发送的时候,主机 总线设置TxEndFrm触发为1。在数据发送完毕之后,发送状态中会有如下可能性: 如果发送数据的长度大于等于最小帧长MINF

30、L,而且允许CRC校验,那么状态机就进 入到StateFCS,然后状态机进入状态StateDefer 如果发送数据的长度大于等于最小帧长MINFL,不允许进行CRC校验,那么状态机就 直接进入到StateDefer状态 如果发送数据的长度小于 MILFL,并且允许进行扩展填充码,那么状态机就要进入到 StatePA D,然后进入到StateFCS状态,接着进入到状态StateDefer 如果发送数据的长度小于MINFL,不允许进行扩展填充码但允许CRC校验,那么状态 机就进入到StateFCS,接着进入到状态StateDefer2.2.4 MAC控制模块控制模块eth_maccontrol是执

31、行实时数据流量控制的模块,仅工作在100Mbps速率下的全双 工模式。该模块由下列两个子模块组成: eth_transmitcontrol,负责产生控制帧并发送 eth_receivecontrol,负责发现、解析控制帧全双工模式通过控制操作码 PAUSE 实现流量控制。当主机不能继续接受传送过来的数据包, 接受FIFO就将要填满,在FIFO溢出之前,上层主机发送PAUSE控制帧至数据发送者,该控制 帧请求发送者停止发送数据一段特定时间。发送流量控制在子模块eth_tra nsmitco ntrol完成。当MAC接收到了一个PAUSE控制帧,就依照接收到的PAUSE时间长度值启动PAUSE计时

32、 器。每经过 1 个时隙计时器减 1。当计时器减至 0, MAC 发送模块重新开始发送。由子模块 eth_receivecontrol 完成。当控制帧被发送时,填充码padding和CRC将自动产生。图2-7是MAC控制模块的整体框 图,发送 MAC 帧模块产生控制帧,控制主模块通过信号 CtrlMux 来判决是发送控制帧还是直接发 送从主机过来的数据帧到发送模块。在发送时如果没有收到 PAUSE 帧,则 MAC 控制模块部产生 任何影响。图 2-7 MAC 控制模块框图225 Mil模块eth_mii 模块是一个提供 MAC 层和外部以太网 PHY 芯片相连接的接口。从功能上看它可以分 为两

33、个部分:一个是和物理层 PCS 子层相连接的接口信号 eth_mii 模块;另一个是 MII 管理模块 eth_miim,主要功能室设置和读写物理层PHY,进行寄存器的配置设定或从中读取数据。PHYMAC层图 2-8 MII 模块整体框图23 HDL代码阐述顶层模块:include eth_defines.vinclude timescale.vmodule eth_top(/ WISHBONE commonwb_clk_i, wb_rst_i, wb_dat_i, wb_dat_o,/ WISHBONE slavewb_adr_i, wb_sel_i, wb_we_i, wb_cyc_i,

34、wb_stb_i, wb_ack_o, wb_err_o,/ WISHBONE masterm_wb_adr_o, m_wb_sel_o, m_wb_we_o, m_wb_dat_o, m_wb_dat_i, m_wb_cyc_o, m_wb_stb_o, m_wb_ack_i, m_wb_err_i,ifdef ETH_WISHBONE_B3m_wb_cti_o, m_wb_bte_o,endif/TX mtx_clk_pad_i, mtxd_pad_o, mtxen_pad_o, mtxerr_pad_o,/RXmrx_clk_pad_i, mrxd_pad_i, mrxdv_pad_i,

35、 mrxerr_pad_i, mcoll_pad_i, mcrs_pad_i, / MIIMmdc_pad_o, md_pad_i, md_pad_o, md_padoe_o,int_o/ Bistifdef ETH_BIST/ debug chain signalsscanb_rst,/ bist scan resetscanb_clk,/ bist scan clockscanb_si,/ bist scan serialinscanb_so, / bist scan serial out scanb_en/ bist scan shift enableendif); parameter

36、Tp = 1;/ WISHBONE common inputwb_clk_i;inputwb_rst_i;input 31:0 wb_dat_i; output 31:0 wb_dat_o; outputwb_err_o;/ WISHBONE slave input11:2 wb_adr_i;input3:0 wb_sel_i;inputwb_we_i;inputwb_cyc_i;inputwb_stb_i;outputwb_ack_o;/ WISHBONE master/ WISHBONE clock / WISHBONE reset/ WISHBONE data input/ WISHBO

37、NE data output/ WISHBONE error output/ WISHBONE address input/ WISHBONE byte select input/ WISHBONE write enable input/ WISHBONE cycle input/ WISHBONE strobe input/ WISHBONE acknowledge outputoutput31:0m_wb_adr_o;output3:0m_wb_sel_o;outputm_wb_we_o;input31:0m_wb_dat_i;output31:0m_wb_dat_o;outputm_wb

38、_cyc_o;outputm_wb_stb_o;inputm_wb_ack_i;inputm_wb_err_i;ifdef ETH_WISHBONE_B3output 2:0 m_wb_cti_o; / Cycle Type Identifier output 1:0 m_wb_bte_o; / Burst Type Extension endif/ Txinputmtx_clk_pad_i; / Transmit clock (from PHY)output3:0mtxd_pad_o; / Transmit nibble (to PHY)outputmtxen_pad_o; / Transm

39、it enable (to PHY)outputmtxerr_pad_o; / Transmit error (to PHY)/ Rxinputmrx_clk_pad_i; / Receive clock (from PHY)input3:0mrxd_pad_i;/ Receive nibble (from PHY)inputmrxdv_pad_i; / Receive data valid (from PHY)inputmrxerr_pad_i; / Receive data error (from PHY)/ Common Tx and Rxinputmcoll_pad_i;/ Colli

40、sion (from PHY)inputmcrs_pad_i;/ Carrier sense (from PHY)/ MII Management interfaceinputmd_pad_i;/ MII data input (from I/O cell)outputmdc_pad_o;/ MII Management data clock (to PHY)outputmd_pad_o;/ MII data output (to I/O cell)outputmd_padoe_o;/ MII data output enable (to I/O cell)outputint_o;/ Inte

41、rrupt output/ Bistifdef ETH_BISTinputscanb_rst;/ bist scan resetinputscanb_clk;/ bist scan clockinputscanb_si;/ bist scan serial inoutputscanb_so;/ bist scan serial outinputscanb_en;/ bist scan shift enableendifwire7:0r_ClkDiv;wirer_MiiNoPre;wire15:0r_CtrlData;wire4:0r_FIAD;wire4:0r_RGAD;wirer_WCtrl

42、Data;wirer_RStat;wirer_ScanStat;wireNValid_stat;wireBusy_stat;wireLinkFail;wire15:0Prsd;/ Read Status Data (data read from the PHY)wireWCtrlDataStart;wireRStatStart;wireUpdateMIIRX_DATAReg;wireTxStartFrm;wireTxEndFrm;wireTxUsedData;wire7:0TxData;wireTxRetry;wireTxAbort;wireTxUnderRun;wireTxDone;wire

43、5:0CollValid;regWillSendControlFrame_sync1;regWillSendControlFrame_sync2;regWillSendControlFrame_sync3;regRstTxPauseRq;regTxPauseRq_sync1;regTxPauseRq_sync2;regTxPauseRq_sync3;regTPauseRq;/ Connecting Miim module eth_miim miim1(.Clk(wb_clk_i),.NoPre(r_MiiNoPre),.Fiad(r_FIAD),.ScanStat(r_ScanStat),.M

44、doEn(md_padoe_o), .Prsd(Prsd), .WCtrlDataStart(WCtrlDataStart),.Reset(wb_rst_i),.CtrlData(r_CtrlData), .WCtrlData(r_WCtrlData) .Mdi(md_pad_i),.Mdc(mdc_pad_o),.LinkFail(LinkFail),.RStatStart(RStatStart),.Divider(r_ClkDiv),.Rgad(r_RGAD),.RStat(r_RStat),.Mdo(md_pad_o),.Busy(Busy_stat),.Nvalid(NValid_st

45、at),.UpdateMIIRX_DATAReg(UpdateMIIRX_DATAReg);wireRegCs;/ Connected to registerswire 31:0 RegDataOut;/ Multiplexed to wb_dat_owirer_RecSmall;/ Receive small frameswirer_LoopBck;/ Loopbackwirer_TxEn;/ Tx Enablewirer_RxEn;/ Rx EnablewireMRxDV_Lb;/ Muxed MII receive data validwireMRxErr_Lb;/ Muxed MII

46、Receive Errorwire3:0 MRxD_Lb;/ Muxed MII Receive DatawireTransmitting;/ Indication that TxEthMAC is transmittingwirer_HugEn;/ Huge packet enablewirer_DlyCrcEn;/ Delayed CRC enabledwire 15:0 r_MaxFL;/ Maximum frame lengthwire 15:0 r_MinFL;/ Minimum frame lengthwireShortFrame;wireDribbleNibble;/ Extra

47、 nibble receivedwireReceivedPacketTooBig; / Received packet is too bigwire 47:0 r_MAC;/ MAC addresswireLoadRxStatus;/ Rx status was loaded/ HASH table, lower 4 bytes / HASH table, upper 4 byteswire 31:0 r_HASH0;wire 31:0 r_HASH1;wire7:0 r_TxBDNum;/ Receive buffer descriptor numberwire6:0 r_IPGT;/wir

48、e6:0 r_IPGR1;/wire6:0 r_IPGR2;/wire5:0 r_CollValid; /wire 15:0 r_TxPauseTV;/ Transmit PAUSE valuewirer_TxPauseRq;/ Transmit PAUSE requestwire3:0 r_MaxRet;/wirer_NoBckof;/wirer_ExDfrEn;/wireTX_BD_NUM_Wr; / Write enable that writes RX_BD_NUM to the registers.wirer_TxFlow;/ Tx flow control enablewirer_

49、IFG;/ Minimum interframe gap for incoming packetswireTxB_IRQ;/ Interrupt Tx BufferwireTxE_IRQ;/ Interrupt Tx ErrorwireRxB_IRQ;/ Interrupt Rx BufferwireRxE_IRQ;/ Interrupt Rx ErrorwireBusy_IRQ;/ Interrupt Busy (lack of buffers)wireDWord;wireBDAck;wire 31:0 BD_WB_DAT_O;/ wb_dat_o that comes from the W

50、ishbone module (for buffer descriptors read/write)wireBDCs;/ Buffer descriptor CSwireCsMiss;/ When access to the address between 0x800 and 0xfff occurs, acknowledge is set/ but data is not valid.wiretemp_wb_ack_o;wire 31:0 temp_wb_dat_o;wiretemp_wb_err_o;ifdef ETH_REGISTERED_OUTPUTSregtemp_wb_ack_o_

51、reg;reg 31:0 temp_wb_dat_o_reg;reg temp_wb_err_o_reg;endif assign DWord = &wb_sel_i;assign RegCs = wb_stb_i & wb_cyc_i & DWord & wb_adr_i11 & wb_adr_i10; / 0x0- 0x3FFassign BDCs = wb_stb_i & wb_cyc_i & DWord & wb_adr_i11 & wb_adr_i10;/ 0x400 - 0x7FF/ 0x800 - 0xfFFassign CsMiss = wb_stb_i & wb_cyc_i

52、& DWord & wb_adr_i11;assign temp_wb_ack_o = RegCs | BDAck;assign temp_wb_dat_o = (RegCs & wb_we_i)? RegDataOut : BD_WB_DAT_O; assign temp_wb_err_o = wb_stb_i & wb_cyc_i & (DWord | CsMiss);ifdef ETH_REGISTERED_OUTPUTSassign wb_ack_o = temp_wb_ack_o_reg;assign wb_dat_o31:0 = temp_wb_dat_o_reg;assign w

53、b_err_o = temp_wb_err_o_reg;elseassign wb_ack_o = temp_wb_ack_o;assign wb_dat_o31:0 = temp_wb_dat_o;assign wb_err_o = temp_wb_err_o;endififdef ETH_REGISTERED_OUTPUTSalways (posedge wb_clk_i or posedge wb_rst_i)beginif(wb_rst_i)begintemp_wb_ack_o_reg =#Tp 1b0;temp_wb_dat_o_reg =#Tp 32h0;temp_wb_err_o

54、_reg =#Tp 1b0;endelsebegintemp_wb_ack_o_reg =#Tp temp_wb_ack_o & temp_wb_ack_o_reg; temp_wb_dat_o_reg =#Tp temp_wb_dat_o;temp_wb_err_o_reg =#Tp temp_wb_err_o & temp_wb_err_o_reg;endendendif/ Connecting Ethernet registers eth_registers ethreg1(.DataIn(wb_dat_i), .Cs(RegCs), .DataOut(RegDataOut), .r_P

55、ad(r_Pad), .r_DlyCrcEn(r_DlyCrcEn), .r_ExDfrEn(r_ExDfrEn), .r_IFG(r_IFG), .r_Bro(r_Bro), .r_RxEn(r_RxEn), .RxB_IRQ(RxB_IRQ), .r_IPGT(r_IPGT), .r_IPGR1(r_IPGR1), .r_MaxFL(r_MaxFL), .r_TxFlow(r_TxFlow), .r_MiiNoPre(r_MiiNoPre), .r_WCtrlData(r_WCtrlData), .r_RGAD(r_RGAD), .NValid_stat(NValid_stat), .Li

56、nkFail(LinkFail), .RStatStart(RStatStart), .r_TxBDNum(r_TxBDNum), .r_HASH0(r_HASH0), .r_TxPauseTV(r_TxPauseTV), .StartTxDone(StartTxDone),.Address(wb_adr_i9:2),.Clk(wb_clk_i),.r_RecSmall(r_RecSmall),.r_HugEn(r_HugEn),.r_FullD(r_FullD),.r_NoBckof(r_NoBckof),.r_Pro(r_Pro),.r_NoPre(r_NoPre),.Busy_IRQ(B

57、usy_IRQ),.TxE_IRQ(TxE_IRQ),.r_IPGR2(r_IPGR2),.r_MaxRet(r_MaxRet),.r_RxFlow(r_RxFlow),.r_ClkDiv(r_ClkDiv),.r_RStat(r_RStat),.r_FIAD(r_FIAD),.Busy_stat(Busy_stat), .r_MAC(r_MAC), .UpdateMIIRX_DATAReg(UpdateMIIRX.TX_BD_NUM_Wr(TX_BD_NUM .r_HASH1(r_HASH1), .RstTxPauseRq(RstTxPauseRq), .TxClk(mtx_clk_pad_

58、i),.Rw(wb_we_i),.Reset(wb_rst_i),.r_CrcEn(r_CrcEn),.r_LoopBck(r_LoopBck),.r_Iam(),.r_TxEn(r_TxEn),.RxE_IRQ(RxE_IRQ),.TxB_IRQ(TxB_IRQ),.r_MinFL(r_MinFL),.r_CollValid(r_CollValid),.r_PassAll(r_PassAll),.r_ScanStat(r_ScanStat),.r_CtrlData(r_CtrlData),.WCtrlDataStart(WCtrlDataStart),DATAReg), .Prsd(Prsd

59、),Wr),.int_o(int_o),.r_TxPauseRq(r_TxPauseRq), .TxCtrlEndFrm(TxCtrlEndFrm), .RxClk(mrx_clk_pad_i),.SetPauseTimer(SetPauseTimer)wire7:0 RxData;wireRxValid;wireRxStartFrm;wireRxEndFrm;wireRxAbort;wireWillTransmit;wireResetCollision;wire7:0 TxDataOut;wireWillSendControlFrame;wireReceiveEnd;wireReceivedPacketGood;wireReceivedLengthOK;wireInvalidSymbol;wireLatchedCrcError;wireRxLateCollision;wire3:0 RetryCntLatched;wire3:0 RetryCnt;wireStartTxAbort;wireMaxCollisionOccured;wireRetryLimit;wireStatePreamble;wire1:0 StateData;/ Connecting MACControl);eth_macc

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!