(轉貼) 淺談嵌入式系統 (IC Design) (SOC)
轉貼自Roger的研究生日誌 之 淺談嵌入式系統(SOC)
嵌入式系統(SOC)算是近幾年來相當熱門的話題,許多人也紛紛朝這方向研究及分析,不過也有大多數的人不得其門而入,在此小弟簡單的介紹一下。
要使用SOC之前,我們必須先考量一個問題,我們所建立的SOC功能為何,目的為何,如果說只是單純建立幾個基本正反器,或者是幾個簡單的邏輯閘組成的電路,小弟是認為這用硬體描述語言就可以解決,甚至於買塊麵包板跟IC回來插一插就搞定了,若說用到SOC 有點殺雞焉用牛刀之感,所以確定自己的需求是相當重要之事。
廢話不多說 我們趕快進入SOC的話題吧。
SOC 顧名思義就是System on Chip,至於要在一顆chip上建立一個system而言,並不是可以用簡單的HDL就能處理的,我們先思考幾個問題。
既然是system 那麼是怎樣的system?什麼樣的物件(或硬體)算得上on chip?在system部分分成兩部分一個是硬體、一個是軟體,在硬體的部份 包含在SOC裡面有許多部份。
我們以Altera NIOS II的架構來說(如下圖)
在框框裡面的即為一嵌入式系統,裡頭包含了CPU, Bus, On-Chip Memory 等等,這些全是硬體的部份,也就是說要建立一個SOC的最基礎,就是要從這裡開始。
我們可以這樣想,在框框外是實體的硬體,也就是真正看得見的chip或硬體(如LED, LCD等等),而要讓它們動作,得靠我們所設計的controller或driver,而這方面的設計,可依我們的需求會有所不同,這也是NIOS II最大的特點。
另外我們再來看另一個架構--ARM
這是一個很典型的ARM系統,我相信應該有人發現了幾個問題,首先是系統問題, 似乎ARM的系統遠比NIOS II複雜,且架構也比NIOS II大,感覺ARM的功能性比NIOS II強大,那麼兩者的差別到底在哪裡?
這個問題的解答正是各家SOC不同的地方,撇開CPU的架構而言,另一個差別就在於BUS,NIOS II的BUS名為Avalon Bus,ARM的為AMBA Bus,而ARM的AMBA又分為兩個:AHB和APB。
從上圖中我們可以發現,AHB主要是掌管記憶體部分,APB是掌管硬體周邊,在兩個BUS的雙重使用下,可更容易降低CPU的負擔,感覺上在這方面似乎NIOS II的BUS遜色不少,但各位也別忘了,NIOS II的優點在於硬體是客製化的(Custom),也就是說,NIOS II也可以實現雙BUS架構,因此只要是在FPGA內的LE夠的話,想要擴充不是問題。
那麼ARM是否就沒有缺點了呢?這個答案是否定的,ARM的缺點就在於硬體的彈性,在NIOS II裡,我們可以依據自己的需求而增加所要的硬體,而在ARM的話,硬體的設計是包好的,也就是說,BUS分成兩條就是兩條,而我們也不能將APB所連接的元件連到AHB上面,所以在限制上,ARM的硬體彈性比NIOS II低。
先前說過,SOC分成兩大部分:硬體和軟體,剛剛已經稍微介紹了兩個平台的硬體,接著我們從軟體的角度來分析。
首先在NIOS II上面,當硬體架設好後,就是要將軟體運行在所設計的硬體上,在NIOS II裡所採用的是MicroC/OS-II,而ARM上面的OS則可支援很多,例如uCLINUX, WINCE, VxWork等等,這並不是說NIOS II就不支援,只是在porting上比較複雜。
另外一提, 在NIOS II上的OS是要自己規劃的,也就是說我們引進了OS的基本函式庫後,在什麼時間該執行哪個TASK是自行設定,這個設定跟一開始在硬體時的設定有關,所以在使用OS上就顯得麻煩了一點,相對於uCLINUX,就有點像是一般安裝LINUX,只要針對自己的硬體,給定相對應的參數即可。
有了OS,再來談Application Software,在ARM上面開發軟體確實比NIOS II方便,它就像是一台小型的PC,而我們只需要在PC上安裝開發軟體即可,但在NIOS II上,光是要做一個軟體介面就不是十分容易,因此在軟體部分, ARM略勝NIOS II一籌。
說到這裡,相信各位應該對SOC有了基本的認識,其實SOC的平台很多,在此雖然只舉出兩個例子供大家比較,而我們可以在此給兩者做個結論,若各位的設計是比較偏向硬體,可選擇NIOS II,若是偏向軟體,ARM是比較方便,我想這也是為何業界偏好使用ARM來開發商品而不用NIOS II,不過,誰好誰壞,還是看需求為主,這是沒有絕對的。
但請記得,SOC的主體架構是相同的,差別只在於CPU與BUS的架構,這才是SOC的靈魂,也是主宰SOC效能的最大主因。
參考文件:
Nios II Processor Reference Handbook
基於ARM的SOC設計入門