问题描述
我编写了一个模块,该模块应该“或”带有延迟版本的信号。但是,当我仿真设计时,输出始终为x而不是1。我不知道为什么。这是我写设计的方式:
module DUT(
input data_in,input dw,input rst,output error
);
wire Edge;
wire #4 delayed_data_in;
assign Edge = data_in ^ delayed_data_in;
assign delayed_data_in = data_in;
always@(dw,Edge,rst) //Latch 1
begin
if(rst)
begin
error <= 0;
end
else if(dw)
begin
error <= Edge;
end
end
endmodule
延迟版本的行为符合预期,但是Edge
和error
只是变为“ x”而不是1。
解决方法
我的代码出现编译错误。您可以尝试在edaplayground上的不同模拟器上编译代码。问题是您无法对网络(error
)进行程序分配。要解决该错误,请更改:
output error
收件人:
output reg error
通过这个简单的测试台,可以解决x:
module tb;
reg data_in;
reg dw;
reg rst;
wire error;
DUT dut (
// Inputs:
.data_in (data_in),.dw (dw),.rst (rst),// Outputs:
.error (error)
);
initial begin
data_in = 0;
dw = 0;
rst = 1;
#30 rst = 0;
#50 $finish;
end
endmodule