HBM ECC功能介绍和检测

作者:Kathy Ren,AMD工程师;来源:AMD开发者社区

在Ultrascale+ HBM系列的器件上包含有容量32Gb/64Gb的高带宽硬件存储介质HBM。每个HBM stack的容量是32Gb,分为8个channel。每个channel可以分为2个伪通道(pseudo channel)。除了基本的AXI3总线供数据读写之外,还带有ECC(错误校验和纠正)功能。这样,通过它就可以有效的保证系统的稳定性和可靠性。

ECC的工作包含写和读两个阶段。写数据时,将通过ECC逻辑算出的ECC bit进行单独存储;读数据时,除了访问地址上的用户数据之外,对应的ECC bit也会被读出,并且进行校验和最多1 bit数据错误的纠正。

HBM IP提供了一系列ECC相关选项:
Enable ECC Bypass- ECC错误校验和纠正功能关闭。
Enable ECC Correction- 对于单bit 的ECC错误进行纠正。
Enable ECC Scrubbing- 使能擦洗功能。 它从HBM读取数据,检测并纠正单bit ECC错误,再写回到原来的位置。
ECC Scrub Bits- ECC初始化和Scrubbing的地址空间。
ECC Scrub Period- 擦洗功能进行读数据的时间间隔。
Initialize Memory Using ECC- 初始化HBM数据并填入相应的ECC bits

另外,还有一系列的ECC相关的状态寄存器,具体定义可以参见pg276中 Table ECC and Status Registers. 想要通过查询ECC状态寄存器检查ECC错误,必须要将ECC Scrubbing功能打开。操作流程参考如下:

## Clear any errors before (note to clear errors need to set and then clear...very important as ECC errors will be masked otherwise
252>sudo rwmem 0xF8905818 0x0
252>sudo rwmem 0xF8905818 0x1
253>sudo rwmem 0xF8905818 0x0
## Read status
254>sudo rwmem 0xF8905828
0x00000000f8905828 = 0x00000000
255>sudo rwmem 0xF890582C
0x00000000f890582C = 0x00000000
## Clear error-causing bit before using
256>sudo rwmem 0xF890584C 0x0
257>sudo rwmem 0xF890584C 0x1
## NB
# Enabled scrubbing to allow errors to be caused
257a>sudo rwmem 0xF8905804 0x1
## Check status (1-bit/2-bit) 
258>sudo rwmem 0xF8905828
0x00000000f8905828 = 0x00000000
259>sudo rwmem 0xF890582C
0x00000000f890582c = 0x00000000
## Write to cause error
260>xbutil mem --write -a 0x0 -i 256
INFO: Found total 1 card(s), 1 are usable
INFO: Writing to single bank, 256 bytes from DDR address 0x0
INFO: Writing DDR with 256 bytes of pattern: 0x4a from address 0x0
INFO: xbutil mem succeeded. 
## Check status (single-bit error)
261>sudo rwmem 0xF8905828
0x00000000f8905828 = 0x00000001
262>sudo rwmem 0xF890582C
0x00000000f890582c = 0x00000000

当检测到大于1bit的ECC error时,同时会在数据读取总线上表现为SLVERR,读命令返回RRSEP=10。

最新文章

最新文章