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.