(中國電子科技集團公司第三十八研究所集成電路設計中心,安徽合肥230088)
目前數(shù)字信號處理芯片[1]已經(jīng)成為高速自動控制、圖像處理[2]、通信技術、雷達及各種信號處理中的核心部件。國內(nèi)可編程超大規(guī)模DSP集成電路芯片的研制還處在初步嘗試階段,而針對具有復雜指令集的超大規(guī)模集成電路芯片內(nèi)部指令分配,以及執(zhí)行單元和總線通道占用調(diào)度的電路設計還是個尚待解決的難題。
國際上目前應用最廣泛的是美國TI公司的TMS系列和ADI公司的TS系列DSP芯片。ADI公司的兩款高性能數(shù)字信號處理芯片ADSP TS101S[3]、ADSP TS20XS[4]更具有代表性。
在ADSP TS20XS芯片內(nèi)有雙運算模塊,每個運算模塊包含1個算數(shù)邏輯單元(ALU)、1個乘法器、1個移位器、1個寄存器組和1個通信邏輯運算單元(CLU)。1個指令行中最多有4條運算塊指令。
由于ADSP TS20XS芯片在每個運算核內(nèi)的各類運算單元只有一個,不存在單條運算指令對應多個可執(zhí)行運算單元的情況,因此與本文所涉及的一個指令行中存在多條指令,每條指令對應一個或多個運算執(zhí)行單元,且指令可以自動分配運算單元或者可以指定其中的任意一個運算單元的情況有所不同。其指令與運算單元一對一的分配與本文所實現(xiàn)的多對多的自動化分配及存在優(yōu)先級的指定分配難度是不可比擬的。
這里要解決的是多條同類型指令自動分配或者指定分配至多個運算執(zhí)行單元的分配難題,其中指定執(zhí)行的情況又存在多條指令搶占同一個執(zhí)行單元的情況。這些都將是本文所要解決的重點所在。
本文項目BWDSP100芯片[5-6]中包括4個運算執(zhí)行核(X,Y,Z,T),每一個運算執(zhí)行核包含4個乘法器、8個ALU運算單元、2個移位器、1個特定運算單元和1組64字的寄存器組。1個指令行中最多有16條運算指令。
為達到高效、快速、合理的分配目的,本文提出的分配技術主要包括指令分核模塊、指令分類模塊、指令分配模塊和多核指令分配集成模塊等。這些模塊共同組合,完成了BWDSP100芯片所有指令的分配任務,實現(xiàn)了可編程超大規(guī)模DSP集成電路芯片運算執(zhí)行資源占用及傳輸通道調(diào)度的完整功能。另外指令分配模塊又包括自動分配模塊、指定分配模塊、優(yōu)先級選擇模塊、組合選擇模塊和輸出模塊。這些模塊以流水的方式協(xié)同完成了指令行各種類型指令的分配工作,不同類型指令的分配工作均可以由指令分配模塊完成。在指令分類模塊后,通過多次例化指令分配模塊并設置不同類型指令分配的參數(shù)即可完成不同種類指令的分配工作。
高性能通用信號處理器指令分配的具體實施方式主要包括4類:指令分配、單核運算指令分配集成、訪存指令分配集成和多核指令分配。
指令分配模塊主要解決多條同類型指令對應多個執(zhí)行單元的分配問題,同時存在指令指定占用1個或者多個執(zhí)行單元的情況,并包括多條指令搶占同一個運算執(zhí)行單元的問題。該指令分配模塊可適用于各種不同種類指令的分配,其內(nèi)部的分配電路結(jié)構(gòu)類似,如圖1所示。
圖1 指令分配結(jié)構(gòu)圖
指令分配主要包括以下步驟:
步驟1 將分類后的指令及對應的類別編碼分別輸入到指定分配和自動分配模塊。
步驟2 自動分配模塊根據(jù)指令類別和指令特征碼填寫該類指令自動分配標識。根據(jù)指令占用運算單元的個數(shù)情況,經(jīng)過自動選擇分配單元模塊,輸出自動分配對應的運算單元編碼。其中運算單元占用的數(shù)目可以是1~8個不等,根據(jù)具體指令類型而定。
步驟3 指定分配模塊根據(jù)指令類別和指令指定分配特征碼填寫指令指定分配標識。根據(jù)指令指定的運算單元編號,輸出該類指令指定分配對應的運算單元編碼。其中指定運算單元的數(shù)目可以是1~8個不等,并且可以指定相鄰2個或者相鄰多個運算單元,由指令集的對應指令及相應的標志位確定。
步驟4 指定分配模塊輸出的結(jié)果通過優(yōu)先級選擇模塊按照指定優(yōu)先級排序輸出。具有優(yōu)先指定權(quán)的指令經(jīng)過該選擇模塊后會優(yōu)先搶占其指定的運算單元。
步驟5 將指定分配和自動分配的結(jié)果輸入到組合選擇器。指定輸出具有對運算單元的優(yōu)先選擇權(quán),在指定分配確定的情況下,選擇空閑運算單元的編碼按照自動分配模塊的分配要求對其余指令自動分配。
步驟6 經(jīng)過組合選擇器的分配編碼輸入至“寄存器堆資源占用輸出”模塊、“分配指令控制輸出”模塊和“分配指令數(shù)據(jù)輸出”模塊,得到指令行中該類指令的分配執(zhí)行結(jié)果。
通過指令分配模塊得到的是單類指令的分配輸出。將運算執(zhí)行核內(nèi)所有類型的運算指令分配模塊綜合集成為一個單核分配模塊,如圖2為X運算核指令分配集成,主要包括:ALU(加/減法)指令分配器、MULT(乘法)指令分配器、SHIFT(移位)指令分配器、SPU(特殊運算)指令分配器、控制寄存器指令分配器、核間傳輸指令分配器、塊浮點指令分配器以及所有分配輸出的時鐘寄存器。
圖2 X運算核指令分配結(jié)構(gòu)圖
訪存指令分配的內(nèi)部實施步驟與上述情況類似,所不同的是數(shù)據(jù)通道分配需要按照讀、寫、立即數(shù)操作三種情況進行通道分配,以避免讀寫沖突。因此數(shù)據(jù)通道分配相應以上三種類別分別設置了三種不同的通道分配模塊(如圖3所示):
(1)讀訪存指令分配 主要實現(xiàn)讀訪存指令由數(shù)據(jù)存儲器到寄存器堆之間“讀”數(shù)據(jù)通道的占用分配。
(2)寫訪存指令分配 主要實現(xiàn)寫訪存指令由數(shù)據(jù)存儲器到寄存器堆之間“寫”數(shù)據(jù)通道的占用分配。
(3)立即數(shù)訪存指令分配 主要實現(xiàn)立即數(shù)訪存指令對數(shù)據(jù)存儲器的立即數(shù)操作通道占用分配。
圖3 訪存指令分配結(jié)構(gòu)
如圖4所示,多核指令分配主要包括以下幾個步驟:
步驟1 BWDSP100處理器的指令位寬為512位,主要包括執(zhí)行核外指令和執(zhí)行核內(nèi)指令。執(zhí)行核內(nèi)指令首先經(jīng)過指令分核模塊,該模塊接收到512位指令流,通過對指令核標志位的判斷,將指令分成4個512位寬的單核指令,其中4個執(zhí)行核分別命名為X核、Y核、Z核和T核。
步驟2 指令經(jīng)過指令分核模塊即進入到指令分類模塊。并通過對指令特征位的辨識,將指令所屬類別進行編碼。輸出一個與指令行指令逐條對應的類別碼。如果指令行某條指令為空,則對應的類別碼約定為0。指令分類模塊又包括核外指令分類和核內(nèi)指令分類。其中核外指令分類主要針對訪存指令的讀、寫及立即數(shù)指令進行操作;核內(nèi)指令的分類模塊所分類的指令主要有算數(shù)邏輯單元(ALU)、乘法器(MULT)、移位器(SHIF)、特殊運算單元(SPU)、控制寄存器、核間傳輸指令和塊浮點運算指令等。
步驟3 經(jīng)過上述處理后的指令進入到指令分配階段,相應地將經(jīng)過步驟2處理后的兩路分支——執(zhí)行核內(nèi)的單核指令分類結(jié)果和執(zhí)行核外的訪存指令分類結(jié)果,分別輸入到X/Y/Z/T單核指令分配模塊或者執(zhí)行核外的訪存指令分配模塊,從而得到指令分配的輸出結(jié)果,包括控制輸出、數(shù)據(jù)輸出和寄存器堆資源占用標志輸出。
步驟4 每個執(zhí)行核內(nèi)設置一個選擇器,將所有單核指令分配集成模塊、核外指令分配模塊、數(shù)據(jù)通道(訪存指令)分配模塊的輸出經(jīng)過相應的時鐘寄存器并綜合輸入核間分配選擇器,實現(xiàn)核間傳輸通道交叉占用以及核內(nèi)外的寄存器堆資源占用的標志選擇輸出。
步驟5 最后將選擇器的輸出結(jié)果與指令分配輸出結(jié)果經(jīng)過多核指令分配集成模塊輸出整個高性能通用信號處理器芯片的綜合分配輸出結(jié)果。
圖4 多核指令分配集成框圖
以下利用本文所述的分配技術進行了硬件實現(xiàn)和波形仿真,圖5是硬件RTL設計的部分實驗仿真結(jié)果。分配電路的輸入信號是512 bit指令行sys_instr_in,instr_x/y/z/t是指令分核模塊的輸出,Read_Mem_data0/1是訪存數(shù)據(jù)通道的讀指令分配結(jié)果,其余信號是X運算核的指令分配輸出。
圖5 硬件RTL設計仿真結(jié)果
從圖中可以看到第一個指令fa19_81c8指定分配到第3號乘法器Mult_data3;第二條指令b3a4_b587指定分配到第2個讀訪存通道Mult_data3;第三條指令f935_c1cc指定分配到第3號ALU運算部件Alu_data3;第四條指令bda5_2b1d指定分配到第3號ALU運算部件Alu_data2;第五條指令e924_5398是可以自動占用4個運算部件的復數(shù)運算指令,由圖中可以看到該指令自動指定分配到前面4個ALU運算單元上:Alu_data0/1/2/3;第六條指令是多個指令的聯(lián)合分配,值得說明的是,當Alu2和Alu3分別被指定分配的指令3da5_2b1d和7935_c1cc占用后,占用4個ALU運算部件的指令6924_5398會自動跳過被指定占用的運算部件,分別分配到Alu0、Alu1、Alu4和Alu5。
由仿真波形可見該技術實現(xiàn)了指令指定任意一個運算單元的指定分配,以及指令不指定運算單元時的自動分配。真正實現(xiàn)了存在優(yōu)先級的指定分配和多對多的自動化分配電路。解決了超大規(guī)模集成電路芯片內(nèi)部指令分配的難題。
本文針對高性能通用數(shù)字信號處理器內(nèi)部的指令分配問題提出了一種解決方法,對該技術的實現(xiàn)步驟進行了詳細闡述,可以適用于加、減、乘、除、移位、訪存和跳轉(zhuǎn)等各種運算指令,也適用于邏輯運算、選大或選小處理、數(shù)據(jù)傳輸、控制寄存器讀寫指令、核間傳輸?shù)戎噶?。每種指令對應一個或多個運算執(zhí)行單元,既可以自動分配也可以指定分配。解決了超大規(guī)模集成電路芯片內(nèi)部指令分配,以及執(zhí)行單元和總線通道占用電路設計的難題。
[1]Texas Instruments.TMS320C6671 Fixed and Floating Point Digital Signal Processor Data Manual[M].US:Texas Instruments,2012:105-120.
[2]BATEMAN A.DSP算法應用與設計[M].北京:機械工業(yè)出版社,2003:1-14.
[3]Analog Devices Inc.ADSP-TS201 Tiger-SHARC Embedded Processor[M].US:Analog Devices Inc,2006:1-80.
[4]劉書明,羅勇江.ADSP TS20XS系列DSP原理與應用設計[M].北京:電子工業(yè)出版社,2007:30-31.
[5]中國電子科技集團公司第三十八研究所.BWDSP100軟件用戶手冊[M].合肥:中國電子科技集團公司第三十八研究所,2011:1-20.
[6]史鴻聲,穆文爭,劉麗.基于“魂芯一號”的雷達信號處理機設計[J].雷達科學與技術,2012,10(2):161-164.SHI Hong-sheng,MU Wen-zheng,LIU Li.Design of Radar Signal Processor Based on HunXin-1 Chip[J].Radar Sciecne and Technology,2012,10(2):161-164.(in Chinese)