来源:EETOP论坛 作者:dogbear2245
转眼间,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,先看看大家有没有兴趣,有兴趣我把代码打包上来,没兴趣的话,说明这东西真没啥用。把帖子沉了吧~~~
马上要春节了,提前祝各位新春快乐!
联系客服