
写了用以太网传输的优点,相对于串口的传输速度慢,并且不能远距离传输。PCIE不能远距离传输,选择以太网兼顾了传输速率和系统使用灵活的特点。
选择的Xilinx公司的xc7vx485T的FPGA开发板VC707的优点
1、集成了MAC硬核和SGMII接口,可以完成MAC层功能和PHY层接口的实现。
2、集成了PHY层芯片,可以完成PHY层的功能。
3、集成了1gb的DDR3资源,可以缓存数据。
总得设计方案如图所示,其中MAC层与PHY层的SGMII接口可以直接调用IP来实现。
接收模块
接受上机位的ARP请求,提取上位机的MAC地址和IP地址,以及接收上位机的UDP数据包,并提取报文。
发送模块
发送ARP应答给上位机,封装要发送的数据,加上UDP首部,IP首部以及以太网帧首部,并发送给MAC层的ip核。
DDR3控制模块
将接收FIFO中的数据存入DDR3中,在发送时,从DDR3中读出到发送FIFO。
发送/接受FIFO
以太网工作时钟为125 MHZ,DDR3工作时钟为200MHZ,利用这两个FIFO来解决跨时钟域问题。
MAC层IP核
完成以太网帧的前导码、帧起始定界符的封装以及解封。
具体的工作流程:系统在发送数据时,将 DDR3中的数据通过发送逻辑以及 MAC层IP核进行数据封装,再 通 过 SGMII接 口IP核输出数据送入 PHY 芯片,在PHY 层完成数据编码后经由 RJ45接口发送给上位机;而系统接受数据就是发送数据的逆过程,上位机发送的数据经过 RJ45接口到达 PHY 芯片,在 PHY 层完成解码后通过 SGMII接口将收输出数据
送入 MAC层IP核以及接收逻辑模块,完成数据提取或指令执行的工作,并将数据存入 DDR3。
后面介绍了ARP协议,IP协议和UDP协议就不多讲了。
ARP是为了得到目的MAC地址,才能将IP和UDP正确发送到目的。
这个模块主要是为区分接收到的是ARP还是UDP模块。
鉴别ARP有三点:
1、判断目的MAC地址是否为FF-FF-FF-FF-FF-FF
2、判断帧类型是否为0X0806
3、判断 *** 作码是否为1
是的话就产生ARP_request信号,并提取出上位机的MAC地址和IP地址,输出到ARP处理模块中。
当判断是否为UDP时:
1、IP数据报首部协议字段是否为0x11
2、ip报部分的目的IP地址是否和本地地址一样
3、udp首部的目的端口号是否和本地的端口号一样
若判断通过,就将UDP数据存入接收FIFO中,同时记录数据长度为frame_cnt。
要发送的数据有两种,即ARP应答,以及DDR中读出的数据封装成UDP协议的MAC帧数据。
状态机如图所示。
1、ARP处理模块输出ARP_reply时,进入ARP应答帧状态,当应答完成后,进入空闲状态,其中ARP处理模块需要提供给应答状态上位机的MAC地址,IP地址。
2、当状态机检测到DDR_RD_CPL信号时,就是当DDR3有数据存入发送FIFO时,开始添加MAC头,IP头、udp头,最后读出FIFO里的数据,状态机进入空闲状态。
最后是一些计算,因为目的,源MAC、ip和端口号都变了,所以需要重新计算IP校验和,UDP校验和,统计数据长度,并将结果封装到数据包中去。
最后新收获是,在全双工模式下,以太网帧的数据长度不能超过1500字节,再减去IP首部20字节,udp首部8字节,因此udp数据长度应该小于1472字节。
呵呵,完全没头绪的提问啊, 试着理一下头绪吧!先选好FPGA型号和外部PHY芯片,推荐:
cyclone3或者Spartan6之类的"近代"FPGA都是高性价比的,外面连个88E1111就行了。
然后就是FPGA内部的编程了,要想处理网络协议方便的话,怎么也得调用个Nios或者MicroBlaze软核,添加轻量化的网络协议栈,然后就是软核部分的socket编程了。
整体下来PCB、FPGA、software都要用到,得软硬通吃才行!
FPGA不是必选项的话还是用APM、PPC之类的方便
基于 Zynq的 Avnet ZedBoard的LPC(低引脚数)FMC连接器,在板子的外设上添加了4个千兆以太网端口。板子本身有4个Marvell 88E1510千兆以太网PHY和带有集成磁件的端口连接器。以太网MAC位于ZynqSoC,使用ZynqSoC的PS(处理器系统)的硬件以太网MAC,或者在ZynqSoC的PL(可编程逻辑)中例化的以太网MAC。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)