曾瑞淮,鐘冬慶 摘要:本文從移位器的功能描述、結(jié)構(gòu)分析入手,并詳細(xì)闡述了一款16位dsp處理器的高頻率低功耗移位器的三個模塊的設(shè)計(jì)。
關(guān)鍵詞:移位器;dsps;設(shè)計(jì) 在一般的微處理器中,沒有單獨(dú)設(shè)計(jì)的移位器,移位功能在算術(shù)邏輯單元中實(shí)現(xiàn)。但由于dsp處理器對運(yùn)算速度要求較高,通過alu來實(shí)現(xiàn)一些移位功能無法滿足其要求,所以在dsp中一般設(shè)有專門的移位器。移位器不僅可以提高一般移位功能的速度,還可以更加高速地實(shí)現(xiàn)與2的n次冪的乘法運(yùn)算。因此對dsp處理器的移位器(shifter)的研究很有必要的?! ∫莆黄魇鞘菆?zhí)行單元的重要組成部分,所有算法的實(shí)現(xiàn)都是由執(zhí)行單元的基本功能組合而成,所有的其他單元例如控制、數(shù)據(jù)通路都是為執(zhí)行單元服務(wù)的,控制執(zhí)行部件的具體動作,為執(zhí)行部件提供充分的數(shù)據(jù)。嵌入式定點(diǎn)16位dsp的執(zhí)行單元結(jié)構(gòu)如圖1所示。dsp執(zhí)行單元包含3個子單元:16位(結(jié)果為40位)移位單元(shift)、16位算術(shù)邏輯單元(alu)和16位(結(jié)果為40位)乘法累加單元(mac)。并行的對數(shù)據(jù)寄存器堆(dreg)進(jìn)行數(shù)據(jù)的存取。dreg包含16個16位的通用寄存器,流水線的最后一級從dreg中讀取數(shù)據(jù),將指令執(zhí)行的結(jié)果,寫回到dreg中,而所有的這些運(yùn)算操作在一個時鐘周期內(nèi)完成[1]?! ?6位dsp處理器的移位器主要執(zhí)行的是兩類功能:一是實(shí)現(xiàn)移位操作,它的輸入是16位,移位后的輸出是40位。二是指數(shù)檢測,即從16位的輸入數(shù)據(jù)中檢測出前導(dǎo)冗余位的位數(shù)(從高位起),作為結(jié)果指數(shù)輸出到寄存器。 移位操作主要有三種:邏輯移位,算術(shù)移位和規(guī)格化操作。它們都可以在左右兩個方向進(jìn)行,但不能進(jìn)行循環(huán)移位。執(zhí)行邏輯移位時,它的輸入看作是無符號數(shù),移位后左右兩邊的空位均用0填充;算術(shù)移位時,輸入看作有符號補(bǔ)碼數(shù),移位后左邊的空位填充符號位,右邊補(bǔ)0;規(guī)格化操作和上述兩種移位操作相似,但擴(kuò)展位情況比較復(fù)雜一些,移位后右邊填0,左邊的空位要根據(jù)移位控制信號的不同情況填充0、符號位或算術(shù)狀態(tài)寄存器中的進(jìn)位標(biāo)志位ac。三種移位操作中移出邊界(sr39或sr0)的位都被舍棄?! ≈笖?shù)檢測的目的是進(jìn)行類似于定點(diǎn)到浮點(diǎn)的數(shù)據(jù)轉(zhuǎn)換。一個定點(diǎn)數(shù),可以用一個包含尾數(shù)和指數(shù)(也稱階碼)的浮點(diǎn)數(shù)來表示,這樣可以提高數(shù)據(jù)的表數(shù)范圍,同時使得我們的定點(diǎn)dsp能在不增加浮點(diǎn)算法開銷的情況下獲得浮點(diǎn)dsp的某些運(yùn)算能力。指數(shù)檢測(也稱為指數(shù)提?。┑慕Y(jié)果就作為指數(shù),然后用這個指數(shù)作為移位控制碼對輸入數(shù)據(jù)進(jìn)行規(guī)格化操作,就得到了尾數(shù)。也可以采用這個方法使一串?dāng)?shù)據(jù)(數(shù)據(jù)塊)共用同一個指數(shù),只是各自的尾數(shù)不同,這種數(shù)據(jù)格式稱為塊浮點(diǎn)格式。1. 結(jié)構(gòu)分析 移位器陣列是一個16×40的桶形移位器[2]。它用于實(shí)現(xiàn)各種移位功能:邏輯移位,算術(shù)移位和規(guī)格化操作。輸入數(shù)據(jù)都是16位寬,移位后的40位結(jié)果分為三部分分別送到三個移位結(jié)果寄存器(統(tǒng)稱為sr):sr2,sr1,sr0。移位操作由一個移位控制碼(shift_code)和一個參考信號 (hi/lo) 來控制。移位控制碼是一個8位的有符號數(shù),它表示移位的方向和位數(shù),當(dāng)它為正時左移,為負(fù)時右移。根據(jù)不同的移位操作,它的來源有4個:移位器指數(shù)寄存器se的內(nèi)容,se寄存器的內(nèi)容的相反數(shù),來自指令的立即數(shù),指令立即數(shù)的相反數(shù)。對于算術(shù)移位和邏輯移位,移位控制碼來自移位器指數(shù)寄存器se或指令中的立即數(shù);對于規(guī)格化操作,移位控制碼為移位器指數(shù)寄存器se內(nèi)容或指令中立即數(shù)取反。移位器陣列可實(shí)現(xiàn)-128-127范圍內(nèi)任意位數(shù)的移位。參考信號(hi/lo)決定移位操作相對于輸出域的參考點(diǎn),它主要是為了實(shí)現(xiàn)32位雙精度數(shù)據(jù)移位操作而設(shè)的。當(dāng)參考信號為hi時,認(rèn)為輸入是32位數(shù)據(jù)的高16位,移位以40位輸出域的高16位為參考點(diǎn);當(dāng)參考信號為lo時,認(rèn)為輸入是32位數(shù)據(jù)的低16位,移位的參考點(diǎn)為輸出域的低16位。連續(xù)進(jìn)行兩次不同參考點(diǎn)的16位輸入的移位操作,然后把兩個結(jié)果相“或”,就可實(shí)現(xiàn)一個雙精度32位數(shù)據(jù)的移位操作。移位擴(kuò)展位(x)就是移位操作后左邊的填充位,根據(jù)不同的移位操作,這個擴(kuò)展位可以是0、輸入數(shù)的符號位或astat中的進(jìn)位標(biāo)志位ac。若為邏輯移位,擴(kuò)展位為0;若為算術(shù)移位,擴(kuò)展位為輸入符號位;若是規(guī)格化操作,情況較為復(fù)雜,又分3種情況[3]:如果是高位規(guī)格化,即參考信號為hi時,左移時擴(kuò)展位為符號位,右移時擴(kuò)展位為進(jìn)位標(biāo)志位ac;如果是低位規(guī)格化,無論左移還是右移,擴(kuò)展位都為0。 or/pass邏輯就可實(shí)現(xiàn)上述的“或”操作。它根據(jù)sr_or控制信號決定是否對結(jié)果進(jìn)行“或”操作,如果是普通的16位操作或32位雙精度數(shù)移位的第一次操作,就不需要進(jìn)行“或”操作,移位結(jié)果直接輸出到結(jié)果寄存器;若進(jìn)行的是32位操作的第2次16位移位操作,移位結(jié)果就要和第1次操作的結(jié)果相“或”后送到結(jié)果寄存器?! ≈笖?shù)檢測器實(shí)現(xiàn)的是從16位輸入中提取指數(shù)的功能,這個指數(shù)可看作冗余符號