针对DSP指令生成与二进制翻译的汇编器实现
- 格式:pdf
- 大小:1.42 MB
- 文档页数:4
1-1程序存储器中保存的是什么?程序的最终表现形式是什么?答:(1)程序存储器中保存的是二进制数据,即物理上的高低电平信号。
(2)程序的最终表现形式是机器码,即用二进制表示的高低电平。
1-2 何为总线?总线的图形表示形式是怎样的?(画图说明)P5 P8答:(1)总线是连接多个设备、供多个设备使用的一系列性质相同的连线。
(2)总线用双线箭头表示。
1-5 计算机系统由哪两部分构成?两大部分间通过什么连接?P5答:(1)由CPU和外设构成;(2)通过总线连接。
1-6 何为单片机?何为DSP?P5 P7答:(1)单片机是将CPU和外设功能集成在一块芯片上的计算机系统;(2)DSP是特殊的单片机,特指数字信号处理器。
1-8 经典的数字信号处理方法有哪些?P7答:(1)时域中的数字滤波(2)时域、频域的快速傅里叶变换(FFT)1-10 区别单片机和DSP的标志是什么?P7答:是加连乘指令。
DSP有加连乘指令而单片机没有。
1-14 DSP有几个移位定标寄存器?作用是什么?P11 P12答:(1)有3个(ACC与a输入数据总线、b输出数据总线、c乘积寄存器之间)(2)作用a使数据在传送过程中按指定方式移位;b按指定方式对数据进行小数处理(定标)数据的移位和定标均在传送过程中自动发生,不需要花费CPU时间。
1-17 在DSP中做乘法运算时,一个乘数必须来自TREG,运算结果保存在PREG。
1-22 DSP有哪3个独立地址空间?每个空间容量是多少?P18答:有程序存储器、数据存储器和I/O。
每个空间容量是64K字。
1-24 DARAM和SARAM有什么区别?P18~20答:(1)DARAM是双访问RAM,SARAM是单访问RAM;(2)DARAM在CPU内部,而SARAM在芯片内部,CPU外部。
1-27 LF25407型DSP片内有多大容量FLASH程序存储器?FLASH程序存储器属于那一部分电路?P22答:有32K容量FLASH程序存储器。
第一章:一、数字信号处置的实现方式一样有哪几种?(1) 在通用的运算机上用软件实现(2) 在通用运算机系统中加上专用的加速处置机实现(3) 用通用的单片机实现,这种方式可用于一些不太复杂的数字信号处置(4) 用通用的可编程 DSP 芯片实现,可用于复杂的数字信号处置算法(5) 用专用的 DSP 芯片实现(6) 用基于通用 dsp 核的asic 芯片实现二、简单的表达一下 dsp 芯片的进展概况?答:第一时期, DSP 的雏形时期( 1980 年前后)代表产品: S2811。
要紧用途:军事或航空航天部门第二时期, DSP 的成熟时期( 1990 年前后)代表产品: TI 公司的 TMS320C20 要紧用途:通信、运算机领域第三时期, DSP 的完善时期( 2000 年以后)代表产品:TI 公司的 TMS320C54 要紧用途:各行业领域3、可编程 dsp 芯片有哪些特点?(1)采纳哈佛结构:冯.诺依曼结构,哈佛结构,改良型哈佛结构(2)采纳多总线结构(3)采纳流水线技术(4) 配有专用的硬件乘法-累加器(5) 具有特殊的 dsp 指令(6) 快速的指令周期(7) 硬件配置强(8) 支持多处置器结构(9) 省电治理和低功耗4、什么是哈佛结构和冯.诺依曼结构?它们有什么区别?哈佛结构:该结构采纳双存储空间,程序存储器和数据存储器分开,有各自独立的程序总线和数据总线,可独立编址和独立访问,可对程序和数据进行独立传输,使取指令操作、指令执行操作、数据吞吐并行完成,大大地提高了数据处置能力和指令的执行速度,超级适合于实时的数字信号处置。
冯.诺依曼结构:该结构采纳单存储空间,即程序指令和数据共用一个存储空间,使用单一的地址和数据总线,取指令和取操作数都是通过一条总线分时进行。
当进行高速运算时,不但不能同时进行取指令和取操作数,而且还会造成数据传输通道的瓶颈现象,其工作速度较慢。
区别:哈佛:该结构采纳双存储空间,程序存储器和数据存储器分开,有各自独立的程序总线和数据总线,可独立编址和独立访问,可对程序和数据进行独立传输,使取指令操作、指令执行操作、数据吞吐并行完成,大大地提高了数据处置能力和指令的执行速度,超级适合于实时的数字信号处置。
DSP28335汇编教程当硬件执行指令时,寻找指令所指定的参与运算飞操作数的方式——寻址方式。
根据程序的要求采用不同的寻址方式,可以有效地缩短程序的运行时间和提高代码执行效率。
汇编指令是可执行指令,每一条指令对应一条机器码,用来控制处理器仲的执行部分进行各种操作。
在本章节当中将主要以基于C28x的DSP芯片为例,为读者讲解DSP的寻址方式和汇编指令系统,其中大部分内容也可适用于其他Ti公司的DSP产品。
6.1汇编语言指令集概述在学习C28x系列DSP的寻址方式和汇编指令指令之前,先来对一些基础的知识进行讲解一下先,在汇编程序当中开发人员会常常使用到许多的特殊符号和标志,它们都具有特殊的含义,在学习汇编之前读者们必须先理解这些符号和标志含义,在这里会对其中最常用最重要的操作数符号和寄存器经行详细说明。
在进行汇编讲解之前先来了解一下开发的核心——CPU。
在TMS320C2000系列中,CPU 内核为:C20x/C24x/C240x:C2xLP:C27x/C28x:C27x、C28x这些CPU的硬件结构有一定差别,指令集也不相同,但是,在C28x芯片中可以通过选择兼容特性模式,使C28xCPU与C27xCPU及C2xLPCPU具有最佳兼容性。
可通过状寄存器STl的位OBJMODE和位AMODE的组合,选定模式。
C28x芯片具有3种操作模式:1.C28x模式:在该模式中,用户可以使用C28x的所有有效特性、寻址方式和指令系统,因此,一般应使C28x芯片工作于该种模式。
2.C27x目标——兼容模式:在复位时,C28x的CPU处于C27x目标-兼容模式。
在该模式下,目标码与C27xCPU完全兼容,且它的循环—计数也与C27xCPU兼容。
3.C2xLP源——兼容模式:该模式允许用户运行C2xLP的源代码,这些源代码是用C28x代码生成工具编译生成的。
在下面的讲解当中会牵涉到模式的转换,希望读者要搞清楚每一个模式的对应关系。
第一章:1、数字信号处理的实现方法一般有哪几种?(1)在通用的计算机上用软件实现(2)在通用计算机系统中加上专用的加速处理机实现(3)用通用的单片机实现,这种方法可用于一些不太复杂的数字信号处理(4)用通用的可编程DSP 芯片实现,可用于复杂的数字信号处理算法(5)用专用的DSP 芯片实现(6)用基于通用dsp 核的asic 芯片实现2、简单的叙述一下dsp 芯片的发展概况?答:第一阶段,DSP 的雏形阶段(1980 年前后)代表产品:S2811。
主要用途:军事或航空航天部门第二阶段,DSP 的成熟阶段(1990 年前后)代表产品:TI 公司的TMS320C20 主要用途:通信、计算机领域第三阶段,DSP 的完善阶段(2000 年以后)代表产品:TI 公司的TMS320C54 主要用途:各行业领域3、可编程dsp 芯片有哪些特点?(1)采用哈佛结构:冯.诺依曼结构,哈佛结构,改进型哈佛结构(2)采用多总线结构(3)采用流水线技术(4)配有专用的硬件乘法-累加器(5) 具有特殊的dsp 指令(6)快速的指令周期(7) 硬件配置强(8)支持多处理器结构(9)省电管理和低功耗4、什么是哈佛结构和冯.诺依曼结构?它们有什么区别?哈佛结构:该结构采用双存储空间,程序存储器和数据存储器分开,有各自独立的程序总线和数据总线,可独立编址和独立访问,可对程序和数据进行独立传输,使取指令操作、指令执行操作、数据吞吐并行完成, 大大地提高了数据处理能力和指令的执行速度,非常适合于实时的数字信号处理。
冯.诺依曼结构:该结构采用单存储空间,即程序指令和数据共用一个存储空间,使用单一的地址和数据总线,取指令和取操作数都是通过一条总线分时进行。
当进行高速运算时,不但不能同时进行取指令和取操作数,而且还会造成数据传输通道的瓶颈现象,其工作速度较慢。
区别: 哈佛:该结构采用双存储空间,程序存储器和数据存储器分开,有各自独立的程序总线和数据总线,可独立编址和独立访问,可对程序和数据进行独立传输,使取指令操作、指令执行操作、数据吞吐并行完成,大大地提高了数据处理能力和指令的执行速度,非常适合于实时的数字信号处理。
中图分类号:TP314文献标识码:A文章编号:1009-2552(2011)03-0047-04针对DSP指令生成与二进制翻译的汇编器实现
肖贺,刘佩林(上海交通大学电子信息与电气工程学院,上海200240)摘要:DSP指令生成与优化和二进制翻译是现代编译工具值得关注的热点问题。针对DSP指令的特点提出一种通用的DSP指令生成(支持VLIW指令)与二进制翻译技术,并应用于GNU汇编器(GAS)。包含该技术的汇编器PCA(PostCompilationAssembler)先将输入的汇编指令转化成类似LISP的中间语言。PCA通过对此中间语言分析以及窥孔优化,最终生成高质量的目标平台DSP代码。关键词:DSP指令生成;VLIW指令;二进制翻译;编译后优化;窥孔优化ImplementationofassemblerforDSPcodegeneration
andbinarytranslationXIAOHe,LIUPei-lin(SchoolofElectronicInformationandElectricalEngineering,ShanghaiJiaotongUniversity,Shanghai200240,China)Abstract:DSPcodegenerationandoptimization,alongwithbinarytranslation,hasbecomeawell-concerningfocusofthemoderntoolchain.Thispaper,onaccountofthespecialtiesofDSPinstruction,proposedageneralmethodofDSPcodegenerating(includeVLIW)andbinarytranslation,whichappliedinGNUassembler(GAS).GASwiththistechnology(calledPCA)firsttranslatessourceassemblyinstructionsintoLISP-likeintermediaterepresentation(IR);byanalyzingthebehaviorsoftheIRstatementsandemployingpost-compilationtechniquessuchaspeepholeoptimization,PCAwillproduceDSPcodesofhighqualitysuitableforthetargetplatform.Keywords:DSPcodegeneration;VLIW;binarytranslation;post-compilationoptimization;peepholeoptimization
0引言
在现代编译工具的研究中,为了尽可能地让编译器编译出适应于特定DSP架构的代码,设计者提出一种编译后优化的方法来控制编译器进行机器相关的优化。编译后优化的方法有很多,窥孔优化便是其中很重要的一种[1]。窥孔优化的基本思想是考察窥孔窗中的一组指令(一般是3~5个),对这组指令进行局部优化,然后滑动窗的位置,对下一组指令执行优化操作直到所有指令扫描结束。目前成熟的DSP编译器通常会采用窥孔优化技术来生成与机器架构相关的特殊指令和优化代码[2-3]。
此外,现代工具链有一个很有前景的应用称之
为二进制翻译,也就是说,某一架构的汇编二进制程序通过特定的工具能够被翻译为能在另一种架构上执行的可执行代码,同时保证二进制程序不会有太明显的性能降低。据研究[4-5]表明,窥孔优化十分适用于二进制翻译。为了满足上述两方面的要求,提出一种采用编译后优化技术生成特定DSP指令和完成二进制翻译的汇编器PCA,它将窥孔优化技术从编译阶段推迟到汇编链接阶段。这样的编译结构有三方面的好处:首先,该汇编器结构为二进制翻译创造了可
收稿日期:2010-10-27作者简介:肖贺(1986-),男,硕士研究生,主要研究方向为DSP处理器体系架构及其编译器汇编器实现。
—74—能。其次,该结构提出优化技术可以用于不同高级编程语言下的程序优化,也能适用于高级语言与汇编语言混合编程的情况。最后,在编译阶段得不到的许多程序相关信息例如符号信息,变量存储形式(内存或是寄存器)可以在汇编阶段获得,能够更加有效地进行优化。1整体设计提出的汇编器PCA首先将汇编代码(编译器生成或者手写汇编代码)翻译转化成一种通用的中间语言。PCA接着采用基于窥孔优化的指令翻译生成算法对中间语言进行分析与优化,最终生成所需要的目标代码。从流程框架和中间语言匹配两方面对PCA展开具体讨论。1.1PCA流程框架PCA是基于GNU汇编器GAS而开发的,而GAS是以行为单位进行扫描并生成最终二进制代码。这种传统的汇编器结构不适合进行二进制翻译和构造DSP指令,PCA对此结构进行了相应的调整。PCA的工作原理如图1所示。图1PCA工作流程图源汇编代码首先通过PCA的解析单元转换成中间语言IR(IntermediateRepresentation),同时重建程序控制流信息,并生成符号表。被转换过的中间语言通过窥孔优化算法与预先定义的DSP架构指令库中的模式进行匹配与选择变换,同时更新优化后IR序列的符号表。最后,PCA将最终的中间语言序列和符号表生成可执行文件。1.2中间语言IR描述与匹配PCA采用类似于GCC中RTL语言[6]的IR结构作为其中间语言,如图2所示。可以看出,IR结构包含两个部分,操作部分opcode和操作数部分operands。图2IR结构图其中,opcode中的CODE域指定当前中间语言语句完成的行为,PCA定义了一组标准名来指定一些通用的操作,例如PLUS表示加法,MINUS表示减法,SHIFT表示移位操作等等。CODE集合亦可以根据特定的DSP指令架构而进行扩展。IR_TYPE域标识指令模板的分类,该分类使用于VLIW模板中。operands部分指定特定操作下操作数的特征,其中第一个操作数为目标操作数,其他为源操作数。它包含TYPE,operandx和WIDTH三个域。TYPE域指定操作数的类型,例如REG表示普通寄存器,SPR表示特殊寄存器,MEM内存,以及IMM表示立
即数。operandx域标识操作数的名称,例如REG:r7表示某条语句的一个操作数是寄存器型,名称是r7。不同的IR语句中相同的操作数名称表明了他
们对同一个操作数进行了操作。WIDTH域指定了操作数的位宽。2具体实现
给出了PCA的工作流程以及介绍了中间语言。结合DSP指令特点来详细说明PCA生成DSP指令代码的过程。2.1控制流重建
重建输入程序的控制流对于汇编器来说是一个比较大的挑战。为了有效地优化和解析源汇编代码的功能,PCA首先需要将直接转换过来的IR语句分割成不同的基本块。具体做法是PCA找出跳转语句,将它们作为基本块最后一条语句,并将它们的跳转目标作为基本块的第一条语句,以此来分割IR程序。接着通过分析基本块中各语句的OPERAND域标识得它们的依赖关系后,PCA以这些被分割的基本块为基本单元解析并生成DSP指令。2.2指令翻译生成算法
指令翻译生成算法的基本原理是IR中间语句匹配,所谓的中间语句匹配,是指当汇编指令经过解释器转换成中间语句后,该语句的OPCODE域,TYPE域和WIDTH域和某个预先定义的IR模板相
一致。IR支持嵌套结构以进行复杂的窥孔优化,即一个IR语句的操作数可以是一条IR语句结构。由于IR语句的作用是改变目标操作数的值,那么IR语句本身可以等价于一个与目标操作数相同的一个操作数。一般来说,DSP指令可以大致分为两类,一类称为增强指令,能够完成很强大的运算操作,另一类是VLIW指令,包含多个发射槽。PCA预先定义复杂
的IR模板,通过IR语句合并算法可以实现第一类—84—指令;通过指定指令封包的格式可以实现第二类指令。对于第一类增强指令,IR语言模板可以是一系列简单模板的嵌套。第二类指令的模板为一系列格式的指令包。而对于普通非DSP指令来说,翻译过程比较简单,本文不多赘述。指令翻译生成算法的流程图如图3所示。图3的左半部分实现IR语句合并生成DSP增强指令的过程。首先,PCA会根据DSP增强指令模板生成IR语句合并器。IR语句合并但与会根据操作数依赖关系将基本块中符合模板的多条IR语句合并起来。如果IR语句合并单元确实对当前IR语句执行了合并操作,则会对所有参与合并的IR语句进行标识,以便PCA将参与合并的IR语句从缓冲区内删除,否则,该IR语句将直接进入下一级模块。图3指令翻译生成算法流程图DSP指令封装过程如图3右半部分所示。PCA根据预先定义的DSP封包规则,生成一个IR语句封装器。IR语句封装器接收IR语句合并单元的输出IR语句,并根据封包规则对这些IR语句进行封装。例如,如果当前的DSP架构支持的是支持同时发射3条指令,那么PCA会根据IR语句的依赖关系将不相关的IR语句进行封装,若不存在3条这样的指令,那么则通过插入NOP指令来进行封装。若DSP架构不符合VLIW结构,则可通过指定封装规则为一次发射一条指令来实现此DSP单发射架构。2.3DSP指令变换匹配不符合DSP模板的IR语句存在两种情况,一种是通过相应的变换后可以符合某种DSP模板,另一种是无法符合任何DSP模板的。由于PCA最关注的问题是如何尽可能多地生成符合DSP模板的指令,因此PCA尽量转换第一类IR语句为匹配IR语句。对于PCA来说,匹配变换的方法有以下两种。(1)操作数位置交换:DSP指令的源操作数通
常不具有可交换性,例如,某DSP加法指令要求第一源操作数为内存操作数,第二源操作数为寄存器操作,那么第一源操作数为寄存器,第二源操作数为内存的IR加法语句无法直接匹配模板生成相应的指令;通过交换两源操作数的位置,可以使该IR语句匹配DSP加法模板。(2)操作数类型转换:DSP指令对操作数类型
一般有严格的限定,对于无法通过置换操作数位置的第一类IR语句,PCA通过类型变换来匹配某些IR模板;例如,某DSP移位法指令要求所有的操作
数为寄存器操作数,对于其中第一源操作数为立即数的IR移位语句,可以通过在该语句前插入一个将立即数搬移到寄存器操作的语句,然后再将此移位语句的所有操作数修改为相应的寄存器,以符合DSP移位模板生成特定的移位指令,可以看出,第一种匹配方法不会引入额外的代价(不会增加新的指令),而第二类匹配方法则会带来额外的开销(插入新的指令)。在实际的DSP指令生成过程中,通过权衡计算匹配操作给PCA代码生成时候带来好处或者额外的开销,可以选择在特定的基本块中是否使用该匹配操作。3结果分析