广告

原创 【转】FPGA之网络编程(DE2_UDP)

2013-7-15 17:09 588 0 分类: FPGA/CPLD

http://www.360doc.com/content/12/0426/11/7769620_206630142.shtml 一文和下面的文章结合看效果比较好

前一篇文章写过关于利用DM9000A发送一些数据,通过一个回送装置,在DE2上又可以接收回来,这个程序从实际的应用来看,没有多大的用处。Altera给出的这个例子肯定是没有多大的实际价值的,他只是告诉你我们DE2能够做网络传输,仅此而已。

  在上一篇提到,这个实验是个基础,他为后面做网络方面奠定了一个很好的基础。在这个实验的基础上,我在国外的一个论坛上下载到了一个UDP协议的发送数据的程序。下面对这个工程做一下小小的讲述。

  这个工程从硬件方面来看,没有什么东西可讲的。但是,有一次,当我自己重新从头开始建立工程的时候,却发现出现了问题。最终,我一步一步的找到了问题的原因,问题最终出现在CPU的设定里面,在CPU设定的时候有一个cache line选项,那里面只能选择4B,不能选择32B,这里我翻查了一部分说明书,也没找到为什么是这种情况,而且NIOS II 是不公开的软核,我不知道内部的工作原理,也没有研究过。这只能当做遗留的一个困惑吧!另外一点,在SOPC里面这个工程用的是200M的时钟,已经相当快了。

  主要来讲讲软件方面吧!在这里Altera并没有用来大家通用的socket编程,这里面,仅仅在硬件上进行操作,就是利用TCP/IP协议里面规定的一样,封装每个数据包,将数据包利用DM9000A里面给定的驱动API函数传输出去。这里面又让我学到了很多内容。主要就是封装数据包的各种格式。

  封装主要包括以下几个方面:

  MAC头+IP头+UDP头+发送的数据。这里就很符合TCP/IP里面讲的各个层的对应。最底层就是网络接口层(对应上面的MAC),紧接着是网络层(对应上面的IP层),上面就是传输层(这里用的是UDP协议,对应于上面的UDP头),最顶层就是应用层,这里就只有要发送的数据。这就是所有书上讲的TCP/IP协议的各个层,有了这个程序,就很容易的理解每个层之前的分工,以及他所对应的含义。

  对于具体每个层是如何封包,每个数据又表示什么意义,这些就不一一细讲,因为这些都是固定的,如果需要,可以查看相关的书,就能看明白。了解了大框架,里面的东西就好理解了。

  有了这些知识的储备,再来回过头看看整个工程的运作情况。首先需要计算一些封装包里的数据,包括包头长度,校验位等等。之后就是将MAC头+IP头+UDP头都封装在一个字符数组里面,以后每次打包数据的时候,放在这些包头后面就可以了。之后产生要发送的数据,进入一个无限循环,利用API函数将数据发送出去。这里,用网线将DE2和PC机连上,在PC机上,我们采用一个网络接收软件来实时接收发送的数据。这里,我采用的wireshark这款软件,从软件接收的结果来看,传输速率达到5.9Mbps,数据发送的也是正确的。说明整个工程是正确的,也是由实际意义的。

  做一下简单的总结吧。

  1.在这个工程下载来之后,我运行之后,是没有出现结果的。主要错误是,一个是在IDE里面编译的时候有错误,这个错误告诉我是软件的版本问题,这个问题解决的办法是将Debug文件夹删掉,这个呢,是参照以前编写C语言的经验想出来的,果然最后问题就解决了。

  2.在随后有一次,我自己建立这个工程的时候,数据发送有问题,速度是原来的十分之一,想到了很多原因,首先就是DM90000A驱动的问题,看了一看驱动,最后发现确实是由点问题,驱动更新之后,他没有完全识别有的管脚信号,最后改了一下驱动,其次就是,在IDE控制台上,不要用printf函数,打印出发送的数据,这样的话,发送速率会减慢的。可能CPU要来做printf这个函数,而减慢吧、

  3.最后要总结的就是这个工程的意义所在,因为这个工程奖DE2的数据发送到PC机上,这样的话,就可以为网络视频监控系统解决了最关键的一个问题,传输速率也得到了保障。但是,远远没有想到,其实在整个工作中,这一点其实不是最难点。

  来分析一下将来的工作难点:

  完成的工作:

  1.前端数据的采集、缓存、VGA显示都已经很好的完成;

  2.数据的发送,利用cpu不断发送数据也基本完成;

  3.PC机上监控界面也开发了一部分。

  难点工作:

  1.在数据采集、缓存之后,如何利用cpu来不断地取数据呢,首先在硬件采集的时候,SDRAM已经用上,这样的话,在SOPC里面,就没法连接上SDRAM,这样的话就要建立一个数据通道,即是一个FIFO,但是这个FIFO的建立是很困难的,首先CPU的工作时钟是200M,像素的采集时钟是25M,要达到这样的速率匹配是很困难的;其次就是,如何在IDE里面控制数据的读以及暂停CPU的读取,因为FIFO里面肯定会出现读空的情况。

  2.从数据发送到PC机,以及在PC机上利用VC开发一个界面,在界面的制作过程中,也遇到了很多问题。现在终于把问题解决了,利用两个线程,一个线程用来接收数据,当接收到一帧数据的时候,利用消息告诉主线程,将数据通过位图的形式画出来,这个肯定是没有问题。这里面应该是有问题的,因为PC机没有和DE2进行用户界面交换,他只是用来接收数据,没有发送命令啊以及一些等等控制命令。但是这些应该是比较好解决的,因为毕竟PC机上,C语言的调试还是比较方便的。

  所有的难点就是在第一个上,因为我无法对这个FIFO里的数据读取,看是否正确,因为视频数据时很大的,没法看。这一点是很困惑的,所以整个系统都耽误下来了,好久都没有突破。希望在接下来的时间里,找到突破的地方。 

广告

文章评论 0条评论)

登录后参与讨论
相关推荐阅读
sunyzz 2017-08-19 10:38
【博客大赛】AVALON总线介绍
1、AVALON总线简介Avalon总线是一种协议较为简单的片内总线,是ALTERA公司定义的片上互联总线,该总线可以将诸如NIOS II的CPU与其他外设连接起来,进而进行数据交换。AVALON总线...
sunyzz 2017-08-17 21:36
【博客大赛】不要轻易做职场滥好人
小A毕业于国内普通高校,但是他聪明,勤奋,能干,动手能力强,可是即便有这些优点也不能让小A轻轻松松找到一份好工作。这不,去年9月份小A好不容易找到一份工作,然后立马就入职了C公司,生怕C公司过两天不要...
sunyzz 2017-08-16 21:15
【博客大赛】IC设计低功耗技术四
五:工艺层面的降低功耗前面几节都是在讨论设计人员如何在前期阶段,中期阶段降低功耗,涉及到软件层面的,硬件层面的,这些技巧基本都是前辈总结出来的,或者根据理论推论出来的。但是到了后期,想降低功耗基本就要...
sunyzz 2017-08-14 22:35
【博客大赛】IC设计之低功耗技术三
四:RTL(寄存器传输)级的低功耗设计4.1 状态机的设计状态机编码中一般有两种方式,普通的二进制编码,特殊的格雷码,格雷码的特点是两个数据之间的跳变时只会有一个bit在toggle,显然比起多bit...
sunyzz 2017-08-12 16:51
【博客大赛】IC设计之低功耗技术二
三、架构层面的降低功耗系统的实现有很多的方式,每种方式对功耗的影响都不相同,本节主要介绍架构对功耗的影响。3.1 高级门口电路 在同步电路系统中,时钟占据了大部分的动态功耗,因而在一些情况下,如果有些...
sunyzz 2017-08-12 10:37
【博客大赛】IC 设计之低功耗技术一
一、前言随着计算机技术和微电子技术的迅速发展,嵌入式系统应用领域越来越广泛。节能是全球化的热潮,如计算机里的许多芯片过去用5V供电,现在用3.3V,1.8V,甚至更低的电压。目前的低功耗设计主要从芯片...
我要评论
0
0
广告
关闭 热点推荐上一条 /1 下一条