東京工業大学 情報理工学院 情報工学系 2017年8月実施 午前 4.
Author
祭音Myyura (co-authored with GPT 5.6 SOL)
Description
変数はすべて {0,1} の値をとる。(Xn−1,…,X0) は Xn−1 を MSB、X0 を LSB とする n 桁の二進数であり、負数には 2 の補数表現を用いる。中間結果を新しい変数に代入してよい。
(1) X,Y,Z のうち 2 個以上が 1 のときだけ 1 を返す maj(X,Y,Z) を積和標準形で表せ。
(2) nor(X,Y)=X∨Y とし、NX=Xˉ,NY=Yˉ,NZ=Zˉ とする。X,Y,Z のうち 2 個以上が 1 のときだけ 0、それ以外は 1 を返す関数 nmaj(NX,NY,NZ) を、実引数 NX,NY,NZ と 2 入力 nor のみで表せ。関数の個数を最少にせよ。
(3) X,Y,Z のうち奇数個が 1 のときだけ 1 を返す 3 入力 xor(X,Y,Z) を、2 入力 nor のみで表せ。関数の個数を最少にせよ。
(4) 3 ビットの X,Y の 1 の補数をそれぞれ (CX2,CX1,CX0)、(CY2,CY1,CY0) とする。和 X+Y の 4 ビット表現を (A3,A2,A1,A0) とする。CXi,CYi と 3 入力 xor、3 入力 nmaj、2 入力 nor だけを用い、各 Ai を最少個数の関数で表せ。
(5) 差 X−Y の 4 ビット表現を (S3,S2,S1,S0) とする。Xi,Yi,CXi,CYi と上記の 3 種類の関数だけを用い、各 Si を最少個数の関数で表せ。
(6) n ビットの X,Y の積を (M2n−1,…,M0) とする。2n ビットのレジスタ R,P および P−1 を用意し、初期値を
R=(Xn−1,…,X0,0,…,0),P=(0,…,0,Yn−1,…,Y0),P−1=0
とする。原文では 0≤k≤n−1 の各回で、現在の (P0,P−1) により次の処理を指定している。加減算には桁上げを伴い、処理後に各ビットを i から i−1 へ送る。
| (P0,P−1) | 原文の処理 |
|---|
| (0,0) | P を右シフト |
| (1,0) | P+R を右シフト |
| (0,1) | P−R を右シフト |
| (1,1) | A |
(a) 原文の「k=n−1 で P が積になる」という条件に対して、空欄 A の動作を答えよ。
(b) 加減算により積が求まる理由を式で説明せよ。
(c) P−1 を参照せず、P0=0 ならシフト、P0=1 なら加算後シフトとする方式と比較して長所・短所を述べよ。
题目描述
- 写出三输入多数决函数的最小项之和。
- 已知三个反相输入,用最少的二输入 NOR 构造原输入多数决的反相输出。
- 用最少的二输入 NOR 构造三输入异或。
- 仅给定两个三位数的逐位反相输入,用 xor、nmaj、nor 构造四位有符号和,并尽量减少函数调用。
- 同时给定正反相输入,用相同函数构造四位有符号差,并减少函数调用。
- 按给定寄存器初值和相邻两位控制表,填写乘法过程的第四种动作、证明原理并比较普通加移法。题面的加减符号及结束轮次按扫描原文保留在上表中。
Kai
以下、N=nor、P=xor、M=nmaj と略記する。定義から M(u,v,w)=uv∨uw∨vw である。定数入力 0 を利用する。
(1)
積和標準形は
XYZˉ∨XYˉZ∨XˉYZ∨XYZ.
(2)
a=NX,b=NY,c=NZ とおく。次の 6 個で実現できる。
u1u4=N(a,a),=N(u1,u2),u2u5=N(b,b),=N(c,u4),u3M(a,b,c)=N(a,b),=N(u3,u5).
実際、出力は (a∨b)(c∨ab)=ab∨ac∨bc となる。最少個数は 6。
(3)
次の 8 個でよい。
u1u4u7=N(X,Y),=N(u2,u3),=N(u4,u5),u2u5P(X,Y,Z)=N(X,u1),=N(Z,u4),=N(u6,u7).u3u6=N(Y,u1),=N(Z,u5),
u4=X⊕Y であり、後半も XNOR をとるから出力は X⊕Y⊕Z。最少個数は 8。
(4)
最少個数は 7 であり、次のように実現する。
A0A1x2A3=P(CX0,CY0,0),=P(CX1,CY1,c1),=N(CX2,CX2),=M(A2,x2,q2).c1q2A2=N(CX0,CY0),=M(CX1,CY1,A1),=P(x2,CY2,q2),
c1 は下位桁からの桁上げ、q2=cˉ2 は第 1 桁からの桁上げの否定、x2=X2 である。x2=q2 なら A3=x2、異なるなら A2=Y2 なので、最後の式は符号拡張した和の符号ビットを与える。
(5)
借りを b1,b2 とすれば、次の 6 個で実現する。
S0S1S2=P(X0,Y0,0),=P(X1,Y1,b1),=P(X2,Y2,b2),b1b2S3=N(X0,CY0),=M(CX1,Y1,b1),=M(X2,CY2,b2).
S3 は符号拡張した上位桁の差である。最少個数は 6。
(6)
(a)
原文を文字どおり満たす A は存在しない。空欄として意図される動作は 加減算せず算術右シフト である。ただし原文の加減方向では一般に積を得られない。例えば n=2,X=Y=1 では空欄を使う前に、状態 k=1 で P=2 となり、積 1 と一致しない。正しい Booth 法の更新は
P←ASR(P+(P−1−P0)R)
であり、(1,0) で減算、(0,1) で加算する。旧 P0 を P−1 に保存し、n 回後、すなわち状態 k=n で積を読む。最小負数も扱う場合、上位部分に符号拡張用の 1 ビットを追加し、最終結果の下位 2n ビットを取る。
(b)
y−1=0 とすると、2 の補数の値は
Y=−yn−12n−1+k=0∑n−2yk2k=k=0∑n−1(yk−1−yk)2k.
したがって
XY=k=0∑n−1(yk−1−yk)X2k.
各係数は −1,0,1 なので、上記の減算・シフトのみ・加算で計算できる。原文どおり符号を逆にするとこの和は −XY になる。
(c)
連続する 1 の列を、その両端の加減算に置き換えられるため、長い 1 の列では演算回数を減らせる。また 2 の補数を直接扱える。一方、前のビットを保持するレジスタ、減算器および制御が必要で、交互に 0,1 が現れる場合などは加減算回数が増える。反復回数自体は n 回である。