verilog中的加法器和累加器。如何将触发器的输出连接到加法器的输入?

时间:2014-10-18 19:53:22

标签: verilog

我正在创建一个仅使用结构的加法器和累加器。以下是我所做的:

module adder_and_accum(add, clb, clc, iac, x2, in, acc, carry, carrynot, qn2, qn3, qn4, qn5);
   input add, clb, clc, iac, x2;
   input [3:0] in;
   output [3:0] acc;
   output carry, carrynot, qn2, qn3, qn4, qn5;

    wire adder1in2, adder2in2, adder3in2, adder4in2;
    wire sum1, sum2, sum3, sum4;
    wire ffin1;
    wire cinadder1, cinadder2, cinadder3;
    wire carrynot, clearcarry;

    four_to_one_mux mux1(0, 0, in[3], 0, add, iac, adder1in2);
    four_to_one_mux mux2(0, 0, in[2], 0, add, iac, adder2in2);
    four_to_one_mux mux3(0, 0, in[1], 0, add, iac, adder3in2);
    four_to_one_mux mux4(0, 1, in[0], 0, add, iac, adder4in2);

    full_adder f1(sum1, ffin1, cinadder1, acc[3], adder1in2);
    full_adder f2(sum2, cinadder1, cinadder2, acc[2], adder2in2);
    full_adder f3(sum3, cinadder2, cinadder3, acc[1], adder3in2);
    full_adder f4(sum4, cinadder3, 0, acc[0], adder4in2);

    or(clearcarry, clc, clb);

    d_flip_flop dff1(ffin1, x2, carry, carrynot, clc);
    d_flip_flop dff2(sum1, x2, acc[3], qn2, clearcarry);
    d_flip_flop dff3(sum2, x2, acc[2], qn3, clearcarry);
    d_flip_flop dff4(sum3, x2, acc[1], qn4, clearcarry);
    d_flip_flop dff5(sum4, x2, acc[0], qn5, clearcarry);

endmodule

这是触发器,多路复用器和全加器头:

module full_adder(sum, cout, cin, inp1, inp2);
module four_to_one_mux(in0, in1, in2, in3, select0, select1, out);
module d_flip_flop(d, clk, q, qn, reset);

触发器,多路复用器和全加器是我创建的模块,我知道它们有效,因为我已经单独测试过它们。它们都显示正确的波形。

我已经将问题缩小到触发器Q输出回到我的加法器输入。我的ACC总线输出只显示XXXX。

如何将我的触发器的输出作为输入连接到我的加法器?

以下是我作为参考的加法器和累加器的原理图。

enter image description here

1 个答案:

答案 0 :(得分:0)

在xilinx中切换到内置触发器解决了这个问题:

FDRE FDRE_inst (
    .Q(acc[0]), // 1-bit Data output
    .C(x2), // 1-bit Clock input
    .CE(ce), // 1-bit Clock enable input
    .R(clb), // 1-bit Synchronous reset input
    .D(sum4) // 1-bit Data input
);

我能够使用导线将触发器的输出连接回4位加法器。没有什么特别之处。