近年来,我国电子信息产业和市场高速增长,DSP 芯片产品需求量持续增大,虽然有一些集成电路设计企业从事 DSP 系统及相关产品的开发与应用,但在 DSP 芯片的研发上,只在某些大学、科研院所做过预研性课题,还没有形成自己的独立知识产权的技术,因此对 DSP 处理器的设计有不可估量的作用,而体系结构的设计是处理器设计的灵魂,处理器的设计首先从体系结构的设计开始,DSP 处理器的体系结构一直紧紧围绕着 DSP 算法和各种应用的不断发展而改进和优化,随着各种并行处理技术(VLIW,SIMD,超标量,多处理机等)、可重构技术和低功耗体系结构技术的出现,使各种新的 DSP 处理器体系结构不断涌现,使得如今的 DSP 处理器性能不断提高,并使它们在通信、自动控制、雷达、气象、导航、机器人等许多嵌入式实时领域得到了广泛应用。而这些领域都要求处理器是高速、低功耗的。因此我们在对当前 DSP 体系结构的最新发展的全面考察的基础上,考虑到低功耗、低成本、高性能等要求,设计了一个 16 位嵌入式定点 DSP 处理器μDSP 的体系结构,如图 1。

 


下面就μDSP 的总线结构、流水线设计、特殊的指令系统、寻址方式、强大的控制部件和高速的运算单元等几个方面对μDSP 的体系结构设计进行了详细的阐述。

 

1.改进型哈佛总线结构

由于 DSP 处理器主要应用于各类数据运算,数据吞吐率都非常大。特别是进行乘累加运算时,需要 2 个甚至 3 个数据同时参与运算,传统的冯?诺曼结构无法满足数据和指令存取的需求,所以,DSP 处理器普遍采用哈佛总线结构。虽然哈佛结构使用采取分开的程序存储器和数据存储器,以满足同时存取数据和取指令的需求,但是这种结构由于缺乏指令和数据存储空间的灵活性,使得存储器空间不能得到灵活、充分的使用。

 

为进一步提高性能,μDSP 采用了改进的哈佛结构,在采用分开的程序存储器和数据存储器的同时,允许数据存储在程序存储器中,数据存储器和程序存储器统一编址。程序存储器的大小为 32K*24bit(指令为 24 位宽),数据存储器大小为 32K*16bit(数据位宽为 16)。

 

采用 4 总线结构,这 4 条总线分别是程序地址总线(PMA)、程序数据总线(PMD),数据地址总线(DMA)、数据数据总线(DMD)。存储器采用同步 SRAM,并采用流水线方式存取数据和指令,完成一次访问需经过两级流水线。为进一步提高存取灵活性,程序总线既可以取指令,又可以存取数据,既可访问程序存储器,又可以访问数据存储器。另外,为了减少存储器的访问周期,增加了一个片内指令 Cache,用来存放常用的指令,Cache 的大小为 64*43bit,可存储 64 个指令-地址对。指令 Cache 采用组相联映射方式,并采取最近最少使用(LeastRecentlyUsed)替换策略。

 

这种改进的哈佛结构不仅提高了指令和数据存取的效率,还提高了存储器的利用率,是一种比较好的结构。

 

2.六级流水线设计

流水线设计是现代处理器设计的核心。流水线的设计要考虑诸多的因素,比如流水线各级的平衡、流水线的吞吐率以及流水线的结构复杂度等方面,我们采用六级流水线设计,每一级的名称及需要完成的如下功能:

 

(1)Look-AheadAddress(LA):这一阶段程序控制器从各个地址来源中选出本时钟进入流水线的指令的地址,把指令地址放在 PMA 总线上,它也用于解决总线冲突问题。因为 PMA 总线可能同时被 LA 和 AD 两个阶段使用,这时总线发生冲突,程序控制器就查找这条指令是否在 Cache 里。如果命中(Hit),指令就从 Cache 中提前取出,使得 AD 可以使用总线;如果不命中(Miss),就让 AD 优先使用总线,程序控制器在下一个周期得到 PMA 总线。

 

(2)PrefetchAddress(PA):这一阶段把指令地址送到存储器,开始取指令。由于使用的是同步两级流水 SRAM,这一阶段指令并没有马上被取出,要到下一周期结束时才完成取指过程。

 

(3)FetchAddress(FA):这一阶段指令通过 PMD 总线从存储器取出。因为存储器需要两个周期的时间完成访问,即从地址放在总线上到得到数据需要两个周期,所以上一周期开始的取指令到这个周期结束。

 

(4)AddressDecode(AD):指令的某些部分被译码,比如 DAG 操作。如果指令需要存储器数据,这个数据的地址就放在适当的地址总线上。同时将没有解码的部分送到下一级。

 

(5)InstrucTIonDecode(ID):这个阶段对指令的其余部分译码。同时也用于等待存储器访问,由于取数据同样要两个周期。

 

(6)Execute(PC):这一阶段执行指令,设置各状态标志位,并把结果写到适当的寄存器中。

 

3.特殊的指令系统

处理器的设计首先从指令系统设计开始,不同的指令系统也决定了不同的处理器结构设计,μDSP 的指令系统非常丰富,可以完成各种 DSP 算法所要求的功能,大体来说,需要设计以下 4 大类指令:程序流控制指令,数据移动指令,运算指令和多功能指令。必须满足以下要求:

 

(1)24 位指令宽度;
(2)高密度指令编码;
(3)提供多功能指令,使得一条指令可完成多个操作;
(4)支持双字指令;
(5)提供零开销循环指令;
(6)与主流 DSP(ADI 公司的 ADSP219x 系列)兼容。

 

4.灵活的寻址方式

由于 DSP 算法的独特性,一般通用处理器的普通寻址方式不能满足要求,所以 DSP 处理器一般采用许多特殊的、灵活的寻址方式。μDSP 中主要有 6 种寻址方式:直接寻址、前变址寻址、后变址寻址、循环寻址、位反寻址、分页寻址。要实现这些寻址方式,设计了一个数据地址发生器(DAG),如下图 2,考虑到μDSP 可以同时对程序存储器和数据存储器进行访问,设计了两个 DAG,它们的不同之处在于:DAG1 只能产生数据存储器地址,但有位反功能;DAG2 可以产生数据存储器地址也可以产生程序存储器的地址,但是没有位反功能。它有 4 个寄存器组:索引寄存器组(IRegisters)、修改寄存器组(MRegisters),长度寄存器组(LRegisters)和基址寄存器组(BRegisters)。每个寄存器组有 4 个 16 位的寄存器,可以通过 DMD 总线进行读写。I 寄存器组存放访问存储器的实际地址,M 寄存器组用于保存地址偏移量,L 寄存器组和 B 寄存器组则是专门用于循环寻址的,前者保存循环寻址中数据块的长度,后者保存循环寻址的首地址。图中虚线框中部分为 DAG1 所独有。

 

 

5.强大的控制部件

控制部件是完成整个 DSP 处理器各个部分之间协调工作的重要部件。控制部件主要负责指令地址的产生、流水线的控制以及处理各种相关、异常、中断等工作,以保证数据通路的正常工作。控制部件的任务是非常艰巨的,没有一个功能强大的控制部件,整个 DSP 处理器将无法正常工作。μDSP 的控制部件按照功能可以大致分为指令地址选择逻辑、流水线控制逻辑、循环控制逻辑和中断控制器等几部分。

 

6.高速的运算单元

运算单元是 DSP 处理器的执行部件,是实现各种 DSP 算法的核心部分。所有算法的实现都是由运算单元的基本功能组合而成,所有的其他部件如控制部件、数据通路都是为运算单元服务的,为运算单元提供各种控制和充分的数据。μDSP 有 3 个功能强大的高速运算单元:算术逻辑单元(ALU),乘法累加单元(MAC),移位器(Shifter)。

 

处理器的设计是一个非常复杂的工作,体系结构的设计是处理器设计的灵魂,设计者面临的任务非常复杂,要确定处理器的应用目标,针对应用目标需求判断哪些特征是最重要的,然后在不超出成本的范围内力求性能最高。

 

本文的创新点:主要对μDSP 的体系结构设计进行了详细的阐述,对哈佛总线结构进行了改进,定义了六级流水线的名称和功能,指出了特殊的指令系统应达到的要求,给出了μDSP 的体系结构的结构图,并详细介绍了一个数据地址发生器的设计等。