2015-09-20シルバーウィークは特にやることもないので、ひたすら「コンピュータシステムの理論と実装」を写経することにしました。NANDゲートだけ与えられた状態から、CPUを作りコンピュータを作りOSを作り、最終的にTetrisのようなゲームを動かすところを目指すというコンセプトの教科書です。通称"Nand2Tetris"。一章を読み終わったところ。付属のJava製シミュレーターをインストールして、あくまでシミュレーションとして作成してゆくので、別にハンダゴテとかは使いません。答えは付属していないけれど、テストケースが付属しているので簡単に正しいかどうか確かめられます。読み捨てるのも勿体無いので、解いた結果をメモを残していきます。ブール論理Nandゲートから、次章以降で使うゲートを一通り用意します。Unlocked!!"みたいな感じで、使える道具が増えていきます。Nandこの本だとNandゲートは既にあるものとして使って良いことになっています。他の回路はNandから創りだしてゆきます。0回路図だとこんな風に書くらしい。Not一つのinをNandのaとb両方に食わせてやると、Notの出力になります。AndNandはAndの否定形なのだから、Nandの出力をNotで否定すればAndの出力が得られます。Orだんだん難しくなってきました。aとbをそれぞれ否定して、更にNandを取ればOrと同じ出力になります。Xor排他的論理和とかいうやつ。違う値なら1を返します。0最初思いついたのは、Orの結果とNandの結果をAndすればちょうどXorになるのですが、もう少し素子を減らしたいところ。試した結果、Nand4つでいけるっぽい。Mux(マルチプレクサ)inputにa,bともう一つ、selの3つを取り、sel==0ならばaと同じものを出力、sel==1ならばbと同じものを出力するというのがマルチプレクサです。13入力なのでここで少し苦戦しました。フォーラムを見ていても、結構壮大な答えが多い。うーん、、もっとシンプルに出来ないものか。Muxカルノー図カルノー図というものを使うともっとシンプルな論理回路が作れるらしいので、書いてみることに。さっきの真偽値表を並べ直して、こんな感じにします。1が長方形または正方形に並んでいる部分を見つけて、それぞれ論理式を作り、最後にOrで組み合わせると回路が出来上がります。Notが二重になっているのは無駄なので消してしまうと、最終的にNand4つで書けました。DMux(デマルチプレクサ)Muxの逆で、selに応じてinの値をaかbに振り分けるというもの。これはaとbを独立に考えればいいので、Muxに比べれば楽。多入力/多出力ここから先は多出力や多入力を扱うので、まともに絵を描いているとすごいサイズになってしまいます。使うゲートの数もかなり増えます。HDLで記述するだけでいいや。hirak/nand2tetris-memoたぶん続く。NAKANOSeesaaブログ×この広告は180日以上新しい記事の投稿がないブログに表示されております。