基于FPGA的以太网开发
基于FPGA的以太网开发,在调试过的FPGA玩家开来,其实算不上很难的技术!但是如果只是菜鸟级别的选手,没有调试过的话,就有些头疼了!早在自己在实习的时候,就接触到XAUI(万兆以太网口)接口,但是由于某些原因没能参与调试,成为了自己的遗憾,这次在Altera平台下开发百兆以太网,想通过博文的方式记录自己的调试例程
做网络开发,首先必须对以太网的层级结构有了解,否则,你很容易分不清每层的功能,而在自己到底要做什么上而找不到方向!这里,从802.3的协议上抓取一副图片说明问题:
图中采用的是GMII(Gigabit Media Independent
Interface)接口,可以看到PHY层,物理层基本不做逻辑上的处理,对于吉比特串行而言主要是是传输物理的数据信号编码(8B10B)和时钟信号回复(CDR)。FPGA提供的MAC
IP核,若器件带高速收发器(GTX),那么我们就不需要外接PHY芯片,否则就需要外接PHY芯片,完成PHY层的功能。
这里继续给出ISO协议提供的MAC帧格式:
其中开始的7个字节放固定的帧同步码;1个字节的帧开始符;6个字节的源物理地址;6个字节的目的物理地址;接下来就是长度和帧类型。实际开发中,我们使用的IPv4的报文,类型号:
理清楚这个概念以后,在实际使用中MAC内的净荷是如何存放的,还需要知道网络协议的层次结构,这里贴出一张ISO七层协议到TCP/IP四层协议的对应关系图,然后说明实际底层开发,FPGA做封包处理,到底要干嘛。
MAC帧封装的是MAC帧头+传输层的IP报文。
FPGA通过纯迎硬件的方式开发网络功能,IP数据帧中的数据包:对应的传输层有TCP和UDP两种协议。由于TCP协议涉及到三次握手建立连接和四次挥手释放连接,以纯硬件的方式来开发,难度较大,但是有第三方的IP可以实现该功能,这里我们选用面向无连接的UDP协议。
虽然选择了UDP协议,但是最后想FPGA发送的网络数据能够让上位机的应用软件接收到,我们需要给应用分配一个端口号。端口号就是为了区分上位机上不同的网络应用程序之间的数据的。比如,同时浏览网页和聊天,浏览器有个端口号接收自己的数据,聊天工具有个端口号接收自己的数据。
讲了这么多的目的,是建立网路报文和层之间对应的基本概念。因为通过FPGA开发网络应用,我们需要自己在最底层,一个字节一个字节的拼出一个IP报文,从端口号开始到MAC帧,FPGA开发者都必须掌握这些概念。不然,不知道自己到底用什么拼一个数据包出来给FPGA的MAC核。
其实FPGA的MAC核在我们看来完成了加前导码、帧定界符、FCS的功能。实际使用以太网给PC发送数据的时候,基本是用网络进行点对点通信,没涉及到CSMA/CD功能。如果真的涉及到PC机侧和多个外部设别通信,在组包的时候,需要注意MAC地址、IP地址、端口号,合理规范,避免冲突。
基于FPGA的以太网开发的更多相关文章
- 基于FPGA的图像开发平台 其他摄像头附件说明(OV5642 OV9655)
基于FPGA的图像开发平台 其他摄像头附件说明 FPGA_VIP_V101 编者 奇迹再现 个人博客 http://www.cnblogs.com/ccjt/ 联系邮箱 Shenyae86@163.c ...
- 【转】简谈基于FPGA的千兆以太网
原文地址: http://blog.chinaaet.com/luhui/p/5100052903 大家好,又到了学习时间了,学习使人快乐.今天我们来简单的聊一聊以太网,以太网在FPGA学习中属于比较 ...
- 基于FPGA dspbuilder的DNLMS滤波器实现
自适应滤波器一直是信号处理领域的研究热点之一,经过多年的发展,已经被广泛应用于数字通信.回声消除.图像处理等领域.自适应滤波算法的研究始于20世纪50年代末,Widrow和Hoff等人最早 ...
- FPGA经典:Verilog传奇与基于FPGA的数字图像处理原理及应用
一 简述 最近恶补基础知识,借了<<Verilog传奇>>,<基于FPGA的嵌入式图像处理系统设计>和<<基千FPGA的数字图像处理原理及应用>& ...
- 基于FPGA的红外遥控解码与PC串口通信
基于FPGA的红外遥控解码与PC串口通信 zouxy09@qq.com http://blog.csdn.net/zouxy09 这是我的<电子设计EDA>的课程设计作业(呵呵,这个月都拿 ...
- 基于FPGA的OLED真彩色动态图像显示的实现
源:基于FPGA的OLED真彩色动态图像显示的实现 作为第3代显示器,有机电致发光器件(Organic Light Emitting Diode,OLED)由于其主动发光.响应快.高亮度.全视角.直流 ...
- 基于FPGA的均值滤波算法的实现
前面实现了基于FPGA的彩色图像转灰度处理,减小了图像的体积,但是其中还是存在许多噪声,会影响图像的边缘检测,所以这一篇就要消除这些噪声,基于灰度图像进行图像的滤波处理,为图像的边缘检测做好夯实基础. ...
- 基于FPGA的IIR滤波器
基于FPGA的IIR滤波器 by方阳 版权声明:本文为博主原创文章,转载请指明转载地址 ...
- 基于FPGA的VGA显示静态图片
终于熬到暑假了,记过三四周的突击带考试,终于为我的大二画上了一个完整的句号,接下来终于可以静心去做自己想做的事情了,前一阵子报了一个线上培训班,学学Sobel边缘检测,之前一直在学习图像处理,但是因为 ...
随机推荐
- Jar包方式运行web项目
使用Maven进行打包 在自己的电脑终端中进入到pom.xml文件的目录中执行maven打包.命令为: mvn clean package 1 成功的标志为上面显示BUILD SUCCESS成功打包 ...
- 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
let carr = [{ "code": "000", "agyTypeCode": "1", "name& ...
- legend3---OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 10054
legend3---OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 10054 一.总结 一句话总结: 解决方法:多试几次,实在不行就手动下载 1.homeste ...
- linux查看端口被那个进程占用
linux下遇到端口被暂用了 需要知道是哪个进程 比如80端口 可以这样 netstat -tunlp|
- 四十一、python面向对象二
A.成员: 1.字段:静态字段(每个对象都有同一字段),普通字典(每个对象都有不同的数据) 2.方法:静态方法(无需使用对象的内容),类方法,普通方法(使用对象中的数据) 3.特性:普通特性(将方法伪 ...
- 【C++进阶】getline
在<istream>中的getline函数有两种重载形式: istream& getline (char* s, streamsize n );istream& getli ...
- eclipse link方式安装插件安装不上
只能要features和plugins两个文件夹,其他文件需要删除
- ES6数组的拓展
扩展运算符 扩展运算符(spread)是三个点(...).它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列. console.log(...[1, 2, 3]) // 1 2 3 c ...
- Could not load type 'System.Runtime.CompilerServices.ExtensionAttribute' from assembly 'mscorlib 的一种情形
没有引用任何.net 4.5的东西,也没有引用 Newtonsoft.dll,原因是引用了微软的tlb类型库,引用方法如 https://www.cnblogs.com/nanfei/p/108798 ...
- Golang中log与fmt区别
关于使用log与使用fmt的区别 最初的就是直接打印出来,之后一点点升级,比如加上输出的时间,加上goroutine之间的并发操作(打印信息并不能一定按照你规定好的顺序输出来 每次输出的顺序可能会不同 ...