完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
各位大家好,我正在寻找用VHDL语言编写的UDP / IP堆栈(我必须在Spartan-6 FPGA中实现它)。
我正在寻找一个尽可能简单的功能:使用VHDL语言编写,而不是Verilog - 在Spartan-6中实现 - 不使用其他处理器或设备(如Microblaze,PowerPC等 ) - 没有使用外部存储器,没有DDR或外部端口,应该只使用分布式存储器或块ram,没有其他可能性 - 显然免费的UDP / IP堆栈是最好的,但也许可一个可能很好在任何地方UDP / IP堆栈有这些功能吗?非常感谢! |
|
相关推荐
39个回答
|
|
您好
我刚刚做了一个谷歌并发现了很多链接,包括xilinx Xapps, 尝试这个 http://www.cs.york.ac.uk/rts/docs/Xilinx-datasource-2003-q1/Xcell%20Journal%20Articles/xcell_pdfs/xc_insight_voip.pdf |
|
|
|
嗨,
我不久前需要一个UDP的自定义实现(Verilog,没有处理器)。 研究可用内核并没有产生任何好结果,所以我从头开始实现了堆栈。 根据您想要的功能,它可以相对简单或复杂。 你想要IP碎片吗? 你如何分配IP:静态或DHCP; 你需要ARP吗? 您是否需要UDP之上的应用程序协议(如TFTP)以及其他一些注意事项。 谢谢, 叶夫根 |
|
|
|
如果您只是想定期生成UDP数据包,使用相当简单的状态机很容易实现。
欢迎你看一下我写的例子,http://tristesse.org/DigilentAtlysResources就是这样做的。 它在Spartan 6上成功运行。它是用Verilog编写的,但如果您愿意,仅使用UDP / IP /以太网部分就可以轻松地在VHDL中重写。 |
|
|
|
我在spartan 6 Atlys Board下载你的代码我更改了物理地址和IP地址,而不是在板上模拟和刻录它无法在UDP上发送任何数据
请指导我们如何在我的电路板上运行代码 谢谢 |
|
|
|
在该特定实现中,IP报头校验和是硬编码的。
如果您更改它,您的计算机可能会在到达用户空间之前丢弃数据包。 您需要手动重新计算正确的校验和(这很容易)或者为了最终的灵活性,将计算步骤写入状态机(我后来继续执行此操作非常简单)。 |
|
|
|
我面临同样的问题,我如何计算校验和?
我只是更改IP地址和Mc地址,我需要更改任何其他东西吗? 当我烧掉代码时,局域网LED继续运行,但我没有在wireshark上看到任何东西。 你能指导我如何将计算步骤添加到你正在谈论的状态机中。 问候。 法迪 |
|
|
|
阅读维基百科页面上的校验和部分:http://en.m.wikipedia.org/wiki/IPv4#HeaderI手动计算并更新了HDL,但对于任何“真实”应用程序,您需要在
HDL,以便您可以随意更改IP标头。 如果您在解决问题时遇到任何问题,请告诉我。当我下周回到工作岗位时,我会挖掘我的代码。 |
|
|
|
我计算了校验和,我已经尝试但确实得到任何东西
你能告诉我我做错了什么吗? 最初开始 packet_buffer [0] = 32'h0016_d402; // dstmac(8) packet_buffer [1] = 32'hec32_0018; // dstmac(4),srcmac(4) packet_buffer [2] = 32'h3e00_c926; // srcmac(8) packet_buffer [3] = 32'h0800_4500; // hwtype ethernet(4),协议类型ipv4(1),报头长度(1)(* 4),dsc(2) packet_buffer [4] = 32'h0023_1234; //总长度(4),标识(4), packet_buffer [5] = 32'h0000_4011; // flags / frag offset(4),ttl(2),protocol(2) packet_buffer [6] = 32'he53a_c0a8; //校验和(4),srcip(4) packet_buffer [7] = 32'h0103_c0a8; // srcip(4),dstip(4) packet_buffer [8] = 32'h0108_0402; // dstip(4),srcport(4) packet_buffer [9] = 32'h0404_000f; // dstport(4),length(4) packet_buffer [10] = 32'h0000_4846; //校验和(4),数据(4) packet_buffer [11] = 32'h4c4c_4f40; //数据 结束 我的 来源IP:192.168.1.3 目的地IP:192.168.1.8 Source Mac Addrss:00183e00c926 目标Mac地址:0016d402ec34 LAN Leds闪烁,但我没有在wireshark上看到任何东西, 在网络上它没有选择我分配给FGPA的IP。 不知道什么是错的? |
|
|
|
你的校验和错了。
我明白了: 4500 +0023 +1234 +0000 + 4011 + 0000 + c0a8 +0103 + c0a8 +0108 = 21AC3 2 + 1AC3 = 1AC5 注意事项: 进行计算时,将IP校验和设置为零 您只校验IP标头。 跳过MAC地址和hwtype。 从4500开始。假设您使用了没有选项的普通标题,您将在dstip之后停止。 srcport是UDP头的第一部分。 |
|
|
|
嗨乔尔,
你的atlys的以太网模块只是为我节省了很多时间! 非常感谢你! :) 我做了一些快速添加,所以我不必每次都重新计算校验和。 这个片段来自我稍加修改的“ethernet_test_top.v”。 function [15:0] header_checksum; 输入线[191:0] pack_32_6_header; reg [19:0] chk; reg [15:0] val_uint16; 整数i,j; 开始 chk = 0; for(i = 0; i 另外,我在您的ISE项目设置中注意到您将设备设置为speedgrade -3。 前段时间我联系了Digilent,询问了Atalys上的speedgrade是什么,答案是它是-2速度级别。 (我无法在电路板上轻松检查它,因为它上面装有一个小型无源冷却器)。 在时间报告中,我注意到TS_clk_125_tx_clkout0中有一些失败的路径,但看起来你可能只知道那里发生了什么并忽略了那些。 无论如何,非常感谢gbit模块! :) |
|
|
|
嗨mrflibble,
真棒! 我很高兴你让它运转起来。 我希望能够将报头字段从数据包更改为数据包,因此我将代码添加到我的状态机中: module ip_header_checksum( 输入clk, 输出线[15:0]校验和, 输入线[31:0]标题, 输入线复位 ); reg [31:0] checksum_int; reg [2:0] header_count; 永远@(posedge clk) 如果(重置)开始 checksum_int 然后在数据包生成器代码中: reg [31:0] header_checksum_input; wire [31:0] header_checksum; reg header_checksum_reset; ip_header_checksum ip_header_checksum_1(.clk(mac_clk),. checksum(header_checksum),. head(header_checksum_input),. redset(header_checksum_reset)); //然后在数据包生成FSM中,开始发送之前 //什么都没有,生成校验和: 0:header_checksum_reset 然后,当您开始将数据包发送到MAC时,请在适当位置的校验和中替换。 我最终逐字逐句地做了,而不是像我在示例中那样使用循环。 这是一个更多的代码,但它使得按顺序发送一系列不同的数据包变得容易多了! 使用Verilog任务将代码减少到: 71:开始 mac_flags 从存储器中复位信号与不同时钟域的同步存在问题。 它似乎没有在这样一个简单的设计中引起任何问题,但你应该修复它的完整性(我在我正在进行的工作项目中做了,但没有更新提取的例子)。 感谢有关Spartan-6速度等级的信息! 手册非常参差不齐,我不确定为什么我认为它是-3。 我会更新我网站上的信息。 |
|
|
|
嗨乔尔,
我想我可能会提升该数据包生成代码,看看它是否适合“atlys_ethernet_test_v1-20110404.zip”版本。 :-)虽然我想在这里阻止一个小缺点。 前段时间我在Nexys2上为USB fifo做了类似的状态机(也适用于Atlys)。 而且一个小缺点是:FSM的forassembling数据包真的很快,你真的希望你有一些微控制器。现在我用picoblaze做微观的东西,但对于一些我真正看到的东西有点 更多魅力。 我注意到你也考虑了aeMB。 同样在这里! 然而,我遇到的是学习曲线看起来有点陡峭。 文档/示例的可用性对此没有帮助。 这是一种很好的说法,因为我认为缺乏可用的良好文档和示例会阻碍进度。不管怎样,或者我是盲目的,我错过了所有优秀的资源。你有没有取得任何进展 aeMB前线? 我愿意在不久的将来给它留一些时间,但是如果可以避免的话,我不打算花费大量的时间。所以碰巧遇到任何好的aeMB资源? 特别是用于组装UDP数据包...... |
|
|
|
你是绝对正确的 - 每次我添加另一个状态时,我都更加确信我应该使用微控制器,但我认为FSM方法有助于显示GEMAC如何工作,这很方便,因为它没有记录。
因为我真的只想发送带有短标题的FIFO的内容,所以它并不太糟糕。 无论如何,当我达到痛苦的门槛时,我已经非常放弃了aeMB。 文档基本上不存在或完全过时,并且一些测试平台不起作用,尽管作者非常友好地帮助我找到正确的顶级文件并使其模拟。 幸运的是,aeMB上有一个很好的UDP数据包资源,那就是USRP2。 您可以从http://www.gnuradio.org/redmine/repositories/browse/gnuradio/usrp2下载固件。 再次,你需要四处寻找,因为不清楚一切都做了。 我可能花了将近十个小时的时间将aeMB拆开 - 我本来可以更好地购买EDK许可证并能够立即恢复工作。 如果您以免费替代方式出售,您可能还需要考虑适用于Atlys的ORPSoC:http://chokladfabriken.org/projects/orpsoc-atlys |
|
|
|
|
|
|
|
“无论如何,当我达到痛苦的门槛时,我已经非常放弃了aeMB。文档基本上不存在或者完全没有过时,并且一些测试台不起作用,尽管作者是kindenough到
帮助我找到合适的顶级文件并让它进行模拟。“嗯,这正是我想在这里避免的那种情况。 这是一个开源项目。 因此,即使我要勉强通过它,那么仍然很难进入其他可能想要使用这个项目的人。 并且确保您的开源项目在开始之前就会死得很厉害的好办法就是让门槛真正达到高水平!而且,我只想使用一些易于使用的组件。 ;)也许我应该坚持使用picoblaze。 当然,缺少C编译器有哪些缺点。 对我个人来说并不是什么大问题,但是从开源的角度来看......能够使用C代替汇编有助于让人们更轻松一些。更多的权衡! ;)至于ORPSoC,这对于这个应用程序看起来有点矫枉过正。基本上我正在寻找一个免费的非盈利软微型小型脚印,其中有一个像样的C编译器可用......但也许ORPSoC比我更小 我想RTFM应该更彻底...... @ basset:UDP / IP核看起来像是商用的。 或者我错过了该网站某处的“免费非营利用途”消息? |
|
|
|
您可以考虑使用LatticeMico8或LaticeMico32软处理器。
它们都是免费的,开源的,并且由GCC编译器支持。 我没有将它们与Xilinx FPGA一起使用,并且我认为没有找到任何好的示例或教程,但它可能值得花时间投资,因为它们可能比OpenCores上的任何东西都更高质量和更好的支持。 |
|
|
|
嗨,大家好。
我已经下载了Atlys BSB支持文件,发现Atlys主板上使用的FPGA的部件号是XC6SLX45-3CSG324C,这意味着它的速度等级为-3,而不是-2。 有关完整信息,请访问我的网站:http://projects.armandas.lt/atlys-fpga-speed-grade.html |
|
|
|
嗨乔尔,
以太网模块上的出色工作! 这一定很难。 我买了火星MX2板 Enclustra。 该模块使用KSZ9021千兆位PHY,而不是 Marvell M88E1111。 我正考虑修改你的 代码与我的PHY通信,但我从来没有沟通过 用这样的芯片。 我无法确定这是否相对容易 做,还是需要几个月才能完成? 在简单的gemac中有26个verilog文件,我没有遇到什么麻烦 识别哪些用于定义与PHY芯片的通信。 有谁知道PHY芯片通用类型或者每个都是寄存器 制造商的PHY有不同的寄存器? 我将非常感谢你能给我的任何建议。 最好的祝福, Bojan Kuljic |
|
|
|
以太网PHY使用几种不同的标准。
不幸的是,88E1111和USRP MAC使用GMII作为千兆位,这与您的KZZ9021支持的RGMII标准不兼容。 您当然可以扩展MAC以支持RGMII,但由于接口的时序要求更严格,我认为这不是一项微不足道的任务。 如果你有许可证,我可能会建议使用Xilinx MAC。 就寄存器(使用MDIO接口设置)而言,我的理解是制造商之间可能存在一些相同的寄存器,但您无法真正依赖它并应始终阅读数据表。 如果您的要求不是太复杂,这通常非常简单 - 只需浏览列表,看看每个人是否听起来像是您需要做的事情。 例如,对于我的88E1111代码,我知道MAC仅支持千兆位速度,因此我禁用了10和100 Mbit的协商。 |
|
|
|
只有小组成员才能发言,加入小组>>
2379 浏览 7 评论
2794 浏览 4 评论
Spartan 3-AN时钟和VHDL让ISE合成时出现错误该怎么办?
2261 浏览 9 评论
3335 浏览 0 评论
如何在RTL或xilinx spartan fpga的约束文件中插入1.56ns延迟缓冲区?
2427 浏览 15 评论
有输入,但是LVDS_25的FPGA内部接收不到数据,为什么?
755浏览 1评论
请问vc707的电源线是如何连接的,我这边可能出现了缺失元件的情况导致无法供电
543浏览 1评论
求一块XILINX开发板KC705,VC707,KC105和KCU1500
364浏览 1评论
1960浏览 0评论
681浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 07:12 , Processed in 1.663562 second(s), Total 113, Slave 96 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号