DSP学习初阶的一些笔记

这些内容都是一些基础的、概述性的知识,是本人在学习、使用DSP开始阶段的一些总结,对于DSP内部结构:各个寄存器的配置使用、各种外设的详细配置、中断处理机制、内存管理以及各种编程、调试的经验,以后有空会另外贴出。

一、DSP芯片概述:

1、各平台:

C6000平台,包含定点C62x和C64x以及浮点C67x,追求至高性能,最高达1GHz。

C5000平台,TI公司推出双核处理器OMAP,包含一个ARM和一个C5000系列的DSP。

C2000平台,包含16位的C24xx和32位的C28xx定点DSP。

C5000和C6000和C28xx系列都配有实时操作系统RTOS内核和C/C++编译器;C24xx系列仅有C编译器。

2、C28xx系列主要特色:

1)  峰值速度高达150MIPS;

2)  具有4K字的RAM和最高达128K字的FLASH;

3)  采用双电压设计,外设电压3.3V,内核电压1.8V;

4)  12位A/D,采样速度高达80ns;

5)  软件上支持C++和实时操作系统RTOS,其数学库:智能Q格式数学库。

3、分页机制:

数据存储空间采用分页机制,2407整个空间分成512页,通过寄存器的9位指针DP来指定。分页机制有助于缩短汇编指令长短,提高访问速度。

4、外设:

SCI:经电平转换后,可用作RS-232通信。

SPI:带有同步时钟,可用来连接一些带有SPI器件,如串行E2PROM等。

EV:事件管理器,主要用途:通用定时器和PWM发生器,还包括捕获单元,QEP解码器。

10位A/D:F240采样转换时间最快是6.1us,LF< xmlnamespace prefix ="st1" ns ="urn:schemas-microsoft-com:office:smarttags" />2407A最快500ns。

5、GEL:通用扩展语言的缩写:

GEL是一个大小写敏感但缺少类型检查的解释性语言,语法上可看作是C语言的一个子集。GEL主要用来扩展CC的功能,方便调试。

二、Q格式:

1、定点微处理器不能直接处理小数,比如要表达精度为0.01Hz的频率变量f,有三种方法:

1)把f定义为float类型。C语言中自动调用运行时函数来处理浮点运算,float类型精度最高,运算速度也最慢。一个简单的浮点加法也要好多汇编指令来实现。

2)仍定义为整型,采用放大若干倍来表示小数,但做法僵硬,精度变化时,要修改很多地方以防止溢出。

3)仍定义为整型,采用定标法。常用Q格式来表示定标,当假定小数点位于第0位的右侧时,为Q0,当小数点位于第15位的右侧时,为Q15.

浮点数Xf转换为定点数Xq时,Xq = (int)(Xf * 2^Q)

定点数Xf转换为浮点数Xq时,Xf – (float)(Xq * 2^-Q)

有符号32位数的Q15格式表示范围为-65536<=X<=65535.9999695。

2、定点运算:

任何数制运算都要考虑溢出,定点数之间的运算也要考虑溢出。

1)定点加减法< xmlnamespace prefix ="v" ns ="urn:schemas-microsoft-com:vml" />

必须是具有相同Q格式的数据才能相加,不同Q格式的数据必须先通过移位至相同Q格式,然后才能相加。

2)定点乘法:( )

不同Q格式数据相乘,相当于Q值相加。

3)定点除法:( )

不同Q格式数据相除,相当于Q值相减。

3、Q15格式:

程序中最常用的是Q0和Q15格式,int型变量的Q15格式数值范围是一个不超过1的小数。小数间乘法仍是小数,永远不会溢出。

如果一个数既包含整数又有小数,使用Q格式时,选定一个合适的Q格式来表示。还可以:把全部数据转化为小数,再用Q15格式表示。

假设整数x取值范围不会超过某一极限最大值,设此极限最大值为MAX,将x除以MAX转换成一个小数,再转换成Q15格式。

三、可重入性:

    当被两个以上线程调用时,函数的结果仍能保证正确,当然是插入式调用的。

保障可重入性的技术:

(1)       只使用局部变量,不使用全局变量。

(2)       全局变量设定为只读类型(加关键词const),由于不进行写操作,则程序仍具有可重入性。

(3)       如果将函数和全局变量封装在一起,即封装成一个对象,且函数只能访问此对象内的成员变量,则函数具有可重入性。这就是面向对象语言(C++)的好处,提高可重入性。

(4)       屏蔽中断:当函数访问到全局变量时,为保证可重入性,在变量修改前禁止中断,修改完后再开中断。

(5)       函数只能返回一个值,当想要通过一个函数返回多个变量值时,可以采取的措施是直接在函数体内处理全局变量或传递全局变量的地址。此时的全局变量就变成了过程量(状态量),此时可用局部变量在函数内代替全局变量。

(6)       16位DSP中,若输出变量是32位,赋值操作会用两条指令——先赋值变量低16位,再赋值高16位,这中间就可能因发生中断而不能得到正确结果。解决方法是赋值前禁止中断即可。

四、C语言生成的段和CMD文件:

通用目标文件格式COFF,是一种很流行的二进制可执行文件格式。二进制可执行文件包括库文件(.lib结尾)、目标文件(.obj)、最终可执行文件(.out)等。

详细的COFF文件格式包括有段头、可执行代码和初始化数据、可重定位信息、行号入口、符号表、字符串表等。这些属于编写操作系统和编译器人员关心的范畴,从应用的层面讲,DSP的C语言应掌握两点:通过伪指令定义段,并给段分配空间。

编译器处理段得过程为:每个源文件都编译成独立的目标文件(.obj),每个目标文件含有自己的段;连接器把这些目标文件中相同段名得部分连接在一起,生成最终的可执行文件(.out)。

1、段分两大类:已初始化段和未初始化段。

1)已初始化段含有真实的指令和数据,存放在程序存储空间。程序存储空间在DSP片内是FLASH。调试代码时,下载代码到片外的程序存储空间——此时多为RAM。

.text:包含可执行的汇编指令代码。如果不声明,代码就归属.text段;

.data:一般包括常数数据。如用来对变量初始化的数据或一个正弦表格等;

.sect:用户可自行定义已初始化段;

.asect:作用类似于.sect,但多了绝对地址定位功能。

.cinit:存放用来对全局和静态变量初始化的常数。

.switch:存放switch语句产生的常数表格。

2)未初始化的段只是保留变量的地址空间,未初始化的段存放在数据存储空间中,数据存储空间多为RAM存储单元。

.bss:定义变量存放空间;

.usect:用户可自行定义未初始化段;

.stack:存放C语言的栈;

.sysmen:存放C语言的堆;

.const:简单而言,是用来存放一些特殊的常数和字符等。

2、DSP C24系列堆栈向高地址方向增长,所以堆栈段定义在数据存储空间的最后区域,即使堆栈发生溢出,也不会覆盖其他有用的数据。

3、#pragma CODE_SECTION(symbol,”section name”);

symbol是符号,可以是函数名也可是全局变量名,section name是用户自己定义的段名。

CODE_SECTION用来定义代码段,DATA_SECTION定义数据段。二者在汇编层次上分别是由伪指令.sect和.usect实现的。

使用注意:不能在函数体内声明#pragma。必须在符号被定义和使用前使用#pragma。

4、CMD文件中,page0代表程序空间,page1代表数据空间。

page0:.text,.cinit,通过#pragma CODE_SECTION定义的段;

page1:.switch,.const,.bss,.stack,.sysmen,通过#pragma DATA_SECTION定义的段。

CMD文件支持C语言的块注释符“/**/”,但不支持“//”。

CMD文件两大功能:指示存储空间和分配段到存储空间:

1)通过MEMORY来指示存储空间:

MEMORY

{

PAGE0:name 0 [(attr)] : origin=constant, length=constant

PAGEn:name 0 [(attr)] : origin=constant, length=constant

}

2)通过SECTIONS来分配段到存储空间:

SECTIONS

{

name:[property,property,property,…]

name:[property,property,property,…]

}

(1)       name输出端的名;

(2)       property输出段的属性。

A、load:定义输出段被装载到哪里的关键字,load = allocation

Allocation可以是强制地址,如:load=0x100,更多时候,allocation是存储空间的名称。

B、run:定义输出段将会在哪里运行的关键字。CMD文件规定当只出现一个关键字load或run时,表示load地址和run地址是重叠的。

5、复杂的.const段:

三种情况会产生.const段:

1)关键词const:

由关键词const限定的带有全局变量的初始值。但由const限定的局部变量的初始值,不会产生.const段。局部变量都是运行时开辟在.bss段中的。

2)字符串常数:

出现在表达式中的字符串常数,如“strcpy(s,“abc”);”字符串常数用来初始化指针变量,如“char *p=“abc”;”,但当字符串常数用来初始化数组变量时,不论是全局还是局部数组,都不会产生.const段,此时字符串常数生成的是.cinit段。

3)数组和结构体的初始值:

数组和结构体是局部变量,其初始化值会产生.const段。但当数组和结构体时全局变量时,其初始化值不会产生.const段,此时生成的是.cinit段。

.const段存放的是初始化的常数值,理应存放在page0才对,否则一掉电,岂不是这些常数都没有了?这是基于灵活性考虑的,程序中常会有大量的常数占用数据空间。

把.const段从page0搬移到page1,需要在两个地方设置:

A、CMD文件中的位置

B、修改连接的rts2xx.lib

六、CCS设置及TI中FFT库:

1、CCS的设置:

主要就是设置路径(头文件Linker、库文件linker、目标文件compiler—Files等的路径),堆栈大小,入口地址以及Linker Order等。

2、TI的FFT算法:

TI公司为了加快实数FFT,巧妙的使用了压缩算法:对2N点的实数做N点复数FFT,最后再劈分还原,得到实数2N点实数FFT计算结果。

补充:

1)如果采样数据不足2的幂次方,补零,虽然很多地方说没影响,但实际补零对输出的影响,是一个复杂的插值函数关系。

2)考虑到共轭关系,对[1,N-1]点幅值结果应该乘以2,才是真正的某次谐波的幅值平方。(TI的程序只给出幅值平方,没给出幅值,如果是幅值平方则应该乘以4.)

TI手册中列出结构体类型FFT128R如下:

Typedef struct{

       int *ipcbptr;

       int *magptr;

       int peakmag;

       int peakfrq;

       int normflag;

       int size;

       int *winptr;

void (*init1)(void);

void (*init2)(void);

void (*calc)(void *);

void (*split)(void *);

void (*mag)(void *);

void (*win)(void *);

}FFT128R;

例示:

#include “fft.h”

#pragma DATA_SECTION(ipcb,”FFTipcb”)

#define TWON 128

int ipcb[TWON+2]; //存放FFT处理的数据,Q15格式

FFT128R fft=FFT128R_DEFAULTS;

DSP学习初阶的一些笔记
DSP学习初阶的一些笔记

------- 

}

以下是个人节选,内容来自http://www.weeqoo.com/zhuanti/dsp/,都是些有用的知识,贴在这里,共同学习。

1、DSP的应用:

语音处理:语音编码、语音合成、语音识别、语音增强、语音邮件、语音储存等。

  图像/图形处理:二维和三维图形处理、图像压缩与传输、图像识别、动画、机器人视觉、多媒体、电子地图、图像增强等。

  军事:保密通信、雷达处理、声呐处理、导航、全球定位、跳频电台、搜索和反搜索等。

  仪器仪表:频谱分析、函数发生、数据采集、地震处理等。

  自动控制:控制、深空作业、自动驾驶、机器人控制、磁盘控制等。

  医疗:助听、超声设备、诊断工具、病人监护、心电图等、CT、CAT。

  家用电器:数字音响、数字电视、可视电话、音乐合成、音调控制、玩具与游戏等。

2、TI DSP的选型:

主要考虑处理速度、功耗、程序存储器和数据存储器的容量、片内的资源,如定时器的数量、 I/O 口数量、中断数量、DMA 通道数等。DSP 的主要供应商有 TI,ADI,Motorola,Lucent 和 Zilog 等,其中 TI 占有最大的市场份额。

TI 公司现在主推四大系列 DSP

1)C5000  系列(定点、低功耗):C54X,C54XX,C55X 相比其它系列的主要特点是低功

耗,所以最适合个人与便携式上网以及无线通信应用,如手机、PDA、GPS 等应用。处理

速度在 80MIPS--400MIPS 之间。C54XX 和 C55XX 一般只具有 McBSP 同步串口、HPI 并行

接口、定时器、DMA 等外设。值得注意的是 C55XX 提供了 EMIF 外部存储器扩展接口,

可以直接使用 SDRAM,而 C54XX 则不能直接使用。两个系列的数字 IO 都只有两条。

2)C2000 系列(定点、控制器):C20X,F20X,F24X,F24XX  ,C28x 该系芯片具有大量 外设资源,如:A/D、定时器、各种串口(同步和异步),WATCHDOG、CAN 总线/PWM 发 生器、数字 IO 脚等。是针对控制应用最佳化的 DSP,在 TI 所有的 DSP 中,只有 C2000 有 FLASH,也只有该系列有异步串口可以和 PC的 UART 相连。

3)C6000 系列:C62XX,C67XX,C64X 该系列以高性能著称,最适合宽带网络和数字影

像应用。32bit,其中:C62XX 和 C64X 是定点系列,C67XX 是浮点系列。该系列提供 EMIF

扩展存储器接口。该系列只提供 BGA 封 装,只能制作多层 PCB。且功耗较大。同为浮点

系列的 C3X 中的 VC33  现在虽非主流产品,但也仍在广泛使用,但其速度较低,最高在

150MIPS。

4)OMAP 系列:OMAP 处理器集成 ARM 的命令及控制功能,另外还提供 DSP 的低功耗 实时信号处理能力,最适合移动上网设备和多媒体家电。

其他系列的 DSP 曾经有过风光,但现在都非 TI 主推产品了,除了 C3X 系列外,其他基本 处于淘汰阶段,如:C3X 的浮点系列:C30,C31,C32 C2X 和 C5X 系列:C20,C25,C50 每个系列的 DSP 都有其主要应用领域.

3、如何高效开始 TI DSP 的硬件开发:

1)根据应用领域选择 TI 推荐的 DSP 类型

2)参考选定的 DSP 之 EVM 板,DSK 等原理图,完成 DSP 最小系统的搭建(包括外扩内 存空间、电源复位系统、各控制信号管脚的连接、JTAG 口的连接等);

3)根据具体应用需要,选择外围电路的扩展,一般如语音、视频、控制等领域均有成熟的 电路可以从 TI 网站得到。外围电路与 DSP 的接口可参看 EVM 或 DSK,以及所选外围电路 芯片的典型接口设计原理图;最好外围电路芯片也选择 TI 的,这样的话不管硬件接口有现 成原理图、很多连 DSP 与其接口的基本控制源码都有。

4)地址译码、IO 扩展等用 CPLD 或者 FPGA 来做,将 DSP 的地址线、数据线、控制信号 线如 IS/PS/DS 等都引进去有利于调试。

4、如何高效开始 TI DSP 的软件开发:

如果你不是纯做算法,而是在一个目标版上进行开发,需要使用 DSP 的片上外设,需要控 制片外接口电路,那么建议在写程序前先好好将这个目标版的电路设计搞清楚。最重要的是 程序、数据、I/O 空间的译码。不管是否纯做算法还是软硬结合,DSP 的 CPU,memory,program memory addressing, data mem.ory addressing 的资料都需要看.

1)看 CCS 的使用指南

2)明白 CMD 文件的编写

3)明白中断向量表文件的编写,并定位在正确的地方

4)运行一个纯 simulator 的程序,了解 CCS 的各个操作

5)到 TI 网站下相关的源码,参考源码的结构进行编程

6)不论是 C 编程还是 ASM 编程,模块化是必须的

5、关于 TI 54X 系列 DSP 的 bootloader 过程:

请详细阅读 TI 文档 SPRA618A、SPRA571,这些文档对 boot 的机制进行了详细说明同时说明了利用 hex500 将*.out 文件转化为*.hex 文件时,需要编写的 cmd 文件的写法。

6、如何选择外部时钟?

DSP 的内部指令周期较高,外部晶振的主频不够,因此 DSP 大多数片内均有 PLL。但每个系列不尽相同。

1)TMS320C2000 系列:

TMS320C20x:PLL 可以÷2,×1,×2 和×4,因此外部时钟可以为 5MHz-40MHz。

TMS320F240:PLL 可以÷2,×1,×1.5,×2,×2.5,×3,×4,×4.5,×5 和×9,因此外部时钟 可以为2.22MHz-40MHz。

TMS320F241/C242/F243:PLL 可以×4,因此外部时钟为 5MHz。 TMS320LF24xx:PLL 可 以由 RC 调节,因此外部时钟为 4MHz-20MHz。

TMS320LF24xxA:PLL 可以由 RC 调节,因此外部时钟为 4MHz-20MHz。

2)TMS320C3x 系列:

TMS320C3x:没有 PLL,因此外部主频为工作频率的 2 倍。

TMS320VC33:PLL 可以÷2,×1,×5,因此外部主频可以为 12MHz-100MHz。

3)TMS320C5000 系列:

TMS320VC54xx:PLL 可以÷4,÷2,×1-32,因此外部主频可以为 0.625MHz-50MHz。

TMS320VC55xx:PLL 可以÷4,÷2,×1-32,因此外部主频可以为 6.25MHz-300MHz。

4)TMS320C6000 系列:

TMS320C62xx:PLL 可以×1,×4,×6,×7,×8,×9,×10 和×11,因此外部主频可以为 11.8MHz-300MHz。

TMS320C67xx:PLL 可以×1 和×4,因此外部主频可以为 12.5MHz-230MHz。 TMS320C64xx:PLL 可以×1,×6 和×12,因此外部主频可以为 30MHz-720MHz 软件。

7、等待的如何使用?

    DSP 的指令周期较快,访问慢速存储器或外设时需加入等待。等待分硬件等待和软件等待, 每一个系列的等待不完全相同。

1)对于 C2000 系列: 硬件等待信号为 READY,高电平时不等待。 软件等待由 WSGR 寄

存器决定,可以加入最多 7 个等待。其中程序存储器和数据存储器及 I/O 可以分别设置。

2)对于 C3x 系列: 硬件等待信号为/RDY,低电平是不等待。 软件等待由总线控制寄存器 中的 SWW 和WTCNY 决定,可以加入最多 7 个等待,但等待是不分段的,除了片内之外 全空间有效。

3)对于 C5000 系列: 硬件等待信号为 READY,高电平时不等待。 软件等待由 SWWCR 和 SWWSR 寄存器决定,可以加入最多 14 个等待。其中程序存储器、控制程序存储器和数据 存储器及 I/O 可以分别设置。

4)对于 C6000 系列(只限于非同步存储器或外设): 硬件等待信号为 ARDY,高电平时不 等待。 软件等待由外部存储器接口控制寄存器决定,总线访问外部存储器或设备的时序可 以设置,可以方便的同异步的存储器或外设接口。

8、Link 的 cmd 文件的作用是什么?

Link 的 cmd 文件用于 DSP 代码的定位。由于 DSP 的编译器的编译结果是未定位的,DSP 没有操作系统来定位执行代码,每个客户设计的 DSP 系统的配置也不尽相同,因此需要用 户自己定义代码的安装位置。以 C5000为例,基本格式为:

-o sample.out

-m sample.map

-stack 100

sample.obj meminit.obj

-l rts.lib

MEMORY

{

PAGE 0: VECT: origin = 0xff80, length 0x80

PAGE 0: PROG: origin = 0x2000, length 0x400

PAGE 1: DATA: origin = 0x800, length 0x400

}

SECTIONS

{

.vectors : {} >PROG PAGE 0

.text : {} >PROG PAGE 0

.data : {} >PROG PAGE 0

.cinit : {} >PROG PAGE 0

.bss : {} >DATA PAGE 1

}

9、如何将 OUT 文件转换为 16 进制的文件格式?

DSP 的开发软件集成了一个程序,可以从执行文件 OUT 转换到编程器可以接受的格式,使 得编程器可以用次文件烧写 EPROM 或 FLASH。对于 C2000 的程序为 DSPHEX;对于 C3x 程 序为 HEX30;对于 C54x 程序为HEX500;对于 C55x 程序为 HEX55;对于 C6x 程序为 Hex6x。 以 C32 为例,基本格式为:

sample.out

-x

-memwidth 8

-bootorg 900000h

-iostrb 0h

-strb0 03f0000h

-strb1 01f0000h

-o sample.hex

ROMS

{

EPROM: org = 0x900000,len=0x02000,romwidth=8

}

SECTIONS

{

.text: paddr=boot

.data: paddr=boot

}

10、为什么在 CCS 下编译工具工作不正常?

在 CCS 下有部分客户会碰到编译工具工作不正常,常见错误为:

1)autoexec.bat 的路径“out of memory”。修改 autoexec.bat,清除无用的 PATH 路径。

2)编译的输出文件(OUT 文件)写保护,无法覆盖。删除或修改输出文件的属性。

3)Windows 有问题。重新安装 windows。

4)Windows 下有程序对 CCS 有影响。建议用一“干净”的计算机。

11、在 CCS 下,如何选择有效的存储器空间?

CCS 下的存储器空间最好设置同你的硬件,没有的存储器不要有效。这样便于调试,CCS 会发现你调入程序时或程序运行时,是否访问了无效地址。

1)在 GEL 文件中设置。参见 CCS 中的示例。

2)在 OptiON 菜单下,选择 Memory Map 选项,根据你的硬件设置。注意一定要将 Enable Memory Mapping 置为使能。

12、在 CCS 下,OUT 文件加载时提示“Data verification failed...”的原因?

Link 的 CMD 文件分配的地址同 GEL 或设置的有效地址空间不符。中断向量定位处或其它 代码、数据段定位处,没有 RAM,无法加载 OUT 文件。解决方法:

1)调整 Link 的 CMD 文件,使得定位段处有 RAM。

2)调整存储器设置,使得 RAM 区有效。

13、为什么要使用 BIOS?

1)BIOS 是 Basic I/O System 的简称,是基本的输入、输出管理。

2)用于管理任务的调度,程序实时分析,中断管理,跟踪管理和实时数据交换。

3)BIOS 是基本的实时系统,使用 BIOS 可以方便地实现多任务、多进程的时间管理。

4)BIOS 是 eXpress DSP 的标准平台,要使用 eXpress DSP 技术,必须使用 BIOS。

14、5V/3.3V 如何混接?

TI DSP 的发展同集成电路的发展一样,新的 DSP 都是 3.3V 的,但目前还有许多外围电路

是 5V 的,因此在 DSP 系统中,经常有 5V 和 3.3V 的 DSP 混接问题。在这些系统中,应注

意:

1)DSP 输出给 5V 的电路(如 D/A),无需加任何缓冲电路,可以直接连接。

2)DSP 输入 5V 的信号(如 A/D),由于输入信号的电压>4V,超过了 DSP 的电源电压,DSP

的外部信号没有保护电路,需要加缓冲,如  74LVC245 等,将 5V 信号变换成 3.3V 的信号。

3)仿真器的 JTAG 口的信号也必须为 3.3V,否则有可能损坏 DSP。

15、如何选择 DSP 的电源芯片?

TMS320LF24xx:TPS7333QD,5V 变 3.3V,最大 500mA。

TMS320VC33: TPS73HD318PWP,5V 变 3.3V 和 1.8V,最大 750mA。

TMS320VC54xx:TPS73HD318PWP,5V 变 3.3V 和 1.8V,最大 750mA; TPS73HD301PWP, 5V 变 3.3V 和可调,最大 750mA。

TMS320VC55xx:TPS73HD301PWP,5V 变 3.3V 和可调,最大 750mA。 TMS320C6000:PT6931,TPS56000,最大 3A。

16、DSP 的最高主频能从芯片型号中获得吗?

TI 的 DSP 最高主频可以从芯片的型号中获得,但每一个系列不一定相同。

1)TMS320C2000 系列:

TMS320F206-最高主频 20MHz。

TMS320C203/C206-最高主频 40MHz。

TMS320F24x-最高主频 20MHz。

TMS320LF24xx-最高主频 30MHz。

TMS320LF24xxA-最高主频 40MHz。

TMS320LF28xx-最高主频 150MHz。

2)TMS320C3x 系列:

TMS320C30:最高主频 25MHz。

TMS320C31PQL80:最高主频 40MHz。

TMS320C32PCM60:最高主频 30MHz。

TMS320VC33PGE150:最高主频 75MHz。

3)TMS320C5000 系列:

TMS320VC54xx:最高主频 160MHz。

TMS320VC55xx:最高主频 300MHz。

4)TMS320C6000 系列:

TMS320C62xx:最高主频 300MHz。

TMS320C67xx:最高主频 230MHz。

TMS320C64xx:最高主频 720MHz。

17、如何选择 DSP 的外部存储器?

DSP 的速度较快,为了保证 DSP 的运行速度,外部存储器需要具有一定的速度,否则 DSP 访问外部存储器时需要加入等待周期。

1)对于 C2000 系列: C2000 系列只能同异步的存储器直接相接。 C2000 系列的 DSP 目前 的最高速度为150MHz。建议可以用的存储器有:

CY7C199-15:32K×8,15ns,5V;

CY7C1021-12:64K×16,15ns,5V; CY7C1021V33-12:64K×16,15ns,3.3V。

2)对于 C3x 系列: C3x 系列只能同异步的存储器直接相接。 C3x 系列的 DSP 的最高速度, 5V 的为40MHz,3.3V 的为 75MHz,为保证 DSP 无等待运行,分别需要外部存储器的速度 <25ns 和<12ns。建议可以用的存储器有:

ROM: AM29F400-70:256K×16,70ns,5V,加入一个等待;

AM29LV400-55(SST39VF400):256K×16,55ns,3.3V,加入两个等待(目前没有更快的 Flash)。 SRAM:CY7C199-15:32K×8,15ns,5V;

CY7C1021-15:64K×16,15ns,5V;

CY7C1009-15:128K×8,15ns,5V;

CY7C1049-15:512K×8,15ns,5V;

CY7C1021V33-15:64K×16,15ns,3.3V;

CY7C1009V33-15:128K×8,15ns,3.3V;

CY7C1041V33-15:256K×16,15ns,3.3V。

3)对于 C54x 系列: C54x 系列只能同异步的存储器直接相接。 C54x 系列的 DSP 的速度为 100MHz 或160MHz,为保证 DSP 无等待运行,需要外部存储器的速度<10ns 或<6ns。建议 可以用的存储器有:

ROM: AM29LV400-55(SST39VF400):256K×16,55ns,3.3V,加入 5 或 9 个等待(目前 没有更快的Flash)。

SRAM: CY7C1021V33-12:64K×16,12ns,3.3V,加入一个等待; CY7C1009V33-12:128K×8,12ns,3.3V,加入一个等待。

4)对于 C55x 和 C6000 系列: TI 的 DSP 中只有 C55x 和 C6000 可以同同步的存储器相连, 同步存储器可以保证系统的数据交换效率更高。

ROM: AM29LV400-55(SST39VF400):256K×16,55ns,3.3V。 SDRAM: HY57V651620BTC-10S:64M,10ns。

SBSRAM: CY7C1329-133AC,64k×32;

CY7C1339-133AC,128k×32。

FIFO:CY7C42x5V-10ASC,32k/64k×18。

  • DSP学习初阶的一些笔记已关闭评论
    A+
发布日期:2020年04月25日  所属分类:DSP