2007年9月11日 星期二

淺談嵌入式系統(SOC)

嵌入式系統(SOC)算是近幾年來相當熱門的話題
許多人也紛紛朝這方向研究及分析
不過也有大多數的人不得其門而入
在此小弟簡單的介紹一下

要使用SOC之前 我們必須先考量一個問題
我們所建立的SOC功能為何 目的為何
如果說只是單純建立幾個基本正反器
或者是幾個簡單的邏輯閘組成的電路
小弟是認為這用硬體描述語言就可以解決
甚至於買塊麵包板跟IC回來插一插就搞定了
若說用到SOC 有點殺雞焉用牛刀之感
所以確定自己的需求 是相當重要之事

廢話不多說 我們趕快進入SOC的話題吧

SOC 顧名思義就是System on Chip
至於要在一顆chip上建立一個system而言
並不是可以用簡單的HDL就能處理的
我們先思考幾個問題

  1. 既然是system 那麼是怎樣的system?
  2. 什麼樣的物件(或硬體)算得上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效能的最大主因

參考文件:

  1. Nios II Processor Reference Handbook
  2. 基於ARM的SOC設計入門

沒有留言: