оператор assign в Questa Sim выдает x в качестве выходных данных

#verilog #simulator #questasim

#verilog #тренажёр #questasim

Вопрос:

Я написал модуль, который должен «или» выдавать сигнал с отложенной версией самого себя. Но, когда я моделирую свой дизайн, на выходе всегда получается 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.

Ответ №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