TMS320C6000 DSP芯片介绍

本文主要是关于tms320c6000和dsp的相关介绍,并着重对tms320c6000和dsp芯片进行了详尽的阐述。
dsp 数字信号处理是一种将现实世界中的真实信号(专业术语称之为连续信号)转换为计算机能够处理的信息的过程。比如人们说话的声音,这就是一个连续信号,除此之外,现实生活中还有很多这样的信号,比如光、压力、温度等等。这些信号通过一个模拟向数字的转换过程(称之为ad),变成数字信号送给处理器,进行数字计算,处理结束后,再把结果通过数字向模拟的转换过程重新变成连续信号(称之为da)。用一般的通用微处理器可以完成这些工作,但是面临的问题是满足如此高的计算速度,就很难保证耗电量很低,更难保证价格足够便宜。因此,另一种微处理器应运而生:数字信号处理器,简称dsp。
dsp是微处理器的一种,这种微处理器具有极高的处理速度。因为应用这类处理器的场合要求具有很高的实时性(real time)。比如通过移动电话进行通话,如果处理速度不快就只能等待对方停止说话,这一方才能通话。如果双方同时通话,因为数字信号处理速度不够,就只能关闭信号连接。在dsp出现之前数字信号处理只能依靠mpu(微处理器)来完成。但mpu较低的处理速度无法满足高速实时的要求。因此,直到70年代,有人才提出了dsp的理论和算法基础。那时的dsp仅仅停留在教科书上,即便是研制出来的dsp系统也是由分立元件组成的,其应用领域仅局限於军事、航空航天部门。
90年代dsp发展最快,相继出现了第四代和第五代dsp器件。现在的dsp属於第五代产品,它与第四代相比,系统集成度更高,将dsp芯核及外围元件综合集成在单一芯片上。这种集成度极高的dsp芯片不仅在通信、计算机领域大显身手,而且逐渐渗透到人们日常消费领域。
dsp芯片,也称数字信号处理器,是一种具有特殊结构的微处理器。dsp芯片的内部采用程序和数据分开的哈佛结构,具有专门的硬件乘法器,广泛采用流水线操作,提供特殊的dsp指令,可以用来快速的实现各种数字信号处理算法。
根据数字信号处理的要求,dsp芯片一般具有如下的一些主要特点:
(1)在一个指令周期内可完成一次乘法和一次加法。
(2)程序和数据空间分开,可以同时访问指令和数据。
(3)片内具有快速ram,通常可通过独立的数据总线在两块中同时访问。
(4)具有低开销或无开销循环及跳转的硬件支持。
(5)快速的中断处理和硬件i/o支持。
(6)具有在单周期内操作的多个硬件地址产生器。
(7)可以并行执行多个操作。
(8)支持流水线操作,使取指、译码和执行等操作可以重叠执行。与通用微处理器相比,dsp芯片的其他通用功能相对较弱些。
tms320c6000 dsp芯片介绍 近年来,以高速数字信号处理器(dsp)为基础的实时数字信号处理技术飞速发展,并获得了广泛的应用。tms320c6000系列dsp是德州仪器公司(ti)推出的定点、浮点系列dsp,其中定点产品峰值处理能力达到4800mips,浮点产品峰值处理能力达到1350mflops,是目前国际上性能最高的dsp之一,其卓越的性能使得它在传统的dsp领域、雷达、无线电基站等高端领域,以及宽带媒体、身份识别等新兴领域都有很好的应用前景。随着dsp性能和功能的不断增强,应用系统的设计越来越复杂,要将dsp的性能充分释放出来,合理的板级设计是dsp系统开发人员面临的一个关键性的问题。
ti公司的三种新型tms320 dsp系列和omap系列
1.tms320c2000——作控制用的最佳dsp,可以替代老的c1x和c2x。
tms320c20x系列dsp芯片具有如下特点:
(1)处理能力强:指令周期最短是25nm,运算处理能力达40mips。
(2)片内具有较大的flash存储器:tms320c20x是最早使用片内flash存储器的dsp芯片,flash存储器具有比rom灵活、比ram便宜的特点,tms320f206和tms320f207的片内具有32kb的flash存储器和4.5kb的ram。
(3)芯片的功耗低:tms320c20x系列dsp芯片在5v工作时每个mips消耗1.9ma电流,在3.3v工作时每个mips消耗1.1ma电流4)芯片的资源配置灵活。
tms320c2000系列dsp芯片价格低,具有较高额性能和适用于控制领域的功能,因此可以广泛地应用于工业自动化、电机控制、运动控制、电力电子、家用电器等领域。现在有趋势集中在以下两个方向上:
(1)c20x16位定点dsp,速度为20mips,主要用途是电话、数字相机、售货机等,其中:f206带有闪速存储器。
(2)c24x16位定点dsp,速度为20mips,用作数字马达控制、工业自动化、电力转换系统、空调等。
2.tms320c5000——低功耗高性能dsp,16位定点,速度40~200mips。
主要用途是有线和无线通信、ip、便携式信息系统、寻呼机、助听器等。tms320c54xx系列dsp芯片具有如下特点:
(1):运算速度快:其运算速度可达500mips。
(2)优化的cpu结构。
(3)芯片的低功耗工作方式:tms320c54xx的dsp核可以在3.3、2.5、1.8v甚至更低电压下工作,特别适合于无限移动设备。
(4)芯片具有智能外设:提供了多通道缓冲串行口。以及和外部处理器通信的主机hpi。
目前,c5000系列中又有三种新成员,一种是c5402,这是廉价型的dsp,速度保持100mips,片内存储空间稍小一些,ram为16k、rom为4k。主要应用对象是无线modem、新一代pda、网络电话和其它电话系统以及消费类电子产品。第二种是c5420,它拥有两个dsp核,速度达到200mips,200k片内ram,功耗0.32ma/mips,200mips全速工作时不超过120mw,为业内功耗最低的dsp。c5420是当今集成度最高的定点dsp,适合于做多通道基站、服务器、modem和电话系统等要求高性能、低功耗、小尺寸的场合。第三种是c5416,它是ti公司0.15μm器件中的第一款,速度为160mips,有三个多通道缓冲串行口(mcbsps),能够直接与t1或e1线路联接,不需要外部逻辑电路,有128k片内ram。应用对象是voip、通信服务器、pbx(专用小交换机)和计算机电话系统等。
3.tms320c6000——这是ti公司1997年2月推向市场的高性能dsp,综合了目前dsp的所有优点:
(1)具有最佳的性价比和低功耗。
(2)运行速度快:指令周期最小为3.3ns,运算能力为2400mips。
(3)指令集不同:一条指令中组合了几个执行单元,结合其独特的内部结构,充分发挥其内部集成的各执行单元的独立运行能力。
(4)大量的片内存储器和大范围的寻址能力:片内最多集成了512k字程序存储器和512k字数据存储器,并拥有32位的外部存储器借口。
(5)智能外设:内部集成了4-16个dma借口,2-3个多通道缓冲串口,2个32位定时器等。由于tms320c6000系列具有极高的性能,因此可以广泛地应用于通信领域,主要应用于:数字移动通信、个人通信系统、个人数字助理、数字无线通信、无线数据通信、便携式因特网音频处理器。
在老的ti dsp系列中,浮点c30还是ti公司主推的产品,因此它的售价不像其它老系列每年都要提升。ti公司还在对这个型号作性能改进和制造廉价型,如新近推出的c33采用0.18μm制造工艺,有1m ram,速度为120mflops,为老产品的两倍,而价格仅5美元。速度更高的150mflops为8美元。c33与其它c3x器件代码兼容,所以用户可以保护其软件环境,在他们换用新器件时还可以减少开发时间。
4.omap(open multimedia applications platform,开放式多媒体应用平台)
这是ti公司推出的专门为支持第三代(3g)无线终端应用而设计的应用处理器体系结构。omap处理器平台提供了语言、数据和多媒体所需的带宽和功能,可以极低的功耗为高端3g无线设备提供极佳的性能。omap嵌入式处理器系列包括应用处理器及集成的基带应用处理器,目前已广泛应用于实时的多媒体数据处理、语音识别系统、互联网通信、无线通信、pda、web记事本、医疗器械等领域。
tms320c6000 dsp和bootloader、vectortable 1. bootloader
如上图,
(1)在device reset阶段:
设备初始化为默认状态,大部分三态输出都配置为高阻态。
(2)在cpu reset阶段:
从rs上升沿处开始(这个时候,根据hd[4:3]配置启动模式,hd8配置大小端模式,clkmode配置输入时钟源,根据hpi_en配置外设功能),处理器检查启动模式hd[4:3],启动bootloader程序。
edma自动将ce1开始位置的1kb代码拷贝到内部程序存储器的0地址。
(3)reset信号恢复高电平,cpu从内存0地址处开始运行程序
2. interrupt vector table(interrupt service table, ist)
处理器在reset为低电平时复位,在reset的上升沿,启动配置被锁定,开始从0地址处执行程序。一旦rom启动完成(将外部rom的1kb程序拷贝到内存0地址完成),寄存器初始化为默认值,程序计数器pc装载复位中断向量(复位中断向量需要在0地址处),cpu开始从0地址开始执行,这个地址称为复位向量。
默认的,中断服务表(ist)也在0地址处。ist是中断向量的一个集合,当cpu中断发生时,pc自动通过中断向量跳转到对应的中断服务程序。每个中断向量都是8个字(word)对齐。ist可以重映射到任意的以0x400-byte对齐的位置,但需要修改中断服务表指针(istp),在复位时,istp初始化为0值,ist首地址与复位向量对齐。
(1)创建中断向量表
ist由32个服务向量组成,每个向量对应一个cpu中断,特殊的:中断号0对应复位向量,中断号1对应不可屏蔽中断(nmi)。中断4~15对应各种信号事件的中断。中断号为n的中断向量的地址为
比如,istp重定位到0x1000,中断号为4的中断向量地址为addr=0x1000+0x20*4=0x1080。
每个中断向量必须在8条指令内完成,若无法在8条指令内完成,必须将一些工作放到中断服务程序(interrupt service routine, isr)中完成。
.sect vectorsreset: mvk .s2 start, b0 ; load start address mvkh .s2 start, b0 ; load start address b .s2 b0 ; branch to start nop nop nop nop nopnmi_isr: mvk .s2 nmi_isr, b0 mvkh .s2 nmi_isr, b0 b .s2 b0 nop nop nop nop nop
上面是包含了复位和不可屏蔽中断的中断向量表的一个例子,主要是完成一个跳转到中断服务程序的功能。
(2)中断服务程序(isr)
当使用-c或-cr链接器选项时,dsp的c编译器自动的创建了函数_c_int00,这个函数对应c程序的入口地址,复位向量必须跳转到_c_int00地址处。当c程序遇到一个cpu中断时,在中断向量表中或中断服务程序中要使用的cpu寄存器都将先被压入堆栈,一旦中断服务程序完成,堆栈中的值弹出到对应的寄存器,继续执行原c程序。
中断服务程序需要使用关键字interrupt声明,
interrupt void myisr(void){ /* code for myisr */ …}
中断服务程序没有返回值,也没有参数,interrupt的功能就是在执行该中断服务程序前自动将寄存器压栈,执行完后自动的弹栈。
*********************************************************************************
* vecs.asm
* copyright 2003 by seed electronic technology ltd.
* all rights reserved. property of seed electronic technology ltd. *
* designed by: hongshuai.li *
*********************************************************************************
*------------------------------------------------------------------------------
* global symbols defined here and exported out of this file
*------------------------------------------------------------------------------
.global _vectors
.global _c_int00
.global _vector1
.global _vector2
.global _vector3
.global _vector4
.global _vector5
.global _vector6
.global _vector7
.global _c_int08 ; hookup the c_int08 isr in main()
.global _vector9
.global _vector10
.global _vector11
.global _vector12
.global _vector13
.global _vector14
.global _vector15
*------------------------------------------------------------------------------
* global symbols referenced in this file but defined somewhere else.
* remember that your interrupt service routines need to be referenced here.
*------------------------------------------------------------------------------
.ref _c_int00
*------------------------------------------------------------------------------
* this is a macro that instantiates one entry in the interrupt service table.
*------------------------------------------------------------------------------
vec_entry .macro addr
stw b0,*--b15
mvkl addr,b0
mvkh addr,b0
b b0
ldw *b15++,b0
nop 2
nop
nop
.endm
*------------------------------------------------------------------------------
* this is a dummy interrupt service routine used to initialize the ist.
*------------------------------------------------------------------------------
_vec_dummy:
b b3
nop 5
*------------------------------------------------------------------------------
* this is the actual interrupt service table (ist)。 it is properly aligned and
* is located in the subsection .text:vecs. this means if you don‘t explicitly
* specify this section in your linker command file, it will default and link
* into the .text section. remember to set the istp register to point to this
* table.
*------------------------------------------------------------------------------
.sect “.text:vecs”
.align 1024
_vectors:
_vector0: vec_entry _c_int00 ;reset
_vector1: vec_entry _vec_dummy ;nmi
_vector2: vec_entry _vec_dummy ;rsvd
_vector3: vec_entry _vec_dummy
_vector4: vec_entry _vec_dummy
_vector5: vec_entry _vec_dummy
_vector6: vec_entry _vec_dummy
_vector7: vec_entry _vec_dummy
_vector8: vec_entry _c_int08 ; hookup the c_int08 isr in main()
_vector9: vec_entry _vec_dummy
_vector10: vec_entry _vec_dummy
_vector11: vec_entry _vec_dummy
_vector12: vec_entry _vec_dummy
_vector13: vec_entry _vec_dummy
_vector14: vec_entry _vec_dummy
_vector15: vec_entry _vec_dummy
*------------------------------------------------------------------------------
********************************************************************************
* end of vecs.asm
********************************************************************************
上面是一个实际使用的c6713的中断向量表的汇编文件(vecs.asm),其中定义了全部15个中断向量,复位向量跳转到_c_int00地址,8号中断向量跳转到_c_int08函数地址,在c主程序中应该做如下定义,
/* * interrupt function */interrupt void c_int08(void){ }
另外,由于在c程序中的pc跳转到中断向量地址是远跳转,因此有时需要在c程序中声明中断向量地址为远地址,如下,
extern far void vectors();
其中的vectors()表示中断向量表的起始地址(汇编中使用了_vectors)。
结语 关于tms320c6000和dsp的相关介绍就到这了,如有不足之处欢迎指正。
相关阅读推荐:dsp芯片主流厂商分析与常用芯片
相关阅读推荐:dsp芯片的特点与分类

FPC柔性线路板已成为了电子产品中主要的应用元件
苹果iOS和iPadOS 13.4的几个重要新功能
俄罗斯新焊接技术让飞机制造业摆脱铆钉?
可扩大检测范围的电流检测放大器
VR发展趋势预测之商用AR/VR将爆发
TMS320C6000 DSP芯片介绍
华为魏之来:繁荣端侧算网生态,重塑家庭互动生活
关于蓝牙无线技术的特点以及市场竞争优势
电动自行车电池简介
分析|手机行业已是一片红海 诺基亚回归有几分胜算?
大数据和人工智能等技术如何用来对付疫情
八大生物识别技术知识科普
签署多项合作协议 A4WP扩大亚洲市场影响力
一款有趣的EDA设计应用--EasyEDA
日本松下全球最大锂电池厂一期工程完工
带你走进盖茨、马云、刘强东等IT大佬们的办公室
基于梯形永磁体的切向内置式转子结构研究
realme Q采用索尼IMX586旗舰级传感器,价格在千元起步
分布式汽车车身控制系统设计
关于基于FPGA的图像FFT滤波处理的分析和介绍