转载自:http://tech.sina.com.cn/c/2001-07-30/4752.html

SDRAM内存的接口和设计方法

http://www.sina.com.cn 2001/07/30 09:42 小熊在线
 

  虽然目前SDRAM内存条价格已经接底线,内存开始向DDR和Rambus内存过渡。但是由于DDR内存是在SDRAM基础上发展起来的,所以详细了解SDRAM内存的接口和主板设计方法对于设计基于DDR内存的主板不无裨益。下面我们就从内存颗粒、内存槽位接口、主板和内存之间的信号接口几个方面来详细阐述SDRAM内存条和主板内存系统的设计思路。

  内存颗粒介绍

 

  对于DRAM(Dynamic Random Access Memory)内存我想凡是对于计算机有所了解的读者都不会陌生。这种类型的内存都是以一个电容是否充有电荷来作为存储状态的标志,电容冲有电荷为状态1,电容没有电荷为状态0。其最大优点是集成度高,容量大,但是其速度相对于SRAM (Static Random Access Memory) 内存来说慢了许多。目前的内存颗粒封装方式有许多种,本文仅仅以大家常见的TSSOP封装的内存颗粒为例子。

  其各个管脚的信号定义和我们所使用的DIMM插槽的定义是相同的,对于不同容量的内存,地址信号的位数有所不同。另外一个需要注意的地方就是其供电电路。Vcc和Vss是为内存颗粒中的存储队列供电,而VccQ和VssQ是为内存颗粒中的地址和数据缓冲区供电。两者的作用不同。

  我们对内存颗粒关心的问题主要是其颗粒的数据宽度(数据位数)和容量(寻址空间大小)。而对于颗粒自检、颗粒自刷新等等逻辑并不需要特别深入的研究,所以对此我仅仅是一笔带过,如果读者有兴趣的读者可以详细研究内存颗粒的数据手册。虽然内存颗粒有这么多的逻辑命令方式,但是由于目前北桥芯片和内存颗粒的集成度非常高,只要在布线和元器件的选择上严格按照内存规范来设计和制造,需要使用逻辑分析仪来调试电路上的差错的情况比较少,并且在设计过程中尽量避免出现这种情况。

  168线DIMM内存插槽的信号定义我们目前PC和Server使用的内存大都是168 Pins的SDRAM,区别只是其工作频率有的可能是100MHz频率,有的可能是133MHz频率的。但是只要是SDRAM,其DIMM插槽的信号定义是一样的。而这些引脚得定义就是设计内存条和主板所必须遵从的规范。

  内存引脚主要分为如下几类:地址引脚、数据引脚(包含校验位引脚)、片选等控制信号、时钟信号。整个内存时序系统就是这些引脚上的信号配合产生。下面的表中就是内存插槽的引脚数量和引脚定义,对于一些没有定义或者是保留以后使用的信号就没有列出来。

  

 

符号 功能 详细描述
DQ [0-63] I/O 数据输入/输出
CB [0-7] I/O ECC内存的ECC校验输入/输出
A [0-13] I/O 地址选择
BA [0-1] Control Bank选择
CS [0-3] Control 片选信号
RAS Control 行地址选择信号
CAS Control 列地址选择信号
DQMB [0-7] Control 数据掩码控制(DQ Mask)高有效*
WE Control 写允许信号
CK [0-3] Clock 时钟信号
CKE [0-1] Clock 时钟允许信号**
REGE Control 寄存器 (Registered) 允许信号
SA [0-2] I/O SPD地址输入
SDA I/O SPD数据输入/输出
SCL Clock SPD时钟输入
WP Control 写保护
Vss Power 电源线
Vdd Power 地线
注:

  SPD Serial Presence Detect 内存序列存储芯片

  RAS Row Address Strobe 行地址选择

  CAS Column Address Strobe 列地址选择

  * 在读模式时,控制芯片颗粒的Buffers数据输出 在写模式时,将芯片颗粒的Buffers中的数据写入芯片颗粒中的内存队列中

  ** 当该信号为高时,时钟信号有

   当该信号为低时,时钟信号无效,并且该信号会触发内存颗粒的低功耗模式、自刷新模式或者挂起模式

  我们从DIMM插槽的引脚定义就可以计算出来,每个DIMM槽位最大支持的内存数值。该数值实际上是寻址空间乘上数据宽度,所以每个DIMM槽位支持最大容量为4GB = 214 x 214 x 8 Byte。但是由于内存芯片颗粒的制造局限性,所以目前能够使用的DIMM条的内存都达不到这个容量,其容量最大的内存条为1GB。

  在设计和制造内存条的时候,所有的内存条都是按照插槽的规范来布线和生产,所以对于内存地址空间,所有生产出来的内存条都是相同的地址空间,例如一条128MB内存,他就是用了地址线A0-A13,当我们在一台计算机上安装多个内存时,如何分配每个内存内存条的地址空间呢?这个工作就需要北桥芯片和主板来配合了。

  SPD信号定义

  内存中使用的SPD都是一片8针TSSOP(Plastic Thin Small Outline Package)封装的串行存储EEPROM,其容量是2048bit。每个DIMM的SPD数据读写时钟线SCL和数据线SDA都是共享在一条总线上,所以当我们在一台机器上会安装多条内存时,其SPD的片选信号就需要事先确定。该片选信号是由SA0,SA1,SA2三条数据线来确定,该数据线的状态由主板设计厂商在设计主板的时候固定下来。在每次读写该EEPROM的时候,北桥芯片会按照EEPROM的读写规格首先向该芯片发送3位片选信号和8位地址信息,每个芯片都会读入该3位片选信号和8位地址信号。当3位片选信号和主板上固化的3?醯刂废撸⊿A0,SA1,SA2)的状态一致的时候该内存条上的SPD芯片就被选中,其信息会记录在北桥控制器的寄存器中(Register)。

  SPD读写逻辑中的片选必须满足下图的时序逻辑。在此主要介绍地址选择逻辑,对于数据如何读写的时序,有兴趣的读者可以查阅 Atemel 24C02A 的数据手册(许多内存厂商都选用该芯片作为SPD)。在这个时序中,硬件上仅仅需要满足其Device Address 地址信息。该地址信息是一个 8bit 的数据,它的格式如下

  

 

地址位 0 1 2 3 4 5 6 7
数据 1 0 1 0 A2 A1 A0 R/W

  该数据通过SCL提供的时钟同步,0-3 位是固定的信息,4-6 位是片选地址,7位是判断该,命令是读还是写。在芯片内部会对4-6位的数据和硬件电路上的状态进行比较,相符的话,该芯片被选中,否则不进行下面的操作。从该时序逻辑可以得知,一个SPD通道(仅仅只有一对SCL和SDA信号线)只支持8条内存。至于SPD的读写和SPD内容的含义在此就不做进一步说明。

  注:SPD涉及到的缩写

  SA 0-2 Serial Presence Detect Address Inputs

  SDA Serial Presence Detect Address Input/Output

  SCL Serial Presence Detect Clock Input

  WP Write Protect for SPD on DIMM

  内存条的设计 

  我们已经知道了内存颗粒、SPD的接口信息,下面就可以开始设计内存了。内存条的逻辑功能图差别不是非常大,对于不同容量的颗粒,只是在数量上有所改变。

  

  上面的逻辑功能图就是一个带ECC功能72bit 内存条的逻辑功能图。采用的是16bit数据宽度的内存颗粒。由于内存条每次读写必须满足64bits(非ECC)或者72bit(ECC),所以在设计的时候颗粒数量是固定的。上面的内存条仅仅只有一个Bank,所以没有使用BA信号。如果该内存条设计的时候是两个Bank,其功能图中就多出了BA选择信号,并且其容量也会随之增加1倍。剩下的工作就是布线,在一个6层电路板上布下所有的信号线。

  但是随着目前服务器内存的增大,内存插槽数量的增多,服务器内存系统各个引脚间的引线长度会产生较大差别,导致信号时序会产生错位。并且控制器的信号控制这么多的内存,有限的驱动能力会不堪重负。针对这种情况,服务器中的内存主要采用的是Registered内存,在内存上添加锁相环电路和几个寄存器,这样每个控制信号仅仅针对数量很少的寄存器,不用针对内存条上的每个内存颗粒来输出信号,可以很大程度上降低控制芯片的负载,提高信号的质量。同时锁相环电路大大减少了内存系统的时间延迟,保证了数据的同步。

  下面就是寄存器的功能图

  

  寄存器仅仅寄存了每个内存条上的控制信号,对于数据信号没有进行任何操作。因为控制信号例如S0、CKE0等等信号都是控制多个内存颗粒的信号,所以当服务器上安装8到16条内存的时候,仅仅靠主板上的控制芯片来控制肯定是力不从心。

  

  上面的逻辑图就很好的说明了Registered内存中锁相环电路的作用。该电路时时保证和主板上的时钟电路所属出的时钟频率保持同步,使用这个时钟信号驱动寄存器和内存芯片颗粒就不会产生时钟的漂移。所以目前的服务器内存都采用的是Registered内存条。

  主板上内存系统的设计主板上对于内存的访问主要是由北桥芯片来控制。32位CPU能够访问的内存容量是64GB。这是由CPU寻址空间和数据带宽固定的。但是在实际使用中,我们的北桥芯片能够寻址的空间却十分有限。一般PC是2GB,高端PC可能达到4GB,高端服务器可以达到32GB的内存容量。这一部分和各个系统内存控制芯片的设计有关。在此我以Intel 815E芯片组为例说明一下主板上内存系统的设计。

  Intel 815E北桥控制芯片的内存控制电路的逻辑图如下:

  

  每种信号引脚的功能如下表:

符号 功能 详细描述
SMD [0-63] I/O 数据输入/输出
SMAA [0-12] I/O 地址选择
SMAB [4-7] I/O 地址选择
SMAC [4-7] I/O 地址选择
SBS [0-1] Control Bank选择
SCSA [0-5] Control 片选信号
SCSB [0-5] Control 片选信号
SRAS Control 行地址选择信号
SCAS Control 列地址选择信号
SDQM [0-7] Control 数据掩码控制
SWE Control 写允许信号
SCKE [0-5] Clock 时钟允许信号
SRCOMP Control 用来校准系统内存的I/O缓冲。一般在主板上固定设置为高

  该芯片组的内存兼容性和管理特性主要有下面几点:

  Intel 815E支持64bits的内存。

  从芯片引脚信号图可以看出,该芯片组只有64bits的数据带宽,没有8bits的ECC校验。

  北桥芯片没有SPD监测电路。

  该信息必须通过南桥芯片上的服务器系统管理总线SM_Bus总线来读出SPD的信息,然后传送到北桥芯片的寄存器中。

  该芯片组不支持Registered内存。

  可以支持3个DIMM插槽。每个槽位最大支持512MB。

  计算方法:采用SMAA,总共使用数据带宽为64bits。

  容量为512MB=213 x 213 x 8

  我们根据Intel 815E芯片的特性,就可以设计出主板上的DIMM插槽的电路连接逻辑示意图了(注:该图中没有标出SPD的地址分配信息):

  

  每个DIMM槽的SDQM、SMD、SMB_CLK(管理总线_时钟信号线)、SMB_DATA(管理总线_数据信号线)、SCAS、SRAS、SWE、SBS是共享的。那么如何区别每个DIMM槽上的内存呢?每个DIMM槽上的内存颗粒通过SMAA,SMAB,SMAC三个地址来区分其不同的地址段,而12条片选信号则在每个DIMM槽上分配4条,分别选择不同的芯片颗粒。这样同种的内存条插在不同的插槽上就被分配了不同的内存地址段。

  至此,我们的内存系统从颗粒到主板的整个地址和数据组织管理模式就清晰的摆在读者面前了。

转载于:https://www.cnblogs.com/gujiangtaoFuture/articles/7146147.html

SDRAM内存的接口和设计方法(并行输送接口)相关推荐

  1. Java基础 接口实现 设计一个形状类(接口)Shape,方法:求周长和求面积

    题目: 设计一个形状类(接口)Shape,方法:求周长和求面积形状类(接口)的子类(实现类);:Rect(矩形),Circle(圆形)Rect类的子类:Square(正方形)不同的子类会有不同的计算周 ...

  2. 接口练习--设计一个辅助英雄 接口实现技能治疗

    设计一个治疗者接口:Healer 该接口声明有方法: heal() 设计一个Support类,代表辅助英雄,继承Hero类,同时实现了Healer这个接口 1234567891011121314151 ...

  3. 十三、Java高级特性 Lambda表达式 | 接口组成更新 | 方法引用 | 函数式接口

    文章目录 十三.Java高级特性 1.Lambda表达式 1.1体验Lambda表达式[理解] 1.2Lambda表达式的标准格式[理解] 1.3Lambda表达式练习1[应用] 1.4Lambda表 ...

  4. c#中接口的使用方法图解_c# 接口方法中使用new有什么用?

    慕盖茨4494581 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 ...

  5. java调用接口实现的方法_java调用接口的实现方法

    java调用接口的实现方法 发布时间:2020-06-29 11:08:46 来源:亿速云 阅读:78 作者:Leah 本篇文章给大家分享的是有关java调用接口的实现方法,小编觉得挺实用的,因此分享 ...

  6. 接口测试用例设计方法方式和流程一文到底

    目录 1.通用信息校验 1.URL校验 2.请求方法校验 3.请求头 4.接口鉴权 2.接口参数校验 1.参数的必填项校验 2.参数的选填项校验 3.参数长度校验 4.参数数据类型校验 5.参数的有效 ...

  7. 微型计算机接口课程设计报告,《微机接口技术》课程设计报告(范文).doc

    <微机接口技术>课程设计报告(范文).doc 河北科技大学 课程设计报告 学生姓名: 范雅茹 学 号: 090701134 专业班级: 电信091班 课程名称: 微机接口技术 学年学期: ...

  8. idea2020点击接口中的方法名称进入接口实现类的方法名称

    一.方式一 鼠标点击接口方法名称,鼠标右键选择[Go to]-->[Implementation(s)]即可进入接口实现类的方法名称,如下图: 二.方式二 快捷键[Ctrl+Alt+B]即可进入 ...

  9. ArcGIS 网络分析[8.2] 资料2 使用IDatasetContainer2接口的CreateDataset方法创建网络数据集...

    上节提及如何使用IDatasetContainer2接口访问到网络数据集,上例可以封装为一个方法. 这节就使用IDatasetContainer2接口(Geodatabase类库)的CreateDat ...

  10. Java私有方法解释_java接口中 定义 private 私有方法

    在传统的Java编程中,被广为人知的一个知识点是:java Interface接口中不能定义private私有方法.只允许我们定义public访问权限的方法.抽象方法或静态方法.但是从Java 9 开 ...

最新文章

  1. 开发脚本自动部署及监控
  2. python硬件交互_对Python的交互模式和直接运行.py文件的区别详解
  3. 选择文字就能选择复选框
  4. .net core 并发下的线程安全问题
  5. html:(22):认识css样式和css的优势
  6. python机器视觉教材_基于Python的机器视觉实验教学平台设计
  7. 【问】如何应对关系型数据库中列的不断增加
  8. Java中的一些术语的解释
  9. Python 学习笔记 - RabbitMQ
  10. 计算机硬件损坏的处理方法,处理电脑系统提示winload.exe丢失或是损坏的方法
  11. 全国计算机二级C语言考试难不难?应该怎么备考?
  12. GIS要学哪种计算机语言,做好一名ArcGIS开发人员所需要掌握的知识
  13. Three.js(十二)——骨骼动画、变形动画
  14. Spring Cloud 微服务项目实战 -
  15. 编程与手绘的异同---“运动”
  16. Appium 自动化用例设计(TESTNG 篇)
  17. HTTP编程(Java爬虫-简单爬取网页数据)
  18. linux中无线管理员密码,无线网管理员密码
  19. maven配置项目根路径_Maven 基本概念——根目录、项目创建、坐标
  20. 解决实例化Servlet类XXX异常

热门文章

  1. 职场一些办公技能和技巧总结
  2. lighttpd支持AJAX吗,lighttpd配置https
  3. Android桌面插件系列
  4. vue路由跳转总是跳转到首页,路由匹配不上
  5. Windows系统监控
  6. 写一篇简单的微信接入
  7. 【一起学Rust | 进阶篇 | Service Manager库】Rust专用跨平台服务管理库
  8. 从洛伦兹曲线定性地看马太效应的根源
  9. JUC的常用辅助工具
  10. 暑假计算机教育培训总结,暑假信息技术培训心得