Make/Day

毎日なにか作ります

18日目 ~デマルチプレクサ~

こんにちは!今日はデジタル回路の話題から、デマルチプレクサ(略してDMUX)を紹介していきます!

この回路は、選択信号(sel)に従って、入力(in)を複数の出力(Yx)のうちのどれかに振り分ける機能を持ちます。
例えば、1入力4出力の場合、2bitで選択する必要があるので、以下のような真理値表と回路図になります。

デマルチプレクサ
DMUXの真理値表

この機能を実現するには、選択信号(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へ突入していきます!

参考書籍