文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2014)12-0023-04
0 引言
ARM微處理器具有高性能,、低功耗特點(diǎn),,市場(chǎng)占有率上ARM微處理器超過了75%,其產(chǎn)品從最初的單核ARM7發(fā)展到現(xiàn)在的多核Cortex R系列,,相應(yīng)的指令集從最原始的ARMv1到現(xiàn)在的ARMv8,。每一種指令集都是在前一種指令集的基礎(chǔ)上增加若干指令用于提升性能,這樣微處理器保持了良好的向下兼容特性,,用于低端芯片的工程可以完美地移植到高端的芯片上,,具有良好的繼承性。其中ARMv4是第一次用于商業(yè)芯片的指令集,,因而ARMv4是ARM微處理器指令發(fā)展源泉,。對(duì)于ARM微處理的研究國(guó)內(nèi)目前主要集中在應(yīng)用軟件上,通過ARM微處理器設(shè)計(jì)了一段什么樣的代碼,,完成了什么樣的功能[1-2],,而對(duì)于微處理器自身的研究較少。參考文獻(xiàn)[3]利用ARMv4指令集加入wishbone總線設(shè)計(jì)了一款新的32位微控制器,,其微處理器結(jié)構(gòu),、流水線運(yùn)行模式都與原來一樣,沒有什么變化,。參考文獻(xiàn)[4]針對(duì)ARMv4指令集做了一個(gè)仿真平臺(tái),,主要用于監(jiān)控微處理器程序運(yùn)行狀態(tài),而對(duì)微處理器本身并沒有什么改變,。參考文獻(xiàn)[5]完成了一個(gè)指令模擬器,,即在一臺(tái)計(jì)算器上模擬一個(gè)ARM微處理器,其結(jié)構(gòu)和指令完全都是按照芯片標(biāo)準(zhǔn)設(shè)計(jì)沒有一點(diǎn)變化。中國(guó)龍芯處理器以類MIPS指令集為基礎(chǔ),,采用自己設(shè)計(jì)的架構(gòu)形成國(guó)產(chǎn)CPU,。本文借鑒龍芯的發(fā)展模式,以ARMv4指令集為基礎(chǔ),,采用哈佛結(jié)構(gòu),,優(yōu)化內(nèi)存訪問指令,充分利用資源共享,,減少芯片面積,,改進(jìn)后的嵌入式微處理器性能有所提升。
1 嵌入式微處理器模塊設(shè)計(jì)
1.1 結(jié)構(gòu)設(shè)計(jì)
當(dāng)前微處理器有兩種存儲(chǔ)結(jié)構(gòu),,馮·諾依曼結(jié)構(gòu)和哈佛結(jié)構(gòu),,如圖1所示。馮·諾依曼結(jié)構(gòu)是一種將程序指令存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器合并在一起的存儲(chǔ)器結(jié)構(gòu),。程序指令存儲(chǔ)空間和數(shù)據(jù)存儲(chǔ)空間指向同一個(gè)存儲(chǔ)器的不同物理位置,,共用一條數(shù)據(jù)總線,因而當(dāng)讀取指令時(shí),,就必須暫停讀取數(shù)據(jù),,兩者只能分別進(jìn)行操作。這種結(jié)構(gòu)會(huì)制約后面流水線的并行操作,。當(dāng)流水線上一條指令訪問存儲(chǔ)器時(shí),,下一條指令必須等待上條指令訪問結(jié)束才可以訪問存儲(chǔ)器,期間流水線需要插入NOP指令等待,,不能充分發(fā)揮流水線優(yōu)勢(shì),。哈佛結(jié)構(gòu)是一種將程序指令存儲(chǔ)和數(shù)據(jù)存儲(chǔ)分開的存儲(chǔ)器結(jié)構(gòu)。微處理器首先從程序指令存儲(chǔ)器中讀取程序指令內(nèi)容,,解碼后得到數(shù)據(jù)地址,,或直接從寄存器中直接獲得數(shù)據(jù)地址,再到相應(yīng)的數(shù)據(jù)存儲(chǔ)器中讀取數(shù)據(jù),,并進(jìn)行下一步的操作,。由于程序指令存儲(chǔ)和數(shù)據(jù)存儲(chǔ)分開,且擁有獨(dú)立的數(shù)據(jù)訪問總線,。因而讀取程序和讀取數(shù)據(jù)可以同時(shí)進(jìn)行,,這樣可以更好發(fā)揮流水線優(yōu)勢(shì),本文采用哈佛結(jié)構(gòu),。
1.2 單周期32位乘法器設(shè)計(jì)
乘法器是重要而復(fù)雜的一個(gè)運(yùn)算單元,,乘法器電路信號(hào)傳播路徑長(zhǎng),電路延時(shí)比較大,,針對(duì)乘法器很多人做了不同優(yōu)化,。參考文獻(xiàn)[6]引入流水線乘法器,通過分部計(jì)算減少了單次乘法器的運(yùn)算周期,適用于連續(xù)乘法器運(yùn)算,。但單次乘法器運(yùn)算,,使用時(shí)鐘周期反而隨流水線增長(zhǎng)而增加,并不適用于微處理器方面,。參考文獻(xiàn)[7]針對(duì)傳統(tǒng)Booth編碼方式進(jìn)行了優(yōu)化,,提出新的編碼方式。相比傳統(tǒng)Booth該方法減少了10%面積,。同時(shí)優(yōu)化部分積產(chǎn)生電路如圖2所示,在部分積相加階段采用單獨(dú)4-2壓縮器,,相比2個(gè)3-2壓縮器構(gòu)成的4-2壓縮器減少了門級(jí)電路,。整個(gè)乘法器運(yùn)算過程如圖3所示。
2 系統(tǒng)優(yōu)化
2.1 第二操作數(shù)獲取
ARMv4指令集中數(shù)據(jù)的運(yùn)算都是基于寄存器,,通常一條指令包括1-3個(gè)寄存器,,指明源寄存器和目的寄存器。指令中立即數(shù)一般會(huì)通過邏輯左移,、邏輯右移,、算術(shù)右移、循環(huán)右移,、帶擴(kuò)展的循環(huán)右移1位移位得到原立即數(shù),。這樣就需要5個(gè)32位的移位寄存器,這將增加芯片面積和功耗,。通??刂七壿媶卧牡倪壿嬞Y源少于運(yùn)算單元消耗的資源。通過對(duì)數(shù)據(jù)的前期操作最后使用一個(gè)邏輯左移實(shí)現(xiàn)上面5種移位功能[8-9],,大大減少邏輯資源,。邏輯右移轉(zhuǎn)換成邏輯左移的實(shí)現(xiàn)過程如下:通過將被移數(shù)據(jù)補(bǔ)足為64位,然后將右移偏移量取負(fù)數(shù),,通過左移負(fù)數(shù)個(gè)單位,,高位得到的32位結(jié)果就是邏輯右移的結(jié)果,移位示意圖如圖4所示,。
算術(shù)右移通過邏輯左移的實(shí)現(xiàn)過程如下:通過將被移數(shù)據(jù)補(bǔ)足為64位,,然后判斷被移數(shù)據(jù)的正負(fù)性,若為負(fù)數(shù)則將數(shù)據(jù)取反,,正數(shù)無需處理,。然后將右移偏移量取負(fù)數(shù),通過左移負(fù)數(shù)個(gè)單位,,保留高位得到的32位數(shù)據(jù)結(jié)果,。根據(jù)被移數(shù)據(jù)的正負(fù)性,若為負(fù)數(shù)則將數(shù)據(jù)取反,正數(shù)保持不變,,最后得到的結(jié)果就是算術(shù)右移的最終結(jié)果,,移位示意圖如圖5所示。
循環(huán)右移通過邏輯左移的實(shí)現(xiàn)過程如下:通過將被移數(shù)據(jù)補(bǔ)足為64位,,然后將右移偏移量取負(fù)數(shù),,通過左移負(fù)數(shù)個(gè)單位,將移位后的高32位數(shù)據(jù)與低32數(shù)據(jù)進(jìn)行與運(yùn)算得到結(jié)果即是循環(huán)右移的結(jié)果,,移位示意圖如圖6所示,。
帶擴(kuò)展的循環(huán)右移1位的實(shí)現(xiàn)過程如下:由于每次只能移位一個(gè)距離單位,只需要保留被移的數(shù)據(jù)的高31位,,然后將進(jìn)位標(biāo)志C放在數(shù)據(jù)的最高位,,即可實(shí)現(xiàn)帶擴(kuò)展的循環(huán)右移1位功能。移位示意圖如圖7所示,。
2.2 乘法器和乘加法器指令實(shí)現(xiàn)
ARMv4指令集中的乘法運(yùn)算有32位乘法運(yùn)算,,32位乘加運(yùn)算,無符號(hào)乘法運(yùn)算,,無符號(hào)乘加運(yùn)算,、有符號(hào)乘法運(yùn)算、有符號(hào)乘加運(yùn)算6種,。通常不同功能乘法器需要不同設(shè)計(jì),。這樣6類乘法需要2個(gè)乘法器和2個(gè)加法器。如果將有符號(hào)數(shù)在運(yùn)算前轉(zhuǎn)換成無符號(hào)數(shù),,最后將運(yùn)算結(jié)果根據(jù)之前的符號(hào)位轉(zhuǎn)換成有符號(hào)結(jié)果,,這樣就將有符號(hào)乘法轉(zhuǎn)換為無符號(hào)乘法。對(duì)于簡(jiǎn)單的乘法運(yùn)算轉(zhuǎn)換為被加數(shù)為0的乘加運(yùn)算,,這樣所有的乘法和乘加運(yùn)算都轉(zhuǎn)換為乘加運(yùn)算,。通過上面轉(zhuǎn)換后,6種乘法指令到最后都通過前置數(shù)據(jù)轉(zhuǎn)換共用一個(gè)乘加運(yùn)算實(shí)現(xiàn),,如圖8所示,。
3 FPGA實(shí)現(xiàn)和Modelsim驗(yàn)證
實(shí)驗(yàn)所用FPGA芯片為Altera EP4CE30F23C7, EP4CE30器件總共有28 848個(gè)邏輯單元,,器件中分布RAM有107 520 bit,。由于芯片具有豐富的RAM,微處理器內(nèi)部RAM和ROM均采用FPGA內(nèi)部RAM實(shí)現(xiàn),。整個(gè)工程采用Verilog語言編寫,,使用synplify pro 2011進(jìn)行綜合,在Quartus 13.0下進(jìn)行布局布線,。利用Modelsim10.0a進(jìn)行功能驗(yàn)證和時(shí)序分析,。設(shè)計(jì)ROM 32 KB,,RAM 16 KB,時(shí)鐘20 MHz,,其中內(nèi)部RAM,、ROM通過使用FPGA內(nèi)部M4K存儲(chǔ)單元組成。C語言測(cè)試代碼使用?滋Vision V4.22編譯生成,,由于FPGA無法直接初始化32位HEX文件,,需要將HEX文件轉(zhuǎn)換為MIF格式。代碼轉(zhuǎn)化軟件通過VC ++ 6.0編寫,。通過將轉(zhuǎn)換后將生成的MIF文件下載到ROM中進(jìn)行測(cè)試驗(yàn)證,。
3.1 移位寄存器仿真
指令中包含的第二操作常數(shù)一般是通過8位常數(shù)循環(huán)右移得到。因而并不是所有常數(shù)都是合法常數(shù),。例如 mov r0,#0x1000,;是合法指令,0x1000可以通過0x01循環(huán)右移20個(gè)單位得到,。但是mov r0,#0x1001;就是非法指令,,因?yàn)?x1001無法通過一個(gè)8位數(shù)據(jù)循環(huán)右移得到,。上文中通過一個(gè)邏輯左移實(shí)現(xiàn)4種邏輯運(yùn)算功能,為了驗(yàn)證其正確性下面將通過4條指令分別測(cè)試邏輯左移,、邏輯右移,、算術(shù)右移、循環(huán)右移4種功能,。測(cè)試代碼及理論運(yùn)算結(jié)果如下:
movr0,#0x01//將r0初始化為1,,結(jié)果為1
mov r0,r0,LSL#12//將r0邏輯左移12位,結(jié)果為0x1000
mov r0,r0,LSR#4//將r0邏輯右移4位,,結(jié)果為0x100
mov r0,r0,ASR#8//將r0算術(shù)右移8位,,結(jié)果為0x01
mov r0,r0,ROR#8//將r0循環(huán)右移8位,其結(jié)果位0x1000000
Modelsim仿真如圖9所示,。
從Modelsim仿真結(jié)果看出,,設(shè)計(jì)的單個(gè)邏輯左移移位寄存器很好的完成了上述4種功能。
3.2 乘法器和乘加法器仿真
經(jīng)過優(yōu)化后的乘法指令和乘加指令都通過同一個(gè)乘加器實(shí)現(xiàn),。為了驗(yàn)證其正確性,,分別采用6種乘法指令分析其正確性。測(cè)試思路是通過編寫指定的代碼,,進(jìn)行理論計(jì)算,,然后對(duì)比微處理器運(yùn)行結(jié)果。測(cè)試代碼及理論運(yùn)行結(jié)果如下:
movr0,#0x120000;orr r0,#0x3400;orr r0,#0x56
movr1,#0x80000000;orr r1,#0x7800;orr r1,#0x9a
movr5,#0x01
上面6段代碼主要是初始化r0,、r1,、r5值,,運(yùn)行后r0為0x123456,r1為0x8000789a, r5為0x01。
mul r4,r0,r1:運(yùn)算結(jié)果為0x91a33937bcbbc,,由于只取32位結(jié)果,,r4結(jié)果為0x937bcbbc。
mla r4,r0,r1,r5:運(yùn)算結(jié)果為0x91a33937bcbbd,,由于只取32位結(jié)果,,r4結(jié)果為0x937bcbbd。
umull r4,r5,r0,r1:無符號(hào)乘法結(jié)果為0x91a33937bcbbc,,r5結(jié)果為0x91a33,,r4結(jié)果為0x 937bcbbc。
umlal r4,r5,r0,r1:無符號(hào)乘發(fā)結(jié)果為0x91a33937bcbbc,,乘加r5結(jié)果為0x123467,,r4結(jié)果為0x 26f79778。
smull r4,r5,r0,r1:r1最高位為1有符號(hào)運(yùn)算時(shí)先轉(zhuǎn)換為無符號(hào)數(shù)0x7fff8766,,然后計(jì)算得到無符號(hào)結(jié)果0x91a226c843444,轉(zhuǎn)換成有符號(hào)后r5結(jié)果為0xfff6e5dd,,r4結(jié)果為0x 937bcbbc。
smlal r4,r5,r0,r1:r1最高位為1有符號(hào)運(yùn)算時(shí)先轉(zhuǎn)換為無符號(hào)數(shù)0x7fff8766,,然后計(jì)算得到無符號(hào)結(jié)果0x91a226c843444,轉(zhuǎn)換成有符號(hào)結(jié)果為0xfff6e5dd937bcbbc,乘加后r5結(jié)果為0xffedcbbb,,r4結(jié)果為0x26f79778。
Modelsim仿真如圖10所示,。從仿真結(jié)果看出,,設(shè)計(jì)的單個(gè)乘加器正確的完成了上述6類指令的功能。
3.3 Dhrystone性能測(cè)試
Dhrystone的計(jì)量單位為每秒計(jì)算多少次Dhrystone,,它是一個(gè)相對(duì)值,。程序用C語言編寫,能運(yùn)行在大多數(shù)微處理器上,,是測(cè)試處理器運(yùn)算能力的最常見基準(zhǔn)程序之一,。基準(zhǔn)程序使用?滋Vision V4.22軟件下ARM自帶的Dhrystone2.1基準(zhǔn)測(cè)試程序,,去掉全部?jī)?yōu)化后,,將編譯好的文件下載到本文設(shè)計(jì)的微處理器。選用NXP公司的ARM LPC2102微處理器芯片作為對(duì)比,。LPC2102在ARMv4指令集基礎(chǔ)上增加了Thumb指令集,,測(cè)試時(shí)禁用交叉編譯只生成32位的ARM指令。結(jié)果如表1所示,。
從表1中可以看出,,改進(jìn)后的微處理器,相比當(dāng)前市面同種類微處理器性能有近20%提升,。
4 結(jié)論
當(dāng)前高性能,、高效率的微處理器基本采用哈佛結(jié)構(gòu),。本文以ARMv4指令集為基礎(chǔ),將傳統(tǒng)馮·諾依曼結(jié)構(gòu)更改為哈佛結(jié)構(gòu),,擁有獨(dú)立指令總線和數(shù)據(jù)總線,,其優(yōu)點(diǎn)是在流水線階段可以同時(shí)進(jìn)行訪問ROM和RAM,避免了單總線引起的資源競(jìng)爭(zhēng),。采用單周期乘法器,,提高微處理器的運(yùn)算速度。在設(shè)計(jì)乘法器時(shí),,利用資源共享,,最終一個(gè)乘加器實(shí)現(xiàn)了6條指令功能。采用單一邏輯左移移位寄存器實(shí)現(xiàn)多種模式移位功能,。實(shí)驗(yàn)結(jié)果表明,,本文設(shè)計(jì)的微處理器能正確運(yùn)行ARMv4指令集,同等條件下比當(dāng)前市面同種類芯片性能有20%提高,。大多數(shù)應(yīng)用程序在不修改就可以提高20%性能,。
參考文獻(xiàn)
[1] 董海濤,莊淑君,,陳冰,,等.基于ARM+DSP+FPGA的可重構(gòu)CNC系統(tǒng)[J].華中科技大學(xué)學(xué)報(bào)(自然科學(xué)版),2012,,40(8):82-87.
[2] 竺樂慶,,張三元,,幸銳.基于ARM與WinCE的掌紋鑒別系統(tǒng)[J].儀器儀表學(xué)報(bào),,2009,30(12):2624-2628.
[3] 孫永琦.基于ARMv4指令集的32位RISC微控制器的設(shè)計(jì)與實(shí)現(xiàn)[D].浙江:浙江理工大學(xué),,2012.
[4] 徐懷亮,,劉曉升,王宜懷,,等.一種ARM指令集仿真器的實(shí)現(xiàn)與優(yōu)化[J].蘇州大學(xué)學(xué)報(bào)(工科版),,2009,29(2):28-31.
[5] 賈少波.基于X86平臺(tái)的ARM指令集模擬器的設(shè)計(jì)[J].電子設(shè)計(jì)工程,,2013,,21(12):164-169.
[6] 周怡,李樹國(guó).一種改進(jìn)的基4-Booth編碼流水線大數(shù)乘法器設(shè)計(jì)[J].微電子學(xué)與計(jì)算機(jī),,2014,,1(6):60-63.
[7] 翟召岳,韓志剛.基于Booth算法的32位流水線型乘法器設(shè)計(jì)[J].微電子學(xué)與計(jì)算機(jī),,2014,,31(3):146-149.
[8] 杜慧敏,,王明明,沈子杰.32位桶式移位寄存器FPGA實(shí)現(xiàn)[J].西安郵電學(xué)院學(xué)報(bào),,2008,,13(1):99-102.
[9] 陳永強(qiáng),雷雨.可變長(zhǎng)移位寄存器在高速數(shù)據(jù)采集中的應(yīng)用與FPGA實(shí)現(xiàn)[J].西華大學(xué)學(xué)報(bào)(自然科學(xué)版),,2013,,32(4):61-63.
基金項(xiàng)目:廣東省工程技術(shù)研究中心項(xiàng)目(2012gczxA003)