薛海衛(wèi),張慶文,王月玲,徐新宇
(中國電子科技集團公司第58研究所,江蘇 無錫 214035)
數(shù)字信號處理器DSP廣泛應(yīng)用于現(xiàn)代通信、信息處理、自動控制等領(lǐng)域中,通過指令程序,DSP能實現(xiàn)濾波、快速傅里葉變換等各種算法,是現(xiàn)代信號處理的關(guān)鍵器件之一。DSP通常由CPU、存儲器、外設(shè)等邏輯部件組成,根據(jù)處理數(shù)據(jù)的位寬分為16位或32位、根據(jù)處理數(shù)據(jù)的類型分為定點和浮點。本文設(shè)計的32位定點DSP可以在單周期內(nèi)實現(xiàn)16×16位有符號整數(shù)乘法、累加和32位數(shù)據(jù)的算術(shù)邏輯運算,處理精度高。本電路采用正向設(shè)計流程,自主設(shè)計了CPU、ROM和SCI、TIMER等外設(shè),通過0.5 μm 1P3M CMOS工藝流片,實現(xiàn)了一種快速實時的32位定點數(shù)字信號處理器電路。
DSP體系結(jié)構(gòu)是設(shè)計DSP的核心和基礎(chǔ),決定了該DSP所達到的性能。根據(jù)開發(fā)時間與性能指標的要求,這款32位定點DSP的研制目標是中低速、低功耗及高可靠,由此決定32位DSP體系結(jié)構(gòu)及指令系統(tǒng)。該DSP由CPU、總線、外設(shè)、ROM等功能部件組成,CPU采用增強的硬件,包含32位乘法器、32位ALU、32位寄存器隊列,4條CPU內(nèi)部總線分別可以從存儲器和寄存器隊列中傳遞操作數(shù),兩個獨立的專用地址運算邏輯單元ARAU可以在單周期內(nèi)產(chǎn)生2個地址。CPU與外設(shè)間采用哈佛總線結(jié)構(gòu),由4條總線組成,增強程序執(zhí)行速度和數(shù)據(jù)吞吐帶寬。
根據(jù)該體系結(jié)構(gòu),32位DSP電路可以實現(xiàn)2操作數(shù)和3操作數(shù)的加、減、乘等算術(shù)運算及與、或、非、異或、移位等邏輯運算,通過跳轉(zhuǎn)、返回、堆棧等操作實現(xiàn)程序控制,該電路具有4級流水線。32位定點DSP的總體結(jié)構(gòu)圖如圖1所示。
圖1 32位定點DSP總體結(jié)構(gòu)圖
32位DSP采用哈佛總線結(jié)構(gòu),片內(nèi)總線包括32位的程序總線PB、數(shù)據(jù)總線DB和24位的程序地址總線PAB、數(shù)據(jù)地址總線DAB。DB通過多路復(fù)用器連接到定時器和串口的數(shù)據(jù)端,DAB連接到定時器和串口的地址端。因BOOTROM存放只讀程序,其數(shù)據(jù)輸出端與PB相連,地址端與PAB相連。
當電路處于微處理器(MP)模式時,程序從片外存儲器讀取到PB上,數(shù)據(jù)也從片外存儲器讀寫到DB,外部啟動該DSP;當電路處于微計算機模式(MC)時,引導(dǎo)程序從BOOTROM讀取到PB上,內(nèi)部啟動該DSP。片內(nèi)的PB和DB復(fù)用到32位外部數(shù)據(jù)總線DATA上,片內(nèi)的PAB和DAB復(fù)用到24位外部地址總線ADDR上,通過外部存儲器接口的雙向數(shù)據(jù)總線DATA、地址總線ADDR和PDS、RW等片選信號實現(xiàn)對片外存儲器的讀寫訪問。外部存儲器的讀寫接口如圖2所示。
32位DSP的CPU由定點乘法器、算術(shù)邏輯運算單元ALU、移位器、輔助寄存器運算單元ARAU以及寄存器隊列組成。
圖2 外部存儲器讀寫接口
為提高并行性,CPU內(nèi)部采用4條32位的數(shù)據(jù)總線CPU1、CPU2、REG1、REG2,2條24位地址總線DADDR1、DADDR2。REG1、REG2總線與內(nèi)核寄存器隊列相連,CPU1、CPU2總線與核外數(shù)據(jù)總線相連。CPU內(nèi)部結(jié)構(gòu)圖如圖3所示。CPU1、CPU2、REG1、REG2總線通過復(fù)用器與內(nèi)核數(shù)據(jù)總線DBUS相連,CPU與核外交互的接口總線為讀數(shù)據(jù)總線DB_R、寫數(shù)據(jù)總線DB_W、程序總線PB、數(shù)據(jù)地址總線DAB和程序地址總線PAB。控制信號DMEM_RW控制數(shù)據(jù)總線的讀寫,PDS_SEL控制程序空間和數(shù)據(jù)空間的選擇。當讀取指令時,PDS_SEL為低,程序計數(shù)器PC產(chǎn)生24位程序地址給程序地址總線PAB,通過PAB尋址,程序指令送入32位的程序總線PB上,PB再把指令送入指令寄存器IR進行指令譯碼。當讀寫數(shù)據(jù)時,PDS_SEL為高,ARAU0、ARAU1產(chǎn)生24位的地址給2條內(nèi)核數(shù)據(jù)地址總線DADDR1和DADDR2,DADDR1和DADDR2復(fù)用到DADDR總線并生成24位數(shù)據(jù)地址總線DAB。根據(jù)DAB和讀寫信號DMEM_RW,讀數(shù)據(jù)時把DAB尋址的數(shù)據(jù)通過核外DB總線讀到32位數(shù)據(jù)讀總線DB_R上并送入內(nèi)核的32位雙向總線DBUS上,寫數(shù)據(jù)時把內(nèi)核DBUS上的數(shù)據(jù)寫到數(shù)據(jù)寫總線DB_W上并把它送出到核外DB總線上。
24個寄存器組成寄存器隊列,包括8個通用寄存器R0~R7、8個輔助寄存器AR0~AR7、數(shù)據(jù)頁指針DP、索引寄存器IR0~IR1、塊長度寄存器BK、堆棧指針SP和狀態(tài)寄存器ST、程序計數(shù)器PC和指令寄存器IR。
圖3 CPU結(jié)構(gòu)圖
2.3.1 ALU
ALU在單周期內(nèi)完成對32位整數(shù)、32位邏輯的運算。邏輯運算包括與、或、非、異或、左右移位等操作。移位器在單周期內(nèi)完成左右移位操作,移位數(shù)最多可達32位。CPU總線或REG總線上的數(shù)據(jù)經(jīng)移位器移位后送入ALU運算單元,ALU根據(jù)指令譯碼完成相應(yīng)的運算后把結(jié)果送入32位通用寄存器R0~R7。
2.3.2 乘法器
32位DSP的乘法器采用移位加方式,在單周期內(nèi)實現(xiàn)16×16位的無符號數(shù)和帶符號數(shù)的乘法運算。假設(shè)兩個16位的帶符號數(shù)為A16和B16,其中A16=a15a14……a2a1a0=-a15×215+=-a15×215+A15,B16=b15b14……b2b1b0=-b15×215+=-b15×215+B15,其中A15、B15為無符號數(shù)。乘積P32=A16×B16=(-a15×215+A15)×(-b15×215+B15)=a15×b15×230+(-a15×B15)×215+(-b15×A15)×215+A15×B15,其中第1項和第4項為無符號數(shù)乘法,第2和第3項為負數(shù)。因負數(shù)可以表示為取反加1即-N=+1,所以-a15×B15=-a15×,可以表示為1×216+1×215++1。同理,-b15×A15也可用上述方法表示,而無符號數(shù)乘法就是各位相與的過程。
由以上分析可知,根據(jù)乘法運算規(guī)則,整數(shù)相與、負數(shù)相與后取反加一再移位相加即可實現(xiàn)所有乘積項相加,所以用簡單的與門、與非門、移位器和加法器就能實現(xiàn)該乘法運算。
乘法器的乘數(shù)和被乘數(shù)來自CPU總線或REG總線,32位乘積存入寄存器R0~R7中。
2.3.3 輔助寄存器運算單元ARAU
ARAU通過加、減等操作完成與地址相關(guān)的運算,ARAU可以操作8個32位輔助寄存器AR0~AR7,并對其進行修改,產(chǎn)生24位地址。AR也可以作為32位的通用寄存器供乘法器和ALU使用。
32位DSP單周期可以實現(xiàn)3操作數(shù)操作,兩個獨立執(zhí)行的ARAU同時生成兩個地址,以提高尋址能力和數(shù)據(jù)吞吐率。
在間接尋址中,ARAU可以通過自動加一、減一實現(xiàn)順序?qū)ぶ?,通過加減偏移量實現(xiàn)偏移量尋址,通過加減32位索引地址IR0/1,實現(xiàn)索引尋址。
循環(huán)尋址時ARAU用32位的塊寄存器BK標示數(shù)據(jù)塊的大小,ARAU把輔助寄存器中的地址加減循環(huán)塊大小BK產(chǎn)生新的地址。
位反尋址時ARAU把輔助寄存器地址以位反加減的方式產(chǎn)生新的地址。
2個ARAU的輸入是偏移量DISP0、索引寄存器IR0/1、循環(huán)塊寄存器BK或輔助寄存器AR0~AR7中的一個,計算后的24位地址輸出到AR0~AR7以更新輔助寄存器中的地址或直接輸出到數(shù)據(jù)地址總線DADDR1、DADDR2。
通過多種尋址方式的譯碼控制ARAU的地址計算方式。
2.3.4 流水線
電路采用4級流水線方式,包括取指(F)、譯碼(D)、讀數(shù)(R)和執(zhí)行(E)。在取指階段,通過PAB總線從存儲空間取指令到PB,送入IR,刷新程序計數(shù)器PC。在譯碼階段,指令譯碼控制器產(chǎn)生與操作數(shù)相關(guān)的指令譯碼,ARAU產(chǎn)生與數(shù)據(jù)地址相關(guān)的輔助寄存器尋址運算結(jié)果,并產(chǎn)生指令操作數(shù)相關(guān)的地址(讀數(shù)據(jù)地址)到DAB總線。在讀數(shù)據(jù)階段,數(shù)據(jù)從存儲空間讀到數(shù)據(jù)總線DB_R上。在執(zhí)行階段,將指令中指定的數(shù)據(jù)或是存儲空間讀出的數(shù)據(jù)執(zhí)行專門的操作,如加減、乘除、位運算,更新狀態(tài)寄存器ST標志,結(jié)果通過DB_W總線寫入存儲空間(或通過REG總線寫入專用寄存器)。
圖4是4級流水線操作示意圖,圖5是流水線邏輯示意圖。
圖4 4級流水線示意圖
圖5 流水線邏輯圖
32位DSP指令集包括實現(xiàn)加法、減法、乘法、左右移位、存儲、跳轉(zhuǎn)、堆棧和邏輯運算等操作。DSP取指令后放入指令寄存器IR,通過指令譯碼控制ALU、ARAU、移位器和乘法器的動作,同時實現(xiàn)程序控制,包括跳轉(zhuǎn)、堆棧、條件返回等操作。
32位DSP提供寄存器尋址、直接尋址、間接尋址、立即尋址、PC相關(guān)尋址、循環(huán)尋址、位反尋址等7種靈活的尋址方式。直接尋址是地址由32位數(shù)據(jù)頁指針DP中的低8位和指令中的低16位組成。DP中的低8位用來作為直接尋址中的數(shù)據(jù)頁,共256頁,每頁64 K字長度;寄存器尋址是操作數(shù)直接在CPU寄存器中;立即尋址的操作數(shù)是一個16位或24位的立即數(shù);PC相關(guān)尋址是一個16位或24位的偏移量載入PC;間接尋址是輔助寄存器通過ARAU運算生成操作數(shù)的地址;循環(huán)和位反尋址常用于濾波、FFT等DSP算法中。
32位DSP采用標準單元的設(shè)計方法,基于0.5 μm標準單元庫正向設(shè)計。通過功能規(guī)范定義、模塊劃分、RTL代碼、RTL仿真、DC綜合、門級前后仿、布局布線、靜態(tài)時序分析、晶體管級后仿到出GDSII數(shù)據(jù)等流程。該設(shè)計流程如圖6所示。
該電路集成規(guī)模為7萬門,芯片面積10.0 mm×8.4 mm,版圖如圖7所示。經(jīng)流片后測試得到該芯片的工作電流為108 mA,靜態(tài)電流為15 μA,最高工作頻率36 MHz,單指令周期55.5 ns,功能和性能達到設(shè)計目標。
圖6 設(shè)計流程
通過對DSP的架構(gòu)及總線結(jié)構(gòu)、ALU、乘法器、ARAU和流水線等分析,弄清了CPU中的各個關(guān)鍵部件及其實現(xiàn)方式。采用標準單元的正向設(shè)計流程,實現(xiàn)了一款基于0.5 μm工藝的DSP芯片。該芯片集成度7萬門,經(jīng)過流片、測試后,該芯片的工作頻率可達36 MHz,動態(tài)功耗594 mW,所設(shè)計的指令和外設(shè)等功能均工作正常,達到了預(yù)期的設(shè)計目標。
圖7 32位DSP芯片版圖
[1] 支長義,等. 浮點DSP原理及應(yīng)用[M]. 成都:電子科技大學(xué)出版社,2003.
[2] 帕特森·亨尼西. 計算機組成與設(shè)計——硬件/軟件接口[M]. 北京:機械工業(yè)出版社,2010.
[3] 虞希清. 專用集成電路設(shè)計實用教程[M]. 杭州:浙江大學(xué)出版社,2007.
[4] 李亞民. 計算機原理與設(shè)計——Verilog HDL版[M]. 北京:清華大學(xué)出版社,2011.