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