第7回分

ALUの演算の時は4つのパターンしか存在しないのですか?(例えばS1=S2=0,B=1など)

算術演算のことですね。 他の、例えばS1=S0=0, B=0のときは、S=Aとなりますが、 これは「意味のある演算」とはいえないので、除外しています。 この調子で、「意味のある演算」に絞ると4通り、ということになりますね。

前回と今回で、セレクト信号S1,S0の意味が違いませんか?

すいません、ご指摘のとおりです。

ALUで論理演算をセレクトするときの動作が良く分かりません.

セレクタを「切り替えスイッチ」と考えるとよいのではないでしょうか。 可能性のある出力4通りをすべて求めておいて、 その中から必要なものを選ぶ、という方針のわけです。

セレクタを使った方法では全ての演算回路で結果を求めた後にセレクタで出力を選択しましたが,セレクタを前に持ってきて演算を一つだけ行うという方法はしないのですか?

ああ、なるほど。それも可能ですね。 ただしNOTゲートやANDゲートなどを「回路として用意しておく」ことが 必要なのは同じなので、回路規模はほとんど変わりませんね。

加算器ベースのALUを考えるときの「前回のS1,S2でBを切り替える方式」とあるBとは?

加算器に与えられるBを、0, B, /B, 1のいずれかに切り替える方式、という意味です。

加算器ベースのALUは非常に複雑だが,単純方式と比べて速度や効率が良いのか?

回路規模が大きい加算器を1個しかつかっていませんから、 回路規模の面では効率がいいですね。

加算器ベースのALUのBをなぜ切り替えるのか?

Bを0, B, /B, 1のいずれかに切り替えると、結果として 加減算と4種類の論理演算のすべてが可能となるから、ですね。

加算器ベースにしたALUで何故S= ABCinなのか?

全加算器の最初のところ(全加算器の真理値表)を参照してください。

プリントの最も単純(だが格好悪い)の格好悪いとはどういう意味ですか (効率が悪い?)?

ざっくりいうと、用意する回路の半分は「使われない」わけです。 (論理演算のときは算術演算回路は使われない、など) だから「効率が悪い」分、もっと工夫のしようがあるわけで、 「もっと工夫する余地がある」という意味で、「格好が悪い」と表現しました。

レポートに記載する回路もNAND,NOR(負論理)を使ったほうが良いのか?

できればそうするといいですが、余裕があれば、で構いません。

なぜ,論理演算でAのところを置き換えられるのか?

そのような回路を、FAのA入力の前に置くから、 そしてそう置き換えると、結果としてすべての論理演算が 可能となるから、ですね。

ALUの演算で「そのまま」演算は使うのか?もし,使わないのであれば,他の論理演算を組み込めるのではないか?

たしかに可能ですね。 それをふまえた、大きな真理値表をつくって、論理関数を求めれば 可能でしょう。 ただかなり大規模な論理回路をゼロから作ることになるので、 必ずしも(設計の)効率はよくないかもしれません。

実際のALUは何段くらいで,何桁くらいの入力なのか?

桁数は、だいたい「○ビットプロセッサ」の数値そのもの、ですね。 16ビットプロセッサ、であれば、16ビットの数値を演算対象とできる、 という意味ですから、当然ALUも16ビットとなります。

ALUの論理演算は何に使うのか?論理回路で構成されているのに,AND,ORを選ぶ必要があるのか?

その通りですが、ANDやORだけの演算回路を作るだけでは、 他の演算をしたいときに困る、わけで、 ANDやORもふくめて、「どんな演算でもできる」のALUが必要なんですね。

ALUの真理値表の例の作り方がよく分からない.

いま一度復習を。

プリントのALUの構成案(1bit)でA'を出すのにS2,S1,S0とAだけしか入力がないが、A'をA+B,A+/BにするにはBの入力が必要では?

ご指摘の通りです。A'のところの「?」のところには、Bも加えてください。

A+/B+1=A-Bとなるのは何故ですか?

それが2の補数というものです。

ALUの演算は8種類ならば,S2をなくして,S1,S0,Cinでセレクトすればよいのでは?

ご指摘の通りです。 ただCinは、多ビットのときには、下のケタから伝わってくる桁上がり、 というのが本来の使い方ですから、一般には自由に選べる信号ではないので、 残念ながら足りません。 講義では1ビット分だけを考えていたので、Cinを自由に決められる ようですが、例えば多ビットの算術演算では、Cinを自由に決められるのは 一番下のケタだけ、です。

S1=0,S0=1のときX=A+Bなのに,S=AB となるのが良く分からなかった.

あ、やっぱり紛らわしかったですね。 前者の「+」は算術和のことで、それを論理式で書くと 排他的論理和なのです。

デクリメントの結果が負値となった場合はどうするのですか?

0の次は-1ですから、例えば4ビットだったら1111(2進数)になりますね。 このときには桁借り(ボロー; borrow)が生じますから、 そのことを記録しておく必要はあります。 (通常はキャリーフラグという1ビットの記憶領域を別に用意しておく)

S2=0,S1=1,S0=1,Cin=0,A=A,B=1のときS=A-1となるのは何故?

まあ考えてみてください。(ヒント: 2の補数)

OR,AND生成の際,A->A+/B,A->A+Bに置き換えるということをどのような手順で行うのですか?

全加算器のAのところに、もともとのA, Bから、これらの論理式(論理回路)で 生成したものを入れる、ことになりますね。 結果として、最後に紹介した図(「?」マーク入りのやつ)のように なるかと思います。

最後のALU構成図の?は何ですか?

この部分を考えて論理回路をつくってみましょう、というのが課題、 ということですね。

A->A+B,A->A+Bに置き換えるということが良く分かりません.覚えればいいのですか?

いや、これは覚える必要はないでしょう。 こう置き換えてみると、たしかにああいう結果になるなあ、と 納得してもらえればいいかと思います。

算術演算と論理演算の違いは何ですか?(キャリーの有無のみ?)

そうですね、各ビットで独立して行うのが論理演算で、 多ビットをまとめて「数値」とみなし、演算を行う (必然的にキャリーを伴う)ものが算術演算、ということになりますね。

最後の真理値表でCinはXとなっていましたが,Cin=0でなければS=ABにならないのでは?

あ、ほんとだ。すいません、ご指摘の通りです。 (講義メモはなおしておきました)

論理演算を行うためにAの置き換えがA+Bなどの論理和を用いることは矛盾ではないのか

FAに入力する前にORやANDを使うのは問題ないのですか?

そういう気もするのですが、「常にFAを通す」という構成を とっているわけです。 そうでなくて、A+B(論理和)のときだけ、ALUの出力をFAの出力Sから A+B(論理和)に切り替える、とすると、FAの出力のところでセレクタが 1個必要になってしまいます。 これを避けているわけですね。

集積回路を設計するにあたって,頭で理解しやすい回路と実用的な回路は常にかけ離れたものになりますか?

どうしても「凝る」ほど「性能がよい」傾向があるので、 「頭で理解しにくい」傾向はありそうですね。

課題では2ビットのALU設計となっているが,それはプリントの1ビット分の操作にキャリー操作を加えるだけでよいのか?

まあそういうことです。 そのキャリーの操作の部分も、論理回路で作ってみましょう、ということです。

説明時に教科書のページ番号を教えて欲しい.

すいません、気をつけます。 (ただ加算器の後半とALUの半分ぐらいは、あの本(黒い本)に載っていない 内容でした)

後半に書いた論理値表の意味が分からなかった.

まあもう一度ゆっくり見直してみてください。 (それでも納得がいかなければ、質問などでどうぞ)

ALUがどんなものかなんとなく分かった.

それはなによりです。

ALUの動作が不思議だった.

たしかに凝った論理回路ではありますね。

ANDを作る方法がとても頭の良い方法だと思った.

そうですね、これは私も最初に見たときは感心しました。

A->A+Kと置き換えることが少し疑問に思ったが,A->A*Kとおいても同じような答えになる気がした.

K=/Bではまずいですが、違う式を与えると、確かにできそうではありますね。

プリントのALUの真理値表でEXORのところがA・Bとなっていました.

あ、すいません、間違いです・・・ごめんなさい (Webページのほうが正しい)
戻る