我正在创建一个仅使用结构的加法器和累加器。以下是我所做的:
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。
如何将我的触发器的输出作为输入连接到我的加法器?
以下是我作为参考的加法器和累加器的原理图。
答案 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位加法器。没有什么特别之处。