广告

原创 以太网,FPGA就一定能搞定系列之UDP传输实例

2014-1-10 20:03 7085 0 3 分类: FPGA/CPLD 文集: SF-CY3 FPGA套件开发指南

以太网,FPGA就一定能搞定系列之UDP传输实例

本系列博文节选自特权同学的FPGA开发电子书《SF-CY3 FPGA套件开发指南》。

最新设计文档下载地址:http://pan.baidu.com/s/1em79m

1 概述

本实例的硬件系统和前面两个实例一样,只是在CH395芯片的应用上使用了不同的传输模式。本实例要传输的是UDP协议的IP包,只要设置CH395工作于UDP模式,设置好收发端口号,就可以收发UDP协议的IP包了。通过这个实例大家可以初步掌握UDP协议的传输和格式。

2 UDP协议解析

UDP不提供可靠性:它把应用程序传给IP层的数据发送出去,但是并不保证它们能到达目的地。UDP帧是IP帧的一种,它的协议格式如图所示。IP首部的协议字段数据必须为0x11(即10进制的17);在原有的IP数据报中, 又分为了UDP首部和UDP数据两部分;UDP首部有2个字节的源端口号、2个字节的目的端口号、2个字节的UDP长度和2个字节的UDP校验和。

20140110194922453.jpg

端口号的概念后面会详细介绍。UDP长度字段指的是UDP首部和UDP数据的字节长度。该字段的最小值为8字节(发送一份0字节的UDP数据报也是可以的)。这个UDP长度是有冗余的。IP数据报长度指的是数据报全长,因此UDP数据报长度是全长减去I P首部的长度。UDP检验和覆盖UDP首部和UDP数据。UDP检验和是一个端到端的检验和。它由发送端计算,然后由接收端验证。其目的是为了发现UDP首部和数据在发送端到接收端之间发生的任何改动。如果发送端没有计算检验和而接收端检测到检验和有差错,那么UDP数据报就要被悄悄地丢弃。不产生任何差错报文(当IP层检测到IP首部检验和有差错时也这样做)。

3 UDP模式介绍

UDP是一个简单的,不可靠的,面向数据报文的运输层协议,传输速度较快,不能保证数据能达到目的地,必须由应用层来保证传输的可靠稳定。

如图所示,FPGA向CH395写入若干字节数据流后,CH395数据流封装在UDP数据部分进行发送。UDP一包可以发送的最大长度为1472字节,如果FPGA写入的数据流长度大于1472字节,CH395会将数据流封装成若干个UDP包进行发送且每包成功发送后都会产生SINT_STAT_SEND_OK中断。FPGA每次写入的字节长度不得大于发送缓冲区长度(2KB),且收到SINT_STAT_SENBUF_FREE中断后才可以进行下一次写数据。

 

6.2.jpg

 

当CH395接收到UDP报文后,将UDP数据复制到socket接收缓冲区中并产生SINT_STAT_RECV中断,FPGA收到此中断后,可以发送命令CMD_GET_RECV_LEN_SN来获取接收缓冲区数据的长度,然后发送命令CMD_READ_RECV_SN来读取缓冲区的数据。FPGA可以一次将所有数据读出也可以只读出部分数据,由于UDP模式下CH395无法提供流控,建议接收到的数据及时快速的读完,以免被后续的数据覆盖。

4 TCP/UDP端口介绍

TCP和UDP服务通常有一个用户/服务器的关系,例如,一个Telnet服务进程开始在系统上处于空闲状态,等待着连接。用户使用Telnet用户程序与服务进程建立一个连接。用户程序向服务进程写入信息,服务进程读出信息并发出响应,用户程序读出响应并向用户报告。因而,这个连接是双工的,可以用来进行读写。

TCP或UDP连接唯一地使用每个信息中的如下四项进行确认:

●  源IP地址:发送包的IP地址。

●  目的IP地址:接收包的IP地址。

●  源端口:源系统上的连接的端口。

●  目的端口:目的系统上的连接的端口。

端口指网络中面向连接服务和无连接服务的通信协议端口,是一种抽象的软件结构,包括一些数据结构和I/O(基本输入输出)缓冲区。它是一个软件结构,被客户程序或服务进程用来发送和接收信息。一个端口对应一个16比特的数。

电脑一共有65535个端口,1-1024属于保留端口,是标准服务端口,是一些系统服务的端口,随便用的话,会起冲突,导致服务无法运行,如21,80端口。1024后面的就属于自由端口了,供后续开发的小程序使用。

上面的描述可能有些学术化了,不是很容易理解消化。我们可以简单的打个比方来说明TCP/UDP的端口为何物。如图所示,这是一个港口,布满了密密麻麻又井然有序的集装箱。我相信对于这样一个港口,对于集装箱的摆放一定划分了很多区域或者打上了很多标签,便于分类和管理。如果把以太网帧比喻为一个个装满货物的集装箱,那么港口的区域划分或者标签张贴就好比TCP/UDP的端口定义,端口的作用应该就是为了便于管理和分类,避免一个新的以太网帧到来时,所有的应用程序一拥而上。TCP/UDP端口保证了“一个萝卜一个坑“式的井然有序。

 

6.3.jpg

 

5 软件设计

本实例软件流程如图所示。UDP模式设置中需要设置目的主机的IP地址,即PC机的IP地址192.168.1.103;并且设置目的端口为8000(10进制),源端口为5000(10进制)。随后在主循环中等待PC端来的一个UDP帧,则FPGA打印接收帧数据,将所有数据取反后发回给PC机。那么随后的板级调试,我们需要率先在PC端制作一个端口号对应的UDP帧发给FPGA端,随后在PC端观察数据取反后的UDP帧是否返回了。

 

6.4.jpg

 

6 板级调试

下载sof文件,在线运行EDS软件工程。随后我们打开“科来软件分析系统”,按照前面一个实例新建一个IP包,如图所示,该IP包的源主机是PC端,目的主机是我们的FPGA端,因此我们需要相应的设定源主机和目的主机的MAC地址和IP地址。另外,这个IP包是UDP协议格式的,因此我们也需要设定上层协议值为17(10进制)。在FPGA端,我们设置源主机(FPGA)的端口号为5000,目标主机(PC)的端口号为8000;因此,在PC端则恰恰相反,我们设定源主机端口号为8000,目的主机端口号为5000。IP包的总数据长度为108个字节,包括8个字节的UDP首部和100个字节的用户数据,100个字节数据是我们自己输入的,随后FPGA端会对这些数据取反然后发送回PC端。

 

6.5.jpg

 

当我们在PC端发送UDP协议的IP包后,如图所示,Nios II Console窗口除了之前打印的版本和连接信息外,同时也打印除了新接收到的100个字节数据,随后取反并发送出去了。

 

6.6.jpg

 

我们可以回到“科来网络分析系统”,我们查看IPàUDP包的解析,这里有两个包,即以192.168.1.103和192.168.1.101为源IP地址互发的UDP包,即我们刚刚的实验中所产生的两个包。如图所示,我们可以分别查看这两个包的解析,尤其大家可以对照两个包的数据是取反的。这和我们的实验初衷是一致的,这两个UDP包都很好的完成了任务。

 

6.7..jpg
 

7 基于labview UDP调试助手的板级调试

首先我们需要安装SF-CY3配套光盘tools文件夹下的SF-NET UDP Tools.rar压缩包内的UDP调试助手工具,这个UDP调试助手是使用labview编写。双击压缩包内的setup.exe安装软件,弹出安装界面如图所示。

6.8.jpg

 

完成软件工具安装,和前面一样,在线运行实例工程。接着我们打开开始菜单的“程序àUDPà应用程序”。

6.9.jpg

 

随后就弹出如图所示的UDP调试助手主界面。第一次开启软件默认就运行了,在设置好远程目的IP地址和端口号后,若希望其能够生效,大家需要先点击停止运行,然后重新开始运行方可。

6.10.jpg

 

前面的实例我们已经知道,FPGA端的IP地址是192.168.1.101,PC端的本地端口是8000(即FPGA的目的端口号),PC端的远程端口号是5000(即FPGA的本地端口号)。

我们重新运行UDP调试助手,为了便于观察显示数据的收发情况,我们将“发送数据”和“接收数据”对应的“显示格式”都设置为“16进制”,在发送数据窗口中输入一长串的16进制数据,然点击右侧的“发送”按钮,随后我们便可以看到“接收数据”窗口中打印了一长串由FPGA端返回的数据,大家可以仔细看看,这些数据是否都是发送数据取反后的结果。

 

6.11.jpg

在EDS的Nios II Console中,我们也可以看到打印信息如图所示。

 

6.12.jpg

有兴趣的朋友也可以用科来网络分析系统来监控我们使用UDP调试助手收发数据的过程。

广告

文章评论 3条评论)

登录后参与讨论

ilove314_323192455 2014-9-2 18:26

PCB延时当然是根据实际PCB板的走线长度换算的了

1494323808_418273596 2014-9-1 00:02

特权同学老板,请问时序约束时候的,pcb延迟是怎么计算的,还有tco,tsu,th是怎么后获得的,cyclone手册中有吗

854200441_829643006 2014-1-16 10:12

很好,挺有帮助的。
相关推荐阅读
特权ilove314 2016-06-30 21:16
例说FPGA连载6:FPGA开发所需的技能
例说FPGA连载6:FPGA开发所需的技能 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   前面的文字已经做了很多铺垫,相信读...
特权ilove314 2016-06-28 21:09
例说FPGA连载5:FPGA的优势与局限性
例说FPGA连载5:FPGA的优势与局限性 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   若要准确评估FPGA技术能否满足开...
特权ilove314 2016-06-28 21:05
例说FPGA连载5:FPGA的优势与局限性
例说FPGA连载5:FPGA的优势与局限性 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   若要准确评估FPGA技术能否满足开...
特权ilove314 2016-06-26 22:11
例说FPGA连载4:FPGA语言与厂商介绍
例说FPGA连载4:FPGA语言与厂商介绍 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   Verilog与VHDL 说到FP...
特权ilove314 2016-06-23 21:26
例说FPGA连载3:FPGA与其它主流芯片的比较
例说FPGA连载3:FPGA与其它主流芯片的比较 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   FPGA、ASIC和ASSP...
特权ilove314 2016-06-21 20:32
例说FPGA连载2:FPGA是什么
例说FPGA连载2:FPGA是什么 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   2015年伊始,Intel欲出资百亿美金收...
我要评论
3
0
广告
关闭 热点推荐上一条 /1 下一条