next up previous contents index
Next: Index Up: コンピュータのしくみ Previous: 参考文献   Contents   Index

練習問題の解答

1章

1.1
通常,昔の文字盤表示の時計がアナログで, 数字表示の時計がディジタルと言われている。 しかし,文字盤表示の時計も, 振子とかテンプルを使って歯車を一歯ずつ動かしているので, 実は振子などの周期を計数しており,ディジタルなのである。 もちろん,現在の多くの時計は,水晶振動子の発振している波を数えているので, これもディジタルである。

 厳密な意味でのアナログ時計は, 水漏式や蝋燭の燃えるのを利用した極めて古典的なものしかないかもしれない。

1.2
古いテレビは,映像の各点の明るさがアナログ的であった。 さらに,各点と言ったが,垂直方向は走査線により確かに不連続であるが, 水平方向は連続であるので,これもアナログ的である。

 しかし,地上波ディジタルで代表されるディジタルテレビでは, 水平,垂直とも不連続なため,まさに点の集合であり, さらに各点の明るさも不連続な階調を持つことから, その意味でもディジタルである。

1.3
4bitの信号線のそれぞれを0または1にできることから, すべての組合せは$ 2^4=16$となり,16種類の情報を伝えることができる。

 自然数を2進表示した場合,4bitでは0000,0001,0010,..., 1111の自然数が表現できる。 最小数は言うまでもなく0であるが,最大数は1111, つまり $ 1+2+2^2+2^3=15$となる。


3章

3.1

2入力NANDの下を3個のn-MOSの直列回路とし, 上を3個のp-MOSの並列回路とし, 新たに増えたn-MOSおよびp-MOSのゲートを$ In_3$とする。

3.2
2入力NORの出力のあとにNOTをつける。

3.3
2入力NORの下を3個のn-MOSの並列回路とし, 上を3個のp-MOSの直列回路とすればよい。 新たに増えたn-MOSおよびp-MOSのゲートを$ In_3$とする。


4章

4.1
真理値表での確認は各自に任せる。 NANDはすべての入力が1のときにのみ,出力は0となる。 したがってNAND(NOT)はすべての入力が0のときにのみ0となり, ORと同じ動作となる。 これは入力数によらない一般的性質である。

4.2
真理値表での確認は各自に任せる。 NORはすべての入力が0のときにのみ,出力が1となる。 したがってNOR(NOT)はすべての入力が1のときにのみ1となり, ANDと同じ動作となる。 これは入力数によらない一般的性質である。

4.3
OR($ X,Y,Z,W$)=OR(OR($ X,Y$), OR($ Z,W$))の右辺に
OR=NOT(NOR)を代入すると,
OR($ X,Y,Z,W$)
 =NOT(NOR(NOT(NOR($ X,Y$)), NOT(NOR($ Z,W$))))
 =NAND(NOR($ X,Y$), NOR($ Z,W$))
が誘導できる。

4.4
4.1と同じ結果が出ればOK。

4.5
図 1

4.6
図 2

4.7
図 3。半加算器を組合せで記載したが, AND,OR,NOTにするには, half-adderの部分に図2をはめこむ。

4.8
図 4

4.9
NANDは入力数個のp-MOSによる並列回路と, 同数のn-MOSによる直列回路で構成されるが, これが1入力であると,それぞれ1素子だけの並列,直列回路になり, 結局,直列も並列もない1素子だけのNOT回路そのものになる。

 NANDの真理値表は入力がすべて1のときにのみ,出力は0となり, それ以外の入力の組合せでは1となる。 これが1入力となると,入力が1のときにのみ,出力は0となり, それ以外,つまり入力が0のときには1となる。 これはNOTの真理値表である。

4.10
図 5

Figure 1: EORの回路
\begin{figure}\centering
%
\unitlength 1pt
\begin{picture}(203,127)
\put(0,0){\...
...put(20.2,6.4){\makebox(0,0)[rb]{{\footnotesize$B$}}}
\end{picture}
\end{figure}


Figure 2: 半加算器の回路($ S$の回路は図1の いずれでもよい)
\begin{figure}\centering
%
\unitlength 1pt
\begin{picture}(177,84)
\put(0,0){\s...
...t(160.6,11.2){\makebox(0,0)[lb]{{\footnotesize$C$}}}
\end{picture}
\end{figure}


Figure 3: 全加算器
\begin{figure}\centering
%
\unitlength 1pt
\begin{picture}(205,87)
\put(0,0){\s...
...t(126.8,39.8){\makebox(0,0)[rb]{{\footnotesize$C$}}}
\end{picture}
\end{figure}

Figure 4: デマルチプレクサ
\begin{figure}\centering
%
\unitlength 1pt
\begin{picture}(123,112)
\put(0,0){\...
....1,101.4){\makebox(0,0)[rb]{{\footnotesize\rm$In$}}}
\end{picture}
\end{figure}

Figure 5: EORのNAND-NAND回路( $ \overline {M_0}$ $ \overline {M_3}$ を作る回路は不要であるので,これらを消去すると, 図1の下図と一致する)
\begin{figure}\centering
%
\unitlength 1pt
\begin{picture}(166,183)
\put(0,0){\...
...{\makebox(0,0)[lb]{{\footnotesize$\overline{M_3}$}}}
\end{picture}
\end{figure}

4.11
図 6

Figure 6: 簡略表記によるエンコーダ回路
\begin{figure}\centering
%
\unitlength 1pt
\begin{picture}(161,284)
\put(0,0){\...
...t(147.1,3.6){\makebox(0,0)[b]{{\footnotesize$O_0$}}}
\end{picture}
\end{figure}


5章

5.1
内部状態は二つで十分であるので,これらを0と1とすれば, 図 7のような状態遷移表が得られる。

Figure 7: 20円券売機の状態遷移表
\begin{figure}\centering
\begin{tabular}{\vert cc\vert ccc\vert}
\hline
$In$\ ...
...0 & 1 & 1 & 0 & 0 \\
1 & 1 & 0 & 1 & 1 \\
\hline
\end{tabular}
\end{figure}

5.2
状態遷移図は図 8。状態遷移表は略。

5.3
まず図5.8の上図の場合,$ \phi _1$のタイミングで, レジスタの内容は$ Wt$が1ならば外部入力により, $ Wt$が0ならばレジスタ自身の内容により書き換えられることを確認する。 続いて同じく$ \phi _1$のタイミングで,$ Wt$$ Rd$も1のとき, 回路は左右が独立に動作し,左半分は外部入力で書き換えられるが, 出力は右半分の論理状態でのみ決定されることを確認する。

5.4
プリチャージ回路のみ図 9に示すが, 全サイズは通常のc-MOS回路の半分以下である。

Figure 8: $ In$がすぐには変化しない場合の30円券売機の状態遷移図
Figure 9: NOR(AND$ (A,B),C$)を出力するプリチャージ回路
\begin{figure}\centering
%
\unitlength 1pt
\begin{picture}(237,186)
\put(0,0){\...
...box(0,0)[rb]{{\footnotesize\rm$\overline{\phi_2}$}}}
\end{picture}
\end{figure}

6章

6.1
図 10参照。

Figure 10: 4bit符号なし整数の2進,16進,10進対応表
\begin{figure}\centering
\begin{tabular}{\vert r\vert rr\vert\vert r\vert rr\ver...
... & 0111 & {\tt0x7} &15 & 1111 & {\tt0xF} \\
\hline
\end{tabular}
\end{figure}

6.2
図 11参照。

6.3
        

\begin{displaymath}\begin{array}{rrr}
& 1011 & (11) \\
+ & 0111 & (7) \\
\hline
& 10010 & (18)
\end{array}\end{displaymath}

となり,5bit目に1が立っている。 10進の計算で16以上になっているので,それからもオーバフローがわかる。

Figure 11: 4bit符号あり整数の補数表現(10進表現以外は補数)
Figure 12: 4bit符号なし整数の加算でオーバフローを起こさない領域を黒丸, 起こす領域を白丸で示す。
\begin{figure}\centering
\begin{tabular}{\vert r\vert rr\vert\vert r\vert rr\ver...
...1.8,147.0){\makebox(0,0)[rb]{{\footnotesize\rm 16}}}
\end{picture}
\end{figure}

6.4
図 12で,全領域の1/2強でオーバフローが起きない。

6.5
6.3になればよい。

Figure 13: 4bit符号あり整数の加算でオーバフローを起こさない領域を黒丸, 起こす領域を白丸で示す。
\begin{figure}\centering
%
\unitlength 1pt
\begin{picture}(163,164)
\put(0,0){\...
...8.9,15.0){\makebox(0,0)[rb]{{\footnotesize\rm$-$8}}}
\end{picture}
\end{figure}

6.6
図 13で, 全領域の3/4強でオーバフローが起きない。

6.7
結果が正しいことを確認できればよい。

6.8
図 14で,全領域の76/256=0.3 でオーバフローが起きない。 ビット幅$ n$のとき,この領域の面積比はおよそ $ (2+n\log2)/2^n$となるが, この式に$ n$=4を代入すると,やはりほぼ0.3となる。 $ n$が非常に大きいと,この比は限りなく0になることに注意。

Figure 14: 4bit符号なし整数の乗算でオーバフローを起こさない領域を黒丸, 起こす領域を白丸で示す。
Figure 15: 4bit符号あり整数の乗算でオーバフローを起こさない領域を黒丸, 起こす領域を白丸で示す。
\begin{figure}\centering
%
\unitlength 1pt
\begin{picture}(163,161)
\put(0,0){\...
...x(0,0)[rb]{{\footnotesize\rm$-$8}}}
\end{picture}
\vspace{-0.2cm}
\end{figure}

6.9
図 15で, 全領域の101/256=0.39でオーバフローが起きない。 ビット幅$ n$のとき,この領域の面積比はおよそ
$ 2(1+(n-1)\log2)/2^n$となるが, この式に$ n$=4を入れると,やはりほぼ 0.38となる。 $ n$が非常に大きいと,この比は限りなく0になることに注意。


7章

7.1
Aは出力スイッチのみON,Bは入力スイッチのみON, そしてCは両スイッチともOFFであればよい。


8章

8.1
プログラムの書き方については知らない人が多いかと思うが, 図 16を読んでみると,何をしようとしているかわかるであろう。 if-then-else文はすぐわかるであろう。 do-until文はどんな条件でも,必ず1回はループ内を実行する場合に使用する。 一方,while-do文は条件が不成立の場合は, 1回もループ内を実行しない場合に使用する。

Figure 16: 分岐/ジャンプ文の例
\begin{figure}\begin{itemize}
\item テキストのコピー(do-until文)
\begin{verb...
...); \\  メモリーからデータを格納する
}\end{verbatim}
\end{itemize}
\end{figure}


9章

9.1
ALUは入出力を合わせてバスと3箇所で接続を必要とする。 バス1系統では,そのうち一つとしか通信ができないので, 最低,2個のレジスタを必要とする。 例えば,2個の入力にそれぞれレジスタを用意すれば, まず二つのレジスタに入力データを入れ, 出力を一気に計算して目的の汎用レジスタへ送り込めばよい。

 同様に,バス2系統では,1個のレジスタが必要となる。 例えば出力レジスタのみあれば,2系統のバスから同時に入力を与え, 計算結果をいったん出力レジスタに蓄え,次のタイミングで送出すればよい。

 バス3系統では,同時に2系統のバスに入力を与え, 同じタイミングで残る1系統のバスに出力を送出すればよい。

9.2
Aレジスタ(またはBレジスタ)の内容をそのまま出力へ送ればよいから, 図9.6のA(またはB)と同じ設定の$ K=0000$, (または1010),$ R=1100$とすればよい。

9.3
ド・モーガンの法則を使うと $ \mathop{\rm NOT}\nolimits (A\oplus B)=\mathop{\rm NOT}\nolimits (A\cdot\overli...
...ot\overline B
+A\cdot B+B\cdot\overline B
=\overline A\cdot\overline B+A\cdot B$ なので,$ K=0000$$ P=1001$$ R=1100$とすればよい。


10章

10.1
本文にもあるように,内部状態は1個である。 それを0とすると,状態遷移表は
$ S$ $ S'$ $ Add1$
0 0 1

と1行である。 実は内部状態を1とする方が回路は簡単になる。
$ S$ $ S'$ $ Add1$
1 1 1
この場合,余計な回路をすべて削ぎ落すと, D-フリップフロップの出力と入力をループにして, その接続線から$ Add1$を実行する制御線を分岐すればよい。

10.2
作業の結果が一致することを確認できればよい。

10.3
状態遷移表があれば,それからシークエンス回路を得るのは容易である。 内部状態は全部で6個あり, その6個から出る8本の矢印ごとに1行を対応させた状態遷移表を作成すればよい。 これができれば,正解である。

 しかし,$ \phi _1$$ \phi _2$の両サイクルをうまく使うことにすると, 図 17に示すように,より小さな状態遷移表で済む。 その場合,フェッチ,デコード, 実行の四つのサイクルの4個の開始点の丸のみを内部状態とすれば, 十分であることがわかる。 これらを順次fni,dec,out,jpとしよう。 表の出力は$ \phi _2$に出力されるが, コンマ以後は$ \phi _1$のタイミングで出力される。

Figure 17: $ \mu $P制御回路
\begin{figure}\centering
\begin{tabular}{\vert ll\vert ll\vert}
\hline
$In$\ &...
...dr \\
$\overline{FlagR}$\ & jp & fni & \\
\hline
\end{tabular}
\end{figure}

 この表では入力,出力,内部状態がすべて文章で表記されているが, 例えば4個の内部状態を00,01,10,11に対応させるなど,2進化は容易である。 なお,`='は代入,`=='は左右が等しいことを意味する。


11章

11.1
$ \tau\propto\tau_0\propto(1/k^2)/(1)=1/k^2$より $ f_c\propto k^2$ $ C\propto C_g\propto 1/k$より $ P\propto f_cC_gV_h^2/2\propto(k^2)(1/k)(1^2)=k$

 このように,高速にはなるが,FET当たりの消費電力はどんどん大きくなる。

 $ f_c$は無理して上げる必要はないので, $ f_c\propto k$ぐらいに抑えることにすると,$ P\propto1$とできるが, これでも,集積度が上がっていくので,面積当たりの消費電力は深刻な問題となる。

 $ f_c$を上げないことにすれば,FET当たりの消費電力は$ 1/k$に比例して下がり, 面積当たりの消費電力は$ k$に比例して増加する程度に抑えられる。 現在は,この辺りでしのいでいるのである。


next up previous contents index
Next: Index Up: コンピュータのしくみ Previous: 参考文献   Contents   Index
Yoichi OKABE 2010-04-20