FPGA调试网络的坑

1 篇文章 0 订阅
1 篇文章 0 订阅

这里写自定义目录标题

FPGA调试以太网记录

手头有一块spartan6的FPGA开发板,附带有摄像头和LCD显示屏。厂家给了源代码,用于驱动摄像头以及将拍摄到的图片显示到屏幕上。 编译原厂代码,可以正常运行(屏幕更新速度有点慢)。

调试记录

  1. 将camera程序与因特网程序整合在一起,嗯,效果不错,图像正常显示,且使用网口调试助手可以和FPGA进行网络通信;
  2. 在因特网程序中,添加ARP协议的实现,这里稍微有点小坑,ARP包自身的数据量较少,不能形成一个符合最小数据量的数据包,因此在发送网ARP数据包之后,还需要发送一些填充位(使用的RTL8201,不具备自动生成FCS及自动填充的功能),然后才能实现ARP协议;
  3. 开始尝试Camera程序与因特网程序之间的交互,先来一个简单的,摄像头每采集一副图像,则发送一个VSYNC信号,FPGA检测到该信号后,则向网口发送一个特定的字符串,不难,一次通过;
  4. 统计每幅图像的像素的个数,设定pixCnt变量,每接收到一个有效的pclk,则加一,当FPGA收到VSYNC信号后,将该变量发送到上位机,同时将该变量复位;
  5. 截取原来应该发送到屏幕的内容,将其发送到上位机。一个IP数据包发送1024个字节,根据计算,需要发送255个数据包才能够完成一副图像的发送。
  6. 开始遇到问题,只能接收到一个数据包发送的1024字节,其他的收不到,查早原因,首先怀疑是不是数据量太大,那么将每一包的数据量缩减到40各字节,且每次只发送3个数据包,仍然存上述的问题,每次仅能接收40个字节。使用chipscope检查发送的内容,确实是发送了3个数据包,但是上位机收不到。然后怀疑发送的数据在计算FCS是不是有问题。通过chipscope查看每次发送的数据,并利用VC计算每一帧正确的FCS,与FPGA计算的FCS相比较。都没问题,数据内容没问题,IP头的校验码没问题,FCS没问题。
  7. 问题的症结可能并不在你所考虑的本身,就像打败方便面厂家的不是其他厂家,而是外卖。 在查看chipscope波形时,发现,每个数据包的间隔(即发送完前一个数据包的FCS到再次发送数据包的前导码之间的时间间隔)为4各时钟周期,按照25M的时钟,这个间隔为160ns。这里面会不会有什么问题。
  8. 上百度,搜索IP数据包 间距关键字,原来还有一个叫IFG(Interface Gap)的东西,是为接收设备预留一段短暂的恢复时间,从而为接收下一帧作准备,最小值为发送96个bit的时间,算一下,100M的网络至少需要960ns。 更改代码,每发送完FCS之后,预留1us的时间。 果然是这个问题。
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值