组合功能模块

  • 基本逻辑函数
    • 1 位函数
      • 当只有 11 位变量 XX 时,函数 FF 只有 44 种情况:0,1,X,X0, 1, X, \overline X
      • F=0F = 0FF 接地表示,F=1F = 1FFVCCV_{\mathrm{CC}}VDDV_{\mathrm{DD}} 表示。
      • F=XF = \overline X 时,在 XXFF 之间接非门。
    • 多位函数
      • 输入变量 XXnn 个位时,可以表示用向量 X(n1:0)X(n - 1:0) 表示,特定分量用 Xi,X(i),X(i:j)X_i, X(i), X(i:j) 表示。
  • 使能
    • 使能控制输入信号传递到输出端是否被屏蔽,被屏蔽时输出保持为一个非使能值。
    • 使用与门实现使能:F=XENF = X \cdot \mathrm{EN}EN=1\mathrm{EN} = 1F=XF = X,否则 F=0F = 0
    • 使用或门实现使能:F=X+ENF = X + \overline{\mathrm{EN}}EN=1\mathrm{EN} = 1F=XF = X,否则 F=1F = 1
  • 译码器
    • 定义
      • 译码器将一种 nn 位二进制编码转换为一种 m (m2n)m\ (m \le 2^n) 位的输出码,输出码最多只有一位为 11
      • 输入为 nn 位、输出为 mm 位的译码器称为 nn-mm 译码器。
      • 译码器可以带有使能功能,当 EN=1\mathrm{EN} = 1 时有译码结果,否则没有。
    • 简单译码器
      • 1-2 译码器有 11 位输入 A0A_0,有 22 位输出 D0,D1D_0, D_1
        • D0=A0D_0 = A_0D1=A0D_1 = \overline{A_0}
      • 2-4 译码器有 22 位输入 A1,A0A_1, A_0,有 44 位输出 D0,D1,D2,D3D_0, D_1, D_2, D_3
        • D0=A1 A0D_0 = \overline{A_1}\ \overline{A_0}D1=A1A0D_1 = \overline{A_1} A_0D2=A1A0D_2 = A_1 \overline{A_0}D3=A1A0D_3 = A_1 A_0
    • 分级组合译码器
      • 一个 nn-2n2^n 的译码器可以由 n1n_1-2n12^{n_1} 译码器和 n2n_2-2n22^{n_2} 译码器组成,n1+n2=nn_1 + n_2 = n
        • nn 位二进制输入 A(n1:0)A(n - 1:0) 拆分为 n1n_1 位的高位部分 A(n1:n2)A(n - 1:n_2)A(n21:0)A(n_2 - 1:0) 位的低位部分,分别接入两个译码器。
        • 最终每个输出 DiD_i 为两个译码器对应部分的输出 Dh,i/2n2D_{h,i / 2^{n_2}}Dl,imod2n2D_{l, i \bmod 2^{n_2}} 接与门。
        • 不考虑两个译码器内的逻辑门,最终需要 2n2^n 个与门。
      • 一个 nn-2n2^n 的译码器使用一个 n2\left\lfloor \dfrac{n}{2} \right\rfloor 输入的译码器和一个 n2\left\lceil \dfrac{n}{2} \right\rceil 输入的译码器,门输入成本最低。
      • Layered Decoder
    • 译码器和布尔函数
      • nn 变量布尔函数 FF2n2^n 个最小项,分别对应 nn-2n2^n 译码器的各个输出。
      • FF 取值为 11 的最小项对应的译码器输出用或门连接,则或门输出为 FF
  • 编码器
    • 定义
      • 编码器是译码器的逆过程。
      • mm 个输入、nn 个输出的编码器记作 mm-nn 编码器。输入记作 DiD_i,输出记作 AiA_i
    • 普通编码器
      • 普通的 mm-nn 编码器假设 mm 个输入中任何时刻都有且仅有一个位为 11
      • 输出使用或门连接输入,若某输入为 11 时当前输出应为 11,则或门要连接这个输入。
      • 如果普通编码器有多个输入为 11,则最终输出结果是每个 11 输入单独出现时的结果取或。
    • 优先编码器
      • 优先编码器定义了输入的优先级(一般是高位优先级高),多个输入为 11 时编码高优先级输入。
      • 优先编码器除了编码输出,还有 VV 输出,表示是否有值输入,用所有输入的或实现。
      • 高位优先级高时,真值表可以改为紧凑真值表。
        • m+1m + 1 行,全 00 输入时,V=0V = 0
        • Di=1D_i = 1 时,V=1V = 1Dj (j>i)=0D_j\ (j > i) = 0Dj (j<i)=XD_j\ (j < i) = \mathrm{X},表示取值任意。
      • Compact Truth Table
  • 多路复用器
    • 定义
      • 2n2^n-11 多路复用器从 2n2^n 个输入中选择一个,用 nn 个选择输入控制。
        • 11 表示复用一条线路输出。
      • 2n2^n-11 多路复用器的实现:
        • 由一个 nn-2n2^n 译码器、2n2^n 个与门、一个 2n2^n 输入或门组成。
        • 译码器输入接控制输入 AiA_i
        • ii 个与门接译码器输出 DiD_i 和输入 IiI_i
        • 2n2^n 输入或门的输入接所有与门,输出为 YY
      • Mux
    • 多重多路复用器
      • mm2n2^n-11 多路复用器从 2n2^nmm 位输入中选择一个。
      • mm2n2^n-11 多路复用器的实现:
        • 由一个 nn-2n2^n 译码器、m2nm \cdot 2^n 个与门、mm2n2^n 输入或门组成。
        • jj2n2^n 输入或门接 2n2^n 个与门,这些与门中,第 ii 个输入接 IijI_{ij}DiD_i
        • jj2n2^n 输入或门输出为 YjY_j
    • 多路复用器与布尔函数
      • 给定一个 nn 变量布尔函数 FF,用 2n2^n-11 多路复用器的实现方法:
        • 每个最小项 mim_i 对应多路复用器输入 IiI_i
        • F(mi)=1F(m_i) = 1,则 IiI_i 连接 11,否则连接 00
      • 2n12^{n - 1}-11 多路复用器的实现方法:
        • 仅考虑前 n1n - 1 个变量组成的最小项 mim_i',对应多路复用器输入 IiI_i
        • 对于 IiI_i,前 n1n - 1 个变量取值已经固定,FF 退化为最后一个变量的函数。
        • IiI_i 根据真值表中 2mi2 m'_i2mi+12 m'_i + 1 最小项的取值,接 0,1,X,X0, 1, X, \overline X
      • 如果用 2nk2^{n - k}-11 多路复用器的实现,则 IiI_i 可能接的布尔函数有 22k2^{2^k} 种。
  • 加法器
    • 半加器
      • 半加器输入两个加数 X,YX,Y,输出和 SS 和进位 CC
      • S=XYS = X \oplus YC=XYC = XY
    • 全加器
      • 全加器输入两个加数 X,YX,Y 和低位进位 ZZ,输出和 SS 和进位 CC
      • S=(XY)Z=X YZ+XYZ+XY Z+XYZS = (X \oplus Y) \oplus Z = \overline X\ \overline Y Z + \overline X Y \overline Z + X \overline Y\ \overline Z + X Y Z
      • C=XY+(XY)Z=XY+XZ+YZC = X Y + (X \oplus Y) Z = X Y + X Z + Y Z
      • Full Adder
    • 行波加法器
      • nn 位行波加法器由 nn 个全加器组合而成,输入为两个加数 A(n1:0),B(n1:0)A(n - 1:0), B(n - 1:0),最低位进位 C0C_0,输出和 S(n1:0)S(n - 1:0)
      • 定义第 i (i=0,1,2,)i\ (i = 0, 1,2,\dots) 个全加器的中间进位为 CiC_i
      • i+1i + 1 个加法器的低位进位输入接 CiC_i
      • Adder
  • 减法器
    • 补码
      • nn 位二进制无符号整数 xx 的补码是 2nx2^n - x,为模 2n2^n 加法逆元
      • xx 的补码的二进制计算方法:对 xx 按位取反再加 11
      • nn 位二进制有符号整数 xx 的补码表示法:
        • 最高位为符号位,00 表示正数或 0011 表示负数,剩下的为数值位。
        • x0x \ge 0,则数值位为 xx 的二进制表示。
        • x<0x < 0,则数值位为 x|x|2n12^{n - 1} 补码的二进制表示。
      • 有符号整数 xx 的补码表示(按照无符号整数)的补码是 x-x 的补码表示。
    • 实现
      • nn 位减法器输入位被减数 A(n1:0)A(n - 1:0) 和 减数 B(n1:0)B(n - 1:0),输出差 S(n1:0)S(n - 1:0)
      • nn 位减法器使用一个 nn 位加法器,将 AABB 的反接入加法器,同时加法器 C0C_011
      • 可以将加法器与加法器结合,在 BB 输入处接异或门控制是否取反,加法器 C0C_00011
      • Combined Adder
  • 递增器
    • 使用加法器实现:
      • B0=1,Bi=0 (i>0),C0=0B_0 = 1, B_i = 0\ (i > 0), C_0 = 0
      • Bi=0,C0=1B_i = 0, C_0 = 1
  • 递减器
    • 使用加法器实现:令 Bi=1,C0=0B_i = 1, C_0 = 0
  • 常数乘法器
    • nn 位常数乘法器中设 A(n1:0)A(n - 1:0) 为常数,B(n1:0)B(n - 1:0) 为输入。
    • A=2kA = 2^k 时,结果为 BB 左移 kk 位。
      • 实现只需要令 Si=Bik (ki<n+k)S_i = B_{i - k}\ (k \le i < n + k),其他位为 00
    • 对于任意的 AA,结果为所有 i=0n1Ai(2iB)\displaystyle\sum_{i = 0}^{n - 1} A_i (2^i \cdot B)
      • 实现时使用加法器累加每一个项,若 Ai=0A_i = 0 则跳过,否则将 BB 左移 ii 位再累加。
  • 常数除法器
    • nn 位常数除法器中设 A(n1:0)A(n - 1:0) 为输入,B(n1:0)B(n - 1:0) 为输出。
    • 此处仅考虑 B=2kB = 2^k,结果为 AA 右移 kk 位。