Valor de almacenamiento de una asignación condicional en Verilog

0

Supongamos que tengo la siguiente asignación

wire COND;
assign COND = A & B;

Los valores de A y B están cambiando entre verdadero y falso, sin embargo, una vez que ambos golpean 1 al mismo tiempo y COND = 1; Deseo mantener este COND como un valor verdadero (algo así como un disparador) en lugar de volver a 0 cuando A y B cambian.

¿Alguien sabe una buena manera de lograr esto?
¡Gracias!

    
pregunta stephchia

1 respuesta

0

He experimentado simuladores, sintetizadores, linters, etc. que se resisten cuando ven una declaración assign que se asigna directamente a sí misma. Lo marcan porque, por lo general, indica un cierre no deseado.

La mayoría de las prácticas de diseño se desorganizan mediante el uso de pestillos (sensibles al nivel) porque el retraso de la prórroga puede causar fallas que provoquen conductas indeseables. Hay algunos casos en que es necesario un pestillo. En estas situaciones las recomendaciones más comunes son:

  • use un bloque always @* ( always_latch si SystemVerilog) separado de otra lógica combinacional.
  • minimice la lógica en los pin (s) de habilitación; La lógica compleja tiene cambios más altos que causan fallas
  • Asignar con asignación sin bloqueo (preferida)
  • Tenga en cuenta que los sintetizadores pueden necesitar directivas para asignar a un tipo de pestillo específico (por ejemplo, SR-latch, D-latch, D-latch w / async reset / preset, etc.)

Tu pestillo debería verse así:

reg COND;
always @* begin
  if(A && B) begin
    COND <= 1'b1;
  end
end

Probablemente querrá una condición adicional para restablecer el pestillo y necesitará diseñar si la configuración o el restablecimiento deberían tener mayor prioridad.

    
respondido por el Greg

Lea otras preguntas en las etiquetas