嵌入式DSP处理器μDSP的体系结构设计
近年来,我国电子信息产业和市场高速增长,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采用组相联映射方式,并采取最近最少使用(Least Recently Used)替换策略。
这种改进的哈佛结构不仅提高了指令和数据存取的效率,还提高了存储器的利用率,是一种比较好的结构。
2.六级流水线设计
流水线设计是现代处理器设计的核心。流水线的设计要考虑诸多的因素,比如流水线各级的平衡、流水线的吞吐率以及流水线的结构复杂度等方面,我们采用六级流水线设计,每一级的名称及需要完成的如下功能:
(1)Look-Ahead Address (LA):这一阶段程序控制器从各个地址来源中选出本时钟进入流水线的指令的地址,把指令地址放在PMA总线上,它也用于解决总线冲突问题。因为PMA总线可能同时被LA和AD两个阶段使用,这时总线发生冲突,程序控制器就查找这条指令是否在Cache里。如果命中(Hit),指令就从Cache中提前取出,使得AD可以使用总线;如果不命中(Miss),就让AD优先使用总线,程序控制器在下一个周期得到PMA总线。
(2)Prefetch Address (PA):这一阶段把指令地址送到存储器,开始取指令。由于使用的是同步两级流水SRAM,这一阶段指令并没有马上被取出,要到下一周期结束时才完成取指过程。
(3)Fetch Address (FA):这一阶段指令通过PMD总线从存储器取出。因为存储器需要两个周期的时间完成访问,即从地址放在总线上到得到数据需要两个周期,所以上一周期开始的取指令到这个周期结束。
(4)Address Decode (AD):指令的某些部分被译码,比如DAG操作。如果指令需要存储器数据,这个数据的地址就放在适当的地址总线上。同时将没有解码的部分送到下一级。
(5)Instruction Decode (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个寄存器组:索引寄存器组(I Registers)、修改寄存器组(M Registers),长度寄存器组(L Registers)和基址寄存器组(B Registers)。每个寄存器组有4个16位的寄存器,可以通过DMD总线进行读写。I寄存器组存放访问存储器的实际地址,M寄存器组用于保存地址偏移量,L寄存器组和B寄存器组则是专门用于循环寻址的,前者保存循环寻址中数据块的长度,后者保存循环寻址的首地址。图中虚线框中部分为DAG1所独有。
5.强大的控制部件
控制部件是完成整个DSP处理器各个部分之间协调工作的重要部件。控制部件主要负责指令地址的产生、流水线的控制以及处理各种相关、异常、中断等工作,以保证数据通路的正常工作。控制部件的任务是非常艰巨的,没有一个功能强大的控制部件,整个DSP处理器将无法正常工作。μDSP的控制部件按照功能可以大致分为指令地址选择逻辑、流水线控制逻辑、循环控制逻辑和中断控制器等几部分。
6.高速的运算单元
运算单元是DSP处理器的执行部件,是实现各种DSP算法的核心部分。所有算法的实现都是由运算单元的基本功能组合而成,所有的其他部件如控制部件、数据通路都是为运算单元服务的,为运算单元提供各种控制和充分的数据。μDSP有3个功能强大的高速运算单元:算术逻辑单元(ALU),乘法累加单元(MAC),移位器(Shifter)。
处理器的设计是一个非常复杂的工作,体系结构的设计是处理器设计的灵魂,设计者面临的任务非常复杂,要确定处理器的应用目标,针对应用目标需求判断哪些特征是最重要的,然后在不超出成本的范围内力求性能最高。
本文的创新点:主要对μDSP的体系结构设计进行了详细的阐述,对哈佛总线结构进行了改进,定义了六级流水线的名称和功能,指出了特殊的指令系统应达到的要求,给出了μDSP的体系结构的结构图,并详细介绍了一个数据地址发生器的设计等。
评论