HDLBits 练习 Always if2 并给出逻辑简化过程

题目 Always if2

在前面的练习中我们使用了简单的逻辑门与一些逻辑门的组合。这些电路都可以作为组合电路的例子。
组合意味着这个电路的输出只是输入的函数(数学意义上的)。数学上的函数就意味着当你给定一个输入的时候
对应的只会有一个输出。因此有一种方式可以清晰的列出所有组合逻辑的所有可能的输入和与之对应的输出。
这中方式就是真值表。

对于有N个输入的布尔函数,有2N种可能的输入组合。真值表的每一行代表一种输入的组合,所以真值表一般都
有 2^N 列。输出的那一列表示每一种可能的输入。

在这里插入图片描述

上面的真值表三个输入对应一个输出。一共有8行代表了输入的8种可能的组合,输出只有一列。
真值表中有四种组合对应的输出是1,其他4种对应的输出是0。

从真值表组合电路

假定我们要设置一个上述的电路,但是我们被限制使用标准的逻辑门。
那如何(从真值表)构建任意verilog逻辑函数?

一种简单的方法是用 sum-of-products 来表示真值表。
sum-of-products(其中sum代表 OR 门, products代表 AND逻辑门电路)的意思对于真值表中输出为 1 的行
使用一个 N个输入的 AND 门电路来表示,然后使用 OR 将他们连接起来。

对于上面的例子,输出 1 的行分别为, 第二行 | 第三行 | 第五行 | 第七行(这四行使用 OR 门电路进行组合)。
对于第二行来说, ~x3 | x2 | ~x1 (这是一个三个输入的 AND 门电路)。因此这个真值表可以使用 4 个被 OR 组合的
AND 门电路来实现。

练习一下

创建一个组合电路完成上面的真值表。
在这里插入图片描述

答案之一

其实按照题目中的描述,这个组合电路的写法已经十分的清晰了。


module top_module( 
    input x3,
    input x2,
    input x1,  // three inputs
    output f   // one output
);
    
    assign f = (~x1 & x2 & x3) | (x1 & x2 & ~x3) | (x1 & ~x2 & x3) | (x1 & x2 & x3);

endmodule

答案二及其简化过程


module top_module( 
    input x3,
    input x2,
    input x1,  // three inputs
    output f   // one output
);
    
    assign f = x1&x3 | x2&~x3;

endmodule

看到上面那么长的式子我就觉得一定能化简,但是作为一个早已将数电还给老师的人,看到竟能简化到如此地步必须学起来。

这里的图我使用了知乎作者 koch 的图,大家可以点击 Link 去看一下,对于这简化这部分总结的很好,并给出了公式的推导过程。
在这里插入图片描述

为了方便观察化简约定: x1 = A, x2 = B, x3 = C, ~A = A’

重写真值表的逻辑表达式:

A'BC + ABC' + AB'C + ABC

= AB(C + C') + A'BC' + AB'C   // 分配律提取 AB
	
= AB + AB'C + A'BC'			  // 然后使用互补律消去 C+C'

= B(A + A'C') + AB'C          // 分配律提取 B

= B(A + C') + AB'C			  // 吸收率 A + A'C' = A + C'

= AB + BC' + AB'C			  // 分配律

= A(B + B'C) + BC'            // 分配律提取 A

= A(B + C) + BC'			  // 吸收率 B + B'C = B + C

= AB + AC + BC'               // 分配律

= AC + BC'					  // 吸收率 AB + AC + BC' = AC + BC'

对于最后一项使用吸收率 AB + AC + BC’ = AC + BC’ 。需要仔细观察并与上图中
吸收率 公式2 中的最后一项对比,就会发现除了符号不是对应的之外和这个公式一毛一样。

题外话

本来想找个 verilog 的吉祥物作为文章封面,搜索之后发现貌似 verilog 没有吉祥物,如果大家知道还请留言告诉我一下,让我长长见识。
如果内容有用还请大家点赞收藏~ 谢谢。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值