DSP原理与应用开发基础_第1页
DSP原理与应用开发基础_第2页
DSP原理与应用开发基础_第3页
DSP原理与应用开发基础_第4页
DSP原理与应用开发基础_第5页
已阅读5页,还剩156页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第10章

DSP原理与应用开发基础

数字信号处理器(digitalsignalprocessor,DSP)是专门为可以高速运算、编程方便的新型微处理器。本章对于DSP原理和系统应用开发的基本知识进行了研究。应用系统的开发涉及软件和硬件设计两个方面,其中硬件设计是首先需要克服的难点,正确设计来源于对芯片知识的透彻了解,对TMS320C62X芯片基本结构,包括寄存器文件、功能单元和存储器通道等,指令、中断、存储器和外围器件进行了较详细描述。美国TI公司的TMS320系列的DSP芯片的体系结构采用哈佛(Harvard)结构,其特点是芯片具有各自独立的数据存储空间和程序存储空间,因此有独立的数据总线和程序总线。这可以同时对数据和程序寻址(有的采用改变的哈佛结构,即在数据总线和程序总线之间有局部交叉),即DSP在对数据读写的同时也可对程序进行读写,形成指令执行的“流水线(pipeline)”方式,可加速指令执行的速度,其运算速度很高。10.1典型DSP系统的构成学习DSP应该从硬件设计开始,DSP系统应用关键在于以芯片特点为基础的硬件设计。这里有两点值得关注,一是对于系统的构成应该有基本的了解,二是充分了解DSP芯片的结构、性能和特点,这对于正确和合理设计硬件系统很重要。合理的硬件设计可以充分发挥DSP软件特长,并可使系统性能达到最优。10.1典型DSP系统的构成大多数DSP芯片系统可能由DSP、外围总线及通信和人机接口等部分组成。系统还可组成能通过COMPACTPCI、PCI、ISA和VXI等总线插在计算机上工作,或通过3xbus总线等紧凑型控制系统,甚至还可以通过现场总线将整个系统作为整个现场系统中的一个节点。整个系统的协调运行依赖于正确的逻辑控制电路设计。图10-1是一个典型的DSP系统。图10-1一个典型的DSP系统

DSP芯片的主要任务是将前向通道输出的信号按照一定的算法进行处理,并将处理结果以数据流的形式输出给后向通道。输入信号可以是电信号、声音信号、物理信号、化学信号等等。在前向通道中,首先通过传感器将各种信号转化为一定幅值的电信号,再将这些信号进行带限滤波和抽样,然后通过A/D变换将信号变换成数字bit流。根据采样定理,采样频率至少必须是输入带限信号频率的两倍。后向通道主要由D/A、平滑滤波器及功率放大器等部分组成。最简单的DSP系统设计是基本的一步。它是指无输入/出通道,同时也不与其他系统通信的DSP系统。它包括复位电路、时钟电路、仿真接口、FLASH

memory接口、逻辑控制电路、总线驱动和锁存接口。随着DSP芯片和应用系统功能的增强,再逐步增加各类器件,构成复杂系统。10.2

DSP系统的总体方案设计开发梗概

10.2.1总体方案设计利用DSP芯片设计一个DSP系统的基本步骤如图10-2。首先确定系统总体要求,根据总体要求和相关技术指标,用软件的方法设计整体系统再仿真运行,确定系统最终架构。椐此,把系统分类为软件和硬件部分,进行系统硬件和软件两个方面的设计,并仿真调试。在根据要求、任务确定总体目标和技术指标的前提下,选择DSP芯片,统一考虑软硬件分工,再分别完成系统构造,整体测试及生产。图10-2基于DSP芯片的DSP实时系统设计和开发流程图10.2.2软件设计阶段

在根据技术指标确定方案后,进入软硬件设计阶段。软件编程主要包括COFF-公共目标文件格式、DSP开发工具、代码调试器三部分。在COFF文件格式中,段的概念很重要,即在用汇编语言或高级语言编程时基于代码段或数据段,不必为程序代码和变量指定目标地址。DSP开发工具包括C编译器、汇编器、链接器、文件格式转换程序、库存生成文件文档管理程序、头文件等。而代码调试主要是C/汇编语言源代码调试器和硬件仿真器等工具,其他如初学者工具DSK、软件开发系统等也具有学习意义。10.2.2软件设计阶段

关于DSP汇编语言,开发者要想熟练开发DSP应用系统,必须熟悉DSP芯片内部结构和指令系统。在移动电话、硬/光盘驱动器或多DSP并行处理等编程空间小的情况下,对开发高效DSP软件非常重要。汇编语言与硬件紧密结合,执行效率最高,指令代码最短,常用于实时性较强的场合,如多媒体通信、制导控制、电能转换器和图像处理等领域。10.2.2软件设计阶段

而高级语言,如C语言,其可读性和可移植性都非常好且为广大科研人员所熟悉;这将极大地缩短DSP软件开发的周期,这相比于与硬件结合紧密的汇编语言的繁琐性是非常宝贵的。DSP的C语言编程的主要内容包括,ANSI

C编译器、运行环境、运行支持库的使用与建立、I/O口编程、C语言编程的各种工具的使用和C调试器的使用等。一般C语言编程可以应用到对实时性要求不太高的场合。现在也流行汇编语言和高级语言混合编程,其形式多种多样。10.2.3硬件设计阶段

根据性能指标确定实现方案,了解具体器件结构特点和性能,画出硬件系统框图。这是第一步;确定A/D、D/A、内存、逻辑控制、通信、总线、人机接口、电源等基本部件。A/D:根据采样频率、精度来确定A/D型号,是否要求片上自带采保、多路器、基准电源等。D/A:信号频率、精度是否要求片上基准电源、多路器、输出运放等。内存:包括SRAM、EPROM,在TMS320C6000等产品中还要考虑SDRAM等。10.2.3硬件设计阶段

通信:根据通信速率决定采用的通信方式。USB和总线(PCI、ISA等)通信方式是要求较高的通信方式;并口可达1Mbps以上,而一般串口只能达到19.2Kbps。电源主要是电压的高低以及电流的大小,即电压高低要匹配、电流容量要足够。这是第二步。接下来就要设计原理图。基于以上分析,逐步集成系统。借助大规模集成电路芯片(或SOC芯片)和可编程逻辑芯片降低硬件设计的难度。这是第三步。根据系统工作原理,用EDA、Protel等工具设计PCB版图。最后是系统调试和集成。10.2.3硬件设计阶段

至此,开发DSP系统的基本概念、基本思路和基本方法建立起来了。下面认识TMS320C62X芯片,这是开发DSP系统的前提。10.3

TMS320C62X芯片基本结构

详细了解DSP芯片结构及功能特点非常重要,是开发DSP的基本环节。作为专门处理数字信号的数字信号处理器,是一类单片的、可实现高速运算的可编程微处理器。DSP芯片基本结构包括哈佛结构、流水线操作和多总线结构等。哈佛结构主要特点是将程序和数据存储在不同的存储空间,即程序存储器和数据存储器是两个独立的存储器,每个存储器独立编址、独立访问。与两个存储器相对应的是系统设置了程序总线和数据总线,从而使数据的吞吐量大大提高。由于程序和数据存储在两个分开的空间中,因此取指和执行能重叠进行。与之相关的是流水线操作,处理器可并行处理多条指令,每条指令处于流水线不同的阶段。多总线结构可保证在一个机器周期内,同时访问数据和程序存储空间。10.3

TMS320C62X芯片基本结构

DSP芯片发展很快,TMS320C6000是美国德州仪器公司(TexasInstrument)推出的定点、浮点系列DSPs,它采用修改的哈佛结构,对数据和指令的寻址可同时进行,形成了指令执行的“流水线pipeline”方式,并具有专门的硬件乘法器,从而加速指令执行的速度。TMS320C6000的定点系列是TMS320C62XX,浮点系列是TMS320C67XX。TMS320C6000片内有8个并行的处理单元,分为相同的两组,芯片的最高时钟频率可以达到300MHz。当芯片的8个处理单元同时运行时,其中定点产品峰值处理能力达到4800MIPS,浮点产品峰值处理能力达到1350MFLOPS,是目前国际上性能最高的DSPs之一。本数据采集处理系统采用TMS320C62X,其主要特点如下:它有一套完整的经过优化的开发工具,包括一个高效率的C编译器、简化汇编语言编程优化器和用于观察源代码执行情况的WINDOWSTM可视调试界面,一个与TIXDS510TM仿真界面兼容的硬件仿真板。这套工具用IEEEStandard1149.1-1990、IEEE标准测试处理端口(IEEEStandardTestAccessPort)和边界-扫描结构(Boundary-ScanArchitecture)编译。每个指令周期可执行8条32位指令;8个高度独立的功能单元,包括2个16位的乘法器(32bit)和6个32/40位的加法运算器(ALU);32个32位字长通用寄存器;灵活自由的数据/程序定位,L1/L2存储器结构:4K字节L1P程序Cache、4K字节的L1D数据Cache、64K字节L2通用RAM/Cache;超长指令字结构(very

long

instruction

word)为装载/存储结构,以减小代码长度和提高执行速度为目的的指令包结构和100%条件指令结构。32位外部存储器接口(EMIF):对异步存储器的无缝接口,如SRAM、EPROM;对同步存储器的无缝接口,如SDRAM、SBSRAM;共512M字节外部存储器可寻址空间;存储器及外围设备为具有2个带引导装载功能的DMA(直接存储器存取控制)通道,16个独立通道;2个32位通用定时器,片内锁相环(PLL),1MB位片内存储器,片外存储器接口(EMIF)和2个双向多通道缓冲串口(McBSPs);片内RAM、片外ROM、片外存储器及其他片内资源总寻址空间4GB;352引脚BGA封装。如图10-3所示。支持JTAG边界扫描标准,调试时可以方便可靠地控制DSP上面的所有资源。依照其硬件结构,依次介绍这些器件资源。图10-3TMS320C62X内部结构图10.3.1通用寄存器文件TMS320C62X数据通道结构如图10-4。2个通用寄存器文件(A和B)和一个控制寄存器文件;8个功能单元,2个读存储器通道,2个写存储器通道,两个通用寄存器文件交叉通道。数据通道分A、B两个通用寄存器文件。每个通用寄存器文件包含16个32位寄存器。对A寄存器是A0~15;B是B0~15。它们被用来作为数据、地址指针或条件寄存器。2个通用寄存器文件支持32/40位定点数据,数据可以被放在16个通用寄存器的任意一个之中。其CPU包括程序取指单元、指令发送单元、指令译码单元,两条数据通道(每条有4个功能单元),32个32位寄存器,多个控制寄存器、控制逻辑,测试仿真和中断逻辑。图10-4TMS320C62X数据通道结构10.3.2功能单元TMS320C62x数据通道中的八个功能单元等分为2组(1组和2组),即每组4个,见图10-4。每组数据通道中的功能单元作用是一样的。表10-1给出了每组功能单元的介绍。每个功能单元都有独立的端口,负责向通用寄存器写操作;每个功能单元有两个32位读端口,用于获取两个源操作数SRC1和SRC2。每个功能单元通过对应的数据通道对寄存器文件直接进行读写操作。即.L1、.S1、.D1和.M1将30/40位数据写入到寄存器文件A中而.L2、.S2、.D2、.M2单元则同样将数据写入到寄存器文件B中。表10-18个功能单元及其所进行的操作

10.3.3寄存器文件交叉通道和存储器存取通道

寄存器文件之间设置交叉联接通道1X和2X,以使不同寄存器的功能单元可以通过交叉通道相互进行操作。交叉通道允许所有功能单元从一个数据通道对另一个寄存器文件中的操作数进行读写操作。其中1X允许A数据通道的功能单元从B寄存器文件中读取操作数,而2X则允许B数据通道的功能单元从A寄存器文件中读取操作数。当然,它们可以就目的不同既可以通过交叉通道操作源操作数,又可以操作本寄存器文件。例如,L1、L2,S1、S2单元的SRC1/SRC2既可以使用交叉通道操作,又可以直接操作本寄存器文件的。通用寄存器文件的数据存取需设置通道,有两条32位的通道(LD1和LD2)用于将寄存器中的数据装载到寄存器文件中,这是两条存储器存取通道。其中LD1用于寄存器文件A,LD2用于寄存器文件B,见图10-4。10.3.4数据地址通道和控制寄存器文件从图10-4可见,数据通道DA1、DA2源于.D1/.D2单元,它们可以从一个寄存器中产生数据地址,以支持存储器与其他寄存器之间的数据读写操作。从图中还可见.S2单元可以对控制寄存器文件(controllerregisterfile2)进行读写。表10-2列出了控制寄存器文件中包含的控制寄存器。对每个寄存器的操作都通过MVC指令来进行。以下将重点介绍3个控制寄存器文件的寄存器。表10-2控制寄存器文件中包含的控制寄存器1.寻址模式寄存器(AMR,addressingmoderegister)

A4~A7和B4~B7这八个寄存器每一个都既可以线性寻址,也可以循环寻址。AMR特别说明是寻址模式。在AMR中用一个2bit域为每个寄存器选择地址变动模式,即线性寻址(指缺省状况)还是循环寻址。若为循环寻址,AMR还需要指出哪一个BK(blocksize,块大小)域用于循环寻址缓冲区,此外,这一缓冲区必须分配与BK域相等的字节大小。例如,BK=64,那么缓冲区的起始地址的低6位必须是0。图10-5给出了寻址模式选择区与BK大小选择区的示意图,表10-3则给出了寻址模式与二进制代码之间的关系。图10-5寻址模式选择区与BK大小选择区示意图表10-3寻址模式与二进制代码之间的关系AMR所保留的部分为零,这一AMR在复位时被初始化为零。块尺寸域,即BK0和BK1包括5位值,用于循环寻址计算块尺寸。块尺寸的计算公式(以字节为单位)为:2N+1,N为BK0或BK1的5位值。这样共有32种块的尺寸,见表10-4。表10-4块尺寸计算

2.控制状态寄存器

(CSR,ControlStatusRegister)

CSR结构如图10-6。它包括控制位和状态位。CSR中各个域的功能见表10-5。对于EN,PWRD,PCC和DCC域,必须先查你的器件用户手册,看这些域是否支持所控制的功能选项。图10-6控制状态寄存器表10-5控制状态寄存器域的综合描述3.

E1相程序计数器(PCE1,E1phaseprogramcounter)如图10-7所示,PCE1包括了E1流水线相执行包的32位地址。图10-7

E1相程序计数器(PCE1)10.4

TMS320C6000指令

10.4.1TMS320C62x、67x定点指令集C62X和C67x共享一个指令集。所有适用于C62x的指令均适用于C67X。然而,因为C67X为C62X对应的浮点器件,所以存在只适用于浮点器件而不适用于定点器件的指令。这节先介绍C62X与C67X数字信号处理器的共用指令,还将讨论并行操作、条件操作、资源限制和寻址模式。指令操作和执行符号注解表10-6对定点指令的部分符号给予了解释,完整描述请参看文献[1]。表10-6定点指令的部分符号描述

2.指令与功能单元之间的映射关系表10-7是部分指令集对功能单元的映射关系。表10-8给出了部分功能单元对指令集的映射。其关系为前者表示了各功能单元所管理的指令,后者表示指令使用的功能单元。表10-7部分指令集对功能单元的映射关系表10-8功能单元对指令集的映射2.延迟槽(delayslots)

定点指令的执行可以根据延迟槽来定义。延迟槽的数目等价于取出源操作数到读出结果所需的指令周期数。对于一个单周期型指令(如ADD),源操作数在第i周期读出,而结果则在第i+1周期可读。对于乘法指令MPY来说,源操作数同样在第i个周期读出,结果在第i+1周期可读。表10-9给出了每种不同类型指令的延迟槽数。延迟槽等价于一次执行或一个结果的花销。对所有’C62X与‘C67X共享的指令,一个功能单元1的花销。这意味着每个周期,功能单元上可以开始一个新的指令。单周期输出对单周期功能单元花销是不同的。表10-9延迟槽和功能单元潜在消耗(latency)(1)并行操作取指形式是指令每次被取8条,组成一个取指令包。取指包的基本格式如图10-8。取指包被对准到256位(8个字)的地址边界。图10-8取址包的基本格式单个指令的执行部分由每条指令中的一bit位(Pbit位)来控制。P-bit位(0bit位)决定该指令是否与另一条指令并行执行。P-bit位被从左到右(对应地址从低到高)扫描。如果指令i的p-bit位为1,则i+1条指令将与i条指令并行执行(在同一指令周期内)。如果p-bit位为0,那么i+1指令在同一周期里i条指令后被执行,所有的并行运行的指令构成一个执行包。一个执行包最多可包含8条指令,而且执行包中的每条指令必须使用不同的功能单元。对于详细的源操作代码与功能单元的影射关系解释应查阅相关文献。图10-9全串p位取指模式,所有8指令按顺序执行图10-11部分串p位指模式(2)并行代码举例及跳转到执行包中现象在汇编语言中用“||”指出该条指令与前一条指令并执行。图10-11中的取指包形式可以用下列指令来表示:instructionAinstructionBinstructionC||instructionD||instructionEinstructionF||instructionG||instructionH(3)条件操作所有指令都是有条件的。条件由一个3bit位的操作数(creg)域和一个1bit位的z域决定。creg用以指示所探测的条件寄存器,而z域标识为零还是非零探测。每一操作数的四个MSB位为creg域和z域。所有指令所标识的条件寄存器在E1流水线阶段的起始处被探测。如果z=1,说明测试结果标识为零。若z=0,那么测试标识为非零。如果creg=0和z=0同时满足,测试被作为真,那么指令被无条件执行。表10-10给出了creg域与指令源操作码之间的关系。表10-10可以被条件操作探测的寄存器

在代码中,用方括弧表示条件指令,方括弧里是条件寄存器名称。下面的执行包含有两条ADD并行指令:第一条ADD指令B0是以非零值为条件;第二条ADD指令的条件B0为0。“!”表示条件取反。[B0]ADD.L1A1,A2,A3||[!B0]ADD.L2B1,B2,B310.4.2资源约束

1.对使用同一功能单元的指令的约束

使用同一功能单元的两条指令不能出现在同一执行包中。下面的执行包是不正确的:ADD.S1A0,A1,A2;||SHR.S1A3,15,A4;同一执行包的两条指令使用了.S1功能单元下面的执行包是正确的:ADD.L1A0,A1,A2;||SHR.S1A3,15,A4;两条指令使用两个不同的功能单元2.对交叉通道(1X和2X)的约束

每一个执行包在每一个数据通道中可以有一个单元(.L,.S和.M单元中的任一个)通过交叉通道(1X和2X)从另一侧的寄存器文件中读取资源操作数。例如,.S1中可以从A寄存器文件中读取它的一条指令的两个源操作数,或者可以通过1X交叉通道从B寄存器文件中读取一个源操作数,从寄存器A中读取另一个源操作数。这种通道约束操作是通过在指令语句中的功能单元名后加上“X”实现的。下面的执行包无效:ADD.L1XA0,B1,A1;||MPY.M1XA4,B4,A5;1x交叉通道被两条指令同时使用下面的执行包是有效的:ADD.L1XA0,B1,A1;||MPY.M2XB4,A4,B2;两条指令分别使用1x和2X交叉通道如果指令域中的Xbit位被设置,那么操作数将从另一侧的寄存器文件中提取。3.对装载和存储的限制

装载/存储指令向其他寄存器文件装载或从其他寄存器文件存储时,可以使用从一个寄存器文件中的同一个地址指针;使用同一寄存器文件中的同一源/目的操作数的两条指令,不能同时出现在同一个执行包中。地址寄存器必须和使用的.D功能单元在同一寄存器文件中。下面的执行包是无效的:LDW.D1*A0,A1;||LDW.D2*A2,B2.D2功能单元使用了A寄存器文件中的同一寄存器下面的执行包是有效的:LDW.D1*A0,A1;||LDW.D2*B0,B2来自于正确的寄存器文件的地址寄存器文件如果两条装载指令/存储指令向同一寄存器文件装载数据或从同一寄存器存储数据,那么它们将不会出现在相同的执行包中。下面的执行包是不正确的:LDW.D1*A4,A5;向/从同一寄存器文件装载和存储(A5、A6)||TW.D2A6,*B4;下面的执行包是正确的:LDW.D1*A4,B5;装载目标寄存器和存储源寄存器位于不同寄存器文件(B5、A6)||STW.D2A6,*B4;LDW.D1*A0,B2;装载到不同的寄存器文件||LDW.D2*B0,A1;4.对寄存器读写的约束

在同一周期里同一寄存器不能有4次以上的读操作;这不包括条件寄存器。下列代码序列是无效的:MPY.M1A1,A1,A4;||ADD.L1A1,A1,A5||SUB.D2xA1,A2,A3寄存器A1出现了5次读操作下列代码序列是有效的:MPY.M1A1,A1,A4;||[A1]ADD.L1A0,A1,A5||SUB.D1A1,A2,A3寄存器A1只出现4次读操作两条写指令不能在同一周期内对同一寄存器进行操作。只要它们不在同一周期内向同一目的寄存器写入时,两条写指令就能并行运算。例如,一条i周期的MPY指令之后,紧接着一条i+1指令周期的ADD指令,那么就不能向同一寄存器写入数据,因为它们同时于i+1指令周期往寄存器写结果。因此,除非在MPY指令之后发生跳转导致ADD指令不被马上执行,否则下列指令序列是无效的:MPY.M1A0,A1,A2ADD.L1A4,A5,A2而下面的指令序列是有效的:MPY.M1A0,A1,A2||ADD.L1A4,A5,A210.4.3寻址模式(ADDRESSINGMODES)

‘C62X和C67x寻址模式有线性寻址、使用BK0的循环寻址和使用BK1的循环寻址。寻址模式由地址模式寄存器(AMR)标识。所有的寄存器都可以线性寻址。但只有8个寄存器可以循环寻址,它们是.D1功能单元的A4~A7和.D2功能单元的B4~B7。其他的寄存器都不能循环寻址。1.线性寻址模式(1)LD/ST指令对装载和存储指令而言,线性寻址模式只不过是简单地将OffsetR/Cst

操作数据的字、半字或字节移动,分别左移2位、1位或0位。然后完成一次加法ADD或一次减法到baseR寄存器(依赖于操作说明)。(2)ADDA/SUBA指令对于整数的加法和减法指令,线性寻址模式只是简单地将Srcl、cst

操作数据按照字、半字或字节数据尺寸左移2位、1位或0位。2.循环寻址模式

寻址模式寄存器(AMR)中的BK0和BK1域标识循环寻址的块尺寸大小。(1)LD/ST指令2.循环寻址模式

按照LDW,LDH(U)或LDB(U)分别将offsetR、CST左移2位、1位或0位之后,作加法或减法运算。此时,禁止N和N+1之间的进位/借位运算,baseR的位N+1到31位保持不变,而其他位的进位/借位运算照常进行。如果标识的offsetR/sct大于循环寻址的缓冲大小,2N+1,那么有效的offsetR/sct是用缓冲区尺寸对其求模所得,见图10-12。图10-12按循环寻址模式寻址的LDW(2)ADDA/SUBA指令

对ADDA、ADDAH或ADDAB将src1/cst分别左移2位,1位或0位之后,进行加法或减法,它在N和N+1之间禁止进位/借位。Src2的N+1到31bit位(包括31)保持不变。其他进位/借位运算保持不变。与前面LD/ST指令模式类似,图10-13给出ADDAH对存储器对寄存器A4在BK0=4为条件下按循环寻址的方式操作的例子。图10-13中缓冲区为大小32字节,16字节,8个字,AMR中为值00040000H。图10-13寻址模式寻址ADDAH10.5‘C62X流水线

C62X流水线提供了简化编程和改善性能的灵活性。它通过消除流水线连锁简化流水线控制。增加的流水性消除程序取指、数据访问和乘法操作中传统的结构瓶径。它提供了单周期指令的好处。流水线可以在每个周期并行发送8条指令;每一流水线相的并行指令可以同时处理;序列指令通过指令间固定相对相差异来处理;装载和存储地址在相同的流水线阶段出现在CPU边界,消除了read-after-write在存储器中的冲突。所有指令要求取指和译码相同的流水线相数目。‘C62x中的所有指令的流水线相被划分为3个阶段:取指、译码和执行。取指有4个阶段,译码为3个,执行阶段的相数,依赖于指令类型,变化较大。图10-14定点流水线阶段10.5.1取指(fetch)流水线取指相4个阶段是:PG:程序地址产生;PS:程序地址发送;PW:程序访问读等待;PR:程序取指包接收。‘C62X使用一个8条指令的取指包(FP),所有8条指令和取指流程,即通过PG、PS、PW和PR,一起处理。图10-15流水线的取指相。图10-15流水线的取指相10.5.2译码(decode)

流水线的译码相是,DP:指令发送,DC:指令译码。在流水线的DP相,取指包被分裂成执行包。执行包由一条指令组成,或由2-8条并行指令组成。在DP相阶段,一个执行包的指令被分配到合适的功能单元。在DC相,源寄存器、目标寄存器和辅助通道为功能单元的指令执行译码。图10-16流水线的译码相。(a)中译码相从左到右的顺序序列;(b)中显示了流水线译码相的一个取指包,它包含了这一阶段被处理的两个执行包。取指包(FP)的最后6条指令是并行的,并形成一个执行包(EP);这个EP处在译码阶段的发送相(DP);箭头指示每条指令分配的在同一指令周期里用于执行的功能单元。取指包(FP)的第8个序列NOP指令不发送到功能单元,因为无相关执行。图10-16流水线的译码相

10.5.3执行(execute)定点流水线的执行部分被划分为5相(E1-E5)。为完成执行操作,不同指令类型要求这些相的数目不同。这些流水线相在理解CPU周期边界的器件状态起着重要作用。流水线中不同类型指令执行情况表示在图10-17中。图10-17(a)显示了从左到右顺序序列的执行相;(b)是执行出现时功能模块端口。图10-17流水线执行相10.5.4流水线操作总结图10-18所示为‘C62X定点流水线相每一个阶段的所有相,顺序为从左到右图10-18‘C62X定点流水线相图10-19‘C62X流水线操作,每个取指包对应的一个执行包图10-19显示了取指包流水线的例子,它包含8条并行指令。在这种情况下,流水线是满负荷的,所有在一个取指包里的指令都是并行的,并分裂为每个取指包一个执行包。这个取指包以锁链方式流动,通过流水线的每一相。10.6中断

中断是计算机技术中最终要的概念之一,在DSP技术中也如此。没有中断就没有计算机的正确运行。象我们走路一样,没有停止机制,就没有正确安全的前进;不仅如此,没有停止机制,还会导致混乱和事故,在计算机技术中,中断起着同样的作用。所以随着计算机技术的发展,中断的概念及其理论将会在智能控制领域里发挥更加重要的作用。10.6中断

CPU工作在包含多个异步事件外部环境中。这些事件发生时要求DSP执行相应的任务。中断就是一个事件。这个事件要求停止。CPU当前的处理过程并转向因事件发生而需要完成的任务。这些中断的中断源可以是片内或片外的,如时钟、模数转换器、通信及其他外围设备。10.6.1中断类型及所用信号1.中断类型‘C62x和C67X有不同优先权的三种类型的中断。这三种类型的中断靠优先权差别排列。如表10-11所示。下面分别介绍。表10-11中断类型及优先权

(1)Reset中断具有最高优先权,用于停止CPU,并将CPU返回到已知的初始状态。它对应着reset信号。它在众多方法上具有独特性:对应信号reset为低电平有效信号。所有其他中断信号都是高电平有效。必须保持低电平10个时钟周期以上,才能重新正确初始化CPU。中断发生时,所有执行中的指令都放弃执行,所有寄存器都回到缺省态。(2)非屏蔽中断(NMI)NMI是第二优先级中断,通常用于向CPU发出严重硬件错误警告,如紧急电源错误。对于出现的非屏蔽中断(NMI),中断使能寄存器(IER)中的中断NMI使能位(NMIE)必须置为1。如果NMIE置为1,惟一能阻止NMI中断处理的条件是,NMI中断发生在跳转(BRANCH)指令的延时槽中(不管是否跳转)。(3)可屏蔽中断(INT4到INT15)

’C62X\C67X提供12个可屏蔽中断。优先权比NMI和reset都低。这些中断可与外设、片内设备或软件控制相联系,或者设置成不可用。假设一个可屏蔽中断在branch指令的延时槽里没有发生(包括条件赋值为假而不完成执行的条件branch指令),要处理可屏蔽中断必须满足条件:控制状态寄存器(CSR)中的全局中断使能位(GIE)置为1。(4)中断消息(IACK和INUMX信号)

IACK和INUMX信号警告‘C62x和‘C67X的外部硬件,已发生中断并正在处理中断。IACK表示CPU已经开始处理一个中断;INUMX信号(INUM3-INMU0)指示正在处理中断的信号(IFR中的标志bit位位置)。例如INUM3=0(MSB),INUM2=1,INUM1=1,INUM0=1(LSB)。这些信号一起组成一个4位0111值,表示正在处理中断INT7。2.中断服务表(IST)

当CPU按照指令开始处理一个中断时,它首先要查找中断服务表(IST)。IST就是一个包含中断服务代码的取指包表格。IST由16个连续的取指包构成,每个中断服务取指包(ISFP)包含8条指令。一个简单的中断服务路径可以适合于放在一个单取指包中。图10-20给出了IST的地址和内容。由于每个取指包含8个32位指令字,所以图10-20中每个ISFP的地址(相邻的)依次增加32个字节(20h)。(1)中断服务取址包(ISFP)

ISFP用于中断服务取指包。图10-21显示的ISFP是一个包含足够小的中断服务程序,可以置于一个单取指包(FP)中。为了能使中断服务返回到主程序,FP中包含一个跳转(branch)到中断返回指针的指令(BIRP)。这个指令之后跟着一个NOP5指令,以使跳转(branch)目标可以进入流水线执行阶段。图10-21中断服务取指包(ISFP)

图10-20中断服务表(IST)(2)中断服务表指针寄存器(ISTP)ISTP寄存器用于定位中断服务程序。对其中一个域或位段,ISTB用于确认中断服务表(IST)地址的基端口;另一个域或位段HPEINT鉴别特殊的中断,并鉴别其在IST内部对应的特定取指包的地址。图10-23给出了ISTP的位段。表10-12对这些位段及其使用进行了说明。图10-23中断服务表指针(ISTP)

表10-12中断服务指针(ISTP)位段说明

3.中断控制寄存器总结

总结一下‘C62X和‘C67X的8个中断控制寄存器。控制状态寄存器(CSR)和中断使能(IER)用来使能或非使能中断处理。中断标志寄存器(IFR)显示挂起态等待处理的中断。中断设定寄存器(ISR)和中断清除寄存器(ICR)用于手动中断处理过程。此外,还有3个指针寄存器。ISTP指向中断服务表。NRP、IRP是返回指针,是分别从可屏蔽中断、不可屏蔽中断处理返回时使用的指针。关于其详细解释见相关手册[1]。(控制状态寄存器-CSR)控制状态寄存器(CSR)包含两个域或位段:GIE和PGIE,它们控制着中断。如图10-25和表10-13所示。寄存器的其他域或位段用于其他用途。图10-25控制状态寄存器表10-13控制状态寄存器(CSR)中断控制位段例10-2全局性屏蔽(非使能)可屏蔽中断代码序列

MVCCSR,BO;获取CSRAND-2,BO,BO;准备清除GIEMVCBO,CSR;设置GIE例10-3全局性使能可屏蔽中断代码序列

MVCCSR,BO;获取CSROR1,BO,BO;准备设置GIEMVCBO,CSR;GIE置110.6.3单个中断控制服务处理中断要求要有效地对三类中断(reset、不可屏蔽中断、可屏蔽中断)都单个地控制。使能中断或屏蔽(非使能)单个中断,可以通过中断使能寄存器(IER)完成。挂起态待处理中断在中断标志寄存器(IFR)中有相应的状态位,即存储在IFR中。通过使用中断设置寄存器(ISR)和中断清除寄存器(ICR)可以实现手动中断处理。在完成非屏蔽中断和可屏蔽中断程序后,通过中断返回指针可恢复程序原来状态。1.使能和屏蔽中断(中断使能寄存器-IER)

IER中对应的bit位代表着中断,通过对它们置1或清0,可以使单个中断为使能或受屏蔽。中断处理过程被触发,只有在IER中代表中断的对应bit位被置为1时才能发生。其中IER的0bit位对应于reset中断。这个位是只读的,值为1,因此,reset中断始终是使能的,即无法不能对reset进行屏蔽。IER中的IE4到IE15bit位是可写的,值写为1或0,它们分别代表使能中断或屏蔽中断,即如图10-26。图10-26中断使能寄存器例10-4使能一个单中断(INT9)的代码序列

NVK200h,B1;设第9bit位的值

MVCIER,B0;获取IER的值

ORB1,B0,B0;准备设置IE9MVCB0,B0,IER;设IER中第9位值例10-5非使能(屏蔽)单中断(NMT9)的代码序列

MVKFDFFh,B1;清第9位的值为0MVCIER,B0;

ANDB1,B0,B0;准备清除IE9MVCB0,IER;IER中第9bit位清0中断的状态、设定中断和清除中断(中断标志寄存器IFR,中断设置寄存器ISR,中断清除寄存器ICR)

中断标志寄存器(IFR)中包含了INT15~INT4中断的状态和NMI。当这些中断发生时,对IFR中对应的bit位置1,否则bit位置0。如果想检查中断发生时的状态,就用MVC指令读IFR内容。见图10-27。图10-27中断标志寄存器(IFR)图10-28中断设置寄存器(ISR)图10-29中断清除寄存器(ICR)例10-6设定一个单体中断(INT6)的代码,并读这个标志寄存器。

MVK40h,B3MVCB3,ISRNOPMVCIFR,B4例10-7清除一个中断(INT6)的代码,并读这个标志寄存器。

MVK40h,B3MVCB3,ICRNOPMVCIFR,B43.从中断服务任务返回Reset信号升为高电平后,控制寄存器被设置为已知的一个值,从地址0h开始执行程序。在不可屏蔽中断和可屏蔽中断的服务程序执行完后,用一个对应指向返回指针寄存器的branch指令使程序回到前一个状态继续执行。(1)reset后的CPU状态在reset之后,控制寄存器和bit位值将包含如下值:AMR,ISR,ICR,IFR,ISTP=0hIER=1hIRR,NRP=undefine(不确定)CSR的15~0位:=100h,在little(小)-endian

模式中;=000h,在big(大)-endian

模式中。(2)从不可屏蔽中断返回

(NMI返回指针寄存器-NRP)

NMI处理之后,NMI返回指针寄存器(NRP)包含了返回指针,它引导CPU回到原来的正确地址,继续执行返回指针。当NMI中断处理完成时,用一个branch(跳转)指令返回到原来的程序执行,这个跳转指令使用了用户中断服务程序中的NRP中的地址。(3)从可屏蔽中断返回(中断返回指针寄存器-IRP)中断返回指针寄存器(IRP),包含一个在可屏蔽中断处理完成后,引导CPU返回到原来的程序地址,继续执行返回指针。在中断服务程序中branch指令使用IRP中的这个地址(BIRP)使程序在中断服务结束后,返回到原来的程序流,继续执行。10.6.4中断探测和处理

当产生一个中断时,它在IFR中设定一个对应的标志位。根据具体条件,中断可能被处理,也可能不被处理。本小节将讨论标志位的设定方法、中断处理的条件以及探测和中断的顺序,Reset中断和非reset中断的异同等。1.非reset中断标志的设定

图10-30显示了‘C62X的非reset中断(INTm)的探测和处理过程。在CPU边界外部引角(pin)上的中断INTm信号电平由低变高后,IFR中对应INTm标志位(IFm)置为1。图10-30TMS320C62X非reset中断探测和处理2.处理reset中断的条件

在图10-30中的时钟周期4里,探测到了一个等待处理的非reset中断。对于这样一个要被处理的中断,在同一周期里下列条件必须是有效的,而且每一个时钟周期里这些条件必须被评估,即IFm在CPU周期6期间设置为1(这取决于CPU周期4的中断逻辑);IER中没有更高优先权的中断标志位(IFm)bit位;IER中相应bit位被置为1(IEM=1);GIE=1;NMIE=1;3.非reset中断处理期间采取的动作

在图10-30中CPU周期6~12将产生以下中断处理动作:随后发生的非reset中断被非使能(屏蔽);除NMI以外,对于的所有非reset中断,PGIE被设置成GIE的值,然后GIE被清0。对于NMI中断,NMIE被清0。3.非reset中断处理期间采取的动作

后面的执行指令包(从n+5开始)被取消。如果一个执行指令要在特殊的流水线阶段被取消。那么它不会修改任何CPU状态。取消也将迫使一个指令在未来的流水线阶段被取消。第一个被取消的执行指令包(n+5)的地址被存入到NRP(NMI中断时)或IRP(其他中断)。对于‘C62x,指向ISTP所保持地址(对于INTm,指针指向ISFP)的branch指令在周期7期间被强迫进入流水线的E1阶段。4.设置TMS320C62的reset中断标志

Reset信号必须保持10个时钟周期以上。在reset变为高的后4个周期里,reset处理矢量开始。当reset信号从底到高转变,其上升沿到达CPU外围时,设置reset在IFR中的标志位(IF0),置为1。在图10-31中,IF0在CPU周期15被置为1。这个上升沿是按基于时钟周期的时钟周期探测的,并且不受存储器失效而导致的CPU时钟延长的影响。图10-31reset中断探测和处理:流水线操作5.

RESET中断处理期间产生的操作

Reset中断处理被执行的唯一条件就是reset引脚出现低电平。一旦reset信号由高跳到低,流水线被刷新,CPU寄存器就返回到复位默认值。此时,GIE、NMIE和ISTP中的ISTB都被清除。在图10-31中的CPU周期15~21,产生下列中断操作:接下来的所有非reset中断处理被屏蔽,这是由于GIE和NMIE被清0所致。5.

RESET中断处理期间产生的操作

指向ISTP所保持地址(指向INT0的ISFP指针)的branch指令在周期16被强迫进入流水线E1相位。在周期16,产生IACK信号和合适的INUMx信号以指示正在处理reset中断。IF0在周期17被清0。要注意,在复位后,启动运行的代码必须清楚地使能GIE,NMIE和IER,以允许中断被处理。10.6.5中断及软件编程问题1.单分配任务编程为避免发生不可预知的操作,用户必须使用单分配代码编程,以防可能的中断;当发生中断时,在中断处理开始前,进入E1相位的所有指令允许完成执行任务(通过E5相位)。所有其他指令被取消,并将在从中断处理返回后重新取指。中断处理返回后的指令不产生任何延时槽,这些是中断处理前的指令。例10.8中表示的是假设在本例中到达代码前,寄存器A1包含数值为0;寄存器A0指向一个包含数据值为10的存储器地址。ADD指令,它正处于LDW指令地延时槽中,将A2中的值与A1(0)相加的结果(A3中)正好是与A2值一样的。如果在LDW和ADD指令之间发生一个中断,LDW将对A1的更新(其值更新成10)。而在例10-9中使用了单个分配的方法。寄存器A1只被分配到ADD指令的输入,而不是LDW的输出结果。这样不管有无中断,不管A6取何值,A1的值与A2相加之前是不变的。这样A3的结果等于A2。例10-9采用单分配代码

LDW.D1*A0,A6ADD.L1A1,A2,A3NOP3MPY.M1A6,A4,A5;使用新值A62.嵌套中断

通常,当CPU进入一个中断服务程序时,中断就被非使能(屏蔽)。然而,当中断服务程序是某个可屏蔽中断(INT4-INT15)服务程序时,NMI中断可以打断可屏蔽中断的中断处理过程。换句话说,一个NMI可以中断一个可屏蔽中断,而无论是一个NMI还是一个可屏蔽中断都不能中断一个NMI。2.嵌套中断

有时想让一个中断能被另一个中断(优先权更高)所中断。尽管处于缺省态的处理器不允许中断程序被中断,除非这是NMI中断,尝试用软件控制下实现嵌套中断是一种方法。这个过程要求用户将原来的IRP(或NRP)和IEP保存到存储器或寄存器(寄存器要么不使用,如果要被接下来的中断使用,则要保存)。3.手动中断处理

例10-10手动中断处理

MVCISTP,B2;获取相应的ISFP地址

EXTUB2,23,27,B1;压缩HPEINT[B1]BB2;分支到中断服务程序

||[B1]MVK1,A0;设置ICR字

[B1]MVKRET_ADR,B2;创建返回地址

[B1]MVKHRET_ADR,B2[B1]MVCB2,IRP;保存返回地址

[B1]SHLA0,B1,B2;创建ICR字

[B1]MVCB1,ICR清除中断标志

RET_ADR:中断服务程序代码10.7应用程序开发实例

图10-32DSPc程序开发流程10.7.1快速傅里叶变换(FFT)的DSP实现由第四章我们知道,快速傅里叶变换是离散傅立叶变换(DFT)是一种快速算法。它是数字信号理领域中的一项重大突破,它充分考虑了计算机特点和数字硬件实现的约束条件,提出了机器操作的高效运算结构,使DSP的计算效率提高了几倍,计算时间缩短了约2个数量级,由于采用同址运算结构,有效减少了计算所需的存储量。针对’C62x

DSP所采用的FFT算法仍然可以是基2按时间抽取的快速算法。这里实现一个256点实数(2N=256)FFT运算。在具体实现FFT运算过程时,首先

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论