- 成功的嵌入式設計需要指令集之外的諸多因素
- 認識 PIC32
- 入門(mén) PIC32
- PIC32擁有優(yōu)化的迷宮
- PIC32保持簡(jiǎn)潔
當談到32 位微控制器時(shí),基于A(yíng)RM 的產(chǎn)品已經(jīng)占據重要地位。那么,這會(huì )是故事的全部嗎?不見(jiàn)得,行業(yè)內最重要的公司之一,Microchip Technology,正全力推動(dòng)其基于MIPS 架構的芯片。他們最新推出的產(chǎn)品在提醒我們,成功的嵌入式設計需要指令集之外的諸多因素。
在計算機歷史上,從實(shí)驗室走出過(guò)多少種不同的指令集架構?可能曾經(jīng)有數百種架構取得過(guò)一些商業(yè)上的成功; 如果算上諸多博士論文中出現過(guò)的,數目可能會(huì )多達幾千種。拿流行時(shí)尚做比喻,計算機體系結構發(fā)展就好似女生裙擺的高度一般,經(jīng)常來(lái)回變化。
曾經(jīng)有一段時(shí)間它非常要緊—— 比如在匯編語(yǔ)言編程的時(shí)期。至于兼容性,至少在表面上它依舊是件重要的事情,特別是在電腦或視頻游戲方面(例如,有一些需要執行以前的二進(jìn)制文件)。但實(shí)際上,嚴格的目標代碼兼容性對多數嵌入式設計來(lái)說(shuō)已經(jīng)不再是一個(gè)大問(wèn)題。更多的問(wèn)題是關(guān)于工具鏈的兼容性和代碼模塊的可用性,指令集本身已經(jīng)不是問(wèn)題之一。
隨著(zhù)芯片不斷地集成系統功能,設計人員需要的是一個(gè)擁有全部所需存儲器、外設和膠合邏輯的芯片。并且這個(gè)芯片必須省電、有良好的工具和支持,以及合適的價(jià)格。
這并不是說(shuō)在特定的應用當中,體系結構并沒(méi)有優(yōu)劣之分。事實(shí)上,這個(gè)問(wèn)題很有趣,看看那些當初為“計算機”設計的架構—— 如 ARM 和MIPS,不斷下沉,以更好地適應嵌入式“控制器”應用的需求。這些“計算機”架構最后都終于認識到要在嵌入式應用里面解決諸如代碼密度、低功耗、快速并確定的中斷響應等問(wèn)題。
認識 PIC32
在 MCU 領(lǐng)域的競爭里,無(wú)疑MIPS 是在追趕ARM。但是,擁有像Microchip 這樣的重量級選手支持,差距正在縮小??纯葱碌腜IC32 5XX/6XX/7xx 系列產(chǎn)品,高度集成了以太網(wǎng)、USB 和CAN 應用。
我在以前的文章中(“MIPS for the Masses”,Circuit cellar 216 期,2008)介紹過(guò)PIC32的內核。擁有5 級流水線(xiàn),性能相對較高(比如與ARM Cortex - M3 相比)。不過(guò),這只是處理器內核級別的性能差異。比如Microchip PIC32 的性能為1.5 DMIPS / MHz,而Cortex - M3是1.25 DMIPS / MHz 的。在實(shí)際中,32 位微控制器的flash 存儲器訪(fǎng)問(wèn)時(shí)間是性能瓶頸。如以80MHz 運行的PIC32 可能需要2 個(gè)等待周期。通常采用寬總線(xiàn)(128 位)、高速緩存和預取等技術(shù)來(lái)減輕flash 訪(fǎng)問(wèn)的瓶頸問(wèn)題。
或者,可以使用片內的RAM來(lái)達到0 等待周期。’5xx 系列包含64KB 的RAM,’6xx’和7xx 系列中的部分型號有多達128KB 的RAM。不過(guò)要記住,代碼和數據訪(fǎng)問(wèn)之間的爭搶可能導致一些延遲。此外,256KB 或512KB 的flash 空間足夠用來(lái)放置你的代碼(加上額外12 KB 的啟動(dòng)代碼空間)。
外設方面,這些新產(chǎn)品提供了完整的I/O(見(jiàn)圖1)。 ‘5xx/6xx/7xx 編號代表了大的接口功能:USB、CAN 和以太網(wǎng)。‘5xx 系列包含一個(gè)USB 2.0 和一個(gè)CAN(2.0b)模塊;‘6xx系列包含USB 模塊與一個(gè)10/100 以太網(wǎng)MAC。而‘7xx 系列集成了所有這些,包含USB、以太網(wǎng)和兩個(gè)CAN 模塊。

圖1:憑借豐富的I/O(USB、以太網(wǎng)、CAN等),PIC32成為Microchip和MIPS在MCU戰場(chǎng)上的有力武器
普通 I/O 方面,這些產(chǎn)品遵循了不同應用需求的趨勢。我們看到5 個(gè)16 位計數器/定時(shí)器,其中任何兩對可以組合成為32 位單元。由于封裝尺寸(有64 腳和100 腳可選)和引腳復用的限制,你能得到最多六個(gè)UART、四個(gè)SPI 以及五個(gè)I2C 接口。在模擬方面,有一個(gè)16通道多路復用器連接一個(gè)10 位1 MSPS 的ADC 和兩個(gè)模擬比較器。除了這些MCU 能力,另外還有8/16 位數據總線(xiàn)和16 位地址總線(xiàn)擴展功能,外加兩個(gè)片選。所有的數據流可以通過(guò)8個(gè)通用DMA通道控制,輔以4個(gè)專(zhuān)用DMA通道(''5XX 和''6XX 系列)或8個(gè)專(zhuān)用DMA通道(''7XX 系列)。
源自上世紀80 年代的MIPS 是RISC 方面“精簡(jiǎn)”特性的杰出代表。當響應中斷時(shí),它們可以要對PC 和狀態(tài)寄存器壓棧,不然的話(huà)就轉由軟件去處理。對這種極端簡(jiǎn)約存在一些爭議,可能少了一些有用的東西??紤]到這一點(diǎn),PIC32 系列包括一個(gè)全功能優(yōu)先級/向量可編程的中斷控制器;以及一組替代寄存器組用于快速中斷響應和上下文切換。
另外,不要忽視那些可能導致嚴重預算問(wèn)題的膠合邏輯,如看門(mén)狗定時(shí)器、低電壓檢測、電壓整流器、主時(shí)鐘/外設時(shí)鐘/實(shí)時(shí)時(shí)鐘等。這些功能的集成,使PIC32 系列成為真正適用于“控制”應用的芯片,有別于“計算機”芯片。
入門(mén)
跟以前一樣,Microchip 的芯片評估很容易,而且便宜。PIC32 以太網(wǎng)入門(mén)套件(見(jiàn)照片1)定價(jià)$72,提供一切你需要的部件。雖然名字為“以太網(wǎng)”入門(mén)套件,該套件配備了高端的''795 型號MCU,同時(shí)支持USB 功能。

PIC32 采用的架構來(lái)源于“計算”,因此它非常適合管理面向PC 的以太網(wǎng)和USB 接口。讓我們看一些演示程序,你就會(huì )明白我的意思。
多年來(lái)Microchip 一直在為其小型的PIC 芯片提供部分網(wǎng)絡(luò )軟件棧,PIC32 做得更多,它提供了全功能、免費的BSD TCP/IP 網(wǎng)絡(luò )堆棧。包含所有的網(wǎng)絡(luò )服務(wù)、套接字等,以及這些常用的協(xié)議:DHCP、UDP、ICMP、ARR 等。''795 型芯片中有512KB 的片上flash,有充足的空間存儲一些漂亮的演示程序,讓我們?yōu)g覽一下入門(mén)電路板(見(jiàn)照片2)。

不管 OTG 是否真正有用,它使得PIC32 能在更多的傳統領(lǐng)域中得到應用,無(wú)論是作為主設備或從設備。USB“嵌入式主設備”在使用中有一些限制,不像“標準主設備”如電腦,舉例來(lái)說(shuō)PIC32 不提供VBUS 電源(100-500 mA),但是你可以在個(gè)人電腦的USB接口上找到這種電源——當然這完全可以理解。另外,速度限制也需要注意,,作為從設備時(shí)能夠“全速”(12 Mbps),而作為主設備時(shí)只能提供“低速”(1.5 Mbps)。
這個(gè)套件包含了一些實(shí)用的演示。其中一個(gè)演示讓該板子成為一個(gè)標準人機接口設備(HID)——比如鼠標。因為HID 驅動(dòng)已經(jīng)是標準,你可以把它直接插入PC 使用。另外,你可以把這個(gè)套件配置成USB 主設備,從而利用PIC32 不斷完善的FAT 文件管理軟件庫,有一些演示展示了如何訪(fǎng)問(wèn)廣泛使用的USB 存儲器(見(jiàn)照片3)。

優(yōu)化的迷宮
結構體系進(jìn)化的重要標志之一,曾經(jīng)是編譯器的優(yōu)化。您可能還記得有些人把“RISC”縮寫(xiě)調侃為“Relegate the Impossible Stuff to the Compiler”,即“把不可能完成的任務(wù)丟給編譯器”。然而,在調試時(shí),一個(gè)太過(guò)自我聰明的編譯器其問(wèn)題也是顯而易見(jiàn)的。比如PIC32 的“C”編譯手冊有提到說(shuō),當調試經(jīng)過(guò)優(yōu)化的代碼時(shí)“可能偶爾會(huì )碰到令人驚訝的結果。”
例如,有些變量和代碼會(huì )消失,如果編譯器認為你其實(shí)并不需要它們。舉例說(shuō)你聲明了一個(gè)變量,然后給它賦值一個(gè)常數,接著(zhù)在某個(gè)計算時(shí)調用了這個(gè)變量。不要為找不到那個(gè)變量和賦值語(yǔ)句而抓狂,編譯器只是比你更聰明一點(diǎn),它在計算中直接調用了常數。
當你在一個(gè)條件分支指令處點(diǎn)擊了單步執行,然后看到光標移動(dòng)到了下一條指令處,這是否意味該條件分支的條件未被滿(mǎn)足呢?未必,請注意這是MIPS 架構的一個(gè)特性,即分支指令的下一條指令總是會(huì )被執行,當編譯器找不到合適的指令時(shí)會(huì )填充一條NOP 指令。你必須再執行一次單步操作,才能確認分支條件是否被滿(mǎn)足(在這種情況下,你會(huì )看到光標跳到分支目標處)或不滿(mǎn)足(光標跳轉到下一條順序指令)。更先進(jìn)的“代碼移動(dòng)”優(yōu)化能夠導致更多的優(yōu)化干預。請記住,有時(shí)指令可以被挪動(dòng)很遠的距離,甚至超出你認為應在的循環(huán)之外。
不過(guò),調試優(yōu)化過(guò)的代碼也是可能的,尤其是你喜歡頭腦風(fēng)暴的話(huà)(例如,在分支指令后跟一個(gè)分支指令會(huì )發(fā)生什么?)。通常缺省的編譯器優(yōu)化只生成簡(jiǎn)單的代碼,會(huì )完整保留你的意圖即使可能它效率底下。當調試時(shí)在斷點(diǎn)觸發(fā)處,,你可以放心地修改某個(gè)變量的值,而不用擔心編譯器會(huì )搗什么鬼(比如雖然你從源代碼中看不到,但一些賦值語(yǔ)句已經(jīng)被挪動(dòng)并執行了)。


PIC32 在精簡(jiǎn)MIPS 架構使其服務(wù)于嵌入式應用方面做得很好。比如,全部的活動(dòng)功耗只有1mA/MHz 水平,從它提供的性能來(lái)看這是非常難得的。它們的批量?jì)r(jià)格也比較合理,特別考慮到那些完整的外設和存儲器配備。
然而競爭也非常激烈,像Cortex - M3、瑞薩SH(現在叫RX)、愛(ài)特梅爾的AVR32 以及飛思卡爾的ColdFire 等。這些競爭對手在行業(yè)里已經(jīng)有很長(cháng)的時(shí)間,它們的產(chǎn)品也具有很廣的覆蓋面,在高端產(chǎn)品上能提供跟PIC32類(lèi)似的集成度和性能,同時(shí)還有許多入門(mén)級的簡(jiǎn)單產(chǎn)品。
我認為MIPS 也在低端產(chǎn)品線(xiàn)上延伸,他們最近發(fā)布的“M14K”內核就是明證,在保留當前版本性能的基礎上,在代碼密度、中斷響應和外設一致性上取得了非常大的進(jìn)步。
其中最深刻的變化是一套新的“microMIPS”指令集。類(lèi)似于A(yíng)RM 的Thumb-2,microMIPS 采用了可變長(cháng)度的操作碼(16 和32 位),以同時(shí)取得兩者的優(yōu)點(diǎn),即接近32位代碼的性能和16 位代碼的密度(見(jiàn)圖2)。定長(cháng)指令集是原始RISC 革命的標志性特點(diǎn),這在當時(shí)是合理的(雖然我并沒(méi)有覺(jué)得),但在今天,架構師們意識到用32 位存儲器(即使不考慮功耗的開(kāi)銷(xiāo))只是做個(gè)寄存器累加或短跳轉是沒(méi)有意義的。同上,在軟件方面,編譯器和IDE 都很好,但MIPS 和Microchip 也應該注意那些簡(jiǎn)單的替代產(chǎn)品,如ARM 的mbed、AVR 的Arduino,還有他們自己陣營(yíng)的PICAXE。有些人可能還認為32 位芯片只是火箭科學(xué)家的事,但火箭能賣(mài)掉多少個(gè)?

想賣(mài)出更多的芯片嗎?很簡(jiǎn)單,只要做到更低功耗低、更易使用、更便宜。然后接著(zhù)再這樣繼續。