DSP原理及应用PPT教程-第三章 存储与寻址方式.ppt_第1页
DSP原理及应用PPT教程-第三章 存储与寻址方式.ppt_第2页
DSP原理及应用PPT教程-第三章 存储与寻址方式.ppt_第3页
DSP原理及应用PPT教程-第三章 存储与寻址方式.ppt_第4页
DSP原理及应用PPT教程-第三章 存储与寻址方式.ppt_第5页
免费预览已结束,剩余44页可下载查看

下载本文档

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

文档简介

第三章 存储结构与寻址方式,本章内容 1、存储结构(tms320c55x dsp存储结构) 程序空间 数据空间 i/o空间 2、寻址方式 对数据存储空间、存储映射寄存器、寄存器位、i/o空间的寻址 绝对寻址模式 直接寻址模式 间接寻址模式,第三章 存储结构与寻址方式,3.1 存储结构 c55x dsp 有两个独立的存储空间: 统一的数据/程序空间; i/o空间。 程序空间:用于存取执行的指令代码和执行指令时用到的表。 数据空间:用于存储指令需要的数据、映射寄存器(mmr); i/o空间:提供对外设寄存器的访问。 数据空间地址用于访问存储器和内存映射寄存器,利用程序空间地址从存储器中读取指令代码,而i/o空间用于cpu与外设之间双向通信。,cpu通过6条24位的地址总线对上述两部分存储空间访问。,第三章 存储结构与寻址方式,一、存储映射 24位地址可以寻址16mb存储空间;c55x的寻址空间为16mb cpu从程序空间读取代码时,使用以字节为基准的24位地址; 当访问数据空间时,使用以16比特的字为基准的23位地址。 地址总线24位,当访问数据空间时将23位地址左移一位(lsb补0)构成24位地址。 数据空间被分成128个主数据页(0-127),每个数据页64k的字地址,指令通过7比特的主数据页指针和16比特的偏移量,可以访问任何一个主数据页中的任何一个地址。,第三章 存储结构与寻址方式,第0主数据页中 数据空间的前96个地址(000000h00005fh)为存储映射寄存器mmr。 相对应的程序空间的前192个地址(000000h0000bfh) 建议不要用来存放程序代码。,存储器映射图,第三章 存储结构与寻址方式,存储空间又分为:内部存储空间和外部存储空间。 1、内部存储空间(352kb): daram:8块 8kb,共64kb saram:32块 8kb,共256kb rom:1块32kb 2、外部存储空间(352kb16mb) emif根据片选信号(ce0ce3)来确定要访问的外部存储空间。,第三章 存储结构与寻址方式,二、程序空间 只有当cpu读取指令时,程序空间才被访问。cpu采用字节寻址来读取变长的指令,指令的读取要和32位的偶地址对齐(地址的低两位为零)。 1、c55x采用字节寻址来读取程序代码 字节寻址:地址按照字节进行分配,且地址为24位。 下图是32比特宽的存储器中的一行存储内容与地址间的关系。,第三章 存储结构与寻址方式,2、程序空间的指令结构 c55x dsp支持变长指令,其长度可以是8、16、24、 32、 40、48比特。例如: 1 byte:nop 2 byte:mov t0,*ar0 3 byte:mov t0,high_byte(*ar0) 4 byte:mov low(ac0#-8),*ar0 5 byte:bcc p24, condition,第三章 存储结构与寻址方式,(1) 指令组织方式 变长指令存放在32比特宽的存储器中。指令的地址根据操作码的最高有效字节的地址确定。例如指令a的地址是000101h。,第三章 存储结构与寻址方式,(2) 边界对齐关系 在程序空间中存放指令时不用边界对齐,当读取指令时,需按32比特边界的偶地址对齐(根据前面指令缓冲单元i 的介绍,指令缓冲队列每次通过程序数据总线pb从程序空间读取32比特的程序操作码,所以cpu总是从最低两位为0的地址读取32比特代码。即读取地址的最低一个16进制位是0、4、8或c)。,假设子程序sub位于00 0106h段的c指令,pc 的值为00 0106h。那么程序地址总线实际上传 的地址是00 0104h的32比特边界地址。,例如: call sub子程序,如果程序在执行过程中调用了子程序,则在cpu调用子程序时,可能会发生写入程序计数器pc的地址与程序代码的读取地址不一致的情况:,第三章 存储结构与寻址方式,三、数据空间 1、c55x采用字寻址(23bit)来读取数据空间8位、16位或32位数据 字寻址:将一个地址分配给数据空间中的一个16bit字。下图是一行32位宽的存储器地址分配 问题:地址总线是24位,当访问数据空间时,将23位地址左移一位(lsb补0)构成24位地址。例如:如果一条指令在23比特地址的000102h上读数据,实际上读数据地址总线上传送的24位地址是000204h。,第三章 存储结构与寻址方式,2、数据类型 c55x dsp指令处理的数据类型有:字节(8bit),字(16bit),长字(32bit)。,3、数据空间数据结构 长字数据c的存取地址是000102h 长字数据d的存取地址是000105h 000107h存放数据f(高字节)和数据g(低字节)。,例子,第三章 存储结构与寻址方式,在数据空间中对字节存取 由于数据空间采用字寻址方式,对字节进行存取时,可以使用c55x的专用指令如high_byte(), low_byte()对高低字节进行存取。例如:mov high_byte(*ar0),ac0。,第三章 存储结构与寻址方式,cpu在数据空间中对长字进行存取 存取地址由数据的高16bit(msw)地址决定,数据的低16bit(lsw)的地址取决于msw地址的奇偶性。,可通过将msw的最低有效位(lsb)取反来确定lsw地址。,(1) 若msw的地址是偶地址,则lsw从msw的后一个地址存取。,(2) 若msw的地址是奇地址,则lsw从msw的前一个地址存取。,第三章 存储结构与寻址方式,4、存储映射寄存器(mmr) 位于第0数据页,占用00 0000h00 005fh地址的数据空间(参见教材书上62页64页)。书中的表3-4列出了存储映射寄存器。,理解存储映像寄存器(mmr):mmr包括一系列寄存器。由于mmr(存储映象寄存器)是数据存储区的一部分,因此能够用访问其它数据存储区相同的方法进行访问。通常借助直接或间接寻址,对它们写或读。,第三章 存储结构与寻址方式,四、i/o空间 c55x的i/o空间和数据/程序空间是分开的,只用于对dsp片内的外设寄存器的访问存取,采用16位宽的字寻址方式,寻址范围是64k字。 cpu在读取i/o空间时用dab地址总线读数据,eab地址总线写数据。因为数据地址总线为24位,有一个16位地址到24位地址的变换,例如: 0102h00 0102h,高8位添0。,第三章 存储结构与寻址方式,3.2 寻址方式 寻址方式:寻找地址的方法,即如何指定指令和操作数所在存储单元的地址。 c55x支持三种类型的寻址方式 绝对寻址模式:在指令中利用常数值直接确定存取位置。 mov *(#00 0001h),ac0 直接寻址模式:通过地址偏移量进行位置寻址。 如 sp=0000h,mov *sp(5),t0 间接寻址模式:通过辅助寄存器确定存取位置 如 ar0=0,bset *ar2, ac0 通过上面方式可以实现对数据存储空间、存储映射寄存器、寄存器位和i/o空间的寻址。,第三章 存储结构与寻址方式,一、绝对地址寻址:k16,k23和i/o绝对寻址,1、k16绝对寻址: 操作数:*abs16(#k16) 将扩展数据页指针xdp的高位部分dph中的7比特值与16比特无符号常数(k16)级联形成23位地址。然后用该地址存取数据空间,可以用来访问一个存储单元或存储映射寄存器,第三章 存储结构与寻址方式,例1:mov *abs16(#2003h),t1 说明:假设pdh=1,cpu将数据空间地址为01 2003h的值装入t1中。 例2:mov *abs16(#ar2),t0 说明:cpu将ar2(000012h)中的值装入t0中 注意:当使用这种寻址模式时由于常数编码将指令扩展了2个字节,故该模式不能与其它指令并行执行。,第三章 存储结构与寻址方式,2、k23绝对寻址 操作数:*(#k23) 该模式将23位无符号常数(k23)作为完整的数据寻址地址,可以用来访问一个存储单元或存储映射寄存器。当使用这种寻址模式时不能与其它指令并行执行。,使用这种寻址方法的指令将常数编码为3字节(去掉最高位),第三章 存储结构与寻址方式,例1:mov *(#002003h),ac0 ;k23=002003h 例2:利用存储映射寄存器访问的k23的绝对寻址 mov *(#ac0l),t2 ;cpu将ac0中的低16位装入t2中。 mov dbl(*(#ac0l),pair(t0) ;cpu将ac0中的低16位装入t0中,将ac0中的高16位装 入t1中。 绝对寻址模式的缺点是它要更多的空间来表示其23bit地址。,第三章 存储结构与寻址方式,二、直接寻址 数据页指针dp直接寻址; 堆栈指针sp直接寻址; 对寄存器位的直接寻址; 外设数据页指针pdp直接寻址; 注意:dp和sp直接寻址与状态寄存器st1_55中的cpl位有关。,cpl=0时,dp直接寻址,cpl=1时,sp直接寻址,寄存器位寻址和pdp直接寻址与cpl位无关,第三章 存储结构与寻址方式,1、dp直接寻址 23位地址的高7位: 由xdp的高7bit (dph)确定,确定了主数据页; 23位地址的低16位: 16比特的dp和7比特偏移量doffset的和确定。 dp的值确定在主数据页内长度为128个字的局部数据页开始地址,该开始地址可以是选定主数据页内的任何地址。 7位偏移量:128个字的范围。,特点:不用改变dp或sp的值,就可以随便访问128个单元。,第三章 存储结构与寻址方式,$、直接寻址中偏移值(doffset)的计算方法 (1)对于数据空间的存取时,偏移量的计算方法: doffset = (daddr .dp_addr) & 7fh daddr:存取数据空间16bit地址; .dp_addr:汇编指示符“.dp” 为dp寄存器赋的值; &:逐位与操作; 例: amov #03fff0h, xdp;数据位于第03主数据页 .dp #fff0h ;编译时,dp的值为fff0h mov fff4h, t2 ;daddrfff4h 汇编器计算出偏移量:doffset = (daddr - .dp) & 7fh = 04h 执行时产生23位地址: dph:(dp + doffset)=03:(fff0h+0004h)= 03fff4h,第三章 存储结构与寻址方式,(2)对存储映射寄存器空间的存取时,偏移量的计算方法: doffset = daddr & 7fh 例:mov mmap(ar0), t2;把 ar0的值装入t2寄存器中。 mmap() 表示是对 mmr存储区的访问,所以此时dphdp=0。 ar0的地址为:daddr000010h (表33) 汇编器计算出偏移量: doffset = daddr& 7fh = 0010h & 7fh = 10h 执行时产生23位地址: dph:(dp + doffset) = 00:(0000h + 0010h) = 000010h,第三章 存储结构与寻址方式,2、sp直接寻址: 23比特地址 sph提供高7比特 16比特由sp和7比特的偏移值决定。偏移值范围是0127。这种寻址方式用于访问数据堆栈。 例:假设sph=0、sp=ff00h,用sp直接寻址 mov *sp(5), t2 ;sph:(sp + offset) = 00 ff05h mov dbl(*sp(5), pair(t2) ;sph:(sp + offset) = 00 ff05h的值装入t2 sph:(sp + offset - 1) = 00 ff04h的值装入t3,第三章 存储结构与寻址方式,3寄存器位直接寻址 后面和其间接寻址一起介绍。 4. pdp直接寻址 后面和i/o间接寻址一起介绍。,第三章 存储结构与寻址方式,三、间接寻址 间接寻址可以分为: ar(辅助寄存器)间接寻址 双重ar间接寻址 cdp(系数数据指针寄存器)间接寻址 注意: (1)间接寻址可以分成线性寻址和循环寻址方式, st2_55中的arnlc和cdplc位可以设置执行的是线性寻址还是循环寻址。 (2)指针修改后,要进行模64k运算,保证寻址不超过主数据页的寻址范围。,第三章 存储结构与寻址方式,1、ar间接寻址 通过辅助寄存器arn(n0,7) 访问数据空间,包括访问数据存储空间,mmr,寄存器位,i/o空间。 23位地址的值形成:,23比特地址 arnh: ( bsayy + arn ),arnh:扩展辅助寄存器xarn的高位部分,提供高7比特地址; arn: 提供低16比特的地址; bsayy:在循环模式下,提供循环缓冲起始地址。bsa01、bsa23、bsa45、bsa67。,第三章 存储结构与寻址方式,st2_55寄存器的arms位决定arn间接寻址的cpu模式 当arms0,dsp模式操作 cpu提供dsp增强应用的高效执行功能,能够提供按位倒序方式修改指针(对fft很有用) ,但不能使用短偏移操作数。 arms1,是控制模式操作 应用于控制系统,cpu能够优化代码字数。可以使用短偏移操作数,*arn(short(#k3) 。,1100 + 1010 0001 进位是从右到左,第三章 存储结构与寻址方式,arms0,dsp模式的指针修改方式 * arn : 指针不修改 * arn+() :生成地址之后,地址值增加或减小 * +()arn:生成地址之前,地址值增加或减小 * (arn + ()t0/ar0):生成地址之后,arn加上(减去)t0或ar0中16比特带符号的常数。 * arn(t0/ar0):指针没有被修改,arn作为基指针, t0或ar0中16比特带符号的常数作为偏移基指针的偏移量。,第三章 存储结构与寻址方式,* (arn +()t0b/ar0b):生成地址之后,arn加上(减去)t0或ar0中16比特带符号的常数。按位倒序模式相加。 *(arn+()t1):生成地址之后,arn加上(减去) t1中16比特带符号的常数。 * arn(t1):指针没有被修改,arn作为基指针, t1中16比特带符号的常数作为偏移基指针的偏移量。 * arn(#k16):指针没有被修改,arn作为基指针, 16比特带符号的常数作为偏移基指针的偏移量。 * +arn(#k16):生成地址之前,arn加上16比特带符号的常数k16。,第三章 存储结构与寻址方式,arms1,控制模式的指针修改方式 和dsp模式基本相同,没有提供按位倒序模式修改指针方法,但可以使用短偏移操作数。 * arn(short(#k3):指针没有被修改,arn作为基指针, 3比特无符号的常数作为偏移基指针的偏移量。 注意: 倒位寻址方式,可以提高fft算法中蝶形运算的效率 *arn(#k16),*+arn(#k16) 不能用于i/o空间寻址,第三章 存储结构与寻址方式,倒位寻址方式,提高fft算法中蝶形运算的效率,设ar2中的值为(01100000)2 t0的值为(00000100)2,顺序 操作数 修改后的值 0 *(ar2+t0b) 01100000 1 *(ar2+t0b) 01100100 2 *(ar2+t0b) 01100010 3 *(ar2+t0b) 01100110 4 *(ar2+t0b) 01100001 5 *(ar2+t0b) 01100101 6 *(ar2+t0b) 01100011 7 *(ar2+t0b) 01100111,第三章 存储结构与寻址方式,2、双重ar间接寻址模式 通过8个辅助寄存器(ar0ar7)同时访问两个数据存储地址,cpu使用扩展辅助寄存器生成23比特地址,双重寻址中的每个寻址都可以采用线性寻址或循环寻址方式。 (1)执行一条完成两个16比特数据空间寻址的指令,形式如下:,add xmem, ymem, acx,例如:,add *ar0, *ar1, ac0,在一条指令中,对两个数据存储单元的操作用xmem, ymem表示:,第三章 存储结构与寻址方式,(2) 并行执行两条指令。这种情况下每条指令都必须访问同一个存储单元中的数据。形式如下:,mov smem, dst | and smem, src, dst,指令语法中用smen或lmen表示,例如:mov *ar0, ac0 | and *ar0, t0, ac0,地址指针修改方式参见表3-7,第三章 存储结构与寻址方式,注意: (1)st2_55中的arms状态位对双重ar间接寻址操作数没有影响。 (2)汇编器不接受双重操作数使用相同的辅助寄存器而修改量不一样的代码。例如:,mov *ar0, ac0 | and *ar0, t1, ac1 ;illegal,mov *ar0, ac0 | and *ar0, t1, ac1 ;legal,mov *ar0(t0), ac0 | and *ar0, t1, ac1 ;legal,第三章 存储结构与寻址方式,3、cdp间接寻址 使用系数数据指针(cdp)访问数据空间,23位地址由cdph提供的高7位地址和cdp提供的低16位地址组成,可以用于访问数据空间,mmr,寄存器位,i/o空间。,地址形成方式:,23位地址cdph:(bsaccdp),bsac: (cdp缓冲起始地址寄存器)只有在循环寻址模式下才考虑,第三章 存储结构与寻址方式,指针修改方式: *cdp *cdp *cdp *cdp(#k16) *cdp(#k16),例如:mov *cdp+,ac0,系数间接寻址的地址组成和指针修改方式与ar间接寻址模式相同,主要用于无限脉冲响应滤波器,双乘,乘累加,乘减等运算:例如:,mpy *ar0, *cdp+,ac0 : mpy *ar1, *cdp+,ac1,第三章 存储结构与寻址方式,四、循环寻址(卷积、相关、fir滤波器需要一个环形缓冲区) 循环寻址可用于任何一种间接寻址模式中,通过设置st2_55中相应的状态位(arnlc或cdplc)独立地将每个辅助寄存器(ar0ar7)和系数数据指针(cdp)配置成线性寻址还是循环寻址。 若arnlc0或cdplc0,执行线性寻址 若arnlc1或cdplc1 ,执行循环寻址 循环寻址的地址形成: arnh:(bsaxx + arn) 或cdph:(bsac + cdp) 循环缓冲的字节数由寄存器bk03、bk47和bkc定义,第三章 存储结构与寻址方式,指针与循环寻址配置寄存器之间的关系如下,第三章 存储结构与寻址方式,bset ar1lc ; ar1lc1,把ar1设置成循环寻址指针 amov #010000h, xar0 ;循环寻址在01主数据页中执行,ar0h01h mov #0a02h, bsa01 ;循环缓冲区的首地址为010a02h mov #4, bk03 ;循环缓冲区长度为4words mov #0000h, ar1 ;循环缓冲区的索引为0000h (index) mov *ar1+, ac0 ;ac0 (010a02h + (ar1) =*( 010a02h), index=0001h mov *ar1+, ac0 ;ac0 (010a02h + (ar1) =*( 010a03h), index=0002h mov *ar1+, ac0 ;ac0 (010a02h + (ar1) =*( 010a04h), index=0003h mov *ar1+, ac0 ;ac0 (010a02h + (ar1) =*( 010a05h), index=0000h,举例:,if index+stepbk,index=index+step-bk,第三章 存储结构与寻址方式,循环寻址方式的实现步骤 将st2_55中相应的状态位arnlc或cdplc设置成循环寻址模式。 用amov指令初始化扩展寄存器(xary 或 xcdp)的高7位,选定主数据页。 利用bsa01, bsa23, bsa45, bsa67, 或bsac初始化循环缓冲区的的起始地址。并联合xarn(22-16)或xcdp(22-16)构成23位的循环缓冲区的起始地址。 初始化合理的循环缓冲区大小寄存器(bk03, bk47, or bkc) 。 设置arn 或 cdp为一个小于缓冲区长度的值,作为循环寻址开始的首次索引。 循环寻址初始化完成,进行下一步运算。,第三章 存储结构与寻址方式,五、寄存器位寻址: (1)直接寻址和间接寻址支持寄存器位寻址,绝对寻址不支持寄存器位寻址。 (2) 只有寄存器位的“测试/置位/清零/取反”指令支持寄存器位寻址。 1、寄存器位直接寻址 通过偏移量访问寄存器位,访问一个或者两个相邻的寄存器位。这里的偏移量是指从lsb开始的偏移比特数。 bset 0, ac3 ;cpu访问ac3的第0个比特,并置为1。 btstp 30, ac3 ;cpu测试ac3的第30 和 31比特,并将 ac3(30) 的内容拷贝到st0_55的tc1位,将ac3(31) 的内容拷贝到st0_55的tc2位.,第三章 存储结构与寻址方式,2、寄存器位间接寻址 通过辅助寄存器中的内容作为偏移量访问寄存器位。 例1:假设ar2=0,ar5=30。 bset *ar2,ac3;设置ac3的lsb为1 btstp *ar5,ac3; cpu测试ac3的第30 和 31比特,并将 ac3(30) 的内容拷贝到st0_55的tc1位,将ac3(31) 的内容拷贝到st0_55的tc2位. 例2:设置或清除状态寄存器的状态位。 bset sxmd ;设置st1_55中sxmd状态位为1 bclr c54cm ;清除st1_55中c54cm状态位,置为0,第三章 存储结构与寻址方式,六、i/o空间寻址 绝对寻址、直接寻址、间接寻址都可以用于i/o空间外设寄存器的存取。 、i/o空间绝对寻址: 该模式

温馨提示

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

评论

0/150

提交评论