Implementing a One Address CPU in LogisimのCPU実装を調べる2 Arithmetic Subsection

今回は、「Implementing a One Address CPU in Logisim」CPU-MainというCPU全体が書かれている回路図の作りを見ていきます。

各ソフトウェア

このドキュメントで使っている各ソフトウェアは、Charles Kannさんのサイトhttp://chuckkann.com/joomlaMain/index.php/2016-05-09-22-19-35/one-address-cpu からダウンロードできます。

CPU全体の回路図は、区切りなどがありませんが、大きく2つに分けることができます。1つは算術とデータメモリーの入出力管理をするサブセクションです。もう一つは、プログラムの実行パスを制御するサブセクションです。

まずは、全体を把握するのではなく、Arithmetic Subsectionを見ていきます。

Arithmetic – 算術部分

上記の画像を見ると、レジスターやROMやALU、SignExtend、マルチプレクサーなどがあり複雑に見えますが、やっていることは凄く簡単で、Arithmetic算術は、ALU(Arithmetic Logic Unit)がポイントになります。

シンプルにすると以下のような感じです。

 

上記の回路では、RAMもレジスターも結局はデータを保持するもので大きいか小さいかの違いなので、シンプルにレジスターを2つにしました。これが加算器につながっています。今回のCPUでは、演算の入力を2つとり、結果を1つ返します。よって加算は以下のようになります。

入力A + 入力B→出力D

また、出力Dは、その後レジスターの入力となるので、以下の形になります。

入力A + 入力B→入力A

つまり加算結果はレジスターに保持されます。クロックが動作している間、この回路は動き続けるので、入力Bの値である1がどんどん足されていき、レジスターにその結果が表示されます。

数値0でリセットしたい場合や、メモリーの情報ではなく即値を使いたい場合は、マルチプレクサーを使って切り替えます。次は、マルチプレクサーも小さな回路で見てみましょう。

小さなマルチプレクサーとレジスターの回路を切り出す。

CPU回路を理解するために、以下の簡単な回路を作成しました。

入力を切り替えると、レジスターと出力ピンの値が1111また0000になる

4bitの入力データ(1111または0000)をマルチプレクサーで切り替えて、入力された4bitデータはクロックが立ち上がる(=線が明るくなった)タイミングでレジスターへ格納されます。またそのデータは、レジスターの出力ピンQから、出力ピン(一番右の4bit)に渡されます。

MUXと書かれている台形記号が、マルチプレクサーで、下についている切り替え信号で、入力されたものを切り替えられます。0で、入力ピンの1111、1で入力ピンの0になります。

またレジスターは、レジスターの左下のピンに0または1を入れると、無効または有効に切り替えることができます。これによりレジスターが動いていない状態できます。

レジスターを0で無効にしているので、入力を切り替えてもレジスターは動作しない。

LogisimのRAM回路を使う

RAMも小さな回路を作ってみると、単純なメモリーなのでアドレスを指定して書き込むか読み込むかのどちらかだけなので簡単です。レジスターと同様にクロックの立ち上がりで動作するので、クロックを用意します。またいくつかRAM用のピンがあります。

str: (store)0で入力データが書き込めなくなります。

sel:0でRAM自体が無効になります。

ld: (load)0で、出力ができなくなります。

RAMの入力用(STORE)Dピンと出力用(LOAD)Dピンの表示方法

logisimに用意されているRAMコンポーネントを選択して属性の[Data Interface]を[Separate load and store ports]にすると、上記画像のように、データ保存用のDピンと、データロード用のDピンが用意されます。初期設定では1つなので、初心者のうちは2つのDピンを使ったほうがやりやすいと思います。

 

まとめ

一見複雑そうな回路も、似たような小さな回路を作ってみると、それが組み合わさったものというのが分かります。プログラミング言語の場合は、関数やクラスなどで明確に分かれますが、回路図の場合は、うまくサブサーキットを作るようにしたりするとよいのかもしれません。

次回は、Execution Path Subsectionをみていきます。

 


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA