摘 要: 介紹了TR600語音編解碼芯片中過程調(diào)用的設(shè)計及實現(xiàn)方法,,并與堆棧寄存器結(jié)構(gòu)實現(xiàn)方式做了簡要的比較,重點闡述了重疊寄存器窗口技術(shù)" title="窗口技術(shù)">窗口技術(shù)和存取算子對存儲體交叉訪問技術(shù)的原理,、技術(shù)特點及其在TR600芯片體系中的具體實現(xiàn),。
關(guān)鍵詞: 可重構(gòu)體系 過程調(diào)用 重疊寄存器窗口 交叉訪問
隨著大規(guī)模集成電路的不斷發(fā)展,軟硬件界面的劃分也發(fā)生了變化,,VLSI設(shè)計方法的改進,、IP技術(shù)的標準化以及系統(tǒng)在片(SOC)設(shè)計的日漸成熟,為軟件功能邏輯硬件化實現(xiàn)提供了技術(shù)條件和實現(xiàn)手段,。作為軟件程序設(shè)計的重要部分,,過程調(diào)用功能使用頻度相當高,尤其在結(jié)構(gòu)化設(shè)計中起到重要作用,,因此,,其硬件實現(xiàn)方法的優(yōu)劣對于軟件能否很好地移植到邏輯電路" title="邏輯電路">邏輯電路中起到了非常重要的作用。
TR600語音編解碼芯片設(shè)計是基于MELP,、SELP2(Sine Excitation Linear Prediction)等多種語音算法,,采用可重構(gòu)體系結(jié)構(gòu)[1]和變長指令技術(shù)[2],實現(xiàn)了多種語音算法可在片配置的SOC設(shè)計,。這款語音芯片結(jié)合了邏輯電路的快速性和用戶指令編程靈活性的特點,,通過分析多種語音算法,并提取資源共集,,建立了資源、運算,、網(wǎng)絡(luò)可重構(gòu)的邏輯電路,,同時提取資源的可控節(jié)點,形成用戶指令界面,,以指令流形式控制邏輯電路,,實現(xiàn)算法級應(yīng)用功能。過程調(diào)用功能就是以指令形式提供給使用者,,并通過指令譯碼器" title="譯碼器">譯碼器控制邏輯電路動作,,實現(xiàn)具體功能。因此,,過程調(diào)用功能的硬件實現(xiàn)效率和靈活度直接影響芯片整體的速度,、規(guī)模以及用戶指令編程的復(fù)雜度。
過程調(diào)用模型可簡單描述為主調(diào)過程將被調(diào)過程置于某一位置,,然后把控制權(quán)交給被調(diào)過程,,執(zhí)行完畢,再取回控制權(quán),,并返回運行結(jié)果,,主調(diào)過程繼續(xù)執(zhí)行,。因此過程調(diào)用需要2個步驟:調(diào)用過程和返回過程。過程調(diào)用需要處理的信息有:程序計數(shù)器(PC)值的保存與恢復(fù),、現(xiàn)場保護和參數(shù)傳遞" title="參數(shù)傳遞">參數(shù)傳遞,。過程調(diào)用是一種典型的后入先出堆棧寄存器結(jié)構(gòu),這種實現(xiàn)方式雖已相當普遍,,但也存在不足:(1)堆棧寄存器使用效率低,,存儲時間和空間浪費嚴重。因為參數(shù)傳遞的個數(shù)和規(guī)格因調(diào)用過程的不同會有所不同,,而主調(diào)過程需要對所有可能被破壞的數(shù)據(jù)堆棧進行保護,,而堆棧的寬度和深度會因滿足過程調(diào)用最壞情況而設(shè)計得最大,而且嵌套調(diào)用會增加堆棧寄存器的開銷,。(2)堆棧寄存器結(jié)構(gòu)無法解決調(diào)用過
程存取算子對存儲體交叉訪問的問題,。為了給用戶指令編程提供一個清晰的指令界面,在指令體系設(shè)計時,,將LS存取算子設(shè)計成與SDRAM存儲體一一對應(yīng)的關(guān)系,。單塊存儲體采用獨立編址。而對于過程調(diào)用,,主調(diào)過程傳遞實參可來源于任意存儲體,,被調(diào)過程的LS存取算子只能指向某一個存儲體,這就產(chǎn)生了過程調(diào)用中參數(shù)傳遞的全局性與存取算子訪問局部性之間的矛盾,。
為了解決堆棧寄存器結(jié)構(gòu)實現(xiàn)方式的不足,,TR600語音編解碼芯片采用了重疊寄存器窗口技術(shù)和存取算子對存儲體的交叉訪問技術(shù)來實現(xiàn)過程調(diào)用功能。
1 重疊寄存器窗口技術(shù)[3]
重疊寄存器窗口技術(shù)是一種寄存器堆設(shè)計方法,,它將寄存器堆分成若干個寄存器子堆,,相鄰寄存器子堆有重疊部分并共同可見,作為子堆之間信息交互的窗口,,稱為窗口寄存器,。寄存器子堆與其他子堆不重疊的部分只有自身可見,獨立于其他子堆,,稱為局部通用寄存器,。在外部控制電路作用下,同一時刻只有一個子堆對用戶是可見的,,可以進行讀寫操作,。存儲于局部通用寄存器的數(shù)據(jù)不會影響相鄰子堆的操作,而存儲于窗口寄存器的數(shù)據(jù)可以被相鄰子堆直接使用,。過程調(diào)用操作利用了局部通用寄存器的局部性和窗口寄存器的共用性的特點,,將過程調(diào)用中的相關(guān)數(shù)據(jù)存入局部通用寄存器,避免了數(shù)據(jù)相關(guān),;將傳遞參數(shù)寫入窗口寄存器,,可以供被調(diào)過程直接使用,,避免了寄存器之間的數(shù)據(jù)轉(zhuǎn)移。因此,,重疊寄存器窗口技術(shù)可以解決過程調(diào)用中的現(xiàn)場保護和參數(shù)傳遞的問題,。
TR600芯片體系結(jié)構(gòu)采用可重組思想設(shè)計了二組總線寄存器堆,每組寄存器堆有19個寄存器單元,,每個單元由2組16位寄存器拼接而成,,因此,單指令周期可以存取64位,、32位,、16位規(guī)格的數(shù)據(jù)。為了實現(xiàn)語音算法中多重嵌套過程調(diào)用,,每組寄存器堆分為三層寄存器子堆,,如圖1所示。每層最多可以使用9個寄存器單元,,調(diào)用操作可以在寄存器子堆內(nèi)部,,也可以在相鄰子堆之間完成??偩€寄存器堆控制信號" title="控制信號">控制信號由過程調(diào)用指令和寄存器讀寫控制指令經(jīng)指令譯碼器譯碼產(chǎn)生,。過程調(diào)用指令控制層計數(shù)器,產(chǎn)生層譯碼器使能,,控制寄存器子堆換層操作,。同時,控制輸出選通器選擇寄存器子堆輸出,;寄存器讀指令產(chǎn)生當前子堆內(nèi)寄存器單元輸出選擇信號,,寄存器寫指令控制產(chǎn)生數(shù)據(jù)通路選擇和寄存器寫使能信號。
TR600芯片體系結(jié)構(gòu)采取2種過程調(diào)用方式:同層調(diào)用和換層調(diào)用,。當一層寄存器子堆滿足主調(diào)過程和被調(diào)過程的寄存器資源使用時,采用同層調(diào)用,;當換層調(diào)用時,,被調(diào)過程位于主調(diào)過程的下一層寄存器子堆,主調(diào)過程和被調(diào)過程分別控制所在層的寄存器單元,,主調(diào)過程將傳遞參數(shù)寫入窗口寄存器,,被調(diào)過程則從窗口寄存器取入?yún)?shù),以當前寄存器子堆為存儲空間進行運算,,并將需要傳遞的運算結(jié)果寫入窗口寄存器,,返回主調(diào)過程。如果被調(diào)過程內(nèi)還含有調(diào)用,,可以根據(jù)寄存器使用情況確定是同層調(diào)用還是換層調(diào)用,,從而決定傳遞參數(shù)寫入局部通用寄存器或是窗口寄存器,。多重過程調(diào)用同樣遵循這個過程。TR600體系中采用的語音編解碼算法的過程調(diào)用最多涉及到17個子函數(shù)過程和5重嵌套調(diào)用,,而重疊寄存器窗口技術(shù)都可以很好地解決這些問題,。
2 存取算子對存儲體交叉訪問技術(shù)
存取算子對存儲體交叉訪問機制解決了存取算子訪問局部性與過程調(diào)用中參數(shù)傳遞的全局性之間的矛盾。由于在指令體系設(shè)計時,,將LS存取算子設(shè)計成與SDRAM存儲體一一對應(yīng)的關(guān)系,,這就使得存取算子只能固定訪問單塊存儲體。而對于過程調(diào)用,,主調(diào)過程實參傳遞可來自于任意存儲體,,被調(diào)過程的形參卻只能指向某一個存儲體,這就要求主調(diào)過程要將實參轉(zhuǎn)移到形參指定的存儲體內(nèi),,才能正確執(zhí)行調(diào)用,;而在數(shù)據(jù)轉(zhuǎn)移過程中,可能引起數(shù)據(jù)相關(guān),,并且浪費數(shù)據(jù)轉(zhuǎn)移時間,。本設(shè)計的解決方法是對LS存取算子做變換,使其能夠訪問所有存儲體,,避免數(shù)據(jù)轉(zhuǎn)移,,并稱其為存取算子對存儲體的交叉訪問。
為了在過程調(diào)用時使存取算子能夠訪問任意存儲體,,使被調(diào)過程形參可以指向任意存儲體,,采用在體系中添加段寄存器配置,標識存取算子訪問存儲體的信息的方法,。因此用戶可以通過設(shè)置段寄存器的值來動態(tài)改變LS存取算子對SDRAM存儲體的訪問關(guān)系,。在初始化狀態(tài),段寄存器中的值表示LS存取算子與存儲體訪問是一一對應(yīng)的,,如圖2所示,。在存儲體交叉訪問時,過程調(diào)用指令通過重置段寄存器值,,改變存取算子與存儲體的對應(yīng)關(guān)系,,并在執(zhí)行調(diào)用過程中保持不變,如圖3所示,。段寄存器值由過程調(diào)用指令來動態(tài)配置,,用戶在使用過程中調(diào)用指令時,要參照指令格式的要求,,在具體指令域裝載段寄存器的配置信息,。段寄存器值經(jīng)過譯碼器譯碼產(chǎn)生存儲體控制信息,再經(jīng)過邏輯運算產(chǎn)生每個存儲體的控制信號,包括:輸入輸出數(shù)據(jù)通路選擇信號以及存儲體的使能,、讀寫,、地址控制信號。
在TR600芯片體系結(jié)構(gòu)中包含5塊獨立編址的SDRAM存儲體,,指令體系提供5個LS存取控制算子,,分別為LS1控制讀寫RAM1、LS2控制讀寫RAM2……LS5控制讀寫RAM5,。相應(yīng)地,,體系中提供5個3位段寄存器,標識過程調(diào)用時存取算子與存儲體的對應(yīng)關(guān)系,??紤]到語音算法存在多重嵌套過程調(diào)用,每次過程調(diào)用時都可能發(fā)生存儲體交叉訪問的情況,,因此設(shè)計了6層段寄存器陣列分別標識每次調(diào)用時存取算子與存儲體的對應(yīng)關(guān)系,,如圖4所示。執(zhí)行過程調(diào)用指令時,,段寄存器被重新配置,,同時將過程調(diào)用的嵌套次數(shù)保存在層計數(shù)器。通過對層計數(shù)器輸出的譯碼,,產(chǎn)生段寄存器的層控制信息,,包括段寄存器使能和段寄存器輸出選擇控制。通過段寄存器陣列的變換,,實現(xiàn)每個存取算子對存儲體訪問的控制轉(zhuǎn)換,,再經(jīng)過段譯碼器譯碼及邏輯運算產(chǎn)生存儲體控制信號。例如,,存儲體RAM1使能信號(RAM1_E)可由5個段譯碼器譯碼產(chǎn)生的RAM1控制信號做邏輯“或”運算產(chǎn)生,,變換邏輯運算即可以產(chǎn)生存儲體的讀寫信號、地址控制信號和輸入輸出選擇控制信號(本文不做詳細論述),。
3 技術(shù)特點
(1)TR600芯片體系結(jié)構(gòu)中重疊寄存器窗口技術(shù)采用可重組思想設(shè)計寄存器堆結(jié)構(gòu),,提高了存儲靈活性,適應(yīng)了語音算法在過程調(diào)用中數(shù)據(jù)規(guī)格多樣性的特點,;多層窗口寄存器結(jié)構(gòu)和寄存器堆局部可見的特點,,解決了過程調(diào)用時的現(xiàn)場保護和參數(shù)傳遞問題,不需要設(shè)計現(xiàn)場保護參數(shù)的專用部件,,減少了系統(tǒng)的時空開銷,。
(2)存儲體交叉訪問機制采用段寄存器標識存取算子與存儲體的對應(yīng)關(guān)系,,由過程調(diào)用指令配置段寄存器,,避免了因為參數(shù)傳遞而進行的存儲體之間的數(shù)據(jù)轉(zhuǎn)移;同時提供了清晰易讀、編程靈活的指令界面,,屏蔽了邏輯設(shè)計的復(fù)雜性,,方便了用戶指令編程。但過程調(diào)用功能的硬件實現(xiàn)與應(yīng)用環(huán)境及體系結(jié)構(gòu)是密不可分的,,設(shè)計者應(yīng)依據(jù)具體情況調(diào)整實現(xiàn)方案,,如窗口寄存器堆的分層數(shù)目及段寄存器的層數(shù),要根據(jù)具體算法中過程調(diào)用的最大嵌套層數(shù)而定,,存取算子對存儲體的交叉訪問要依據(jù)體系結(jié)構(gòu)提供的指令界面而定等,,因為這些設(shè)計都具有靈活性和多樣性。
本文論述的過程調(diào)用功能硬件實現(xiàn)方法也可以為其他應(yīng)用設(shè)計借鑒,,例如,,在網(wǎng)絡(luò)體系結(jié)構(gòu)中,對多種通信協(xié)議的硬件實現(xiàn)以及RPC遠程過程調(diào)用的實現(xiàn)都具有一定的參考價值,。
參考文獻
1 曲英杰. 可重構(gòu)體系結(jié)構(gòu)的特征及應(yīng)用. 計算機工程與應(yīng)用, 2001;(9)
2 Hennessy J L. Computer architecture: a quantitative approach. China Machine Press, 2002
3 David L. Weaver the SPARC architecture manual(Version 9). PTR Prentice Hall, 1994