18日目 ~デマルチプレクサ~
こんにちは!今日はデジタル回路の話題から、デマルチプレクサ(略してDMUX)を紹介していきます!
この回路は、選択信号(sel)に従って、入力(in)を複数の出力(Yx)のうちのどれかに振り分ける機能を持ちます。
例えば、1入力4出力の場合、2bitで選択する必要があるので、以下のような真理値表と回路図になります。
この機能を実現するには、選択信号(sel)と、入力の論理積をとることで実現できます。DMUXの真理値表から、Y3の出力を見てみます。
すると、Y3=inなのはsel0, sel1が1の時のみなので
Y3=(sel1 ・ sel0) ・in
であることがわかります。
このようにしてほかの出力の分も作ってやると、以下のVerilogコードになります。
module DMux4Way ( input wire in, input wire [1:0] sel, output a,b,c,d ); wire w0, w1, w2, w3, nsel1, nsel2; wire [1:0] sel; Not U0(sel[0], nsel1); Not U1(sel[1], nsel2); And U3(nsel1, nsel2, w0); And U4(sel[0], nsel2, w1); And U5(nsel1, sel[1],w2); And U6(sel[0], sel[1],w3); And U7(in, w0, a); And U8(in, w1, b); And U9(in, w2, c); And U10(in, w3, d); endmodule
これで、nand2tetrisで登場するほとんどの基本モジュールは紹介しました。次回の更新からいよいよALUへ突入していきます!
参考書籍