跳到主要内容

東京工業大学 工学院 情報通信系 2018年8月実施 S4 二進・BCD加減算器

Author

祭音Myyura (co-authored with GPT 5.6 SOL)

Description

S4. 否定を x\overline x,論理積を xyx\cdot y,論理和を xyx\vee y と表す。NN ビット整数変数を X=xN1x1x0X=x_{N-1}\cdots x_1x_0 とし,整数定数の10進・2進表記を ()10(\cdots)_{10}()2(\cdots)_2 とする。論理式は最小数の AND 項からなる NOT–AND–OR 形式(積項の和形式)で答えよ。

  1. 二つの NN ビット入力 A=aN1a0A=a_{N-1}\cdots a_0B=bN1b0B=b_{N-1}\cdots b_0 の和 A+BA+B を出力する加算器は,図 S4.1 のように NN 個の全加算器(FA)を桁上げで接続して構成され,cin=c0=0c_{\rm in}=c_0=0 である。第 kk 桁(k=0,,N1k=0,\ldots,N-1)の全加算器の真理値表 S4.1 を用い,sk,ck+1s_k,c_{k+1}ak,bk,cka_k,b_k,c_k の論理式で表せ。

    aka_kbkb_kckc_kck+1c_{k+1}sks_k
    00000
    00101
    01001
    01110
    10001
    10110
    11010
    11111

    各 FA は ak,bk,cka_k,b_k,c_k を入力し,sk,ck+1s_k,c_{k+1} を出力する。最終キャリーは cout=cNc_{\rm out}=c_N,和の下位 NN ビットは sN1s0s_{N-1}\cdots s_0 である。

  2. 図 S4.2 の減算器は,BB の各ビットを反転して B=bN1b0=bN1b0B'=b'_{N-1}\cdots b'_0=\overline b_{N-1}\cdots\overline b_0 とし,加算器に A,B,cin=1A,B',c_{\rm in}=1 を入力する。A,B,BA,B,B' は符号なし非負整数である。次の(ア)~(ウ)を埋めよ。

    NN ビット加算器の N+1N+1 ビット出力は S=cNsN1s0=A+B+cinS'=c_Ns_{N-1}\cdots s_0=A+B'+c_{\rm in} である。BB'BB の(ア)の補数であり,

    B+B=1.B'+B=\boxed{\text{イ}}-1.

    cin=1c_{\rm in}=1 より

    S=A+B+1=AB+.S'=A+B'+1=A-B+\boxed{\text{イ}}.

    さらに

    d={0(AB),1(A<B)d=\begin{cases}0&(A\ge B),\\1&(A<B)\end{cases}

    とすると,cout=cNc_{\rm out}=c_N との関係は d=d=\boxed{\text{ウ}} となる。

  3. 図 S4.3 は4ビットで1桁の10進数を表す BCD(Binary-Coded Decimal)用加算器である。BCD 入力 A=a3a2a1a0A=a_3a_2a_1a_0B=b3b2b1b0B=b_3b_2b_1b_0(0000)2(0000)_2(1001)2(1001)_2,すなわち0~9を取る。cinc_{\rm in} は下位桁からの BCD 桁上げである。二進加算器の5ビット出力

    S=c4s3s2s1s0=A+B+cinS'=c_4s_3s_2s_1s_0=A+B+c_{\rm in}

    は0~19であり,S10S'\ge10 のとき BCD 桁上げ cout=1c_{\rm out}=1 とする。BCD 加算補正器により下位4ビットを BCD 出力 T=t3t2t1t0T=t_3t_2t_1t_0(0~9)へ補正する。

    a) cout=f1(c4,s3,s2,s1,s0)c_{\rm out}=f_1(c_4,s_3,s_2,s_1,s_0) の論理式を示せ。
    b) cout=1c_{\rm out}=1 のとき補正器が s3s2s1s0s_3s_2s_1s_0 に加える4ビット定数 MM を2進数で示せ。

  4. 図 S4.4 の BCD 減算器では,BB をビット反転して二進加算器に入力する。cinc_{\rm in} には下位桁からの BCD 減算キャリーを入力し,cin=0c_{\rm in}=0cin=1\overline c_{\rm in}=1)は下位桁でボローが発生したことを表す。

    D=ABcin,10D9.D'=A-B-\overline c_{\rm in},\qquad -10\le D'\le9.

    D<0D'<0 のときボローが生じ,cout=c4=0c_{\rm out}=c_4=0 となる。そのとき BCD 減算補正器は下位4ビットに (10)10=(1010)2(10)_{10}=(1010)_2 を加えて BCD 出力 t3t2t1t0t_3t_2t_1t_0 を得る。

    図 S4.5 の共通加減算器には制御信号 gg があり,g=0g=0 で BCD 加算 A+BA+Bg=1g=1 で BCD 減算 ABA-B を行う。入力補正器は B,gB,g から BB'' を作り,二進加算器は A,B,cinA,B'',c_{\rm in} を加える。出力キャリーは cout=f2(g,c4,s3,s2,s1,s0)c_{\rm out}=f_2(g,c_4,s_3,s_2,s_1,s_0) とし,共通補正器は g,coutg,c_{\rm out} に応じて下位4ビットを補正する。

    a) 入力補正器の各出力 bkb''_kk=0,1,2,3k=0,1,2,3)を g,bkg,b_k で表せ。
    b) cout=f2(g,c4,s3,s2,s1,s0)c_{\rm out}=f_2(g,c_4,s_3,s_2,s_1,s_0) の論理式を示せ。
    c) 共通補正器が s3s2s1s0s_3s_2s_1s_0 に加える4ビット変数 h3h2h1h0h_3h_2h_1h_0 の各ビットを,g,coutg,c_{\rm out} の論理式で表せ。

题目描述

以下用上方完整真值表及电路连接定义作答。x\overline x、相乘、\vee 分别表示非、与、或;NN 位整数为 X=xN1x0X=x_{N-1}\cdots x_0,常数用下标10、2区分十进制和二进制。所有逻辑式要求 AND 项数最少的积之和形式。

  1. NN 位加法器由 NN 个全加器串接,输入为 A,BA,B,初始进位 cin=c0=0c_{\rm in}=c_0=0。由表 S4.1,用 ak,bk,cka_k,b_k,c_k 表示第 kk 位的和 sks_k、进位 ck+1c_{k+1};最终进位为 cNc_N
  2. 对无符号非负整数 A,BA,B,逐位取反 BBBB',用 A+B+1A+B'+1 实现减法。填写(ア)至(ウ):BB'BB 的哪一种补数;B+B=B+B'=(イ)1-1A+B+1=AB+A+B'+1=A-B+(イ);定义 ABA\ge Bd=0d=0,否则 d=1d=1,用加法器进位 coutc_{\rm out} 表示 d=d=(ウ)。
  3. 一位 BCD 输入 A,BA,B 都在0~9之间,cinc_{\rm in} 为低位十进制进位。二进制和 S=c4s3s2s1s0=A+B+cinS'=c_4s_3s_2s_1s_0=A+B+c_{\rm in} 在0~19之间,十进制进位在 S10S'\ge10 时为1。
    a) 写出 cout=f1(c4,s3,s2,s1,s0)c_{\rm out}=f_1(c_4,s_3,s_2,s_1,s_0)
    b) 在 cout=1c_{\rm out}=1 时,下四位需加哪个4位二进制常数 MM,才能使输出 TT 成为0~9的 BCD 数?
  4. BCD 减法中,BB 取反后送入加法器;cin=0c_{\rm in}=0 表示低位发生借位,因此实际差为 D=ABcinD'=A-B-\overline c_{\rm in},范围为 10-10~9。负差对应 cout=c4=0c_{\rm out}=c_4=0;此时给下四位加 (1010)2(1010)_2 作 BCD 校正。共用电路的控制信号为 ggg=0g=0 加法、g=1g=1 减法。
    a) 用 g,bkg,b_k 写出输入校正器的各位 bkb''_k
    b) 写出统一进位函数 f2(g,c4,s3,s2,s1,s0)f_2(g,c_4,s_3,s_2,s_1,s_0)
    c) 用 g,coutg,c_{\rm out} 分别写出要加到下四位的校正量 h3h2h1h0h_3h_2h_1h_0

Kai

1)

和は奇数個の入力が1のときに1,桁上げは2個以上が1のときに1となる。

sk=aˉkbˉkckaˉkbkcˉkakbˉkcˉkakbkck,\boxed{s_k=\bar a_k\bar b_kc_k\vee\bar a_kb_k\bar c_k\vee a_k\bar b_k\bar c_k\vee a_kb_kc_k},
ck+1=akbkbkckckak.\boxed{c_{k+1}=a_kb_k\vee b_kc_k\vee c_ka_k}.

2)

B=2N1BB'=2^N-1-B なので

()=1,()=2N,()=cˉout.\boxed{(\text{ア})=1,\quad(\text{イ})=2^N,\quad(\text{ウ})=\bar c_{\rm out}}.

ABA\ge B のときだけ AB+2N2NA-B+2^N\ge2^N となり,キャリーが1となる。

3)

S[0,19]S'\in[0,19] より

cout=c4s3s2s3s1.\boxed{c_{\rm out}=c_4\vee s_3s_2\vee s_3s_1}.

十進の基数10と二進4ビットの基数16の差を補うので,加える定数は (0110)2\boxed{(0110)_2}

4)a)

g=0g=0 でそのまま,g=1g=1 で反転するため

bk=gˉbkgbˉk.\boxed{b''_k=\bar g b_k\vee g\bar b_k}.

4)b)

加算時の式と減算時の c4c_4 を選択すると

cout=c4gˉs3s2gˉs3s1.\boxed{c_{\rm out}=c_4\vee\bar g s_3s_2\vee\bar g s_3s_1}.

4)c)

c=coutc=c_{\rm out} と略記する。必要な補正は (g,c)=(0,1)(g,c)=(0,1)01100110(1,0)(1,0)10101010,それ以外は 00000000。よって

h3=gcˉ,h2=gˉc,h1=gcˉgˉc,h0=0.\boxed{h_3=g\bar c,\quad h_2=\bar gc,\quad h_1=g\bar c\vee\bar gc,\quad h_0=0}.