Feel Physics Backyard

HoloLensの出張授業をする会社で、教材を開発しています

CPUのしくみ入門(中編) 回路シミュレータを使って

◆お知らせ

関連記事をまとめ、回路シュミレータの使い方の注意点やサンプルファイルを添付して、以下のページにまとめました。

『CPUの創り方』によるCPUのしくみ入門 回路シミュレータを使って: PAPA-tronix !

以下は古い記事です。


この記事はCPUのしくみ入門(前編) 回路シミュレータを使って: PAPA-tronix !の続きである。

 

引き続き@su_exsさんのアドバイスをいただきながら作業をすすめる。

 

今回はレジスタとデータセレクタの連携チェックと全加算器の導入である。

 

 

あとでプログラムカウンタとして使うため、レジスタのカウンタ機能を復活させる

あとでプログラムカウンタとして使うため、レジスタのカウンタ機能を復活させる

レジスタにHLLL、LHLL、LLHL、LLLHをLOADしてみると、うまくいっている 

レジスタに0001、0010、0100、1000をLOADしてみると、うまくいっている

フリップフロップが1つだけの1bitCPU 

ここでフリップフロップが1つだけの1bitCPUをつくってみた。

処理はそのまま転送か反転の2種類だけ 

処理はそのまま転送か反転の2種類だけ

この部分の入力がHならただの転送で、Lなら反転になる 

この部分の入力がHならただの転送で、Lなら反転になる

矢印のところで下のQ#が反転している 

矢印のところで下のQ#が反転している

レジスタとデータセレクタのテストをしてみるため、4つめのレジスタに直接入力を付ける 

レジスタとデータセレクタのテストをしてみるため、4つめのレジスタに直接入力を付ける

まずレジスタ4に1010を入力し・・・ 

まずレジスタ4に0101を入力し・・・

ここですね・・・ 

ここですね・・・

セレクタで転送元をレジスタ4に設定し・・・ 

セレクタで転送元をレジスタ4に設定し・・・

レジスタ1だけ転送を受け入れる(LOAD)ようにすると・・・ 

レジスタ1だけ転送を受け入れる(LOAD)ようにすると・・・

レジスタ1に1010が入力されています(図はQ#なので反転して0101になっています) 

レジスタ1に0101が入力されています(図はQ#なので反転して1010になっています)

次の転送元はレジスタ1で・・・ 

次の転送元はレジスタ1で・・・

転送先はレジスタ2です 

転送先はレジスタ2です

レジスタ2に1010が入力されたことがわかります 

レジスタ2に0101が入力されたことがわかります

最後はレジスタ2の内容をレジスタ3に転送します 

最後はレジスタ2の内容をレジスタ3に転送します

レジスタ3に1010が入力されました 

レジスタ3に0101が入力されました

これは桁上り(Cin)を込みにした全加算器 

これは桁上り(Cin)を込みにした全加算器

入力Aと入力BがH、桁上り入力CinがLのときは・・・ 

入力Aと入力BがH、桁上り入力CinがLのときは・・・

このANDゲートがHを出力して桁が上がる(C) 

このANDゲートがHを出力して桁が上がる(C)

AだけHの場合は・・・ 

AだけHの場合は・・・

このANDゲートがHを出力する(S) 

このANDゲートがHを出力する(S)

A+BがSと桁上りのCに反映されている 

A+BがSと桁上りのCに反映されている

先ほどの1bit全加算器を4個つなげると、4bit全加算器 

先ほどの1bit全加算器を4個つなげると、4bit全加算器

0001+0001=0010、0010+0010=0100、0100+0100=1000、1000+1000はC出力、Cinのみは0001 

0001+0001=0010、0010+0010=0100、0100+0100=1000、1000+1000はC出力、Cinのみは0001

レジスタ+セレクタ、にALU(4bit全加算器)をつなげた 

レジスタセレクタ、にALU(4bit全加算器)をつなげた

4つめのレジスタに0001をセットして1つめのレジスタに転送し、 

4つめのレジスタに0001をセットして1つめのレジスタに転送し、

0001+0001=0010 

0001+0001=0010

0010+0101=0111 

0010+0101=0111

0111+0001=1000 

0111+0001=1000