Каков тип сброса сигнала сброса always_latch .?

#verilog #system-verilog

Вопрос:

У меня не так много знаний о системном верилоге, и у меня есть следующий вопрос.

Как я знаю, если край сигнала сброса был вызван в списке чувствительности блока always, то тип сброса этого сигнала сброса является «асинхронным», мне нужно знать, каков тип сброса сигнала сброса always_latch?

 module test (input in_1,in_2,rst,clk,sig, output reg out_1,out_2,out_3);
  always_latch
  begin
    if(~rst) // what is the reset type of this reset signal.?
      out_3 <= 0;
    else if(~sig)
      out_3 <= in_1;
  end
  wire x,x2;
  second uu(x, x2, rst, clk, sig, out_1);
endmodule

module second(input i_1,i_2,r,c,sig, output reg o_1);
  reg z,zz;
  always@(negedge c or negedge r)
  begin
    if(~r) // asynchronous reset type
      z <= 0;
    else
      z <= i_1;
  end
  always@(posedge c or negedge r)
  begin
    if(~r)  // asynchronous reset type
       zz <= 0;
    else
      zz <= i_1;
  end
endmodule
 

Ответ №1:

Оба сброса являются асинхронными. У вас не может быть синхронного сброса в защелке, потому что нет часов. always_latch Конструкция в вашем примере создает неявный список чувствительности

 always @(rst or sig or in_1)
 

Причина always , по которой список чувствительности имеет значение a negedge r , заключается в том, чтобы отфильтровать изменение на восходящем краю r . Если бы у вас не было этого фильтра, восходящий край r активировал бы блок и обрабатывался бы так же, как и край часов.