【问题标题】:assign statement in Questa Sim yields x as outputQuesta Sim 中的 assign 语句产生 x 作为输出
【发布时间】:2020-08-14 08:56:58
【问题描述】:

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

延迟版本的行为符合预期,但 Edgeerror 只是转到“x”而不是 1。

【问题讨论】:

    标签: verilog simulator questasim


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2018-03-29
      • 2017-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多