【DSP应用与技术】学习记录2:DSP硬件结构
1、DSP硬件基本特点


MIPS描述的是CPU每秒钟能运行百万次指令的能力
MFLOPS:每秒钟运行百万次浮点操作的能力

这样CPU一个周期内能完成一次乘法和一次加法,提高了数字信号处理算法执行效率

哈弗结构的程序存储器和数据存储器是分开的,而一般的个人电脑采用的是冯.诺依曼体系结构
需要一组程序总线访问程序存储器,还需要一组数据总线访问数据存储器

由DSP芯片的结构可知需要有多总线,采用多总线访问机制

由流水线操作可看出一个周期内可以执行多条操作。

DMA:在没有CPU干预的情况下可以独立地完成数据的操作


ROM:掉电不丢失 RAM:掉电丢失 FLASH:本质上属于ROM的一种,也是掉电不丢失的介质

片内存储空间不够时,需要扩展外部存储器
运算单元在访问片外FLASH时运行速度最慢,因为片外存储单元距离CPU最远;而运算单元在访问CPU上的寄存器时其运行速度是最快的,因为这些寄存器距离运算单元最近。
2、DSP典型结构
以TMS320C6000为例进行DSP芯片典型结构的介绍。

上图的左下角是外部扩展部分

以下了解一下6000系列CPU的八个功能模块,每个功能模块都有自己负责的操作




下图是CPU执行指令的流程(从上往下看)。C6000芯片中,CPU读一次是读一个指令包,这个指令包是256位(固定)。指令包中有可能是16位的指令,也有可能是32位的指令。比如有的指令做的是乘法,就将其送到M单元去,如果有的指令是做的移位操作,那就将其送入S单元去。(该过程涉及指令分发和指令译码)。

那么指令执行所需的数据从哪来呢(比如乘法需要的两个乘数)?这就涉及到数据通路A和寄存器文件。电路原理图如下所示。

如上图中的引脚ST 其是64位总线,将计算结果的数据存到指定的存储单元中去。
而上图中的引脚LD(load),他的功能主要是加载数据,将指令执行所需的数据从存储器中读取进来。
除此之外,指令执行所需的数据也可以从通用寄存器文件中获得。寄存器文件可以存放运算过程中中间变量的值,而不需要放到外部存储器去。因为寄存器距离运算单元近,这样可以加快功能单元的执行效率。在C6000中有两个通用寄存器文件。每个寄存器文件都包含32个通用寄存器

如下图是C6000系列中的存储器。一级缓存存储容量最小,但是存取速度最快。外部扩展存储器存储容量最大,但是存取速度最慢。二级缓存则在两者之间。如果CPU要访问程序一级缓存,则需要通过程序存储控制器来实现。而剩下的缓存和外部扩展存储器,也都由相应的存储控制器来实现访问。

如下图一共有两种结构,第一种就是CPU在中间,存储单元分布在CPU周围,这是“平面结构”,主要适用于存储容量需求不大的情况。
第二种是“分层结构”,对存取速度、存储容量有比较高的要求。(因为C6000主要处理视频、图像)
以CPU读取指令为例说明:当需要调用某段代码的时候,CPU会首先在一级缓存中查找,如果找到了就立即执行;如果没有找到就去二级缓存查找,如果找到了就会将相应的指令代码读入一级缓存,以此类推。这样指令就会按照他们执行的‘’频度‘’分布在不同层次的存储空间内,从而实现了执行速度与成本之间的优化设计。比较常被调用的代码指令就放在离运算单元最近的一级缓存中,这样程序执行的整体速度会有所提升。

不同类型的DSP芯片,由于其功能不同,面向的市场定位不同,其硬件结构也会有比较大的差别,因此一开始做好需求分析是很有必要的。