gpt4 book ai didi

verilog - 如何在 verilog 中设计 16 位进位前瞻加法器

转载 作者:行者123 更新时间:2023-12-02 15:12:24 25 4
gpt4 key购买 nike

我在使用 verilog 设计 16 位进位超前加法器时遇到了一些复杂情况。我这里有代码:

  module fulladder(a, b, c, s, cout);
input a, b, c;
output s, cout;

xor #0
g1(w1, a, b),
g2(s, w1, c);
and #0
g3(w2, c, b),
g4(w3, c, a),
g5(w4, a, b);
or #0
g6(cout, w2, w3, w4);
endmodule

我了解端口的工作原理,但我是否使用向量?

附:它是结构性的verilog。请不要给我完整的代码。只是需要一些理解。谢谢

最佳答案

我们的 friend Wikipedia has a bit about Carry Look-Ahead 。这些通常以 4 位阶段组合在一起。 4 个全加器,带有额外的逻辑来计算进位。

假设问题中指定了全加器,并添加了生成 g 和传播 p 输出,4 位 block 可能看起来像这样:

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;.

仍然需要实现进位查找的逻辑,wikipedia article应该告诉你需要什么。在此代码中它们是 C1、C2、C3 和 C4,即进位[1]、进位[2]、进位[3] 和 cout。

要创建 16 位加法器,您可以使用其中的 4 个 4 位部分。

关于verilog - 如何在 verilog 中设计 16 位进位前瞻加法器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13501993/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com