2015-01-27 3 views
0

У меня есть триггер с асинхронным сбросом и разрешением. Вот мой код:Verilog D-Flip-Flop не перезаписывается после асинхронного сброса

module DFF_aSR(in, enable, clock, reset, out); 
input in, enable, clock, reset; 
output out; 
reg out; 

always @ (posedge clock or posedge reset) begin 
    if (reset) begin 
     out <= 1'b0; 
    end 
    else if (enable) begin 
     out <= in; 
    end 
end 
endmodule 

Но вот мой полученный сигнал, который показывает, что relatch не происходит после сброса, почему это так?

flip flop waveform

+0

Сброс включен каждый раз, когда 'in' и' en' являются высокими. 'out' может подниматься только на posedge' clock' с 'reset' low,' en' high и 'in' high' – Greg

+0

@Greg, я понимаю ваше объяснение, но я до сих пор не знаю, как разрешить вопрос. – MMP

+0

Вам нужно изменить стимул testbench, а не ваш дизайн. – Greg

ответ

1

Защелка выход должен идти высокими, если/когда нарастающий фронт тактового импульса происходит с данными стабильно высоким и сброса стабильно низким. Единственное, что я вижу, это до первого импульса сброса. Если вы хотите, чтобы защелка захватила сигнал, например. время 110ns, вы должны убедиться, что вход сброса становится низким до этого. Если ваше намерение состоит в том, что сброс должен срабатывать по краю, а не по уровню, вам может понадобиться использовать пару флопов, один из которых запускается с помощью часов, а другой - сбросом, проводной так, что выход D первого подключается к Q вторых, а D второго соединяется с/Q первого. Подача выходов защелок в вентиль XOR даст сигнал, который укажет, какой сигнал имел самый последний фронт (предупреждение: одновременные нарастающие края могут вызвать метастабильность). Сигнал, который вы, кажется, хотите, может быть сформирован путем принятия «И» запертых данных с выходом XOR, а также, возможно, некоторых ворот предотвращения опасности.

Смежные вопросы