マルチプレクサは
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 を修正してリポジトリに反映させております。ありがとうございます。