薛海卫,徐新宇,符士华
(中国电子科技集团公司第58研究所,江苏 无锡 214035)
数字信号处理器DSP广泛应用于现代通信、信息处理、自动控制等领域中,通过指令程序,DSP能实现滤波、快速傅里叶变换等各种算法,是现代信号处理的关键器件之一。DSP通常由CPU、程序控制、寻址地址、存储器、外设等逻辑部件组成,其中DSP的程序控制实现程序地址的产生与加载、各种指令的执行控制等操作。DSP程序控制调用程序计数器、堆栈、重复计数器等逻辑部件,通过程序地址的加载流程,使得指令能够正确顺利地执行。鉴于程序控制在DSP中起重要的指挥控制作用,弄清DSP程序控制结构对研究DSP性能架构具有重要意义。本文通过分析DSP程序控制的流程与实现方式,从而揭示了程序控制的核心——指令执行中各程序地址的加载关系,为设计DSP程序控制逻辑提供一种参考方法。
DSP程序的执行要进行寻址、取址、读写各种存储设备等多项操作,DSP程序除顺序执行外还可以实现多种复杂的执行方式,如跳转、子程序调用返回、循环、程序块执行等。程序可实现的操作种类越多,程序执行越灵活,可操作性和易开发性越好,则DSP的功能越强大、开发效率越高。程序控制是DSP的指挥中枢和控制核心,它控制了所有程序的执行进程。不同的执行指令导致不同的程序地址加载方式。DSP的程序控制逻辑一般由程序计数器、硬堆栈、程序重复执行计数器和状态控制寄存器等逻辑电路组成。
程序计数器PC实际上是一个加一计数器,当程序顺序执行时,计数器执行加一递增运算。程序计数器PC由递增运算、选择器和D触发器组成,其内部逻辑如图1所示。16位地址总线ADDR_B1作为PC的输入,经递增运算后,通过选择器和寄存器最后输出16位的PC地址。
图1 PC逻辑结构图
PC的递增运算实现递增或保持操作,16位输入地址ADDR_B1经过递增运算后生成输出地址PC_IN,当递增控制信号B为1时,PC_IN=ADDR_B1+1;当信号B为0时,PC_IN=ADDR_B1。当PC复位时,选择器选0输入;当PC正常工作时,选择器选PC_IN作为输入。
堆栈在子程序的调用和返回时用于暂存地址,典型DSP堆栈深度为8级,可以把8个不同的地址存入堆栈中,也即最多可有8个不同的子程序入口。PUSH和POP指令实现压栈和弹栈操作。堆栈分为输入级、栈顶和7级栈体,堆栈的输入级为五选一的选择器,其输入为地址总线ADDR_B1D、PASR、PC、数据总线DB和栈体反馈STACK_T,栈顶TOS经三态门连接到DAB_B总线上。堆栈可以把地址ADDR_B1D、PASR、PC和DB、TOS等数据压入栈体,堆栈的结构图如图2所示。
图2 堆栈结构图
栈体由二选一选择器和D触发器构成,深度为7级,加上栈顶深度共8级。栈体的输入为16位的TOS,输出为16位STACK_T,二选一选择器选择压栈还是弹栈操作,7级栈体的结构图如图3所示。
图3 7级栈体结构图
堆栈的操作过程如下:压栈操作时数据经输入级压入栈顶TOS,后由TOS通过选择器的第二路逐级压入栈体;弹栈操作时数据从后一级寄存器通过前一级选择器的第一路弹入前一级的寄存器中,逐级弹出最后经STACK_T从栈顶输出。
通常DSP可以用程序重复指令实现指令的重复执行,指令重复执行包括单指令的重复执行和指令块重复执行。单指令重复执行用RPT或RPTZ指令,指令块重复执行用RPTB指令。相关的16位寄存器有重复计数寄存器RPTC、程序块重复开始结束寄存器PASR、PAER和程序块重复计数寄存器BRCR。单指令重复执行时,RPT或RPTZ指令把需要重复执行的数值N载入RPTC寄存器,指令每执行一次,RPTC中的值就减一,直到RPTC中的值达到0为止。选择器选择RPTC或BRCR的值给运算单元进行减法运算,当用RPT或RPTZ指令时选择RPTC值,当用RPTB指令时选择BRCR值。通过减一计数实现程序重复执行的逻辑功能,如图4所示。
减法运算得到的16位结果RPT_CO根据不同的选择返回给RPTC和BRCR寄存器,RPTC和BRCR根据判断逻辑决定是否再执行减法运算。当RPTC或BRCR中的值减到0时,判断逻辑的输出RPTC_Z或BRCR_Z都为0,否则输出为1。当RPTC_Z或BRCR_Z为0时减法器停止运算,当RPTC_Z或BRCR_Z为1时,减法器继续运算。
重复计数减法功能实现减一运算,其结构与程序计数器PC的递增运算相似,每一组减法运算单元AS由传输置位逻辑、同或运算逻辑和控制传输逻辑组成。重复计数器进行递减运算,计数器输入为16位的RPT_N,输出为16位的RPT_CO。当递减控制信号B为1时, RPT_CO=RPT_N-1;当B为0时,RPT_CO=RPT_N。
图4 指令重复执行逻辑
当程序块需重复执行N+1次时,用RPTB指令把块重复值N加载入BRCR寄存器中。当执行RPTB指令时,BRAF位置位把紧跟RPTB的下一指令地址载入程序地址开始寄存器PASR,把RPTB指令中的长立即数载入程序地址结束寄存器PAER。块重复执行过程如下:PAER与PC作比较,如两者相等则BRCR与0比较,若BRCR大于0,则BRCR减一,PASR载入PC,重新开始循环;若PAER与PC不等,则继续执行直到块的最后一条指令。
16位PAER与PC比较,若相等则COMP为0,再判断BRCR是否达到0;若不同则COMP为1,PC继续递加。
根据不同的指令执行方式,程序地址PC的载入方式也不同,PC加载方式如表1。通过程序地址总线PAB来寻址程序存储器,被寻址的指令装入指令寄存器IR中。
根据表1,程序地址的输入有多种来源,包括立即数、中断矢量、寄存器ACCL、BMAR、PASR和堆栈顶TOS等,这就决定了地址加载硬件的结构是多选择器结合总线的方式。
程序地址生成与加载逻辑如图5所示,为避免多地址冲突,3个带选择的触发器输出经三态门与程序地址总线PAB相连。在PAB总线的左侧,第一个地址加载源是堆栈顶TOS、数据总线DB、存储器的输出MD6和IR<4:0>,这些输入对应返回指令RET、RETC、程序块移指令BLDD、BLDP、BLPD、乘加指令MAC或MACD、子程序调用等指令执行操作;第二个地址加载源是PASR,其值通过ADDR_B1D或数据总线DB加载,对应块循环结束操作;第三个地址加载源是BMAR,其值通过DB总线加载,对应BLDD、BLDP、BLPD、MADD、MADS指令操作。上述3种输出通过三态门连接到PAB总线上,作为PAB的来源。
表1 程序地址加载方式
在PAB总线的右侧,当执行GOTO和BACC、BACCD、CALA、TBLR、TBLW指令时,ACC<15:0>通过称之为程序总线锁存器PB赋给地址总线ADDR_B1。ADDR_B1的值也可以来自总线PAB、PC和存储器输出MD6,而ADDR_B1反馈给程序计数器作为PC输入。ADDR_B1经触发器锁存后的地址ADDR_B1D反馈回PASR寄存器,作为PASR的输入,当执行RPTB指令时ADDR_B1D载入PASR。这样根据不同的指令,通过PAB总线选择不同的地址寄存器给程序总线ADDR_B1,ADDR_B1经程序计数器PC运算后把下一个操作的地址值反馈给指定的寄存器单元。这样,程序地址生成加载逻辑实现了所有程序控制所需的地址产生和载入方式。
程序控制中的两个关键运算部件——程序计数器和重复计数器——其递增(加一)、递减(减一)运算逻辑结构相同,递增递减运算逻辑把16位的输入分成4组,每组4位,每组的运算单元结构相同,我们称之为Arithmetic Slice(AS)。每一组AS由传输置位逻辑、同或运算逻辑及控制传输逻辑构成,现以AS的低4位为例说明。传输置位逻辑如图6所示,递增保持控制信号B通过内部控制信号C<2:0>控制的传输门传到输出O<1>、O<2>和O<3>。当C<2:0>各位都为1时各级传输门打开,O<i>=O<i-1>;当C<2:0>各位都为0时传输门关闭,上拉P管打开使O<3>、O<2>、O<1>置位为1,O<0>恒为。O<3:0>的逻辑表达式如下:
图5 程序地址加载逻辑图
图6 传输置位逻辑
当C<3:0>同时为1时Z=B,当C<3:0>有一位为0时Z=0。
用Hspice对递增运算进行仿真,仿真结果如图7所示,图中ADDR_B1为递增输入,PC_IN为递增输出。以低4位运算为例,从图中可以看出:输入从0开始递增,当输入为00002时对应输出为00012、输入00012时对应输出00102、输入00102对应输出00112,以此类推,当输入为11112时输出为00002,控制传输位为1。输入到输出间延时为0.5ns。根据公式,当ADDR_B1<1:0>为11即输入为3时O<2>为0,其他输入时O<2>都为1;同样只有当ADDR_B1<2:0>为111即输入为7时O<3>为0,其他输入时O<3>都为1。当ADDR_B1<0>为0时输出PC_IN<0>为1;当ADDR_B1<0>为1时输出PC_IN<1>为1、 PC_IN<0>为0;当ADDR_B1<1>和ADDR_B1<0>都为1时输出PC_IN<2>为1;当ADDR_B1<2>、ADDR_B1<1>和ADDR_B1<0>都为1时输出PC_IN<3>为1。这样输入ADDR_B1每计数到1时,输出PC_IN<1>翻转一下;输入ADDR_B1每计数到3时,输出PC_IN<2>翻转一下;输入ADDR_B1每计数到7时,输出PC_IN<3>翻转一下,实现每次输出随输入的变化而自动加一递增。
图7 递增仿真结果图
通过对DSP的程序计数器、堆栈、程序重复逻辑和程序地址加载逻辑等的分析,弄清了程序顺序执行与重复执行的流程,对不同指令执行方式、程序加载方式作了详细阐述。分析了程序控制中递增递减运算部件的逻辑实现,明确了DSP的程序控制结构及其实现方式。本文通过分析DSP程序控制流程及其实现方式,从而揭示了指令执行中程序地址加载的各种关系,对弄清DSP程序控制结构、研究DSP架构具有参考意义。
[1]TMS320C5X DIGITAL SIGNAL PROCESSORS USER’S GUIDE TI. 1998. 80-115.
[2]TI著,徐科军,等译.TMS320LF/LC24系列DSP的CPU与外设[M]. 北京:清华大学出版社,2004. 32-41.
[3]江思敏,等编著. TMS320LF240X DSP硬件开发教程[M].北京:机械工业出版社.2003. 12-49.
[4]TMS320C54X DSP Reference Set Volume1:CPU and Peripherals. TI. 2001.145-167.