嵌入式系统(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一筹。
NIOS的优势在于灵活可定置外设,而ARM是把常用的外设都做好了布局布线固化在那里,它可以实现最优化的芯片构架设计。个人认为如果你的嵌入式系统不需要一些纯硬件算法,如FFT,FIR,编解码等,或者硬件平台要经常作变动的,NIOS就不是最好的选择,它体现不了FPGA和SOPC的优势。
灵活的外设和硬件算法的实现,这些都是Nios II的优点。不过若以研究来说,Nios II远比ARM有趣,因为软件硬件的功力都需要有,一旦上瘾就很难自拔。
说到这里,相信各位应该对SOC有了基本的认识,其实SOC的平台很多,在此虽然只举出两个例子供大家比较,而我们可以在此给两者做个结论,若各位的设计是比较偏向硬件,可选择NIOS II,若是偏向软件,ARM是比较方便,我想这也是为何业界偏好使用ARM来开发商品而不用NIOS II,不过,谁好谁坏,还是看需求为主,这是没有绝对的。
但请记得,SOC的主体架构是相同的,差别只在于CPU与BUS的架构,这才是SOC的灵魂,也是主宰SOC效能的最大主因。
参考文件:
Nios II Processor Reference Handbook
基于ARM的SOC设计入门