Tengo un módulo Verilog simple con solo un DFF de reinicio sincrónico:
module scratch (input clk, reset_n, serial,
output reg serial_ff);
always @ (posedge clk) begin
if (!reset_n) begin
serial_ff <= 1'b0;
end
else begin
serial_ff <= serial;
end
end
endmodule // scratch
Al ejecutar un control de pelusa (hal 06.20-s004) en mi diseño para ASIC, recibo la siguiente advertencia en la categoría DFT:
*W,FFWASR (./scratch.v,9|0): Flip-flop 'serial_ff' does not have any asynchronous
set or reset.
------
Flip-flops must have asynchronous set or reset. If a flip-flop
does not have any asynchronous set or reset then it is not
controllable from primary inputs.
The following example illustrates this problem:
if(rst)
port_a <= '0';
elsif rising_edge(clk) then
port_a <= var_a;
port_b <= var_b;
end if;
In the above HDL code, the value of 'port_a' can be
brought to '0' using asynchronous reset 'rst', while
this is not the case with 'port_b'. This may cause
issues during simulation.
Ya estoy usando un reinicio síncrono para el FF, por lo que se está inicializando. Pero la advertencia me dice que use un reinicio asíncrono en su lugar. Pero ¿por qué es esto importante para la prueba? ¿Qué tipo de fallas puede identificar esta metodología DFT (R asíncrona en lugar de R síncrona)?
En resumen, ¿cuándo debería importarme y cuándo puedo ignorar la advertencia?
Actualización: encontré un parámetro mencionado al pasar en la documentación: "setreset_type". Me puse a leer todo el conjunto de documentos y parece que está sin documentar. Así que supongo que Cadence REALMENTE quiere que todos usen reinicios asíncronos religiosamente. Pero la verdad es que los reinicios no deben implementarse religiosamente, sino que el diseñador debe considerar los compromisos y los requisitos de diseño para cualquier tipo de reinicio. Esta es la conclusión contundente de las respuestas hasta el momento, ¡así que todos obtendrán puntos por ser útiles! Actualizaré si puedo encontrar cómo usar ese parámetro no documentado. Esa fue la única configuración posible que pude encontrar después de revisar todos los documentos relacionados. Por ahora, ignoro la advertencia ya que ya hemos considerado el diseño del restablecimiento desde el nivel de arquitectura del sistema.