第4章 レジスタ間転送装置

学ぶべき順序

「CPUの設計技術を身に付ける」を目的とした場合、まず最初に学ぶべき事は、ANDゲートやORゲートあるいはフリップフロップなどの論理素子の理解です。加えて2進法などの情報表現の理解も必要です。ここまでは多くの指導者(教育者)の意見が一致しています。

意見が分かれるのは「これらの次にを学ぶべきか?」です。大学等で教科書として用いられている「コンピュータアーキテクチャ」関連の本の目次を眺めてみますと、その多くが「演算回路」の説明に進んでいます。これは日本ではコンピュータを「電子計算機」と称したため、必要以上に計算をする回路(=演算回路)が重要視された結果ではないかと筆者は推測しています。

事実、大学や高等専門学校の卒業研究でも、「コンピュータの構築」と称しながら「単なる演算回路の実験」で終わってしまっている方を散見します。本書でも前章で演算回路の話を挿みましたが、演算回路の理解だけでは数bitの値同士の演算ができる「簡易電卓」は理解できても、CPUの設計技術の習得には遠く及びません。本書ではこの問題を回避するために、「レジスタ間転送装置」の話を少々詳しく話ます。

レジスタ間転送装置とは

レジスタ間転送装置とは複数のレジスタ間でデータを受け渡しできるだけの装置です。足し算とか条件分岐等の「コンピュータっぽいこと」は何もできません。しかしこのレジスタ間転送装置の理解こそが、「CPUの設計技術を身に付ける」最短の近道です。

レジスタ間転送装置で用いるレジスタのbit数やレジスタの数は任意ですが、ここでは16bitのレジスタを4つ用いるものとして話を進めます。便宜上、これら4つのレジスタをA、P、W、Mと呼びます。各々のレジスタは前章で紹介した74ALS574を2個組み合わせたものです。前章からの再掲になりますが、この74ALS574を2個組み合わせた回路とその回路全体の略図を以下に掲載します。

レジスタ間転送装置の全回路図

図が16bitのレジスタ4つを対象としたレジスタ間転送装置の全回路図です。単にすべてのレジスタの入出力を直結し、各レジスタのOE端子とCK端子に押しボタンスイッチとプルアップ抵抗を取り付けただけの回路です。

チャタリングについて

上記の回路のスイッチは場合、全てプルアップ抵抗が付けられているので、スイッチがOFFの時はHを、スイッチがONの時はLを各端子のOE(あるいはCK)に与えます。

しかしこの種の機械式スイッチは、スイッチの操作と同時に出力がHからL(あるいはLからH)になるのではありません。

実際にはH→L→H→L→H→Lと数回(スイッチの種類によっては数10回)繰り返してからL(あるいはH)になります。

これをチャタリング(chattering)と言います。 この現象はスイッチ内部の接点として使われている金属が振動により、原子レベルで接触と離反を繰り返すことにより生じます。

日本の企業等では「チャタリングが発生している」とか、短縮して「チャタが起きている」という言い方をします。

上記の回路では、このチャタリングは特に問題を引き起こしません。しかしスイッチを押すたびに数字が一つ増える「カウンター」の様な物のを作るときには、このチャタリングを除去する仕組みを実装しないと「1回しかボタンを押していないのにカウント値が何個も進む」等の不具合が生じますので注意が必要です