news 2026/11/2 21:57:02

八选一数据选择器实现血型输血判定:编码、真值表与最小项

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
八选一数据选择器实现血型输血判定:编码、真值表与最小项

简介:面向数字逻辑课程学习者与需要完成组合逻辑设计实验的高校学生,这份文档围绕“血型输血规则判断电路”展开,覆盖用两个逻辑变量编码供血者与受血者血型、建立允许输血真值表、选用八选一数据选择器并完成仿真验证的完整思路。包内仅有1个docx实验报告,压缩后约1.92MB,正文按实验目的、实验准备、实验内容、实验记录、问题记录与解决、实验总结组织,便于对照LogicState、LogicProbe与地线端口的使用方法。目前已有3227人学习,读者可据此梳理从输血关系表到逻辑表达式、再到数据选择器接线与真值表记录的推导过程,也能借鉴端口接0接1的判断和仿真排错经验,适合作为数字逻辑实验课的报告模板与复习参考。

1. 一张血型箭头图,最后变成了 8 个数据端上的 0、1 和 Q

医学书上那张 A、B、AB、O 的输血箭头图,有四个起点、若干条箭头,看起来像在讲关系推理。落到数字逻辑实验台上,它变成八个引脚:D0 接 Q 的反相,D1、D2、D3、D7 接 Q,D4、D5 接 1,D6 接 0。整个电路里没有一个比较器,也没有任何一段东西在“判断这两个血型能不能配”。

八选一数据选择器的本质是一个三位地址的查找表:地址是输血者的血型编码,表里存的是一位关于“受血者能不能收”的答案。看懂这八个数据端是怎么从九个合法组合里推出来的,比记住“这题用八选一”有用得多,因为同一套降维方法能套到任意四变量判定电路上,而“这题为什么偏偏是八选一”才是大多数人卡住的地方。

2. 血型编码:两位二进制怎么装下四种血型,顺序为什么不能随便排

四种血型要分成两组变量,第一反应是“四种状态至少两位”。这个直觉是对的:log2(4) = 2,两位二进制刚好给出 4 个码字,一个不多一个不少。实验提示里“用两个逻辑变量的四种取值表示输血者血型,用另外两个逻辑变量的四种取值表示受血者血型”,说的就是这件事,于是有了四个输入 M、N、P、Q,其中 M N 是供血者,P Q 是受血者。

真正容易出错的地方在于:这两位怎么排,不是自由的。它影响数据端的表达式长什么样,也影响你后面手工填表的出错概率。

2.1 24 种排法,3 组结构

把 A、B、AB、O 分给四个码字,排列数是 4! = 24。但其中很多排法只是“接线不同”:两个变量可以互换,每个变量还可以取反,这些在物理上无非是输入线对调或者加一级非门,函数的复杂度完全等价。按“两位可互换 + 每位可取反”这个等价关系归并(等价类大小为 8),24 种排法剩下 3 组结构不同的方案。

实验里采用的这一组是:

血型M N(或 P Q)说明
A0 0—
B0 1与 A 只差一位
AB1 1与 B 只差一位
O1 0与 AB、A 都只差一位

这个顺序 00 → 01 → 11 → 10 就是格雷码序,相邻血型只变一位。好处是两个层面的:一是手工填 16 行真值表时,从 A 换到 B 只需要改一列,抄错的概率低;二是后面画卡诺图时,相邻码字在图上物理相邻,能直接圈在一起。用自然序 00、01、10、11 也能做,但 A 和 AB 这类本该相邻的血型会被拆到对角线上去,化简时得多绕一步。

提示:编码顺序一旦定下来,就必须贯穿到接线、真值表、数据端推导三处。中途换编码是这类实验最常见的错误来源,详见第 5 章。

2.2 供血者和受血者的变量组不可交换

这是这个电路最容易被忽略的性质,也是它跟“两个数比大小”这类题的根本区别。

输血关系是不对称的:O 型血可以给 AB 型,AB 型血不能给 O 型;A 型可以给 AB,AB 不能给 A。把规则写成集合:

  • O 的受血者集合:{A, B, AB, O}
  • A 的受血者集合:{A, AB}
  • B 的受血者集合:{B, AB}
  • AB 的受血者集合:{AB}

所以判定函数 F(M, N, P, Q) 满足 F(M, N, P, Q) ≠ F(P, Q, M, N)。把供血者和受血者的四根线接反,你得到的不是一个明显报错的电路,而是另一个“看起来很像对”的函数。

具体差多少?合法的有序对一共 9 组,交换两边之后仍然合法的只有 4 组(A→A、B→B、AB→AB、O→O,也就是同型输血那四条对角线)。这意味着 16 行真值表里有 10 行的输出会被翻转。麻烦的地方在于:同型输血那 4 行永远是对的,你随手抽查几行、恰好抽到对角线,就会以为电路没问题。

我一般会这么理解这件事:这类不对称判定电路,验证样本必须从非对角线里挑。比如 AB→O(应该输出 0)和 O→AB(应该输出 1),这两行是最能暴露接反问题的。

2.3 端口位权:M 接地址高位还是低位

八选一器件的地址端通常标成 A2、A1、A0,位权分别是 4、2、1。最小项的编号方式默认就是 MNP 对应 (4, 2, 1) 的权重,所以 M 接 A2、N 接 A1、P 接 A0 是最省心的接法。

如果把顺序打乱,比如 M 接 A0、P 接 A2,电路并不会失效,它照样输出某个合法的四变量函数,只是不再是你推导的那个。这种错误的表现是:真值表整体错位,但输出里有 9 个 1、7 个 0,数量对得上,凭“看起来挺合理”根本发现不了。

一个成本极低的核对手段:只用 000 和 111 这两个端点地址。MNP = 000 时地址选中 D0,输出应该等于 Q 的反相;MNP = 111 时选中 D7,输出应该等于 Q。这两条先对上,地址线大概率没接错。

3. 从箭头图到最小项:九个合法组合是怎么被数出来的

箭头图是给人看的,最小项表达式是给器件看的,中间这一步翻译决定了后面所有推导的正确性。

3.1 把 16 行真值表填满

四个输入,16 种组合,逐行按规则判定。约定 M N 表示供血者、P Q 表示受血者,1 表示这次输血合法。

编号MNPQ供血者受血者F
m00000AA1
m10001AB0
m20010AO0
m30011AAB1
m40100BA0
m50101BB1
m60110BO0
m70111BAB1
m81000OA1
m91001OB1
m101010OO1
m111011OAB1
m121100ABA0
m131101ABB0
m141110ABO0
m151111ABAB1

九个 1,七个 0。手工填表时最值钱的一点是:输出为 1 的行必须能在箭头图上找到对应的那条箭头,找不到就是编码抄错了。比如 m9(O→B)有箭头,m13(AB→B)没有箭头,这两行编号只差 4,很容易看串。

3.2 用代码把真值表“钉死”

16 行手填,出错概率不低。用一段几十行的脚本把规则翻译成枚举,得到的最小项集合可以当作后面所有推导的基准:

# 血型编码:两位二进制表示四种血型,与实验接线保持一致 CODE = {"A": 0b00, "B": 0b01, "AB": 0b11, "O": 0b10} REV = {v: k for k, v in CODE.items()} # 允许的输血方向:键为供血者,值为可接受的受血者集合 RULE = { "O": {"A", "B", "AB", "O"}, # 万能供血者,四类都能收 "A": {"A", "AB"}, "B": {"B", "AB"}, "AB": {"AB"}, # 万能受血者,但只能给同类 } def f(m, n, p, q): """四输入判定函数:m,n 为供血者编码,p,q 为受血者编码,1 表示合法""" donor = REV[(m << 1) | n] # 高位 m 权重 2,低位 n 权重 1 rec = REV[(p << 1) | q] return 1 if rec in RULE[donor] else 0 ones = [i for i in range(16) if f((i >> 3) & 1, (i >> 2) & 1, (i >> 1) & 1, i & 1)] print("最小项集合:", ones) print("合法组合数:", len(ones)) print("真值表(按 m0..m15):", [f((i >> 3) & 1, (i >> 2) & 1, (i >> 1) & 1, i & 1) for i in range(16)])

跑出来的ones是[0, 3, 5, 7, 8, 9, 10, 11, 15],函数写成最小项之和就是 F = Σm(0, 3, 5, 7, 8, 9, 10, 11, 15)。

几个参数的约定值得记一下:i >> 3 & 1取的是变量 m,i >> 2 & 1取 n,依此类推,这正是“M 权重 4、N 权重 2、P 权重 1”这套编号规则的代码化表达。位权一旦和接线对不上,这段代码的结果就跟你手工填的表对不上,而这恰恰是发现接错的好机会。

3.3 不用 MUX 硬做,会付出多少门

如果完全走门级化简,这 9 个 1 在卡诺图上(行

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/2 21:56:32

FPGA数字系统设计大作业:PARWAN控制段VHDL状态机与后仿

简介&#xff1a;这份FPGA数字系统设计大作业文档面向高校软工院选课程学生及正在入门VHDL与有限状态机的读者&#xff0c;围绕PARWAN处理器架构展开&#xff0c;重点整理CONTROL-SECTION状态机的设计思路、实现流程与后仿结果&#xff0c;可用于课程作业参考、实验复盘和查漏补…

作者头像 李华
网站建设 2026/11/2 21:47:02

SD-WAN如何重构企业网络架构与提升业务敏捷性

1. 企业网络架构的现状与挑战我见过太多企业的网络架构还停留在十年前的设计。这些架构通常采用传统的MPLS专线连接分支机构&#xff0c;核心交换机堆叠在数据中心机房&#xff0c;防火墙规则表积累了上千条未经整理的策略。这种架构在云计算和移动办公普及的今天&#xff0c;已…

作者头像 李华
网站建设 2026/11/2 21:42:30

AI工具如何提升学术写作效率:从开题到定稿

1. 学术写作的痛点与AI工具的价值写论文最痛苦的阶段莫过于从开题到定稿这个漫长过程。我指导过上百篇学位论文&#xff0c;见过太多学生在文献综述里挣扎数月&#xff0c;在数据收集阶段反复返工&#xff0c;最后在deadline前熬夜改格式。直到三年前我开始系统性测试各类AI工具…

作者头像 李华
网站建设 2026/11/2 21:40:06

高光谱数据进PyTorch:dataloader设计与调优实战指南

简介&#xff1a;这份资源面向使用PyTorch做深度学习、需要处理高光谱图像的研究者与工程实践者&#xff0c;聚焦于用DataLoader高效加载与预处理高光谱数据这一关键环节。包内共7个文件&#xff0c;以3个Python脚本为核心&#xff0c;辅以2个编译缓存文件与2个mat格式数据文件…

作者头像 李华
网站建设 2026/11/2 21:26:27

刚装好 Home Assistant 却一脸懵?保姆级核心概念大白话拆解:管家、外交官与开关旋钮,带零基础小白 10 分钟搭出第一套自动化(附三端一键新手工具箱)

你是不是也经历过这样激动又绝望的时刻&#xff1f; 在看了无数极客博主炫酷的全屋智能视频后&#xff0c;你终于下定决心&#xff0c;淘来小主机或在 NAS 上折腾好了 Home Assistant&#xff08;简称 HA&#xff09;。当你输入端口号&#xff0c;兴奋地点击注册并进入系统的主…

作者头像 李华
网站建设 2026/11/2 21:23:52

法考历年真题及答案解析合集pdf版(2002-2025年)

⚖️ 今天给大家整理了2002—2025年法考历年真题及答案解析&#xff1a; &#x1f4dd; 历年真题一网打尽&#xff0c;吃透考点命题规律 ✅ 答案解析齐全&#xff0c;刷题复盘两不误 真题是最好的复习资料&#xff0c;法考上岸从刷真题开始&#xff01; ⭐ 建议先收藏保存&…

作者头像 李华