V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
brader
V2EX  ›  程序员

请教下怎么用卡诺图化简逻辑函数

  •  
  •   brader · 2023-03-29 10:02:15 +08:00 · 1197 次点击
    这是一个创建于 365 天前的主题,其中的信息可能已经有所发展或是发生改变。


    卡诺图我会画,就是一直搞不懂,最后一步到底是怎么通过卡诺图得到的 F=AB+BC ,是直接通过图可以观察得到?还是它中间省略了很多化简步骤?所以我一直搞不明白
    10 条回复    2023-03-29 12:46:09 +08:00
    RecursiveG
        1
    RecursiveG  
       2023-03-29 10:21:26 +08:00
    基本就是观察,用最少的矩形覆盖并仅覆盖所有 1 。这个矩形是可以跨边界的(类似吃豆人)。
    你可以画个 `BD+!B!D` 的卡诺图感受一下。
    brader
        2
    brader  
    OP
       2023-03-29 10:32:42 +08:00
    @RecursiveG 我知道圈的 1 要尽量大,但是我不明白的是,这个图得到的为什么是 F=AB+BC ,而不是 F=AB+CD 、F=AC+CD 之类的
    jmc891205
        3
    jmc891205  
       2023-03-29 10:33:26 +08:00
    用卡诺图化简逻辑函数的步骤[1]:
    - 如果表达式为最小项表达式,则可直接填入卡诺图
    - 如表达式不是最小项表达式,但是“与—或表达式”,可将其先化成最小项表达式,再填入卡诺图。也可直接填入。
    - 合并相邻的最小项,即根据下述原则画圈
    - 尽量画大圈,但每个圈内只能含有 2 n 2^{n}( n=0,1,2,3……)个相邻项。要特别注意对边相邻性和四角相邻性。
    圈的个数尽量少。
    - 卡诺图中所有取值为 1 的方格均要被圈过,即不能漏下取值为 1 的最小项。
    - 在新画的包围圈中至少要含有 1 个未被圈过的 1 方格,否则该包围圈是多余的。
    - 写出化简后的表达式。每一个圈写一个最简与项,规则是,取值为 l 的变量用原变量表示,取值为 0 的变量用反变量表示,将这些变量相与。然后将所有与项进行逻辑加,即得最简与—或表达式。

    在进行化简时,如果用图中真值为 0 的项更方便,可以用他们来处理,方法和真值取 1 时一样,只是结果要再做一次求反。

    [1]: https://zh.wikipedia.org/wiki/%E5%8D%A1%E8%AF%BA%E5%9B%BE#%E7%94%A8%E5%8D%A1%E8%AF%BA%E5%9B%BE%E5%8C%96%E7%AE%80%E9%80%BB%E8%BE%91%E5%87%BD%E6%95%B0%E7%9A%84%E6%AD%A5%E9%AA%A4
    1647846714
        4
    1647846714  
       2023-03-29 10:39:32 +08:00
    @brader 找 1 ? 横这的那个,AB 对应 11 ,CD 全都取到了所以是 AB ;圈的那个,AB 对应 01 和 11,B 是 1 ,CD 对应的是 11 和 10 ,C 是 1 ,所以是 BC
    oldshensheep
        5
    oldshensheep  
       2023-03-29 10:45:13 +08:00 via Android
    都快忘了,看了维基百科,现学现卖。
    横着的框,当且仅当 K=AB 时 K=1
    1100, 1101, 1111, 1110 = 1
    K=ABCD

    方框,当且仅当 K=BC 时 K=1
    0111, 0110, 1111, 1110 = 1
    K=ABCD

    合起来就是 F=AB+BC

    其实就是找圈圈中恒为 1 的字母
    llr8031
        6
    llr8031  
       2023-03-29 11:06:42 +08:00
    @brader 1*4 的矩形里,当 AB=1 时,不论 C 和 D 取什么,结果都为 1 ,也就是和 CD 没关系,故得 AB 。
    同理,2*2 得矩形里,当 BC=1 时,A 和 D 的取值不论为什么,结果都为 1 ,也就是和 CD 没关系,故得 BC
    简单的说,找矩形框里恒为 1 的信号,每个矩形框找一组把他们与起来,最后把所有的结果或
    llr8031
        7
    llr8031  
       2023-03-29 11:08:44 +08:00
    @llr8031 勘误一下,AB=1 ,CD=1 中插入一个逗号
    brader
        8
    brader  
    OP
       2023-03-29 11:15:53 +08:00
    @jmc891205
    @1647846714
    @oldshensheep
    感谢各位,听君一言如醍醐灌顶,我总结了各位给的答案,按自己的理解去套用了几个题目,都能得到正确答案,那应该没错了,我说一下我总结的东西,不对的地方欢迎指正:
    每一个圈中,恒为 1 或 0 ( 0 的用反变量表示)的变量留下来相与,然后将不同的圈进行逻辑加。
    例 1:如我的提问,横圈( AB 在 4 个格子都是 1 ,留下来相与)+方圈( BC 在 4 个格子都是 1 ,留下来相与),最后得到 AB+BC
    例 2:

    下面的圈( AB 在 2 个格子都是 1 ,留下来相与)+上面的圈( A 在 2 个格子都是 0 ,取!A ,C 在 2 个格子都是 1 ,留下来相与),最后得到 AB+!AC
    brader
        9
    brader  
    OP
       2023-03-29 11:19:00 +08:00
    @llr8031 帮忙看看我上面总结的对不对,按您说这个,应该还少一个恒为 0 的,也得找出来才是,对吧
    llr8031
        10
    llr8031  
       2023-03-29 12:46:09 +08:00
    @brader 是的,恒为 0 的也要找出来,归纳的没有问题
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3330 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 11:23 · PVG 19:23 · LAX 04:23 · JFK 07:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.