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

提交評論