¿Por qué no se pueden asignar registros a múltiples bloques siempre en un Verilog sintetizable?

4

La respuesta aceptada a esta pregunta señala que "cada variable reg solo se puede asignar en como máximo una declaración always ". Está claro que en muchos casos, no tiene sentido asignar un reg a varios bloques always . Sin embargo, parece que podría haber instancias con significado de hardware de reg en diferentes bloques siempre.

Por ejemplo, ¿qué sucede si se asigna un mismo reg a always @(posedge clk1) , always @(posedge clk2) donde clk1 , clk2 nunca se supera al mismo tiempo? No habría condición de raza.

¿Por qué hay una "regla estricta" con respecto a reg s en diferentes bloques always ?

    
pregunta Randomblue

2 respuestas

2
  

Por ejemplo, ¿qué sucede si se asigna un mismo registro a siempre @ (posedge clk1), siempre @ (posedge clk2) donde clk1, clk2 nunca se repite al mismo tiempo? No habría condición de raza.

El caso que mencionas no será sintetizable. El flip-flop que implementa el reg solo se puede sincronizar desde uno fuente.

Como nota aparte, me gustaría aclarar que la regla de que reg s tiene afinidad con los bloques always afecta a la capacidad de síntesis, no a la validez. El simulador de software manejará asignaciones de diferentes bloques always sin ningún problema.

    
respondido por el avakar
1

Aunque es posible que sepa que dos flancos de reloj nunca llegarán simultáneamente, el sintetizador no puede asumir eso. Es posible construir un circuito de costo razonable que trabe D1 en el borde ascendente de C1 y D2 en el borde ascendente de C2, siempre que los bordes ascendentes de C1 y C2 estén siempre suficientemente separados. Por otro lado, un par de bloques "siempre" indicaría que un circuito de este tipo también debería correctamente y sin fallos, manejar el caso en el que el pestillo comience a funcionar bajo, D1 y D2 son ambos altos, y C1 y C2 llegan en secuencia arbitraria, Con el tiempo arbitrario entre ellos. Incluso si un sintetizador pudiera generar tal cosa, el costo del circuito sería más del doble de lo que se necesitaría para manejar el caso en el que C1 y C2 siempre están separados.

    
respondido por el supercat

Lea otras preguntas en las etiquetas