﻿ 融合相邻单元高低页存储可靠性的闪存译码算法
«上一篇
 文章快速检索 高级检索

 应用科技  2020, Vol. 47 Issue (3): 17-23  DOI: 10.11991/yykj.202003001 0

### 引用本文

ZHENG Minhua, HAN Guojun. An improved decoding algorithm for NAND flash memory fusing the storage reliability of upper and lower pages of adjacent cells[J]. Applied Science and Technology, 2020, 47(3): 17-23. DOI: 10.11991/yykj.202003001.

### 文章历史

An improved decoding algorithm for NAND flash memory fusing the storage reliability of upper and lower pages of adjacent cells
ZHENG Minhua, HAN Guojun
School of Information Engineering, Guangdong University of Technology, Guangzhou 510006, China
Abstract: In this paper, by fully considering the reading and writing mechanism of high-density NAND flash memory, the relationship of upper pages and lower pages, and the influence of channel noises on the distribution of threshold voltage, an improved BP decoding algorithm is proposed by fusing the storage reliability of upper and lower pages of adjacent cells. Based on the relationship between read-write order and programming order, this algorithm improves the error correction performance of upper pages with the decoding information of adjacent word lines’ lower pages. Simulation results show that the proposed algorithm effectively reduces the bit error ratio of upper pages without increasing extra complexity compared with the traditional BP decoding algorithm.
Keywords: NAND flash memory    read-write mechanism    interference noise    distribution of threshold voltage    adjacent cells    BP decoding algorithm    bit error rate    data storage

1 信道模型

MLC闪存信道的建模如图1所示，数据先通过擦除与编程操作写入存储单元。不失一般性，闪存信道的干扰主要包括随机电报噪声[10-11]、持久性噪声和单元间干扰。

1.1 擦除与编程操作

 ${P_e}(v) = \frac{1}{{{\sigma _e}\sqrt {2{\rm{{\text{π}} }}} }}{{\rm{e}}^{ - \frac{{{{(v -{\mu_{_e}})}^2}}}{{2_{\sigma _e^2}}}}} = N({\mu _e},\sigma _e^2)$

 ${P_p}(v) = \frac{1}{{{\sigma _p}\sqrt {{\rm{2{\text{π}} }}} }}{{\rm{e}}^{ - \frac{{{{(v - {\mu _{_p}})}^2}}}{{2\sigma _p^2}}}} = N({\mu _p},\sigma _p^2)$

1.2 随机电报噪声

 ${P_{{\rm{RTN}}}}(v) = \frac{1}{{2\lambda }}{{\rm{e}}^{ - \frac{{\left| v \right|}}{\lambda }}} = N(0,\sigma _r^2)$

1.3 持久性噪声

 ${P_e}(v) = \frac{1}{{{\sigma _e}\sqrt {2{\rm{{\text{π}} }}} }}{{\rm{e}}^{ - \frac{{{{(v - {\mu _{_e}})}^2}}}{{2\sigma _e^2}}}} = N({\mu _e},\sigma _e^2)$

1.4 单元间干扰

 $\Delta {V_{{\rm{CCI}}}} = \sum\limits_n {(\Delta {V^{(n)}} \times {\gamma ^{(n)}})}$

 $\begin{array}{l} p({V_{{\rm{th}}}}|k \in \{ 11,01,00,01\} ) = \dfrac{{\rm{1}}}{{{\rm{64}}}}[N({\mu _k} - \\ \;\;\;\;\;\;\;\;\;{\mu _t},\sigma _k^2 + \sigma _t^2 + \sigma _r^2) + A + B + C] \end{array}$
 $\begin{array}{c} A = \displaystyle\sum\limits_{{\mu _p}} [ 2N({\gamma _{xy}}({\mu _p} - {\mu _e}) + {\mu _k} - {\mu _t},\gamma _{xy}^2(\sigma _p^2 + \\ \sigma _e^2 + 2\sigma _r^2) + \sigma _k^2 + \sigma _t^2) + N({\gamma _y}({\mu _p} - {\mu _e}) + \\ {\mu _k} - {\mu _t},\gamma _y^2(\sigma _p^2 + \sigma _e^2 + 2\sigma _r^2) + \sigma _k^2 + \sigma _t^2)], \end{array}$
 $\begin{array}{c} B = \displaystyle\sum\limits_{\mu _p^{(1)}} {\displaystyle\sum\limits_{\mu _p^{(2)}} {\displaystyle\sum\limits_{\mu _p^{(3)}} N } } ({\gamma _{xy}}(\mu _p^{(1)} + \mu _p^{(2)}) - 2{\mu _e}) + \\ {\gamma _y}(\mu _p^{(2)} - {\mu _e}) + {\mu _k} - {\mu _t},(2\gamma _{xy}^2 + \gamma _y^2) \cdot \\ (\sigma _p^2 + \sigma _e^2 + 2\sigma _r^2) + \sigma _k^2 + \sigma _t^2) \end{array}$
 $\begin{array}{c} C = \displaystyle\sum\limits_{\mu _p^{(1)}} {\displaystyle\sum\limits_{\mu _p^{(2)}} N } ({\gamma _{xy}}(\mu _p^{(1)} - {\mu _e}) + {\gamma _y}(\mu _p^{(2)} - {\mu _e}) + \\ {\mu _k} - {\mu _t},(\gamma _{xy}^2 + \gamma _y^2)(\sigma _p^2 + \sigma _e^2 + 2\sigma _r^2 + \sigma _k^2 + \sigma _t^2)) + \\ \sigma _t^2\displaystyle\sum\limits_{\mu _p^{(2)}} {\displaystyle\sum\limits_{\mu _p^{(3)}} N } ({\gamma _{xy}}(\mu _p^{(3)} - {\mu _e}) + {\gamma _y}(\mu _p^{(2)} - {\mu _e}) + \\ {\mu _k} - {\mu _t},(\gamma _{xy}^2 + \gamma _y^2)(\sigma _p^2 + \sigma _e^2 + 2\sigma _r^2) + \sigma _k^2 + \sigma _t^2) + \\ \displaystyle\sum\limits_{\mu _p^{(1)}} {\displaystyle\sum\limits_{\mu _p^{(3)}} N } ({\gamma _{xy}}(\mu _p^{(1)} + \mu _p^{(2)} - 2{\mu _e}) + {\mu _k} - \\ {\mu _t},2\gamma _{xy}^2(\sigma _p^2 + \sigma _e^2 + 2\sigma _r^2) + \sigma _k^2 + \sigma _t^2) \end{array}$

 Download: 图 4 MLC闪存信道在单元间干扰下的阈值电压分布( $s = 1.6$ 、 ${P_E} = 10\;000$ 、 $T = 0$ )
2 优化方案

2.1 利用相邻低页修正高页

1)若MSB译码失败，LLSB和NLSB都没有译码成功，则执行步骤5)。

2)读取LLSB和NLSB在译码后的比特信息，并分别记为 ${B_{{\rm{LLSB}}}}(i)$ ${B_{{\rm{NLSB}}}}(i),i = 1,2, \cdots ,N$ ，其中N为码长。找出MSB的变量节点 ${\rm{\{ }}{v_i} \in {\rm{flag}}({\rm{2,3,8,9}}){\rm{\} }}$ 的位置U $U = {\rm{find}}({R_{{\rm{MSB}}}} = = \left| 5 \right|)$

3)读取并更新MSB重叠区中错误比特的自信度信息：

if $({R_{{\rm{MSB}}}}(U) = = 5{\rm{\& \& }}{B_{{\rm{LLSB}}}}(U) = = 1{\rm{\& \& }}{B_{{\rm{NLSB}}}}(U) = = 1)$

${R_{{\rm{MSB}}}}(U) = {R_{{\rm{MSB}}}}(3)$

end

if $({R_{{\rm{MSB}}}}(U)\! = =\! - 5{\rm{\& \& }}{B_{{\rm{LLSB}}}}(U)\! = = \!1{\rm{\& \& }}{B_{{\rm{NLSB}}}}(U) \!= =\! 0)$

${R_{{\rm{MSB}}}}(U) = {R_{{\rm{MSB}}}}(2)$

end

if $({R_{{\rm{MSB}}}}(U) \!= =\! - 5{\rm{\& \& }}{B_{{\rm{LLSB}}}}(U) \!= = \!0{\rm{\& \& }}{B_{{\rm{NLSB}}}}(U) \!= =\! 1)$

${R_{{\rm{MSB}}}}(U) = {R_{{\rm{MSB}}}}(9)$

end

if $({R_{{\rm{MSB}}}}(U) = = 5{\rm{\& \& }}{B_{{\rm{LLSB}}}}(U) = = 0{\rm{\& \& }}{B_{{\rm{NLSB}}}}(U) = = 0)$

${R_{{\rm{MSB}}}}(U) = {R_{{\rm{MSB}}}}(8)$

end

4)该译码错误的MSB页重新BP译码。

5)结束。

2.2 修正低页

 $m_{{c_i} \to {v_j}}^k = 2{\tanh ^{ - 1}}\Bigg(\prod\limits_{{v_f} \in N({c_i})\backslash {v_j}} {\tanh \Bigg(\frac{1}{2}m_{_{{v_f} \to {c_i}}}^{k{\rm{ - 1}}}\Bigg)} \Bigg)$ (1)
 ${\rm{ }}m_{{v_j} \to {c_i}}^k = R({v_j}) + \sum\limits_{{c_g} \in M({v_j})\backslash {c_i}} {m_{_{{c_g} \to {v_j}}}^k}$ (2)
 $m_{{v_j}}^k = R({v_j}) + \sum\limits_{{c_i} \in M({v_j})} {m_{{c_g} \to {v_j}}^k}$ (3)
 $c = \left\{ \begin{array}{l} 1,\;\;\;\;m_{_{{v_j}}}^k < 0\\ 0,\;\;\;\;m_{_{{v_j}}}^k > 0 \end{array} \right.$ (4)

 $c({v_i} \in {\rm{flag}}({\rm{1,10}})) = \left\{ {\begin{array}{*{20}{c}} {\begin{array}{*{20}{c}} \!\!\!\!\!\! {1,}&{{R_{{\rm{LSB}}}}({v_i} \in {\rm{flag}}(1,10)) < 0} \end{array}} \\ {\begin{array}{*{20}{c}} \!\!\!\!\!\! {0,}&{{R_{{\rm{LSB}}}}({v_i} \in {\rm{flag}}(1,10)) > 0} \end{array}} \end{array}} \right.$

 $\left\{ {\begin{array}{*{20}{c}} {m_{{v_j}}^k > 0,}&{{R_{{\rm{LSB}}}}({{\rm{v}}_j} \in {\rm{flag}}(1,10)) < 0} \\ {m_{{v_j}}^k < 0,}&{{R_{{\rm{LSB}}}}({{\rm{v}}_j} \in {\rm{flag}}(1,10)) > 0} \end{array}} \right.$

 $\left\{ {\begin{array}{*{20}{c}} {m_{{v_j}}^k > 0,}&{\displaystyle\sum\limits_{{c_i} \in M({v_j})} {m_{{c_i} \to {v_j}}^k} > 0} \\ {m_{{v_j}}^k < 0,}&{\displaystyle\sum\limits_{{c_i} \in M({v_j})} {m_{{c_i} \to {v_j}}^k} < 0} \end{array}} \right.$

 $\left\{ {\begin{array}{*{20}{c}} {\displaystyle\sum\limits_{{c_i} \in M({v_j})} {m_{{c_i} \to {v_j}}^k} > 0,}&{{R_{{\rm{LSB}}}}({v_i} \in {\rm{flag}}(1,10)) < 0} \\ {\displaystyle\sum\limits_{{c_i} \in M({v_j})} {m_{{c_i} \to {v_j}}^k} < 0,}&{{R_{{\rm{LSB}}}}({v_i} \in {\rm{flag}}(1,10)) > 0} \end{array}} \right.$

1)初始化所有变量节点， $m_{{v_j}}^0 = {R_{{\rm{LSB}}}}(j)$ $j = 1,$ $2, \cdots ,N$

2)更新校验节点，计算式(1)。

3)更新变量节点，计算码字总信息。

if ${\{ {v_j} \in {\rm{flag}}(1,10)|{v_j} \in {\rm{LSB}}\} }$

else 计算式(3)，并计算校正信息可靠性权重：

 ${a_{ij}} = \left\{ {\begin{array}{*{20}{c}} {\begin{array}{*{20}{c}} \!\!\!\!\!\!{0,}&{\displaystyle\sum\limits_{{c_{\rm{i}}} \in M({v_j})} {m_{{c_i} \to {v_j}}^k} \times {R_{{\rm{LSB}}}}(v_{_j}^k)} \end{array} < 0} \\ {\begin{array}{*{20}{c}} \!\!\!\!\!\! {1,}&{\displaystyle\sum\limits_{{c_i} \in M({v_j})} {m_{{c_i} \to {v_j}}^k} \times {R_{{\rm{LSB}}}}(v_{_j}^k)} \end{array} > 0} \end{array}} \right.$

 $m_{{v_j} \to {c_i}}^k = {R_{{\rm{LSB}}}}({v_j}) + \sum\limits_{{c_g} \in M({v_j})\backslash {c_i}} {{a_{gj}}m_{_{{c_g} \to {v_j}}}^k}$

 $m_{{v_j}_i}^k = {R_{{\rm{LSB}}}}({v_j}) + \sum\limits_{{c_{\rm{i}}} \in M({v_j})} {{a_{ij}}m_{_{{c_i} \to {v_j}}}^k}$

end

4)硬判决式(4)。

5)若满足 $c \cdot {{{H}}^{\rm{T}}} = 0$ ，则停止迭代，否则继续重复步骤2)、3)，直到满足 $c \cdot {{{H}}^{\rm{T}}} = 0$ 或迭代到最大迭代次数 ${I_{{\rm{max}}}}$

3 仿真结果