memorandums

日々の生活で問題解決したこと、知ってよかったことなどを自分が思い出すために記録しています。

デマルチプレクサでけた ⇒ なんか嬉しい😆

2年生の少人数ゼミで以下の本の読書会?をやっています。

コンピュータシステムの理論と実装 ―モダンなコンピュータの作り方

コンピュータシステムの理論と実装 ―モダンなコンピュータの作り方

ちなみにこの著者らによるオンライン講座もあります。興味のある方はそちらもご覧ください。

Coursera | Online Courses From Top Universities. Join for Free

私も事前に書籍は目を通していますが、章末問題はその場で学生と一緒にやる感じです。ちょっと無責任な感じもしますが。。。知っているとついつい教えたくなってしまい、不必要に学びの機会を奪っているようにも感じてきたからです。

今日は(も?)一章の章末問題をやっていました。

上記の教科書には基本的なことは載っているのですが、どう作るかは自分で考えなければなりません。

学部生レベルの問題ですので。。。お恥ずかしい限りですが、デマルチプレクサを作るのに、結構、考えました。

以下の考え方や手順が正しいかはわかりません。誤りがあれば教えていただけると幸いです。

マルチプレクサは以下の説明が教科書にあります。この資料はインターネットで公開されているPDFファイルを引用したものです。

f:id:ke_takahashi:20180508172730p:plain

この回路を作るには、outが1のところに注目して、1つずつ回路を作っていきます。C言語風に書くと以下のような感じです。

out = a & !b & !sel || a & b & !sel || !a & b & sel || a & b & sel ;

これをHDLで書くと、まぁ、面倒なことになるので省略します。Notを予め用意し、3入力のAnd回路を2入力のAnd回路で合成して、複数のOr回路を結合してoutを求めます。

で、問題のデマルチプレクサです。

教科書の記述は以下です。

f:id:ke_takahashi:20180508173428p:plain

簡単そうに見えるのですが、この真理値表だけみて、いざAndやNotなどを組み合わせて作ろうとするとうまくいきません。

結論としては、これを上記のマルチプレクサのように表に直してあげる必要があります。

in sel a b
0 0 0 0
1 0 1 0
0 1 0 0
1 1 0 1

ここまでできてしまえば、あとはマルチプレクサのときと同じように出力が1となる条件に注目して以下のような式を実装すればいいのです。

a = in & !sel
b = in & sel

知識としてはコンピュータの原理は知っているつもりではありましたが、こういうのを1つずつ自分で作ってみると実感が湧きますね。それで今の仕事に影響があるかは微妙ですが。。。それより何よりパズル的で面白いです。はい。

ちなみに、この辺の解はちょっとググればあるのですが、自分で考えた方が楽しいですね。

■追記

帰宅後、ジョイコンガレージに入力してみました。

タップの状態に応じて、出力を左右に切り替えることができます。でまるちぷれくさぁ。。。です。以下がその回路。

f:id:ke_takahashi:20180508235829j:plain

そして動画です。

youtu.be