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
Но вот мой результирующий сигнал, который показывает, что повторное связывание не происходит после сброса, почему это так?
1 ответ
Выходной сигнал защелки должен быть высоким, если / когда нарастающий фронт тактового сигнала происходит со стабильно высоким уровнем данных и стабильно низким сбросом. Единственный такой фронт, который я вижу, перед первым импульсом сброса. Если вы хотите, чтобы защелка захватила сигнал, например, в момент времени 110 нс, вы должны убедиться, что перед этим на входе сброса будет низкий уровень. Если вы предполагаете, что сброс должен быть инициирован по фронту, а не по уровню, вам может потребоваться использовать пару флопов, один из которых запускается по часам, а другой - по сбросу, проводной, так что выход D первого подключается к Q второе, и D второго соединяется с /Q первого. Подача выходов защелок в вентиль XOR даст сигнал, который укажет, какой сигнал имел самый последний передний фронт (предупреждение: одновременные передние фронты могут вызвать метастабильность). Сигнал, который вам нужен, может быть сформирован путем взятия "И" зафиксированных данных с выводом XOR, а также, возможно, с некоторыми воротами для предотвращения опасности.