门级中的Verilog输出值X.

时间:2014-08-27 13:49:10

标签: simulation verilog hdl

我正在尝试制作一个计数高达18的计数器,并从那里需要回到0.我使用D触发器设计它,我使用K-Map计算函数并尝试实现在ISE设计套件的门级设计。

但是当我尝试在Simulation中测试它时,除了时钟之外的所有值都是X.我不知道它意味着什么,我怎么能克服它。

这是我的代码:

module denemeff(A, B, C, D, E, C_CLK);

output A, B, C, D, E;
input C_CLK; // C_CLK stands for Common Clock.
wire C_CLK;
wire A, B, C, D, E;
wire A_BAR, B_BAR, C_BAR, D_BAR, E_BAR;
wire Da, Db, Dc, Dd, De;
wire Da_1, Da_2, Db_1, Db_2, Db_3, Dc_1, Dc_2, Dc_3, Dd_1, Dd_2, Dd_3, De_1, De_2;
not notA(A_BAR, A);
not notB(B_BAR, B);
not notC(C_BAR, C);
not notD(D_BAR, D);
not notE(E_BAR, E);


//Operations for Da
and Da_and_1(Da_1, A_BAR, B, C, D, E);
and Da_and_2(Da_2, A, B_BAR, C_BAR, D_BAR);
or Da_final(Da, Da_1, Da_2);

//Operations for Db
and Db_and_1(Db_1, A_BAR, B, E_BAR);
and Db_and_2(Db_2, A_BAR, B, D_BAR);
and Db_and_3(Db_3, A_BAR, B, C_BAR);
or Db_final(Db, Db_1, Db_2, Db_3);

//Operations for Dc
and Dc_and_1(Dc_1, A_BAR, C_BAR, D, E);
and Dc_and_2(Dc_2, A_BAR, C, D_BAR);
and Dc_and_3(Dc_3, A_BAR, C, E_BAR);
or Dc_final(Dc, Dc_1, Dc_2, Dc_3);

//Operations for Dd
and Dd_and_1(Dd_1, B_BAR, C_BAR, D_BAR, E);
and Dd_and_2(Dd_2, A_BAR, D_BAR, E);
and Dd_and_3(Dd_3, A_BAR, D, E_BAR);
or Dd_final(Dd, Dd_1, Dd_2, Dd_3);

//Operations for De
and De_and_1(De_1, A_BAR, E_BAR);
and De_and_2(De_2, B_BAR, C_BAR, D_BAR, E_BAR);
or De_final(De, De_1, De_2);

dff d_ff_a(A, A_BAR, Da, C_CLK);
dff d_ff_b(B, B_BAR, Db, C_CLK);
dff d_ff_c(C, C_BAR, Dc, C_CLK);
dff d_ff_d(D, D_BAR, Dd, C_CLK);
dff d_ff_e(E, E_BAR, De, C_CLK);

endmodule

module dff(Q, Q_BAR, D, CLK);

input D, CLK;
output Q, Q_BAR;

wire D, CLK;
wire Q, Q_BAR;

not not1(D_BAR, D);

nand n1(X, D, CLK);
nand n2(Y, D_BAR, CLK);
nand n3(Q, Q_BAR, X);
nand n4(Q_BAR, Q, Y);

endmodule

1 个答案:

答案 0 :(得分:0)

你需要重置你的翻牌。根据您当前的DFF描述,Q的初始输出值是未知的,并且无法将其重置为已知值。因此,您会看到x值。

请参阅此处了解一些采用异步复位的基于NAND的DFF设计:

http://userpages.umbc.edu/~squire/cs313_l22.html

或者只是在行为上定义它们:

http://www.asic-world.com/examples/verilog/d_ff.html