У меня этот код ниже:асинхронный сброс загадочно настройки выходной рег
module timer(
input clk,
input reset,
output reg signal // <--- PROBLEMATIC SIGNAL
);
[email protected](posedge clk or posedge reset)
begin
if(reset)
signal <= 1;
else
signal <= 0;
end
endmodule
и этот испытательный стенд, который был выполнен на ModelSim:
`timescale 1ns/1ps
`define PERIOD 20
module timer_tb;
logic clk;
logic reset;
logic signal;
timer inst(
.clk(clk),
.reset(reset),
.signal(signal)
);
initial
begin
clk = 0;
forever clk = #(`PERIOD/2) ~clk;
end
initial
begin
reset = 0; //<--- RESET STARTS CLEANED.
#(`PERIOD)
reset = 1;
#(`PERIOD)
reset = 0;
#(`PERIOD*3)
reset = 1;
#(`PERIOD)
reset = 0;
#(`PERIOD*3)
$display("End of the simulation");
$stop;
end
endmodule
Выходной рег signal
начинает ВЫСОКИЙ, но в коде, этот рег зависит от reset
, а reset
начинает DOWN. Я не понимаю, почему signal
регистр HIGH в начале моделирования, так как reset
начинается с уверенности. ВНИЗ.
Мне нужен signal
начиная с DOWN и устанавливаться только IF reset
перейти к 1 (состояние posedge reset
точно так же, как мой код).
Пожалуйста, взгляните на this print of the waveform для ясного понимания моей проблемы.
Спасибо вам за ваше объяснение , Вы правы, я запускаю имитацию уровня ворот в программном обеспечении modelsim-altera. Я попытался применить ваши предложения (изменения от логики до бит в testbench и инициализировать clk и сбросить как 0 в той же строке, что и декларация.), Но я все равно получаю тот же результат. Это невероятно. [Сигнал] (http://postimg.org/image/i2rg1rkhn/) по-прежнему переключается на 1 и возвращается, когда clk встает, даже все, начиная с 0 (не X). Это очень любопытно. –