Make/Day

毎日なにか作ります

14日目 ~多ビット、多入力化~

こんにちは!今日はデジタル回路の話題について紹介します。
まずは論理ゲートの多ビット化!
といっても、入出力の本数を増やすだけなので、直感的に理解できるものかもしれません。
まず図を見てもらうと、

1bitの入力
nbit入出力

となるだけです。
要するに、1本の信号線ではなくて、N本束ねてゲートを扱うというだけです。例えばN=16本としてをソースコードにすると、

module Or16 (
    input wire [15:0] a, b,
    output wire [15:0] out
);
    Or U0(a[0], b[0], out[0]);
    Or U1(a[1], b[1], out[1]);
    Or U2(a[2], b[2], out[2]);
    Or U3(a[3], b[3], out[3]);
    Or U4(a[4], b[4], out[4]);
    Or U5(a[5], b[5], out[5]);
    Or U6(a[6], b[6], out[6]);
    Or U7(a[7], b[7], out[7]);
    Or U8(a[8], b[8], out[8]);
    Or U9(a[9], b[9], out[9]);
    Or U10(a[10], b[10], out[10]);
    Or U11(a[11], b[11], out[11]);
    Or U12(a[12], b[12], out[12]);
    Or U13(a[13], b[13], out[13]);
    Or U14(a[14], b[14], out[14]);
    Or U15(a[15], b[15], out[15]);
endmodule

となります。

次に、多入力化も紹介します。これは、複数bitの入力結果から出力を求めるゲートとなります。
例えば、以下の図のような8入力のORを考えてみます。

8入力ORゲート

この場合、8つの入力のうちどれか一つでも1(ON)になれば、出力は1になります。そして、すべての入力が0の時のみ出力は0になります。
つまり、8つの入力に対してそれぞれORを取っていかなくてはならないので、以下のようなverilogコードになります。

module Or8Way (
    input wire [7:0] in,
    output out
);
    wire w1,w2,w3,w4,w5,w6;
    Or U1(in[1], in[0], w1);
    Or U2(in[3], in[2], w2);
    Or U3(in[5], in[4], w3);
    Or U4(in[7], in[6], w4);    
    Or U5(w1, w2, w5);
    Or U6(w3, w4, w6);
    Or U7(w5, w6, out);    
endmodule

このコードでは、U1~U4により8つの入力のORをそれぞれ取り、それを4本の出力に、それらをさらにORで処理して最終的に1つの出力になるように段階的に書き表しています。

今日は論理ゲートの多ビット、多入力化の記述を書きました。次回は、マルチプレクサで同様の処理を行っていきます。
複雑な処理系まではまだ遠い...。

参考書籍