简述: 相等性是逐位 XNOR 结果的归约 AND。无符号大小由 A 与 B 不同的最高有效位决定。有符号大小需要对符号位作不同解释,或解释减法标志。只有当位宽、有无符号性、输出极性和级联输入均已定义时,比较器才是正确的。
比较器将两个位向量转换为一种关系:
A < B, A = B, or A > B
这听起来没有歧义,直到相同的位被赋予不同解释。在四位中,1000 无符号时为 8,但在二进制补码中为 -8。与 0111 比较时,按无符号解释它较大,按有符号解释它较小。
本指南先构建相等比较,再推导无符号大小网络,最后说明有符号比较和模块级联如何改变设计。
定义约定
对于两个有效的 位输入 A 和 B,三输出大小比较器通常产生:
- G:A 大于 B;
- E:A 等于 B;
- L:A 小于 B。
在有效的二值输入模型下:
且不会有两个输出同时为高。这种独热关系依赖于完整的实现和有效逻辑电平。使能输入、低有效接口、未知仿真值或未正确初始化的级联输入都可能改变可见行为。
相等性不依赖有无符号性:位向量要么匹配,要么不匹配。大于和小于则依赖于此。
用 XNOR 实现相等比较
对于一个位位置:
当两个位相同时, 。仅当所有位位置均匹配时,整个字才相等:
对于四位:
直接原理图使用四个 XNOR 门,随后进行 AND 归约。
人们很容易称其为“无论位宽如何都只有两个门延迟”。那只是一个扇入无限制的布尔级绘图。物理实现可以将归约构造成平衡树、分解为复合单元,或映射至 FPGA 查找表。使用双输入 AND 门时,平衡归约的深度大约随 增长。
无符号大小:最高位差决定结果
对每一位定义:
在最高的不同位位置,A 为 1 而 B 为 0 意味着 A 较大;相反则意味着 A 较小。只有当所有更高位均匹配时,较低位才重要。
对于四位无符号值:
每个 G 项的意思都是“所有更高位打平,且 A 在此位胜出”。每个 L 项表达对称情形。
无符号示例
比较:
A = 0110 (6)
B = 0101 (5)
第 3 位和第 2 位匹配。第 1 位处,A 为 1 而 B 为 0,因此 。第 0 位无关紧要,因为更高有效位的差异已存在:
G=1, E=0, L=0
这是一项优先级功能,但优先级从最高有效数据位向最低有效数据位运行。
递归比较器单元
与其展开长长的积之和,不如按层级组合各组。假设 H 描述高位组,Lw 描述低位组:
高位组决定结果,除非它相等;仅在那时低位组才会传递。这个具有结合式特征的组合可形成线性级联或平衡层级。
这些方程解释了 4 位大小比较器 IC 上的扩展输入。该模块在其本地四位相等时,需要低位的 G/E/L 结果。
级联 SN74LS85 模块
SN74LS85 对两个 4 位纯二进制或 8-4-2-1 BCD 字进行比较,并提供三个扩展输入和三个关系输出。
对于八位比较:
- 低位器件比较位 3:0。
- 将其扩展关系初始化为相等:
G_in=0, E_in=1, L_in=0。 - 将其 G/E/L 输出连接至高位器件的对应扩展输入。
- 高位器件比较位 7:4 并产生最终结果。
若高半部分不同,本地判定会覆盖低位输入。若高半部分匹配,低位关系便传播。
必须严格遵循数据手册中关于引脚极性、扇出、电压和时序的说明。逻辑递归不能替代电气设计。
有符号二进制补码比较
相等比较对有符号和无符号值使用同一个 XNOR 网络。排序则不同。
方法 1:分别解释符号位
令 、。
- 若 ,符号位为 1 的操作数较小。
- 若符号相同,对剩余关系作普通的字典序比较即可得到正确排序。
一个方便的硬件变换是在将每个操作数送入无符号比较器之前,反转其 MSB:
翻转符号位会将二进制补码排序偏置为无符号排序。对于四位:
signed -8 = 1000 → biased 0000
signed -1 = 1111 → biased 0111
signed 0 = 0000 → biased 1000
signed +7 = 0111 → biased 1111
现在,偏置后的值按与有符号数相同的顺序递增。
方法 2:减法并解释标志
若 ALU 计算 :
- E 是 Z;
- 有符号 L 是 ;
- 有符号 G 是 。
无符号小于取决于减法进位约定。若原始进位输出表示未借位,无符号 L 为 。若采用类似 x86 的借位标志,无符号 L 为 C。CPU 标志指南推导了两种约定。
不要只用 N 表示有符号小于条件不能只使用 N。一次有符号溢出可能反转所存储结果表面上的符号。
两种解释相反的示例
A = 1000
B = 0111
无符号:
8 > 7
二进制补码有符号:
-8 < +7
一个只标注为“A>B”的比较器,在有无符号性明确前并没有足够的规格定义。
时序和实现选择
线性优先级链的深度与位宽成正比。平衡的组组合网络可以降低逻辑深度。综合可能采用:
- 宽门或复合门;
- 类前缀的相等/大于组合;
- ALU 中已存在的减法硬件;
- FPGA 进位链或查找表资源;
- 面向特定用例的提前终止结构。
没有任何一种拓扑总是最快。在一种设计中,专用比较器可避免等待算术结果;在另一种设计中,复用加法器可能节省面积。现代处理器还会将比较分散到分支、地址生成、向量及其他执行逻辑中,而不是实现一个单体比较器。
时序路径包括源寄存器的时钟到 Q、输入选择、比较器逻辑、布线、目标建立时间和时钟效应。仅凭门计数无法确定最高频率。
实际用途
精确地址匹配
当地址等于固定值时,相等比较器可产生芯片选择信号。对于按 2 的幂对齐的区域,只需比较高位地址位,并将低位视作偏移量。任意范围则可能使用不等式或分解后的译码逻辑。
总线正确性不止取决于相等性:使能、访问类型、特权和互斥所有权也可能共同限定该选择信号。
阈值和窗口检查
控制逻辑可借助两个大小比较测试:
必须明确端点是包含还是排除,以及 X 是否有符号。
最小/最大值与比较-选择
大小结果可以驱动复用器:
min = (A < B) ? A : B
max = (A < B) ? B : A
当每个值携带元数据,或需要稳定排序时,处理相等情况的策略至关重要。
排序网络
比较-交换单元将一个比较器与数据路由复用器结合。固定网络分阶段组合这些单元。其延迟取决于比较器深度和比较-交换级数,而不仅是单元数量。
在 DigiSim 中构建并验证
以比较器组件为参考,再用逻辑门构建方程:
- 用 XNOR 构建四个 信号。
- 将它们归约为 E。
- 为每个位位置构建 和 。
- 从 MSB 到 LSB 组合它们。
- 断言每一对有效输入恰有一个 G/E/L 为高。
- 添加 MSB 偏置选项,以在无符号和有符号比较间切换。
在四位下穷举测试很实用:评估全部 对输入。
对于每一对,检查:
- E 等于位向量相等性;
- 无符号 G/L 与整数 0–15 一致;
- 有符号 G/L 与整数 -8–7 一致;
- 交换 A 和 B 会交换 G 和 L,但保持 E;
- G、E、L 两两互斥且共同穷尽。
然后级联两个四位模块,并以 0x0F/0x10 、 0x7F/0x80 以及高半部分相等而低半部分不同等边界输入对为目标。
功能仿真器能够确立布尔关系;它不能确立最终工艺中的物理传播延迟、电气兼容性或时序收敛。



