sparc V8嵌入式体系结构_第1页
sparc V8嵌入式体系结构_第2页
sparc V8嵌入式体系结构_第3页
sparc V8嵌入式体系结构_第4页
sparc V8嵌入式体系结构_第5页
已阅读5页,还剩138页未读 继续免费阅读

下载本文档

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

文档简介

第8讲基于sparcV8嵌入式体系结构S698处理器11.简述S698_ECR是高性能的、SPARCV8架构的、32-bitRISC嵌入式微处理器。S698_ECR内部采用AMBA总线,内嵌32-bit整型数处理单元(包括4K字节的指令cache和4K字节的数据cache),优化的32/64-bit浮点数处理单元,具有较强的运算能力;并且内嵌了大量的外设。22.特点基于AMBA总线的可裁减结构:

S698_ECR内部的AMBA总线包括2种总线:AHB和APB。APB总线用来访问片内外设的寄存器;AHB总线用作高速数据传输。32.特点高性能的处理器内核(带有4K字节的指令cache和4K字节的数据cache)

32-bit整型数处理单元

RISC结构硬件乘法器和除法器

5级流水优化的32/64-bit浮点数处理单元,符合IEEE-754标准42.特点片内外设集成调试支持单元(DSU:DebugSupportUnit)和数据通讯链路(DCL:DataCommunicationLink)集成64K字节的RAM,带有后备电源;先进的多时钟机制和时钟倍频机制;orion

开发环境5

3.芯片结构的功能框图

64.芯片描述(IU)S698_ECR整型数处理单元(IU)支持SPARCV8指令集。IU包括一些通用目的寄存器,控制处理器的全部工作。IU的主要功能是执行整数运算、计算要访问的存储器的地址;另外,它也支持指令计数器,和控制FPU指令的执行。在特定的时间内,一条指令可以访问136个r寄存器中的8个globals寄存器和一个寄存器窗口。74.芯片描述(IU)寄存器窗口是一个24-寄存器组,它包括一个由8个“in”寄存器和8个“local”寄存器组成的16-寄存器组,和与它相邻的16-寄存器组中的8个“in”寄存器(被当前寄存器窗口设定为自己的“out”寄存器)。当前的寄存器窗口在“处理器状态寄存器(PSR)”中的“currentwindowpointer(CWP)”区设定。寄存器窗口上溢和下溢由“Windowinvalidmask(WIM)register”监控,“Windowinvalidmask(WIM)register”由管理软件控制。寄存器窗口实际的数目对用户应用程序是透明的。84.芯片描述(IU)当IU访问存储器时,会在访问地址后面加一个“地址空间标志符”(ASI),ASI表示处理器是处于管理模式还是用户模式;访问操作是访问指令存储器还是数据存储器。94.芯片描述(IU)IU具有以下特点:5级单一指令流水;独立的指令cache和数据cache;标准的8个寄存器窗口;硬件乘法器;硬件基于2的除法器。104.芯片描述(IU)S698_ECR的IU采用5级单一指令流水:FE(取指令)DE(译码)EX(指令执行)ME(存储):在此阶段数据缓冲区被访问。相应地址的数据在此阶段末要有效,在上一阶段(EX)中被读取的数据会被从新写入数据缓冲区。WR(回写)114.芯片描述(IU)指令时序:S698_ECR的指令按照功能分为6类:存储器存取指令、算术运算/逻辑运算/移位指令、跳转控制指令、读/写寄存器指令、浮点运算指令和其它指令。124.芯片描述(IU)存储器存取指令存储器存取指令是唯一用来访问存储器的指令。存储器存取指令用2个‘r’寄存器或者1个‘r’寄存器和1个13-bit的无符号立即数计算出1个32-bit、按字节排列的存储器地址,IU再在该地址后面加上“地址空间标志符(ASI)”以决定处理器是处于管理模式还是用户模式,是访问指令存储器还是数据存储器。134.芯片描述(IU)存储器存取指令存储器存取指令的目标域指定是一个r寄存器,f寄存器,或者是协处理器寄存器(此寄存器提供存储的数据或取得要载入的数据)。144.芯片描述(IU)整数存取指令支持字节方式(8-bit)、半字方式(16-bit)、字方式(32-bit)和双字方式(64-bit)。整数存取指令包括一些整数取数指令,用来从内存中取得8位或16位的单精度数并放入目的寄存器中。浮点和协处理器存取指令支持字方式和双字方式。154.芯片描述(IU)S698对半字的大于一个字节类型的数据采用高地址优先存储的方式。164.芯片描述(IU)算术运算/逻辑运算/移位指令

算术运算/逻辑运算/移位指令提供了算术运算、逻辑运算和移位操作。这些指令除“SETHI”指令之外,都包括2个操作码,并由这2个操作码运算产生一个结果,这个结果或者放入目的寄存器中,或者丢弃。“SETHI”指令是一条专门的指令,用来和它后面的指令一起创建一个32位的常数并放入r寄存器中。174.芯片描述(IU)算术运算/逻辑运算/移位指令整数乘法指令提供有符号或无符号的32×32→64-bit操作。整数除法指令提供有符号或无符号的64÷32→32-bit操作。整数乘法指令和整数除法指令的结果会影响“PSR”的相应位。被‘0’整除会产生一个“trap”。184.芯片描述(IU)读/写状态寄存器指令读/写寄存器指令用来读/写用户可见的状态寄存器,也可读/写辅助状态寄存器。194.芯片描述(IU)浮点运算指令浮点运算指令用来完成所有的浮点运算。浮点运算指令是寄存器到寄存器的指令,浮点运算操作利用浮点寄存器进行。象算术运算指令/逻辑运算指令和移位指令一样,浮点运算指令有1或2个源操作数,并得出一个结果。20

5.CacheS698_ECR是“Harvard”结构(指令和数据分开),地址总线和数据总线分开,分别连接到独立的“cache”控制器上,除地址之外,SPARC处理器还生成一个8-bit的“地址空间标志符”(ASI),可区分256个独立的32位地址空间。在正常工作时,按照SPARC标准定义,S698_ECR处理器在访问指令和数据时使用ASI0x8-0xB。216.FPUS698_ECR的FPU提供遵循SPARCV8标准的全部浮点指令,其浮点数据的格式和浮点指令遵循ANSI/IEEE754-1985标准。FPU连接在IU上。FPU有32个32-bit的浮点“f”寄存器.。S698_ECR使用标准的LD/ST指令在FPU和存储器之间移动数据。存储器地址由IU计算,浮点操作指令完成浮点算术运算。227.AMBA总线S698_ECR内部的AMBA总线包括2种总线:AHB和APB。APB总线用来访问片内外设的寄存器;AHB总线用作高速数据传输。237.AMBA总线

AHB总线

S698_ECR用AMBA-2.0AHB总线连接处理器cache控制器和其它的高速单元,IU是总线上唯一的主控单元。另外,还有其它从属单元连接在总线上:存储器控制器、AHB/APB转换桥。247.AMBA总线

APB总线

AHB/APB转换桥作为一个从属设备连接在AHB总线上,是APB总线唯一的主控单元。处理器通过AHB/APB桥访问大部分片内外设。片内外设包括:GPI口(80位)

4路UART4个定时器24位看门狗中断控制器PS/2

I2C

SPI

3个智能卡控制器

1个磁卡控制器258.寄存器描述“寄存器窗口”这一概念是由UCBerkeley针对提高编译器效率以及大量减少存储器load/store指令而首先提出的。它将工作寄存器组成若干个窗口,建立起环形结构,利用重叠寄存器窗口技术来加快程序的运转。我们可以把窗口看作是一个用于传递参数以及存储局部数据和返回地址的cache。利用寄存器窗口的重叠和当前窗口的指针改变可以实现过程调用/返回时传递参数和结果的功能。268.寄存器描述:IU寄存器

IU通用目的寄存器(rregisters)S698_ECR的整型数处理单元包含136个32-bit的通用目的寄存器(r寄存器)。这些通用目的寄存器被分成8个global寄存器、8个16-寄存器组(也称作寄存器窗口)。一个16-寄存器组又更进一步的分成8个in寄存器和8个local寄存器.278.寄存器描述:IU寄存器IU通用目的寄存器(rregisters)

WindowAddressing288寄存器描述:IU寄存器寄存器窗口(rRegisters)

在特定的时间内,一条指令可以访问136个r寄存器中的8个globals寄存器和一个寄存器窗口。其中,寄存器窗口是一个24-寄存器组,它包括一个由8个“in”寄存器和8个“local”寄存器组成的16-寄存器组,和与它相邻的16-寄存器组中的8个“in”寄存器(被当前寄存器窗口设定为自己的“out”寄存器).298.寄存器描述:IU寄存器当前的寄存器窗口在“处理器状态寄存器(PSR)”中一个5-bit的“currentwindowpointer(CWP)”区设定,当执行“RESTORE(或RETT)”指令时,CWP加1;当执行“SAVE”指令或产生一个trap时,CWP的值减1。寄存器窗口上溢和下溢由“Windowinvalidmask(WIM)register”监控。308.寄存器描述:IU寄存器寄存器窗口的重叠每个寄存器窗口都和与之相邻的2个寄存器窗口共享ins寄存器和outs寄存器。CWP+1寄存器窗口的outs寄存器被设定为当前寄存器窗口的ins寄存器;当前寄存器窗口的outs寄存器则被设定为CWP-1寄存器窗口的ins寄存器。Locals寄存器对于每个寄存器窗口来说都是唯一的。318.寄存器描述:IU寄存器寄存器窗口的重叠

一个地址设定为“o”的“r”寄存器(其中8≤o≤15),和(CWP-1)下地址为“(o+16)”的寄存器,被认为是同一个寄存器。(moduloNWINDOWS);同样的,一个地址设定为“i”的“r”寄存器(24≤I≤31),和(CWP+1)下地址为“(i-16)”的寄存器,被认为是同一个寄存器328.寄存器描述:IU寄存器寄存器窗口的重叠

S698_ECR包含8个寄存器窗口。编号最高的寄存器窗口(编号为7)与编号最低的寄存器窗口(编号为0)交迭在一起,即寄存器窗口7的ins寄存器与寄存器窗口0的outs寄存器是同一个寄存器。338.寄存器描述:IU寄存器34

9.IU控制/状态寄存器

32位的IU控制/状态寄存器包括:处理器状态寄存器(PSR)、WindowInvalidMask寄存器(WIM)、TrapBase寄存器(TBR)、multiply/divide(Y)寄存器、programcounters(PCandnPC)、4个辅助状态寄存器(ASRs)。359.IU控制/状态寄存器处理器状态寄存器(ProcessorStateRegister)PSR

32位的PSR包含若干个域,这些域控制处理器的操作或保存状态信息。他们可以被

SAVE,RESTORE,Ticc,或RETT指令修改,特权指令RDPSR和WRPSR直接读写PSR寄存器。369.1处理器状态寄存器(ProcessorStateRegister)PSR

PSR_implementation(impl)域这四位为只读位,用来在硬件上确定,分类硬件体系架构的实现。

PSR_version(ver)域这四位也为只读位,标记S698的版本号。

PSR_integer_cond_codes(icc)域这四位标记IU的状态,他们可被以字母串cc结尾的算术逻辑指令或是WRPSR指令修改。Bicc和Ticc

指令可以引起基于此域的控制转移。此域的格式定义如下:3710.1处理器状态寄存器(ProcessorStateRegister)PSRPSR_negative(n)域:此位指示ALU的运算结果是否要被忽略。1=忽略,0=不忽略。PSR_zero(z)域:对于ALU的最后一条修改了icc

域的指令,此位指示是否ALU的运算结果为0。1=为零,0=不为零。PSR_overflow(v)域:对于ALU的最后一条修改了icc

域指令,此位指示ALU的结果是否在32位能表示的范围内。1=溢出;0=无溢出。PSR_carry(c)域:对于ALU的最后一条修改了icc

域的指令,此位指示是否指令的运算的最后一位有借位或是进位。1=有,0=没有。389.1处理器状态寄存器(ProcessorStateRegister)PSRPSR_reserved(r)域:此六位是保留位。如果被RDPSR指令读,则返回0。为了以后扩展兼容性,管理软件可以通过WRPSR向此域写入0。PSR_enable_coprocessor(EC)域:此位决定协处理器是否被激活。如果没被激活则会有一个与协处理器相关的Trap。1=支持,0=不支持。如果硬件没实现协处理器,则此位始终为0,这时对此位的写被忽略。PSR_enable_floating-point(EF)域:此位决定FPU是否被激活。如果没被激活则会有一个与FPU相关的Trap。1=支持,0=不支持。如果硬件没实现FPU,则此位始终为0,这时对此位的写被忽略。399.1处理器状态寄存器(ProcessorStateRegister)PSRPSR_proc_interrupt_level(PIL)域:此域指示CPU要接受中断的级别。PSR_supervior(S)域:此为指示CPU是处于管理状态还是用户状态。1=管理状态,0=用户状态。PSR__previous_supervior

(PS)域:此位保存当前Trap所处的状态值。1=管理状态,0=用户状态。PSR_enable_traps(ET)域:此位指示是否允许有Trap,如果当前有Trap,则此Trap会自动将此位置为0。0=忽略Trap,这时若有中断请求则会被忽略,而且一个异常的Trap会使IU执行挂起(halt)操作(此操作又触发重启Trap)。1=允许Trap。PSR_current_window_pointer(CWP)域:此五位为当前寄存器窗口指针。当发生Trap时或SAVE指令硬件会使CWP减少;RESTORE或RETT指令会CWP增加。409.2WindowInvalidMaskRegister(WIM)窗口掩码寄存器:

WIM由管理软件控制,被硬件使用来查看是否SAVE,RESTORE或RETT指令会引起窗口上溢(overflow)或下溢(underflow)Trap。

WIM[n]关联n对应的窗口。当SAVE,RESTORE或RETT指令执行,当前CWP会和WIM比较,如果要转到的是一个非法窗口,(即相应的WIM位被置为1),则会转入相应的窗口上溢(overflow)或下溢(underflow)Trap。

WIM可被特权指令RDWIM读取,被WRWIM指令写入.419.3TrapBaseRegister(TBR)寄存器

此寄存器有三个域,每个域中都存放trap发生时要转向的地址。TBR_trap_base_address(TBA)域:这20位存放trap地址表的高20位地址。这些位被管理软件维护,可以被WRTBR指令写入。TBR_trap_type(tt)域:这8位存放trap的类型编码。当发生trap时,这8位被硬件写入,且一直保持此值到下一个trap到来。WRTBR指令对此域没有影响。TBR_zero(0)域:这四位全为0,不受WRTBR指令的影响。这四位留作以后扩展软件使用WRTBR时应向这四位写0。429.4Multiply/DivideRegister(Y)域

这32位保存整数乘法的结果,相应的乘法指令包括SMUL,SMULcc,UMUL,UMULcc

乘法指令或是含有MULScc

指令的例程。这32位也可保存SDIV,SDIVcc,UDIV,UDIVcc

等除法指令的双精度数。此寄存器可以被RDY,WRY指令读或写。439.5ProgramCounters(PC,nPC)域

PC寄存器存放当前IU运行的指令的地址,nPC

寄存器存放下一个要运行的指令的地址(特指没发生的trap)。

PC被CALL和JMPL指令读取。在一个trap中,PC和nPC

被写入到两个local寄存器中。449.6AncillaryStateRegister(ASR)-watchpointregistersS698使用四对ASR寄存器(%asr24/25,%asr26/27,%asr28/30,%asr30/31)实现了四个监视点。由WADDR域定义的地址范围都可以被监视,这个地址范围也可被WMASK域掩码(WMASK[x]=1)激活匹配。在一个监视点上,trap0x0B会被生成。通过设定IF,DL和DS位监视hit可以在取指,数据存储读写的时候发生。将此三位清0会有效的禁止此项功能。459.7FPU寄存器在S698中,FPU(浮点运算单元)有32个32位的f寄存器(float-point)且被f[0]-f[31]来标记。不像窗口化的r寄存器,在给定的时间内指令可以访问任意的f寄存器。f寄存器可以被处理整数的指令或浮点数的指令(Fpop1/Fpop2格式)访问。469.7FPU寄存器双精度和四精度操作数

一个单精度的f寄存器内可存储一个单精度的操作数;双精度操作数需要一个编号分别位奇数和偶数的f寄存器对;四精度操作数需要一个含4个f寄存器的寄存器组。这样,在某一给定时间这些f寄存器可以保存最多32个单精度数,或16个双精度数,或8个四精度数。要使用访问双精度的浮点数的指令得保证双精度的对齐规则:双精度寄存器地址的最低位要为0或被软件置为0;相似的,四精度寄存器地址的最低两位要为0或被软件置为0。479.7FPU寄存器推荐:若访问了不符合对齐规则的f寄存器,需要产生trap(FSR.ftt=6)。

489.8浮点控制/状态寄存器32位的FPU控制/状态寄存器组包含FSR(Float-pointStateRegister即浮点状态寄存器),其内含有FPU的状态信息,和一个可选的,独立实现的浮点延迟Trap队列(FQ)499.8Float-PointStateRegister(FSR)即浮点状态寄存器Float-PointStateRegister(FSR)即浮点状态寄存器其内含有状态和模式信息,此寄存器被STFSR指令读,LDFSR指令写。FSR_rounding_direction(RD)域:

此域选择浮点结果的逼近方向(roundingdirection)。509.8Float-PointStateRegister(FSR)即浮点状态寄存器FSR_unused(u)域:第29,28,12位(从0数)不被使用而留作将来兼容扩展,软件应该只使用指令LDFAR对这些位写入0值。FSR_trap_enable_mask(TEM)域:此域有5位,用来允许5类浮点处理异常。当发生某类的异常时,此寄存器的cexc

域会指示发生的异常,如果TEM域的相应位又为1,则会产生fp_exception

的trap;反之若置为0就会屏蔽,使之不会产生trap。519.8Float-PointStateRegister(FSR)即浮点状态寄存器FSR_nonstandard_fp(NS)域此位为S698的保留位。FSR_version(ver)域这三位保存S698的实现版本信息。529.8Float-PointStateRegister(FSR)即浮点状态寄存器FSR_floating-point_trap_type(ftt)域:此域保存浮点处理异常的类型。当一个浮点处理的异常产生之后,ftt

域保存异常的类型直到STFSR或Fpop

被执行,ftt

域可以被STFSR指令读,LDFSR指令对此域没有影响。若由管理模式的软件处理浮点Trap,则其必须执行一个STFSR去确定浮点Trap的类型。STFSR是否会将ftt

域清0,由芯片设计时决定。如果STFSR不会将此域清0,则处理Trap的管理软件要保证在用户态时,后来执行STFSR域会返回ftt

域的值为0。注意:尽管在返回用户态前执行了一个不会产生trap的FPop(此指令能将ftt

清0如fmovs

%f0,%f0),因为LDFSR指令不会改变ftt

域则其不可用来处理ftt

域。ftt

域在下一条FPop

指令执行前都是有效的。

539.8Float-PointStateRegister(FSR)即浮点状态寄存器此域对浮点Trap类型的编码如下:549.8Float-PointStateRegister(FSR)即浮点状态寄存器

在正常的运算过程中不希望出现硬件错误或是sequence_error,它们在用户应用程序中都是不可恢复的。相反,IEEE_745异常、不完整的FPop

和未实现的FPop

错误偶尔会希望出现在正常的运算处理中。且可用管理软件恢复。当浮点类型的trap发生时,会有:

1)aexc

域的值不被改变。

2)cexc

域也不会改变,除了发生IEEE_745异常时的相应位被置位。不完整的FPop、未被实现的FPop

或是sequence_error

不会影响此域。

3)源f寄存器不会改变。(一般通过不改变目标f寄存器来实现)

4)fcc

域不会改变。如果不完整的FPop

或未实现的FPop

不产生IEEE的Trap,则处理恢复的软件得定义cexc,aexc或目标r寄存器,fcc。559.8Float-PointStateRegister(FSR)即浮点状态寄存器ftt=IEEE_745_exception时IEEE_745浮点异常由ANSI/IEEE标准定义。此类型在cexc

域标记。注意:aexc,fcc,和目标f寄存器不受IEEE_745异常trap的影响。ftt=unfinished_FPop

时这种情况指示FPU不能产生IEEE定义的结果或异常。这样cexc

域就不会被改变。ftt=unimplemented_FPop

时这时说明FPU的一个FPop

没有被实现。569.8Float-PointStateRegister(FSR)即浮点状态寄存器ftt=sequence_error

时sequence_error

指示三种FPU非正常错误条件中的一种,它们由管理软件的错误操作引起:

1)执行一个没有“浮点延迟trap队列”(FQ)的STDFQ指令。

2)执行一个FPU不能接受的指令。这种类型的队列错误源于管理软件的逻辑错误(这种逻辑错误已经产生了一个浮点Trap),如前一个浮点trap执行完后浮点队列没有被清空。

3)当FSR.qne=0,即FQ为空时,执行STDFQ指令。(推荐产生队列错误,但这里不需要)ftt=hardware_error

时此错误表明FPU监测到一个灾难性的内部错误(如非法状态或f寄存器的奇偶错误)。如果执行用户程序时发生这样的错误,就不可能恢复到正确的状态继续执行。ftt=invalid_fp_register

时一个invalid_fp_register

的trap类型表明FPop

的操作数“没有对齐”(如双精度寄存器的地址或四精度寄存器地址非法)。推荐芯片设计时在这种情况下(FSR.ftt=invalid_fp_register)产生fp_exception

的trap。579.8Float-PointStateRegister(FSR)即浮点状态寄存器FSR_FQ_not_empty(qne)域:延迟的fp_exception

类的trap之后或执行完双精度浮点队列存储指令(STDFQ)之后,此位指示是否FQ为空。qne=0时FQ为空;qne=1时FQ为非空。此位可被STFSR指令读,且不受LDFSR指令的影响。然而,执行一段STDFQ指令会使FQ变空(qne=0)。如果设计芯片时没有实现FQ,读此位会返回0。管理软件必须要维护此位使得在用户态读此位时总返回0。589.8Float-PointStateRegister(FSR)即浮点状态寄存器FSR_fp_condition_codes(fcc)域:这两位包含FPU的环境信息。这两位被浮点比较指令(FCMP和FCMPE)更新;被STFSR指令读;被LDFSR指令写。FBfcc

根据此域跳转。上表中frs1和frs2与指令的rs1和rs2域指定的f寄存器中的值有关。表中的问号指示无序的关系,如果frs1或frs2是signalingNaN

或quiteNaN,问号就表示true。注意:当FCMP或FCMPE产生IEEE_754_exception的trap时,fcc

就不会被改变。599.8Float-PointStateRegister(FSR)即浮点状态寄存器FSR_accrued_exception(aexc)域:当fp_exception

的trap被屏蔽时(利用TEM域),这5位累积IEEE_745定义的浮点异常。FPop指令执行完后,TEM域和cexc

域要被逻辑与。如果结果为非0,则产生fp_exception

的trap;否则cexc

与aexc

要被逻辑或且将其结果放入aexc

域。因此,当trap被屏蔽,异常就会被积累在aexc

域。FSR_current_exception(cexc)域:这5位指示一个或更多的IEEE_745浮点异常(由最近执行过的FPop

指令产生)。对于没被产生的异常,相应位被清0。609.8Float-PointStateRegister(FSR)即浮点状态寄存器619.8Float-PointStateRegister(FSR)即浮点状态寄存器FSR_invalid(nvc,nva)域:此位指示是否操作数非法。如0÷0等。1=无效的操作数;0=有效的操作数。FSR_overflow(ofc,ofa)域:当结果比正常能表示的数大时,会发生向上溢出。1=上溢,0=无上溢。FSR_underflow(ufc,ufa)域:当结果比正常能表示的最小的数还小时会发生向下溢出。1=下溢,0=无下溢。当结果是0时,就不能判断是否发生下溢。然而:如果UFM=0:当运算结果要比寄存器能正常表示的数还要小时,ufc

和ufa

位会被置为1。nxc和nxa

总是被置位。如果UFM=1:当运算结果要比寄存器能正常表示的数还要小时,会产生一个trap629.8Float-PointStateRegister(FSR)即浮点状态寄存器FSR_division-by-zero(dzc,dza)域:

X÷0,无论X位正常或低于正常的数,都不是合法的。此位指示是否发生0为除数的情况。1=(0为除数);0=(0不为除数)。但是0÷0时dzc

为不会被置位。FSR_inexact(nxc,nxa)域:此域指示rounded的结果和精确的结果是否一致:1=不一致,0=一致。FSRConformance域:实现TEM,cexc

和aexc

域的硬件方法有两种:

1)根据ANSI/IEEE标准745-1985实现。

2)根据ANSI/IEEE标准实现NXM,nxa

和nxc

位,实现剩下的位可以根据:

a)根据ANSI/IEEE标准745-1985实现。

b)作为一个可以被软件置位的状态位,这样的位应该:*)IEEE关联的位一定要能引起异常(一个FPop

不完整的异常)。在trap控制器处理异常时,状态域的相应位可以被LDFSR指令写。而且若此位被LDFSR指令写成某个特定值,然后用STFSR指令去读时得保证与写入的一致。639.8Float-PointStateRegister(FSR)即浮点状态寄存器Floating-PointDeferred-TrapQueue(FQ)――浮点延迟Trap队列:

如果FQ被实现,那么FQ中会含有足够的信息来实现可恢复浮点延迟trap。如果要实现浮点运算和整数运算的并发,就要提供浮点队列。

FQ可被特权的STDFQ指令(storedoublefloating-pointqueue)读。在芯片设计时也可用特权的LDDA,STDA(load/storedoublealternate)指令对FQ写;也可用RDASR或WRASR指令(read/writeAncillaryStateRegiter

)对之进行读写。

FQ有各种实现方式,但管理软件要能够通过读FQ推断出产生异常的指令的opcode,操作数和地址。若没有实现FQ功能,则FSR的qne

位总为0,且STDFQ指令产生fp_exception,FSR.ftt=4(sequence_error)649.9系统寄存器:存储器配置寄存器1(MCFG1)[3:0]:Promreadwaitstates(PROM读等待周期)。配置PROM读周期时等待周期的值。

(“0000”=0,“0001”=1,…“1111”=15);[7:4]:Promwritewaitstates(PROM写等待周期)。配置PROM写周期时等待周期的值。(“0000”=0,“0001”=1,…“1111”=15);[9:8]:Promwidth(PROM宽度)。配置PROM数据总线的宽度(“00”=8,“01”=16,“10”=32);[10]:保留;[11]:Promwriteenable(PROM写使能)。如配置为‘1’,则使能PROM写周期;[17:12]:保留;[19]:I/O区0访问使能。如配置为‘1’,则I/O区0访问使能;659.9系统寄存器:存储器配置寄存器1(MCFG1)[23:20]:I/Owaitstates

(I/O区访问等待周期)。配置访问I/O区时等待周期的值(“0000”=0,“0001”=1,“0010”=2,…,“1111”=15);[25]:Buserror(BEXC*)enable(总线错误使能);[26]:Busready(BRDY*)enable(总线准备好使能);[28:27]:I/Obuswidth(I/O总线宽度)。配置I/O区数据总线的宽度(“00”=8,“01”=16,“10”=32);[29]:I/O区1访问使能。如配置为‘1’,则I/O区1访问使能;[30]:I/O区2访问使能。如配置为‘1’,则I/O区2访问使能;[31]:I/O区3访问使能。如配置为‘1’,则I/O区3访问使能。669.9系统寄存器:存储器配置寄存器2(MCFG2)[1:0]:RAM读等待周期。配置RAM读周期等待周期的值。(“00”=0,“01”=1,“10”=2,“11”=3)[3:2]:RAM写等待周期。配置RAM写周期等待周期的值(“00”=0,“01”=1,“10”=2,“11”=3);[5:4]:RAM宽度。配置RAM区数据总线宽度(“00”=8,“01”=16,“1X”=32);[6]:Read-modify-write.Enableread-modify-writecyclesonsub-wordwritesto16-and32-bitareaswithcommonwritestrobe(nobytewritestrobe).[7]:总线准备好使能。如果设置为‘1’,RAM区的BRDY*信号有效。679.9系统寄存器:存储器配置寄存器2(MCFG2)[12:9]:RAMbank大小。配置RAMbank的大小[13]:SI–SRAM禁止位。如果配置为‘0’,则SRAM访问被激活;如果配置为‘1’,则下表所列的信号用作GPI口。当加电或复位时,该位为‘0’;保留;[15]:extmod。使存储器地址空间从20-bit扩展到24-bit。当该位设置为‘1’时,GPI2[3:0]用作地址线A[23:20]。当系统加电或复位时,该位为‘0’。[20:31]:保留;当ROM、I/O、和SRAM数据总线同时为8位或16位时,数据总线d(23:0)或d(15:0)作为GPI口使用。689.9系统寄存器:存储器配置寄存器3(MCFG3)[31:0]:保留;699.9系统寄存器:AHB错误地址寄存器

当AHB总线上发生访问错误时,访问的地址被存入AHB错误地址寄存器。709.9系统寄存器:AHB状态寄存器

当AHB总线上发生访问错误时,访问和错误类型被存入AHB状态寄存器。当AHB总线访问错误产生时,该寄存器被更新,NE位被设置为‘1’,中断控制器产生中断1通知处理器有AHB

总线访问错误,错误处理后,NE位必须软件复位。

[8]:NE–新错误。当新的错误产生时被置为‘1’。[7]:RW–如该位设置为‘1’,则失败的AHB访问是读访问周期,否则,被清‘0’。[6:3]:HMASTER–AHBmaster.ThisfieldcontainstheHMASTER[3:0]ofthefailedaccess.[2:0]HSIZE–transfersize.ThisfiledcontainstheHSIZE[2:0]ofthefailedtransfer.719.9系统寄存器:片内RAM地址配置寄存器[31:8]:保留;[7:0]:配置片内SRAM的地址,如片内SRAM的地址为0x60000000,则[7:0]配置为0x60(16进制,二进制为00000110)72S698内部资源简介片内SRAMPS/2接口控制器通用输入/输出接口定时器时钟机制Trap73

片内SRAM

S698_ECR内嵌有32K字节的RAM,其起始地址由用户程序在“内部RAM地址寄存器”中设定。内部RAM的地址必须在0x40000000~0x7fffffff

范围之内,且不能与外部SRAM重叠。片内SRAM可带外部后备电源,在掉电的情况下,能够通过外部后备电源供电,以保持片内SRAM中的数据不丢失74

片内RAM地址配置寄存器

07

31Reserved片内SRAM地址配置寄存器[31:8]:保留;[7:0]:配置片内SRAM的地址。如片内SRAM的地址0x60000000,则[7:0]配置为0x60(16进制,二进制为00000110)75

PS/2接口控制器(1):概述

在传统的计算机中,PS/2接口应用广泛,它常用做键盘接口和鼠标接口。一般,具有五脚连接器的键盘称之为AT键盘,而具有六脚mini-din连接器的键盘则称之为PS/2键盘。其实这两种连接器都只有四个脚有意义。它们分别是Clock(时钟脚)、Data(数据脚)、+5V(电源脚)和Ground(电源地)。在PS/2键盘与主机的物理连接上只要保证这四根线一一对应就可以了。76PS/2接口控制器(1):概述PS/2键盘靠主机的PS/2端口提供+5V电源,另外两个脚Clock(时钟脚)和Data(数据脚)都是集电极开路的,所以必须接大阻值的上拉电阻。它们平时保持高电平,有输出时才被拉到低电平,之后自动上浮到高电平。77PS/2接口控制器(2):PS/2接口协议PS/2通讯协议是一种双向同步串行通讯协议。通讯的两端通过Clock(时钟脚)同步,并通过Data(数据脚)交换数据。任何一方如果想抑制另外一方通讯时,只需要把Clock(时钟脚)拉到低电平。如果是主机和PS/2键盘间的通讯,则主机必须做主机,也就是说,主机可以抑制PS/2键盘发送数据,而PS/2键盘则不会抑制主机发送数据。78PS/2接口控制器(2):PS/2接口协议一般两设备间传输数据的最大时钟频率是33KHz,大多数PS/2设备工作在10~20KHz。推荐值在15KHz左右,也就是说,Clock(时钟脚)高、低电平的持续时间都为40μs。79PS/2接口控制器(2):PS/2接口协议每一数据帧含11~12个位,具体含义如表1:1个起始位总是逻辑08个数据位低位在前1个奇、偶校验位奇校验1个停止位总是逻辑11个应答位仅用在主机对设备的通信中表1:数据帧格式说明80PS/2接口控制器(3):

Ps/2接口通信操作1、PS/2接口的mini-DIN连接器模块图81PS/2接口控制器(3):

Ps/2接口通信操作2、PS/2接口设备的通讯PS/2设备的Clock(时钟脚)和Data(数据脚)都是集电极开路的,平时都是高电平。当PS/2设备等待发送数据时,它首先检查Clock(时钟脚)以确认其是否为高电平。如果是低电平,则认为是主机抑制了通讯,此时它必须缓冲需要发送的数据直到重新获得总线的控制权(一般PS/2键盘有16个字节的缓冲区,而PS/2鼠标只有一个缓冲区仅存储最后一个要发送的数据)82PS/2接口控制器(3):

Ps/2接口通信操作如果Clock(时钟脚)为高电平,PS/2设备便开始将数据发送到主机。一般都是由PS/2设备产生时钟信号。发送时一般都是按照数据帧格式顺序发送。其中数据位在Clock(时钟脚)为高电平时准备好,在Clock(时钟脚)的下降沿被主机读入。83PS/2接口控制器(3):

Ps/2接口通信操作PS/2设备到主机的通讯时序如图2。84PS/2接口控制器(3):

Ps/2接口通信操作当时钟频率为15KHz时,从Clock(时钟脚)的上升沿到数据位转变时间至少要5μs。数据变化到Clock(时钟脚)下降沿的时间至少也有5μs,但不能大于25μs,这是由PS/2通讯协议的时序规定的。如果时钟频率是其它值,参数的内容应稍作调整。85PS/2接口控制器(3):

Ps/2接口通信操作3、按键的识别按键的识别是通过扫描码(ScanCode)来判断的。扫描码可以分为:MakeCode(通码),BreakCode(断码)。当键盘上有键被按下,松开,按住,键盘将产生扫描码(ScanCode),这些扫描码将被i8048直接得到。扫描码有两种,MakeCode和BreakCode。当一个键被按下或按住时产生的是MakeCode,当一个键被松开产生的是BreakCode。86PS/2接口控制器(3):

Ps/2接口通信操作每个键被分配了唯一的MakeCode和BreakCode,这样主机通过扫描码就可以知道是哪一个键。简单的说就是按下键,产生一个MakeCode。松开键,产生一个BreakCode。当按住一个键不放时,将会Typematic(机打),也就是自动打。每隔一定时间,自动产生一个被按住的键的MakeCode,直到最后松开该键。87PS/2接口控制器(3):

Ps/2接口通信操作而对于同时按下多个键的情况:在一个键被按下,产生了MakeCode,而没有被松开,没有产生BreakCode的时候,再按下另一个键,于是产生了另一个键的MakeCode,就算是这两个键被同时按下。之后,这两个键松开时,各自产生各自的BreakCode。而对于按一个键不放的时候,再按另一个键的情况:我们可以打开一个记事本,把'a'键按住不放,不要松开,然后再按's'键不放。我们可以看到当按下's'时,'a'键并没有松,但是并没有'a'再出现了,而是's'开始出现,这时即使松开了's','a'也不会继续出现了。88PS/2接口控制器(3):

Ps/2接口通信操作到目前为止,一共有三套扫描码集(ScanCodeSet),ps/2键盘默认使用第二套。按照键的MakeCode的值的大小,列出了第二套扫描码集中的所有扫描码。如表3(下页)。89PS/2接口控制器(3):

Ps/2接口通信操作表3:第二套扫描码集注:所有的值都是十六进制的。101、102和104键的键盘:90PS/2接口控制器(3):

Ps/2接口通信操作91PS/2接口控制器(3):

Ps/2接口通信操作92PS/2接口控制器(3):

Ps/2接口通信操作93

PS/2接口控制器(3):

PS/2控制器寄存器

1、PS/2寄存器列表94PS/2接口控制器(3):

PS/2控制器寄存器2、状态寄存器STR

STR寄存器(StatusRegister)用于记录PS/2接口设备的当前状态,其宽度也为8位。表4:状态寄存器STRSTR地址:0X800002a4R95PS/2接口控制器(3):

PS/2控制器寄存器7位:0;TxTO:发送时间溢出表示键盘或鼠标没有接收输入(键盘或鼠标可能没有连接),当读取状态寄存器后,该位被清‘0’;当发生发送时间溢出时,PS/2控制器将保持该状态,并拉低数据线,直到执行自测试操作或系统复位。0:无错误–键盘或鼠标能够接收全部数据。1:时间溢出错误–键盘或鼠标在15ms的“请求发送”脉冲后仍没有产生时钟信号。96PS/2接口控制器(3):

PS/2控制器寄存器RxTO:接收时间溢出表示键盘或鼠标没有响应命令。当读取“状态寄存器”后,该位被清‘0’;当发生接收时间溢出时,PS/2控制器将保持该状态,直到执行自测试操作或系统复位。0:无错误1:接收时间溢出错误—键盘或鼠标在收到命令后20ms内没有产生时钟信号。97PS/2接口控制器(3):

PS/2控制器寄存器Kbd_inhibit:键盘或鼠标接口禁止位表示键盘或鼠标接口通讯是否被禁止。0:KeyboardClock=0–键盘通讯被禁止。1:KeyboardClock=1–键盘通讯没有被禁止。System_flag:systemflag主机通过读取该位确定键盘或鼠标是加电复位还是软件复位。0:加电复位1:键盘或鼠标已经初始化。98PS/2接口控制器(3):

PS/2控制器寄存器Tr_full:发送缓存满0:发送缓存空–允许写TXR。1:发送缓存满–不允许写TXR。

Rr_full:接收缓存满表示RXR中有数据收到,当读取RXR后,该位被清‘0’。0:接收缓存空–RXR中没有接收到数据。1:接收缓存满–RXR中接收到了新的数据。99PS/2接口控制器(3):

PS/2控制器寄存器3、命令寄存器CMDRCMDR命令寄存器存储控制标志,对寄存器控制要使用ReadCommandByte命令读,使用WriteCommandByte命令写。表5:命令寄存器CMDRCMDR地址:0X800002a4W100PS/2接口控制器(3):

PS/2控制器寄存器命令通过写PS/2控制器的TXR来送给PS/2控制器。首先,往“命令寄存器”中写入0x60,然后把命令写入TXR;也就是说,当在“命令寄存器”中写入0x60后,写入TXR中的数据将改变PS/2控制器的配置字。当配置PS/2控制器时,TXR中数据的各位含义如下所示:101PS/2接口控制器(3):

PS/2控制器寄存器7位:保留。Translate:Enables/disablestranslationtoset1scancodes0:Translationdisabled-Dataappearsatinputbufferexactlyasreadfromkeyboard.1:Translationenabled-Scancodestranslatedtoset1beforeputininputbuffer.102PS/2接口控制器(3):

PS/2控制器寄存器Enable:禁止/使能键盘或鼠标接口。0:使能–键盘或鼠标接口使能1:禁止–所有的键盘或鼠标通讯都被禁止。SYSTEM:用来强制设置/清除“状态寄存器”中的系统标志位。0:Power-onvalue-TellsHOSTtoperformpower-ontests/initialization.1:BATcodereceived-TellsHOSTtoperform"warmboot"tests/initiailization103PS/2接口控制器(3):

PS/2控制器寄存器IE:中断使能位如设置为‘1’,则当RXR收到数据、发送时间溢出、接收时间溢出时,产生一个中断。0:中断禁止1:中断使能104PS/2接口控制器(3):

PS/2控制器寄存器105PS/2接口控制器(3):

PS/2控制器寄存器106PS/2接口控制器(3):

PS/2控制器寄存器107PS/2接口控制器(3):

PS/2控制器寄存器4、分频寄存器DVDRDVDR寄存器存储分频参数,如表6。对于DVDR中的分频参数值,须采用下面的方式计算:DVDR=5×fmDVDR:表示分频参数的整数值。fm:PS/2控制器从内部接收到的输入频率。表6:分频寄存器DVDRDVDR地址:0X800002a8W/R108PS/2接口控制器(3):

PS/2控制器寄存器5、发送缓冲寄存器TXRTXR发送缓存,一个字节的输出缓冲区包含要写到键盘的字节。表7:发送缓冲寄存器TXRTXR地址:0X800002a0W109PS/2接口控制器(3):

PS/2控制器寄存器6、接收缓冲寄存器RXRRXR发送缓存,一个字节的输入缓冲区包含从键盘读入的字节。表8:接收缓冲寄存器RXRRXR地址:0X800002a0R110PS/2接口控制器(4):

PS/2信号PS2_DATAPS/2数据输入/输出信号,双向OD门。

PS2_CLKPS/2时钟输出信号。111

I/O端口(1):概述

处理器通过I/O口和外围硬件连接。S698-ECR芯片的I/O口通常都是和其他引脚复用的。S698-ECR处理器具有80个多功能的GPIO,他们分别是:一个32位的GPIO端口0;一个32位的GPIO端口1;一个16位的GPIO端口2。112I/O端口(1):概述每组端口都可以通过软件配置不同的系统和设计需要。系统上电时,所有的GPIO口都被设置为输入功能。如果某些管脚的复用功能没有使用,则可以作为GPIO口使用,如果被使用为其他复用功能,则相应的GPIO口必须被设置为输入端口。113I/O端口(2):端口功能配置每个端口都可通过软件设置来满足各种各样的系统设置和设计要求。每个端口的功能通常都要在主程序开始前被定义。如果一个引脚的多功能没有使用,那么这个引脚将被设置为I/O端口。在引脚配置前,需要对引脚的初始化状态进行设定,以避免出现一些问题。表9是S698-ECRI/O端口总的设置情况。114I/O端口(2):端口功能配置表9:S698-ECRI/O端口总的设置情况115I/O端口(2):端口功能控制描述I/O端口的各种功能主要是通过对端口的各个寄存器进行设置而实现的,下面通过对各个寄存器的说明来分别介绍I/O端口实现的功能。116I/O端口(2):端口功能控制描述1、端口方向寄存器每一个寄存器都是32位的,寄存器中每一位都对应着相应的GPIO口,比如GPIO0的数据寄存器中的第‘0’位就控制着GPIO0[31:0]端口的第一个GPIO[0]。使用前首先确认GPIO口作为何种功能,如果作为复用功能,则其方向寄存器必须被设置为输入状态。当方向寄存器的某一位为‘1’,则其对应的GPIO口就为输出功能,反之设为‘0’,为输入功能。117I/O端口(2):端口功能控制描述2、端口数据寄存器在GPIO口通过方向寄存器被设置为输入功能时,可以通过读取数据寄存器了解当前端口的状态,‘0’为低电平,‘1’为高电平。在GPIO口通过方向寄存器被设置为输出功能时,可以通过写数据寄存器控制当前输出状态,‘0’为输出低电平,‘1’为输出高电平。118I/O端口(2):端口功能控制描述3、外部中断悬挂寄存器当一个中断产生时,“中断悬挂寄存器”中相应的位被置‘1’。悬挂的位与“中断屏蔽寄存器”相“与”后转送到优先级选择器。级别1的优先级高于级别0。在每个级别中,中断又按照硬件优先级先后的顺序区分。中断15的优先级最高,中断1的优先级最低。级别1中优先级最高的中断被送往IU,如果级别1中没有中断,则级别0中优先级最高的中断被送往IU,当IU相应该中断后,“中断悬挂寄存器”中相应的位将自动被清‘0’119I/O端口(2):端口功能控制描述4、外部中断配置寄存器外部中断寄存器为外部中断设置了信号触发方法选择位,也设置了触发信号的极性选择位。GPIO中断通过中断信号过滤模块连接在中断控制器1的第4号至第7号中断上,GPIO中断可通过软件设定为高电平触发、低电平触发、上升沿触发和下降沿触发。利用5.1K电阻分别将GPIO[0:3]上拉至高电平,利用软件分别将中断控制器1的第4号中断至第7号中断分配到GPIO[0:3]上,同时设定相应的触发条件,利用低电平分别触发这四个中断。120

I/O端口(3):特殊功能寄存器

1、外部中断悬挂寄存器外部中断悬挂寄存器如表10所示,它以各个位设置为‘1’来判断中断是否挂起;表10:外部中断悬挂寄存器121I/O端口(3):特殊功能寄存器2、外部中断配置寄存器为信号触发:高电平触发、低电平触发、上升沿触发和下降沿触发。122定时器(1):概述S698-ECR内嵌4个24位的通用目的定时器(定时器1、2、3&4)。定时器3&4的功能与S698、S698M片内定时器完全一致;定时器1&2能够产生占空比可调的输出波形,并通过相应的输出引脚(TMROUT[1:0])输出。并可通过外部输入的门控信号(TMRIN[1:0])控制定时器1&2的输出。定时器1&2的输出波形的占空比通过2个24位的“定时器波形参数配置寄存器1&2”设定。123定时器(1):概述例如:如果定时器1的“预置数重载寄存器”配置为15、“定时器波形参数配置寄存器1”配置5(T1)、“定时器波形参数配置寄存器2”配置为10(T2),则定时器1或定时器2产生的波形如图1所示:图1:定时器1或定时器2产生的波形124定时器(2):工作原理S698-ECR平台提供4个定时器,使用时先设定Prescalercounter和Prescalerreload

、Timercounter和Timerreload寄存器、设定Timercontrol寄存器,设为Mo

温馨提示

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

评论

0/150

提交评论