简介:这份资源是方正证券2021年4月发布的半导体行业DRAM深度研究报告,共71页,面向半导体产业研究者、投资分析人员及电子产业从业者,系统梳理存储芯片的研究框架与投资逻辑。压缩包内为1个PDF文件,大小约4.41MB,便于在电脑或移动端直接阅读与检索。报告围绕DRAM投资逻辑框架、存储器最大细分领域详解、周期与需求分析、全球竞争格局及大陆厂商现状五大模块展开,重点剖析合肥长鑫在国产替代中的关键地位、供需错配引发的价格波动规律,以及5G、云计算、无人驾驶、IoT等增量应用对DRAM市场的驱动作用。内容结合Bloomberg数据库与前瞻产业研究院数据,配有市场规模预测、技术路径对比与厂商产能梳理,可帮助读者快速建立DRAM产业链认知,把握2021至2022年行业上行周期的判断依据。目前已有141人学习下载,适合需要深度研报支撑的研究与投资决策参考。
1. 从一份 71 页的 DRAM 深度报告说起:存储芯片研究框架到底在研究什么
很多人第一次拿到半导体行业 DRAM 深度报告这类材料,翻两页就被 DDR4、DDR5、Bank Group、Row Hammer、HBM 这些词劝退,觉得这是券商写给基金经理看的。其实把标题拆开看,它讲的就是一件事:DRAM 这颗存储芯片,从物理结构到协议时序、从制程工艺到供需周期,是怎么被一套框架串起来的。你如果是做嵌入式、服务器运维、硬件选型,甚至只是想知道为什么 DDR4 默认频率是 2666 而不是 3200,这套框架都能直接用。
DRAM 和 SRAM 的区别、DDR4 与 DDR5 的协议差异、颗粒怎么看、内存条基板电路怎么走线,这些问题在报告里往往一笔带过,但恰恰是从业者真正要落地的部分。下面我按「先立住原理、再动手验证、最后落到选型和排错」的顺序,把这份框架里最值得抄作业的部分讲清楚。适合有 3 年以上硬件或底层软件经验、需要把存储芯片知识变成可执行判断的人。
2. DRAM 存储芯片的物理结构与 DDR4/DDR5 协议差异
2.1 从 1T1C 单元到 Bank Group:DRAM 为什么必须刷新
DRAM 的基本存储单元是 1T1C,一个晶体管加一个电容。电容会漏电,所以必须周期性刷新,这也是它和 SRAM 最本质的区别。SRAM 用 6 个晶体管锁存数据,不需要刷新,速度快但面积大、成本高,所以只做 Cache;DRAM 靠电容存电荷,密度高、单位成本低,做主存。半导体物理里讲的电容保持时间,直接决定了刷新周期,常见做法是 64ms 内把所有行刷新一遍。
一颗 DRAM 颗粒内部不是一整块阵列,而是分成多个 Bank。DDR4 通常 16 个 Bank,分成 4 个 Bank Group;DDR5 把 Bank Group 翻倍到 8 个,每组 4 个 Bank,总共 32 个 Bank。Bank Group 的意义在于:不同 Bank Group 之间的时序可以交错,减少等待。你看到的 DDR5 带宽提升,很大一部分不是靠频率硬拉,而是靠这种结构优化把总线利用率做上去。
2.2 DDR4 与 DDR5 的关键参数对照
| 参数 | DDR4 | DDR5 | 说明 |
|---|---|---|---|
| 默认电压 | 1.2V | 1.1V | DDR5 更低功耗 |
| Bank Group 数 | 4 | 8 | 并发度提升 |
| 单条最大容量 | 32GB(常见) | 128GB(常见) | 颗粒密度提升 |
| 预取位数 | 8n | 16n | 突发长度翻倍 |
| 片上 ECC | 无 | 有 | 数据可靠性增强 |
| PMIC | 主板供电 | 内存条自带 | 供电更精细 |
这张表里最容易被忽略的是 PMIC 位置变化。DDR4 的供电在主板上,DDR5 把电源管理芯片挪到内存条上,好处是电压调节更靠近颗粒,坏处是内存条发热和成本上升。你做硬件设计时,DDR5 的散热和电源去耦要重新算。
2.3 用 dmidecode 和 SPD 读出你机器里的真实颗粒信息
光看报告不够,得知道自己手上的内存到底是什么。Linux 下最直接的工具是 dmidecode,Windows 下可以用 CPU-Z 或 HWiNFO。下面这条命令读出内存条的类型、频率和厂商:
# 查看内存设备类型、速度、厂商和序列号 sudo dmidecode -t memory | grep -E "Type:|Speed:|Manufacturer:|Part Number:|Size:"逻辑说明:-t memory只过滤内存相关的 DMI 表项,grep把关键字段挑出来。你会看到Type: DDR4或DDR5,Speed: 2666 MT/s这类值。注意这里显示的是当前运行频率,不是颗粒标称频率。如果显示 2666 而你的条子是 3200,说明没开 XMP/EXPO,或者主板和 CPU 不支持更高频率。
参数说明:Speed是当前速率,Configured Memory Speed才是实际生效值。有些主板会同时列出Speed和Configured Memory Speed,两者不一致时以 Configured 为准。想看 SPD 里的原始时序,可以用decode-dimms(需要 i2c-tools),它会读出 tCL、tRCD、tRP 这些参数。
提示:虚拟机里 dmidecode 读到的往往是宿主伪造的信息,别拿虚机结果判断物理颗粒。
3. 用 STM32F103C8T6 标准库做一次 DDR4 读写测试的思路
3.1 为什么 MCU 不能直接驱动 DDR4
STM32F103C8T6 是 Cortex-M3,主频 72MHz,没有 DDR 控制器,也没有足够的引脚和时序精度去直接跑 DDR4。DDR4 的时钟动辄 1600MHz 差分对,MCU 的 GPIO 翻转根本跟不上。所以「用 STM32 做 DDR4 读写测试」这个说法,实际落地时一定是 MCU 通过 FSMC/FMC 去访问一颗 SRAM 或 SDRAM 控制器,再由 FPGA 或专用 DDR 控制器去管 DDR4。常见做法是:STM32 负责发命令和收结果,FPGA 负责 DDR4 的物理层时序。
如果你只是想在 MCU 上验证存储读写逻辑,用 STM32 的 FSMC 挂一颗 8 位 SRAM 就够了。下面给一段标准库下 FSMC 读写 SRAM 的最小代码,帮你理解地址映射和时序配置:
// STM32F103 标准库,FSMC 访问外部 SRAM 的最小配置 #include "stm32f10x.h" #define SRAM_BASE ((uint32_t)0x68000000) // FSMC Bank1 NOR/SRAM4 起始地址 void SRAM_Init(void) { GPIO_InitTypeDef gpio; FSMC_NORSRAMInitTypeDef fsmc; FSMC_NORSRAMTimingInitTypeDef timing; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE | RCC_APB2Periph_GPIOF | RCC_APB2Periph_GPIOG, ENABLE); RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE); // 地址线、数据线、控制线配置为复用推挽 gpio.GPIO_Pin = GPIO_Pin_All; gpio.GPIO_Mode = GPIO_Mode_AF_PP; gpio.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOD, &gpio); GPIO_Init(GPIOE, &gpio); timing.FSMC_AddressSetupTime = 0x02; // 地址建立时间 timing.FSMC_AddressHoldTime = 0x00; // 地址保持 timing.FSMC_DataSetupTime = 0x05; // 数据建立,按 SRAM 手册调 timing.FSMC_BusTurnAroundDuration = 0x00; timing.FSMC_CLKDivision = 0x00; timing.FSMC_DataLatency = 0x00; timing.FSMC_AccessMode = FSMC_AccessMode_A; fsmc.FSMC_Bank = FSMC_Bank1_NORSRAM4; fsmc.FSMC_DataWidth = FSMC_DataWidth_16b; fsmc.FSMC_ExtendedMode = DISABLE; fsmc.FSMC_WriteOperation = ENABLE; fsmc.FSMC_WaitSignal = FSMC_WaitSignal_Disable; fsmc.FSMC_NORSRAMTimingInitStructure = &timing; FSMC_NORSRAMInit(&fsmc); FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM4, ENABLE); } // 读写测试 void SRAM_Test(void) { volatile uint16_t *p = (volatile uint16_t *)SRAM_BASE; for (uint32_t i = 0; i < 1024; i++) { p[i] = (uint16_t)i; } for (uint32_t i = 0; i < 1024; i++) { if (p[i] != (uint16_t)i) { // 读写不一致,检查时序或硬件连线 while (1); } } }逻辑说明:FSMC 把外部 SRAM 映射到 0x68000000,之后像访问普通内存一样读写。FSMC_DataSetupTime是最关键的参数,设小了读出来全是 0xFF 或随机值,设大了速度上不去。参数说明:FSMC_AddressSetupTime对应 SRAM 的 tAA,FSMC_DataSetupTime对应数据有效窗口,具体值查你用的 SRAM 手册,一般从 3 开始往上试。
3.2 DDR4 读写测试在真实平台上的做法
真正测 DDR4,用的是内存测试工具而不是 MCU。Linux 下常用 memtester 和 stressapptest:
# 分配 1GB 内存做 10 轮测试 sudo memtester 1G 10 # stressapptest 做更接近真实负载的读写 sudo stressapptest -s 3600 -M 2048 -m 8 -W逻辑说明:memtester 用多种模式(走位、异或、随机)写读比对,能抓出坏颗粒和时序不稳。stressapptest 的-M指定内存大小,-m指定线程数,-W表示做写测试。参数说明:-s是运行秒数,跑服务器内存建议至少 1 小时。如果测试中报错,先降频再测,能过说明是频率问题不是颗粒坏。
注意:DDR4 读写测试报错不一定是内存坏,也可能是主板走线、CPU 内存控制器或 BIOS 版本问题。换插槽、单条测试是基本排查手段。
4. DDR5 颗粒识别、JEDEC 协议与选型避坑
4.1 DDR5 颗粒怎么看:从丝印到 SPD
DDR5 颗粒的识别比 DDR4 更麻烦,因为厂商编码更隐蔽。常见做法是看颗粒表面的丝印,比如三星的K4RAH086VB这类编码,前几位代表容量和位宽,中间代表版本,后面是封装。但丝印只能看个大概,真正准确的是读 SPD。DDR5 的 SPD 里包含厂商 ID、颗粒型号、时序表、XMP/EXPO 配置。
Linux 下读 DDR5 SPD 可以用decode-dimms,但需要内核支持 SPD5118 驱动。更通用的办法是进 BIOS 看内存信息,或者用 Thaiphoon Burner(Windows)读。选型时重点看三件事:颗粒厂商(三星、海力士、美光)、Die 版本(比如 M-die、A-die)、以及是不是原厂条。第三方条经常混用颗粒,同一批次不同颗粒会导致 XMP 不稳。
4.2 DDR5 JEDEC 标准里的关键时序参数
DDR5 的 JEDEC 标准把时序定义得更细,下面这几个参数在调 XMP/EXPO 时必须看懂:
| 参数 | 含义 | 典型值(DDR5-6000) |
|---|---|---|
| tCL | CAS 延迟 | 30-36 |
| tRCD | 行到列延迟 | 36-40 |
| tRP | 行预充电 | 36-40 |
| tRAS | 行激活到预充电 | 76-96 |
| tRFC | 刷新周期 | 视颗粒密度而定 |
| VDD | 颗粒电压 | 1.35V-1.45V(超频) |
| VDDQ | IO 电压 | 1.35V-1.45V |
tRFC 是最容易被忽略的参数。DDR5 高密度颗粒的 tRFC 很大,如果 BIOS 里设得太小,会随机报错。常见做法是开 XMP 后先跑 memtest,过了再手动收紧 tCL 和 tRCD,tRFC 尽量别动。
4.3 2026 年 DDR5 16G 6000MHz 价格走势与选型建议
内存价格受供需周期影响极大。DRAM 行业有三大定律之一的阿姆达尔定律在算力层面常被引用,但存储这边更直接的是产能和库存周期。2026 年 DDR5 16G 6000MHz 的价格走势,取决于原厂是否把产能转向 HBM 和服务器 DDR5。如果 HBM 需求持续吃紧,消费级 DDR5 的供给会被挤压,价格上行。
选型建议:如果是生产力机器,优先选 6000MHz CL30 的 16G×2 套条,颗粒认准海力士 A-die 或三星 B-die。不要盲目追 7200MHz 以上,因为高频对 CPU 内存控制器和主板布线要求高,收益在多数应用里不明显。买之前查主板 QVL 列表,比看评测更靠谱。
5. 用 memtester 和 EDAC 做 DRAM 稳定性验证的进阶技巧
5.1 结合 EDAC 看可纠正错误
服务器平台有 ECC 内存时,Linux 的 EDAC 子系统能报出可纠正错误(CE)和不可纠正错误(UE)。跑测试的同时盯 EDAC,能提前发现颗粒劣化:
# 查看 EDAC 报告的内存错误计数 grep -H . /sys/devices/system/edac/mc/mc*/csrow*/ch*_ce_count 2>/dev/null grep -H . /sys/devices/system/edac/mc/mc*/csrow*/ch*_ue_count 2>/dev/null # 实时监控 watch -n 5 'grep -r ce_count /sys/devices/system/edac/'逻辑说明:ce_count是可纠正错误,少量出现可能是偶发,持续增长说明颗粒或走线有问题。ue_count是不可纠正错误,出现即代表数据已经错了,必须换条。参数说明:路径里的mc*是内存控制器编号,csrow*是 rank,ch*是通道。不同内核版本路径略有差异,找不到就用find /sys -name "*ce_count*"。
5.2 一个容易被忽略的技巧:用温度反推稳定性
DDR5 颗粒对温度敏感,尤其是 tRFC 随温度升高会变差。跑 memtester 时同时用sensors看内存温度(如果主板有 SPD Hub 温度传感器):
# 每 2 秒打印一次内存温度和测试状态 while true; do sensors | grep -i "spd\|dimm" sleep 2 done如果温度超过 55°C 后开始报错,说明散热不够或 tRFC 设太紧。加马甲、加风扇,或者把 tRFC 放宽 10%,往往就能过。这个技巧在 1U 服务器和 ITX 小机箱里特别有用,因为这两类机器内存风道差,夏天很容易翻车。
最后一行技术内容:把 memtester 的测试轮数、EDAC 的 CE 增长速率和内存温度三条曲线放在一起看,比单看任何一项都更能判断一条 DDR5 到底能不能长期稳定跑。
本文还有配套的精品资源,点击获取