




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Chapter 1IntroductionWhy go digital?数字信号处理技术的功能十分强大,它所达到的处理性能和指标,往往是模拟处理技术难以达到的。例如:FIR filter with linear phase.Adaptive filters.chapter2 C6000的结构概述General DSP System Block Diagram一个DSP系统通常由CPU、内部存储器、外部存储器、片内外设,以及连接它们的内部和外部总线组成。为了提高对数字信号的处理速度,DSP处理器针对DSP的典型算法,在结构和功能模块等方面进行了优化。下面我们通过对C6000结构的研究,来了解DSP处理器的特点。Implementation of Sum of Products(SOP)在第一章中已经指出:积之和SOP是大多数DSP算法中的关键要素。下面我们通过编写实现级数计算的代码,来深入理解C6000的结构。Implementation of Sum of Products(SOP)该代码模块用汇编语言编写,其好处是汇编语言与处理器的结构密切相关,便于我们了解DSP的结构。从级数的计算公式看,实现该算法有两个基本的操作:(1) 乘法计算(2) 加法计算因此,要有两条基本指令:乘法指令和加法指令。Multiply(MPY)系数a1和采样值x1的乘法用下面汇编指令实现:MPYa1,x1,Y该指令的功能是:将a1和x1相乘,并将乘积送给Y。Multiply(.M unit)该指令由一个硬件乘法器单元完成,该单元称之为“.M”单元。所以,乘法指令更改为:MPY.Ma1,x1,Y16位乘16位的乘法器得到32位的结果。32位乘32位的乘法器得到64位的结果。Addition(.?)下面考虑加法操作:MPY.Ma1,x1,prodADD.?Y,prod,Y加法指令将前一条指令计算出的乘积prod,累加到Y中。这里要考虑一下加法指令是如何实现的?Addition(.L unit)C6000中有一个.L单元,加法指令就是通过该单元实现的。因此,代码要改为:MPY.Ma1,x1,prodADD.LY,prod,YRegister File-AC6000是RISC处理器,这类处理器用寄存器保存操作数,所以刚刚写的代码还要修改。用寄存器取代a1、x1、prod、Y。Specifying Register NamesC6000的CPU中有两组寄存器:A、B。每组寄存器由16个寄存器组成,每个寄存器的宽度是32比特。MPY.MA0,A1,A3ADD.LA4,A3,A4寄存器A0、A1、A3、A4包含了这两条指令要用的数值。Data Loading通过刚才讨论,我们看到:操作数是存放在寄存器中的。那么,如何将操作数加载到寄存器中去呢?Load Unit“.D”C6000CPU中有个.D单元,通过这个.D单元就可将操作数从数据存储器加载到寄存器中。值得注意的是:.D单元是访问数据存储器的唯一方法。Load Instruction下面要考虑的是:将操作数从数据存储器加载到寄存器中,应该用什么指令?其答案是加载指令。(LDB、LDH、LDW、LDDW)Using the Load Instructions在使用加载单元之前,必须要清楚处理器是按字节寻址的,也就是说:存储器中每个字节对应一个唯一的地址。地址的宽度是32位,可寻址范围:00000000FFFFFFFF。Using the Load Instructions加载指令的句法是:LD*Rn,Rm其中,Rn是一个寄存器,该寄存器中存放的是要加载操作数的地址,作为寄存器指针。Rm是目的寄存器。Using the Load Instructions现在的问题是:加载到目的寄存器中的数据宽度(位数)如何确定?Using the Load Instructions这可以通过选用不同的指令来完成。LDB:加载1个字节(8比特)LDH:加载半个字(16比特)LDW:加载1个字(32比特)LDDW:加载1个双字(64比特)注意:不存在LD指令。Using the Load Instructions例如:假设A5=0x4LDB*A5,A7;A7=0x00000001LDH*A5,A7;A7=0x00000201LDW*A5,A7;A7=0x04030201LDDW*A5,A7;A7=0x0807060504030201Using the Load Instructions请大家思考这样一个问题:如果只能通过加载指令和.D单元访问数据存储器,那么我们首先如何加载寄存器指针Rn呢?Loading the Pointer Rn指令MVKL可以将一个16位的常数移入到一个寄存器的低16位中。MVKL.?a,A5;a是一个常量或标号。一个完整的地址有32位,所以要将一个32位的地址移动到一个寄存器中,而所有的指令宽度为32位,所以不能进行一个32位的数据移动。Loading the Pointer Rn使用指令MVKH可以解决32位的数据移动问题。MVKH.?a,A5;将一个16位的常数移入到一个寄存器的高16位中。这样,使用下面代码就可以将32位的地址移到一个寄存器中:MVKL.?a,A5MVKH.?a,A5Loading the Pointer RnMVKL指令和MVKH指令的使用是有顺序的。请看下面两个例子。由于MVKL指令存在符号位扩展问题,所以要MVKL在前,MVKH在后。LDH,MVKL and MVKHpt1和pt2指向数据存储器中的存储单元,用MVKL和MVKH指令分别加载到A5和A6中。A5和A6所指的数据存储器单元内容用LDH指令分别加载到A0和A1中。Creating a loop在前面的讨论中,我们实现了Y=a1*x1的计算。但这只是SOP计算中的一个节点,我们还要通过循环操作实现N节点SOP计算。Creating a loop在C6000处理器中,没有专门的块重复指令。循环要用分支转移指令B实现。What are the steps for creating a loop1 创建一个要转移的目标地址的标号。2 添加一条分支转移指令B。3 创建一个循环计数器。4 添加一条将循环计数器减一的指令。5 根据循环计数器的值,建立分支转移的条件。1. Create a label to branch to:loop2. Add a branch instruction, B:B.?loopWhich unit is used by the B instruction?.S单元用于分支转移指令B和数据移动指令MVKL、MVKH。3. Create a loop counter:MVKL.Scount,B0;B0计数器后面介绍。4. Decrement the loop counter:SUB.SB0,1,B05. Make the branch conditional based on the value in the loop counter建立指令条件的方法是:在指令前面加上条件,这样原来的非条件指令就变成了条件指令。只有条件满足的情况下,该指令才能执行。conditionInstructionLabel例如:B1Bloop(1)条件可以是下列寄存器之一:A1、A2、B0、B1、B2(2)所有指令都可以变成条件指令。5. Make the branch conditional based on the value in the loop counter在条件前面加“!”号,可以使条件取反。!conditionInstructionLabel例如:!B0Bloop;如果B0=0,则转移到loopB0Bloop;如果B!=0,则转移到loop5. Make the branch conditional based on the value in the loop counterB0B.SloopMore on the Branch Instruction(1)C6000处理器的所有指令编码成32位。因此,分支转移指令B的目的地址要小于32位。实际上,32位B指令中,低21位是要跳转的相对地址。例1:B.S1label相对转移,偏移量+/- 220。More on the Branch Instruction(1)指定一个寄存器,而不使用标号,可以实现绝对转移。转移范围可达:232。此时,分支转移指令B的编码中,低5位指出存放要跳转的目标绝对地址的寄存器。例1:B.S2register绝对转移,仅由.S2单元实现。Testing the code该代码完成下面运算:a0*x0+a0*x0+a0*x0+.+a0*x0而我们希望完成下面计算:a0*x0+a1*x1+a2*x2+.+aN*xN问题在于:从数据存储器中取数据的过程中,没有修改数据指针,从而造成每次循环时取的是同一对数据。Modifying the pointer解决方法是修改指针A5和A6。下面讨论索引指针的方法。Indexing Pointer在寄存器R前面加“*”:*R。其含义是R做为指针,在使用过程中不被修改。R可以是任意一个寄存器。Indexing Pointer在寄存器R前面加“*+”,后面加“disp”:*+Rdisp。其含义是R做为指针,在使用前被修改,使用后恢复为原来的值。在寄存器R前面加“*-”,后面加“disp”:*-Rdisp。其含义是R做为指针,在使用前被修改,使用后恢复为原来的值。disp指明数据元素的大小:DW(64位)、W(32位)、H(16位)、B(8位)disp=R或5位的常量。R可以是任何一个寄存器。Indexing Pointer在寄存器R前面加“*+”,后面加“disp”:*+Rdisp。其含义是R做为指针,在使用前被修改,使用后不恢复为原来的值。在寄存器R前面加“*-”,后面加“disp”:*-Rdisp。其含义是R做为指针,在使用前被修改,使用后不恢复为原来的值。Indexing Pointer在寄存器R前面加“*”,后面加“+disp”:*R+disp。其含义是R做为指针,在使用前不修改,使用修改。在寄存器R前面加“*”,后面加“-disp”:*R-disp。其含义是R做为指针,在使用前不修改,使用后修改。disp指明数据元素的大小:DW(64位)、W(32位)、H(16位)、B(8位)disp=R或5位的常量。R可以是任何一个寄存器。Modifying and testing the code请观察右边的代码(*A5+、*A6+),现在该代码可以完成下面功能:a0*x0+a1*x1+a2*x2+.+aN*xNStore the final result注意右边程序最后一行:STH.DA4,*A7;但A7未初始化。注意右边程序的第5、6行:MVKL.Spt3,A7;MVKH.Spt3,A7这样,A7就被初始化了。What is the initial value of A4?A4被用做一个累加器,所以使用前要清零。注意右边程序:ZERO.LA4Increasing the processing power!还可以为这个处理增加处理能力,如何增加?(1)增加时钟频率。(2)增加处理单元的数量。To increase the Processing Power,this processor has two sides(A and B or 1 and 2)数据通道:指令执行过程中使用的物理资源统称为数据通道,其中包括执行指令的所有功能单元、寄存器组,以及与片内数据存储器交换信息所使用的数据总线等。数据通路:用来处理数据,有4个功能单元和1组寄存器。功能单元执行指令指定的操作,寄存器组作源操作数、目的操作数、累加器等使用。为提高处理能力,增加一组数据通路。A、B。相应的增加了4个功能单元、1组寄存器(two sides)。Can the two sides exchange operands in order to increase performance?两个寄存器组之间之间可否交换操作数?以提高性能?The answer is YES but there are limitations.在两个sides(寄存器组)之间交换操作数需要交叉路径。那么,什么是交叉路径?交叉路径就是一端的CPU与另一端CPU之间的通道。C6000有两类交叉路径:数据交叉路径和地址交叉路径。Data Cross Paths数据交叉路径也可称之为寄存器交叉路径。这些交叉路径可以使一端的操作数被另一端使用。有两个数据交叉路径:一条路径将数据从B端传送到A端,称之为1X。另一条路径将数据从A端传送到B端,称之为2X。TMS320C67X Data-Path介绍结构Data Cross Paths数据交叉路径只能用于.L、.S、.M单元。数据交叉路径非常重要,但在使用中会有一些限制。Data Cross Path Limitations(1)目标寄存器必须和处理单元在同一端。(2)每一端的每一个执行包最多只能有一条交叉路径。执行包:同时执行的指令组。例如:ADD.L1xA0,A1,B2MPY.M1xA0,B6,A9SUB.S1xA8,B2,A8/ADD.L1xA0,B0,A2/的意思是:SUB和ADD属于同一个读取包,因此可以同时执行。例如:ADD.L1xA0,A1,B2MPY.M1xA0,B6,A9SUB.S1xA8,B2,A8/ADD.L1xA0,B0,A2NOT ValideData Cross Paths for both sides解释图Address Cross Paths指针和目的寄存器必须在同一寄存器组中。参见指令举例。Load or store to either side只能对各自寄存器组加载和存储,而不能交叉存储,要仔细解释:地址和数据的关系。Standard Parallel Loads标准的并行加载和存储,解释并行加载和存储,解释指令的含义。Parallel Load/Store using address cross paths用地址交叉路径进行并行加载和存储。Not Allowed!Parallel accesses:both cross or neither cross要不都交叉,要不都不交叉。Conditions Dont Use Cross Paths如果一个条件寄存器来自对面的存储器组,则不使用数据交叉路径和地址交叉路径。例如:B2ADD.L1A2,A0,A4A1LDW.D2*B0,B5C62x Data-Path Summary进入到PDF文档中,浏览、介绍。C67x Data-Path SummaryCross Paths-Summary数据交叉路径:目的寄存器要与处理单元在同一通路中;源寄存器在每一通路的每个执行包中,最多有一个交叉路径;使用“x”指示交叉路径;地址交叉路径:指针必须与处理单元在同一通路中。两个数据通路可以分别传送数据。并行存取时:都交叉或都不交叉。条件指令不使用交叉路径(数据、地址)Code Review(using side A only)介绍代码Let us have a look at th
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 年产550台血液成分分离机项目可行性研究报告
- 类脑神经形态CPU项目可行性研究报告
- (一检)泉州市2026届高中毕业班质量监测(一)语文试卷(含标准答案)
- 新房装修合同
- 防暴警察原理知识培训总结
- 网购服务协议范本
- 浙江省湖州2025年九年级上学期月考数学试题附答案
- 云平台协同管理-洞察及研究
- 园区工厂建设工程承包合同2篇
- 公司工业借款担保合同书3篇
- 癌因性疲乏治疗指南
- 大象版(2024)小学科学一年级上册教学设计(附教材目录)
- 接收预备党员表决票(样式)
- 品牌合作协议书合同范本
- 中小学教育管理干部考核试题及答案
- 养老院预防老人食品药品误食
- 装配式建筑装饰装修技术 课件 模块二 装配式楼地面
- 地下室转让合同协议书
- 物理化学实验B智慧树知到期末考试答案章节答案2024年北京科技大学
- (正式版)HGT 6270-2024 防雾涂料
- 美业市场培训课程课件
评论
0/150
提交评论