私たちの友人のウィキペディアには、キャリールックアヘッドについて少し書かれています。これらは通常、4ビットの段階でまとめられます。キャリーを計算するための追加ロジックを備えた4つのフルアダー。
質問で指定されている全加算器を想定し、生成g
および伝搬p
出力を追加すると、4ビットブロックは次のようになります。
module four_bit_carry_lookahead (
input [3:0] a,
input [3:0] b,
input c, //Carry in
output [3:0] s, //Sum
output cout //Carry
);
wire [3:1] carry; // 3:1 to align numbers with wikipedia article
wire [3:0] p;
wire [3:0] g;
fulladder add0(.a(a[0]), .b(b[0]), .c(c), .s(s[0]), .cout() .g(g[0]), .p([0]) );
fulladder add1(.a(a[1]), .b(b[1]), .c(carry[1]), .s(s[1]), .cout() .g(g[1]), .p([1]) );
fulladder add2(.a(a[2]), .b(b[2]), .c(carry[2]), .s(s[2]), .cout() .g(g[2]), .p([2]) );
fulladder add3(.a(a[3]), .b(b[3]), .c(carry[3]), .s(s[3]), .cout() .g(g[3]), .p([3]) );
carry_lookahead(
.p (p ), //input [3:0]
.g (g ), //input [3:0]
.c (carry), //output [3:1]
.cout (cout ) //output
);
endmodule
必要な追加出力はですg = a & b;
p = a | b;
。
キャリールックアヘッドを実装するロジックは引き続き必要です。ウィキペディアの記事で、何が必要かを説明する必要があります。これらは、このコードではC1、C2、C3、およびC4であり、carry [1]、carry [2]、carry [3]、およびcoutになります。
16ビット加算器を作成するには、これらの4ビットセクションのうち4つを使用できます。