天天看點

淺談單片機、ARM和DSP的異同

猶記得當年讀書的時候,老師說單片機、arm、dsp有互通之處,都是cpu,但聽老師講都聽不懂。

  我該如何了解他們,并找出他們的異同呢?我們來看看行内人的看法:

  icer,從事arm cpu的soc設計

  按我的了解說幾句吧,希望能說薄一點。

  首先,說cpu,中央處理器,本質就是一個內建電路,實作的功能就是從一個地方(如rom)讀出一個指令,從一個地方(如ram)讀出資料,然後根據指令的不同對資料做不同的處理(如相加),然後把結果存回某個地方(如ram)。不同架構的cpu會有不同的指令,不同的存取方式,不同的速度,不同的效率,等等的差異。

  然後,說單片機(通常意義所說的微控制器mcu),arm(通常意義所說的高效能risc),dsp(通常意義所說的通用數字信号處理器),這三個cpu分别是針對不同的應用而産生的cpu。當然這也不是絕對的,因為arm現在出的cpu囊括了mcu(如m0),risc(如a8),dsp(如m4)。

  微控制器的目的主要是用作控制,他不需要多快的速度,如電飯鍋的控制器,隻需要控制發熱元件的通斷,信号等的開關等,但是對成本要求很嚴格,是以一般做得比較簡單,4位,8位的很多。

  高效能的risc,常用于一些資料處理比較多的地方,最常見的莫過于現在的消費性電子産品了,手機,pad,mp4等等,目前arm的商業模式主要是賣核心,內建到各家的soc中間。他其實就是個通用的cpu,能幹各種各樣的活,和intel的cpu一樣。但是通用就有效能問題,在某些特殊場合,效能就顯得沒那麼高了,如大量運算(譬如做fft)的時候。這樣就有dsp的用武之地了。

  dsp,數字信号處理器,隻要是做數字信号處理的子產品都可以叫做一個dsp,如視訊解碼的ip核。但你老師所說的應該是指通用的數字信号處理器,如ti的tms320c55x dsp。該cpu的長處就是在于運算,大量循環的計算,如連續1024個乘加。他的指令針對這種應用有特殊的處理,相比risc可以更快速高效地完成這類運算。

  總的來說,學習cpu,首先就是要了解其指令集,然後了解去指令執行的方式,然後針對具體的晶片了解其外圍電路,程式都是用c寫的,基本使用就沒啥問題了。

  入門教材就不知道了,學好微機原理先吧。

  qccc

  一種裝置能稱之為cpu,是因為它能夠融入到計算機的馮諾依曼體系中。馮諾依曼的計算機模型規定了計算機“運算器、存儲器、控制器、外存儲器、輸入和輸出裝置”,而cpu的重要地位在于解決了運算問題,計算機的cpu能夠通路存儲器的資料和指令進行運算,從實作運算這一點的角度上看,無論是單片機、arm、dsp都可以稱之為cpu。

  單片機內建完整的馮諾依曼體系所規定的結構,是一個完整的計算機體系。實作特定的運算功能,應用領域集中在工業自動化控制等專門化需求的運算領域。

  arm出品的晶片精髓在“r”,是risc精簡指令集的意思,和傳統大型機以及pc微處理器采用的指令系統相比,risc指令集根據80%的時候隻用到了20%的處理器指令的狀況,使用了經過精簡設計的指令系統,使得整個處理器的設計可以更加簡潔,功耗、體積大大縮小,是以arm在目前的手機、平闆等職能移動裝置上得到了廣泛應用。随着arm處理能力的不斷增強,加上其功耗小的特點,也不斷在擴充其企業級伺服器叢集應用的可能性,為企業降低能耗成本。

  dsp是數字信号處理器,相較于普通計算機實作通用計算的特點,dsp隻負責數字信号(視訊、音頻或者其他傳感器獲得數字信号)處理。在日常生活中,常見的dvd、藍光播放機、數字電視機頂盒、mp3、mp4等都廣泛使用了dsp,由于設計的專門化,是以可以在較低的成本下,使dsp執行異常複雜的編碼、解碼等信号處理工作,而無需使用價格昂貴的通用處理器。

  是以從廣義上講,單片機、arm和dsp都可以算做cpu,但是這種說法并不嚴格,因為如今cpu往往指代的是相容x86架構的通用處理器,例如你電腦裡的intel和amd出品的cpu。如果把單片機、arm和dsp都稱作cpu,會在了解上産生偏差。

  謝文洋,嵌入式愛好者

  這些的确都能算cpu,前面大家已經說過共同點了,我主要說說差別吧。主要差別在于用途不同造成了功能側重的差別。

  比如單片機和低端arm(如m3),更嚴謹的說法應該稱作microcontroller 或 mcu(micro control unit),中文一般叫“微控制器”。而cpu叫做“中央處理器”。一個control 和 process 還是有很大差別的。 微控制器不需要一般也不具備強大的計算能力,重點在于實作各種邏輯和非邏輯控制。

  而dsp的(digital signal processor), process表明它相比于通用單片機具有更為強大的處理,運算能力。可以實作對數字信号的各種算法的處理。

  舉一個簡單的例子。一個mp3可能由一塊普通mcu+一塊專用dsp 晶片組成。 其中普通mcu叫主要晶片,負責全局控制。諸如通過處理按鍵來響應使用者的操作,控制螢幕輸出相關播放資訊給使用者等等。而dsp隻負責音頻檔案的解碼。可見,全局的控制工作,邏輯比較繁瑣,比如顯示中各級菜單的實作,這是mcu适合的工作。而音頻解碼需要強大的運算能力,普通mcu難以勝任,就需要dsp來進行。

  而arm和單片機,我個人認為沒有特别嚴格意義的界限,主要看功能和需求的劃分。arm本身已經給我們劃分的很好了:”armv7架構定義了三大分工明确的系列:‘a’系列面向尖端的基于虛拟記憶體的作業系統和使用者應用;‘r’系列針對實時系統;‘m’系列對微控制器。“ 是以諸如stm32之類的cortex-m3晶片其實也可以了解做高端單片機的範疇。側重于控制,片内內建,低功耗等名額。相比傳統51,avr。 contrex-m系列的微控制器內建了更多的資源(如更高位的ad,更多的序列槽,以及i2c,spi之類的外設總線)。而且32位相比傳統8位和16位的單片機也更有優勢。

  而消費類電子産品中的arm顯然需要更為強大的運算功能。 這一塊我不太熟悉,就不多說了。

  額,發現樓主還問了如何學習。其實很簡單,就是實踐。買一塊開發闆實際動手做比什麼都強,有機會參與一些項目更好,自學現在網絡資源也非常豐富,不用擔心。可以從8位單片機學起,作為入門。雖然近些年大家都說51落伍了,但是作為單片機入門還是很好的,相對簡單,網上資源到處都是。你去買任何一個子產品幾乎都會給你提供51的例程。。。我現在就經常拿51測試子產品,測試好了再改一下代碼用到stm32上。

  總之,隻看書是沒有用的。還是要多動手。寫寫代碼,燒燒程式,焊焊簡單的電路。你會收獲很多。

  anning865

  我也來說一下自己的了解。

  首先,“嵌入式”這是個概念,準确的定義沒有,各個書上都有各自的定義。但是主要思想是一樣的,就是相比較pc機這種通用系統來說,嵌入式系統是個專用系統,結構精簡,在硬體和軟體上都隻保留需要的部分,而将不需要的部分裁去。是以嵌入式系統一般都具有便攜、低功耗、性能單一等特性。

  然後,mcu、dsp、fpga這些都屬于嵌入式系統的範疇,是為了實作某一目的而使用的工具。

  mcu經過這麼多年的發展,早已不單單隻有普林斯頓結構的51了,性能也已得到了很大的提升。因為mcu必須順序執行程式,是以适于做控制,較多地應用于工業。而arm本是一家專門設計mcu的公司,由于技術先進加上政策得當,這兩年獨霸單片機市場。arm的單片機有很多種類,從低端m0(小家電)到高端a8、a9(手機、平闆電腦)都很吃香,是以也不是arm的單片機一定要上系統,關鍵看應用場合。

  dsp叫做數字信号處理器,它的結構與mcu不同,加快了運算速度,突出了運算能力。可以把它看成一個超級快的mcu。低端的dsp,如c2000系列,主要是用在電機控制上,不過ti公司好像稱其為dsc(數字信号控制器)一個介于mcu和dsp之間的東西。高端的dsp,如c5000/c6000系列,一般都是做視訊圖像處理和通信裝置這些需要大量運算的地方。

  fpga叫做現場可程式設計邏輯陣列,本身沒有什麼功能,就像一張白紙,想要它有什麼功能完全靠程式設計人員設計。如果你夠nb,你可以把它變成mcu,也可以變成dsp。由于mcu和dsp的内部結構都是設計好的,是以隻能通過軟體程式設計來進行順序處理,而fpga則可以并行處理和順序處理,是以比較而言速度最快。

  那麼為什麼mcu、dsp和fpga會同時存在呢?那是因為mcu、dsp的内部結構都是由ic設計人員精心設計的,在完成相同功能時功耗和價錢都比fpga要低的多。而且fpga的開發本身就比較複雜,完成相同功能耗費的人力财力也要多。是以三者之間各有各的長處,各有各的用武之地。但是目前三者之間已經有融合的态勢,arm的m4系列裡多加了一個精簡的dsp核,ti的達芬奇系列本身就是arm+dsp結構,altera和xinlix新推出的fpga都包含了arm的核在裡面。是以三者之間的關系是越來越像三基色的三個圓了。

  一句話以蔽之“你中有我,我中有你”。