- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
系统级芯片内部SRAM与外部SDRAM组合设计方法
上网时间 : 2003年12月14日
打 印 版 推 荐 给 同 仁 发 送 查 询
很多系统级芯片带有内部存储器,它具有速度快功耗低的优点,但容量却不是很大,因此需要和外部存储器结合起来使用。本文介绍如何配置系统以使片上SRAM和片外SDRAM一起构成一个连续的存储空间,达到比单独使用SDRAM时等待时间更短且功耗更低的目的。
LH79520是一种具有较高集成度的系统级芯片,可广泛用于多种便携式设备。该芯片带有32KB片上SRAM,可用作LCD显示器的片上帧缓存器。但不幸的是,32KB对多数彩色显示器存储容量太小,例如一个320×240 8位像素显示器需要75KB存储空间。尽管如此,由于片上存储器速度快,功耗也比SDRAM小很多,所以把片上SRAM作为大型帧缓冲器的一个部分还是有意义的。
LH79520内部有一个ARM720T核,该内核包含存储器管理单元(MMU),可以区分物理存储器地址和虚拟存储器地址。如果ARM720T的MMU处于工作状态,处理器将执行虚拟存储器地址的代码,虚拟地址可映射到完全不同的物理地址。初看之下,将SRAM与SDRAM合并的任务像是MMU的工作,但遗憾的是MMU只为处理器内核进行地址转化,像彩色LCD控制器(CLCDC)之类的DMA外设不是ARM720T内核的一部分,所以DMA外设只能使用物理地址。为了把片上SRAM和SDRAM组合成一个相连的物理地址空间,必须利用LH79520的REMAP功能和片上SRAM的地址映射特性。
复位后LH79520的内存映象如图1最左列所示。将LH79520的复位、状态和功率控制器(RCPC)中的REMAP寄存器设定为0b10后,程序会把片上SRAM移到紧挨着SDRAM存储器的位置。由于片上SRAM只有32KB,这样在片上SRAM最后地址0x00007FFF和SDRAM第一个地址0x20000000之间会有一个很大的空隙。
地址映射反映了在具体器件上,程序访问最后一个物理地址存储器时会发生什么情况。当REMAP等于0b10时,32KB片上SRAM物理地址范围为0x00000000~0x00007FFF,片上SRAM地址总线只有15位。如果代码想进入地址为0x00008000的存储器,那么SRAM地址总线0位到14位为0,而第15位应该为1,但却不会出现这种情况因为没有第16条地址线。所以进入0x00008000实际上是进入地址为0x00000000的存储器,于是在0x00000000~0x1FFFFFFFF范围里,地址重复使得片上SRAM每隔32KB就会在地址空间里有一个映射(图2)。
所以,要从片上SRAM和SDRAM上创建一个75KB帧缓冲器就要把CLCDC上格帧缓冲器设定在0x1FFF8000地址上,于是帧缓冲器范围将从0x1FFF8000~0x2000ABFF。
多数LH79520应用需要从虚拟地址0x00000000开始放置异常矢量,由于REMAP寄存器已经设定为0b10,所以从0x00000000开始的物理地址空间已经被第一个32KB或帧缓冲器所占有。如果系统中断速率很高,程序将会受益于使用片上SRAM进行异常处理。对这类系统,只要把开始地址在CLCDC的片上帧缓冲器设定到内部存储器并跟随所有异常处理代码地址,如果异常处理代码有1KB,就将CLCDC帧缓冲器开始代码设定为0x1FFF8400。
另一方面,由于LH79520从虚拟地址取回指令,因此不必保存帧缓冲器应用所需要的空间异常向量。MMU允许把任何需要的内存放在虚拟地址0x00000000处,例如可以把4KB的SDRAM映射到虚拟地址0x00000000上,并把异常矢量拷贝到新的虚拟地址。当然,还得用MMU来给帧缓冲器创建一个相邻的虚拟存储空间。假如有快速图形库,则对MMU编程时应该使帧缓冲器虚拟内存空间作为高速缓存,而不是写缓冲器,这样能够减少帧缓冲器更新的等待时间。
作者:Paul Kovitz
Harrison Killian
工程师