SDRAM的地址映射方式

原文地址:http://icetime17.blog.163.com/blog/static/1974213792011919113437312/

    其实通常所说内存(Memory)指的是:SDRAM(Synchronous Dynamic Random Access Memory)同步动态随机存取存储器,同步是指Memory工作需要步时钟,内部的命令的发送与数据的传输都以它为基准;动态是指存储阵列需要不断的刷新来保证数据不丢失;随机是指数据不是线性依次存储,而是由指定地址进行数据读写。

    SDRAM从发展到现在已经经历了四代,分别是:第一代SDR SDRAM,第二代DDR SDRAM,第三代DDR2 SDRAM,第四代DDR3 SDRAM。第一代与第二代SDRAM均采用单端(Single-Ended)时钟信号,第三代与第四代由于工作频率比较快,所以采用可降低干扰的差分时钟信号作为同步时钟。SDR SDRAM的时钟频率就是数据存储的频率,第一代内存用时钟频率命名,如pc100,pc133则表明时钟信号为100或133MHz,数据读写速率也为100或133MHz。之后的第二,三,四代DDR(Double Data Rate)内存则采用数据读写速率作为命名标准,并且在前面加上表示其DDR代数的符号,PC-即DDR,PC2=DDR2,PC3=DDR3。如PC2700是DDR333,其工作频率是333/2=166MHz,2700表示带宽为2.7G。

    SRAM是英文Static RAM的缩写,它是一种具有静止存取功能的内存,不需要刷新电路即能保存它内部存储的数据。不像DRAM内存那样需要刷新电路,每隔一段时间,固定要对DRAM刷新充电一次,否则内部的数据即会消失,因此SRAM具有较高的性能,但是SRAM也有它的缺点,即它的集成度较低,相同容量的DRAM内存可以设计为较小的体积,但是SRAM却需要很大的体积,所以在主板上SRAM存储器要占用一部分面积,在主板上哪些是SRAM呢?
    一种是置于CPU与主存间的高速缓存,它有两种规格:一是固定在主板上的高速缓存(Cache Memory );二是插在卡槽上的COAST(Cache On A Stick)扩充用的高速缓存,另外在CMOS芯片1468l8的电路里,它的内部也有较小容量的128字节SRAM,存储我们所设置的配置数据。
    还有一种是为了加速CPU内部数据的传送,自80486CPU起,在CPU的内部也设计有高速缓存,故在Pentium CPU就有所谓的L1 Cache(一级高速缓存)和L2Cache(二级高速缓存)的名词,一般L1 Cache是内建在CPU的内部,L2 Cache是设计在CPU的外部,但是Pentium Pro把L1和L2 Cache同时设计在CPU的内部,故Pentium Pro的体积较大。最新的Pentium II又把L2 Cache移至CPU内核之外的黑盒子里。SRAM显然速度快,不需要刷新的动作,但是也有另外的缺点,就是价格高,体积大,所以在主板上还不能作为用量较大的主存。

现将SRAM的特点归纳如下:
◎优点,速度快,不必配合内存刷新电路,可提高整体的工作效率。 
◎缺点,集成度低,功耗较大,相同的容量体积较大,而且价格较高,少量用于关键性系统以提高效率。 
◎SRAM使用的系统: 
○CPU与主存之间的高速缓存 
○CPU内部的L1/L2或外部的L2高速缓存 
○CPU外部扩充用的COAST高速缓存 
○CMOS 146818芯片(RT&CMOS SRAM)

SRAM与SDRAM的比较:
SRAM是靠双稳态触发器来记忆信息的;SDRAM是靠MOS电路中的栅极电容来记忆信息的。由于电容上的电荷会泄漏,需要定时给与补充,所以动态RAM需要设置刷新电路。但动态RAM比静态RAM集成度高、功耗低,从而成本也低,适于作大容量存储器。所以主内存通常采用SDRAM,而高速缓冲存储器(Cache)则使用SRAM,在存取速度上,SRAM>SDRAM。另外,内存还应用于显卡、声卡及CMOS等设备中,用于充当设备缓存或保存固定的程序及数据。


接下来看SDRAM的地址映射方式:

BRC = Bank, Row, Column = Bank-Row-Column
RBC = Row, Bank, Column = Row-Bank- Column
这是SDRAM中,两种不同的地址映射方式。

SDRAM的地址映射方式 - ICE_AGE - ICE 的 AGE
 

SDRAM物理上,最小的单位,叫做一个cell单元,用于存储一个数据单位,可以是4-16bits。而更大一点的单位,就是对应的row或column了,见上图,这个很好理解,不多解释。然后多少行,多少列,共同组成了一个Bank,中文的含义,很像一个块,一个数据块。
根据上图中的说明可知:
常见的Bank,有4-8个;
而每个Bank中,一般包含16K的row;
而每个行中,一般又包含1024=1K的column;
而每个column中,即是我们所说的最小的单位cell了,是4-16bits。

此处所谓的地址映射,简单说就是,将一个内存地址,转换对应到相应的物理存储单元。

比如有个SDRAM,对应的参数是:
512Mb (32Mx16), 4 banks(用2bit表示), row length = 13 bit, column length = 10bit
然后有个内存地址0x5010 2040,这样的地址,其实最高位的0x50是对应着SDRAM地址的最开始,所以,此处可以忽略,实际所表示的地址,就是0x0080 2040.

然后看个图:

SDRAM的地址映射方式 - ICE_AGE - ICE 的 AGE
 这其实很清楚的显示了两种映射方式间的区别。

常见的地址映射方式有三种:
B-R-C (Bank, Row, Column)
R-B-C (Row, Bank, Column)
B-RL-CL-RH-CH (Bank, Row Low, Column Low, Row High, Column High)
BRC这种映射方式,用的最多。其优点是,功耗低;
RBC的优点是适合数据流方式去访问数据,性能好;
B-RL-CL-RH-CH适合存储视频,图像等数据,高性能。
而至于将某个SDRAM设置为BRC还是RBC,好像是SDRAM的controller来决定的。
而由于BRC和RBC,分别有不同的特点,所以,对于如何设置此地址映射方式,就是:
【总结】
如果是low-power的SDRAM(功耗相对低的,1.8V的低电压),然后就选BRC;
如果是High performance的SDRAM(高性能的,当然功耗相对高些,3.3V或2.5V的正常电压的),就选RBC。

### 芯片地址映射方式和方法详解 #### 1. 地址映射的基本概念 地址映射是指将逻辑地址转换为物理地址的过程。对于嵌入式系统中的芯片而言,地址映射通常涉及如何将外部设备或内部资源的逻辑地址与实际硬件上的物理存储单元关联起来[^2]。 #### 2. ARM架构下的地址映射机制 在ARM架构下,地址映射可以通过软件配置来实现动态调整。具体来说,ARM芯片支持通过修改特定寄存器的内容来进行地址重映射操作。这种重映射允许开发者灵活定义不同功能模块之间的地址分布关系[^2]。例如,在启动阶段,默认情况下某些关键区域可能被映射到较低地址空间以便快速访问引导代码;而在正常运行期间,则可以根据需求重新安排这些区域的位置以优化性能或者满足特殊应用场景的要求。 #### 3. STM32F103系列的具体实现 针对STM32F103这样的微控制器产品线,其内部外设以及闪存等资源均按照固定的规则分布在指定范围内【参见相关内容描述】[^1]。为了便于管理和控制各个部分的功能状态,制造商还提供了专门用于管理此类资源配置的一套体系结构——即所谓“寄存器映射”。这意味着每一个可编程选项都对应着某个唯一编号位置处的一个比特位组合形式表示出来并通过读写相应字段完成设定动作[^3]。 ##### (a) 寄存器的作用及其重要性 寄存器作为连接处理器核心与其他组件之间桥梁的角色至关重要。它们充当临时储存区用来保存当前正在处理的信息片段直到下一步骤所需为止; 同时也提供了一种高效途径让用户能够直接干预底层硬件行为而不必每次都经过操作系统层面上较慢路径去请求权限许可后再执行命令序列[^1]. ##### (b) GPIO端口初始化过程中的应用举例 当涉及到通用输入/输出(GPIO)接口启用流程时, 需要遵循一系列精确指令步骤才能正确激活目标引脚并赋予期望的工作模式(比如推挽输出还是开漏输入等等)[^3]. 这其中包括但不限于以下几个方面: - **定位相关时钟源**: 查找负责驱动所关心外围部件工作的时钟信号发生装置的确切基址. - **计算相对偏移量**: 明确待调节参数在整个控制系统布局图谱里的确切座标点数. - **开启供电开关**: 确保选定通道获得充足电力供应从而维持稳定运作条件. - **细化方向及其他特性规定**: 对于每一条线路单独制定详细的传输规格书包括但不限于速度等级限制等方面考虑因素. #### 4. SDRAM中的地址映射策略 除了MCU本身之外,其他类型的半导体器件如SDRAM也有自己独特的地址映射方案。在这种随机存取记忆体里边,基本组成要素是以行列矩阵排列而成的小格子(cell),多个这样的小格集合在一起形成更大的区块(bank)。整个寻址过程中会经历由高层抽象层次逐步分解至最基础颗粒级细节的操作链条,最终达成从单一虚拟标识符指向实体物质载体的目标[^4]。 ```c // 示例代码展示如何设置GPIO端口 void GPIO_Init(void){ RCC->APB2ENR |= RCC_APB2ENR_IOPAEN; // Enable clock for Port A [^3] GPIOA->CRH &= ~(GPIO_CRH_MODE13 | GPIO_CRH_CNF13); // Clear previous settings on PA13 [^3] GPIOA->CRH |= (GPIO_CRH_MODE13_1 | GPIO_CRH_CNF13_0); // Set mode to output at max speed of 2 MHz [^3] } ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值