《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > ARMv4指令集嵌入式微處理器設(shè)計(jì)
ARMv4指令集嵌入式微處理器設(shè)計(jì)
2014年電子技術(shù)應(yīng)用第12期
陳明敏,易清明,石 敏
(暨南大學(xué) 信息科學(xué)技術(shù)學(xué)院,廣東 廣州510632)
摘要: 針對(duì)當(dāng)前采用ARMv4指令集的嵌入式微處理器使用馮·諾依曼結(jié)構(gòu),數(shù)據(jù)和指令共用一條總線導(dǎo)致數(shù)據(jù)吞吐量降低的問題,設(shè)計(jì)了一款新架構(gòu)微處理器。首先,采用哈佛結(jié)構(gòu)獨(dú)立的數(shù)據(jù)總線和指令總線,數(shù)據(jù)帶寬提升一倍;其次,采用單周期32位乘法器,其計(jì)算速度是目前嵌入式乘法器計(jì)算速度的2倍;此外,利用資源共享,一個(gè)乘加器完成6種不同乘法和乘加指令,一個(gè)邏輯左移寄存器完成邏輯左移、邏輯右移、算術(shù)右移、循環(huán)右移4種功能。整個(gè)工程在Altera EP4CE30 FPGA芯片上進(jìn)行物理驗(yàn)證。實(shí)驗(yàn)結(jié)果表明,通過改進(jìn),設(shè)計(jì)的嵌入式微處理器性能有所提升。
中圖分類號(hào): TP331
文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2014)12-0023-04
An embedded microprocessor based on ARMv4 instruction
Chen Mingmin,Yi Qingming,Shi Min
School of Information Science and Technology,Jinan University,Guangzhou 510632,China
Abstract: According to the ARMv4 embedded microprocessor instruction set using von Neumann structure shared data bus and instruction bus will reduce data throughput,a new architecture microprocessor is proposed. Firstly, the use of Harvard architecture with separate data bus and instruction bus makes data bandwidth doubled. Secondly, with the use of single-cycle 32-bit multiplier, the calculation speed is twice faster. Addition, with the use of resource sharing, a multiplier adder is used to implement 6 different multiplications and multiply add instructions, and a logical left shift register completes a logical shift left, logical shift right, arithmetic shift right and rotate right function. Physical verification of the works is on Altera EP4C30 FPGA chip. The experimental results show that the above improved methods increase the microprocessor performance.
Key words : Embedded microprocessor;32 multiplier;ARMv4 set;Harvard architecture

0 引言

  ARM微處理器具有高性能、低功耗特點(diǎn),市場占有率上ARM微處理器超過了75%,其產(chǎn)品從最初的單核ARM7發(fā)展到現(xiàn)在的多核Cortex R系列,相應(yīng)的指令集從最原始的ARMv1到現(xiàn)在的ARMv8。每一種指令集都是在前一種指令集的基礎(chǔ)上增加若干指令用于提升性能,這樣微處理器保持了良好的向下兼容特性,用于低端芯片的工程可以完美地移植到高端的芯片上,具有良好的繼承性。其中ARMv4是第一次用于商業(yè)芯片的指令集,因而ARMv4是ARM微處理器指令發(fā)展源泉。對(duì)于ARM微處理的研究國內(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)變化。中國龍芯處理器以類MIPS指令集為基礎(chǔ),采用自己設(shè)計(jì)的架構(gòu)形成國產(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)勢。哈佛結(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)勢,本文采用哈佛結(jié)構(gòu)。

001.jpg

  1.2 單周期32位乘法器設(shè)計(jì)

  乘法器是重要而復(fù)雜的一個(gè)運(yùn)算單元,乘法器電路信號(hào)傳播路徑長,電路延時(shí)比較大,針對(duì)乘法器很多人做了不同優(yōu)化。參考文獻(xiàn)[6]引入流水線乘法器,通過分部計(jì)算減少了單次乘法器的運(yùn)算周期,適用于連續(xù)乘法器運(yùn)算。但單次乘法器運(yùn)算,使用時(shí)鐘周期反而隨流水線增長而增加,并不適用于微處理器方面。參考文獻(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所示。

002.jpg

003.jpg

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所示。

004.jpg

  算術(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所示。

005.jpg

  循環(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所示。

006.jpg

  帶擴(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所示。

007.jpg

  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ì)于簡單的乘法運(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所示。

008.jpg

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語言測試代碼使用?滋Vision V4.22編譯生成,由于FPGA無法直接初始化32位HEX文件,需要將HEX文件轉(zhuǎn)換為MIF格式。代碼轉(zhuǎn)化軟件通過VC ++ 6.0編寫。通過將轉(zhuǎn)換后將生成的MIF文件下載到ROM中進(jìn)行測試驗(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條指令分別測試邏輯左移、邏輯右移、算術(shù)右移、循環(huán)右移4種功能。測試代碼及理論運(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所示。

009.jpg

  從Modelsim仿真結(jié)果看出,設(shè)計(jì)的單個(gè)邏輯左移移位寄存器很好的完成了上述4種功能。

  3.2 乘法器和乘加法器仿真

  經(jīng)過優(yōu)化后的乘法指令和乘加指令都通過同一個(gè)乘加器實(shí)現(xiàn)。為了驗(yàn)證其正確性,分別采用6種乘法指令分析其正確性。測試思路是通過編寫指定的代碼,進(jìn)行理論計(jì)算,然后對(duì)比微處理器運(yùn)行結(jié)果。測試代碼及理論運(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類指令的功能。

010.jpg

  3.3 Dhrystone性能測試

  Dhrystone的計(jì)量單位為每秒計(jì)算多少次Dhrystone,它是一個(gè)相對(duì)值。程序用C語言編寫,能運(yùn)行在大多數(shù)微處理器上,是測試處理器運(yùn)算能力的最常見基準(zhǔn)程序之一?;鶞?zhǔn)程序使用?滋Vision V4.22軟件下ARM自帶的Dhrystone2.1基準(zhǔn)測試程序,去掉全部優(yōu)化后,將編譯好的文件下載到本文設(shè)計(jì)的微處理器。選用NXP公司的ARM LPC2102微處理器芯片作為對(duì)比。LPC2102在ARMv4指令集基礎(chǔ)上增加了Thumb指令集,測試時(shí)禁用交叉編譯只生成32位的ARM指令。結(jié)果如表1所示。

011.jpg

  從表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,避免了單總線引起的資源競爭。采用單周期乘法器,提高微處理器的運(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] 周怡,李樹國.一種改進(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),雷雨.可變長移位寄存器在高速數(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)

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。