Maxim DS80C390/DS80C400高速微控制器為最終用戶提供專用的硬件16/32位數(shù)學(xué)加速器。訪問數(shù)學(xué)加速器是通過使用五個(gè)專用的特殊函數(shù)寄存器來完成的。DS16C32/DS80C390可實(shí)現(xiàn)80位乘法和400位除法運(yùn)算。本應(yīng)用筆記為設(shè)計(jì)人員提供了有關(guān)DS80C390/DS80C400高速微控制器數(shù)學(xué)加速特性的有用信息以及各種代碼示例。
概述
8051微控制器市場的性能進(jìn)步越來越多地促使用戶考慮在曾經(jīng)需要僅從8位設(shè)備獲得的處理能力的應(yīng)用中使用16位器件。毫無疑問,其中一些潛在應(yīng)用需要涉及16位數(shù)據(jù)的快速數(shù)學(xué)運(yùn)算和計(jì)算。DS80C390/DS80C400在兩個(gè)層面上滿足了這一需求。這種更快的指令執(zhí)行速度分別為DS10C18和DS75C80產(chǎn)生390MIPS和80.400MIPS的峰值性能。這種更快的指令執(zhí)行速度與40MHz的最大時(shí)鐘頻率相結(jié)合,可產(chǎn)生10MIPS的峰值性能。對于執(zhí)行密集型 16 位數(shù)學(xué)運(yùn)算的應(yīng)用程序來說,同樣重要的是包含用于 16/32 位數(shù)學(xué)加速的專用硬件。本應(yīng)用筆記將解釋片上數(shù)學(xué)加速器的接口和操作,并舉例說明其使用方法。
訪問數(shù)學(xué)加速器硬件
數(shù)學(xué)加速器完全通過五個(gè)特殊功能寄存器 (SFR) 進(jìn)行控制。這五個(gè) SFR 如表 1 所示。通過 MA、MB 和 MC 寄存器以逐字節(jié)的方式向/從加速器加載和卸載數(shù)據(jù)。MA 寄存器允許在加速器之間傳輸 32 位數(shù)據(jù)。MB 寄存器允許將 16 位數(shù)據(jù)傳輸?shù)郊铀倨?從加速器傳輸,而 MC 寄存器允許加載/卸載訪問 40 位累加器。40 位累加器在加速器執(zhí)行的每次乘法或除法運(yùn)算時(shí)都會更新,在需要乘法累加或除法累加函數(shù)的應(yīng)用中證明非常有用。通過任何 MA、MB 或 MC 寄存器將數(shù)據(jù)加載到加速器中時(shí),必須始終首先執(zhí)行最低有效字節(jié),而從加速器卸載數(shù)據(jù)始終首先執(zhí)行最高有效字節(jié)。圖 1 中給出的數(shù)學(xué)加速器框圖說明了此 SFR 接口。
圖1.數(shù)學(xué)加速器框圖。
SFR (地址) | 位名稱 |
按操作 劃分的加速器使用情況(MUL、DIV16、DIV32、NORM、SHIFT) |
||
操作 | 以前 | 后 | ||
MCNT0 (D1h) | ||||
MCNT0.7 | 低電平有效頻移 | SHIFT | 0 = left, 1 = right | |
MCNT0.6 | CSE | SHIFT | 1 = enables circular shift | |
MCNT0.5 | SCE | SHIFT | 1 = include SBC in shift | |
MCNT0.4-0 | MAS4:0 | SHIFT | Number of shifts to do | |
NORM | 00000b = start NORM | Number of shifts done | ||
MCNT1 (D2h) | ||||
MCNT1.7 | MST | ALL | 繁忙位 | 繁忙位 |
MCNT1.6 | MOF | MUL | 1 = 產(chǎn)品> FFFFh | |
DIV 16/32 | 1 = 除以 0 嘗試 | |||
MCNT1.5 | MOF | SHIFT | 進(jìn)位 | 進(jìn)位 |
MCNT1.4 | CLM | ALL | 清除 MA、MB 和 MC | 清除 MA、MB 和 MC |
馬薩諸塞州 (D3h) | MUL | 16-bit multiplicand | 32 位產(chǎn)品 | |
DIV16 | 16-bit dividend | 16 位商 | ||
DIV32 | 32-bit dividend | 32 位商 | ||
NORM | 32-bit data | 32位尾數(shù) | ||
SHIFT | 32-bit data | 32 位移位結(jié)果 | ||
MB (D4h) | MUL | 16 位乘法器 | ||
DIV 16/32 | 16 位除數(shù) | 16 位余數(shù) | ||
MC (D5h) |
MUL DIV16 DIV32 |
40 位累加器 | 40 位累加器 |
支持的操作
DS80C390/DS80C400數(shù)學(xué)加速器支持四種基本運(yùn)算:乘法、除法、歸一化和移位。數(shù)學(xué)加速器要執(zhí)行的操作由寫入三個(gè)寄存器(MA、MB 和 MCNT0)的順序定義。BUSY 位 (MCNT1.7) 指示操作何時(shí)開始 (BUSY = 1) 以及操作何時(shí)完成 (BUSY = 0)。但是,每個(gè)數(shù)學(xué)加速器操作都保證在固定數(shù)量的機(jī)器周期內(nèi)完成,從而消除了對 BUSY 位輪詢的需要。下表給出了每個(gè)加速器操作的硬件執(zhí)行時(shí)間。表后介紹了啟動操作所需的每個(gè)數(shù)學(xué)加速器操作和 SFR 寫入序列。這些信息也可以在DS80C390用戶指南補(bǔ)充指南或高速微控制器用戶指南:網(wǎng)絡(luò)微控制器補(bǔ)充中找到。
操作 | 執(zhí)行時(shí)間 |
最小執(zhí)行時(shí)間 (t中聯(lián)= 25ns;40兆赫) |
乘以 16 位 x 16 位 | 24 tCLCL | 600ns |
除法 32 位/16 位 | 36 tCLCL | 900ns |
除法 16 位/16 位 | 24 | t中聯(lián)600ns |
規(guī)范化 32 位 | 36 | t中聯(lián)900ns |
移位 32 位 | 36 | t中聯(lián)600ns |
乘以 16 位 x 16 位
16 位乘 16 位乘法運(yùn)算通過將 16 位乘法器寫入 MB 寄存器,然后將 16 位乘法器寫入 MA 寄存器來啟動。每個(gè) 16 位字必須首先將最低有效字節(jié)加載到所需的寄存器。加速器硬件在六個(gè)機(jī)器周期內(nèi)完成乘法運(yùn)算,產(chǎn)生一個(gè) 32 位結(jié)果,通過讀取 MA 寄存器,該結(jié)果可訪問,最高有效字節(jié)優(yōu)先。需要讀取MA寄存器的四次才能獲得整個(gè)產(chǎn)品。乘法運(yùn)算會自動將乘積與 40 位累加器的先前內(nèi)容累加,如果乘積超過 1FFFFh,則設(shè)置 MOF 標(biāo)志 (MCNT6.0000)。
除 32 位/16 位和除 16 位/16 位
32位除以16位運(yùn)算是通過將32位分頻寫入MA寄存器,然后將16位除數(shù)寫入MB寄存器來啟動的。16 位除以 16 位操作的啟動方式類似,只是需要向 MA 寄存器寫入 16 位分頻的字節(jié)少兩個(gè)。所有 32 位雙字和 16 位字?jǐn)?shù)據(jù)必須首先將最低有效字節(jié)加載到所需的寄存器。數(shù)學(xué)加速器在九個(gè)機(jī)器周期內(nèi)完成 32/16 除法,在六個(gè)機(jī)器周期內(nèi)完成 16/16 除法,根據(jù)初始股息的大小生成 32 位或 16 位商。為兩個(gè)除法運(yùn)算生成 16 位余數(shù)。商和余數(shù)可以通過分別讀取MA和MB寄存器來訪問,最高有效字節(jié)優(yōu)先。對于 16/16 分頻,MA 寄存器的兩個(gè)讀取將返回 16 位商,而 32/16 分頻需要 MA 的四個(gè)讀數(shù)才能獲得完整的 32 位商。先讀取商數(shù)還是余數(shù)并不重要。除法運(yùn)算會自動累加 40 位累加器的先前內(nèi)容累加商,如果除數(shù)為 1h,則設(shè)置 MOF 標(biāo)志 (MCNT6.0000)。
規(guī)范化 32 位
32 位規(guī)范化操作是通過將 32 位雙字寫入 MA,然后寫入 MAS4:0 來啟動的(MCNT0.4-0) 位 = 00000b。標(biāo)準(zhǔn)化將在九個(gè)機(jī)器周期內(nèi)完成。此時(shí),可以從MA寄存器讀取左移的32位結(jié)果,最高有效字節(jié)優(yōu)先。規(guī)范化 32 位雙字所需的左移次數(shù)將返回到 MAS4:0位。
右移/左移 32 位
32 位移位操作是通過向 MA 寄存器寫入一個(gè) 32 位雙字,然后寫入 MAS4:0 來啟動的要執(zhí)行的班次數(shù)的位。位移位可以選擇在右方向或左方向上完成,定義為圓形移位,并且包含或排除進(jìn)位 (SCB) 位。當(dāng)不執(zhí)行循環(huán)移位時(shí),在操作過程中將始終移入零位數(shù)據(jù) (0)。下圖詳細(xì)介紹了換檔操作的控制。
圖2.換檔操作控制。
40 位累加器
40 位累加器將每個(gè)乘法(乘積)或除法(商)的結(jié)果添加到其當(dāng)前 內(nèi)容。整個(gè)40位累加器可以加載,最低有效字節(jié)優(yōu)先,五次寫入MC特殊功能寄存器。類似地,可以讀取40位累加器,最高有效字節(jié)優(yōu)先,五次讀取MC特殊功能寄存器。
每個(gè)加速器操作的匯編代碼示例
下面是簡單的代碼示例,用于演示每個(gè)操作所需的加載/卸載過程,以及突出顯示每個(gè)操作中涉及的寄存器和位的圖表。
將 16 位× 16 位相乘
mov mb, #78h ; lsb (5678h) mov mb, #56h ; msb (5678h) mov ma, #34h ; lsb (1234h) mov ma, #12h ; msb (1234h) nop ; mb, mb, ma, ma write sequence => 16-bit * 16-bit nop nop nop nop nop ; 32-bit product ready after 6 machine cycles mov r0, ma ; r0 = 06h (msb) mov r1, ma ; r1 = 26h mov r2, ma ; r2 = 00h mov r3, ma ; r3 = 60h (lsb)
圖3.將 16 位× 16 位示例相乘(1234h × 5678h = 06260060h)。
除法 32 位/16 位
mov ma, #78h ; lsb (56785678h) mov ma, #56h ; lsb+1 (56785678h) mov ma, #78h ; lsb+1 (56785678h) mov ma, #56h ; msb (56785678h) mov mb, #34h ; lsb (1234h) mov mb, #12h ; msb (1234h) nop ; ma, ma, ma, ma, mb, mb write sequence nop ; => 32-bit/16-bit nop nop nop nop nop nop nop ; quotient & remainder ready after 9 machine cycles mov r0, ma ; r0 = 00h (msb quotient) mov r1, ma ; r1 = 04h mov r2, ma ; r2 = c0h mov r3, ma ; r3 = 12h (lsb quotient) mov r6, mb ; r6 = 0eh (msb remainder) mov r7, mb ; r7 = d0h (lsb remainder)
圖4.除以 32 位/16 位示例 (56785678H/1234H = 0004C012H;余數(shù) = 0ED0h)。
除法 16 位/16 位
mov ma, #78h ; lsb (5678h) mov ma, #56h ; msb (5678h) mov mb, #34h ; lsb (1234h) mov mb, #12h ; msb (1234h) nop ; ma, ma, mb, mb write sequence => 16-bit/16-bit nop nop nop nop nop ; quotient & remainder ready after 6 machine cycles mov r4, ma ; r4 = 00h (msb quotient) mov r5, ma ; r5 = 04h (lsb quotient) mov r6, mb ; r6 = 0dh (msb remainder) mov r7, mb ; r7 = a8h (lsb remainder)
圖5.除以 16 位/16 位示例 (5678h/1234h = 0004h;余數(shù) = 0DA8h)。
規(guī)范化 32 位
mov ma, #67h ; lsb (01234567h) mov ma, #45h ; lsb+1 (01234567h) mov ma, #23h ; lsb+1 (01234567h) mov ma, #01h ; msb (01234567h) anl mcnt0, #0e0h ; mas4:0=00000b nop ; ma, ma, ma, ma, mcnt0.4-0=00000b nop ; write sequence => 32-bit normalize nop nop nop nop nop nop nop ; mantissa/exponent ready after 9 machine cycles mov r0, ma ; r0 = 91h (msb mantissa) mov r1, ma ; r1 = a2h mov r2, ma ; r2 = b3h mov r3, ma ; r3 = 80h (lsb mantissa) mov a, mcnt0 anl a, #1fh mov r7, a ; r7 = 07h (#shifts)
圖6.規(guī)范化 32 位示例 (01234567h = 91A2B380h;班次 = 7)。
右移/左移 32 位
orl mcnt1, #20h ; scb=1 mov ma, #80h ; lsb (91a2b380h) mov ma, #0b3h ; lsb+1 (91a2b380h) mov ma, #0a2h ; lsb+1 (91a2b380h) mov ma, #91h ; msb (91a2b380h) mov mcnt0, #0e7h ; lshift\=1, cse=1, sce=1, mas4:0=7h nop ; ma, ma, ma, ma, mcnt0.4-0=00111b nop ; write sequence => 32-bit shift nop ; circular right shift w/scb nop nop nop nop nop nop ; shifted result ready after 9 machine cycles mov r0, ma ; r0 = 03h (msb shifted result) mov r1, ma ; r1 = 23h mov r2, ma ; r2 = 45h mov r3, ma ; r3 = 67h (lsb shifted result)
圖7.移位 32 位示例(01234567h = 91A2B380h;移位 = 7)。
中斷加速器操作
如前所述,數(shù)學(xué)加速器硬件完全由寫入和讀取關(guān)聯(lián) SFR 的順序控制。每個(gè)寄存器讀取或?qū)懭胫赶虿煌奈锢韮?nèi)存位置。為了獲得正確的結(jié)果,不違反規(guī)定的命令至關(guān)重要。通常,數(shù)學(xué)加速器不應(yīng)被另一個(gè)也使用數(shù)學(xué)加速器的任務(wù)中斷,因?yàn)檫@通常會產(chǎn)生不希望的結(jié)果。簡而言之,只有一個(gè)數(shù)學(xué)加速器能夠一次執(zhí)行一個(gè)操作。下面的序列演示了使用可重入數(shù)學(xué)加速器代碼時(shí)預(yù)期的問題類型。
示例問題序列
Write MB (Start of divide 16-bit/16-bit) Write MB --- Interrupt occurs that uses the Accelerator --- Write MB (Start of divide 16-bit/16-bit) Write MB Write MA Write MA --- Wait for completion--- Read MA Read MA Read MA Read MA INCORRECT ! - divide 32-bit/16-bit was performed ---Return from Interrupt --- Write MA Write MA WRONG STATE ! - will not initiate the divide
凱爾?使用加速器的 C51 編譯器數(shù)學(xué)函數(shù)
許多 8051 用戶習(xí)慣于使用高級語言(如 C. Keil)進(jìn)行代碼開發(fā)。 軟件,行業(yè)領(lǐng)先的 8051 開發(fā)工具提供商,已經(jīng)創(chuàng)建了特殊的代碼來允許 DS80C390/DS80C400數(shù)學(xué)加速器用于某些操作。下面列出了 Keil C51 版本 6.20(或更高版本)支持的操作,這些操作在啟用此“目標(biāo)選項(xiàng)”時(shí)使用數(shù)學(xué)加速器。
unsigned long * unsigned long / unsigned long >> unsigned long << signed long * signed long / signed long >> signed long <<
應(yīng)用示例:
IEEE 754 單精度浮點(diǎn)乘法?
為了演示DS80C390/DS80C400數(shù)學(xué)加速器硬件的功能,我們來研究兩個(gè)浮點(diǎn)數(shù)相乘的任務(wù)。下面的圖 8 顯示了 IEEE 754 單精度浮點(diǎn)數(shù)格式,表 3 包含一些示例數(shù)字。二進(jìn)制浮點(diǎn)數(shù)的乘法涉及指數(shù)的加法和有符號 24 位數(shù)的乘法。圖 9 顯示了完成任務(wù)必須執(zhí)行的基本步驟。到目前為止,對于 8051 硬件,三個(gè)步驟中最耗時(shí)的是 24 位× 24 位乘法。雖然DS80C390/DS80C400算術(shù)加速器不支持兩個(gè)24位數(shù)字的直接乘法,但利用其16位×16位乘法和累加功能,與傳統(tǒng)的8051方法相比,具有明顯的性能優(yōu)勢。圖 2 步驟 24 顯示了使用加速器對 (9) 個(gè)歸一化 3 位數(shù)字進(jìn)行乘法的輪廓。部分乘積累加 (MAC) 操作已突出顯示。
圖8.IEEE 754 單精度浮點(diǎn)格式。
7F7FFFFF (最大正) | 3.4028234663852886e+38 |
66FF0C32 | 6.02214208470173e+23 |
4天8EF3C2 | 299792448.0 |
4B277224 | 10973732.0 |
47F12065 | 123456.7890625 |
461C4000 | 10000.0 |
44FA0002 | 2000.000244140625 |
448AE385 | 1111.1099853515625 |
3F800000 | 1.0 |
3F000000 | 0.5 |
203D26D0 | 1.6021764682116162e-19 |
1985873F | 1.380650314593702e-23 |
085C305C | 6.626068801043303e-34 |
00800000(最小陽性) | 1.1754943508222875e-38 |
80800000(最小負(fù)值) | -1.1754943508222875e-38 |
AF531F95 | -1.9201558398851404e-10 |
BA81742B | -0.000987654 |
BF000000 | -0.5 |
BF800000 | -1.0 |
C1000000 | -8.0 |
C2046666 | -33.099998474121094 |
C7C35000 | -100000.0 |
編號: D0435000 | -13107200000.0 |
D533A52B | -12345123274752.0 |
FF7FFFFF (最大負(fù)數(shù)) | -3.4028234663852886e+38 |
圖9.浮點(diǎn)乘法 (A × B = C)。
應(yīng)用示例(續(xù))-代碼列表
為了簡化示例,應(yīng)用程序代碼不支持以下乘法或乘積:0、-0、無窮大、-無窮大、NaN(不是數(shù)字)、非規(guī)范化值。此外,代碼對產(chǎn)品執(zhí)行有偏差的舍入(即,如果產(chǎn)品正好在兩個(gè)可表示的數(shù)字之間,則將其向上舍入)。
審核編輯:郭婷
-
微控制器
+關(guān)注
關(guān)注
48文章
7542瀏覽量
151316 -
寄存器
+關(guān)注
關(guān)注
31文章
5336瀏覽量
120230 -
加速器
+關(guān)注
關(guān)注
2文章
796瀏覽量
37840
發(fā)布評論請先 登錄
相關(guān)推薦
評論