设计一个8bit带行波进位加法器带复位的加法器

查看: 760|回复: 0
Verilog设计一异步复位、模9,带进位端的计数器,用状态机实现
0.png (48.58 KB, 下载次数: 30)
16:19 上传
module mo9(clk,clr,z,out);
input clk,
output reg [3:0]
parameter&&s0=0,s1=1,s2=2, s3=3,s4=4, s5=5,s6=6,s7=7,s8=8;
reg [3:0]&&next_state,
always @(posedge clk or posedge clr)
begin& && &
& && &&&if(clr)& && && &state&=s0;
& && &&&else& && && && && &&&state&=next_
end
always @(state)
begin
case (state)
& && && && && & s0: begin next_state&=s1; out&=end
& && && && && & s1: begin next_state&=s2; out&=end
& && && && && & s2: begin next_state&=s3; out&=end
& && && && && & s3: begin next_state&=s4; out&=end
& && && && && & s4: begin next_state&=s5; out&=end
& && && && && & s5: begin next_state&=s6; out&=end
& && && && && & s6: begin next_state&=s7; out&=end
& && && && && & s7: begin next_state&=s8; out&=end
& && && && && & s8: begin next_state&=s0; out&=end
& && && && && & default: begin next_state&=s0; out&=end
& && && && && & endcase
& && && && && & end
always @(state)
begin&&
& && &&&case(state)
& && && && && & s8: z&=1'b1;
& && && && && & default:z&=1'b0;
& && && &endcase
end
endmodule
全部资料下载地址:
(98.81 KB, 下载次数: 0)
11:47 上传
点击文件名下载附件
下载积分: 黑币 -5
共享资料的黑币奖励!
Powered byDSP编程与设计--TigerSHARC系列DSP应用教程-电子制作|电子毕业设计|毕业设计|单片机设计|QQ
&&|&&&&|&& &&|&&&&|&&
&&本站承接:
电子类项目设计,计算机毕业设计,毕业设计,电子毕业设计,电子线路设计,难题攻关,单片机设计,电子套件,VHDL编程等 &&&
&● 产品类别
& && DSP编程与设计
TigerSHARC系列DSP应用教程
双击自动滚屏
发布者:ebnar &&发布时间: &&阅读:
次 【字体:
专做,。熟悉51、ARM、电路设计、电路仿真等,欢迎咨询!
TigerSHARC系列DSP应用教程 目录TIGERSHARC系列DSP应用教程&1第1章 DSP技术综述&41.1数字信号处理器的发展和特点&41.2数字信号处理器的应用领域&6第2章 ADSP-TS201S处理器结构与功能&72.1 ADSP-TS201S处理器概述&72.2 ADSP-TS201S的计算块&132.2.1 寄存器组&132.2.3 CLU&162.2.4 乘法器&172.2.5移位器&192.3 IALU&202.3.1 IALU寄存器&212.3.2 IALU算术、逻辑和函数操作&212.3.3 IALU执行状态与执行条件&222.3.4 IALU 执行条件&222.3.5 IALU 数据寻址和传送操作&232.4 程序控制器&232.5 存储器组织&232.5.1 主机寻址空间&242.5.2 处理器内部存储空间&242.5.3 外部存储器寻址空间&242.5.4多处理器寻址空间&252.6 链路口&262.6.1链路口寄存器&262.6.2链路口模式设置&262.6.3 链路口DMA&272.6.4 链路口连接与通信&282.6.5 链路口服务请求中断&282.7 SDRAM接口&282.7.1 概述&282.7.2 SDRAM控制寄存器(SDRCON)&292.8 DMA&302.8.1 概述&302.8.2 DMA状态和控制寄存器组&302.8.3 链式DMA&322.8.4 DMA中断&322.9 中断&332.9.1中断的处理过程&332.10 ADSP-TS201S引脚说明&34第三章 TIGERSHARC指令系统&373.1& TIGERSHARC指令系统特点&373.1.1& TigerSHARC结构与指令特点&373.1.2 指令行结构&373.2& 指令集&413.2.1 ALU 指令&413.2.2乘法指令&523.2.3移位器指令&583.2.4 IALU 指令&623.2.5 程序流控制指令&68第4章 ADSP的软件开发&734.1 DSP的软件开发流程&734.2 开发工具VISUALDSP++概述&744.3 集成开发环境&744.3.1 创建一个新的工程文件&754.3.2 设置工程选项&754.3.3 添加或编辑工程源文件&814.3.4生成一个调试版的工程&824.3.5 调试一个工程&834.3.6 生成一个正式版的工程&834.4 选择合适的调试平台&834.4.1 安装仿真器驱动软件&834.4.2 选择调试平台&854.5 DEBUGGER 工具&894.5.1程序调试(Debug)操作&894.5.2 程序性能分析操作&894.5.3 设置观察点和断点&904.5.4 模仿硬件环境&914.5.5 寄存器窗口操作&914.5.6 存储器窗口操作&924.5.7 其它窗口操作&944.6 编写链接描述文件&944.7 编程练习&994.7.1 DFT汇编例子&994.7.2 DFT C程序例子&1014.7.3 FIR 汇编的例子&1014.7.4 SDRAM和内部存储器的DMA通信(利用EZ-KIT)&1024.7.5编写C程序,建立磁盘文件,练习读写数据&1044.7.6调试器和EZ-KIT板的性能比较&1044.7.7用ADSP_TS201 EZ-KIT板实现定时器&1054.7.8用链路口实现数据传输&1074.7.9 DSP实验课大作业设计&107
&第1章 DSP技术综述
数字信号处理相对于模拟信号处理有很大的优越性,表现在精度高、灵活性大、可靠性好、易于大规模集成等方面。随着人们对实时信号处理要求的不断提高和大规模集成电路技术的迅速发展,数字信号处理技术也发生着日新月异的变革。1.1数字信号处理器的发展和特点
实时数字信号处理技术的核心和标志是数字信号处理器(DSP)。数字信号处理有别于普通的科学计算与分析,它强调运算处理的实时性,因此DSP除了具备普通微处理器所强调的高速运算和控制功能外,针对实时数字信号处理,在处理器结构、指令系统、指令流程上做了很大的改动,其结构特点如下:
1)&&&&& DSP普遍采用了数据总线和程序总线分离的哈佛结构及改进的哈佛结构,比传统处理器的冯?诺依曼结构有更高的指令执行速度;
2)&&&&& DSP大多采用流水技术,即每条指令都由片内多个功能单元分别完成取指、译码、取数、执行等多个步骤,从而在不提高时钟频率的条件下减少了每条指令的执行时间;
3)&&&&& 片内有多条总线可以同时进行取指和多个数据存取操作,并且有辅助寄存器用于寻址,它们可以在寻址访问前或访问后自动修改内容,以指向下一个要访问的地址;
4)&&&&& 针对滤波、相关、矩阵运算等需要大量乘法累加运算的特点,DSP配有独立的乘法器和加法器,使得同一时钟周期内可以完成相乘、累加运算,最新出现的如ADSP-TS101、ADSP-TS201系列的DSP可以同时完成乘、加、减各2次运算,大大加快了FFT的蝶形运算速度;
5)&&&&& 许多DSP带有DMA通道控制器,以及串口通信等,配合片内多总线结构,数据块传送速度大大提高;
6)&&&&& 配有中断处理器和定时控制器,可以很方便地构成一个小规模系统;
7)&&&&& 具有软、硬件等待功能,能与各种存储器连接。
数字信号处理器(DSP)、通用微处理器(MPU)、微控制器(MCU)三者的区别在于:DSP面向高性能、重复性、数值运算密集型的实时处理;MPU大量用于计算机;MCU则用于以控制为主的处理过程。而DSP本身具有以下功能,提高了实时数字信号处理的性能:
1)&&&&& 单指令周期的乘、加操作;
2)&&&&& 特殊的高速寻址方式,可以在其他操作进行的同时完成地址寄存器指针的修改,并具有循环寻址、位反序寻址功能。循环寻址用于FIR滤波器,可以省去相当于迟延线功能的大量数据移动,用于FFT则可以紧凑地存放旋转因子表;位反序有利于FFT的快速完成;
3)&&&&& 针对实时处理所设计的存储器接口,能在单指令周期时间内完成多次存储器或I/O设备访问;
4)&&&&& 专门的指令集和较长的指令字,一个指令字同时控制片内多个功能单元的操作;
5)&&&&& 单片系统,易于小型化设计;
6)&&&&& 低功耗,一般为0.5―4W,采用低功耗技术的DSP只有0.1W,可用电池供电,对嵌入式系统很适合,而新型MPU,如Pentium、Power PC等功耗达20-50W。
因此,DSP的运算速度要高得多。以FFT、相关为例,高性能DSP不仅处理速度是MPU的4~10倍,而且可以流水无间断地完成数据的实时输入和输出。DSP结构相对单一,普遍采用汇编语言编程,其任务完成时间的可预测性相对于结构和指令复杂(超标量指令)、严重依赖于编译系统的MPU要强得多。以一个FIR滤波器为例,每输入一个数据,对应每阶滤波器系统需要一次乘、一次加、一次取指、两次取数,有时还需要专门的数据移动操作,DSP可以单周期完成乘加并行操作以及3~4次数据存取操作,而普通MPU至少需要4个指令周期,因此在相同的指令周期和片内缓存条件下,DSP是MPU运算速度的4倍以上。
正是基于DSP的这些优势,在高性能通用微处理器片内已经融入了DSP的功能,从而使计算机在网络通信、语音图像处理、实时数据分析等方面的效率大大提高。
自1985年第一片数字信号处理器TMS320C10产生以来,DSP发展大致经历了多个阶段,形成了目前DSP产品的三类档次:第一类是低成本、低功耗、高性价比的16bit定点DSP,应用最广泛,代表产品是TMS320C2000、TMS320C5000、Blackfin等型号;第二类是32bit浮点DSP,目前代表产品有TMS320C3x、ADSP2106x等型号;第三类是性能更高的DSP,如定点的TMS320C62xx、TMS320C64xx,浮点的TMS320C67xx、ADSP- TS10x、ADSP-TS20x等型号。
不同类型的 DSP适用于不同的场合。定点DSP可以胜任大多数数字信号处理应用,速度比浮点DSP快,成本、功耗比浮点DSP低;但在某些场合,当信号处理方式复杂、数据的动态范围很大时,按定点处理就会发生数据上溢出或下溢出,使信号处理无法进行。如果仍用定点DSP,以移位定标或模拟浮点运算的方式,将使程序执行速度大大降低。若采用浮点DSP,就解决了这些问题。常见的16bit定点DSP动态范围仅96dB,每增加1bit,动态范围增加6dB;而32bit浮点数据的动态范围为1536dB。因此,浮点DSP的处理性能在许多情况下要比定点DSP高得多。32位浮点DSP也可以完成32位定点运算(与定点DSP用法一致),目前的浮点DSP还具备更大的存储访问空间。更重要的是,浮点DSP的汇编程序比定点DSP的汇编程序简单:、易读、易编程、易调试,产生的代码也短,与常用的C编程方法相近,因此目前高级语言(如C语言)编译器更适合于浮点DSP,这使得普通计算机上的源代码无需大的修改,就可以较方便地移植到DSP设计中。
虽然目前已经有了峰值运算能力超过每秒10亿次的DSP,但相对于人们要求的每秒几百亿次、上千亿次运算来说仍远远不够。受到开关速度极限的限制,进一步提高主频所遇到的难度和付出的成本越来越大,单处理器性能的提高受到制约。为此,引入了并行处理技术。其实在DSP内部的多级流水处理、同时相乘/累加进行等功能中已经融入了片内并行技术。TMS320C6x采用超长指令字(VLIW)和多级流水线技术,在每条256bit的指令字中指定了多条流水线、多个处理单元的并行操作。在DSP外部也采用并行技术。以TMS320C4x、SHARC、ADSP-TS10x和ADSP-TS20x等并行DSP为用户提供了设计大规模并行系统的硬件基础,它们都提供了多通信(链路)口、多DSP共享总线的控制逻辑。利用通信(链路)口可以组成松耦合的分布式并行系统,利用共享总线控制逻辑,可方便地直接构成共享总线/存储器的多DSP系统,即紧耦合的总线共享式并行系统。1.2数字信号处理器的应用领域
随着DSP性能的迅速提高和成本价格的大幅度下降,DSP的应用范围不断扩大,几乎遍及整个电子领域,常见的典型应用有:
1.通用数字信号处理
数字滤波、卷积、相关、FFT、希尔伯特变换、自适应滤波、窗函数、波形发生等。
高速调制解调器、编/译码器、自适应均衡器、传真、程控交换机、蜂房移动电话、数字基站、手机、回音消除、噪声抑制、电视会议、保密通信、卫星通信、TDMA/PDMA/CDMA等各种通信制式。随着互联网络的迅猛发展,DSP又在网络管理/服务、信息转发、IP电话等新领域扮演着重要角色,而软件无线电的提出和发展进一步增强了DSP在无线电通信系统的作用。
3.语音识别
语音识别、语音合成、矢量编码、语音信箱。
4.图形/图像处理
三维图像变换、模式识别、图像增强、动画、电子出版、电子地图等。
5.自动控制
磁盘、光盘、打印机伺服控制、发动机控制。
6.仪器仪表
测量数据谱分析、自动监测及分析、静态分析、勘探、模拟试验。
7.医学电子
助听器、CT扫描、超声波、心脑电图、核磁共振、医疗监护等。
8.军事与尖端科技
雷达和声纳信号处理、雷达成像、自适应波束合成、阵列天线信号处理、导弹制导、火控系统、战场C3I系统、导航、全球定位GPS、目标搜索跟踪、尖端武器试验、航空航天试验、宇宙飞船、侦察工具。
9.计算机与工作站
阵列处理机、计算加速卡、图形加速卡、多媒体计算机。
10.消费电子
数字电视、高清晰度电视、图像/声音压缩解压器、DVD/CD播放机、游戏机、数字留言/应答机、汽车电子装置、音响合成、电子安全系统、家电电脑控制装置。第2章 ADSP-TS201S处理器结构与功能 2.1 ADSP-TS201S处理器概述
ADSP-TS201S 是ADI公司的高性能数字信号处理器TigerSHARC系列中最强大的一员,这一系列还包括有:ADSP-TS101、ADSP-TS202等。ADSP-TS201S内核工作主频达600MHz,片内存储器增加到24Mbit,加之其合理的结构以及高带宽的I/O接口,使得ADSP-TS201S在无线通信、军事、图像等高端市场的应用更加广泛。
图2.1给出了ADSP-TS201S的功能框图。
图2.1 ADSP-TS201S的功能框图
ADSP-TS201S的主要性能如下:
l&& 高达600MHz的运行速度,1.67ns指令周期;
l&& 24Mbit片内DRAM;
l&& 25mm×25mm(576-Ball)PBGA封装;
l&& 双运算核,每个计算块包含1个ALU、1个乘法器、1个移位器、一个寄存器组和1个通信逻辑运算单元;
l&& 双整数ALU,提供数据寻址和指针操作功能;
l&& 集成I/O接口,包括14通道的DMA控制器,外部总线,4个链路口,SDRAM控制器,可编程标志引脚,2个定时器及其输出指示;
l&& IEEE1149.1兼容的JTAG端口用于在线仿真;
l&& 通过共享外部总线可无缝连接多达8个TS201。
其主要优点有:
l&& 提供高性能静态超标量DSP操作,专门优化适用于通信和需要多DSP处理器的应用;
l&& 优异的DSP算法和I/O性能表现;
l&& DMA控制器支持14个DMA通道,可完成片内存储器,片外存储器,存储器映射外设,链路口,主机处理器和其他多处理器之间的低开销的高速传输;
l&& 非常灵活的指令集和支持高级语言的DSP结构,便于DSP编程;
l&& 可扩展的多处理器系统,连接时仅需很低的通信开销;
ADSP-TS201S DSP内核的结构
ADSP-TS201S系列的DSP内核主要包括运算块、程序控制器、整型ALU、数据对齐缓冲器和中断控制器等。
l&&&&&&&& 双运算模块
ADSP-TS201S的运算模块包括两个能通过相互独立或一起工作,执行通用运算来实现单指令多数据(SIMD)引擎的计算单元,分别称为运算块X,运算块Y。每个运算模块又包含一个寄存器组和4个独立的运算单元:算术逻辑运算单元(ALU)、通信逻辑处理单元(CLU)、乘法器、移位器。这些模块都能处理定点数和浮点数,可满足各种不同的处理要求。每个运算块包含的通用寄存器组是32位宽、多端口的,用于运算单元与数据总线之间数据传输,存储中间结果。这些寄存器都可以单字、双字、四字寄存器方式访问。
ALU完成定点数和浮点数的算术运算、定点数的逻辑运算,大多数ALU运算的数据源和目的地均为运算块的寄存器组。
CLU完成通信处理,支持通信处理的算法,如Viterbi解码、Turbo code解码、CDMA系统解调。
乘法器主要完成定点数和浮点数的乘法运算,定点数的乘累加运算,并且支持各种定点数和浮点数的数据格式。
移位器完成算术和逻辑移位,比特和比特流控制,域存储和提取操作。
l&&&&&&&&&& 双整数ALU(IALU)
ADSP-TS201S拥有两个IALU。能提供强大的地址产生能力和执行通用的整数操作。每个IALU能够:
(1) 为数据提供存储器地址,为寻址提供指针的更新;
(2) 支持循环缓冲和位反序寻址;
(3) 实现通用的整数操作,提高了编程的灵活性;
(4) 包含一个由32个字构成的寄存器组。
作为地址产生器,IALU完成立即或间接寻址(预修改或后修改),不受限制地完成存储器地址取模和位反序。每个IALU能够指定单、双、四字的内存访问。IALU通过硬件支持来实现循环缓冲、位反序和零开销循环。每个IALU提供了4个循环缓冲的寄存器,因此程序能够建立最多8个循环缓冲器,循环缓冲器的起始地址是任意的。
l&&&&&&&&&& 程序控制器
ADSP-TS201S的程序控制器支持如下功能:
(1)&&&&& 可灵活的使用汇编语言和C/C++,编写能够相应中断的程序。以高吞吐量处理中断并且不存在错误的指令周期。
(2)&&&&& 10个指令周期流水线――四个周期取指流水,六个周期执行流水――运算结果将会在操作数可用的两个周期以后得到。
(3)&&&&& 提供指令寻址内存地址;控制器的指令对齐缓冲器(IAB)可以缓存最多5条预取来的指令行,以后续等待执行,程序控制器从IAB中提取指令行,并将指令发给内核模块来执行。
(4)&&&&& 管理由CJMP,CALL,RTI,RTS指令,循环结构,条件,中断和软件异常决定的程序结构和程序流程。
(5)&&&&& 用分支预测和128入口分支目标缓冲器(BTB)来减少分支跳转的延时,以实现条件和无条件跳转指令的高效执行和零消耗循环;正确预测跳转是零开销的,能够减少5~9个周期的开销。
l&&&&&&&&&& 中断控制器
DSP支持嵌套和非嵌套中断。每种中断类型在中断向量表中拥有一个寄存器,并且在中断锁存寄存器和中断屏蔽寄存器中占一位。除了 可以被设置为边沿触发或电平触发以外,其他中断被固定设置为边沿触发(或电平触发)。
DSP能够区分硬件中断和软件异常,并分别处理。当软件出现异常时,DSP中止流水线中的所有指令。当硬件中断发生时,DSP将继续执行已经在流水线中的指令。
ADSP-TS201S DSP总线的结构和片内DRAM存储器
ADSP-TS201S的总线结构分为内部总线和外部总线,外部总线由外部引脚连接到处理器外。
l&&&&&&&&&& 内部总线
ADSP-TS201S处理器内核有3条相互独立的128位的内部数据总线和32位的地址总线(称为I-BUS、J-BUS、K-BUS),每条数据总线借助接口桥与所有内部存储器块相连。每条数据总线上,1个周期内允许传输多达4条指令或4个排列好的数据。片内系统单元用SOC-BUS和S-BUS总线访问存储器。在一个周期内,每个存储器块只能允许一次访问,所以应用中如果能设法把各个访问指向不同的存储器块,则这些访问可同时进行。
l&&&&&&&&&& 外部总线与接口
ADSP-TS201S的片内系统总线(SOC BUS)通过SOC结构与S-BUS连接外部总线及存储器系统,如图2.2所示,所有外设都通过片内系统总线,SOC接口与S-BUS连接,进而与存储器系统、处理器核内寄存器交换数据。
图2.2& ADSP-TS201S的SOC总线结构与接口
外部总线包括32或64位数据总线、32位地址总线以及各种控制信号。其中大多数信号是双向的,因为在共享总线的多处理器系统中,TigerSHARC可以是连接在外部总线上的主控处理器,也可以是从处理器。为了提高时钟的速率,TigerSHARC处理器使用了流水式外部总线,其流水深度是可编程的,可完成处理器间通信、访问同步SRAM和DRAM(即SSRAM和SDRAM)。
最快速的协议是流水协议。TigerSHARC多处理器系统的处理器之间就是使用这个协议通信。此外,TigerSHARC还能通过此协议与其他主机或存储器系统连接。流水协议的峰值吞吐率为每个外部周期传输一个数据,其实际的吞吐率可以保持在与峰值吞吐率非常接近的水平,其中的一个原因是此协议对连续的数据流的地址范围没有限制。
另一快速协议是SDRAM。这个协议由工业标准的SDRAM芯片定义。TigerSHARC有一个片上SDRAM控制器,它可以提供访问SDRAM所需的所有控制信号(/RAS,/CAS,/SDWE,SDCKE,LDQM,HDQM),而且可以初始化、刷新SDRAM。SDRAM的峰值吞吐率是每个周期传输一个数据。如在同一页中连续访问,则实际吞吐率可以保持在非常接近最大值的水平,此条件对DMA块传输也同样适用。但对SDRAM的单次访问开销是很大的。
TigerSHARC还支持慢速设备协议。慢速设备协议适用于较慢速的设备。对于大多数系统,我们建议将这些慢速设备连接在二级总线上,因为它们会增加总线负担,影响快速协议。当然,慢速设备仍可以直接连接到TigerSHARC外部总线上。
外部总线有以下特点:
l& 总线宽度64位或32位,对存储器、多处理器或主机接口可独立配置此宽度;
l& 流水传输,且流水级数可编程;
l& IDLE状态可编程;
l& 通过使用ACK引脚,可插入等待周期;
l& EPROM和FLASH接口为8位数据总线,等待周期数固定,可读写;
l& 主机接口;
l& SDRAM接口不插入等待周期;
l& 支持慢速设备;
l& 基于分布式总线仲裁的多处理器无缝连接;
l& 通过握手方式,支持与外部I/O设备的DMA传输;
l& 支持外部存储器与I/O设备间的DMA飞跃操作。
l&&&&&&&&&& 片内DRAM存储器
ADSP-TS201S拥有24Mbit片上DRAM存储器,该存储器被分为6个4Mbit的块,每个存储块(M0,M2,M4,M6,M8,M10)能够存储程序、数据或同时存储数据和程序。所以,在应用中能够根据具体需要配置。将程序和数据存储在不同的块中时,DSP就可以在取指令的同时访问数据。
每个片内存储块通过总线桥与处理器内部4条128位宽的内部总线相连。该连接使DSP能够在1个周期内完成4个128位内部传输。DSP内部总线结构提供了33.6GB/s的存储器带宽,使内核和I/O可以在一个周期内访问8个32位数据字(256位)和4个32位指令。DSP的这种灵活的存储器结构,使其能完成如下功能:
l& DSP内核和I/O在同一周期里访问不同的存储块;
l& DSP内核可并行访问3个存储块:1个取指令,2个访问数据;
l& 可编程的程序存储器和数据存储器分区;
l& 程序可以用16位、32位、64位或128位的形式访问所有存储器(使用DAB)。
ADSP-TS201S的I/O结构
ADSP-TS201S由专门的I/O处理器用于I/O访问,I/O访问方式可以是内核控制方式,也可以是DMA方式,此外,ADSP-TS201S还有专门的SDRAM控制器,专门产生SDRAM访问时所需的控制信号。
l&&&&&&&&&& 外部总线(片外存储器和外设接口)
&&& ADSP-TS201S提供了外部总线用于连接外部存储器和其他外设。4G字的寻址空间在DSP统一的寻址空间中。独立的片内总线(4条128位数据总线,4条32位地址总线)通过复用开关连接外部系统总线,该总线提供了64位的数据总线和32位的地址总线。外部端口能提供1000MB/s的访问速度。
l&&&&&&&&&& 主机接口
ADSP-TS201S在外部总线和主机处理器之间提供了方便的接口。为了能和各种主机处理器配合工作,主机接口支持流水线或慢速协议,用于从机访问。每种协议带有可编程的传输参数,例如空闲等待、流水深度、插入等待状态等。
主机接口支持主机初始化的突发传输模式。在主机发出开始地址后,使 信号有效,DSP将会在主机 继续有效时增加地址。
主机接口提供了死锁恢复机制,使得主机能从DSP死锁中恢复。 信号提供了死锁恢复机制。当主机 有效时,DSP取消当前的传输,并使 信号有效,放弃了外部总线。
主机能够直接读写ADSP-TS201S的片内存储器,能够访问DSP的大多数寄存器,包括DMA控制寄存器。
l&&&&&&&&&& 多处理器接口
ADSP-TS201S通过外部总线和链路口为多处理器DSP系统设计集成了无缝多处理器支持功能。这种多处理器接口为处理器间通信提供了最大的带宽,包括:
共享总线支持多达8个DSP;
为无缝多处理器连接提供片内仲裁;
用于点对点通信的链路口。
l&&&&&&&&&& SDRAM控制器
SDRAM控制器控制ADSP-TS201S与同步DRAM间的数据传输,每个SCLK周期传送32位或64位数据。
&&&&&& SDRAM接口提供与标准SDRAM――16Mbit、64Mbit、128Mbit和256Mbit的无缝接口。有4个BANK,每个都支持最大达64M字×32位的SDRAM。SDRAM被映射到DSP统一的存储空间中。
l&&&&&&&&&& EPROM接口
ADSP-TS201S能够被配置为复位后从外部8位EPROM自动引导。复位后自动从EPROM装载程序到片内存储器,装载过程读访问时插入16个等待周期。引导时 引脚用作EPROM的片选信号。EPROM引导过程使用DMA通道0,将字节型数据打包成32位的指令。应用程序也可以通过DMA随意访问EPROM。
l&&&&&&&&&& DMA控制器
ADSP-TS201S片上DMA控制器拥有14个DMA通道,提供无处理器核干预的零开销数据传输。DMA控制器独立工作,对DSP内核是不可见的。DMA可以在以下部件之间进行。
片内存储器、外部存储器及存储器映射的外设
共享总线上的其他DSP的片内存储器、主机处理器或链路口
外部存储器、外设或链路口
外部主处理器和片内存储器或链路口
l&&&&&&&&&& 链路口
&&& ADSP-TS201S的4个链路口提供额外4位的全双向I/O能力。以双倍速率(CCLK上升和下降沿)锁存数据,当内核时钟为500MHz时,即单方向速率可高达500MB/s,每个链路口双向通信最高吞吐量可达1GB/s。
l&&&&&&&&&& 定时器和通用I/O
ADSP-TS201S有一个定时器溢出引脚(TIM0E),当编程的定时器计数满时产生高电平输出。有4个可编程的I/O引脚(FLAG3~0),可以用作输入或输出。作为输出使用时,这些引脚可以驱动外设;作为输入时,可以用作条件分支指令的判断条件。2.2 ADSP-TS201S的计算块
&&& DSP有两个计算块――计算块X和计算块Y。每个块包含一个通用寄存器组和四个独立的计算部件――ALU、CLU、乘法器和移位器。2.2.1 寄存器组
1.&&&&&&&& 计算块的选择
所用的寄存器在哪个计算块里,用寄存器名前缀X和Y表示: X表示只在计算块X中, Y表示只在计算块Y中, XY( 或没有前缀) 表示在两个块中。
计算块前缀允许你选择在一个还是在两个计算块里运行指令,该前缀提供单指令单数据(SISD)和单指令多数据(SIMD)模式之间的选择。如果相同的算法用来处理两个通道的数据,使用SIMD执行是最优的。
值得注意的是,在SISD和SIMD的模式切换无延迟。SISD和SIMD模式总是可以通过简单地选择寄存器名而实现。
2.&&&&&&&& 寄存器宽度选择
&&&&&& 每个独立的寄存器堆寄存器(XR31-0和YR31-0)是32位宽的。为了支持比32位字更宽的数据长度,DSP汇编语法允许寄存器组合。Rn表示包含一个32位(或更少位数)的单寄存器(如R1),Rnd表示包含一个64位(或更少位数)的双寄存器(最低位寄存器的序号要求能被2整除,如R1:0),Rnq表示包含一个128位(或更少位数)的四寄存器(最低位寄存器的序号要求能被4整除,如R7:4)。
3.&&&&&&&& 操作数的长度和格式的选择
&&&&&& 寄存器命名的汇编语法允许选择操作数长度和定点或浮点数据格式。
单、双和四寄存器(Rs,Rsd,Rsq)保存着指令的操作数(输入和输出)。根据操作数长度和定点或浮点格式, 一个寄存器里可放置多个操作数。B――表示字节(8位)数据;S――表示短字(16位)数据;无――表示标准字(32位)数据;L――表示长字(64位)数据。
&&&&&& 为区别定点和浮点数据,用寄存器名前缀F表示寄存器包含浮点数据。
4.&&&&&&&& 数据格式
DSP支持IEEE 标准754/854的32位单精度浮点数据格式。 此外,DSP支持此格式的40位扩展精度版本,该版本在其尾数中增加八位。DSP也支持 8、16、32和64位定点格式――小数和整数――可以是有符号数(2的补码)或无符号数。
&&&&&& 这个单元执行所有的算术操作 (加/减法),处理的数据是定点和浮点格式;执行逻辑操作,处理的数据是定点格式。ALU也执行数据转换操作,如定点格式数据的扩展/压缩。
ALU也运行专用通信功能操作,主要支持解码和CDMA扩展操作。在ALU里,这个功能块主要是指通信逻辑单元(CLU)。
不是所有的ALU操作都支持定点和浮点数据。 ALU操作和相应的支持数据类型的相关性如下,在每个计算块里的64位ALU单元支持:
l&&&&&&&& 定点和浮点算术操作――加(+)、减(-)、最小值(MIN)、最大值(MAX)、维特比最大值(VMAX)、比较(COMP)、截取(CLIP)和绝对值(ABS)。
l&&&&&&&& 仅对定点数的算术操作――增加(INC)、减少(DEC)、叠加(求和)、叠加的并行结果 (PRx= SUM)、1的补码(ONES)和位FIFO指针增量(BFOINC)。
l&&&&&&&& 仅对浮点数的算术操作――浮点转换(FLOAT)、定点转换(FIX)、符号复制(COPYSIGN)、缩放(SCALB)、倒数或除法(RECIPS)、平方根或平方根的倒数(RSQRTS)、尾数提取(MANT)、指数提取(LOGB)、运算数扩展(EXTD)和扩展精度向标准字转换(SNGL)。
l&&&&&&&& 仅对定点数的逻辑操作――AND、AND NOT、OR、XOR和PASS。
l&&&&&&&& 仅对定点数据转换(升高/降低)操作――扩展(EXPAND)、压缩(COMPACT)和合并(MERGE)。
l&&&&&&&& 仅对定点CLU操作――最大值的Viterbi解码(VMAX), turbo解码的雅可比对数(TMAX),CDMA解扩(DESPREAD),多项式的重新排列(PERMUTE) 和格构增加/比较/选择(ACS)。
ALU操作支持定点算术操作和逻辑操作,其操作数可以是8位、16位、32位、64位宽度;也支持浮点数算术操作,其操作可以是32位标准字、40位扩展精度字。定点数据转换操作的操作数可以是8位、16位、32位、64位、128位,当输入操作数是128位,只能用于EXPAND和COMPACT指令。对于ALU的定点数CLU操作,其操作数可以是一个或两个32位数,两个或四个16位数,四个或八个8位操作数。
1.&&&&&&&&&& ALU操作
ALU对定点和浮点数据执行算术操作,对定点数执行逻辑操作。DSP将输入数据和输出结果均放在计算块寄存器中。计算块寄存器XR0~XR31和YR0~YR31。ALU用一个专用双寄存器――PR寄存器――存放并行结果。DSP使用PR寄存器完成不同类型的SUM、VMAX和VMIN指令。
2.&&&&&&&&&& 指令选项
大部份ALU指令带有选项,允许灵活的运行指令。注意,这些选项细化指令执行,不同的选项适应不同的指令群――不是所有的选项都适用所有指令。指令选项出现在指令域末端的圆括弧中。
ALU 指令选项包括:
l&& &()&& &有符号操作,非饱和,向最近舍入,小数模式
l&& &(S) &&有符号操作,饱和
l&& &(U) &&无符号操作,非饱和,向最近舍入
l&& &(SU) &无符号操作,饱和
l&& &(X)&& ABS扩展操作
l&& &(T) &&有符号操作,截断
l&& &(TU) &无符号操作,截断
l&& &(Z) &&对MAX/MIN,有符号结果返回零操作
l&& &(UZ) &对MAX/MIN,无符号结果返回零操作
l&& &(I) &&有符号操作,整数模式
l&&&&&& (IU) &无符号操作, 整数模式
l&&&&&& (IS) &有符号操作,饱和,整数模式
l&&&&&& (ISU) 无符号操作, 饱和,整数模式
1)&&&&&&& 有符号/无符号选项
DSP用8、16、32或64位表示定点数据,最多用四个32位的数据寄存器。在ALU中的定点可以是无符号的或是2的补码;浮点数总是原码表示的。
有两种类型的饱和算法――有符号数或无符号数。对有符号数饱和,无论何时发生溢出(AV标志被置位),把最大正值或最小负值作为输出结果。无符号数饱和,即溢出时,将把最大值或零作为输出结果。在输出格式中,最大值和最小值指的是输出格式所能表示的最大值和最小值。
例如, 在16位的短字运算中,最大的正数、最小的负数和最大无符号数分别是0x7fff, 0x8000,和0xffff。
2)&&&&&&& 扩展(ABS)选项
对于ABS指令,X选项提供一个扩展的输出范围。没有X时,输出范围是从0到正的最大有符号数(0x0到0x7F…F)。ABS使用X选项时,扩展输出范围从0x0到0x80…0,并且在这个范围内,输出数值是无符号的。
3)&&&&&&& 截断选项
ALU指令,支持T选项截断,这个选项选择结果的舍入模式。DSP支持两种舍入模式――向零舍入和向最近值舍入。定义如下:
l&&&&&&&& 向最近舍入(不带T选项)。如果舍入前的结果不能确切地用目的格式表示,则舍入的结果最接近舍入前的数值;如果舍入前的结果恰好是目的格式中最接近的两个数的中间值(相差一个最低有效位),舍入的结果是最低有效位为零的数。
l&&&&&&&& 向零舍入(使用T选项)。如果舍入前的结果不能确切地用目的格式表示,则舍入的结果是最接近零的数值,这与截断相同。
4)&&&&&&& 返回零(最大/最小)选项
对于MAX/MIN指令,如果第二个输入寄存器包含最大值(对于MAX)或最小值(对于MIN),则Z选项改变操作,返回零值。
5)&&&&&& 小数/整数的选项
DSP用8、16、32或64位表示定点数,最多用四个32位的数据寄存器。在ALU中, 小数或整数格式可用EXPAND和COMPACT指令。默认是小数格式。I选项选择整数模式。
3.&&&&&&&&&& ALU执行状态
ALU操作更新计算块算术状态(XSTAT和YSTAT)寄存器,用来指示操作结果的状态,保存在(XSTAT和YSTAT)寄存器。如表2-1所示
表2-1.ALU状态标志
被……更新
ALU定点数为0和浮点数下溢出
所有ALU操作
所有ALU操作
所有算术操作
所有定点操作;被浮点操作清零
ALU浮点无效操作
所有浮点操作;被定点操作清零
ALU操作也更新算术状态(XSTAT和YSTAT)寄存器中的关联状态标志位。表2-2中XSTAT或YSTAT中的标志位给出了最新的ALU操作中ALU的关联状态。一旦置位,关联状态将保持高,直到被程序明确地清零。
表 2-2. ALU状态相关联的标志
被……更新
ALU浮点下溢出,关联位
所有浮点操作
ALU浮点上溢出,关联位
所有浮点操作
ALU定点上溢出,关联位
所有定点操作
ALU浮点无效操作,关联位
所有浮点操作
标志位在每个操作结束的时候更新,以便下个指令域应用。在乘法器正在进行一个操作的同一周期中,程序不能对算术状态寄存器赋值。
4.&&&&&&&&&& ALU执行条件
在一个条件ALU指令中,整个指令行的执行依赖指令行开始所指定的条件,如表2-3。条件ALU指令采用以下格式:
IF DO, instr.; DO, instr.; DO, instruct. ;;
这个语法允许一个条件控制多达三条指令。在指令之前省略DO,则相应指令是无条件的。
表2-3.ALU的条件
ALU 等于零
ALU 小于零
ALU 小于或等于零
NOT (ALU 等于零)
NOT (ALU 小于零)
NOT (ALU 小于或等于零)
AN或AZ=02.2.3 CLU
&&&&&& 通信逻辑单元(CLU)指令用来完成通信应用中的多种的算法。这些指令主要为下列算法设计(虽然也可以用于许多其它算法) :
l&&&&&&&& Viterbi 解码
l&&&&&&&& Turbo 码的解码
l&&&&&&&& 码分多址(CDMA)系统的解扩
CLU指令的引入简化了这些算法的程序,但仍保留软件方式的灵活性,靠这种方式,根据特殊需求调整运算法是很容易的。另外,指令能满足各种用途的需求;例如,对低密度的奇偶校验码,支持turbo码解码的TMAX指令,是非常有用的。
&&& TigerSHARC处理器的主要性能是有高的数据传输率――每个周期可以进行两个128位的存储器访问。解扩指令每周期可完成16个16位复数(8位实部,8 位虚部)乘-加操作。在两个计算块里,每两个周期就能完成整个16位64个状态格构的计算。2.2.4 乘法器
乘法器执行定点和浮点数据的所有乘法操作,执行定点数据的所有乘累加操作和定点数据的所有复数乘法操作。在定点格式中,当乘法器把数据传送到寄存器堆时,乘法器也能执行对累加结果的数据压缩操作。
乘法器支持如下数据类型的操作:
l&&&&&& 定点小数和整数乘法操作和乘累加操作支持:八个16位(短字)输入操作数,得到四个16位或32位结果。两个32位(标准字)输入操作数,结果是32位或64位。
l&&&&&&&& 浮点乘法操作支持:两个32位(标准字)输入操作数(IEEE 标准),结果为32位。两个40位(扩展精度)输入操作数,结果为40位。
l&&&&&& 定点数据压缩操作支持:16位(短字)输入操作数,32位(标准字)输入操作数,64位(长字)输入操作数,输出16位或32位的结果。
1、&& 乘法器指令选项
大部分乘法器指令有可选项,不同的选项适用于不同的指令群。指令选项出现在指令域末端的圆括弧中。
l&& ( )& 有符号的操作,非饱和,向最近舍入,小数模式
l&& (U)& 无符号的操作,非饱和,向最近舍入
l&& (nU) 有符号的/无符号的输入
l&& (I)& 有符号的操作,整数模式
l&& (S)& 有符号的操作,非饱和的
l&& (T)& 有符号的操作,截断
l&& (C)& 清零操作
l&& (CR) 清零/舍入操作
l&& (J)& 复数共轭操作
1)&&&&&&& 有符号/无符号选项
所有的定点乘法器指令可以使用有符号或无符号数据类型。选项如下:
( )&&&&&&&&&&&&& &两个输入操作数均为有符号的(默认值)
&&(U) &&&&&&&&&&&&&&两个输入操作数均为无符号的
&&(nU)&&&&&&&&&&& Rm是有符号的,Rn是无符号的;选项只对Rs=Rm*Rn或Rsd=Rm*Rn有效。
2)&&&&&&& 小数/整数选项
定点操作数整数和小数选项定义如下:
( )&&&&&&&&&&&&&& 数据是小数(默认)
(I)&&&&&& &&&&&&&数据是整数
3)&&&&&& 饱和选项
当结果溢出――超过结果寄存器所能表示的最大值时,如果选项(S)是有效的,定点数被饱和。饱和结果是:
( )&&&&&&&&&& 无饱和(默认)
&& (S)&&&&&&&&&& 饱和是有效的
l&&&&&&&& 0x7F…F――如果操作是有符号的,且结果是正的
l&&&&&&&& 0x80…0――如果操作是有符号的,且结果是负的
l&&&&&&&& 0xFF…F――如果操作是无符号的,且结果是正的
l&&&&&&&& 0x00…0――如果操作是无符号的,且结果是负的(只在有符号的MR -= Rm * Rn中)
4)&&&&&&& 截断选项
乘法器指令,支持T选项截断,这个选项选择结果的舍入模式。
舍入的选项是:
( ) &向最近舍入(默认值)
(T)& 对浮点数向零舍入,对定点数向负无穷舍入
5)&&&&&& 清零/舍入选项
乘法操作和用MR寄存器来传送操作数的乘累加操作都支持MR清零(C)选项。在加法操作之前,使用这个选项强制对MR寄存器清零(=0)。
清零和清零/舍入选项是:
( )&&& 在乘累加操作之前,MR寄存器不变化 (默认值)
(C)&&& 在乘累加操作之前,把目标寄存器MR清零
(CR)&& 在乘累加操作之前,把目标寄存器MR清零并设置舍入位
6)&&&&&& 复数共轭选项
对于复数的乘累加操作(**操作符),乘法器支持复数共轭(J)选项。J选项指示乘法器用Rn复数的共轭去乘Rm。
2、&&&&&& 乘法器执行状态
乘法器操作更新算术状态(XSTAT和YSTAT)寄存器(见表2-4)。后续指令能使用状态标志控制条件指令的执行和触发软件异常中断。
表 2-4. 乘法器状态标志
被……更新
乘法器定点为零和浮点下溢出
所有的定点和浮点乘法器操作
乘法器的结果是负的
所有的定点和浮点乘法器操作
乘法器上溢出
所有的定点和浮点乘法器操作
乘法器下溢出
所有的浮点乘法器操作;被定点操作清零
乘法器浮点非法操作
所有的浮点乘法器操作;被定点操作清零
乘法器操作也更新算术状态(XSTAT和YSTAT)寄存器中的关联状态标志位(见表2-5)。一旦置位,关联状态将保持高,直到被程序明确地清零。
表2-5. 乘法器的关联状态标志
被……更新
乘法器下溢出,关联
所有的浮点乘法器操作
乘法器浮点上溢出,关联
所有的浮点乘法器操作
乘法器定点上溢出,关联
所有的定点乘法器操作
乘法器浮点非法操作,关联
所有的浮点乘法器操作
3、&&&&&& 乘法器执行条件
在一个条件乘法器指令中,整个指令行的执行依赖于指令行中指定的条件。条件乘法器指令采用如下形式:
IF DO, instr.; DO, instr.; DO, instruct. ;;
这种语法允许一个条件控制三条指令。在指令之前省略DO,则此指令是无条件的。表2-6列出了乘法器的条件。
表2-6. 乘法器的条件
乘法器等于零
乘法器小于零
乘法器小于或等于零
NOT(乘法器不等于零)
NOT(乘法器不小于零)
NOT(乘法器不小于或等于零)
MN或MZ=02.2.5移位器
&&&&&& 这个单元执行位方式的操作(算术和逻辑移位)以及位域操作(域提取和放置)。移位器也执行数据转换操作,如定点和浮点格式转换。移位器操作包括:
(1)&&& 向左或向右移位,或循环移位
(2)&&& 位处理;包括置位,清零,取反和位测试
(3)&&& 位域处理;域提取和放置
(4)&&& 缩放因子的识别,16位块浮点数
(5)&&& 指数提取
(6)&&& 计算高位连续1或0的个数
移位器对定点数据的操作,采用下列各项作为输入:一个长字(64位)操作数,一个或两个标准字(32位)操作数,两个或四个短字(16位)操作数,四个或八个字节(8位)操作数。
1.&&&&&&&& 移位器操作
移位器操作在计算块寄存器堆或移位寄存器BFOTMP(移位器的内部寄存器)中进行,BFOTMP用于PUTBITS 指令。移位器操作能从寄存器堆中提取它们的Rm输入(操作数据),从寄存器堆或指令中提供的立即数提取它们的Rn输入(移位值)。当操作包括第三个输入时,Rm和Rn是从寄存器堆中取出的,第三个输入Rs是读-修改-写(RMW)寄存器。
移位操作的移位值来自Rn,放在Rn最右边的位域,移位值(移位的位数)由输出操作数的宽度决定。对长字输出Rn是8位、标准字输出Rn是7位、对短字和字节输出Rn是6位,这样,所有移动量的左右移位都能完成,Rn中移位值以外的位被忽略。
2.&&&&&&&& 移位器指令选项
大部分移位器指令有和它们相关联的可选项,允许灵活的运行指令。不同的选项适用于不同的指令群。指令选项出现在指令域末端的圆括弧中。
l&&&&&&&& ( ) &&零填充,右对齐
l&&&&&&&& (SE)& 符号扩展;适用于FEXT、FDEP和GETBITS指令
l&&&&&&&& (ZF)& 零填充;适用于FDEP指令
3.&&&&&&&& 移位器执行状态
移位器操作更新算术状态(XSTAT和YSTAT)寄存器的状态标志。后续指令可用状态标志控制条件指令的执行和初始化软件异常中断。表2-7中寄存器XSTAT或YSTAT中的标志位表示最近的移位器操作状态。标志位在每个操作结束的时候更新,以便下个指令域应用。在移位器正在进行一个操作的同一周期中,程序不能对算术状态寄存器赋值。
表2-7. 移位器状态标志
被……更新
移位器定点零
所有移位操作
移位器负数
所有移位操作
移位器块浮点
只有BKFPT指令
用PUTBITS指令时的结果溢出
4.&&&&&&&& 移位器执行条件
在条件移位器指令中,整个指令行的执行依靠指令行开始指定的条件。条件移位器指令采用如下形式:
IF cond; DO, instr.; DO, instr.; DO, instruct. ;;
该语法允许一个条件控制多达三个指令。指令前省略DO,则此指令是无条件的。表2-8列出了移位器的条件。
表2-8. 移位器条件
SN 和 SZ &= 1
SN和 SZ = 02.3 IALU
TigerSHARC处理器的两个独立IALU是J-IALU和K-IALU。IALU支持标准的ALU运算和数据寻址运算。当数据在存储器和寄存器之间传送时,由IALU提供存储器的地址。两个IALU允许为多操作数读/写同时产生地址。IALU的数据寻址和数据移位操作包括:
l&&&&&&&& &直接和间接存储器寻址
l&&&&&&&& &循环缓冲寻址
l&&&&&&&& &位反序寻址
l&&&&&&&& &通用寄存器(Ureg)移位和加载
l&&&&&&&& &存储器指针产生2.3.1 IALU寄存器
每个IALU都包含由32个寄存器组成的寄存器堆和8个专用的循环缓冲寻址寄存器。IALU中的所有寄存器都是32位宽、存储器映射的通用寄存器。有关IALU寄存器堆的几点重要提示如下:
l&&&&&&& J-IALU寄存器堆的寄存器是J31-J0,K-IALU寄存器堆的寄存器是K31-K0。除了J31和K31,这些寄存器都是通用的且只存整型数据。
l&&&&&&&& J31和K31寄存器是32位状态寄存器,也可以写作JSTAT和KSTAT。
l&&&&&&&& 当这两个寄存器用做IALU算术、逻辑或函数运算的操作数时,就作为J31和K31寄存器使用,寄存器的内容看作0。如果J31用做一个运算的输出时,它不保留指令的结果,但设置标志位。
l&&&&&&&& 当用作IALU加载、存储或移位操作时,这两个寄存器作为JSTAT和KSTAT,这种操作不清除寄存器的内容。
每个IALU中的专用循环缓冲寄存器选择循环缓冲区的基地址和长度。这些专用寄存器与每个IALU的寄存器堆的前四个通用寄存器共同管理八个循环缓冲区。有关IALU循环缓冲寻址的专用寄存器的一些要点如下:
l&&&&&&&& 循环缓冲指针(当前地址)是通过一个通用寄存器设置的,也就是设置J-IALU的J3-J0,K-IALU的K3-K0。
l&&&&&&&& 循环缓冲区基地址(起始地址)是通过一个专用寄存器设置的。也就是设置J-IALU的JB3-JB0,K-IALU的KB3-KB0。
l&&&&&&&& 循环缓冲区长度(存储单元的个数)是通过一个专用寄存器设置的。也就是设置J-IALU的JL3-JL0和K-IALU的KL3-KL0。
l&&&&&&&& 循环缓冲区修正值(存储位置之间的步长)是通过一个通用IALU寄存器或一个立即数值设置的。
l&&&&&&&& 控制循环缓冲区的指针、基地址和长度寄存器作为一个整体工作。(J0用JB0和JL0, J1用JB1和JL1,等等)。IALU中控制循环缓冲区的任何寄存器堆寄存器(除了作为指针的那个)都可用作修正值。
IALU可以使用加和减指令产生带或不带循环缓冲或位反序的寻址指针。修正地址值存储在一个IALU数据寄存器,也可以写到程序控制器的计算跳转寄存器(CJMP)中(可选的)。2.3.2 IALU算术、逻辑和函数操作
IALU执行定点数(整型)的算术逻辑操作。DSP使用IALU寄存器堆的寄存器作为输入操作数和IALU操作的输出结果。IALU寄存器堆的寄存器是从J30到J0和K30到K0。
大部分IALU指令都有和它们相关联的选项,允许灵活的运行指令。不同的选项适应不同的指令群,IALU指令选项包括:
l&&&&&&&& &()有符号数运算,向无穷舍入,整数
l&&&&&&&& &(U)无符号运算
l&&&&&&&& &(CB)对结果的循环缓冲运算
l&&&&&&&& &(BR)结果的位反序运算
l&&&&&&& &(CJMP)把结果加载到结果寄存器和运算跳转(CJMP)寄存器中2.3.3 IALU执行状态与执行条件
IALU运算更新IALU的状态寄存器(JSTAT和KSTAT)的状态标志。表2-9展示了JSTAT或KSTAT中标志位。这些标志指明了IALU最近操作的状态。
表2-9.IALU状态标志位
被……更新
J-IALU为零
所有的J-IALU算术,逻辑,函数运算
J-IALU为负
所有的J-IALU算术,逻辑,函数运算
J-IALU溢出
所有的算术运算
J-IALU进位
所有的算术运算
K-IALU为零
所有的K-IALU算术,逻辑,函数运算
K-IALU为负
所有的K-IALU算术,逻辑,函数运算
K-IALU溢出
所有的算术运算
K-IALU进位
所有的算术运算
标志的更新发生在每个操作的末尾,以便下一个指令域的应用。程序不能在IALU运行一个操作的同一周期内,把状态标志写到一个IALU状态寄存器中。2.3.4 IALU 执行条件
在一个有条件的IALU指令中,整个指令行的执行取决于指令行开始指定的条件。有条件IALU指令采用以下形式:
IF cond;D0,instr.;DO,instr.;DO,instruct.;;
这个语法中允许一个条件控制三条指令。省略DO表示此对应指令是无条件的。表2-10.列出了IALU条件。
表2-10. IALU条件
标志位设置
J-IALU等于零
J-IALU小于零
J-IALU小于或等于零
NOT(J-IALU不等于零)
NOT(J-IALU不小于零)
NOT(J-IALU不等于或小于零)
K-IALU等于零
K-IALU小于零
K-IALU小于或等于零
NOT(K-IALU不等于零)
NOT(K-IALU不小于零)
NOT(K-IALU不小于等于零)
LN或KZ=02.3.5 IALU 数据寻址和传送操作
&&&&&& ADSP-TS201S的寻址都是由IALU模块完成的,无论对核内存储器寻址,还是对外部存储器,或是其他处理器共享存储单元寻址,都是由IALU完成的。具体可参见见第3章3.2.42.4 程序控制器
&&&&&& TigerSHARC处理器核包含一个程序控制器。这个控制器包括指令排列缓冲池(IAB),程序指针(PC),跳转地址缓冲池(BTB),中断管理器,取地址机制。利用这些特征和指令流水线,控制着程序的执行。
控制器从存储器取指令,并且执行程序流控制指令。控制器支持的操作包括:
l&&&&&&&& &提供下一个所取指令的地址
l&&&&&&&& &管理指令排列缓冲池(IAB),从中执行指令
l&&&&&&&& &管理跳转地址缓冲池(BTB),以减少跳转延迟
l&&&&&&&& &循环计数器减1
l&&&&&&&& &判定条件(对条件指令)
l&&&&&&&& &响应中断(带程序流变化)
具体指令可参考第三章3.2.5。2.5 存储器组织
ADSP-TS201S的32位地址总线提供了高达4G的寻址空间,整个寻址空间对共享总线的所有处理器都是统一的。ADSP-TS201S采用的是统一的存储器映射空间,片内和片外存储器都有单独而且唯一的地址空间。整个映射空间包含4个部分:主机寻址空间、外部存储空间、多处理器空间和片内存储器空间。除了主机空间之外,每个空间又包含更小的存储器区,如外部存储器寻址空间还有SDRAM区等。另外,无论处理器内部寻址空间还是外部寻址空间,TigerSHARC处理器保留了部分空间用于未来新处理器的扩展,但就目前,这些保留空间是不能访问的。
ADSP-TS201S寻址空间组成见下图2.3,整个寻址空间分为以下部分:
1.&&&&&&&& 主机寻址空间。用于片外主机接口的地址映射空间,外部主机可以是上位机或者其他TS201,地址映射范围0xxFFFFFFFF,此空间也可以配置普通存储器;
2.&&&&&&&& 外部存储空间。用于与外围设备、存储器接口的地址映射空间,包括通用的外部存储器设备和SDRAM存储器,地址映射范围是0xx7FFFFFFF;
3.&&&&&&&& 多处理器空间。用于多处理器系统中各处理器的内部存储空间映射,地址范围0x0Cx2FFFFFFF;
4.&&&&&&&& 片内存储空间。定义了本处理器内部存储空间的地址映射,地址范围0xx03FFFFFF,它与上述多处理器空间中的第一个在物理上是同一的(取决于ID)。
图2.3寻址空间映射2.5.1 主机寻址空间
&&&&&& 主机寻址空间高达2G。如果地址线的最高位ADDR31为1,则寻址空间为主机空间,如果为零,则寻址空间为其他空间。如果有主机,主机可以访问此空间,TS201也可以访问此空间的普通存储器。对主机寻址空间的访问,根据SYSCON系统控制寄存器中的主机位定义,可以使用流水协议或着慢速传输协议。2.5.2 处理器内部存储空间
内部存储空间主要由内部存储器与通用寄存器组成。
ADSP-TS201S处理器内部嵌入了高达24Mbit的DRAM,分成了6块,分别是M0,M2,M4,M6,M8,M10,每个块4Mbit,配置成128K×32bit,每个块均可用来存指令和数据。
通用寄存器有如下特点:
l&&&&&&&& 在多处理器系统中,通用寄存器能够以地址映射的方式,由其他处理器通过对应的寄存器地址来访问;
l&&&&&&&& 通用寄存器能够从存储区中存数据、取数据,能够与其他寄存器传递数据;
l&&&&&&&& 通用寄存器支持单字、双字、四字等方式访问。&&& 2.5.3 外部存储器寻址空间
&&&&&& 外部存储器寻址空间主要包含两个部分:SDRAM寻址空间和外部通用存储空间,该空间的访问由高位地址线ADDR30~26的译码决定,如表2-11。
&&&&&& SDRAM寻址空间是为了访问SDRAM而设置的,整个SDRAM寻址空间分为4个区,每个区的寻址范围为64M字,各区的访问由外部引脚 决定。
&&&&&& 外部通用存储空间是用于访问通用外设和存储区的,该空间分为两个区,各区寻址范围128M字,由 决定。2.5.4多处理器寻址空间
&&&&&& ADSP-TS201S可以采用无缝连接的方式实现最多8个处理器组成的系统,为了方便8个处理器之间存储区的共享和相互访问,DSP将内部的存储区根据处理器的ID号映射到多处理器空间中不同的地址空间中,从而实现对其他处理器内部空间的访问。另外,多处理器寻址空间中还提供了多处理器广播空间,任何处理器对该空间的访问只能是写,通过对广播空间的写,可以实现对所有处理器的广播写。多处理器寻址空间的划分如表2-11。
表2-11 外部存储器与多处理器寻址空间的地址划分
访问寻址空间的地址
外部存储器寻址空间选择
01100 C Bank 0 (MS0)
01110 C Bank 1 (MS1)
10000 C SDRAM Bank 0 /MSSD0
10001 C 保留
10100 C SDRAM Bank 1 /MSSD1
10101 C 保留
11000 C SDRAM Bank 2 /MSSD2
11001 C 保留
11100 C SDRAM Bank 3 /MSSD3
11101 C 保留
多处理器寻址空间选择
00011 C 多处理器广播空间
00100 C多处理器ID0空间
00101 C多处理器ID1空间
00110 C多处理器ID2空间
00111 C多处理器ID3空间
01000 C多处理器ID4空间
01001 C多处理器ID5空间
01010 C多处理器ID6空间
01011 C多处理器ID7空间
是否为主机寻址空间
=0,非主机寻址空间2.6 链路口
ADSP-TS201S有4个独立的链路口。与ADSP-TS101相比,链路口的改进最为显著。ADSP-TS201S的链路口由单端连接改为LVDS的差分连接模式,由准双向口改为完全双向通信,链路口时钟最高也可达到核内时钟速度,因此提供了更高的工作速度和更高的可靠性。2.6.1链路口寄存器
每个链路口有链路口控制寄存器LCTLx、链路口状态寄存器LSTATx和链路口状态清除寄存器LSTATCx,用于链路口数据传输操作、描述数据传输操作后的故障检测状态。每个链路口都带有一个链路口接收缓冲寄存器LBUFERXx和链路口发送缓冲寄存器LBUFTXx,用于缓存链路口传输时接收到的数据,或是用来存放要发送的发送数据。2.6.2链路口模式设置
链路口模式的设置是由链路口寄存器组完成的。链路口寄存器包含链路口发送/接收寄存器组和链路口控制和状态寄存器组。
1.链路口接收控制寄存器(LRCTL0~3)
链路口接收控制寄存器用来设置链路口的接收参数。在复位后,链路口控制寄存器的默认值由外部Strap引脚确定,当Strap引脚LINK_DWIDTH=0,该寄存器默认值0x,当Strap引脚LINK_DWIDTH=1,该寄存器默认值0x,其定义如图2.4所示。
2.链路口发送控制寄存器(LTCTL0~3)
链路口发送控制寄存器用来设置链路口的发送参数。该寄存器复位后默认值0x。定义如图2.5所示.
图2.4 链路口接收控制寄存器位定义(16~31位保留)
图2.5 链路口发送控制寄存器位定义(16~31位保留)
3.链路口接收状态寄存器(LRSTAT0~3)
该寄存器定义了链路口的接收状态,复位后,默认值0x,各位定义如图2.6所示。
图2.6 链路口接收状态寄存器位定义(16~31位保留)
4.链路口发送状态寄存器(LTSTAT0~3)
该寄存器定义了链路口的发送状态,复位后,默认值0x,各位定义如图2.7所示。
图2.7 链路口发送状态寄存器位定义(16~31位保留)2.6.3 链路口DMA
ADSP-TS201S有14个DMA通道,4个通道用于外部存储器设备,8个DMA用于链路口,还有两个自动DMA操作,其中8个链路口DMA可用于从一个链路口到另一个链路口的点对点数据传输,此时接收端的TCB必须编程为链路口接收TCB。使用DMA时,通过请求总线启动DMA传输过程,同时数据从请求DMA服务的链路口发送到接收链路口。从链路口到链路口DMA传输的TCB配置详见DMA传输部分。2.6.4 链路口连接与通信
链路口可以配置为内核时钟的1/1、1/1.5、1/2和1/4,只需要设置LTCTLx即可。链路口的信号连接如图2.8所示。
图2.8 链路口的信号连接(上图为4位模式,下图为1位模式)
ADSP-TS201S链路口是双向口,每个通道达到4位,用LxCLKOUTP/N,LxACKI,LxCLKINP/N和LxACKO控制,接收方用LxACKO信号用于描述接收链路口是否准备好了接收,当发送方得到LxACKI有效的信号时,开始发送。LxBCMPI和LxBCMPO用于描述块传输已经完成。当发送方DMA把最后4个字写到发送链路口的发送缓冲后,给出一个完成标志,链路口则使LxBCMPO有效,当接收方采集到LxBCMPI信号,TCB清零,DMA完成。2.6.5 链路口服务请求中断
当有数据进入链路口接收缓冲时:如果相应的DMA通道没有初始化,就会产生链路口服务请求中断;如果该链路口相应的DMA已经被初始化,就不产生链路口服务请求中断,而是发出DMA通道请求。复位后,此中断默认不使能。2.7 SDRAM接口 2.7.1 概述
&&&&&& ADSP-TS201S系列的处理器为SDRAM提供了专门的寻址空间,这些寻址空间通过SDRAM存储器引脚/MSSD0~3来选择,地址寻址空间范围为0x到0x7FFF FFFF。/MSSD0~3对应的寻址空间分别为:0xx;0xx;0xx;0xx。
&&&&&& ADSP-TS201S与SDRAM的接口如下图2.9所示。
图2.9 SDRAM控制器接口2.7.2 SDRAM控制寄存器(SDRCON)
在市面上有很多厂家可以提供SDRAM,不同的厂家制造出来的SDRAM芯片对激活―预充电命令延时和预充电―激活命令延时的要求不同,为了满足不同厂家的SDRAM的这些要求,寄存器SDRCON(配置见图2.10所示)是需要配置的。
SDRCON从低位到高位的含义如下:
SDRAM使能:当系统中配置了SDRAM时,应当设置此位有效。
CAS延时:为了满足不同厂商SDRAM器件的读延时( )的要求而设置,根据SDRAM不同的特性和时钟要求,该延时应当设置成1~3个时钟周期。
流水深度:允许SDRAM的地址和控制信号采用流水线的方式,如果该位有效,那么在对SDRAM的读和写访问过程中将插入一个时钟周期的延时。
页大小:决定SDRAM的页面大小。可设置256,512,1024字。
刷新率:用来设置SDRAM的刷新率,由SOC时钟计算。由下式获得:
ADSP-TS201S提供了4种刷新周期数的选择,分别为,1100个,1850个,2200个,3700个SOC时钟周期数。
预充电到RAS延时 :定义了SDRAM器件的预充电时间 ,该值范围是2~5个时钟周期。
RAS到预充电延时 :定义了SDRAM器件的行激活时间( ),该值的范围2~8个时钟周期。
初始化顺序:该位决定模式寄存器的设置(MRS)与刷新的顺序。该位置1,8个刷新周期在MRS设置之前进行。否则,在8个刷新周期后进行MRS设置。
EMR使能:该位置1,允许使用扩展的模式寄存器设置顺序(EMR),并且在MRS之前进行。该位只有在使用低功耗SDRAM时才能置1,否则置0。
图2.10 SDRAM控制寄存器(位16~31保留)2.8 DMA 2.8.1 概述
&&&&&& 直接存储器访问(DMA)是不需要处理器干预的数据传输机制。ADSP-TS201S片内的DMA控制器允许将数据传输作为一个后台任务执行,从而将处理器解放出来,进行其他数字信号处理操作。ADSP-TS201S有14个DMA通道,4个通道用于外部存储器设备,8个DMA用于链路口,还有两个自动DMA操作,
&&&&&& 值得注意的是,ADSP-TS201S不支持单片处理器的内部存储器间的数据传输,但是ADSP-TS201S仍然可以通过多处理器空间执行这种操作,但执行这种操作会对总线带来很大的传输开销,因此很少使用。
&&&&&& DMA0~3通道是外部DMA,DMA4~11通道是链路口DMA,DMA12~13是自动DMA。并且其优先级由DMA13至DMA0依次降低。2.8.2 DMA状态和控制寄存器组
DMA控制和状态寄存器组包括DMA控制寄存器、DMA状态寄存器、清除寄存器和传输控制块寄存器等。
1.&&&&&&&& DMA控制寄存器(DCNT)
DCNT寄存器是一个只读型的寄存器,各位的定义如图2.11所示。
图2.11 DCNT寄存器位定义(18~31位保留)
寄存器DCNTST用来设置DCNT的位,对写入DCNTST的值与DCNT原有的值或(OR)之后,写入DCNT。
寄存器DCNTCL用来清除DCNT的位,对写入DCNTCL的值与DCNT原有的值或(AND)之后,写入DCNT。
2.&&&&&&&& DMA状态寄存器(DSTAT)
DMA状态寄存器是一个64位的寄存器,只读型,记录当前各个DMA通道的状态。DSTAT只能通过双字或四字方式访问。
表2-12 DSTAT寄存器描述
000=DMA关闭
001=传输中
010=传输完成
100=TCB非法配置
111=广播读方式,地址错误
3.&&&&&&&& DMA传输控制寄存器(TCB)
对于DMA0~11通道,每个DMA通道都配备了TCB寄存器。每个TCB寄存器为128位,包含DMA索引寄存器DI,DMA X维寄存器DX,DMA Y维寄存器DY和DMA指针寄存器DP,每个寄存器为32位。TCB寄存器只能通过四字方式进行访问。
DI:是一个32位的寄存器,指向DMA的源地址(目的地址)。
DX:是一个32位的寄存器,在普通DMA传输模式中该寄存器的高16位存放DMA传输数据的长度,单位为32字,低16位存放的是DMA传输时的地址修改量。
DY:位的定义与DX相同,在需要进行二维DMA时,DY是Y维上的数据传输量和地址修改量。
DP:用来设置DMA的传输类型的位定义为:0~14位四字地址(TCB指针,存放链式DMA的TCB设置);15~16位,为链式指针选择寄存器(即链式指针的存放位置);17~21位,链的目的通道;22位,使能链式DMA;23位,DMA请求使能(外部方式触发DMA);24位,DMA中断使能,1=使能、0=不使能;25~26,操作数据长度01=32位字、10=64位字、11=四字;27位,二维DMA使能;28位DMA优先级,1=高优先级、0=正常优先级29~31位之指定,DMA设备。2.8.3 链式DMA
链式DMA就是处理器在完成一次DMA之后,能自动对其他DMA参数寄存器载入新的值,自动进行DMA初始化,开始下一次DMA。使用链式DMA必须对相应的DMA通道的TCB寄存器进行装载。DP的0~14位指定链指针CHPT,它就是存储器中的一个地址,该地址指向下一个TCB的内容。装载时,DSP从四字对齐地址开始的4个连续单元中,取出一四字数据载入DMA通道的TCB寄存器。内部和外部存储器之间进行链式DMA时,必须装载两个TCB(源TCB和目的TCB),装载完成后,使能链式位,将指针指向一个有效地址,就能使能DMA。TCB的装载,也可以通过链式和直接的写操作完成。2.8.4 DMA中断
如果在通道的DPx的INT置1,DMA传输完成会产生DMA中断。当DMA通道计数器减到零,传输完成时DMA会发出中断。当DMA的目的为内部存储器,意味着最后一个数据都到达内部存储器。当DMA的目的地为外部存储器,意味着数据都已到达外设的缓冲器。
产生中断必须是计数器减到零,向计数器写零不会产生中断。
每个DMA都有自身的中断,DMA中断会锁存在ILAT中,由IMASK寄存器来屏蔽或者打开。
与中断状态寄存器不同,打开DSTAT可以看DMA是否完成,但如果是DMA链则不可以,因为检测DSTAT时下一个DMA可能已经改变了DSTAT。2.9 中断
ADSP-TS201S为应用设计提供了丰富的中断资源,从结构上分为硬件中断和软件中断。硬件中断主要包括仿真器中断、复位中断、外部输入中断、定时器中断、链路服务请求中断、DMA控制中断、向量中断(VIRPT)、硬件错误中断和总线锁定中断。软件中断主要指由特别的指令和软件异常引起的中断,具有较高的优先级。此外,中断也能分为内部中断和外部中断。见表2.14。
表2.14 中断向量及优先级
中断优先级
中断向量寄存器名
中断名称说明
63(最高)
硬件故障中断
定时器1高优先级中断
定时器0高优先级中断
总线锁定中断
IRQ3~0中断
边沿或电平
DMA13~12完成中断
DMA11~8完成中断
DMA7~4完成中断
DMA3~0完成中断
LINK3~0请求中断
定时器1低优先级中断
定时器0低优先级中断
KERNEL中断
2.9.1中断的处理过程
当一个中断发生时,寄存器ILAT中的相应位置为1,同时将ILAT,IMASK以及PMASK按位相与,若相与的结果为1,又在SQCTL寄存器中使能了全局中断,则ADSP-TS201S响应优先级最高且使能了的中断。
中断嵌套允许一个中断服务程序正在执行的过程中,响应另一个中断。
中断的使能设置定义在三个寄存器中:中断锁存标志寄存器(ILAT);中断屏蔽寄存器(IMASK);中断屏蔽寄存器指针(PMASK)。ILAT表示处理器检测到了一个中断信号,并进行了记录;IMASK表示某个中断是否打开了;PMASK标志着正在服务的那个中断。2.10 ADSP-TS201S引脚说明
&&&&& ADSP-TS201S的大多数引脚通常都是同步的(与特定时钟相连),但也有少数引脚是异步的。对这些异步引脚,片内的同步电路用于防止它们的亚稳定性问题。引脚类型定义如下:I――输入,O――输出,A――异步,OD――漏机开路,T――三态,P――供电电源,G――接地
&&&&& 1.时钟和复位
内核时钟比率
系统时钟输入
内部DRAM电源复位
2.外部总线控制
外部数据总线
低32位写信号
高32位写信号
外总线访问应答
存储器引导选择
存储器选择
存储器主机空间片选信号
3.外部总线仲裁
多处理器总线请求引脚
多处理器ID
总线主处理器
总线锁定指示
主机总线请求
主机总线回应
内核访问优先
DMA访问优先
4.&&&&&&&& 外部总线DMA/Flyby
DMA请求引脚
I/O设备输出使能
5.&&&&&&&& 外部总线SDRAM控制器
SDRAM存储区选择
行地址选通
列地址选通
低字SDRAM数据屏蔽
高字SDRAM数据屏蔽
SDRAM地址引脚第10位
SDRAM时钟使能
SDRAM写使能
6.&&&&&&&& JTAG口
测试时钟(JTAG)
测试数据输入(JTAG)
测试数据输出(JTAG)
测试模式选择(JTAG)
测试复位(JTAG)
7.&&&&&&&& 链路口
LxDATO3-0P
链路口3-0的发送Data3-0的LVDSP
LxDATO3-0N
链路口3-0的发送Data3-0的LVDSN
链路口3-0的发送时钟的LVDSP
链路口3-0的发送时钟的LVDSN
链路口3-0的接收应答
发送方给出的链路口3-0块完成标志
LxDATI3-0P
链路口3-0的接收Data3-0的LVDSP
LxDATI3-0N
链路口3-0的接收Data3-0的LVDSN
链路口3-0的接收时钟的LVDSP
链路口3-0的接收时钟的LVDSN
链路口3-0的发送应答
接收方得到的链路口3-0块完成标志
8.&&&&&&&& 阻抗和驱动强度控制
CONTROLIMP2-0
数字驱动强度选择
9.&&&&&&&& 电源、地、参考
内部逻辑的电源引脚
模拟电路的电源引脚
I/O缓冲器的电源引脚
可以连接到电源或分压电路上
锁相环电源地
10.&&&& Strap引脚功能
复位时一些引脚有第二功能,称为Strap。Strap选择设置TS201的运行模式。复位期间,TS201采样Strap引脚。Strap引脚带有一个100K的内部下拉电阻。如果Strap外部没有上拉或逻辑负载,则DSP在复位是取下拉值(默认值)。如果Strap引脚已连上了某个外部逻辑信号,若漏电流和/或外部逻辑负载的低电平输入电流较大,则或许需要一个更强的外部下拉电阻来保证默认值。若要设置成非默认值,则给这些Strap引脚加足够强的外部上拉。Strap定义如下:
作用于引脚
LINK_DWDTH
链路口输入数据线宽度
SYS_REG_WE
SYSCON和SDRCON
第三章 TigerSHARC指令系统 3.1& TigerSHARC指令系统特点 3.1.1& TigerSHARC结构与指令特点
TigerSHARC处理器是一种高性能、128位宽的DSP。与ADI公司前一代SHARC系列DSP一样,TigerSHARC的汇编指令也采用代数表达式形式,因而易学易用,可读性强。
与计算功能密切相关的结构包括:
l&&&&&&&& 两个计算块――X和Y,每块由乘法器、ALU、移位器和32字的寄存器堆组成
l&&&&&&&& 两个IALU――J-IALU和K-IALU,每个由32位的IALU和32字寄存器堆组成
l&&&&&&&& 程序控制器――控制程序流,包括一个指令排列缓冲池(IAB)和分支地址缓冲池(BTB)
l&&&&&&&& 数据排列缓冲池(DAB)提供存储器到寄存器堆的高速数据传送
l&&&&&&&& 为所有功能块之间的连接提供四套128位高速总线.
&&&&&& TigerSHARC处理器的内核包括两个计算单元,或称之为计算块。每个计算块由一个寄存器堆和四个独立的计算部件――ALU、CLU、乘法器和移位器组成。
IALU能在IALU寄存器堆中执行标准的、独立的ALU操作。当数据在存储器和寄存器之间传送时,IALU也可以提供存储器地址。DSP有双IALU(J-IALU和K-IALU),为多操作数的读和写同时提供地址。每个IALU有一个多端口的32字寄存器堆。IALU支持不更新地址指针的预修正寻址,也支持更新地址指针的后修正寻址。IALU支持循环缓冲寻址,长度值可以和前个四寄存器(J3―0和K3―0)相关联,完成循环数据缓冲区地址的自动求模。IALU也支持位反序寻址,这对FFT计算非常有用。位反序寻址用反向传送进位加的方法计算地址,这种方法和标准的加法类似,只是较高位产生的进位加到较低位。
&&&&&& 程序控制器提供存放指令的存储器地址,并和IALU一起高效率的完成计算操作。分支地址缓冲池(BTB)使控制器的分支跳转更加高效,BTB减少了有条件或无条件分支指令的延迟。3.1.2 指令行结构
在一个指令行中,DSP一次执行一到四个32位的指令域。除了极少例外,在八级深度的流水线上可以每周期执行一个指令行。指令域和指令行的结构是这样的:
指令域1; 指令域2; 指令域3; 指令域4;;
1指令域和指令行的结构
指令行语法规定如下:
l&&&&&&&& 每个指令行由1―4个32位指令域(即指令字)组成。
l&&&&&&&& 指令域用一个分号“;”隔开。
l&&&&&&&& 指令行终止用两个分号“;;”。
l&&&&&&&& 每个指令域由32位操作码组成。&&
l&&&&&&&& 一些指令(如立即数扩展)需要两个32位操作码(指令域)。
l&&&&&&&& 一些指令(如程序控制器、条件和立即数扩展)需要特殊指令域。
指令是32位字,它可以激活DSP的一个或多个执行单元来完成若干操作。在同一指令行中的指令必然一起执行或延迟执行。DSP从程序存储器中一次可提取四字,但指令行不必位于四字边界上。不管指令行宽度(一到四个指令)如何,在存储器中,指令行是一个接一个存储的,一个新的指令行在前一个指令行结束的地方开始一个指令字。指令行的结束用指令字的最高有效位(MSB)标识。
2指令符号约定
TigerSHARC的汇编语言是基于代数语法的,其代码简单易读。指令语法指定DSP执行的所有操作和DSP的执行该操作的模式。操作包括计算、数据传送和程序流的控制。操作模式包括单指令单数据(SISD)和单指令多数据(SIMD)的选择、数据格式的选择、字宽度的选择、饱和使能以及截断使能。
本书给出了指令摘要。这个摘要给出了所有可选择的项。这些语法是:
A|B|C&&&&&&&&&& 列表中的项用一个竖线“|”隔开,表示语法可选择其中一个项。通常必须选择列表中的一个项。但竖线“|”不出现在实际指令中。
{选项}&&&&&&&&& 选项或选项的列表写在花括弧{ }内,表示一个可选项。该项可以被包括也可省略。但花括弧不出现在实际指令中。
()[ ] ,;& ;;&&& 圆括号、方括号、逗号、分号、双分号和其它符号在指令语法中是必须的选项,而且必须出现在摘要语法里。空圆括号(无可选项)不允许出现在指令中。
Rm &Rmd &Rmq&&& 寄存器名字在摘要语法中是可更换的项,以斜体字形式给出。寄存器的名字表明语法需要单(Rm)、双(Rmd)、四(Rmq)个寄存器。
&Imm#&&&&&&&&&& 摘要语法中的立即数用&Imm#&表示,其中#表示位宽。
摘要为了区分明了,约定了关键字、选项为大写,标号为小写,但实际编程时,DSP并不区分大小写。
例如,摘要中如下指令:
{X|Y|XY}{S|B}Rs = MAX|MIN (Rm, Rn) {({U}{Z})} ;
实际指令可写成如下任何一种形式:
XR3 = MIN (R2, R1) ;
YBR2 = MAX (R1, R0) (UZ);
XYSR2 = MAX (R3, R4) (U);
3指令的组成要素
指令的组成要素包括:
运算符号:& +、-、*、=
关键保留字:如MAX、ABS等操作码,DAB、BR等选项,ALE、JN等条件码
寄存器名:& 如XR3、R3、J5、MR0、PR1
立即数:&&& &Immn&表示n位立即数,可以写成多种制式,如十六进制的0x12ab、十进制的13、二进制的0b111
标号:&&&&& 用户定义的分支地址、子程序名
4 寄存器使用
掌握DSP寄存器的用法是编写汇编程序的关键。按不同分组,访问存储器映射寄存器有两种方式:
l&&&&&&&& 直接写出寄存器名称,如XR0、J12。
l&&&&&&&& 通过映射的地址,作为一个存储器单元被访问。
但寄存器组63―32只能通过IALU单元的寄存器传送指令访问,或者由其他处理器直接访问。其它的指令仅能访问寄存器组31―0。
存储器映射寄存器都属于通用寄存器(Ureg),每个计算块里的存储器映射寄存器是XR31C0和YR31C0。除了保留的Ureg,DSP内核的许多指令都可使用Ureg。计算块的Ureg寄存器可以完成更多的附加操作,而其它的Ureg寄存器不能完成这些附加操作。为区分其它Ureg寄存器,XR31-0和YR31-0寄存器也被称为数据寄存器(Dreg)。计算块中还有一些非存储器映射寄存器。这些寄存器没有与绝对地址相联系,是一些特殊寄存器,专为每个计算块里的特殊指令使用。计算块里的非映射寄存器包括:STAT(计算块状态)、PR4-0(ALU的并行结果;SUM、ABS、VMAX、VMIN指令)、MR3-0(乘法器,定点乘法操作的结果)、MR4(乘法器,定点乘法操作的溢出结果)、BFOTMP(移位器,位FIFO溢出暂存;GETBITS、PUTBITS指令)。
表5-1是寄存器的分组。
表5-1 寄存器分组
寄存器归属
存储器映射组
X、Y计算块
分别带X、Y前缀
ALU、乘法器、移位器的计算
ALU的并行结果
SUM、ABS、VMAX、VMIN指令
乘法器,定点乘法操作的结果
乘法器,定点乘法操作的溢出结果
计算块状态
移位器,位FIFO溢出暂存
GETBITS、PUTBITS指令
地址产生,整数计算,J31又用作JSTAT
JB3-0 JL3-0
地址产生,整数计算,K31又用作KSTAT
KB3-0 KL3-0
CCNTx,WPxCTL,TRCBx
调试、观察、跟踪等
程序控制器
CJMP RETI SFREG IMASK ILAT SQCTL SQSTAT等
调用、返回、静态标志、定时器、中断屏蔽、循环计数、Flag状态,30个
存储器控制寄存器
CACMDx,CCAIRx,CASTATx
存储器控制
DCSx,DCDx,DCx, DCNT
DMA传输控制
SYSCON SYSTAT SDRCON
总线配置、状态、锁定、计数、
SDRAM接口等
LBUFTXx LBURXx
链路发、收
LCTLx LSTATx LSTATCx
链路控制、状态、状态清除
IVLINK0 IVDMA1等
中断向量和中断控制
EMUCTL,EMIUSTAT,EMUDAT等
JTAG端口连接和控制
计算块内的每个数据寄存器是32位的,指令中数据寄存器语法决定了计算块指令的计算块选择、操作数宽度、寄存器宽度、数据格式。其书写格式为:
前缀1 前缀2 前缀3 寄存器R 后缀
以指令 {X|Y|XY} {L|S|B} Rsd = Rmd ± Rnd {({S|SU})} 为例子。
前缀1:{X|Y|XY}表示所用的寄存器在哪个计算块里,用寄存器名前缀X和Y表示:
l&&&&&&&& X表示只在计算块X中
l&&&&&&&& Y表示只在计算块Y中
l&&&&&&&& XY(或没有前缀)表示在两个块中,即单指令多数据(SIMD)模式。
XR0= R1+ R2;;/* 这个指令在X块中运行,使用寄存器XR0,XR1和XR2*/
YR1= R5+ R6;;/* 这个指令在Y块中运行,使用寄存器YR1,YR5和YR6*/
XYR0= R0+ R2;;/*这个指令在X和Y块中运行使用寄存器XR0,XR2,YR0和YR2*/
R0= R22+ R3;;/* 这个指令在X和Y块中运行使用寄存器XR0,XR22,XR3,YR0,YR22和YR3*/
前缀2:{L|S|B}选择定点操作数宽度。定点操作数宽度前缀语法如下。
l&&&&&& B――表示字节(8位)数据。在单个32位寄存器中的数据被当作四个8位。例如用字节字操作数的寄存器名BR1,BR1:0和BR3:0。
l&&&&&& S――表示短字(16位)数据。在单个32位寄存器中的数据被当作两个16位。例如用短字操作数的寄存器名SR1,SR1:0和SR3:0。
l&&&&&& 无――表示标准字(32位)数据。例如用标准字操作数的寄存器名R0,R1:0和R3:0。
l&&&&&& L――表示长字(64位)数据。例如用长字操作数的寄存器名LR1:0。
B,S和L选项适用于ALU和移位器的操作。乘法器操作数宽度选择稍微有些不同。
值得注意的是,操作数宽度将影响指令执行。例如,SRsd=Rmd+R;这是四个短字数据加操作,存储在两个寄存器对中。
前缀3:F区别定点和浮点数据,前缀F表示寄存器包含浮点数据。
l&&&&&&&& 无――表示定点数据。
l&&&&&&&& FRs,FRm 或FRn,在单个寄存器中的浮点数据表示标准字(IEEE格式,32位)数据。例如一个标准字浮点操作数的寄存器名是FR3 。
l&&&&&&&& FRsd,FRmd 或FRnd,在双寄存器中的浮点数据,表示扩展精度(40位)数据。例如一个扩展精度浮点操作数的寄存器名是FR1:0。
后缀指定寄存器宽度,它利用寄存器组合,支持比32位字更宽的数据宽度。语法规则如下:
l&&&&&&&& Rs,Rm或Rn表示包含一个32位(或更少位数)的单寄存器。
例如,寄存器名R1,XR2,等等。
l&&&&&&&& Rsd,Rmd或Rnd表示包含一个64位(或更少位数)的双寄存器。
例如,寄存器名R1:0,XR3:2,等等。低位的寄存器序号必须能被2整除。
l&&&&&&&& Rsq,Rmq或Rnq表示包含一个128位(或更少位数)的四寄存器。
例如,寄存器名R3:0,XR7:4 等等。最低位的寄存器序号必须能被4整除
单、双和四寄存器(Rs,Rsd,Rsq )保存着指令的操作数(输入和输出)。根据操作数宽度和定点或浮点格式,一个寄存器里可放置多个操作数。
XR1:0= R3:2+ R1:0;; 指令执行了64位的操作,是在两对32位操作数上分别运算。
SR1:0= R31:30+ R25:24;;指令执行了64位的操作,但却是在4对16位操作数上分别运算。3.2& 指令集 3.2.1 ALU 指令
下面以加法指令和最值指令简单介绍一下ALU定点运算指令,其余的指令可以查看后面的指令表3.1。
{X|Y|XY}& {S|B}Rs &= Rm &± Rn &{({S|SU})} ;
{X|Y|XY}{L|S|B}Rsd = Rmd ± Rnd {({S|SU})} ;
寄存器Rm 加/减Rn,结果存入Rs 寄存器。
AZ&&&&& 结果全零,置1
AN& &&& 等于结果的最高有效位
AV&&&&& 有符号数溢出状态
AC&&&&& 进位,置1;表示无符号数的溢出状态(减法取反)
( ) &&&&饱和模式关闭
(S) &&&&有符号数的饱和模式
(SU) &&&无符号数的饱和模式
YBR9 = R2 + R8 (S);; &如图 3.1
YSR2 = R1 - R0 (SU);; 如图 3.2
&&&&& 图3.1 计算块Y中四字节、单&&&& 图3.2 计算块Y中双短字、单寄存&&&
&&&&&&&&& 寄存器、有符号饱和加法&&&&&&&&&& 器、无符号饱和减法
& XR2 = R1 + R0;;/*一个32位定点数的加法操作;DSP将XR1加XR0的结果放置在XR2中。 */
YLR1:0= ABS(R3:2-R5:4);;/*一个64位定点数减法操作,DSP把XR3:2减XR5:4的结果的绝对值放置在XR1:0中,在结果寄存器名中的“L”告诉DSP所处理输入和输出数据为64位长字。*/
XYFR2=(R1+R0)/2;;/*一个32位浮点输入操作数XR1+XR0和YR1+YR0加法,然后再除以2;DSP把结果放置在XR2和YR2中;这是一个单指令多数据(SIMD)操作,它在两个计算块里同时运行。*/
当单寄存器中放置多个输入操作数的时候,DSP并行处理数据。例如, 假设 YR0寄存器中存放0x,YR1寄存器中存放0x(如图3.3所示)。在运行YSR2=R0 - R1;;指令后,YR2寄存器包含0x0001FFFB(0x1在高16位中,-0x5在低16位中)。
图 3.3. 输入操作数为并行减法
最大值/最小值
{X|Y|XY}& {S|B}Rs &= MAX|MIN (Rm, &Rn ) {({U}{Z})} ;
{X|Y|XY}{L|S|B}Rsd = MAX|MIN (Rmd, Rnd) {({U}{Z})} ;
返回寄存器Rm和寄存器Rn两者中最大(较大)或最小(较小)的数,结果存入寄存器Rs。按照数据宽度,以字节-字节,短字-短字,或字-字完成比较。每次比较的最大值或最小值传入结果寄存器中相应的字节/短字/字。
若指令中含有(Z)选项:求最大值时,如果Rm&=Rn,结果寄存器Rs =Rm,否则Rs=0;求最小值时,如果Rm&=Rn,结果寄存器Rs=Rm,否则Rs=0。
AZ&&&&&&&&&& 全零,置1
AN &&&&&&&& &等于结果的最高有效位
AV (AOS)&& &&清0(无变化)
AC&&&&&&&&&& 清0 &&&&&
( )&&&& &&&&&有符号数
(U) &&&&&&&&&无符号数
(Z) &&&&&&&&&有符号零选项
(UZ)&&& &&&&&无符号零选项
SR9:8=MAX(R3:2,R1:0);; 如图 3.4
SR9:8=MIN(R3:2,R1:0)(Z);; 如图 3.5
图3.4 &&&&&&&&&&&&&&&&&&&&&&&&& 图3.5
表3.1 ALU定点运算指令表
状态相关联标志
AZ AN AV AC
AUS AVS AOS AIS
{X|Y|XY}& {S|B}Rs &=
Rm &± Rn &{({S|SU})} ;
{X|Y|XY}{L|S|B}Rsd = Rmd ± Rnd {({S|SU})} ;
*& *& *& *&
―&& ―&& +& ―
寄存器Rm 加/减Rn,结果存入Rs 寄存器。
加减法带进位
{X|Y|XY}Rs=Rm + CI{-1} ;
{X|Y|XY}LRsd=
Rmd + CI{-1};
{X|Y|XY}{S|B}Rs=Rm±Rn
+CI{-1}{({S|SU})} ;
{X|Y|XY}{L|S|B}Rsd=Rmd±Rnd+CI{-1}{({S|SU})};
*& *& *& *&
&―& ― &&+& ―
寄存器Rm 带进位加或带借位减Rn。可以不含寄存器Rn。进位位(CI)由X/YSTAT中AC标志表示。结果存储在Rs 寄存器。
{X|Y|XY}{S|B}Rs=
(Rm±Rn )/2 {({T}{U})} ;
{X|Y|XY}{L|S|B}Rsd= (Rmd±Rnd)/2 ({T}{U})} ;
*& *& *& 0&
&―& ―&& ―& ―
寄存器Rm 、寄存器Rn 的和或差,再除以2。因为加法进位结果右移,所以不产生溢出。结果向最近舍入或截断。一旦无符号数操作出现负的结果,那么结果将为零,并且溢出标志位置1。
{X|Y|XY}{S|B}Rs=ABS R
{X|Y|XY}{L|S|B}Rsd =
*& #& #& 0
&―& ―&& #&& ―&
求Rm的绝对值,存放在Rs中
和或差的绝对值
{X|Y|XY}{S|B}Rs &= ABS (Rm &+ Rn ){(X)} ;
{X|Y|XY}{L|S|B}Rsd = ABS (Rmd + Rnd) {(X)} ;
{X|Y|XY}{S|B}Rs &= ABS (Rm &- Rn ) {({X}{U})} ;
{X|Y|XY}{L|S|B}Rsd = ABS (Rmd - Rnd) {({X}{U})}
*& #& *& 0
―& ―&& *&& ―
求寄存器Rm和寄存器Rn 的和或差,然后将和或差的绝对值存放在寄存器Rs。
{X|Y|XY}{S|B}Rs = - R
{X|Y|XY}{L|S|B}Rsd =
*& *& *& 0&&&&
&―& ―& *& ―
该指令求寄存器Rm 的2的补码,将结果存入寄存器Rs。如果输入是指定格式可表示的最小负数,那么结果就是最大正数。
最大/最小值
{X|Y|XY}{S|B}Rs= MAX|MIN(Rm,Rn &&&&&&) {({U}{Z})} ;
{X|Y|XY}{L|S|B}Rsd=
MAX|MIN(Rmd,Rnd&&&& ) {({U}{Z})} ;
*& *& 0& 0
―& ―& ―& ―
返回寄存器Rm 和寄存器Rn 两者中最大(较大)或最小(较小)的数,结果存入寄存器 Rs。按照数据宽度,以字节-字节,短字-短字,或字-字完成比较。每次比较的最大值或最小值传入结果寄存器中相应的字节/短字/字。
若指令中含有(Z)选项:求最大值时,如果Rm&=Rn,结果寄存器Rs =Rm,否则Rs=0;求最小值时,如果Rm&=Rn,结果寄存器Rs=Rm,否则Rs=0。
维特比最大/最小值
{X|Y|XY}S|BRsd= VMAX|VMIN(Rm, Rnd ) ;
*& *& 0& 0
&―& ―& ―& ―
返回寄存器Rm 和寄存器Rn 的维特比最大(较大)数或维特比最小(较小)数。结果存入寄存器 Rs。按照数据宽度,以字节-字节或短字-短字完成比较。每次比较的最大值传入结果寄存器中相应的字节/短字。在选择位标志放入PR1:0高4或8位之前,将PR1:0的原有内容右移相同的位数。
{X|Y|XY}{S|B}Rs =
INC|DEC Rm {({S|SU})} ;
{X|Y|XY}{L|S|B}Rsd= INC|DEC Rmd {({S|SU})} ;
*& *& *& *&
&―& ― &&+& ―
将寄存器Rm 加1或减1。结果存入寄存器Rs。
{X|Y|XY}{S|B}
COMP(Rm, Rn ) {(U)} ;
{X|Y|XY}{L|S|B}
COMP(Rnd,Rnd) {(U)} ;
*& *& 0& 0
&―&& ―& ―& ―
比较寄存器Rm 和寄存器Rn 的数。如果两数相等,AZ置1;如果寄存器Rm 小于寄存器Rn,AN置1;按照数据宽度,以字节-字节,短字-短字或字-字进行比较。注意,所有计算块指令,在多数据元素操作时,例如,指令BCOMP (Rm, Rn);,标志由各自结果标志值的逻辑或(OR)确定。
{X|Y|XY}{S|B}Rs &=
CLIP Rm &BY R
{X|Y|XY}{L|S|B}Rsd= CLIP Rmd BY R
*& *& 0& 0
&―&& ―& ―& ―
如果Rm 的绝对值小于Rn 的绝对值,这条指令将返回寄存器Rm 中的有符号数。否则,如果Rm 是正的,返回|Rn|,如果Rm是负的,返回-|Rn|。结果存入寄存器Rs。
{X|Y|XY}Rs = SUM S|B Rm &{(U)} ;
{X|Y|XY}Rs = SUM S|B Rmd {(U)} ;
*& *& 0& 0
&―&& ―& ―& ―
寄存器Rm 中的字节/短字相加,结果存入Rs。如果字节/短字是有符号的,在相加之前对它们作符号扩展。结果总是右对齐的&―例如,二进制小数点总是在结果最低有效位的右侧。
{X|Y|XY}Rs
=ONES Rm|R
*& 0& 0& 0
&―&& ―& ―& ―
统计寄存器Rm 中1的个数。结果存入寄存器Rs。
位FIFO增量
{X|Y|XY}Rs = BFOINC R
*& *& 0& 0
&―&& ―& ―& ―
将双寄存器Rmd 每个操作数的最低(LSB)7位相加,并将它们除以64,得到的余数返送给Rs的最低6位。
并行差的绝对值求和
{X|Y|XY}PR0|PR1 += ABS (SRmd - SRnd){(U)} ;
{X|Y|XY}PR0|PR1 += ABS (BRmd - BRnd){(U)} ;
*& *& *& 0
&―&& ―& *&& ―&&
寄存器对Rnd 中的字节/短字减去寄存器对Rmd 中的字节/短字,将结果以短字/字节方式取绝对值;将这些正的结果横向求和并与PR寄存器的单值相加。最后结果存PR寄存器。饱和模式总是有效。
{X|Y|XY}PR0|PR1+= SUM SRm &{(U)} ;
{X|Y|XY}PR0|PR1+= SUM SRmd {(U)} ;
{X|Y|XY}PR0|PR1+= SUM BRm &{(U)} ;
{X|Y|XY}PR0|PR1+= SUM BRmd {(U)} ;
*& *& *& 0
&―&& ―& *&& ―&&
以短字方式或字节方式将Rm 内容相加,再把这个值加到PR寄存器。如果字节/短字是有符号的,在相加之前把它们符号扩展。最后结果存PR寄存器。PR的寄存器可以是有符号或无符号的。以饱和模式与PR相加。
相加相减双操作
{X|Y|XY}{S|B}Rs& =
Rm + Rn,Ra = Rm - R
{X|Y|XY}{L|S|B}Rsd= Rmd + Rnd,Rad = Rmd - R
*& *& *& 0
&―&& ―& *&& ―&&
同时执行寄存器Rm 和Rn 的加和减。结果存入寄存器Rs和Ra。饱和模式总是有效,且结果是有符号数。
{X|Y|XY} Rs = PASS R
{X|Y|XY}LRsd
*& *& 0& 0
&―&& ―&& 0& 0
通过ALU将寄存器Rm 的数传给寄存器Rs。
与/与非/或/异或/非
{X|Y|XY} Rs =Rm AND | AND NOT | OR| XOR& R
{X|Y|XY}LRsd =Rmd AND|AND NOT|OR|XOR R
{X|Y|XY} Rs &= NOT R
{X|Y|XY}LRsd = NOT R
*& *& 0& 0
&―&& ―& ―&& ―&&
完成寄存器Rm 和Rn 的逻辑“与”、“与非”、“或”、“异或”功能。“非”指令求Rm 寄存器的逻辑“补”。
{X|Y|XY}Rsd = EXPAND SRm &{± SRn } {({I|IU})} ;
{X|Y|XY}Rsq = EXPAND SRmd {± SRnd} {({I|IU})} ;
{X|Y|XY}Rsd = EXPAND BRm {± BRn } {({I|IU})} ;
{X|Y|XY}Rsq = EXPAND BRmd{± BRnd} {({I|IU})} ;
*& *& 0& 0
&―&& ―& ―&& ―&&
Rm 和Rn 寄存器相加或相减,然后将结果扩展,将8位扩展到16位或将16位扩展到32位的值。Rn操作数可以省略,仅扩展Rm。如果是小数格式,在结果末尾添0。如果是整数,在结果前添0(或1―如果对有符号整数作符号扩展)。结果存入定点寄存器Rs。
{X|Y|XY}SRs =
COMPACT Rmd {±Rnd} {({T|I|IS|ISU})} ;
{X|Y|XY}BRs
= COMPACT SRmd {± SRnd} {({T|I|IS|ISU})} ;
*& *& *& 0
―&& ― &&*& &―&&
寄存器Rmd 加或减寄存器Rnd,把结果压缩为低精度的数据类型,存储到目标寄存器Rs。Rnd 操作数可以省略,仅压缩Rmd。既可以将两个标准字压缩为两个短字,也可以将四个短字压缩为四个字节。小数压缩将结果的高半部分传入目的寄存器。整数压缩将结果的低半部分传入目的寄存器。
{X|Y|XY}BRsd =
MERGE Rm, R
{X|Y|XY}BRsq =
MERGE Rmd,R
{X|Y|XY}SRsd =
MERGE Rm, R
{X|Y|XY}SRsq =

我要回帖

更多关于 先行进位加法器 的文章

 

随机推荐