16位DSP處理器的移位器功能及結(jié)構(gòu)分析
來(lái)源:IC解密處理器的移位器主要執(zhí)行的是兩類(lèi)功能:一是實(shí)現(xiàn)移位操作,它的輸入是16位,移位后的輸出是40位。二是指數(shù)檢測(cè),即從16位的輸入數(shù)據(jù)中檢測(cè)出前導(dǎo)冗余位的位數(shù)(從高位起),作為結(jié)果指數(shù)輸出到寄存器。移位操作主要有三種:邏輯移位,算術(shù)移位和規(guī)格化操作。它們都可以在左右兩個(gè)方向進(jìn)行,但不能進(jìn)行循環(huán)移位。執(zhí)行邏輯移位時(shí),它的輸入看作是無(wú)符號(hào)數(shù),移位后左右兩邊的空位均用0填充;算術(shù)移位時(shí),輸入看作有符號(hào)補(bǔ)碼數(shù),移位后左邊的空位填充符號(hào)位,右邊補(bǔ)0;規(guī)格化操作和上述兩種移位操作相似,但擴(kuò)展位情況比較復(fù)雜一些,移位后右邊填0,左邊的空位要根據(jù)移位控制信號(hào)的不同情況填充0、符號(hào)位或算術(shù)狀態(tài)寄存器中的進(jìn)位標(biāo)志位AC。三種移位操作中移出邊界(SR39或SR0)的位都被舍棄。
指數(shù)檢測(cè)的目的是進(jìn)行類(lèi)似于定點(diǎn)到浮點(diǎn)的數(shù)據(jù)轉(zhuǎn)換。一個(gè)定點(diǎn)數(shù),可以用一個(gè)包含尾數(shù)和指數(shù)(也稱(chēng)階碼)的浮點(diǎn)數(shù)來(lái)表示,這樣可以提高數(shù)據(jù)的表數(shù)范圍,同時(shí)使得我們的定點(diǎn)DSP能在不增加浮點(diǎn)算法開(kāi)銷(xiāo)的情況下獲得浮點(diǎn)DSP的某些運(yùn)算能力。指數(shù)檢測(cè)(也稱(chēng)為指數(shù)提?。┑慕Y(jié)果就作為指數(shù),然后用這個(gè)指數(shù)作為移位控制碼對(duì)輸入數(shù)據(jù)進(jìn)行規(guī)格化操作,就得到了尾數(shù)。也可以采用這個(gè)方法使一串?dāng)?shù)據(jù)(數(shù)據(jù)塊)共用同一個(gè)指數(shù),只是各自的尾數(shù)不同,這種數(shù)據(jù)格式稱(chēng)為塊浮點(diǎn)格式。
結(jié)構(gòu)分析
移位器陣列是一個(gè)16×40的桶形移位器[2]。它用于實(shí)現(xiàn)各種移位功能:邏輯移位,算術(shù)移位和規(guī)格化操作。輸入數(shù)據(jù)都是16位寬,移位后的40位結(jié)果分為三部分分別送到三個(gè)移位結(jié)果寄存器(統(tǒng)稱(chēng)為SR):SR2,SR1,SR0。移位操作由一個(gè)移位控制碼(SHIFT_CODE)和一個(gè)參考信號(hào) (HI/LO) 來(lái)控制。移位控制碼是一個(gè)8位的有符號(hào)數(shù),它表示移位的方向和位數(shù),當(dāng)它為正時(shí)左移,為負(fù)時(shí)右移。根據(jù)不同的移位操作,它的來(lái)源有4個(gè):移位器指數(shù)寄存器SE的內(nèi)容,SE寄存器的內(nèi)容的相反數(shù),來(lái)自指令的立即數(shù),指令立即數(shù)的相反數(shù)。對(duì)于算術(shù)移位和邏輯移位,移位控制碼來(lái)自移位器指數(shù)寄存器SE或指令中的立即數(shù);對(duì)于規(guī)格化操作,移位控制碼為移位器指數(shù)寄存器SE內(nèi)容或指令中立即數(shù)取反。移位器陣列可實(shí)現(xiàn)-128-127范圍內(nèi)任意位數(shù)的移位。參考信號(hào)(HI/LO)決定移位操作相對(duì)于輸出域的參考點(diǎn),它主要是為了實(shí)現(xiàn)32位雙精度數(shù)據(jù)移位操作而設(shè)的。當(dāng)參考信號(hào)為HI時(shí),認(rèn)為輸入是32位數(shù)據(jù)的高16位,移位以40位輸出域的高16位為參考點(diǎn);當(dāng)參考信號(hào)為L(zhǎng)O時(shí),認(rèn)為輸入是32位數(shù)據(jù)的低16位,移位的參考點(diǎn)為輸出域的低16位。連續(xù)進(jìn)行兩次不同參考點(diǎn)的16位輸入的移位操作,然后把兩個(gè)結(jié)果相“或”,就可實(shí)現(xiàn)一個(gè)雙精度32位數(shù)據(jù)的移位操作。移位擴(kuò)展位(X)就是移位操作后左邊的填充位,根據(jù)不同的移位操作,這個(gè)擴(kuò)展位可以是0、輸入數(shù)的符號(hào)位或ASTAT中的進(jìn)位標(biāo)志位AC。若為邏輯移位,擴(kuò)展位為0;若為算術(shù)移位,擴(kuò)展位為輸入符號(hào)位;若是規(guī)格化操作,情況較為復(fù)雜,又分3種情況[3]:如果是高位規(guī)格化,即參考信號(hào)為HI時(shí),左移時(shí)擴(kuò)展位為符號(hào)位,右移時(shí)擴(kuò)展位為進(jìn)位標(biāo)志位AC;如果是低位規(guī)格化,無(wú)論左移還是右移,擴(kuò)展位都為0。
OR/PASS邏輯就可實(shí)現(xiàn)上述的“或”操作。它根據(jù)SR_OR控制信號(hào)決定是否對(duì)結(jié)果進(jìn)行“或”操作,如果是普通的16位操作或32位雙精度數(shù)移位的第一次操作,就不需要進(jìn)行“或”操作,移位結(jié)果直接輸出到結(jié)果寄存器;若進(jìn)行的是32位操作的第2次16位移位操作,移位結(jié)果就要和第1次操作的結(jié)果相“或”后送到結(jié)果寄存器。
指數(shù)檢測(cè)器實(shí)現(xiàn)的是從16位輸入中提取指數(shù)的功能,這個(gè)指數(shù)可看作冗余符號(hào)位數(shù),它等于前導(dǎo)相同位數(shù)減1。為實(shí)現(xiàn)一個(gè)32位雙精度數(shù)的操作,指數(shù)提取要受到HIX_HI_LO信號(hào)的控制,這個(gè)信號(hào)表示三種不同的操作方式:高位(HI)、高位擴(kuò)展(HIX)、低位(LO)。若為HI操作方式,則認(rèn)為輸入是32位數(shù)據(jù)的高16位,提取出的結(jié)果直接輸出到移位器指數(shù)寄存器SE或移位器塊指數(shù)寄存器SB;若為HIX方式,輸入就被認(rèn)為可能是執(zhí)行ALU操作后已溢出的數(shù)據(jù),所以指數(shù)檢測(cè)器要考慮AV標(biāo)志位,如果AV位為1,表示數(shù)據(jù)已溢出,指數(shù)就為+1,否則,和(HI)選項(xiàng)的操作一樣;若為L(zhǎng)O方式,輸入就是32位數(shù)據(jù)的低16位,這時(shí)的檢測(cè)結(jié)果只有在高16位全為0或全為1、且低16位的冗余符號(hào)位和高16位相同時(shí)才有效,此時(shí),結(jié)果為低16位的指數(shù)加上16,否則結(jié)果不輸出。由此可見(jiàn),這里需要比較兩次輸入的符號(hào)位,所以在提取指數(shù)的同時(shí)可能還要更新移位輸入符號(hào)標(biāo)志位SS。實(shí)質(zhì)上,由于規(guī)格化時(shí)的移位控制碼是SE寄存器的內(nèi)容的相反數(shù),為實(shí)現(xiàn)左移,在上述HI和LO操作方式中,提取出的結(jié)果要取相反數(shù)才輸出到SE或SB寄存器。
指數(shù)比較邏輯用于找出輸入數(shù)據(jù)塊中各指數(shù)的最大值,實(shí)現(xiàn)塊浮點(diǎn)格式。如果要實(shí)現(xiàn)1個(gè)16位輸入的指數(shù)提取操作,只要把結(jié)果直接送到SE即可,不經(jīng)過(guò)比較邏輯;如果要實(shí)現(xiàn)一串?dāng)?shù)據(jù)的塊指數(shù)提取操作,則每次提取結(jié)果都要進(jìn)行一次比較,把較大的指數(shù)值保存在SB中,當(dāng)全部提取和比較完成后,SB中保存的就是各輸入數(shù)據(jù)的指數(shù)的最大值。