#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