杂项
Win下面有CPU-Z查看内存调的参数,Linux下可以通过如下方式来查看:
sudo dmidecode --type 17
或者
sudo dmidecode -t memory
或者
sudo lshw -short -C memory
并且要查看具体的SPD信息可以用
sudo apt-get install i2c-tools
sudo modprobe eeprom
sudo decode-dimms (有的机器也可能不支持读取,如笔记本,内存频率给定死了,DIMM上的I2C的总信号被BIOS给屏蔽了,其实内存的SPD数据就是存放在内存条的EEPROM里面,通过I2C接口来读取)
内存条
内存条信息解读,内存条厂家给的信息详尽程度不一,暂时先列一些能查到的消息吧。
https://www.crucial.cn/memory/BL2K8G30C15U4W 这个地址是英睿达 DDR4 台式机DIMM内存的参数
这个表里面除了容量这种信息以外还有一些信息可以对我们使用有帮助。
- 外形 UDIMM ,表示属于无缓冲的双列直插内存条
- 速度 3000MT/S,表示每秒可以完成3000M次数据传输,也等价于3000MHz,由于这是DDR SDRAM,DDR内存在时钟信号的的上升和下降沿都会进行采样传输,所以其实内存DRAM颗粒运行的频率为3000MHz/2=1500MHz,在AMD平台的主板BIOS设置内存超频的时候的FCLK(可以理解为CPU核和内存控制器的交换网络,介于内存控制器和CPU核心之间的一个网络)需要设置为内存频率的一半,这样内存控制器到CPU之间的交换网络频率能保持同步,不会出现参数不匹配反而引起内存读写性能下降的情况。(目前AM4接口的三代锐龙zen2平台FCLK最优为1866,所以AMD平台内存频率达到3733MHz最好)
- CAS延迟,这个是超频或者购买内存的时候除了看频率外需要非常关心的值,CAS延迟(CAS latency == CL),CAS本身是(Column Address Strobe or Signal),实际意思是内存控制器发出读取某个列地址(读取列之前都是先做行选取)的指令到DRAM模块实际独出这个列地址的数据并输出到数据输出管教的时间,同样频率下的内存CL值肯定是越小越好,不过超频内存的频率越高,这个值也需要适当调大,毕竟实际内存读取延迟时间是一定的,频率高了,单个始终周期时间变短了,那么等待的始终周期数量就要变大。
- 电压:1.35V,正常DDR4电压应该是1.2V,但这里电压居然是1.35V,和DDR3L电压一样了,明显是为了方便超频啊。内存超频的时候需要适当的提高内存电压,让内存在更高频率运行更稳定。
- XMP就绪:XMP相当于是厂家把参数写好在内存条的EEPROM里,主板来读取这个数据从而可以在主板直接选自动超频。完全为小白用户准备。
针对内存条的数据,在BIOS里面还有非常多,后面根据情况再列出,这里针对DIMM到DRAM颗粒的步骤再做一些概念收集:
今天又有同事聊到这个RANK的事情,简单的理解,一个RANK就是一个功能完整的逻辑上的内存条,但单根物理内存条上可以容纳多个RANK(一般是1R、2R、4R),使用的芯片的CS~信号来确定读写哪一个RANK,各个RANK之间共享数据和地址控制线。看多RANK的内存条是否能用在某个板子上,主要是看这个SOC或者内存控制器是否支持多RANK(有对应的RANK使能信号引脚)。
查看一个实际的例子:
https://www.micron.com/-/media/client/global/documents/products/data-sheet/modules/unbuffered_dimm/jsf18c256_512_1gx72az.pdf这个DDR PDF文档的第三页
可以看出在DDR内存条的76 193引脚都是CS~引脚。
由于内存颗粒有x8 x16两种位宽,单看某根内存条的颗粒数来判断是几个RANK是不准确的,如果是4片颗粒,那基本上就是1rank了,因为凑齐64bit,最少也要4颗x16的颗粒,单如果是8颗颗粒,未必就是2RANK的,毕竟可以用8颗x8的内存颗粒组成1个RANK。
- 位宽,通道,标准的单根DIMM内存条是64bit位宽,在PC上,双通道出现以前都只有64bit位宽的内存读写,但是在同时代的服务器或者小型机,早就用上2,4,8通道的技术了,所以那时候小型机不光稳定,性能也是一流。后来个人PC的内存控制器才出现了双通道,也就位宽是2*64bit=128bit,大大增加了个人PC内存的数据吞吐量,不过到现在已经DDR4了,PC还是只有双通道。服务器领域倒是多通道一直都在用,对于单颗DRAM颗粒本身,同样容量的单颗颗粒有8bit的,有16bit的,所以单根内存如果只有一个Rank的情况下,使用8bit的颗粒至少要8课DRAM颗粒,8*8bit=64bit,如果使用16bit的DRAM颗粒,那只需要4颗,因为4*16bit=64bit, 1Rank的定义就是凑齐64bit的一组DRAM颗粒。至于单根内存1R和多Rank的区别和好处(有说是为了实现单条DIMM更高容量而出现的2R或者4R,但单条DIMM上的RANK不能被并行访问,因为他们共享数据线,通过把一组rank内的每颗DRAM的Chip Select连在一起从而选择从哪一个rank读写),还没时间查对应资料。使用dmidecode -t memory 查询能显示出内存条的rank数量来,关于rank,还可以参考hardware - DIMMs: Single vs. Double vs. Quad Rank - Server Fault
- DDR4官网标准参考连接DDR4 SDRAM STANDARD | JEDEC 售价284刀,这个组织卖标准手册都能卖不少钱啊。貌似还有各个厂家提供的内存条电路图,也是卖钱的几千美刀啊。
- 内存条本身不含控制器芯片,现代PC的CPU都内置了内存控制器,所以内存条本身只包含一堆DRAM芯片以及保存内存条SPD信息的EEPROM,其余的都是一些电源去藕电容。具体的可以百度:DDR3内存条电路图,可以看到具体的电路图,金手指引脚出来信号包涵DRAM芯片的信号(其中就有CS用于选取RANK,还有各个颗粒的DQ并成64位的数据线还有就是DRAM芯片的bank选择线BA0-BA2)以及I2C信号用于读取EEPROM里面的SPD信息。
- 这个PDF是三星的笔记本内存条的一些组成结构的信息,可以对应前面关于RANK,位宽的信息来看https://www.samsung.com/semiconductor/global.semi/file/resource/2017/11/135V_DDR3_4Gb_Qdie_UnbufferedSODIMM_Rev121.pdf,里面有1R,2R,以及8bit DRAM颗粒 16bit DRAM颗粒以及是否ECC等的内存条结构都画的很清楚,包括DIMM的金手指引脚定义名称都有,摘要一个图如下:
不知道大家能不能理解,反正我能理解。
DRAM颗粒
颗粒的资料这里以hynix的512MB颗粒做介绍,百度搜索或者去立创商城搜索 H5TQ4GB63RDC,就会找到对应的PDF资料,对于H5TQ4GB63/83这个系列的颗粒来说,有8bit和16bit以及分别对应的不同频率等级的型号
图里面可以看到相同容量的颗粒有8bit和16bit数据接口的区别,对应的物理BGA结构来说8bit 78个引脚,16bit 96个引脚,一般ARM的SOC 或者FPGA,因为直接拉线焊接DRAM颗粒而不是搞DIMM插槽接内存条,多选16bit,这样如果只用单颗位宽宽一点数据吞吐量更大。
第二个图里面不同的频率支持的CL值也不同,这个在单独用DRAM颗粒做SOC板子或者FPGA板子的时候还是比较重要,只有你对使用的东西掌握的越深,出问题几率越少或者出问题后能排查出来的可能性越大,否则就是一笔糊涂账。
剩下的比较重要的就是引脚功能描述了。主要是:时钟,时钟enable,CS(chip select),RAS,CAS,WE(WRITE ENABLE),以及BA0-BA2(bank address),A0-A15,DQ,以及电源等,具体的看手册吧。
CS就是前面DIMM用来选择RANK的信号了,BA0-BA2用来选择DRAM颗粒里面的bank,这颗DRAM里面包含8个bank,所以要3位数据线来做选择。貌似一般DDR3的颗粒都是8个bank。
上面这个图也列出了bank数量。关于bank,可以用下面从书上白嫖的图来理解。看起来还是很好动的,就是独立的几个存储块嘛,然后BA0-BA2地址选到哪个块就读写那个块,每个块(bank)又包涵很多个行。
- 具体到DRAM颗粒的读写情况,我简要列举一下书上的描述,个人理解,对不对不好说
- DRAM复用地址线,即行选线和列选线都是哪些线,数据读写的时候首先发送行地址,这个时候RAS信号是会拉低,然后再发送列地址,发送列地址的时候CAS信号拉低。读写的时候,有WE信号切换。注意DRAM使用电容保存电荷来存储数据,由于电容电荷会随着时间减少,所以需要定期进行刷新操作,即把存储单元里面原来数据读出来重新写进去保持电容里面电位。下面的图抓去的教科书上的,列举了读写和刷新过程。尤其是刷新过程巧妙的把Dout数据输出口连到刷新缓冲期,所以一般DRAM在读取过后可以紧接着做刷新操作。这玩意儿看起来复杂其实比用锁存器的SRAM简单多了。所以用于L1 L2 L3的缓存才会这么金贵,而且一般ARM的MCU也就集成几十到一两M的SRAM。
- 其实从EDO DRAM到SDRAM再到DDR SDRAM,到现在的DDR4 SDRAM,DRAM的基本原理还真没变过,只不过随着工艺进步容量和频率越来越高了而已。