【精品新闻】前方高能,慎入!TMS320C6678开发十大关键技巧问答

赢一个双肩背包

有多难?

戳一下试试看!

→_→

长摁识别
自2011年德州仪器推出多核DSP TMS320C6678后,以该芯片为核心的DSP开放板层出不穷,学习这款芯片的人日益增多。下面小编把工程师朋友在开发这款芯片的过程中遇到的问题和解决方法以问答的形式进行了整理,希望对初学者能有所帮助!

TMS320C6678 是基于TI最新 DSP 系列器件 TMS320C66x 之上,采用 8 个 1.25GHz DSP 内核构建而成,并在单个器件上完美集成了 320 GMAC 与 160 GFLOP 定点及浮点性能,从而使用户不仅能整合多个 DSP 以缩小板级空间并降低成本,同时还能减少整体的功耗要求,充分满足移动网络领域对通道密度及高质量媒体服务日益增长的需求。

一.TMS320C6678 网络问题

用自己开发的板子,采用的双网口设计,网口0和网口1。用TI官方给的例子只能网口1通信,在例子上修改了sgmii初始化了sgmii0和sgmii1但是还是只能网口1通信。

要修改网络接口管理单元的库,nimu。在EMACInit_Core函数中有设置发送接口配置的信息。这个函数是隐形的被NDK调用。所以刚开始比较难找到相应的位置。

c6678的两个网口是如何同时使用的, 能不能多个cpu core 同时使用同一个网口, 请赐教。

C6678的EMAC是cppi器件,即通过Navigator进行包的管理,所以收发的数据包都是Queue来管理,可以同时使用;需要注意的是可以配置每个发送的包由指定的port发出,或者向两个port广播。

二.TMS320C6678 关于多核编程问题

目前的C++程序的段,都放到了DDR3里,这样的话,我要是三个核同时运行,岂不是对其中相同的堆栈进行访问吗?嗯,对于所有段都放到DDR3的情况,怎样进行多核编程呢?

在6678里面有MPAX MMU的,可以在DDR3上给每个核都开辟一个私有的空间,在物理地址上是连续的,但对每个核读/写来说地址都是相同的。不同core的system stack及task stack必须不一样。

三.TMS320C6678主频设置问题

datasheet里面讲TMS320C6678的主频为1G,1.25G,1.4G可选,请问,如何设置TMS320C6678的主频参数呢?是在boot的时候作设置吗?与cmd文件有没有关系呢?

首先要确定你的芯片是不是支持1.2G和1.4G,不是所有的C6678都支持。其次,主频你是在MAINPLL里面配置的,根据你的输入时钟频率,配置MAINPLL得到一个主频。你可以通过boot做配置,也可以通过boot后软件配置。与cmd文件没有关联。

四.tms320c6678 的中断响应

在中断响应的过程中,1024个系统事件先是通过ch_map映射到channel ,channel再映射到主机中断输出,host interrupt output 是需要映射到INTC的system events然后才能挂接到dsp可以识别的12中断上,这里host interrupt output是256个,INTC的system events是128个,这里host interrupt output 和system events是有什么映射关系吗?有的话是如何映射的?

chip interrupt controller的输入称作host interrupt event,这些事件经过映射可以与任意的chip INTC channel进行映射输出;chip INTC channel的某些输出事件是直接与corepac INTC的对应输入事件一一连接,具体的对应关系参考6678 data manual interrupt表格。chip intc只有特定的输出才会core intc与的某些输入一一对应,所以只有将Chip INTC的输入256个事件与这些特定的输出映射起来,才可以最终路由到core内部12个中断矢量表。

五.TMS320C6678多核程序的运行

最近刚刚接触多核DSP,我想问下,在准备运行多核程序时,是需要将程序在每个核里面进行load吧?TI提供的多核运行例程有哪些,具体在MSDK下的哪个位置?另外对于API函数,在对其进行直接调用时,能否在不用SYS/BIOS的情况下,使用中断实现调用,例如uart通信,直接调用API函数实现查询式通信,能否添加中断函数,调用uart的API函数实现中断式通信?

程序用到哪个核就需要load到哪个核里边,在MCSDK的以下位置有多核运行的例程:demos\image_processing\ipc,不使用SYS/BIOS也可以使用API函数。

六.TMS320C6678系统设计中PCIECLK问题

请问在设计基于TMS320C6678系统板时,如果不用PCIE模块,是不是可以悬空PCIECLKP和PCIECLKN引脚,还是是分别接高电平和低电平。

答:请参考Keystone硬件设计手册,PCIE不用时,PCIECLKP端接CVDD,N端接地,不可悬空。

七.TMS320C6678的定点运算与浮点运算

看介绍,TMS320C6678是定点与浮点运算都支持的DSP芯片。现在自己编写的程序中,所使用的数据除了整型之外都是浮点数。想问一下,在运算浮点数的时候,DSP是否会将浮点数转为定点数,再进行运算,然后再转为浮点数?

1. 编译器会根据客户定义的数据类型来调用相关的汇编指令来进行运算,如果直接定义的是浮点数,那么编译器就调用浮点数进行运算。

2. 对于浮点和定点的选择,如果算法是从matlab或vc继承过来的,那么前期直接用浮点数进行运算可以很容易的将算法在DSP上实现,如果后期算法成熟了,可以进行定点化,提高运行效率。

c6678的两个网口是如何同时使用的, 能不能多个cpu core 同时使用同一个网口, 请赐教。

C6678的EMAC是cppi器件,即通过Navigator进行包的管理,所以收发的数据包都是Queue来管理,可以同时使用;需要注意的是可以配置每个发送的包由指定的port发出,或者向两个port广播。

八.TMS320C6678 系统如何获得CPU

现在的现象是,当客户端连续发送多个数据请求时,发送到中间某一个时网络会中断,当前算法特点是,由于运算最较大,运算时间比较长,暂未进行优化,比如30s,50s,我们现在就是希望能让程序正常运行,完成我们的算法要求,下一步工作再进行优化,但是现在这个中断的问题让我们比较头疼,请专家指教。

经过多次试验,最后我将我们的算法注掉,换成了下面代码,网络是正常的,不会中断。

void Test(指定时间间隔)

{

获取系统当前时间1

while(1)

{

获取系统当前时间2

if(时间2-时间1 >= 指定时间间隔)

return;

}

}

我又将我们的算法换成了下面代码,网络很快就会中断。

void Test()

{

while(...)

{

for(...)

{

纯算法,加减剩除,专门用来耗时。

}

}

}

从上面的现象看,我们猜测,是由于算法占用CPU时间过长,系统无法获得CPU,没有时间处理网络相关信息,造成的,各位大侠有什么好办法,请多多回复。

因为你在DSP上没有跑RTOS操作系统,而你的代码是一段无限的死循环,因此CPU的Cycle都消耗在你的算法代码里了(即PC指针一直在里面,没有出来)。

在跑RTOS操作系统的情况下,任务按照优先级来进行运行,如果网络属于更高优先级任务,那么即使算法在持续运行,调度器也会切换到网络任务,并优先运行,网络也就不会断了。

我们Enea是TI的白金合作伙伴,在6678上提供整套的商用平台软件解决方案,可以解决您的问题。

我们可以在C6678上提供全套的平台软件,包括操作系统、BSP驱动、中间件和开发工具。

OSEck RTOS 软件平台包括:

OSEck RTOS内核:

1 稳定可靠,支持所有DSP,有20+年历史。

2 专门针对C66x优化。没有内存碎片的内存管理。

3 内存自动裁剪,统一的出错处理机制。

4 BSP(驱动)源代码:优化高效的驱动,如RapidIO,Ethernet等。

5LINX IPC: 支持分布式系统的IPC.

6使多核、多DSP、多板卡的编程好像单核编程一样。

7支持任何物理介质,如C66x多核之间(EDMA),多DSP之间(RapidIO),多板卡之间(RapidIO, Ethernet)。

8TCP/IP协议

9Package Flow 软件加速包

10Optima开发优化工具:CPU,内存等性能优化工具。

Enea在DSP RTOS领域有近20年的开发、现场使用经验,针对复杂的C6678,从2010年起专门投入30多人的专家团队来支持优化6678软件平台,包括:

内核、重写高性能驱动、分布式支持、网络加速、优化工具等,现在以及有30多个客户使用Enea针对6678的软件平台:

1. 成熟、稳定、可靠、现场验证的,专门针对6678 DSP特别优化的OSEck RTOS。

2. 成熟稳定的针对C6678的驱动程序,支持包括SRIO、以太网、PA、Multicore Navigator、MPAX、中断管理等。

3. 跨核、跨DSP、跨板卡系统的透明传输模块LINX。

九.tms320c6678电源问题

在评估板上,固定1V的电流值是5A,c6678_power_consumption_summary_rev3-2表格中固定1V所需电流值仅需1A左右,修改后也达不到2A,这是为什么?

修改表格使能所有模块后,在1GHz, 85度下,CVDD对应的电流大概在6A,CVDD1的电流在2A左右。你的5A可能测的是CVDD对应的值。

十.TMS320C6678降低功耗

在C6678中有PDCCMD寄存器可以选择是否关闭C66x CorePac来降低功耗,寄存器的地址是0x18000000,但是怎么选择具体关闭哪个CorePac呢?难道在PDCCMD寄存器中设置关闭内核就都关闭了吗?可是在提供的功耗估计表里,8个内核可以选择具体使能哪个呀。那其他核的PDCCMD寄存器是什么地址呢?

PDCCMD是每个core独立的寄存器,每个core的寄存器的地址是一样的,只能由本核访问。具体的corepac power down flow在corepac user guide有说明。在power spreadsheet中可以分corepac设置其enable/diable status,设置为disable status即将该core power down。

(0)

相关推荐