Verilog模拟将x作为输出

Verilog模拟将x作为输出,verilog,Verilog,我试图用veriwell模拟以下电路。然而,模拟结果给出了每个网络的值x。由于电路没有任何反向回路,我想每个网络应该有1或0个信号 module dff (CK,Q,D); input CK,D; output Q; wire NM,NCK; wire NQ,M; nmos N7 (M,D,NCK); not P3 (NM,M); nmos N9 (NQ,NM,CK); not P5 (Q,NQ); not P1 (NCK,CK); endmodule mod

我试图用veriwell模拟以下电路。然而,模拟结果给出了每个网络的值x。由于电路没有任何反向回路,我想每个网络应该有1或0个信号

module dff (CK,Q,D);
input CK,D;
output Q;

  wire NM,NCK;
  wire NQ,M;

  nmos N7 (M,D,NCK);
  not P3 (NM,M);
  nmos N9 (NQ,NM,CK);
  not P5 (Q,NQ);
  not P1 (NCK,CK);

endmodule

module s27(clk, in1, in2, GO, HO, AO, BO, CO, DO, EO, FO, a1, a2, a3, a4, o1, o2);
input clk, in1, in2;
output GO, HO, AO, BO, CO, DO, EO, FO, a1, a2, a3, a4, o1, o2; 
wire AO, BO, CO, DO, EO, FO; 
wire a1, a2, a3, a4; 
wire o1, o2; 

  dff A(clk,AO,in1);
  dff B(clk,BO,in2);
  dff C(clk,CO,o1);
  dff D(clk,DO,a1);
  dff E(clk,EO,a2);
  dff F(clk,FO,o2);
  dff G(clk,GO,a3);
  dff H(clk,HO,a4);

  and AND2_1 (a1, AO, CO);
  and AND2_2 (a2, CO, BO);
  and AND2_3 (a3, AO, FO);
  and AND2_4 (a4, FO, BO);

  or OR2_1(o1, AO, BO);
  or OR2_2(o2, DO, EO);
endmodule
我正在使用以下测试台(使用脚本生成):

`时间刻度为1ns/1ps
模块测试台;
参数sOutFileName=“beSimOut.txt”;
参数宽度=3;
参数空间=1000;
参数nSimCycle=10;
/*模拟存储器*/
reg[nVectorWidth-1:0]mSimMemory[nVectorSpace-1:0];
/*模拟向量*/
reg[nVectorWidth-1:0]vSimVector;
/*基准变量*/
整数nOutFile,nIndex;
/*连接变量声明*/
导线clk、in1、in2、G0、H0、A0、B0、C0、D0、E0、F0、a1、a2、a3、a4、o1、o2;
/*驱动输入*/
分配clk=vSimVector[2];
赋值in1=vSimVector[1];
赋值in2=vSimVector[0];
/*模拟内存填充例程*/
任务填充模拟记忆;
开始
对于(nIndex=0;nIndex
关于我为什么没有得到正确的输出有什么想法吗


提前感谢。

当我试图用VCS模拟器编译您的代码时,我得到一个编译错误:

尚未声明标识符“GO”。如果不存在此错误 应为,请检查是否已将“默认”nettype设置为“无”

在testbench模块中,您声明了一条导线
G0
(数字零),但随后使用了
GO
(大写字母O)。你应该把零改成字母O


我认为这并不能完全解决您的问题,但这太复杂了,无法在评论中加以说明。

dff的建模不正确。对于当前dff,当CK高时,M将浮动(高-Z)

dff应如下所示:

not N1 (NCK,CK);
cmos C1 (M,D,NCK,CK);
cmos C2 (M,NNM,CK,NCK);
not N2 (NM,M);
not N3 (NNM,NM);
cmos C3 (NNQ,NNM,CK,NCK);
cmos C4 (NNQ,Q,NCK,CK);
not N3 (NQ,NNQ);
not N4 (Q,NQ);
或作为与非门:

nand DN1 (NM,D,CK);
nand DN2 (M,NM,CK);
nand DN3 (Q,NQ,NM);
nand ND4 (QN,Q,M);
或作为行为:

always @(posedge CK)
  Q <= D;
始终@(posedge CK)

Q哪些网络是
X
、您的输入或内部网络?您没有重置触发器,因此在初始化时它们将为X,但如果确实没有您声称的环回,则当输入通过时,它们应收敛到已知状态。@Tim是的,这就是我所期望的。但是,没有一个网络(输入除外)收敛到特定值。它们都给出了x的值。输入(包括clk)都按预期给出0/1。我想只需检查您的“dff”,并确保晶体管工作正常。您应该能够看到哪个电弧的行为不正确。@Tim我已经这样做了,甚至用简单的非门替换了晶体管,但它没有改变输出。
always @(posedge CK)
  Q <= D;