你知道iOS、Windows Phone、Android這3大平台的手機共通點是什麼嗎?除了都可以打電話、傳簡訊、安裝App之外,在硬體架構上最大的共同點,就是這些手機CPU全都是採用ARM架構。現在連Microsoft都相中這塊逐漸成長中的市場大餅,下一代的微軟視窗作業系統Windows 8也將會推出ARM版本,稱為Windows RT。究竟ARM與行動裝置的關係是什麼?又如何在這競爭激烈的市場中存活下去,逐漸壯大在嵌入式產品的影響力?看下去就知道。
如同Intel並不是以CPU起家,而是從記憶體跨足到IC設計,至今成為x86處理器的龍頭。ARM也是一樣,這一切都要從Hermann Hauser和Chris Curry所創立的Cambridge Processor Unit開始說起。
1978年,由物理學家Hermann Hauser和工程師Chris Curry一同在英國劍橋成立了一間公司,公司名稱直接取作Cambridge Processor Unit(CPU),主要從事提供當地電子儀器設備的業務。第一份合約即是為ACE Coin Equipment公司開發一款水果盤,也就是拉霸的遊戲機。
▲Cambridge Processor Unit為ACE Coin Equipment製造的水果盤遊戲機。
1979年,公司營運漸上軌道,便改名為Acron Computer有限公司。Acorn的中文翻譯為橡子,就是在冰原歷險記電影裡,那隻「鼠奎特」一直在追的果實,Acron Computer也以橡子為公司的標誌。
▲Acorn Computer Ltd把橡子圖案運用在自己的商標之中。
隨著時間過去,漸漸地發現原本的硬體設計已不符需求,Acorn想要升級機器內的CPU。當時處理器的發展潮流是由8位元轉向16位元,一開始有考慮使用美國國家半導體以及Motorola新的16位元晶片,但是經過評估後,發現2個缺點。
於是只好轉向Intel,要求提供一些80286設計資料以及樣品,但是卻遭到Intel拒絕。這件事情後來直接導致Acorn決定設計自己需要的CPU,由於採用RISC架構的關係,名稱就稱為Acorn RISC Machine(ARM)。
處理器的指令集可簡單分為2種,CISC(complex instruction set computer)以及RISC(reduced instruction set computer)。一開始的處理器都是CISC架構,隨著時間演進,有越來越多的指令集加入。由於當時編譯器的技術並不純熟,程式都會直接以機器碼或是組合語言寫成,為了減少程式設計師的設計時間,逐漸開發出單一指令,複雜操作的程式碼,設計師只需寫下簡單的指令,再交由CPU去執行。但是後來有人發現,整個指令集中,只有約20%的指令常常會被使用到,約佔整個程式的80%;剩餘80%的指令,只佔整個程式的20%。於是1979年美國加州大學柏克萊分校的David Patterson教授提出了RISC的想法,主張硬體應該專心加速常用的指令,較為複雜的指令則利用常用的指令去組合。
RISC的優點列舉如下:
RISC的缺點列舉如下:
這裡也提供一個小小的概念,CISC是在RISC出現之後才出現的相對名詞,並不是從一開始就有CISC、RISC這2種處理器架構。
於1985年,Acorn設計出了第一代處理器晶片,稱為ARM1,由Sophie Wilson設計出類似於6502的指令集,因為當時Acorn為英國國家廣播公司BBC所製造的BBC Micro電腦採用MOS 6502處理器,使用類似的指令集有助於縮短開發時間以及技術轉移。Steve Furber則是負責設計硬體實作。ARM1以第二顆處理器的身分,安裝在BBC Micro內部。
ARM1在晶圓設計部分,規格為3微米製程、2層金屬層、總計2萬5千個電晶體、6MHz運作時脈、消耗功率120mW、晶片面積50mm2。當時Intel的80286使用1.5微米製程、13萬4千個電晶體、6~12Mhz運作時脈,同時這2款處理器都不包含快取。
同年10月,Intel發表80386處理器,與之相比,ARM1顯得功能簡單、能源消耗較少,在效能上不是80386的對手。這一差異導致ARM系列處理器往後的設計路線明顯與Intel不同,Intel持續邁向x86高效能設計,ARM專注於低成本、低功耗的研發方向。
▲這是由VLSI製造的ARM1處理器,最外層那一圈不是CPU本體,而是必須焊在電路板上的連接座。
真正商業化的處理器為ARM2,ARM1處理器架構為ARMv1,到了ARM2更新到ARMv2,這一代新增乘法器在核心之中。ARMv2的進階版ARMv2a則是多包了記憶體管理核心、繪圖及I/O處理器。接下來的ARM3,處理器架構ARMv2a,是第一次於CPU裡內建了4KB快取。1990年,Acorn開始與蘋果電腦合作發展新一代的ARM晶片,特地還為此設立了一間公司,稱為Advanced RISC Machines公司。最初財務吃緊,辦公室僅為一個穀倉,成員也僅有12人。原本ARM所代表的Acorn RISC Machine,也在此時更換為Advanced RISC Machine。
1991年發展出的ARM6,處理器架構更新為ARMv3,主要擴展記憶體定址線。之前的ARM產品都只有26bit的記憶體定址線,最大可支援64MB的記憶體。從ARM6開始,完整支援32位元記憶體定址,最大支援到4GB。在此離題一下,ARM6處理器家族下的ARM610處理器,曾經用在蘋果電腦的Newton Message Pad上頭,Newton也被視為現今PDA與Smart Phone的始祖。
▲Apple Newton Message Pad。
(後面還有開始大賣的ARM7)
1993年推出的ARM7延續著ARMv3核心,但是由於製程的進步,快取加大至8KB,時脈也一舉拉高至40MHz。
ARM7TDMI(處理器架構ARMv4T),除了原本的32位元指令集外,還新增了Thumb,也就是精簡過的16位元指令集,讓編譯出來的程式可以縮小程式碼體積,官方表示與標準的ARM指令集相比,可以縮小35%的程式碼體積,又能享受32位元架構所帶來的效能提升。Thumb指令在執行時會通過處理器內一個叫做Thumb解碼器的東西,及時解壓成32位元ARM指令,同時也可受惠於32bit的記憶體匯流排,加速指令與資料的載入。
但之後的ARM8家族和Digital Equipment Corporation向ARM買授權自行製作的處理器StrongARM,都不支援Thumb。
ARM7EJ的處理器架構為ARMv5TEJ,直接加入稱為Jazelle DBX的運算電路,能夠以硬體加速大部分的Java bytecode,提升Java程式的執行效率;同時也新增適合處理DSP的指令,如飽和運算(saturated arithmetic)可以加速多媒體應用。
Java的執行方式
程式設計師以Java語言寫出程式後,經過編譯器編譯成Java bytecode檔,執行時便把這個Java bytecode丟入一個稱作JVM(Java Virtual Machine)的模擬器裡執行,在各種平台上都有不同的JVM,所以編譯過後的Java bytecode能夠跨平台執行。
飽和運算(saturated arithmetic)
正常以二進位表示為11111111(255)+00000001(1)=100000000(256),但是一個8bit的加法器,當輸入255+1的指令後,計算出來的結果將會是0。因為處理器只有8bit,最高位會產生數值溢位,實際交由8bit加法器運算將變成11111111(255)+00000001(1)=00000000(0)。但是當處理器支援飽和運算後,255+1的結果將變成255,經計算後的數值資料只會頂天立地(該資料類型的最大值或最小值),不會產生overflow或是underflow。
ARM9處理器家族內部處理器架構為ARMv5TE,導入了相當重要的架構更新,以往ARM和x86處理器都是採用馮‧紐曼架構,意即中央處理器和儲存裝置是分開的,中央處理器到儲存裝置中讀取一段程式碼執行,而不同程式碼可以造成不同的執行結果。相較於古早時代的電腦,一旦要執行不同的程式碼時,必須更動硬體設計,重新接線。約翰‧馮‧紐曼在1945年的論文中提出這個處理單元和儲存單元分離的概念,對於後來電腦發展有相當重大的影響。
哈佛架構則是馮‧紐曼架構的延伸,哈佛架構更進一步定義了程式和資料是由兩個獨立的空間儲存,同時也有兩個記憶體控制單元分別操作。讀取程式後解碼便得到資料位址,再到資料記憶體中讀取資料。此種架構好處在於指令和資料的記憶體操作能夠同時進行,當處理器在運算資料時,便可以先行擷取下一道指令。
▲馮‧紐曼架構,程式和資料儲存在同一個記憶體中。
▲哈佛架構,程式和資料分開儲存至不同的記憶體中。
在ARM10E的處理器架構升級為ARMv5TE,加入了VFP(向量浮點架構)的協同處理器,提升浮點數運算能力。
(後面還有智慧型手機應用大爆發)
在2007年的Macworld發生了一件大事,劃時代的iPhone誕生了,直覺的使用者操作立刻席捲全球,App Store的商業模式解決以往PDA程式太少的窘況。而第一代的iPhone和其後的iPhone 3G便是採用ARMv6處理器架構,也是第一次讓人感受到,原來ARM可以做到這麼好的使用者體驗。
ARMv6架構在2001提出,對應ARM11處理器家族。新增SIMD處理功能,相當適合影片處理加速使用。同時也提出ARM11MPCore,首次將多核心的概念導入ARM處理器中。Thumb指令集也升級到第2代Thumb-2,將原先16bit的指令集部分擴展到32bit,變成同時擁有16bit和32bit指令長度的指令集。
不過這個ARMv6架構有點短命,還沒看到幾顆多核的ARM11處理器(NVIDIA的Tegra即為ARM11MPCore),就被ARM緊接而來的Cortex處理器給蓋過去。
在ARM11之後的處理器家族,改採Cortex命名,並針對高、中、低階分別劃分為A、R、M三大處理器。像是高階手機用的Coretex-A系列,或者是微控制器所使用的Coretex-M系列,需要較高性能、或是即時處理的系統則改用Coretex-R系列。
除了Cortex-M0、Cortex-M1為ARMv6-M,馮‧紐曼架構之外,其他Cortex的處理器架構更新到ARMv7,一樣由高至低分成ARMv7-A、ARMv7-R、ARMv7-M三種,其中ARMv7-M不支援最原始的ARM指令集,僅支援16bit的Thumb指令集,卻加入NVIC(Nested Vectored Interrupt Controller),提供更快的中斷處理、還有負責CPU在深層睡眠時的中斷處理WIC(Wake-up Interrupt Controller)。
Cortex-A(ARMv7-A)和 Coretex-R(ARMv7-R)2種架構基本上是相同的,都支援更新的進階型SIMD處理,稱為NEON,ARM宣稱效能至少是上一代處理器架構ARMv6的2倍。NVIDIA的Tegra 2處理器較為特殊,雖是採用Cortex-A的CPU,但沒有包含NEON,反而使用自家的技術,內建專門的音訊處理器和視訊處理器。
Cortex-A和 Coretex-R最大的差異在於記憶體管理單元部分,Cortex-A使用MMU(memory management unit)、Cortex-R使用MPU(memory protection unit)。前者的記憶體管理單元提供虛擬記憶體的支援,後者只能運作在記憶體保護模式。
記憶體管理:real、protected、virtual
最初的CPU記憶體管理只有real mode,在這個模式下,所有程式都可以直接存取記憶體、I/O、電腦附加的硬體。但是在這種模式下的記憶體空間少(1MB),程式無法多工(如果2個程式同時餵給印表機資料,印出來會是什麼鬼啊!)。到了80286處理器後,導入了protected mode,將作業系統和程式的記憶體區塊分開,如果程式想要存取記憶體,必須經由作業系統中介。從而提升系統安全性和穩定性。virtual memory則是在protected mode下的產物,允許硬碟之類非實體記憶體的裝置能夠模擬成記憶體。邏輯上來說,可以在不增加硬體花費的情況下,直接加大實體記憶體容量。但硬碟的存取速度卻遠不如實體記憶體,目前SATA 6Gb/s介面頻寬為6Gb/s,DDR3-1600雙通道的介面頻寬卻有25.6GB/s,兩者相差約43倍。
ARM一開始與蘋果、VLSI所投資的資金下成立,初期營運狀況不佳,而英國當地也沒有什麼晶圓廠,同時ARM也決心將自行發展的技術成為業界的標準。在這些條件的加總之下,ARM選擇了以IP授權的方式經營。
IP(intellectual property智慧財產權)授權,即是把自己所創造的東西,以某種方式授權給其他人利用。例如我們在行人穿越線兩旁所看到的小綠人走路燈號,當初的設計者便可以把此種想法授權給其它地區採用,藉以收取授權費。而ARM也是透過此種方式營利,除了一開始的授權費之外,每賣出一顆晶片還需要付版權費。另一家較為知名採用IP授權營利的公司為MIPS,其產品常常可以在網路設備中見到。
這種授權方式使得每家公司都可以依據自身需求,設計出客製化晶片。比如說產品並不需要繪圖的部分,便可以把繪圖IP核心拿掉,亦或者也可以在晶片裡塞入其他家廠商做出的IP核心,讓功能更多元。相較於Intel近年強迫中獎的顯示核心,ARM的作法彈性許多。
▲常見的ARM授權製造模式,ARM將設計授權給設計公司(如Qualcomm),製造授權給晶圓代工公司(如台積電),最後生產出來的晶片再賣給其他廠商做成實際產品(如HTC)。
▲眾多的合作夥伴,這些公司都有ARM的IP授權,你能找出哪幾個較令人熟悉的牌子呢?
如同 x86邁向x64一般,ARM也需要更大的匯流排來增加效能。在下一代的ARMv8架構中,也將加入64bit的支援,但是一切都還在討論中。但是現在也不急,暫時還有個Coretex-A15可以拿來填一下發展時程,至於會增加哪些指令集則尚未確定。
ARMv8處理器將有2個執行狀態,AArch32和AArch64。前者將完全相容ARMv7的指令集及架構,將原封不動地移植到ARMv8身上。後者AArch64則是全新的指令集與處理器架構。
ARM目前也在積極建立並等待64bit的生態鏈完備,就如同x86轉換到x64一般,AMD的64位元處理器早在2003年問世,但是等到64位元作業系統、程式真正普及,卻也只是近幾年的事情而已。更別說一般人電腦C槽裡那個Program Files x86資料夾,放在裡面的程式應該比Program Files還要多。
最近開始身價上漲的硬體加解密功能,ARM也預計加入AES加解密的指令,利用進階SIMD的128bit暫存器來實作,SHA-1和SHA-256也在支援中。
AES演算法
Advanced Encryption Standard高級加密演算法,是一種用來進行區塊加密(將數值資料切割成等長,分別對個別區段分別加密)的技術,用以取代Data Encryption Standard(DES)的加密方式,目前DES已被SciEngines公司所製造的COPACOBANA RIVYERA硬體證實能夠在1天的時間內被暴力破解完畢。
SHA演算法
Secure Hash Algorithm安全雜湊演算法,不同的資料數值,經過特定演算法所運算出來的SHA值也不同,這個固定長度的值可視為這個資料的指紋,具有專一性。目前SHA演算法用來檢查檔案完整性與否,是否經過有心人士的篡改;也用來檢查從網路上下載回來的檔案是否正確,特別是那些動輒幾GB的檔案。
(後面還有ARM處理器家族、架構對照表)
(點圖可看大圖)
(點圖可看大圖)
本文同步刊載於電腦王雜誌
歡迎加入電腦王雜誌粉絲團