笔者将从芯片IC的系统设计的角度去诠释如何掌握体系编程和SOC编程。笔者有超过10年的嵌入式研发经验,作为架构师多次主导过基于ARM/MIPS/51核的多媒体SOC研发并成功量产案例,希望本系列文章能给嵌入式学习者和从业者有较深刻的指引。
一、体系编程的边界和范畴
嵌入式开发人员往往从最简单的51单片机编程开始,然后慢慢会接触到PIC、AVR、STM32等系列或者型号控制器,还会可能转向三星S5PV210、Exynos4412等高端处理器编程。
开发人员一般的开发过程都是理解完该型号控制器或者处理器对应的指令集和datasheet,然后通过简单的例程开始编程,而最普遍的模块是GPIO、中断和定时器timer。在接触到多种类型的处理器编程之后,我们可能会有归纳式的疑问:
在include一个代表该型号IC的register map的头文件后,某些系列芯片的控制编程可能是完全一样的,而不同系列芯片的控制编程也是类似,唯一的不同可能在于寄存器命名的不同。这是为什么?
要回答这些问题,我们必须要弄懂体系编程的范畴,明确体系编程的边界。要深刻地理解体系编程,我们需要从芯片的系统设计的角度去理解芯片的研发构成,可以参考笔者之前撰写过的《集成电路设计和分工》。
其中有一点非常重要,就是我们要理解CPU核心和SOC的关系。这个世界上有能力研发SOC(System on chip片上系统)的公司很多很多,大到大名鼎鼎的苹果和三星公司,小到深圳那些籍籍无名但又很赚钱的芯片设计公司都是属于这个行列。而CPU核呢,放眼世界,能设计CPU知识产权核的就那么几家,如Intel的X86,ARM公司的ARM核,MIPS公司的MIPS核,51内核也算一个。这里要说明一点,中国没有,国家虽然重点扶持集成电路,但高层也知道这个砸重金也没用,实实在在的先把集成电路封装、工艺等技术发展起来再说。现在的android智能机都是基于ARM核的,想知道ARM之父是谁吗?前不久大师steve furber在广东工业大学做了讲座:
SOC都是根据市场需求和功能定位,在某个类型的CPU核基础上集成各种通用的外围模块控制器,如前面说的GPIO、INT和TIMER,和一些专用的模块控制器,如TI公司的蓝牙单芯片CC2541集成的蓝牙基带和射频控制器。SOC和CPU核的关系如下图: