第4回分

減算器

加減算は他の講義でも扱ったことのある内容だったので、理解できた。

FAで減算もできることを知った。

それはよかったです。

加減算器の表の書き方で少し混乱した。

ちょっと見かたにコツがいりますかね。

F=0,1,2,3で、Bが0,B,/B,1となる部分はどうやって作るのか?

そのような入力(F:2ビットとB:1ビット)と、出力B'との関係を 真理値表と考えて、組み合わせ論理回路をつくればよいことになります。

加減算器の後半の拡張した加減算器について、F入力がよくわからない。

Fに応じて、B'が代わり、結果として行われる演算が、加算や減算などになる、 ということです。

F=0,1,2,3で、なぜ2進数ではないのか?F=0,1,2,3とはF=00,01,10,11のことでよいのか?

あ、具体的には、もちろん、そのとおりです。

EXORの、Xの値でインバータの働きをさせることができるという考えは思いつかなかった。

なかなか面白い見方ですよね。

A+111…1=A-1となるのはなぜか?

111..1が、1(2進数で00...01)の2の補数、つまり-1、だからですね。

複数の加減算器でのタイムラグからエラーが出ることはないのか?

基本的には、全部の出力が揃うまで待って、その結果を見るようにすることになります。 (いわゆる同期式回路)

今回の減算器ではNビットの加算器を複数個つなげても成り立つのか?

成り立つはずです。 ぜひ確認をしてみてください。

減算器のときはCin=1とあるが、それは最初の桁に対してだけか?あとのCinは各ケタの桁上がりのことを指しているのか?

そういうことですね。 そうすることで、全体としては複数ビットの加算器、になり、 その一番下の桁の入力であるCiだけ、加算や減算の切り替えに用いる、ということです。

元々Cinはキャリーインであり、論理演算ユニットにおけるA+B+1は加算に含まれる、ということはないのか?

そういう考え方もできます。 まあものは考えようですね。

減算においてCout=1となる場合、何を意味するのか?

Coutは結果の最上位ビット(符号ビット)ですから、それが1ということは、 演算の結果が負であることになります。

ALU

ALUがどのように構成されるかがなんとなく見えたので、加算器の高速化がいかに重要かが分かった。

それはよかったです。

入力NビットのALUの論理積や論理和というのは各桁毎の論理和や論理積ということか?たとえば0011と1101の論理和は1111?

そういうことです。 論理演算には、桁上がり、は存在しませんよね。

ALUと乗算・除算・シフト演算を設けたものは、どれくらい大がかりになるのか?

現実的ではない回路規模、でしょうね。

シフト演算

シフト演算が思ったよりも物理的なものだった。

たしかにそうですね。

シフト演算の実装の仕方は、回路によって大きく異なってくるのか?

バレルシフタが、一番素直で、よく使われる回路のように思います。

計算機内には、1,2,4,8…ビットとシフト演算器がたくさんあるのか?

小規模なマイコンだと、1ビットシフトしかないものもありますね。

ローテイト演算はどのような場面で使うのか?

シフトとは違って、2倍や1/2倍、とは関係ありませんが、 どういう例ですかねえ・・・私自身も、マイコンのプログラムを書いていて 使ったことはあるのですが、忘れてしまいました。

バレルシフタは回路的に大きくなってしまう感じがするが、一般的に使われているのか?

いえ、任意ビット数のシフト演算をするには、 最適な回路だと思いますよ。

シフタをいくつもつなげるくらいなら、1bit左シフタを数クロック回した方が効率がいい気がするが、実際にはどうなのか?

シフタ1段分の演算時間は、セレクタ1段分の遅延時間ですから、 クロック周期をうまくあわせれば、1クロックでシフト演算が終わることになります。 結局は、回路規模と演算速度のどちらを優先するか、ということですね。

シフト演算は何に使うのか?

1ビットの左シフト・右シフトは、それぞれ2倍、1/2倍、に対応します。 また、1ビットずつ順番にデータが送られてくる場合に、 それを元のデータに戻す場合によく使いますね。 情報システム工学実験第1の、マイコンを使った回(平野先生)の A/Dコンバータ・D/Aコンバータのところでも使ったはずです。

2倍にして左ビットシフトをしたらダメなのか?A+AでAの左ビットシフトにならないか?

1ビットの左シフトに限れば、まあそういうことです。

シフト演算は奇数倍のかけ算はできるのか?

直接にはできませんが、例えば5倍なら、 4倍(2ビット左シフト)と1倍(元の値)との加算、として 加算器とくみあわせれば、求めることができます。

1,2,4,8…ビットとあるが、1,2ビットだけあれば任意シフトできる気がするが。

4ビットシフトしたいときは、それだけではできませんので、 4ビット分のシフタが必要ですね。

前回の内容を含む質問、全体的な質問、感想など

頭の中がごっちゃになった、回路を書くのが精一杯だった。

今回も、特にシフタのところで回路図が多くなってしまいました。 すいませんでした。

先週と違い、今週からすべてのビットを扱うようになって紛らわしかった。

たしかに慣れないとそうかもしれませんね。 できるだけ、講義中にも注意を喚起するようにします。

簡単な四則演算であっても回路で実現するにはいろいろな工夫が必要だと言うことが分かった。

それはよかったです。

入力のAなどのところに、斜線とN、とかいてあるのはm「Nビット」ということを表す書き方なのか?

はい、そうです。

加算器でどうやって論理演算を行うのか?

A→A'への拡張はどうすればよいのか知りたい。

さらに拡張した論理演算の回路をもっと詳しく知りたい。

今回は時間がなくて扱えませんでしたが、 2006年の講義で扱っていましたので、 興味のある人は参照してみてください。

乗算・除算の回路が全く予想できなかった。

乗算をどのように行うのか、またその処理時間などを知りたい。

乗算は次回。 除算は、ちょっと省略予定です。

関連する教科書はあるのか?

参考書、として紹介してる本には、このあたりのことは詳しく載っていますので、 興味のある人は参照してみてください。

なぜGnを生成項、Qnを伝搬項というのか?普通ならGn=AnBnでキャリーが伝搬されるから、Gnが伝搬項と思うのだが?

入力であるAnとBnだけから、次の桁へのキャリーが生成される条件が、Gn=1、と書けますので、 これを生成項と呼びます。 また、AnとBnだけからは、次の桁へのキャリーが発生するかどうかは決まらないのですが、 Qn=1ならば、Cn-1=1ならば、それが次の桁へのキャリーCn=1として伝搬する、 と考えるとよいと思います。
戻る