http://tech.digitimes.com.tw/ShowNews.aspx?zCatId=A14&zNotesDocId=C5597B9F3E63D0344825711E003C51C5

MCU追求的是「五臟俱全、短小精悍」,因此在小小一顆封裝中就完整具備了處理器、記憶體、週邊I/O等功效,所以初期才會被人稱為「單晶片」,意指過去同樣的電路系統需倚賴多顆晶片的搭組才能實現。
 在單晶片中,以8051最為經典,至今仍是最普及、廣泛使用的8-bit MCU架構(另一則是PIC架構或68HC05/08/11架構),不僅成功取代它的前一款晶片:8048,而且還成為今日各校「積體電路控制應用」課程的首選標準教案。

儘管8051是20年來的經典,至今未有衰退的跡象,然而今日的8051 MCU已經與過去的8051大不相同,雖然主軸架構大致維持(如:腳位排列相容、指令集相容等),但隨著半導體工藝的進步,許多業者都運用自己的技術為 8051相容晶片進行更多的強化,如此的強化不僅在週邊I/O層面,也包括核心的處理器、記憶體層面。
 因此,本文以下將針對今日8051相容晶片的諸多革新進行瞭解,以期控制應用的設計者能熟悉與善用這些新特點,而非僅止於原有的基本型8051。
附註:最初的8051是用NMOS製程製造,之後才換用CMOS製程,為了讓前後不同製程的產品容易區分,將使用新(CMOS)製程的改命為80C51,多加插一個C字母於其中,C即CMOS製程之意,CMOS製程的一大優點是比NMOS製程省電。
運作時脈的進步
 8051剛推出時的標準運作時脈為12MHz,若有使用內建的UART(Universal Asynchronous Receiver/Transmitter,泛用型非同步接收/傳送器)週邊功能則需改用11.059MHz。
 不過,更先進的半導體製程大幅加速了8051相容MCU的運作時脈,例如Atmel的多款8051相容MCU都有16/24/33/40MHz的時脈頻率,其中最高更達60MHz,是過往的5倍速率。又如MAXIM/Dallas Semiconductor的DS80C320(亦是8051相容晶片)可達33MHz。

 不僅如此,華邦電子(Winbond)的標準型8051相容晶片皆有40MHz的水準,至於新進的8-bit MCU業者:Silicon Laboratories(簡稱:SiLabs)更是有達100MHz的8051相容MCU(如C8051F120)。
 另外,Intel原廠也有高速型的MCS 51(即8051),時脈可達33MHz,或者鼓勵替換成MCS 251(即80251,更早前還有80151),MCS 251能相容執行8051程式指令,且比標準8051快上5倍,若能夠以80251的新指令改寫則更可快上15倍。


▲Atmel的AT89LP系列標榜Single Cycle(每個機器週期僅1個時脈)的執行特點,執行效能可達20 MIPS,並且具低功耗性的省電運作。(圖片來源:Atmel.com)
機器週期的縮短
 標準8051是以每12個時脈週期(Clock Cycle)為1個機器週期(Machine Cycle),且8051所有的機制運作皆以1個機器週期作為基礎循環,多數的8051指令會在1或2個機器週期內執行完畢,少數會用及3個機器週期。
附註:對於80年代首次發表的8051,今日多稱為Standard 8051、Traditional 8051,Intel原廠亦以「Classic,古典、經典、典型」稱之。


▲Dallas Semiconductor的DS89C430/440/450在執行效能上可達33 MIPS(傳統8051為1 MIPS),每個機器週期僅1個時脈(傳統8051為12個時脈),以及2個UART、2個DPTR(可自動遞增或遞減指位值),相對的傳統8051僅1 個UART、1個DPTR,且DPTR無法自動遞增或遞減。(圖片來源:Maxim-ic.com)
 同樣的,「每12 個時脈週期為1個機器週期」是80年代的設計,今日的邏輯技術早已能超越此規限,例如Philips的8051相容晶片:LPC700族系,便將機器週期縮短成6個時脈週期,這意味著在相同運作時脈下能夠比傳統標準8051快上一倍的執行效能,更何況如前所述,多數的8051相容MCU早已突破12MHz 的時脈頻率,如此兩種加速方式產生加乘效益,效能變成倍速提升。


▲指撥開關(DIP Switch)能夠儲存簡易的組態設定,即便應用系統斷電也依舊可以保存組態資料,圖中為典型的4組式指撥開關,等同於可儲存4-bit的組態資訊。(圖片來源:tonh.net)
 Philips 只是其一,Winbond也相同,Winbond的Turbo-51系列及Enhanced-51系列等8051相容MPU,皆是採「每4個時脈為1個機器週期,4clocks/machine cycle」,如此理論上可以比傳統8051快上3倍,不過實際上的總體效能仍會低些,約2.5倍。然而Turbo-51系列的運作時脈可達25MHz,是傳統8051的2倍有餘,所以加乘效益將可達5∼6倍的加速。
 再舉一例,TI的MSC1210也是4clocks/machine cycle的設計,加上33MHz時脈頻率,如此等同於讓一顆8051以82.5MHz的速率在執行。此外,Dallas Semiconductor(今已屬MAXIM)的DS80C320也相同,亦是4clocks/machine cycle、33MHz。
 更進一步的,Mentor Graphics的軟式IP(矽智財):M8051 E-Warp可縮減至2clocks/machine cycle,Infineon的語音應用晶片:SDA80D51 UniSpeech就使用此一快速的8051核心並搭配一個16-bit DSP(稱為Oak核心,技術來自DSP Group公司)。
 不過,縮至每週期2時脈並非已至極致,如今也能夠達一時脈一週期的境界,如Atmel的AT89LP族系、SiLabs的所有8051相容MCU、Dallas Semiconductor的DS89C430/440/450等,都已是一時脈一週期。
指令時間的縮短
 除了提升時脈頻率、縮短每機器週期的時脈數之外,業者也從「縮短指令執行的時間」著手,將原本要耗用2個機器週期的指令縮短成1個,或將3個機器週期縮短成2個,甚或1個,最理想是將8051的111個指令統統整齊劃一,皆在1個機器週期內執行完成。
 也因為縮短了指令的執行時間,使之前以簡單整數倍換算的加乘加速效益不再全然適用,進而有另一個效能指標作為補充,即MIPS(Million Instructions Per Second,每秒能執行幾個「百萬次指令」),且有時會搭配運作時脈頻率一起表示,如:5 MIPS with a 40MHz,或如:40 MIPS using an 80 MHz clock。
增加內部記憶體資源
 傳統8051的程式記憶體(Program Memory,泛指ROM)有4KB,而傳統8052(8051推出後的接續強化版)則有8KB。另外資料記憶體(Data Memory,泛指RAM)方面8051有128Bytes,而8052一樣加倍:256Bytes。


▲Winbond的W77LE532時序圖,其每個機器週期為4個時脈,如此在相同的工作頻率下也能比傳統8051快上3倍效率。(圖片來源:Winbond.com)
 無論是4KB或8KB,也無論是128B或256B,從今日撰寫控制應用程式的角度觀之,都是相當拘限的容量,因此各業者也積極強化8051的資料記憶體資源。
 先拿Intel原廠來說,Intel提出了具有Expanded RAM的8xC51RA/RB/RC,RA具有8KB程式記憶體,RB有16KB,RC則是32KB,比過去擴增了2、4倍容量,同時三者都有512B的資料記憶體,也比過去再增一倍。
 接著來是Atmel,Atmel的AT83C51RD2、TS83C51RD2等在程式記憶體上可至8051定址的滿檔極限:64KB,並具有 1024Bytes的資料記憶體,此外也有多款8051相容MCU在資料記憶體上大幅擴充,如AT89C51AC2可至1280Bytes(1KB+ 256B),AT89C51ED2可至2048Bytes,AT89C51AC3更可至2304Bytes(2KB+256B)。
 更有甚者,SiLabs的C8051F12x在ROM部份達到128KB,RAM部份達到8448B(8KB+256B),其他如Philips、Winbond的相容8051 MCU亦都有所擴增。
 說明至此,有8051基礎者必然疑惑?8051在RAM的定址上最高8-bit(256B),在ROM的定址上最高16-bit(64KB),何以有8KB RAM、128KB ROM的可能?
 其實這不難理解,先說明RAM的部份,由於8051也能使用外部資料記憶體(類似MPU般的並列位址解碼存取),但須使用MOVX的指令,且經常搭配 DPTR(Data Pointer,資料指位器)暫存器一同運作,更明白的說,過去需透過外部定址、解碼、存取的資料記憶體,如今直接內建到MCU內,如此而已。事實上更詳細的技術文件中就會註明此屬On-Chip的XRAM(eXternal RAM),即在存取行為上屬外部,但實體配置上卻是在內。
 除了增加RAM容量外,依據過往的程式撰寫經驗,標準8051僅一組DRTR暫存器在實際運用時經常有不敷使用的情形,使撰寫需要更多的資料搬移、暫存控制,所以新的8051相容MCU多會再增一組DPTR,達2組DPTR。


▲ST的串列型EEPROM:M24512(I2C介面)、M95512(SPI介面),容量皆為512KB,工作電壓1.8V,串列型EEPROM普遍用於各種嵌入式控制應用中。(圖片來源:ST.com)
 同樣的,ROM為何可以到128KB?其實是用8051本有的相同技巧,8051在通用暫存器(General Purpose Register,指R0∼R7)的使用上可以透過RS0、RS1的選擇位元操控,而在4組暫存器庫(Register Bank)間切換,相同的概念也可運用在ROM上,在特殊功能暫存器(Special Function Register;SFR)的區域中增設了一個PSBNK暫存器,並操控暫存器中的COBANK位元,就可以達到128KB的程式切換(在兩組64KB間切換)。
內建EEPROM
 標準8051本身並沒有內建EEPROM,但由於大多數的控制應用都需要儲存一些組態資料,且在斷電後仍要持留。關於此,如果只是少許的組態資料還可以用指撥關開(DIP Switch)解決,但資料一多時就需要用上EEPROM(並列型EEPROM逐漸減少,由Flash所替,今日多數的EEPROM皆屬串列型)。
 所以,8051經常會再以外連方式來擴增EEPROM的儲存資源,如此不僅要耗佔8051的GPIO接腳,而且也要額外的程式撰寫才能與EEPROM進行存取、操控。既然8051(或說8-bit MCU)的控制應用會經常用到EEPROM,也因此有業者改採內建方式提供,不僅內建,甚至也讓存取更加方便,只要運用一般的8051指令即可讀寫 EEPROM,並且在寫入完成後發出中斷通知,讓控制程式師省去不少撰寫心力。
 在此一樣舉實例,Atmel的AT89C5115、 AT89C51AC2、AT89C51AC3、AT89C51ED2等相容8051 MCU即有內建2KB的EEPROM,又如Philips的P89LPC938、P89LPC936、P89LPC935等亦內建512B, Winbond的W78E858也有128B,至於MAXIM/Dallas Semiconductor與SiLabs則尚無此種設計。
 至於ROM記憶體的本質方面,過去標準8051用的是Mask ROM(8051)或EPROM(8751),如今Mask ROM依舊存在,但愈來愈多應用是改採OTP ROM(只可燒寫一次的EPROM),以求取量產成本及修改彈性的均衡,此外也用Flash Memory(此時當稱Flash ROM)的8951取代EPROM的8751,並追加線上燒錄(In-System Programming;ISP)的機制,如此不僅設計開發時更加方便,且應用產品出貨後仍可修補、更新程式,尤其ISP可讓產品不需後送搬運,而是在應用現場直接更新。
附註:可重複燒寫型的MCU不僅從EPROM換成Flash Memory,同時也不斷強化可重複燒寫的次數,以及燒寫之後的資料保存年限。
結論
 最後,先進的8051相容MCU還有個共同趨勢,但卻不是在晶片本身,而是在應用開發層面,那就是用高階語言撰寫控制程式,由於新的8051相容MCU在效能與資源上都大幅充沛,為講究撰寫開發效率,多數的邏輯、判斷程式可用高階語言來撰寫,僅少數部份的低階操控、快速反應等程式依然維持原有的8051組合語言(原生指令集)撰寫法。
 至於有哪些高階語言可用於8051?答案是BASIC、C、Forth、Modular 2、Pascal、PL/M等,然實際上以C語言最被普遍使用。


▲SiLabs 的C8051F12x、13x系列,執行效能50∼100 MIPS,並內建諸多週邊功能,如Vref參考電壓、Voltage Comparator電壓比較器、Temp Sensor溫度感測器、ADC類比數位轉換器,運算核心甚至有16×16乘加運算器。(圖片來源:SiLabs.com)

Advertisements