SoCs还有另外两个称呼:针对定制芯片的专用集成电路ASICs (Application-specific Integrated Circuits)和针对商业领域的专用半导体部分ASSP(Application-specific Semiconductor Parts)。所有的这三个术语都不是很精确,而且可以被相互取代。所有主要的硅片公司都设计制造了SoCs:Texas Instruments有一个称为OMAP的产品家族,Intel也有他们自己的XScale系列处理器。图2.2显示了一个典型的System-on-Chip设计。
图2.2 片上系统
SoC里面的每个子组件都是一个智能性能(IP)块,这些块通过工业的标准接口连接到互联总线。IP块可以通过很多途径进行授权,最著名的IP授权公司是ARM有限公司,该公司授权ARM CPU核心。
例子所示的SoC是由ARM926 CPU驱动的,可用于Symbian OS和多媒体数字信号编解码器的DSP。这两个核心都是系统总线上的重要部分,而系统总线是高速低延迟的32位总线,它被连接到DRAM控制器。系统总线和存储控制器把所有的数据访问都集中到主存里,所以它们必须被设计成能提供高带宽和低延迟的传输,以避免过度地拖累CPU或者降低了它高效的性能。
DMA引擎和LCD控制器是另外的重要总线,它们都通过同样的总线访问存储器。其他的外设被称为从属总线——它们不能直接访问存储器,而是通过它们的主总线以命令和数据的形式来满足它们的要求。这些从属块被串联成两个外设总线,一个用于高速DMA设备,另一个用于简单的低带宽外设。
外设总线通过总线桥被连接到系统总线。因为外设总线通常运行速度慢于系统总线,因此必须由总线桥翻译不同的总线格式并平衡速度差。良好的SoC设计会关注这些桥以保证CPU可以快速地访问关键的时控或高带宽外设。
Steve Furber的ARM System-on-Chip Architecture ¹ 一书里有更多关于ARM SoCs的信息。
2.2.1 物理内存映像
总线和它们的连接决定芯片的物理地址映像——32位编址就有4GB的寻址空间。对于软件,Symbian OS使用CPU的内存管理单元(MMU)把芯片地址空间布局的实体重映像到相应的虚拟地址空间上。
例如,系统总线控制器会把4GB的SoC地址空间划分成一些大的区域。只需解码首部的三位,就可以产生八块区域,每个区域有512MB空间大小:
Address start | Address end | Content |
0x00000000 | 0x1FFFFFFF | ROM Bank 0 (Boot Rom) |
0x20000000 | 0x3FFFFFFF | ROM Bank 1 |
0x40000000 | 0x5FFFFFFF | DSP |
0x60000000 | 0x7FFFFFFF | Fast Peripheral Bus |
0x80000000 | 0x9FFFFFFF | Slow Peripheral Bus |
0xA0000000 | 0xBFFFFFFF | IRAM |
0xC0000000 | 0xDFFFFFFF | DRAM Bank 0 |
0xE0000000 | 0xFFFFFFFF | DRAM Bank 1 |
随后,这些大区域会被进一步划分成更小的区域。
对于安装在DRAM Bank0上32MB的RAM,如果25到28地址位没有被硬件解码,
剩下的480MB地址空间会包含RAM上的内容的别名,通常会是这样:
0xC0000000 | 0xC1FFFFFF | 32 MB RAM |
0xC2000000 | 0xC3FFFFFF | 32 MB Alias 1 |
0xC4000000 | 0xC5FFFFFF | 32 MB Alias 2 |
. . . | . . . | . . . |
0xDE000000 | 0xDFFFFFFF | 32 MB Alias F |
外设总线区域由外设进行进一步的划分。上述例子中SoC上的每个快速外设都为它们的寄存器组提供有64KB的地址。
0x60000000 | 0x6000FFFF | NAND Interface |
0x60010000 | 0x6001FFFF | IPC |
0x60020000 | 0x6002FFFF | Audio |
0x60030000 | 0x6003FFFF | USB |
. . . | . . . | . . . |
0x600x0000 | 0x7FFFFFFF | Empty Space |
实际上,每种ASSP都有不同的物理地址空间,而且大部分不会被使用,往不使用的空间上读写会导致一个总线错误。
一个良好的设计里,所有重要总线角色都要有相应的内存映像,消除翻译物理地址的需求,并且减少发生错误的可能性。
通常,CPU会访问系统中的所有外设,然而其他重要角色只拥有其从属角色的可见性。LCD控制器需要从内存中取得流数据,直接内存存储引擎则在快速外设和内存之间工作。
引导代码使用物理地址映像设置MMU,直接内存存储引擎和其他重要总线角色不包含它们自己的MMU。它们只理解物理地址,而且在这些设备上编码的软件必须在使用之前把虚拟地址翻译回它们的物理地址。
2.2.2 中央处理单元(CPU)
Symbian OS要求有一个具有高性能和低电耗的32位微处理器。它必须采用Little-Endian模式,有完整的MMU,用户和管理者模式,以及有中断和异常机制。ARM的设计很精确地符合这些要求,当写作本书的时候,所有的Symbian OS电话都有一个基于ARM的CPU,世界上80%的移动电话也采用这种CPU。
下面依次来看看这些需求:
高性能是一个与电池供能设备相关的术语。现在的Symbian电话CPU时钟在100到200MHz之间,比起PC上平均3GHz的速度要慢一个数量级,但是它们消耗的能量却少了三个数量级。未来的应用要求CPU的速度峰值能达到300到400MHz。
低电耗是Symbian OS手机上所有组件的设计要求。在设计CPU的时候,要进行工程学上权衡取舍,而且要加进去一些特性以制造出最有能效的核心。精益求精的硬件设计,所选择的电路时钟以及独特的多种低电模式:空闲、休眠、睡眠、深睡眠和退出,换来了电源的节省。在第十五章,电源管理,我将讨论Symbian OS为电源管理所提供的从硬件到软件框架的映像。
基于CPU提供的用户和管理者模式,MMU允许用户内存的虚拟化。EKA2为应用程序构造了一个强大的执行环境,每个应用程序有它自己受保护的内存区,并且与其他的应用程序相隔离。应用程序代码受限制地在用户模式执行,而内核代码使用管理者模式,只受到很少的限制,其中就包括来自它的虚拟内存映像的限制。在第七章,内存模型,我描述了Symbian OS提供的内存模型。
异常是改变核心指令流的CPU事件。中断异常由正在寻求关注的外设抛出。软件中断作为从用户模式到管理者模式的控制转换而被使用。如果代码试图访问没有被映像的内存,MMU将产生一个数据终止。而当CPU跳转到没有被映像的代码地址时,MMU将产生一个预取终止。第六章,中断和异常,有关于中断和异常的更多信息。
===================================================================
说明: 本文由Bequan翻译自Symbian Press的Symbian OS Internals: Real-time Kernal Programming一书。任何人需要转载或引用,请先通过Email( a-pangu@163.com或 symbianchn@gmail.com)与Bequan联系,在获得许可后方可转载或引用,否则视为侵权行为。转载或引用时,请在文章中注明上述翻译信息。