Browser does not support (or has disabled) JavaScript, some features of this page may not work properly

EE6309 VLSI Systems 中文复习笔记(持续更新)

EE6309 VLSI Systems 课程复习笔记

当前只覆盖已有课程回放的 Week 1。合并课件中的 CRC、M-out-of-N,以及另一份课件中的噪声内容尚未授课,因此不在本章范围内。

第 1 章(Week 1):从缩放到可靠数据编码

本章的主线是“怎样把数字数据可靠地从一个位置送到另一个位置”。VLSI(Very-Large-Scale Integration,超大规模集成)让一个系统容纳越来越多的晶体管,但系统同时受到功耗密度、互连噪声、器件故障和时序裕量的约束。数据编码不消除物理噪声,而是在原始消息之外加入结构化冗余,使接收端能够判断数据是否仍属于合法码字集合,必要时进一步定位并纠正错误。

本章按以下顺序建立模型:

  1. 先用缩放定律理解性能、能量和功耗密度为什么互相牵制;
  2. 再定义码字、自检与奇偶校验;
  3. 用二维奇偶校验说明“多次、重叠检查”怎样带来定位能力;
  4. 用最小 Hamming 距离统一解释检测和纠错能力;
  5. 最后完整构造 Hamming 码与 SECDED(Single-Error Correction, Double-Error Detection,单错纠正、双错检测),并评估冗余代价。

1.1 缩放:更快、更密集,却不一定更容易散热

Moore 定律是经验观察:单芯片晶体管数大约每 18–24 个月翻倍。对电路分析更直接的问题是:若所有线性尺寸缩小,延迟、功耗和能量按什么比例变化?

设缩放因子 \(\kappa>1\),器件长度、宽度、氧化层厚度等线性尺寸均变为原来的 \(1/\kappa\)。以下结论属于课程采用的经典比例模型,忽略速度饱和、漏电、互连主导效应和工艺离散性;它用于比较趋势,不应直接当作先进工艺的精确预测。

恒电场缩放(constant-field scaling)

尺寸和电源电压都缩小 \(1/\kappa\),掺杂浓度提高到 \(\kappa\) 倍,因此电场 \(E\sim V/L\) 保持不变。

电容满足 \(C=\varepsilon A/t\)。面积 \(A\) 缩为 \(1/\kappa^2\),介质厚度 \(t\) 缩为 \(1/\kappa\),所以

\[C' = \frac{C}{\kappa}.\]

在经典长沟道比例模型中,电流缩为 \(I'=I/\kappa\)。于是

\[\begin{aligned} t_d' &\sim \frac{C'V'}{I'} =\frac{(C/\kappa)(V/\kappa)}{I/\kappa} =\frac{t_d}{\kappa},\\ P' &\sim V'I'=\frac{P}{\kappa^2},\\ E_{\mathrm{sw}}' &\sim C'(V')^2 =\frac{E_{\mathrm{sw}}}{\kappa^3}. \end{aligned}\]

单位面积能放入 \(\kappa^2\) 倍器件,因此电路密度变为 \(\kappa^2\) 倍,而功耗密度比例为

\[\frac{P'}{A'}=\frac{P/\kappa^2}{A/\kappa^2}=\frac{P}{A}.\]

这就是恒电场缩放的吸引力:速度提高、单器件功耗下降,同时理想功耗密度不增加。

恒电压缩放(constant-voltage scaling)

尺寸仍缩小 \(1/\kappa\),但电源电压不变。此时电场增为 \(\kappa\) 倍,经典模型给出 \(C'=C/\kappa\)、\(I'=\kappa I\),所以

\[\begin{aligned} t_d' &\sim \frac{C'V}{I'}=\frac{t_d}{\kappa^2},\\ P' &\sim VI'=\kappa P,\\ E_{\mathrm{sw}}' &\sim C'V^2=\frac{E_{\mathrm{sw}}}{\kappa},\\ \left(\frac{P}{A}\right)'&=\kappa^3\frac{P}{A}. \end{aligned}\]

它换来更激进的速度提升,却使电场可靠性和散热迅速恶化。这解释了为什么处理器不能只靠提高时钟频率延续性能增长,而转向多核、专用加速器和更严格的能量管理。

完整数值例题:\(\kappa=2\)

已知缩放前某逻辑块的延迟为 \(100\ \mathrm{ps}\),单次切换能量为 \(0.10\ \mathrm{pJ}\),功耗为 \(1.0\ \mathrm{mW}\)。比较两种缩放策略。

恒电场缩放:

\[\begin{aligned} t_d'&=100\ \mathrm{ps}/2=50\ \mathrm{ps},\\ P'&=1.0\ \mathrm{mW}/2^2=0.25\ \mathrm{mW},\\ E_{\mathrm{sw}}'&=0.10\ \mathrm{pJ}/2^3=0.0125\ \mathrm{pJ},\\ \end{aligned}\]

电路密度倍率为 \(2^2=4\),功耗密度倍率为 \(1\)。

恒电压缩放:

\[\begin{aligned} t_d'&=100\ \mathrm{ps}/2^2=25\ \mathrm{ps},\\ P'&=2(1.0\ \mathrm{mW})=2.0\ \mathrm{mW},\\ E_{\mathrm{sw}}'&=0.10\ \mathrm{pJ}/2=0.050\ \mathrm{pJ},\\ \end{aligned}\]

电路密度倍率为 \(4\),功耗密度倍率为 \(2^3=8\)。

量纲检查:延迟仍为时间、功耗仍为能量/时间、切换能量仍为能量;缩放因子本身无量纲。极限检查:\(\kappa=1\) 时所有倍率都回到 1。

1.2 数据编码的基本模型

设原始消息有 \(m\) bit,编码器增加 \(r\) 个检查位,形成 \(n=m+r\) bit 的码字(codeword)。所有允许发送的码字构成合法集合 \(\mathcal C\)。若接收向量 \(\mathbf y\notin\mathcal C\),接收端便知道传输或电路中出现了错误。

常见错误源包括噪声信道、器件失效和电源扰动。课程首先采用硬连线数字系统的简化假设:单 bit 错误比多个独立 bit 同时出错更常见。因此应以最低硬件代价覆盖单错,再按系统可靠性需求决定是否增强多错检测。

错误检测与错误纠正的区别是:

  • 检测只需证明“收到的不是合法码字”;
  • 纠错还要从冗余信息中定位最可能的原码字,因此需要更大的码字间隔或更多检查关系。

下面的比较不是按课件条目照抄,而是从“接收端究竟拿什么证据做判决”来整理。它可作为后续选择编码方法的总索引:

方案 接收端使用的约束 最低保证能力 能否定位/纠正 开销与适用场景 关键盲区
一维奇偶校验 全码字 XOR 的奇偶性 检测任意奇数个 bit 翻转 不能定位 每组只加 1 bit;适合低成本错误告警 任意偶数个翻转可能漏检
二维奇偶校验 每一行和每一列各自的奇偶性 纠正单错、检测任意双错 单错可由失败行列的交点定位 需按块缓存并增加行列检查位;适合矩阵化数据 矩形四角同时翻转可能全部抵消
Hamming SEC 每个位置独有的二进制检查签名 纠正单错 非零综合征直接给出单错位置 校验位数满足 \(2^r\ge m+r+1\);效率随分组增大而提高 双错可能产生另一个非零综合征并被误纠正
扩展 Hamming SECDED Hamming 综合征 + 全局奇偶性 单错纠正、双错检测 能区分无错、单错、全局位错和双错 比 SEC 再多 1 bit;常用于存储器与总线保护 检出双错不等于知道两个错误位置

自检电路

自检(self-checking)是在正常功能运行期间自动检查输出是否符合某种码字约束。两个重要定义是:

  • fault-secure(故障安全):给定故障集合中的任何故障都不会产生另一个错误但仍合法的码字;
  • self-testing(自测试):给定故障集合中的每个故障,至少会在某个合法输入下产生非码字输出。

同时满足两者的电路称为 totally self-checking(完全自检)。必须注意,这些性质总是相对于“给定的故障集合”和“允许的输入集合”而言,不是对一切故障的绝对保证。

双轨检查器(two-rail checker)把每个逻辑量表示为一对互补信号。若所有输入对都互补,两个输出也应互补;输出为 \(00\) 或 \(11\) 则表示输入码字或检查器本身异常。讲课中明确指出原课件第 22 页的一条逻辑表达式有笔误,因此复习时应以“合法输入对与合法输出均互补”的真值条件和实际门级连线为准,不应死记该式。

若平衡树需要检查 \(q\) 对输入、每个基本模块合并两组检查结果,则模块数为

\[N_{\mathrm{module}}=q-1,\]

理想平衡深度为

\[L=\left\lceil\log_2 q\right\rceil.\]

例如 \(q=6\) 时需要 \(5\) 个模块,深度为 \(\lceil\log_2 6\rceil=3\) 级。模块数给面积趋势,级数给关键路径趋势。

1.3 一维奇偶校验:一个 XOR 就能建立约束

XOR(exclusive OR,异或)在输入中有奇数个 1 时输出 1,有偶数个 1 时输出 0。对消息 \((b_{m-1},\ldots,b_1,b_0)\),偶校验位为

\[p_{\mathrm{even}}=b_{m-1}\oplus b_{m-2}\oplus\cdots\oplus b_1\oplus b_0.\]

这样消息与校验位合计必有偶数个 1。奇校验位则为

\[p_{\mathrm{odd}}=\overline{b_{m-1}\oplus b_{m-2}\oplus\cdots\oplus b_1\oplus b_0}.\]

接收端可以把“检查通过”统一定义为错误标志 \(E=0\):

\[\begin{aligned} E_{\mathrm{even}}&=y_{m-1}\oplus\cdots\oplus y_0\oplus p_{\mathrm{even}},\\ E_{\mathrm{odd}}&=\overline{y_{m-1}\oplus\cdots\oplus y_0\oplus p_{\mathrm{odd}}}. \end{aligned}\]

若传输期间恰有奇数个 bit 翻转,整体奇偶性改变,\(E=1\);若有偶数个 bit 翻转,奇偶性不变,错误可能漏检。因此它保证检测任意奇数重量的错误图样,但不能保证检测偶数重量错误。

例题:偶校验与奇校验

已知 \(8\) bit 数据为 \(11010100\),其中有四个 1。

偶校验:

\[\begin{aligned} p_{\mathrm{even}} &=(1\oplus1\oplus0\oplus1)\\ &\quad\oplus(0\oplus1\oplus0\oplus0)=0. \end{aligned}\]

最终码字有四个 1。奇校验需要把总数变为五个 1,因此

\[p_{\mathrm{odd}}=1.\]

课件中的门级练习使用数据 \(1000\)。它已有一个 1,所以偶校验位为 1,奇校验位为 0。若无传输错误,偶校验 XOR 检查和奇校验 XNOR 检查都输出 \(E=0\)。

偶校验 XOR 生成器与接收端错误检测器

图 1 偶校验的生成与检测(来源:EE6309 Week 1 课件第 30 页,裁切并并排整理)。左侧把数据 \(1000\) 逐级 XOR,得到 \(P_{\mathrm{even}}=1\);右侧把收到的数据和原校验位一起 XOR,输出错误标志 \(E\)。

图中两侧其实是同一个不变量的两种用途。发送端选择 \(P_{\mathrm{even}}\),使“数据 XOR 校验位”为 0;右侧示例的数据从 \(1000\) 变为 \(1001\),但随帧发送的校验位仍为 1,于是总 XOR 变为 1,错误标志 \(E=1\)。检测器只知道奇偶约束被破坏,并不知道哪一位发生了翻转。

串行与并行实现

并行发送时可以用平衡 XOR 树一次计算校验位,理想逻辑深度约为 \(\lceil\log_2 m\rceil\)。串行发送时则可用一个触发器保存运行奇偶值:每来一位便执行一次 XOR,最后发送校验位。后者复用硬件且不会在帧尾堆叠 \(m-1\) 级组合延迟,但需要状态复位,并依赖明确的 bit 顺序和帧边界。

串行数据帧中的奇偶位时序与 XOR 累积结构

图 2 串行帧中的奇偶位与 XOR 累积(来源:EE6309 Week 1 课件第 31 页,裁切)。左图沿时间轴给出起始位、数据位、奇偶位和停止位;右图说明偶校验取所有数据位的 XOR,奇校验再取反。

图 2 的可考结论是“校验计算隐藏在数据发送时间内”:运行奇偶值在每个数据位到达时更新,到奇偶位时隙开始前已经就绪。帧开始必须清零状态,数据位顺序虽然不改变 XOR 的最终值,却决定接收端何时结束累计;停止位不参与本帧奇偶计算。右侧串接门画法用于展示逻辑关系,实际高速并行实现通常改成平衡树以缩短关键路径。

计算阶段 发送端动作 接收端动作 当步不变量/检查点 常见错误
帧开始 把运行奇偶寄存器清零 同步识别起始位并清零本地状态 上一帧状态不能带入本帧 忘记复位,导致连续帧结果相关
数据位到达 对每个数据位执行 \(q\leftarrow q\oplus b_i\) 对收到的每个数据位执行同样累计 XOR 交换律保证最终奇偶值与遍历方向无关 把 XOR 当普通加法,或把停止位算进去
奇偶位时隙 偶校验发送 \(p=q\);奇校验发送 \(p=\overline q\) 把收到的 \(p\) 纳入最终检查 合法偶校验帧总 XOR 为 0,合法奇校验帧总 XOR 为 1 “偶校验”误写成 \(p=0\)
判决与收尾 进入停止位并等待下一帧 把最终值映射为统一错误标志 \(E\) 本章约定合法帧均输出 \(E=0\) 偶/奇校验使用同一表达式却忘记取反

若把每一种非零错误图样视为等可能,\(n\) bit 码字共有 \(2^n-1\) 种非零错误图样,其中奇数重量图样有 \(2^{n-1}\) 种,所以覆盖率为

\[\frac{2^{n-1}}{2^n-1}\approx 50\%.\]

“约 50%”是组合计数结论,不代表真实信道中每种错误图样真的等概率。

1.4 二维奇偶校验:用行列综合征定位单错

二维奇偶校验(2-D parity check,也称 block check code)把数据排成矩阵,并为每一行、每一列分别添加校验位。一个数据 bit 同时参与一条行约束和一条列约束;单错会唯一地让一行和一列失败,两条失败约束的交点就是错误位置。

二维奇偶校验由失败行和失败列定位单比特错误

图 3 二维奇偶校验的单错定位(来源:EE6309 Week 1 课件第 35 页,裁切)。黄色区域是数据,橙色和蓝色分别保存行、列校验;红色行综合征和深蓝色列综合征同时为 1,其交点标出错误 bit。

读取这张图时,应把右侧红列和下方深蓝行看成两组“失败标志”,而不是新的数据。只有第 3 行检查失败且第 3 列检查失败,所以候选位置唯一为 \((3,3)\)。若两个错误落在同一列,两个受影响行会失败,但该列翻转两次后可能仍通过;此时图样仍被检测,却失去唯一交点,不能纠正。

完整练习:\(4\times4\) 数据块

采用偶校验,原始数据为

\[D= \begin{bmatrix} 0&1&1&0\\ 1&1&0&0\\ 1&1&1&0\\ 0&0&0&0 \end{bmatrix}.\]

逐行 XOR 得行校验向量

\[\mathbf p_r= \begin{bmatrix} 0&0&1&0 \end{bmatrix}^{\mathsf T},\]

逐列 XOR 得列校验向量

\[\mathbf p_c= \begin{bmatrix} 0&1&0&0 \end{bmatrix}.\]

若第 3 行第 3 列从 1 翻为 0,接收数据为

\[D'= \begin{bmatrix} 0&1&1&0\\ 1&1&0&0\\ 1&1&0&0\\ 0&0&0&0 \end{bmatrix}.\]

把接收行/列重新计算的奇偶值与已发送校验位 XOR,得到综合征

\[\begin{aligned} \mathbf s_r&= \begin{bmatrix}0&0&1&0\end{bmatrix}^{\mathsf T},\\ \mathbf s_c&= \begin{bmatrix}0&0&1&0\end{bmatrix}. \end{aligned}\]

因此错误唯一位于 \((3,3)\),把该 bit 再翻转即可恢复。

若第 2 行第 3 列和第 3 行第 3 列同时翻转,则

\[\begin{aligned} \mathbf s_r&= \begin{bmatrix}0&1&1&0\end{bmatrix}^{\mathsf T},\\ \mathbf s_c&= \begin{bmatrix}0&0&0&0\end{bmatrix}. \end{aligned}\]

这说明第 2、3 行各有异常,却不能从列综合征确定是哪一列,所以只能检测、不能纠正。二维奇偶校验保证检测任意双 bit 错误;但四个错误若恰好位于某个矩形的四个角,每个受影响行列都翻转两次,可能完全漏检。由此可见“可检测多 bit 错误”不是“可检测任意数量、任意图样的错误”。

1.5 Hamming 距离:统一描述检测与纠错

两个等长二进制向量 \(\mathbf a\) 与 \(\mathbf b\) 的 Hamming 距离为不同位置的数量:

\[d_H(\mathbf a,\mathbf b)=\operatorname{wt}(\mathbf a\oplus\mathbf b),\]

其中 \(\operatorname{wt}(\cdot)\) 是 1 的个数。一个码的最小距离是任意两个不同合法码字间的最小距离:

\[d_{\min}=\min_{\mathbf c_i\ne\mathbf c_j\in\mathcal C}d_H(\mathbf c_i,\mathbf c_j).\]

核心结论:

  • 只要求检测时,最多可保证检测 \(d_{\min}-1\) 个错误;
  • 最近码字译码可保证纠正 \(\left\lfloor(d_{\min}-1)/2\right\rfloor\) 个错误;
  • 若要同时纠正至多 \(t\) 个错误,并把额外的至多 \(s\) 个错误识别为“不可纠正”,需要 \(d_{\min}\ge 2t+s+1\)。

直觉上,每个合法码字周围半径 \(t\) 的“纠错球”不能重叠。若球重叠,同一接收向量会同样接近两个合法码字,译码器无法唯一选择。

完整距离练习

以 \(A=11111111\) 为参考,比较下列码字和接收结果:

码字 与 \(A\) 的距离 接收示例 能力与结论
\(B=11111011\) 1 \(B_{\mathrm{err}}=11111111=A\) 错误直接落到另一合法码字,连单错也不能保证检测
\(C=11101011\) 2 \(C_{\mathrm{err}}=11111011\) 与 \(A,C\) 都相距 1,可检测但不能唯一纠正
\(D=10101011\) 3 \(D_{\mathrm{err}}=11101011\) 与 \(D\) 相距 1、与 \(A\) 相距 2,可纠正为 \(D\)
\(E=10101010\) 4 \(E_{\mathrm{err}}=11101011\) 与 \(A,E\) 都相距 2,双错可检测但不能唯一纠正

距离为 4 的码也可选择“放弃纠错、只做检测”,此时理论上能检测最多 3 bit 错误;SECDED 则选择纠正 1 bit、检测 2 bit。

1.6 Hamming 码:从检查矩阵到错误位置

设有 \(m\) 个消息位,需要 \(r\) 个 Hamming 校验位。综合征共有 \(2^r\) 种状态,其中一个状态表示“无错误”,其余状态至少要覆盖 \(m+r\) 个单错位置,因此

\[2^r\ge m+r+1.\]

这是本章需要熟练掌握的数量条件。取满足不等式的最小整数 \(r\),再把校验位放在位置

\[1,2,4,8,\ldots,2^{r-1}.\]

位置从最低有效端开始编号。位置编号的二进制表示同时决定它参加哪些校验组:编号第 \(j\) 个二进制位为 1,就参加第 \(j\) 组校验。因此接收端各组校验失败位拼起来,正好就是错误位置的二进制编号。

Hamming 七位码的三路 XOR 综合征生成网络

图 4 Hamming \((7,4)\) 的综合征生成网络(来源:EE6309 Week 1 课件第 53 页,裁切)。三棵 XOR 树分别产生 \(b_2,b_1,b_0\);每棵树只接入位置编号相应二进制位为 1 的接收位。

例如 \(b_0\) 检查奇数位置 \(1,3,5,7\),\(b_1\) 检查位置 \(2,3,6,7\),\(b_2\) 检查位置 \(4,5,6,7\)。若只有位置 \(i\) 翻转,它参与的校验树恰好由 \(i\) 的三位二进制编号决定,因此 \((b_2b_1b_0)_2=i\)。这也是“综合征直接等于错误位置”成立的电路原因,而不是需要额外背诵的巧合。

步骤 手算动作 正确性检查 典型扣分点
1. 求校验位数 从 \(r=1\) 起找满足 \(2^r\ge m+r+1\) 的最小整数 \(2^r-1\) 个非零综合征至少覆盖全部 \(m+r\) 个位置 忘记右侧还包含 \(r\) 个校验位和“无错”状态
2. 安排位置 把 \(P_1,P_2,P_3,\ldots\) 放在 \(1,2,4,\ldots\) 总位置数必须等于 \(m+r\),位置从 1 开始 从位置 0 编号,或消息位高低位顺序未声明
3. 生成码字 按位置编号的二进制位逐组 XOR,采用题目指定的偶/奇校验 完整码字重新过每组检查,综合征应为 0 漏掉校验位自身,或把组成员凭记忆写错
4. 译码 按同一组计算 \((b_{r-1}\cdots b_0)_2\) 单错假设下,数值必须落在 \(1\) 到 \(m+r\) 综合征高低位颠倒,定位到错误位置
5. 纠错与抽取 仅在能力范围内翻转被定位 bit,再按原顺序抽取消息位 纠错后综合征归零,并与重新编码结果一致 普通 Hamming 遇到双错仍盲目翻转;SECDED 未先看全局奇偶位

完整例题:把消息 \(0110\) 编成 Hamming \((7,4)\) 码

已知:\(m=4\),偶校验,消息按 \((M_4M_3M_2M_1)=0110\) 解释。

先求校验位数:

\[\begin{aligned} r=2:&\quad 2^2=4<4+2+1=7,\\ r=3:&\quad 2^3=8\ge4+3+1=8. \end{aligned}\]

故 \(r=3\)。位置 1、2、4 放 \(P_1,P_2,P_3\),位置 3、5、6、7 放 \(M_1,M_2,M_3,M_4\):

位置 7 6 5 4 3 2 1
内容 \(M_4\) \(M_3\) \(M_2\) \(P_3\) \(M_1\) \(P_2\) \(P_1\)
数值 0 1 1 ? 0 ? ?

三个偶校验位分别覆盖:

\[\begin{aligned} P_1&=M_1\oplus M_2\oplus M_4=0\oplus1\oplus0=1,\\ P_2&=M_1\oplus M_3\oplus M_4=0\oplus1\oplus0=1,\\ P_3&=M_2\oplus M_3\oplus M_4=1\oplus1\oplus0=0. \end{aligned}\]

所以按位置 \(7\rightarrow1\) 写出的码字为

\[\boxed{0110011}.\]

量纲检查在这里变成“位数检查”:4 个消息位加 3 个校验位等于 7 bit;每个消息位至少参加两个校验组,所以单错能产生唯一的非零综合征。

接收、定位与纠正

假设位置 3 在传输中由 0 翻为 1,接收字为 \(0110111\)。令 \(Y_i\) 表示接收位置 \(i\) 的 bit,偶校验综合征为

\[\begin{aligned} b_0&=Y_1\oplus Y_3\oplus Y_5\oplus Y_7=1,\\ b_1&=Y_2\oplus Y_3\oplus Y_6\oplus Y_7=1,\\ b_2&=Y_4\oplus Y_5\oplus Y_6\oplus Y_7=0. \end{aligned}\]

因此

\[(b_2b_1b_0)_2=(011)_2=3.\]

综合征直接指出位置 3。把 \(Y_3\) 再翻转,恢复 \(0110011\),随后抽取位置 7、6、5、3,得到原消息 \(0110\)。硬件上,XOR 网络生成综合征,\(r\)-to-\(2^r\) 译码器选择错误位置,再用 XOR 控制该 bit 是否翻转。

普通 Hamming \((7,4)\) 码不能安全处理双错。例如从 \(0110011\) 出发,若位置 5 与位置 3 同时翻转,收到 \(0100111\),计算得到综合征 \(110_2=6\)。位置 6 实际没有错;若译码器盲目翻转位置 6,反而会制造第三个错误。

1.7 SECDED:给 Hamming 码再加一层总奇偶性

扩展 Hamming 码在原 Hamming 码之外增加一个全局偶校验位 \(P_0\),使整个扩展码字的 1 数为偶数,最小距离从 3 提升到 4。令

  • \(\mathbf s\) 为原 Hamming 校验产生的综合征;
  • \(q\) 为包含 \(P_0\) 在内的全局偶校验结果,\(q=1\) 表示总体奇偶检查失败。

判决表如下:

\(\mathbf s\) \(q\) 含义 动作
\(0\) 0 无错误 直接接收
非零 1 原 Hamming 部分有单 bit 错误 按综合征定位并翻转
\(0\) 1 只有全局校验位 \(P_0\) 出错 数据可直接使用;需要时修正 \(P_0\)
非零 0 双 bit 错误 报告不可纠正,禁止盲目翻转

关键逻辑是:单错改变总体奇偶性,双错不改变总体奇偶性。普通 Hamming 综合征只说明“某些校验组失败”,全局奇偶位负责把单错和双错区分开。

1.8 课件综合练习:7 bit 消息的 SEC 与 SECDED

题目:数字通信链路发送 7 bit 消息 \((M_7,\ldots,M_1)=1010110\),采用偶校验。构造能够单 bit 纠错的 Hamming 码,并进一步构造能够单错纠正、双错检测的扩展码。

第 1 问:需要多少个 Hamming 校验位?

\[\begin{aligned} r=3:&\quad 2^3=8<7+3+1=11,\\ r=4:&\quad 2^4=16\ge7+4+1=12. \end{aligned}\]

所以最少需要 \(r=4\) 个校验位,码长 \(n=7+4=11\)。

第 2 问:安排消息位并计算偶校验位

位置 1、2、4、8 放 \(P_1,P_2,P_3,P_4\),其余位置依次放 \(M_1\) 到 \(M_7\):

位置 11 10 9 8 7 6 5 4 3 2 1
内容 \(M_7\) \(M_6\) \(M_5\) \(P_4\) \(M_4\) \(M_3\) \(M_2\) \(P_3\) \(M_1\) \(P_2\) \(P_1\)
数值 1 0 1 ? 0 1 1 ? 0 ? ?

逐组计算:

\[\begin{aligned} P_1&=Y_3\oplus Y_5\oplus Y_7\oplus Y_9\oplus Y_{11} \\ &=(0\oplus1\oplus0)\oplus(1\oplus1)=1,\\ P_2&=Y_3\oplus Y_6\oplus Y_7\oplus Y_{10}\oplus Y_{11} \\ &=(0\oplus1\oplus0)\oplus(0\oplus1)=0,\\ P_3&=Y_5\oplus Y_6\oplus Y_7 \\ &=1\oplus1\oplus0=0,\\ P_4&=Y_9\oplus Y_{10}\oplus Y_{11} \\ &=1\oplus0\oplus1=0. \end{aligned}\]

因此 11 bit 单错纠正码为

\[\boxed{10100110001}.\]

交叉检查:这个码字在每个校验组内都应有偶数个 1;把对应组重新 XOR,四个综合征位均为 0。

第 3 问:扩展为 SECDED

上述 11 bit 码字共有五个 1。为使全局奇偶性为偶数,增加

\[P_0=1.\]

若约定把 \(P_0\) 写在最左端,则 12 bit SECDED 码字为

\[\boxed{110100110001}.\]

最终位数检查:7 个消息位 + 4 个 Hamming 校验位 + 1 个全局校验位 = 12 bit。接收端用上一节的四行判决表区分无错、Hamming 部分单错、\(P_0\) 单错和双错。

1.9 编码效率、冗余与分组大小权衡

对 \(m\) 个消息位和 \(r\) 个检查位,编码效率与冗余比例分别为

\[\begin{aligned} \eta&=\frac{m}{m+r},\\ \rho&=\frac{r}{m+r},\\ \eta+\rho&=1. \end{aligned}\]

单错纠正 Hamming 码的典型结果为:

消息位 \(m\) 最小校验位 \(r\) 总位数 效率 \(\eta\) 冗余 \(\rho\)
4 3 7 \(4/7\approx0.571\) \(3/7\approx0.429\)
8 4 12 \(8/12\approx0.667\) \(4/12\approx0.333\)
16 5 21 \(16/21\approx0.762\) \(5/21\approx0.238\)
32 6 38 \(32/38\approx0.842\) \(6/38\approx0.158\)
64 7 71 \(64/71\approx0.901\) \(7/71\approx0.099\)

把多个小消息合并成大分组能提高效率,因为 \(r\) 的增长远慢于 \(m\)。但教师在课堂问答中特别强调:是否应该扩大分组,必须结合信道误码率判断。

若假设各 bit 独立、单 bit 错误概率为 \(p\),长度为 \(n\) 的码字出现至少两个错误的概率为

\[P_{\ge2}=1-(1-p)^n-np(1-p)^{n-1}.\]

当 \(p\ll1\) 时,用二项式展开得到

\[P_{\ge2}\approx\binom{n}{2}p^2.\]

例如 \(p=10^{-6}\):

\[\begin{aligned} P_{\ge2}(12)&\approx\binom{12}{2}10^{-12}\\ &=6.6\times10^{-11},\\ P_{\ge2}(71)&\approx\binom{71}{2}10^{-12}\\ &=2.485\times10^{-9}. \end{aligned}\]

大分组仍可能非常可靠,但多错概率约增加 \(37.7\) 倍。若 bit 错误相关、会形成 burst error(突发错误),独立模型还会低估风险。设计时必须在带宽效率、译码延迟、缓存大小与不可纠正错误概率之间取舍。

第 1 章复习页

题型判据速查

题目线索 第一动作 核心判据 最多可以下的结论 禁止越界
“求偶/奇校验位” 先数 1 或逐位 XOR 偶校验总 XOR 为 0;奇校验总 XOR 为 1 得到 1 个校验位 不能由校验失败定位错误位置
“二维校验收到一个块” 分别重算所有行、列综合征 单错对应唯一失败行与失败列 唯一交点时可翻转该 bit 多个失败行列时不要任意配对纠错
“码的检测/纠错能力” 先求合法码字集合的 \(d_{\min}\) 检测 \(d_{\min}-1\),纠正 \(\lfloor(d_{\min}-1)/2\rfloor\) 报告保证能力而非某个偶然样例 不能只算接收字到一个参考字的距离
“构造 Hamming 码” 写明位序,再求最小 \(r\) \(2^r\ge m+r+1\),校验位在 2 的幂位置 在单错假设下完成定位与纠正 普通 Hamming 不保证双错检测
“SECDED 接收判决” 同时计算 \(\mathbf s\) 与全局奇偶 \(q\) 四种 \((\mathbf s,q)\) 组合分别判决 区分无错、单错、\(P_0\) 错、双错 双错只能报告不可纠正,不能按 \(\mathbf s\) 翻转
“分组越大是否越好” 同算效率与至少双错概率 \(\eta=m/(m+r)\),低 BER 时 \(P_{\ge2}\approx\binom n2p^2\) 讨论效率、延迟和可靠性的权衡 不能只看冗余下降而忽略相关或突发错误

必会公式与变量

公式 变量与用途
\(t_d\sim CV/I\) 一阶门延迟模型;\(C\) 为等效电容,\(V\) 为摆幅,\(I\) 为驱动电流
\(E_{\mathrm{sw}}\sim CV^2\) 切换能量比例;常数因子和活动率不影响本章缩放倍率
\(p_{\mathrm{even}}=\bigoplus_i b_i\) 生成偶校验位
\(d_H(\mathbf a,\mathbf b)=\operatorname{wt}(\mathbf a\oplus\mathbf b)\) 计算两个码字的不同 bit 数
\(t=\lfloor(d_{\min}-1)/2\rfloor\) 最小距离为 \(d_{\min}\) 时可保证纠正的错误数
\(2^r\ge m+r+1\) \(m\) 个消息位所需的最少 Hamming 校验位 \(r\)
\(\eta=m/(m+r)\) 编码效率
\(P_{\ge2}=1-(1-p)^n-np(1-p)^{n-1}\) 独立 bit 错误模型下,一个 \(n\) bit 码字出现至少双错的概率

典型计算流程

  1. 明确消息位顺序、位置编号方向、偶/奇校验约定;
  2. 用 \(2^r\ge m+r+1\) 找最小 \(r\);
  3. 在 \(1,2,4,8,\ldots\) 放校验位,其余位置按约定放消息位;
  4. 用位置编号的二进制位确定每个校验组,逐组 XOR;
  5. 接收端按相同分组计算综合征,并把综合征按正确高低位顺序转成十进制位置;
  6. 普通 Hamming 码只在单错假设下翻转该位置;SECDED 必须先结合全局奇偶结果分类;
  7. 抽取消息位,并用重新计算综合征为 0 做交叉检查;
  8. 最后计算效率、冗余以及目标信道下的多错风险。

练习结果速查

练习 最终结果
\(11010100\) 的偶/奇校验位 \(p_{\mathrm{even}}=0\),\(p_{\mathrm{odd}}=1\)
\(4\times4\) 二维校验单错 第 3 行、第 3 列失败,错误在 \((3,3)\)
\(0110\) 的 Hamming \((7,4)\) 编码 \(0110011\)
收到 \(0110111\) 综合征 \(011_2=3\),翻转位置 3
7 bit 消息 \(1010110\) 的 SEC 码 \(10100110001\)
同一消息的 SECDED 码(\(P_0\) 左置) \(110100110001\)

常见易错点与适用假设

  • “偶校验”指消息与校验位合计有偶数个 1,不是校验位固定为 0。
  • XOR 的结果反映 1 的奇偶性,不是普通加法的和。
  • 一维奇偶校验能检测所有奇数重量错误,但会漏掉所有偶数重量错误。
  • 二维奇偶校验能纠正单错、检测任意双错,但不能纠正双错,也不能保证检测所有更高重量图样。
  • Hamming 距离讨论的是合法码字集合;只计算某个接收字与一个参考字的距离,不能替代最小距离分析。
  • Hamming 位置从 1 开始编号,位置 0 不存在;全零综合征表示无 Hamming 部分错误。
  • 综合征非零并不自动等于“可纠正单错”。普通 Hamming 码遇到双错可能误纠正;SECDED 必须同时看全局奇偶位。
  • 扩大分组会提高效率,也会增加同一码字内出现多错的机会;\(\binom n2p^2\) 近似依赖独立、低误码率假设。
  • 缩放表是经典理想模型。先进工艺中的漏电、速度饱和、互连和热约束会改变精确倍率。

综合题答题顺序

先写清消息位顺序和校验协议,再求校验位数与位置;随后列出每个校验组、逐项 XOR、写出完整码字。接收题先算综合征,再根据是否有全局奇偶位决定“纠正、只报告还是无错”,不能先凭肉眼翻 bit。最后用重新编码或综合征归零交叉检查,并报告码长、效率及系统意义。这样可以同时避免位序错误、校验约定错误和双错误纠正。

本章的核心设计思想是:冗余不是越多越好,而要让每个额外 bit 提供可区分的新信息。简单奇偶校验只回答“奇偶性是否改变”,二维校验用两个维度定位单错,Hamming 码则让每个位置拥有唯一的二进制检查签名;SECDED 再加入一个全局约束,把单错与双错分开。后续课程将从物理互连和噪声出发,解释这些错误究竟怎样产生。

Author: Alan
Date:2026年08月21日

Comments