ImageVerifierCode 换一换
格式:DOCX , 页数:40 ,大小:550.75KB ,
资源ID:29811330      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/29811330.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(DSP汇编指令学习笔记.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

DSP汇编指令学习笔记.docx

1、DSP汇编指令学习笔记Knowledge问题谁在DSP的汇编语言中加入了NOP指令?NOP指令加入的条件是什么?About DSP1. DSP是实时数字信号处理的核心和标志。2. DSP分为专用和通用两种类型。专用DSP一般采用定点数据结构(一般不支持小数),数据结构简单,处理速度快;通用DSP灵活性好,但是处理速度有所降低。3. DSP采用取指、译码、执行三个阶段的流水线(Pipeline)技术,缩短了执行时间,提高了运行速率。DSP具有8个Functional unit,如果并行处理的话,以600MHz的时钟计算,如果执行的指令是single cycle指令,则可以4800MIPS(指令每

2、秒)。4. DSP的8个functional Unit,具有独特的功能,对滤波、矩阵运算、FFT(傅里叶变换)具有哈弗结构把指令空间与数据空间隔离的存储方式。这样实现是为了实现指令的连续读取,而实现pipeline流水线结构。传统哈弗结构:两个独立的存储空间,还使用独立总线。让取指与执行存储独立,加快执行速度。改进型哈弗结构:指令与数据的存储空间还是独立的。但是使用公共的总线(地址总线与数据总线)。这样实现的原因是因为出现了CACHE,数据的存储动作大部分被内部的CACHE总线承接了,所以总线冲突的情况会大大减少。同时让总线的结构与控制变得简单,CACHE存储的速度也明显快于外设存储器。冯诺依

3、曼结构:是指令空间与数据空间共享的存放方式。它不能实现pipeline的执行过程。Pipeline(流水线)技术是把指令的取指-译码和指令的执行独立开来的技术。虽然每条指令的过程还是要经过取指-译码-执行三个阶段最少3个CPU Cycle。但是多个指令同时并行先后进行,保证总体的指令吞吐速率理想情况下可以保证在每个指令只要一个CPU CYCLE。Pipeline技术必须要有哈弗结构支持,即必须把指令空间与数据空间隔离存放。流水线阻断流水线中阻断现象也十分普遍,下面就各种阻断情况下的流水线性能进行详细分析。流水线阻断总体有两种情况:1. 资源冲突阻断:a) 如果前一指令的某Stage与后一指令某

4、Stage在同一个Cycle执行,但是前一指令此Stage占用了后一指此Stage的资源,则后一指令此Stage的工作会被延迟执行。b) 被延迟执行的动作会停留在前一个Stage状态,则前一个Stage的状态就不能进入新的指令的动作。c) 依次前推,则总有一个取指Stage的指令被阻断,那么其后一个指令也被阻断而不能被取指。d) 所以,每产生一个Cycle的阻断,就会让CPU的执行延迟一个Cycle。即此指令后面的所有指令都会被延迟一个Cycle被执行。e) 解决的方法是:使用Cache让存放变得更快;变量集群使用,记录减少变量存放到memory的需要。2. 跳转阻断:a) 跳转阻断有很多情况

5、产生,比如函数调用/返回,循环的break/continue,if等条件判断,循环跳转,中断跳转的产生。b) 一旦某条指令要进行跳转时,它就会设置LR寄存器,阻止后续的指令进入执行Stage,并修改PC指针,执行跳转后的目标代码。c) 解决的方法是:减少循环、条件判断、分支结构的使用。DSP Pipeline技术DSP具有8个独立的执行单元,所以每个CYCLE可以执行8条指令(要求其总线宽度是256bit)。即DSP是8个pipeline并行处理的技术。所以DSP每个阶段取8个指令,然后在译码阶段把8个指令分配到8个执行单元去处理。所以必须保证被同时取的指令之间没有相关性(即一个指令的执行不需

6、要其他指令的结果参与),否则会得到错误的结果。所以,DSP引入了NOP指令,如果不能实现这一的要求,则DSP的编译器,则DSP优化器会在其编译的指令后面添加NOP指令。表示此Cycle不能执行8条有效指令,只能擦入空指令。则这样就会有某些执行单元在此CYCLE空闲了。DSP Pipeline阻断DSP Pipleline的阻断处理相对比较复杂一些,因为它涉及到8独立执行单元的阻断。1. 资源冲突阻断:a) 如果某个Unit因为资源冲突阻断,或者因为一个指令需要多个Cycle执行。则此Unit会被阻断。b) 当某个Unit被阻断时,其上一个阶段的指令就不能往下传递。一直阻断到此Unit的取值动作

7、。c) 所以当有阻断发生是,FG并不会请求8条指令,而是请求1-7条,或者不请求(8个Unit全部阻断了)。这样没有被阻断的Unit还是能够充分运行的。2. 跳转阻断:a) NOPNot dispatched instructionIt is an empty instruction in DP packet.如果一个指令标识需要Delay N个slot,则需要在这个指令后面跟N个NOP指令(对于那些自身不带NOP的指令,比如B)(但是对于BNOP则不需要的)。通过寄存器的定位技巧1. 查看NRP寄存器的值,则可以直接查看在哪个周期的指令异常了(NRP指令的前一周期就是crash的指令)(使用

8、A10/B10可以看到此函数的参数)2. 查看B3寄存器的值,跳到此代码段查看前面一个的Jump指令。看是jump到哪个函数了,则是在此函数中出异常了。则可以看到是谁调用的此crash的函数。(使用A4/B4可以看到parent的参数)3. 如果参数是二维指针,则此参数所在类存一般都是栈内的某个地址。(可以根据栈空间的特点知道具体应该是哪个地址)CPU data path & control说明:1. Register A也是由两片寄存器组组成的,A0:A1/ /A30:A31的pair是分布在两个组片中的2. ST path是把寄存器的值写入内存的路径3. LD path是把内存的值加载到寄

9、存器中的路径4. DA path是读写寄存器的路径5. X path是跨组读写寄存器的路径A & B path general purpose registers1. Each A & B path has 32 32-bit register, named A0-A31, B0-B31.2. It supports 40bit & 64bit value. If value is larger than 32 bit, it needs register-pair. The 32LSB stores in even-numbered register, such A0, and the 8

10、or 32 MSB stores in odd-numbered register, such A1.3. General purpose registers can be used for data, address pointers, condition registers.8 functional units1. 8 functional units can be divided into 2 groups, G1: L1, S1, M1, D1 for A register path, and G2: L2, S2, M2, D2 for B register path.2. Each

11、 function units has its special function, such as +/-/*/. But some operations can be deal in all unitsUnit pathThe C6000 CPU has 2 generous purpose register files ( A & B), 8 function units (L1/S1/D1/M1 & L2/S2/M2/D1).The 8 function units have different path to access data or data address:1. L Path:

12、LD1/LD2: Access data path of A & B register filesa) 从A/B中读取数据2. DA1/DA2: access data address path of A & B register filesa) 把数据保存到A/B中3. ST1/ST2: write data path of A & B register filesa) 把立即数或者控制寄存器保存到A/B中4. 1X/2X: cross path of A & B register files, to access opposite-side.a) 跨A/B读取数据5. 说明:a) 前面三个

13、路径统称为T路径(LD、ST、DA)。在具体汇编指令上,只会显示为T或者X路径,不会具体显示某一种T路径。b) X路径是在跨A/B寄存器使用的,用或不用情况是一定的c) 现在只有使用了X路径,或者LDW、STW指令会显示具体使用的路径名称。Register File Cross Paths1. G1 units can read/write data from/into A registers. And the G2 units can read/write data from/into B registers. So G1 units have cross path to A registe

14、rs, and G2 units have cross path to B register.2. At the same time, A registers have cross paths to opposite-B registers, such as Ax is connect to Bx. So function units of A registers can access B register.Normal registersReserved by表示谁负责保存这个寄存器中的值,如果是Parent,则是Caller;如果是Child则是called function。这里的Par

15、ent与child是与某此调用动作相关。如果脱离具体的某此调用,基本所有的函数都即是parent又是child。或者说,在某此函数调用时,哪些寄存器是在调用之前就要压栈保存(可能同时赋值的)parent类的寄存器;哪些寄存器是在调用后如果使用到了才需要压栈保存的child类寄存器。寄存器中的值,始终是根据此次调用(即Crash时的调用)的参数状态。即Parent寄存器保存的Crash function的Caller的参数;而child寄存器保存的是crash本函数的参数。所以可以查看A10、B10查看异常函数的参数;查看A4/B4查看上层函数的参数。同一指令周期并行执行的指令,不能同时使用同一

16、寄存器。SP /B15 & FP/A15 & PC & DP1. SP /B15:是栈顶指针(B15可以在gPdb查看)。启动时需要手动初始化。2. FP/A15:是本函数的栈底指针。现在没有使用,FP始终等于SP。A15没有使用。3. PC:是PFC(program fetch counter),是取指位置,是jump指令操作的寄存器(不能在gPdb中查看,也没有具体意义,因为异常处理时PC也会变)4. DP:初始化是.bss(为全局变量和静态变量保留(不包含const类全局变量)段的起始地址。用于指示全局变量的基址。启动时需要手动初始化。5. SP & B15 (stack pointer

17、)B15就是SP的值,它们是同一个寄存器。表示栈顶指针。SP指针必须是8字节对齐的。Unaligned SP Can Cause Application Crash。B15 is the stack pointer (SP), which points to the next unused location onthe stack。FP & A15 (frame pointer)A15就是SP寄存器。The frame pointer is used to read arguments from the stack and to handle register spilling instruc

18、tions.A4:A5 & A3 (function return value)A4 (或者A4:A5):是函数返回值(非结构体返回值)存放的寄存器。通常其值的来源是上一函数的返回值。A3:如果返回的是一个结构,则返回结构的支持存放在这里。B3 & IRP & NRP (function return address)B3:普通函数,当前调用的返回地址。之前调用的返回值已经压入栈中了。IRP:可掩中断调用返回地址。NRP:不可掩中断调用返回地址。B3:836178A0 AaSysComMsgRelay:836178A0 2246 MV.L1 A4,A1/T1836178A2 0247 | MV

19、.L2 B4,B0836178A4 01BC94F6 | STW.D2T2 B3,*SP-4836178A8 9014A121 !A1 BNOP.S1 C$L37 (PC+40 = 0x836178c8),5/T2836178AC 80040264 | A1 LDW.D1T1 *+A10,A0836178B0 D014A120 !A0 BNOP.S1 C$L37 (PC+40 = 0x836178c8),5/T3836178B4 1000C813 CALLP.S2 $Tramp$L$PI$_AaSysComMsgSend (PC+1600 = 0x83617ee0),B3/T4/跳转到AaSy

20、sComMsgSend函数(FP AaSysComMsgSend),并把T5的代码的地址保存在B3中836178B8 00002276 | STW.D1T2 B0,*+A01836178BC E0200003 .fphead n, l, W, BU, nobr, nosat, 0000001836178C0 01BC92E6 LDW.D2T2 *+SP4,B3/下一周期T5836178C4 6C6E NOP 4PFC & retPC & PCE11. PFC is the program fetch counter2. retPC represents the address of the f

21、irst instruction of the execute packet in the DC stage of the pipeline3. PCE1 (program counter) represents the address of the first instruction in the fetch packet in the E1 stage of the pipeline. Control register fileTable 2-6. Control RegistersAcronym Register Name SectionAMR Addressing mode regis

22、ter Section 2.8.3CSR Control status register Section 2.8.4GFPGFR Galois field multiply control register Section 2.8.5ICR Interrupt clear register Section 2.8.6IER Interrupt enable register Section 2.8.7IFR Interrupt flag register Section 2.8.8IRP Interrupt return pointer register Section 2.8.9ISR In

23、terrupt set register Section 2.8.10ISTP Interrupt service table pointer register Section 2.8.11NRP Nonmaskable interrupt return pointer register Section 2.8.12PCE1 Program counter, E1 phase Section 2.8.13Control Register File Extensions (C64x+ DSP)DIER Debug interrupt enable register Section 2.9.1DN

24、UM DSP core number register Section 2.9.2ECR Exception clear register Section 2.9.3EFR Exception flag register Section 2.9.4GPLYA GMPY A-side polynomial register Section 2.9.5GPLYB GMPY B-side polynomial register Section 2.9.6IERR Internal exception report register Section 2.9.7ILC Inner loop count

25、register Section 2.9.8ITSR Interrupt task state register Section 2.9.9NTSR NMI/Exception task state register Section 2.9.10REP Restricted entry point address register Section 2.9.11RILC Reload inner loop count register Section 2.9.12SSR Saturation status register Section 2.9.13TSCH Time-stamp counte

26、r (high 32) register Section 2.9.14TSCL Time-stamp counter (low 32) register Section 2.9.14TSR Task state register这些控制寄存器,直接使用就可以了。TI会把他们定义为全局变量。比如extern _cregister volatile unsigned int EFR;这任何时刻,EFR表示“EFR”寄存器的值。ExceptionsExceptions1. 外部中断:由CPU的外围设备产生的,输入到CPU内,产生的中断叫外部中断。如果是外部严重错误(Fatal error)将会产生N

27、MI中断。2. 内部中断:CPU内部自己产生的,比如溢出异常、指令异常、内存访问异常、资源冲突、等,称为内部中断。内部中断会有寄存器记录其产生的原因的。3. Reset Interrupt: GPIO 23,强制重启中断。不可掩。4. NMI - EXCPHNDL_EFR_NXF(non-maskable interrupt): 是CPU硬件错误a) The NMIE bit in TSR must be set, then NMI will occurb) Setting the global exception enable (GEE) bit in the task state regi

28、ster (TSR) to 1, this interrupt will behave as an exception.5. IXF - EXCPHNDL_EFR_IXF: 是CPU计算异常a) 比如指令异常、内存异常,资源异常、除0溢出异常等6. EXF - EXCPHNDL_EFR_EXF: 是外设上报到CPU的异常7. SXF - EXCPHNDL_EFR_SXF: 是软件通过SWE指令特意触发的异常,相当于error2。8. 所有的异常,在执行结束后都会继续执行(出了断电异常)。一般芯片的异常后停止运行的现象,是APP软件自己实现的,即在底层运行一个死循环。CPU control re

29、gisters1.PC(PCE1)是用来指示下一条要执行的指令的,即存放的是下一条要执行的指令的地址。几乎所有的MCU都不允许MOV指令修改PC值,这是一个常识。2.中断服务表指针寄存器ISTP(interrupt servicetable pointer)用于确定中断服务程序在中断服务表中的地址。ISTP中的字段ISTB确定IST的地址的基值,另一字段HPEINT确定特定的中断,并给出这一特定中断取指包在IST中的位置。3.IFR(中断标志寄存器):显示出有终端请求但尚未得到服务的中断。4.IER(中断使能寄存器):使能后禁止中断处理。5.IRP(可屏蔽中断返回指针寄存器):包含从可屏蔽中断

30、返回的地址,该中断返回通过指令BIRP完成。6.NRP(不可屏蔽中断返回指针寄存器):包含从不可屏蔽中断返回的地址,该中断返回通过指令BNRP完成。7.CSR(控制状态寄存器):控制全局使能或禁止中断。8.AMR(寻址模式寄存器):制定是否使用线性或循环寻址,若循环寻址还指定循环地址大小。9.EN(端结方式):1=小端终结;0=大端终结。10.Event Encoder (事件编码器):事件寄存器ER(包括ERL和ERH)用于捕获对应于64个EDMA通道的事件。在事件编码器中只是负责提交请求,事件的优先局依赖于EDMA通道参数的设定,并且在Transfer Crossbar中才正式排定。 11

31、.协处理器控制位CR0中的位14分别标记位MP(算术存在位)、EM(模拟位)、TS(任务切换位)和ET(扩展类型位),它们控制浮点协处理器的操作。EM位控制浮点指令的执行是用软件模拟,还是由硬件执行。EM=0时,硬件控制浮点指令传送到协处理器;EM=1时,浮点指令由软件模拟。 12.中断描述符表寄存器IDTRIDTR长48位,高32位存段基址,低16位存段界线。由于80386只支持256个中断/异常,所以IDT表的最大长度是2K,以字节位单位的段界线为7FFH。IDTR表示IDT表的方式与GDTR表示GDT表的方式相同。PipelinePipeline StagesAll instructions require the same number of pipeline phases for fetch and decode, but require a varying number of execute phases.Fetch - Decode ExecuteKnowledge pointsNetwork materials5stage的 F/D - Fetch (from

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1