基于系统级芯片内部SRAM与外部SDRAM组合设计方法
发布时间:2009/3/3 0:00:00 访问次数:1560
很多系统级芯片带有内部存储器,它具有速度快功耗低的优点,但容量却不是很大,因此需要和外部存储器结合起来使用。本文介绍如何配置系统以使片上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编程时应该使帧缓冲器虚拟内存空间作为高速缓存,而不是写缓冲器,这样能够减少帧缓冲器更新的等待时间。
欢迎转载,信息来自维库电子市场网(www.dzsc.com)
很多系统级芯片带有内部存储器,它具有速度快功耗低的优点,但容量却不是很大,因此需要和外部存储器结合起来使用。本文介绍如何配置系统以使片上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编程时应该使帧缓冲器虚拟内存空间作为高速缓存,而不是写缓冲器,这样能够减少帧缓冲器更新的等待时间。
欢迎转载,信息来自维库电子市场网(www.dzsc.com)