嵌入式开发DDR的选择
摘要:
当前DDR主要有DDR、DDR2、DDR3、DDR4、DDR5等不同的内存标准。本文主要是对比不同标准的DDR,了解其差异性以及优劣势,以便在以后在以后做DDR选型的时候做一定的参考。
嵌入式设备常见的DDR内存标准
嵌入式常见的DDR内存标准有DDR、DDR2、DDR3和DDR4。其中,DDR2是DDR的升级版,DDR3是DDR2的升级版,DDR4是DDR3的升级版。这些内存标准的主要区别在于它们的时钟速度、带宽和电压等方面的不同。DDR2内存的时钟速度比DDR内存快两倍,带宽也比DDR内存大一倍,而DDR3内存的时钟速度比DDR2内存快两倍,带宽也比DDR2内存大一倍。DDR4内存则比DDR3内存的时钟速度快两倍,带宽也比DDR3内存大一倍。因此,在选择内存时,需要根据实际需求来选择适合的内存标准。
各个DDR内存的规格
内存规格 | 工作电压 | 核心频率MHz | 工作频率MHz | 内存预取 | IO频率MHz | 等效频率MHz | 理论带宽 -单通道 -64位宽 | ||
DDR 266/333/400 | 2.5V | 133/166/200 | 266/333/400 | 2 | 133/166/200 | 266/333/400 | 2.1GB/s - 3.2GB/s | ||
DDR2 533/667/800 | 1.8V | 133/166/200 | 266/333/400 | 4 | 266/333/400 | 533/667/800 | 4.2GB/s - 6.4GB/s | ||
DDR3 1066/1333/1600 | 1.5V | 133/166/200 | 266/333/400 | 8 | 533/667/800 | 1066/1333/1600 | 8.4GB/s - 12.8GB/s | ||
DDR4 2133/2667/3200 | 1.2V | 133/166/200 | 266/333/400 | 16 | 1066/1333/1600 | 2133/2667/3200 | 16.8GB/s - 25.6GB/s | ||
DDR5 4266/5333/6400 | 1.1V | 133/166/200 | 266/333/400 | 32 | 2133/2667/3200 | 4266/5333/6400 | 33.6GB/s - 51.2GB/s |
核心频率
内存颗粒的核心频率是固定的,一些常见的内存颗粒核心频率如下。
DDR 266、DDR2 533、DDR3 1066、DDR4 2133、DDR5 4266颗粒的核心频率为133MHz,
DDR 333、DDR2 667、DDR3 1333、DDR4 2667、DDR5 5333颗粒的核心频率为166MHz,
DDR 400、DDR2 800、DDR3 1600、DDR4 3200、DDR5 6400颗粒的核心频率为200MHz。
工作频率
工作频率,记住工作频率是核心频率的两倍即可,由双沿传输引起。
DDR内存的工作频率是指内存颗粒的工作频率,它是内存颗粒核心频率的两倍。
比如DDR 400、DDR2 800、DDR3 1600、DDR4 3200、DDR5 6400的核心频率为200MHz,那么这几个内存颗粒的工作频率就是400MHz。
这个计算方式与DDR内存的数据传输原理有关,因为DDR内存可以在一个时钟周期内完成两次数据传输,所以工作频率是核心频率的两倍。
内存预取
DDR内存预取是指内存控制器在一次读取操作中可以同时读取的数据位数。
这种预取技术可以提高内存的读取速度和带宽,因为在读取一个内存地址时,实际上会将这个地址附近的8个字节都读取到缓存中,这样下次读取相邻的地址时就可以直接从缓存中读取,而不需要再次从内存中读取,从而提高了读取速度和带宽。
例如,DDR1的2位预取意味着内存控制器可以在一次读取操作中同时读取2位数据。而DDR3和DDR4的8位预取意味着内存控制器可以在一次读取操作中同时读取8位数据。预取位数越高,内存控制器在同一时间内可以读取更多的数据,从而提高内存读取速度。
IO频率
即I/O Buffer(输入/输出缓冲)的传输频率。IO频率和内存预取有关
DDR 是 2bit预取:频率不变,但是双沿出数,才满足进来的2bit送出去(核心频率x1)
DDR2 是4bit预取:频率增加一倍,双沿出数,才能进来的4bit送出去(核心频率x2)
DDR3 是8bit预取:频率要比4bit预取再增加一倍,双沿出数,才能进来的8bit送出去(核心频率x4)
DDR4 是16bit预取:频率要比8bit预取再增加一倍,双沿出数,才能进来的16bit送出去(核心频率x8)
DDR5 是32bit预取:频率要比16bit预取再增加一倍,双沿出数,才能进来的32bit送出去(核心频率x16)
因为IO频率是上升沿和下降沿都进行数据传输,等效到只有单沿(一般为上升沿)传输的情况下,等效频率为IO频率的两倍。
等效频率
内存的等效频率才是DDR2 800内存中,“800MHz”的真正含义。
等效频率和内存预取有关,那么内存预取又是怎么回事呢?我们可以举一个简单的例子,比如说运动场上的运动员在跑步,有速度快慢之分。跑的快的通常是迈的步伐大,而且步伐的距离长。假设这名运动员每1秒钟跑了一步,步伐的距离为一米,我们就可以算出,速度为1米/秒。而第二个人每1秒钟跑了2步,步伐的距离为2米,他的速度则是2米/秒。 因此我们可以理解为DDR2内存比DDR内存快的原因了。DDR内存的预取是2bit,DDR2的预取是4bit,DDR3的预取是8bit,DDR4的预取是16bit,DDR5的预取是32bit。
因此,只要是内存颗粒的工作频率相同,DDR2的等效频率就是DDR等效频率的2倍,DDR3则是DDR的4倍。以DDR2 800为例,前面已经算出来了它的工作频率为200MHzx2=400MHz,因此400MHz x2,得到的800MHz就是DDR2 800内存名称的真正由来,DDR2 800指的是内存的等效频率。
DDR理论带宽计算公式
DDR的理论内存带宽计算公式为:内存带宽=时钟频率 × 内存位宽 × 内存通道数 ÷ 8。
其中,时钟频率指的是DDR的主频,内存位宽指的是数据总线的位宽,通道数是内存的通道数,8是一个字节的位数。因此,以2400MHz主频,64bit位宽,单通道计算DDR4的理论带宽为:2400 × 64 × 1÷ 8 = 19200MB/s = 18.75GB/s。
而DDR的实际带宽则需要考虑到理论带宽效率,一般为70%左右。因此,DDR的实际带宽 = 理论带宽 * 理论带宽效率。例如,以2400MHz主频,64bit位宽计算的DDR4理论带宽为2400 * 64 * 1 / 8 = 19200MB/s,实际带宽为19200 * 70% = 13.125GB/s。
DDR内存位宽
DDR内存位宽是指内存数据总线的宽度,它决定了内存一次能传输多少数据。
DDR内存的位宽范围通常是从8位到64位不等。其中,DDR3和DDR4内存的位宽通常为64位,而DDR2内存的位宽通常为32位。此外,DDR内存的位宽越大,其带宽也就越高,因此在选择内存时需要根据实际需求进行选择。
需要注意的是,这些位宽范围是基于标准配置。实际上,一些制造商可能会提供不同的配置,因此位宽可能会有所不同。
DDR内存通道数
DDR内存通道数是指内存控制器与内存通信的通道数量。通道数越多,内存带宽越大,系统性能也就越好。通常情况下,DDR内存的通道数为单通道、双通道或四通道。但是,一些高端服务器或工作站可能会使用更多通道的DDR内存。
Linux下内存带宽测试
Linux下有多种内存带宽测试工具可供选择,其中比较常用的是mbw和Stream。
mbw
mbw是一款简单易用的内存带宽测试工具,可以测试内存的读写速度和带宽。使用mbw测试内存带宽的命令格式如下:
mbw -t <num_threads> -s <mem_size>
其中,num_threads表示测试线程数,mem_size表示测试内存大小。例如,测试4个线程下1GB内存的读写速度和带宽,可以使用以下命令:
mbw -t 4 -s 1G
Stream
Stream是一款多核内存带宽测试工具,可以测试内存的读写速度和带宽。使用Stream测试内存带宽的命令格式如下:
stream -P <num_threads> -M <mem_size>
其中,num_threads表示测试线程数,mem_size表示测试内存大小。例如,测试4个线程下1GB内存的读写速度和带宽,可以使用以下命令:
stream -P 4 -M 1G