在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 79951|回复: 181

[原创] 用FPGA实现简单的UDP/IP通信

[复制链接]
发表于 2017-1-16 10:30:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 dogbear2245 于 2022-11-20 23:05 编辑

转眼间,2016年就过完了。年底,公司也从忙碌和喧嚣中安静了下来,近几周都无所事事。每天随意的逛着各电子论坛,微博,刷着网页。某天发现有一个帖子写的用FPGA软核实现的UDP协议,突然想着,能不能用纯硬件语言做个UDP协议呢?      说点题外话,自从来到现在的小公司有个3年多了,公司小到不能再小(比大学时我呆的那个实验室的人数都少)。原来在大公司工作,只需要在自己研发的那个微小的方向上做好本职工作就可以,工作十分的纯粹。现在在这里,什么工作都做,研发,生产,技术支持,甚至偶尔还得跑跑市场,做合同等等。到上面我说有那个想法的时候,恐怕都好久没有写过代码调试过东西了。所以,闲着也是闲着,为了不让自己太生疏,决定自己来写点东西。纵然水平有限,那也是自己的,不是吗?
      说到做到,花了一周左右时间复习了下相关的网络协议(都还给大学老师了),再花了一周时间做系统设计,把代码敲完,然后就是仿真,调试。做的过程中,正好有位朋友需要用到这东西(很奇怪居然还有人需要这没有多大应用价值的玩意,这个后面再谈),就顺便把这块代码发给他去试用,来回修改调试了之后,他居然说用上了。。。。。。完了之后,想着这东西如果就这样躺在自己电脑硬盘里,是不是闷了点?共享出来让初学者交流学习,让高手批评指正,岂不更好?
      说正事:
            1)此模块就做了UDP,没玩TCP,那玩意控制流程很复杂。我看到有人说用纯硬件语言实现了TCP/IP协议栈,对此我表示怀疑。我怀疑的不是它的不可实现性,而是,在没有什么应用价值的前提下,是否有人愿意花费如此多的功夫去做这件事情。当然了,毕竟我才疏学浅,见识也少,所以我也仅仅只是怀疑。
            2)受限于手头的硬件板,只在10M/100M的网络上做了验证和调试,如果用在千兆网上,给模块适配一个支持千兆的MAC就可以了。
            3)在本例中若网络负荷过大,报文会直接丢弃,无论何种类型,UDP本身也不保证交付。
            4)我在上文很多地方都说过应用价值不大这个概念,为何?其实这个是从产品实现,项目交付的角度上来说的。在现有的技术条件下,如果需要使用UDP/TCP,市面上可以找到一千种自带以太网的ARM/CPU,从高端到低端,从系统设备到消费电子。。。。。。退一步说,如果真的有设计需要在FPGA跑UDP/TCP,FPGA现有自带的软核也可以很方便地完成这个工作,基于C语言的各种网络协议栈代码满世界都是。若不是要做ASIC,有必要花时间去自己写对于硬件描述语言来说繁很繁琐的UDP甚至是TCP么?
              5)有人要骂我了,你说这东西没价值,那你写这玩意装逼?这么说也可以,其实一开始我并不了解这东西有没有应用价值,我的初衷仅仅是找点东西写写,在写的过程中慢慢发现这东西其实没啥意义。巧了,想起前段时间和朋友聊天时说到这个,他说他们有一个已成型产品中需要增加功能,在不更改硬件的前提下需要UDP做数据传输,原有的处理器做网络协议回复消息速度不够,而且资源也有点捉襟见肘。一拍即合,直接就用上了。可是这是去救火,有人会在产品设计阶段就这样设计么? 另外,我说的没有价值,是指没有什么应用价值,用来交流学习,也是可以的。
             6)自己能力有限,设计中肯定会有或多或少的问题,模块的测试也不是那么的充分,搞不好在某些情况下可能会有bug。欢迎各位批评指正!


        附上设计的PDF,先看看大家有没有兴趣,有兴趣我把代码打包上来,没兴趣的话,说明这东西真没啥用。把帖子沉了吧~~~
        马上要春节了,提前祝各位新春快乐!












20170120更新:
论坛内学习氛围比较高,看来我还是把代码贴出来吧。
再次强调以下几点:
      1)应用层只有UDP,没有TCP;
      2)只有网络层和应用层,没有MAC层,如果需要上板测试,需要适配一个MAC,FPGA厂家提供的MAC IP或者自己写一个简单的,都可以。如果是初学者觉得去写一个MAC甚至使用IPCORE的MAC会有些难度的话,我这里也写了一个简化版的MII接口的10M/100M ETH MAC,自己在硬件板上测试了一下可以用。有人要的话,给我发邮件我发给你,使用中有何问题,可以无偿提供远程支持。
      3)代码可以应用于千兆网,MAC层适配支持千兆的MAC就可以了。
      4)代码里有仿真用的testbench,DUT里不带mac,测试的是UDP环回模式。
      5)还有一点需要注意,这个模块的底层接口是MAC,有人用的硬件方案是集成的PHY+MAC的芯片例如DM9000A,这种硬件结构不太适用于本设计。还不如直接用软核处理。
更新:
      时间已过太久,个人工作环境和内容也发生了很大变化,无法提供任何技术支持。况且技术更新换代更快,原有的代码已不再有太多价值,删除。


发表于 2017-1-16 13:46:21 | 显示全部楼层
把代码打包上来吧
发表于 2017-1-16 13:48:41 | 显示全部楼层
你好,请问你这个做测试的时候网口是MII模式还RMII模式?可以看看代码吗
 楼主| 发表于 2017-1-16 13:53:28 | 显示全部楼层
回复 3# konrad_26
MII模式,如果你要代码,留下邮箱我发给你~
发表于 2017-1-16 14:04:50 | 显示全部楼层
回复 4# dogbear2245

konrad_26@sina.com,谢谢,请问你对RMII模式的有过研究吗
发表于 2017-1-16 14:30:13 | 显示全部楼层
也可以发一份给我么?paulyang@ustc.edu.cn
 楼主| 发表于 2017-1-16 14:36:10 | 显示全部楼层
回复 5# konrad_26


   不客气,RMII就是MII接口的简化版吧,这个应该是PHY和MAC之间的接口,和本设计内容应该是没有关系的。MII接口和RMII接口本身区别也不大,这个找点资料应该就能弄明白。   代码的话,我晚些时候发给你~~~
 楼主| 发表于 2017-1-16 14:43:45 | 显示全部楼层
回复 6# oldpaul2016


   已发,请查收
发表于 2017-1-16 15:49:32 | 显示全部楼层
thanks a lot, and hopefully everything goes on fine for the coming CNY.
发表于 2017-1-16 17:34:14 | 显示全部楼层
哈哈  很棒啊,包括ARP部分吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-26 02:53 , Processed in 0.020867 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表