国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

VRS51L3074上增強(qiáng)型算術(shù)單元的高效算術(shù)運(yùn)算*

2010-06-25 02:45:04李翔李智王勇軍
關(guān)鍵詞:加法器平方根算術(shù)

李翔,李智,王勇軍

(桂林電子科技大學(xué) 電子工程學(xué)院,桂林 541004)

李翔(研究生),研究方向?yàn)樽詣?dòng)測(cè)試總線與系統(tǒng)。

引 言

VRS51L3074是美國(guó) Ramtron(瑞創(chuàng))公司推出的 8位單片機(jī)VRS51L3xxx系列的成員。該單片機(jī)擁有許多優(yōu)良的性能特點(diǎn):峰值速度高達(dá)40MIPS的增強(qiáng)型8051內(nèi)核,大容量的片上存儲(chǔ)器(64 KB Flash與 4 KB擴(kuò)展RAM),寫入速度及重復(fù)擦寫次數(shù)遠(yuǎn)超過(guò)EEPROM的鐵電存儲(chǔ)器(F-RAM),多達(dá)8通道的PWM輸出等。

增強(qiáng)型算術(shù)單元(Enhanced Arithmetic Unit,EAU)是VRS51L3074單片機(jī)的眾多外圍模塊之一。該模塊可以執(zhí)行類似于通用DSP芯片中的乘加(MAC)操作,即2個(gè)16位二進(jìn)制數(shù)相乘后,再將32位乘積與另一個(gè)32位數(shù)相加。并且,乘加運(yùn)算所得結(jié)果還可進(jìn)行桶形移位,整個(gè)“乘—加—移位”操作只需1個(gè)時(shí)鐘周期即可完成。不難看出,如果能充分利用VRS51L3074的EAU,可以使該單片機(jī)更高效地執(zhí)行復(fù)雜的算術(shù)運(yùn)算。

1 EAU的原理與使用

EAU的運(yùn)算模式可分為3種:乘加運(yùn)算、32位加法運(yùn)算和16位整數(shù)除法運(yùn)算。前兩種模式還可以附加一次移位操作。

從硬件結(jié)構(gòu)的角度來(lái)看,EAU可以再細(xì)分為4個(gè)單元:16×16位乘法器、32位加法器、32位桶型移位器和16位除法器。這4個(gè)單元并不是可以任意搭配使用的,而上述的3種EAU工作模式正好對(duì)應(yīng)了實(shí)際可用的3種搭配方式,即:乘法器—加法器—移位器連用,加法器—移位器連用,以及單獨(dú)使用除法器。

EAU中的乘法器和除法器都只能執(zhí)行有符號(hào)數(shù)的運(yùn)算,加法器則只能執(zhí)行無(wú)符號(hào)加法,而桶型移位器可以設(shè)置為將其輸入值看作有符號(hào)數(shù)或者無(wú)符號(hào)數(shù)。關(guān)于如何選擇要執(zhí)行的運(yùn)算及其操作數(shù),VRS51L3074的手冊(cè)中已有詳細(xì)介紹,不再贅述。

2 EAU應(yīng)用舉例

以下要介紹的是利用EAU進(jìn)行計(jì)算的實(shí)例。所有代碼均在KeiluVision3集成開發(fā)環(huán)境下編譯通過(guò)(需用到Ram tron公司提供的VRS51L3074_keil.h頭文件)。

2.1 32位有符號(hào)數(shù)開平方算法

設(shè)被開方數(shù)為x,其平方根為y,并且有y=a14?214+a13?213+…+a0?20。y的最高位為符號(hào)位,此處僅計(jì)算算術(shù)平方根,故符號(hào)位為0。

首先來(lái)看如何確定a14。如果該位實(shí)際為0,即y=a13?213+…+a0?20<214,則必有 x<(214)2;反之,若該位實(shí)際為1,則必有y≥214,即x≥(214)2。因此,要確定a14,只需將其置1,并比較此時(shí)的y2(不妨稱此時(shí)的 y為“試根”)與x。若y2≤x,則a14=1,反之 a14=0。特別地,如果此時(shí)恰有y2=x,則y=214就是所求平方根的準(zhǔn)確值。

又如a14~aN(0<N≤14)各位已確定,當(dāng)aN-1=1時(shí),有y=a14?214+…+aN?2N+2N-1+…。因此,必有 x≥(a14?214+…+aN?2N+2N-1)2。故可先置 aN-1=1,并比較此時(shí)的y2與 x:若 y2≤x,則aN-1=1成立;反之,aN-1=0。特別地,如果恰有y2=x,則此時(shí)的y就是所求平方根的準(zhǔn)確值。

上述算法的關(guān)鍵在于,求試根的平方并將其與被開方數(shù)比較大小。通過(guò)使用EAU的乘法器和加法器可以方便地實(shí)現(xiàn)該算法。代碼如下:

2.2 16位二進(jìn)制數(shù)轉(zhuǎn)BCD碼算法

將二進(jìn)制數(shù)轉(zhuǎn)換為BCD碼,通常是利用除法和取余運(yùn)算來(lái)實(shí)現(xiàn)。借助EAU的除法器,可以提高該算法的效率。代碼如下:

3 算法驗(yàn)證

在VRS51L3074單片機(jī)程序中,分別調(diào)用2.1小節(jié)中給出的函數(shù)l_sqrt以及KeilC51提供的浮點(diǎn)庫(kù)函數(shù)sqrt,利用定時(shí)器/計(jì)數(shù)器T 0記錄函數(shù)從調(diào)用到返回所花費(fèi)的時(shí)間(以系統(tǒng)時(shí)鐘周期為單位),結(jié)果如表1所列。

表1 l_sqrt函數(shù)與浮點(diǎn)庫(kù)函數(shù)對(duì)比

在調(diào)用浮點(diǎn)庫(kù)函數(shù)時(shí),編譯器會(huì)同時(shí)調(diào)用整數(shù)與浮點(diǎn)數(shù)相互轉(zhuǎn)換的函數(shù),其執(zhí)行時(shí)間也包含在表1所列的調(diào)用時(shí)間內(nèi)。從表1可以看出2.1小節(jié)所述算法的一個(gè)特點(diǎn):當(dāng)被開方數(shù)是完全平方數(shù),且平方根末尾有連續(xù)的若干位為0時(shí),計(jì)算過(guò)程會(huì)在算出其中第一個(gè)0后立即結(jié)束,計(jì)算時(shí)間也就相應(yīng)地減少了。

對(duì)于2.2小節(jié)所介紹的算法,由于其中沒(méi)有分支和跳轉(zhuǎn),執(zhí)行時(shí)間是固定的。同樣用T 0對(duì)其調(diào)用過(guò)程計(jì)時(shí),計(jì)數(shù)值總是為0x008c,即從函數(shù)調(diào)用到返回所需時(shí)間為140個(gè)時(shí)鐘周期。

4 EAU使用注意事項(xiàng)

從實(shí)踐經(jīng)驗(yàn)來(lái)看,在使用EAU時(shí),應(yīng)當(dāng)特別注意以下幾點(diǎn):

①EAU所對(duì)應(yīng)的 SFR均只能在 Page1中尋址,而UART 0、UART 1、SPI、I2C 以及 FRAM 等模塊所對(duì)應(yīng)的SFR只能在Page0中尋址。因此,當(dāng)EAU與上述模塊同時(shí)使用時(shí),必須注意切換當(dāng)前的SFR尋址頁(yè)面,即對(duì)DEVMEMCFG的最低位(SFRPAGE)進(jìn)行設(shè)置??紤]到EAU是唯一只能在SFR Page1尋址的模塊,可以僅在使用到EAU的函數(shù)或子程序中切換到Page1,并在返回前重新切換到Page0。2.1和2.2小節(jié)中的示例即采用此種方式。但更重要的是,如果在程序中啟用了UART、SPI、I2C等模塊的中斷,并且這些中斷可能會(huì)在使用EAU的過(guò)程中發(fā)生,那么就要在中斷服務(wù)程序的首尾分別進(jìn)行SFR尋址頁(yè)面的切換,或者在使用EAU的過(guò)程中屏蔽中斷。

②盡管EAU中的加法器執(zhí)行的是無(wú)符號(hào)數(shù)的加法,但是AUCONFIG2中的AUOV32這一標(biāo)志位并非是32位加法器的“進(jìn)位”標(biāo)志位,而是32位有符號(hào)數(shù)加法的“溢出”標(biāo)志位。也就是說(shuō),AUOV32標(biāo)志位置1的條件是:參與32位加法的2個(gè)操作數(shù)最高位均為0,而所得結(jié)果的最高位為1;或者2個(gè)操作數(shù)最高位均為1,而結(jié)果的最高位為0。正是利用這一點(diǎn),2.1小節(jié)的開平方算法中用0x80000000減去被開方數(shù),所得之差與試根的平方相加,從而利用AUOV32判斷被開方數(shù)與試根平方的相對(duì)大小。

③當(dāng)AUB0DIV被寫入時(shí),EAU的除法器即被啟用。按照VRS51L3xxx數(shù)據(jù)手冊(cè)上的介紹,每執(zhí)行一次對(duì)AUB0DIV的寫入,就啟動(dòng)一次除法運(yùn)算,并且每次除法運(yùn)算需用5個(gè)時(shí)鐘周期。然而,實(shí)踐表明,在除法器已被啟用的情況下,對(duì)AUA1、AUA0、AUB1或 AUB0DIV 中任一者執(zhí)行寫操作,都會(huì)立即影響除法器的輸出。正是由于這個(gè)原因,2.2小節(jié)的程序中,在寫入被除數(shù)和除數(shù)后不經(jīng)等待而直接讀取商,并且將余數(shù)暫存到tmp0和tmp1后再寫入AUA 0和AUA1。

④除法器啟用后,只有對(duì)AUB0執(zhí)行寫操作才能將其停用;否則,即使將EAU禁用后再啟用,或通過(guò)設(shè)置AUCONFIG2對(duì)其清零,EAU也會(huì)一直執(zhí)行除法,而不能作加法、乘法或移位?;谶@一點(diǎn),2.2小節(jié)中程序的結(jié)尾處對(duì)AUB0執(zhí)行了一次寫入。這是考慮到用EAU計(jì)算除法必然要寫AUB0DIV,而用EAU執(zhí)行加法、乘法或移位卻未必會(huì)用到AUB(2.1小節(jié)的程序中便沒(méi)有用到AUB),因此有必要在完成除法后進(jìn)行這樣的善后操作。

⑤除法器執(zhí)行的是有符號(hào)整數(shù)的除法,其結(jié)果(包括商和余數(shù))均為16位有符號(hào)數(shù)。如果商為負(fù)數(shù),除法器會(huì)將其向0取整,并得出相應(yīng)的余數(shù)。

結(jié) 語(yǔ)

VRS51 L3074的EAU具有16位數(shù)據(jù)寬度(對(duì)加法為32位)和僅1個(gè)時(shí)鐘周期的運(yùn)算時(shí)間,并且是一個(gè)獨(dú)立的外圍模塊。利用這一單元來(lái)執(zhí)行算術(shù)運(yùn)算,不僅可以大大縮短運(yùn)算時(shí)間,還能使51單片機(jī)固有的累加器瓶頸得到稍許緩解。

通過(guò)本文介紹的實(shí)例可以看到,EAU確實(shí)使得VRS51L3074具有比傳統(tǒng)51單片機(jī)更加強(qiáng)大的算術(shù)運(yùn)算能力。對(duì)單片機(jī)工程師來(lái)說(shuō),帶有EAU的VRS51L3074及其同系列產(chǎn)品,可以使他們憑借經(jīng)典的8051內(nèi)核及其開發(fā)環(huán)境來(lái)逼近DSP的運(yùn)算能力。

[1]趙振華,楊曉慶.基于VRS51L3074的三表數(shù)據(jù)采集系統(tǒng)[J].計(jì)算機(jī)與數(shù)字工程,2008(26),8:62-65,161.

猜你喜歡
加法器平方根算術(shù)
分段式高性能近似加法器設(shè)計(jì)
一種混合結(jié)構(gòu)的新型近似加法器
平方根易錯(cuò)點(diǎn)警示
“平方根”學(xué)習(xí)法升級(jí)版
通用加法器的邏輯實(shí)現(xiàn)與分析
電子世界(2018年1期)2018-01-26 04:58:08
如何學(xué)好平方根
幫你學(xué)習(xí)平方根
算算術(shù)
學(xué)算術(shù)
三旋光結(jié)構(gòu)一步無(wú)進(jìn)位加法器的設(shè)計(jì)
丰宁| 湘潭市| 呼图壁县| 武汉市| 林甸县| 疏勒县| 广州市| 青河县| 梅州市| 类乌齐县| 宁阳县| 高雄县| 和龙市| 咸宁市| 双流县| 和静县| 仁怀市| 丹棱县| 阳谷县| 南靖县| 商都县| 阳高县| 武清区| 安多县| 腾冲县| 大方县| 定远县| 高陵县| 东海县| 绥德县| 北安市| 师宗县| 樟树市| 云南省| 星座| 来宾市| 炉霍县| 马关县| 外汇| 广汉市| 获嘉县|