<TABLE cellSpacing=0 cellPadding=0 width=768 align=center border=0>
<TR>
<TD class=style2 height=25>
<P>2.3.2 TMS320C2X
</P></TD></TR>
<TR>
<TD class=style2 height=25>第二代TMS320 DSP芯片包括TMS32020、TMS320C25/E25、TMS320C26及TMS320C28。在这些芯片中,TMS32020是一个过渡的产品,其指令周期为200ns,与TMS32010相当,而其硬件结构则与TMS320C25一致。在第二代DSP芯片中,TMS320C25是一个典型的代表,其他芯片都是由TMS320C25派生出来的。其中TMS320E25将内部4K字的ROM改为EPROM;TMS320C26去掉了内部的4K字ROM,而将片内RAM增加到1.5K字;TMS320C28则将内部ROM增加到8K字。由于TMS320C25的典型性,下面就讨论TMS320C25的基本特征和结构。</TD></TR>
<TR>
<TD class=style2 height=25>2.3.2.1 TMS320C25的基本特征
* 指令周期: TMS320C25:100ns,TMS320C25-33:120ns,TMS320C25-50:80ns
* 片内掩膜ROM:4K 字
* 片内RAM:544字,分B0、B1和B2三块
* 程序和数据空间均为64K字
* 具有8级硬件堆栈、8个辅助寄存器
* 具有全静态双缓冲串行口,可与许多串行器件直接接口
* 与低速片外存储器通信的等待状态插入
* 采用HOLD操作的DMA
* FFT变换用的比特反转寻址
* 扩展精度算术和自适应滤波支持
* 从外部存储器全速执行的MAC/MACD指令
* 具有在多处理器之间进行同步的能力,支持多处理器共享存储器
* 1.8um CMOS工艺,68脚PGA或PLCC封装</TD></TR>
<TR>
<TD class=style2 height=25>2.3.2.2 TMS320C25的结构
TMS320C25是第二代TMS320中与TMS32020管脚全兼容的CMOS版本,但指令执行速度是TMS32020的2倍,且增加了硬件和软件资源。指令集是TMS32010和TMS32020的超集,在源代码级与它们兼容。此外,在代码级与TMS32020兼容,因此,TMS32020的程序可不用修改直接在TMS320C25上运行。
100ns的指令周期可提供较强的运算能力。由于大部分指令在一个指令周期内执行,处理器在1秒内可执行1000万条指令(10MIPS)。运算能力的增加主要得益于乘累加指令(MAC)和带数据移位的乘累加指令(MACD)、具有专用算术单元的8个辅助寄存器、适合于自适应滤波和扩展精度运算的指令集支持、比特反转寻址、快速的I/O支持等。
指令集中提供在两个存储空间中进行数据移动的指令。在外部,程序和数据存储空间在同一总线上复用,从而使得在尽量减少芯片引脚的情况下最大程度地扩大两个空间的地址范围。在内部,TMS320C25结构通过保持程序和数据总线结构分离以使指令全速执行来获得最大的处理能力。
芯片内部的程序执行采用三级流水线形式。流水线对用户来说是透明的。但是,在某些情况下流水线可能被打断(如跳转指令),在这种情况下,指令执行时间要考虑流水线必须清空和重新填充。两块大的片内RAM在系统设计时提供了很大的灵活性,其中一块既可配置为程序存储器也可配置为数据存储器。片外64K字的数据空间可直接寻址,从而使DSP算法实现更为方便。片内4K字的掩膜ROM可用来降低系统成本,若程序不超过4K字,可使TMS320C25不用扩展片外程序存储器。剩下的64K字程序空间在片外,大量的程序可在片外存储器中全速运行。程序也可从片外慢速EPROM中装入到片内高速RAM中全速运行。此外,还有硬件定时器、串行口和数据块搬移功能。</TD></TR>
<TR>
<TD class=style2 height=25>下面介绍TMS320C25的存储器分配、中央算术逻辑单元(CALU)、硬件乘法器、控制操作、串行口和I/O接口。
1.存储器分配
TMS320C25具有4K字的片内程序ROM和544字的片内RAM。RAM分为三块:B0、B1、B2。其中,B0块(256字)既可配置为数据存储器(用CNFD指令),也可配置为程序存储器(用CNFP指令)。其余288字(B1和B2块)只能是数据存储器。544字的片内RAM可使C25能处理512字的数据阵列,如可进行256点复数FFT运算,且尚有32字用作中间结果的暂存。TMS320C25提供片外可直接寻址的程序和数据空间各64K字。
寄存器组包含8个辅助寄存器(AR0~AR7),它们可用作数据存储器的间接寻址和暂存,从而增加芯片的灵活性和效率。这些寄存器既可用指令直接寻址,也可用3比特的辅助寄存器指针(ARP)间接寻址。辅助寄存器和ARP既可从数据存储器装数,也可装入立即数。寄存器的内容也可存入数据存储器中。辅助寄存器组与辅助寄存器算术单元(ARAU)相连接,用ARAU访问信息表无需CALU参与地址操作,这样可让CALU进行其他操作。
2.中央算术逻辑单元
CALU包含一个16位的定标移位器(Scaling),一个16×16位的并行乘法器,一个32位的累加器和一个32位的算术逻辑单元(ALU)。移位器根据指令要求提供0到16位的数据左移。累加器和乘法器输出端的移位器适合于数值的归一化、比特提取、扩展精度算术和溢出保护。
典型的ALU指令实现包含以下三步:
(1) 数据在数据总线上从RAM中获取;
(2) 数据移交给完成算术运算的定标移位器和ALU;
(3) 结果送回累加器。
32位累加器可分为2个16位以进行数据存储:SACH(高16位)和ACCL(低16位)。累加器有一个进位位可方便加法和减法的多精度运算。
3.硬件乘法器
TMS320C25具有一个16×16位的硬件乘法器,它能在一个指令周期内计算一个32位乘积。有两个寄存器与乘法器相关:①16位暂存寄存器TR,用于保存乘法器的一个操作数;②32位乘积寄存器PR,用于保存乘积。
乘积寄存器的输出可左移1位或4位,这对于实现小数算术运算或调整小数乘积很有用。PR的输出也可右移6位,这样可连续执行128次乘/加而无溢出。无符号乘(MPYU)指令可方便扩展精度乘法。
4.I/O接口
I/O空间由16个输入口和16个输出口组成。这些口可提供全16位并行I/O接口。输入(IN)和输出(OUT)操作典型的是2个周期,但若用重复指令,可变成单周期指令。I/O器件映射到I/O地址空间,其方式与存储器映射方式相同。与不同速度的存储器或I/O器件接口采用READY线完成。
TMS320C25也支持外部程序/数据存储器的DMA,其他处理器通过置HOLD\ 为低后可完全控制TMS320C25的外部存储器,使C25将其地址、数据和控制线呈高阻状态。外部处理器和C25的通信可通过中断来完成。TMS320C25芯片提供两种DMA方式,一种是加上HOLD后停止执行;另一种是C25继续执行,但执行是在片内ROM和RAM中进行,这可大大提高性能。</TD></TR>
<TR>
<TD class=style2 height=25>2.3.2.3 TMS320C25的软件
TMS320C25的指令总共有133条,其中97条是单周期指令。在另外36条指令中,21条包括跳转、调用、返回等,这些指令需重新装入程序计数器,使执行流水线中断。另外7条指令是双字和长立即数指令。剩下的8条指令(IN,OUT,BLKD,BLKP,TBLR,TBLW,MAC,MACD)支持I/O操作、存储器之间的数据交换或提供处理器内部额外的并行操作,而且这8条指令与重复计数器配合使用时可成为单周期指令。这主要利用了处理器的并行机制,使得复杂的计算可用很少的几条指令来完成。
由于大多数指令用单16位字编码,故可在一个周期内完成。存储器寻址方式有三种:直接寻址、间接寻址和立即数寻址。直接寻址和间接寻址都用来访问数据存储器,立即数寻址利用由程序计数器确定的存储器内容。
使用直接寻址方式时,指令字的7位和9位数据存储器页指针(DP)构成16位的数据存储器地址。其中,每页长128字,共有512页,故可寻址64K的数据空间。间接寻址借助于8个辅助寄存器(AR0~AR7)。表2.2 列出了7种间接寻址方式。其中的比特反转寻址可大大提高 FFT运算的I/O效率。其中,OP表示某种运算,NARP表示新的ARP。</TD></TR>
<TR>
<TD class=style2 height=25>
<DIV align=center>表2.2 TMS320C25的寻址方式</DIV></TD></TR>
<TR>
<TD class=style2 height=25>
<TABLE cellSpacing=0 cellPadding=0 width=637 align=center border=0>
<TR bgColor=#eeeeee>
<TD width=179 height=25>
<P align=center>寻址方式</P></TD>
<TD width=212 height=25>
<P align=center>操作</P></TD></TR>
<TR bgColor=#ffffff>
<TD width=179 height=25>
<P>OP A</P></TD>
<TD width=212 height=25>
<P>直接寻址</P></TD></TR>
<TR bgColor=#eeeeee>
<TD width=179 height=25>
<P>OP *(,NARP)</P></TD>
<TD width=212 height=25>
<P>间接寻址;AR不变</P></TD></TR>
<TR bgColor=#ffffff>
<TD width=179 height=25>
<P>OP *+(,NARP)</P></TD>
<TD width=212 height=25>
<P>间接寻址;当前AR加1</P></TD></TR>
<TR bgColor=#eeeeee>
<TD width=179 height=25>
<P>OP *-(,NARP)</P></TD>
<TD width=212 height=25>
<P>间接寻址;当前AR减1</P></TD></TR>
<TR bgColor=#ffffff>
<TD width=179 height=25>
<P>OP *0+(,NARP)</P></TD>
<TD width=212 height=25>
<P>间接寻址;AR0加到当前AR</P></TD></TR>
<TR bgColor=#eeeeee>
<TD width=179 height=25>
<P>OP *0-(,NARP)</P></TD>
<TD width=212 height=25>
<P>间接寻址;当前AR减去AR0</P></TD></TR>
<TR bgColor=#ffffff>
<TD width=179 height=25>
<P>OP *BR0+(,NARP)</P></TD>
<TD width=212 height=25>
<P>间接寻址;AR0加到AR()</P></TD></TR>
<TR bgColor=#eeeeee>
<TD width=179 height=25>
<P>OP *BR0-(,NARP)</P></TD>
<TD width=212 height=25>
<P>间接寻址;当前AR减去AR0()</P></TD></TR></TABLE></TD></TR></TABLE> |