Featured image of post SCAU 数电实验:一位二进制全加减器的实现

SCAU 数电实验:一位二进制全加减器的实现

1 题目

设计实现一个加/减法器,该电路在M控制下进行加、减运算。当$M=0$时,实现全加器功能;当$M=1$时,实现全减器功能。

2 前言

网上看了一些现有的回答都是很玄学的,要么就默认你已经掌握了整个流程直接给出结果(不是我们如果知道了为什么还要看你的帖子,自己没有笔记吗可恶);还有一些全加和全减是分开的,没有用一个控制电路合起来。

老师上课其实讲过取补码的方法,但是实验器械过于简陋,==只给了非门、与非门和异或门==,每个两片,真的要按这种思路来做步子迈大了容易扯到淡。

本位和差的结果

$$ A_{i} \oplus B_{i} \oplus C_{i-1} $$

下面只讨论进位的那个部分,本位和与差可以看全加全减器_哔哩哔哩_bilibili,更加详细

3 解答

按照==(数字电路逻辑设计(第三版)学习指导书, 2018),p37==的指导

3.1 变量定义

先定义一下一些变量的含义

被减数$A_{i}$,减数$B_{i}$,来自低位的进位或者借位$C_{i-1}$,向高位的进位$C_{i}$,本位和或差$S_{i}$

3.2 真值表

这个算的有讲究的,比如减法你要先考虑来自低位的借位,借完之后再考虑本位有没有比减数来得大,要不要往前面借位

A B $C_{i-1}$ $M$ $C_{i}$
0 0 0 0 0
0 0 1 0 0
0 1 0 0 0
0 1 1 0 1
1 0 0 0 0
1 0 1 0 1
1 1 0 0 1
1 1 1 0 1
0 0 0 1 0
0 0 1 1 1
0 1 0 1 1
0 1 1 1 1
1 0 0 1 0
1 0 1 1 0
1 1 0 1 0
1 1 1 1 1

4 绘制卡诺图

这里0比较少,而且我们最后要用到与或门,直接圈0比较方便

$C_{i-1},M$\ $A_i,B_{i}$ 00 01 11 10
00 0 0 0
01 0 0 0
11 0
10 0

简单读取一下

$$ \begin{align} \overline{C_{i}} & = \overline{B_{i}}\,\overline{C_{i-1}} + \overline{A_{i}}\,\overline{C_{i-1}}\,\overline{M} + A\,\overline{C_{i-1}}\,M+A_{i}\,\overline{B_{i}}\,M+\overline{A_{i}}\,\overline{B_{i}}\,\overline{M} \\ & = \overline{B_{i}}\,\overline{C_{i-1}}+\overline{C_{i-1}}\,\left(A_{i}\,M+\overline{A_{i}}\,\overline{M}\right)+\overline{B_{i}}\,\left(A_{i}\,M+\overline{A_{i}}\,\overline{M}\right) \\ & =\overline{B_{i}}\,\overline{C_{i-1}}+\left(\overline{B_{i}}\,+\overline{C_{i-1}}\right)\left(A_{i}\,M+\overline{A_{i}}\,\overline{M}\right) \\ & =\overline{B_{i}}\,\overline{C_{i-1}} + \overline{B_{i}\,C_{i-1}}\left(A_{i}\,\odot\,M\right) \\ & =\overline{\left(\overline{\overline{B_{i}}\,\overline{C_{i-1}}}\right)} + \overline{B_{i}\,C_{i-1}}\,\overline{\left(A_{i}\,\oplus\,M\right)} \end{align} $$

这样就做完啦哈哈哈,可以用异或门和与非门还有非门来实现了

还有个建议就是 本位和差S单独用一个异或芯片 ,高位进位借位单独用一个,不然连错了拆起来不方便。。

5 参考资料

  1. 数字电路逻辑设计(第三版)学习指导书. (2018). http://books.google.co.jp/books?id=OlOgzgEACAAJ&dq=isbn:9787040506242&hl=&source=gbs_api
  2. 全加全减器_哔哩哔哩_bilibili
使用 Hugo 构建
主题 StackTrial 设计