Verilog 我正在使用摩尔电路制作一个交通灯控制器,带有N/S灯和E/W灯,我的输出一直显示为全X';s

Verilog 我正在使用摩尔电路制作一个交通灯控制器,带有N/S灯和E/W灯,我的输出一直显示为全X';s,verilog,Verilog,我已经运行了文件,并检查了gtk波,我无法找出我的线路哪里出了问题。我使用的是一个摩尔电路,只有一个输入。我只需要有人帮我找出我把线路弄乱的地方。 谢谢 模块通信量(T、CLK、GN、YN、RN、GE、YE、RE) endmodule您的代码没有正确的重置,并且您的线路上有多个驱动程序 下面的语句不是一个简单的初始化语句 wire gNplus = 1'b1; wire yNplus = 1'b0; ... 这些声明与 wire gNplus; assign gNplus = 1'b1;

我已经运行了文件,并检查了gtk波,我无法找出我的线路哪里出了问题。我使用的是一个摩尔电路,只有一个输入。我只需要有人帮我找出我把线路弄乱的地方。 谢谢

模块通信量(T、CLK、GN、YN、RN、GE、YE、RE)


endmodule

您的代码没有正确的重置,并且您的线路上有多个驱动程序

下面的语句不是一个简单的初始化语句

wire gNplus = 1'b1; 
wire yNplus = 1'b0; 
...
这些声明与

wire gNplus;
assign gNplus = 1'b1; 
wire yNplus;
assign yNplus = 1'b0; 
现在您有了另一组语句:

assign gNplus = ~T * ~yN;
assign yNplus = gN;
...
使用不同的值驱动相同的导线两次。结果值将为
X

以下不一定是寄存器的正确初始化。首先,它并不总是可以合成的。其次,它是在模拟时间0之前完成的,初始模拟步骤的任何副作用都可能用错误的值重新写入它们。你应该想出一个触发器的复位序列

reg gN = 1'b1;
reg yN = 1'b0;
...
一些其他的旁注

  • 此语句在代码中起什么作用:
    assignclk=0?您在测试台上将时钟初始化为
    1
    。不过,最好是在初始块中完成
  • 使用CLK信号后,在测试台上声明CLK信号。通过这种方式,verilog可以使用默认类型,通常是
    wire

看起来EE中的文章已被删除。
assign gNplus = ~T * ~yN;
assign yNplus = gN;
...
reg gN = 1'b1;
reg yN = 1'b0;
...