网站公告列表

  没有公告

加入收藏
设为首页
联系站长
您现在的位置: 61IC中国电子在线 >> 评测 >> DSP板卡评测 >> C6000 >> 文章正文
  [组图]DM642上TCP/IP协定的实现及性能测试           ★★★ 【字体:
DM642上TCP/IP协定的实现及性能测试
作者:Free    文章来源:本站原创    点击数:    更新时间:2008-2-20    

摘要:高性能600MHzTMS320DM642是可编程的数字多媒体处置器,为了理解其对于多媒体数据通讯的支撑,本文针对DSP芯片上的网络开发工具NDK进行了钻研,测试了其在UDP传输进程中的CPU效力,对其在不同传输速率和二级缓存大小的条件下的表现给出了比拟。解释了DM642是一款很实用于多媒体通讯的数字信号处置器。
症结词:DSPDM642NDKTCP/IPUDP;多媒体通讯

随着互联网技巧的发展,嵌入式的多媒体终端日益普及,在嵌入式芯片上多媒体通讯的钻研逐渐成为热门的课题。多媒体尤其是视频图像的实时通讯有数据量大,延时请求严厉等特性,而嵌入式芯片在处置能力、存储容量上与通用芯片都有差距,因此能否使用有限的资源实现高效力的通讯协定,是嵌入式芯片能否实现多媒体通讯的症结。

TITexas Instrument)公司是世界领先的DSP制造商,它们的C6000系列芯片在嵌入式芯片市场获得了宏大的胜利,DM642就是该系列的最新产品。而新推出的NDK开发套件在DM642上实现了高效力的TCP/IP协定栈,我们选择DM642为平台,钻研和剖析了NDK实现的高效力通讯协定。

1.开发平台和测试环境的介绍

1.1 TI DM642 DSP开发平台

TI公司的DM642是一款专门面向多媒体使用的专用DSP。该DSP内部时钟高达600MHz8个并行运算单元,最大处置能力到达4800MIPS,外部总线时钟100MHzDM642的芯片集成了6432bit的通用存放器,能够在一个时钟周期内处置416bit的乘法和88bit的乘法。为了加强多媒体功效,芯片还集成了3个高精度、可配置的视频端口,10/100Mbps的以太网MAC,面向音频使用的多通道音频串口(McASP),66MHz 32bitPCI以及拥有64个通道的加强型DMA等接口。这些都使得DM642 DSP特别实用于音视频的处置和通讯。

 图1DM642 DSP处置器

DM642的高性能还得益于DSP内部的两级高速缓存(cache)的构造设计,芯片的第一级缓存包孕16KByte的程序缓存(L1P)和16KByte的数据缓存(L1D),第二级缓存(L2)有256KByte,程序空间和数据空间是共用的。它可以设置成存储单元(memory),高速缓存(cache),或者是这两者的联合,具体的分配可以由程序员配置。

 

2DM642两级缓存工作原理

CPU只对L1的数据进行走访,程序代码和数据必须经过外部存储器到L2L2L1的逐级搬移能力被CPU走访。L2存储单元和外部设备的数据交换由功效壮大的加强型DMA掌握器掌握,因此在CPU处置片内的数据时可以通过EDMA把片外的数据倒入片内,到达同步工作以提高效力。由于内部存储器的工作频率与DSP内部时钟同频,而远远高于片外存储器的工作频率,这就解决了DSP外部时钟频率小于内部时钟频率的问题。有试验表明,合理使用两级缓存配合低工作频率的外部存储器,系统的效力能够到达整个使用高工作频率的内部存储器的80%90%

同时DM642可与TIC64x DSP目的代码完整兼容,这大大降落了客户的系统成本,简化了开发进程。

闻亭(Wintech)公司是TI的第三方合作伙伴,该公司推出的DM642EVM板是一个基于DM642芯片的低成本的独立开发平台,可满足视频设计人员使用最新音频和视频算法套件快速进军市场的需求,实用于 VoIP、视频点播 (VOD)、多通道数字录像使用,以及高质量的视频编解码解决筹划。板上有一个600MHzDM642芯片,还集成了4MB Flash32MB 100MHz SDRAM,另外还有音视频采集和输出端口,10/100M以太网接口,仿真器的JTAG接口。EVM板将高性能的DSP内核与集成的音频、视频及衔接性选项进行了完美的联合。我们的TCP/IP协定栈就是在该板上实现的。

1.2 TCP/IP网络通讯协定栈简介

随着近几年网络技巧的发展,以TCP/IP为代表的通用网络技巧已经成为网络通讯的标准。

 

3 RTP/UDP/IP协定栈

上图是典型的IP分层协定栈,底层协定对通讯的影响首要表现在MTU(Maximum transmission unit)的大小对上层打包的制约,例如以太网的802.3协定和无线网的801.1协定对包长都有限制,否则就会丢包,因此在上层协定的实现时要注意这个问题。IP是最为胜利、使用最为普遍的网络层协定,它提供一种努力传送的服务。在传输层,IP网络通常使用两种协定,即TCPUDPTCP提供一个面向字节的,有保证的传输服务。在过错掌握方面,首要使用重传和超时等机制。由于它的延时不可预测性,并不合适实时通讯业务。UDP提供一个简单的不可靠的数据报服务。UDP报头中包孕校验和,能够用来检测和丢弃包孕误码的包。它合适进行实时通讯,本文就是钻研DM642UDP传输数据的效力。RTP是典型的基于UDP/IP的使用层传输协定,它是面向会话的,一个会话与一个传输地址(IP地址+UDP端口)相关联。一个RTP包包孕RTP Header,可选的Payload Header,以及Payload

2 TI通讯开发套件NDK

2.1 NDK开发套件的高效力设计

为了加速其高档DSP的网络化进程,TI公司联合其C6000系列芯片推出了TCP/IP NDK (Network Developer’s Kit)开发套件。

NDK首要的组件包孕:(1)支撑TCP/TP协定栈程序库。其中首要包孕的库有:支撑TCP/IP网络工具的库,支撑TCP/IP协定栈与DSP/BIOS平台的库,网络掌握以及线程调度的库(包孕协定栈的初始化以及网络相关任务的调度)(2)示范程序。其中首要包孕DHCP/Telnet客户端,HTTP/数据服务器示范等。(3)支撑文档 包孕用户手册、程序员手册和平台适应手册。

NDK采纳紧凑的设计办法,实现了用较少的资源消耗来支撑TCP/IP。从实用成果看,NDK仅用200~250K程序空间和95K数据空间即可支撑常规的TCP/IP服务,包孕使用层的telnetDHCPHTTP等。为了最大限度地减少资源消费,TI为其NDK采纳了许多特别的技巧,首要的有:(1UDP socketRAW socket不使用发送或接受缓冲区;(2TCP socket使用发送缓冲区,接受缓冲区依配置文件而定;(3)低层驱动程序与协定栈之间通过指针传递数据,不对包进行复制拷贝;4、设置专门的线程消除存储器中的碎片和反省存储器泄露。因此,NDK很合适目前嵌入式系统的硬件环境,是实现DSP联网通讯的首要支撑工具。

NDK的软件开发环境是TI的开发工具CCScode composer studio)。它包孕有实时操作系统DSP/BIOS和主机与目的板之间的实时数据交换软件RTDX

2.2  NDK的配置和使用

CCS下使用NDK须要在以下几点上做特别处置:

1)设置DSP/BIOS

PRD设置主时钟。硬件抽象层的时钟驱动须要一个100ms启动一次的PRD函数作为主时钟,函数名是llTimerTick()

HOOKTCP/IP协定栈设置保存的空间。OS库的任务调度模块须要调用hook来保存和调用TCP/IP协定栈的环境变量指针,这两个hook函数是NDK_hookInit() NDK_hookCreate()

2)包孕文件和库文件

请注意编译时须要包孕库文件和文件路径,一般默觉得c: ic6000 dkinc

3CCS工程编译时的链接顺序

CCS一般遵循特定的顺序来链接目的函数和库文件,NDK是对这个链接顺序很敏感的,过错的顺序可以导致反复定义符号甚至不正确凿行等过错。为避免这个情况,可以在CCS里选择Link Order-> build options对话框,将文件遵循必定顺序添加并且将库文件添置到衔接顺序的最后,推荐的顺序为:NETCTRL.LIBHAL_xxx.LIBNETTOOL.LIBSTACK.LIBOS.LIB

在初始化启动协定栈之前,要为其分配一块工作内存(SDRAM),命令是_mmBulkAllocSeg( EXTERN1 )。还要调用fdOpenSession()来初始化文件指针向量表,否则创立socket的时候将出现过错。

我们将发送/接受设置定义为一个任务,在创立任务句柄以前,我们应该用NC_SystemOpen()打开网络功效并进行设置,在系统关闭前也要进行相应的处置。

使用NDK提供的socket API函数须要注意下面一些问题:(1NDK中对socket API 通过一个文件指针接口与操作系统相衔接,因此要调用文件指针向量表初始化和关闭函数对文件系统进行相应操作。(2NDK中并没有提供windows API中壮大的select函数,但是可以用fdselect实现一些相应的工程。可以相互对应得API函数还有NDK中的fdclose 和标准的close, NDK中的fderror和标准的errno.(3) NDK提供了很多网络工具的支撑的函数,比如和DNS相关的一些函数,可以代替标准API中的getpeername, gethostname等。另外还有关于IGMP的一些函数可以用来支撑组播,但是只支撑作为组播用户,不能支撑作为组播服务器。

3NDK传输UDP数据包效力测试及性能剖析

3.1测试平台构造

我们钻研了在NDKCPUUDP数据包发送接受的效力,这个测试分成两部分:一部分是测试从DM642PC机发送UDP数据包时,在不同的传输速率和不同的L2 cache大小时的CPU占用率,另一部分是测试DM642接受从PC机发送来数据包时,在不同的传输速率和不同的L2 cache大小时的CPU占用率。我们所使用的工具是在CCS下的NDK提供的socket API函数和在visual studio下提供的winsocket API。图4是测试环境的示意图。

 

4NDK测试环境示意图

3.2 测试平台的配置和实现

由于接受和发送程序十分相似,我们仅以发送程序举例。创立发送数据的程序为一个任务,在DSP/BIOS中,任务对象就是被TSK模块管理的线程。TSK模块根据任务的优先级和当前的实行状态动态的调度。DSP/BIOS总共有15个任务优先级可以使用,并且提供了一组函数来控制任务对象,包孕建立、删除、设置任务对象。任何任务对象都处于下面几种状态之一:运行态,就绪态,阻塞态,终止态。

在这个工程中,我们在网络掌握的程序中进行任务的创立,图5是创立任务的流程图:

 

5:传输任务创立流程图

其中创立任务的语句为:TaskCreate( tsk_udp, udp_video, 5, 0x1000, peer_addr , 12345, 12345 )。理论上,可以通过设置两个task的办法来增加数据传输的速率,但是注意这两个task应该用不同的端口进行传送。任务调度的使用程序为:

static void tsk_udp( IPN IPAddr, int PeerPort , int LocalPort)

{        ……

// 创立 socket

s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);

……

// 设置要绑定的地址端口属性

bzero( &sin1, sizeof(struct sockaddr_in) );

sin1.sin_family      = AF_INET;

sin1.sin_len         = sizeof( sin1 );

sin1.sin_port        = htons(LocalPort);

//绑定IP地址和端口

if( bind( s, (PSA) &sin1, sizeof(sin1) ) < 0 )

{ goto exit_tsk;}

//设定目的地址端口属性

bzero( &sin1, sizeof(struct sockaddr_in) );

sin1.sin_family    = AF_INET;

sin1.sin_len       = sizeof( sin1 );

sin1.sin_addr.s_addr = IPAddr;

sin1.sin_port      = htons(PeerPort);

……

// 分配工作缓冲区

if( !(pBuf = mmBulkAlloc( 1024 )) )

{goto exit_tsk;}

// 一下起头发送数据

for(;;)

{        // 填充发送数据的缓冲区

*(int*)pBuf=send_udp_count++

// 发送数据

if( sendto( s, pBuf, 1000, 0, &sin1, sizeof(sin1) ) < 0 )

         { goto exit_tsk;//break;}

// 清空数据区

mmZeroInit( pBuf, (uint)test );

//设置发送数据率

       TaskSleep(8);    // 1Mbit/s

}

……

}

测试里面有两个症结参数须要设置,一个是发送(接受)的数据率和DM642内部第二级缓存的大小。收发的数据率可以通过转变任务挂起的时间间隔长度来转变。系统函数TaskSleep(n)表现每隔n毫秒实行一次发送,我们设定每次发送1000 Byte的数据,这样TaskSleep(8)表现1Mbit/s的传输速率,TaskSleep(4)表现2Mbit/s的传输速率,以此类推。

L2 cache大小的转变可以通过以下语句来设置:

CACHE_setL2Mode(CACHE_64KCACHE)表现设置了64K L2 CacheCACHE_setL2Mode(CACHE_128KCACHE)表现设置了128K L2 Cache,以此类推。

3.3 测试成果和性能剖析

我们在DM642评估版上,采纳标准的recvfrom函数进行数据接受,以无衔接的UDP协定与windows PC进行相互传输。对不同传输速率和不同大小的二级缓存下CPU的占用率进行了比拟。

CPU占用率=空闲周期可完成的低优先级任务/ 实行传输任务时可完成的低优先级任务

其中接受和发送数据均设为每次1000 Byte,评测成果在下面四个图表里面显示出来。

传输速率(Mbit/s

64KCache

128KCache

256KCache

0.4

0.29

0.21

0.19

0.8

0.58

0.45

0.38

2

1.1

1.02

0.96

4

2.64

2.26

1.88

8

5.11

4.38

3.64

16

9.86

8.25

6.89

1:由DM642发送UDP数据包的CPU占用率(%

 

6DM642发送UDP数据包CPU占用率比拟图

传输速率(Mbit/s

64KCache

128KCache

256KCache

0.4

0.2

0.13

0.14

0.8

0.35

0.28

0.27

2

0.82

0.7

0.67

4

1.62

1.34

1.34

8

3.65

2.69

2.68

2:由DM642 UDP数据包的CPU占用率(%

 

 

7DM642接受UDP数据包CPU占用率比拟图

从上面的比拟可以看出 DM642发送和接受数据包时的CPU占用率均随着网络传输速率的增加而提高,而且根基上呈线性关系。因为收发数据是对数据简单的搬移,它的复杂度是随着数据的增加而线性增加的,在高速缓存必定得情况下CPU的占用率线性增加。

而第二级缓存的大小对CPU的占用率也有影响,一般而言是L2 cache越大,CPU占用率越小,而且随着收发数据率的变大而显得更加显明,这个得益于DM642两级缓存的工作原理和壮大的DMA功效。

L2 cache增大带来的另一个影响是CPU片内存储容量的减少,使得片内能放下的代码段和数据段就比拟少,这样反而会减缓程序的运行速度,这在处置复杂的编解码程序,数据段和代码段比拟多时尤为显明,这就须要程序员根据实际情况兼顾布置合理配置。

4.总结与展望

为了钻研在嵌入式芯片上进行高速多媒体通讯的可行性,本文讨论了TI DM642NDK设计的原理,并进行了与PC机实时数据通讯的测试。测试表明TI公司推出的NDK套件在DM642芯片上实现了高效力的TCP/IP传输协定,即使高达16Mbit/s的传输速率,CPU的占用率也不到10%,这使得它完成多路的视频传输也绰绰有余,这是DM642能够普遍使用于各种多媒体通讯设备和终端的有力保证。再配合DM642芯片壮大的多媒体处置功效,使得其在多媒体通讯市场上有宽阔的远景。值得我们去钻研和关注。

参考文献:

[1] TMS320DM642 Video/Imaging Fixed-Point Digital Signal Processor Data manual

[2]  TMS320DM642  Evaluation  Module

Technical Reference

[3] Texas Instruments TMS320C6000 TCP/IP Network Developer’s Kid Programmer’s Reference Guide

[4]  李方慧,王飞,何佩琨。TMS320C6000系列DSPs原理和使用(第二版)。北京:电子工业出版社

[5]  W.Richard.StevensTCP/IP Illustrated。北京:机械工业出版社

               欢迎点击进入:TI德州中文网   (国内唯一针对TI应用的中文技术网站)    文章录入:admin    责任编辑:admin 
  • 上一篇文章: 没有了

  • 下一篇文章: 没有了
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    没有相关文章
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    站长:61IC 湘ICP备05002478号