0

我写了一个模块,它应该“或”一个带有延迟版本的信号。但是,当我模拟我的设计时,输出总是 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。

4

1 回答 1

0

我的代码出现编译错误。您可以尝试在 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
于 2020-08-14T10:50:37.203 回答