/var/log/messages

Apr 2, 2015 - 2 minute read - Comments - programming

マルチプレクサ (nand to tetris(3))

マルチプレクサは

Y = ( A \cdot S) + (B \cdot \bar{S})

で表現されるとのこと。むむむ。

hdl てきにはこうなるのかな。

(a And sel) Or (b And (Not sel))

こりゃ凄い。この答えを考えて出す、のが訓練なのか。つうかよく考えれば Or 使えば条件分岐を実装できるんですね。むむむ、修行が足りぬ。

とりあえず本当に出力が期待値通りなのかを机上にて確認。

a b s out
0 0 0  0
0 0 1  0
0 1 0  1
0 1 1  0
1 0 0  0
1 0 1  1
1 1 0  1
1 1 1  1

む、まんまですね。でも実装盛り込んだら駄目って言わてるのが今です。記述は以下なカンジ。

And(a=a, b=sel, out=tmpa);
Not(in=sel, out=notsel);
And(a=b, b=notsel, out=tmpb);
Or(a=tmpa, b=tmpb, out=out);

その後

ありゃ、一つづつ実行したら動いたな。よく見てみるに Mux.cmp と比較して N.G. って言われているみたい。一つづつ、だと .cmp との比較が行なわれないのかな。

と、思ったら

Mux.cmp の中身が以下。

|   a   |   b   |  sel  |  out  |
|   0   |   0   |   0   |   0   |
|   0   |   0   |   1   |   0   |
|   0   |   1   |   0   |   0   |
|   0   |   1   |   1   |   1   |
|   1   |   0   |   0   |   1   |
|   1   |   0   |   1   |   0   |
|   1   |   1   |   0   |   1   |
|   1   |   1   |   1   |   1   |

これ、違いますよね。。

結局

Mux.cmp を修正してしまったのですが、いいのかなorz

追記

やはりナチュラルなボケをカマシていた模様。瑞慶覧さんから

sel=0 のときは a を選んでるのか b なのか

というご指摘を頂き、テキスト見てみたら sel=0 の時 a を選択、という事でした。ので上の Mux.cmp が正しいですね。。Mux.hdl を修正してリポジトリに反映させております。ありがとうございます。

nand to tetris git init できない?

comments powered by Disqus