跳转至

3算术功能模块

三、算术功能模块

迭代组合电路

  • 设计一个电路来处理32位二进制加法

➢ 输入数量 =?

➢ 真值表行数 =?

➢ 布尔方程的输入变量个数 ?

➢ 布尔方程包含非常多项

  • 实际中不可行
  • 那怎么办?

  • 基本思想:利用规律性来简化设计

  • 类似的算术功能有以下规律:

➢ 对二进制向量进行操作

➢ 对每一位进行==同样==的子函数操作

  • 设计子函数功能模块,==重复使用==得到总体功能

  • ==单元==

➢ 子函数模块

  • ==迭代阵列==

➢ 相互连接的单元的阵列

image-20230608215259353

二进制加法器

  • 半加器:2输入按位加功能模块

  • 输入:X,Y

  • 输出:和位S,进位C

真值表 表达式 实现电路 卡诺图
image-20230608215519905 image-20230608215615721 image-20230608215640244 image-20230608215834268
  • 全加器:3输入按位加功能模块

  • 输入:X,Y,进位Z

  • 输出:和位S,进位C

  • S 是三位异或函数(奇函数) \(S = X \oplus Y \oplus Z\)

  • C是 \(XY + (X \oplus Y) Z\)

    • \(XY\) 是==进位生成==

    • \(X \oplus Y\) 是==进位传播==

真值表 卡诺图及表达式 实现电路
image-20230608215927802 image-20230608220048624 image-20230608220114067
  • 全加器概要图

image-20230608220947014

  • 上面的X,Y,Z是这里的A, B, C

  • 同时

➢ G = 进位生成

➢ P = 进位传播

  • 组成

➢ 两个半加器

➢ 一个或门

  • ==行波进位加法器==:二进制加法==迭代阵列==

  • 4位行波进位加法器

➢ 迭代阵列 ➢ 单元 ➢ 1位全加法器

image-20230608221134375

二进制减法器

  • 二进制==补码==

➢ B的补码为\(2^n-B\)

  • 二进制==反码==

➢ B的反码为\(2^n-1-B\)

➢ 按位取反

  • 二进制==补码==

➢ 按位取反加1

  • 减法可以按照==补码的加法==执行

  • \(A-B\)即是

  • \(A\ge B\)

    • \(2^n+A-B\)
    • \(A-B\)真正的值
  • \(A<B\)

    • \(2^n-(B-A)\)
    • 得到\(B-A\)的补码
  • ==无符号数==加减运算规则

  • 采用==符号-补码表示==有符号数运算规则

  • 两者一致

  • 电路如图所示,计算A+B和A-B

➢ S=1,减法

➢ S=0,加法

image-20230608222539825

image-20230608223042546

ACDE

  • 溢出

image-20230608223840088

➢ 进位\(C_n\)

\(V = C_n \oplus C_{n-1}\)

  • 无符号数 unsigned

  • 加法

    • \(C_n\)为1发生溢出

    • \(C_n\)为0无溢出

  • 减法

    • \(C_n\)为1:结果为正,无需校正

    • \(C_n\)为0:结果为负数补码,需要校正

  • 有符号数signed(符号-补码)

  • V=0,无溢出

  • V=1,有溢出,表明运算结果有n+1位,溢出位为符号位

其他算术模块

  • 压缩

  • 针对特定应用将已有电路化简成一个==简单电路==

  • ==简化电路设计==, 代替直接设计电路

  • 通过将输入端的值==固定、传递和取反==

  • 将==未使用的输出端置==为X

    • 该输出门和仅驱动该输出门的门==可移去==
  • 递增器(将上面的全加器改成三位,并将一些输入值固定)

\(C_0=0\)

\(B_0=1~B_1=0~B_2=0\)

\(C_3=X\)

image-20230608225346774

image-20230609212040310

若利用加法器实现的话

C0 = 0

B[3:0] = \(0001 \oplus 1 + 1\) = \(1111\)

或减法器

C0 = 1

B[3:0] = \(0001 \oplus 1\) = \(1110\)

总而言之就是B0和C0有且仅有一位为0即可,其它全为1

其实可以看到,一个二进制数和1异或就是反码,和0异或就是本身;

image-20230609213128007

S=1

B[3:0] = 0001

  • 递减器
实现方法一 实现方法二
image-20230608225744936 image-20230608225756220
  • 常数乘法与除法
乘以100(左移2位) 除以100(右移2位)
image-20230609214007062 image-20230609214027777
乘以 101 个人理解
image-20230609214102231 image-20230609214211367
  • 零扩充和符号扩展
  • ==零填充==:用于==增加==操作数的==位数==
  • 11110101填充成16位

➢ 左填充:==00000000==11110101

➢ 右填充:11110101==00000000==

  • ==符号扩展==:增加符号-补码表示符号数位数

  • 01110101 符号扩展到16位

  • 0000000001110101

  • 11110101 符号扩展到16位

  • 1111111111110101
  • 还是原来的数(补码意义上)

  • 11110101 零填充到16位

  • 0000000011110101
  • 但不再是原来的数

就相当于这样理解符号扩展可以理解成最高位(符号位)是啥,就往左填充啥(一直填充够位数)