Declaraciones de bloqueo y no bloqueo en el mismo bloque de procedimiento

0

Código

module block;
  reg a;
  reg b = 1'b0;
  reg c = 1'b1;

  initial begin
    c  = b;
    a <= c;
  end

endmodule

Simulé el fragmento de código que se muestra en la figura, esperando que el valor de a sea 1'b1 porque la declaración a < = c; no se bloquea y el RHS de la declaración se evalúa al comienzo del paso de tiempo (es decir, antes de la ejecución de c = b; ).

Pero este es el resultado que obtuve. ¿Por qué la salida es 1'b0 y no 1'b1 ?

PD: Sé que no es una buena práctica combinar las declaraciones de bloqueo y no bloqueo en el mismo bloque, pero quería saber cómo explica la IEEE std este caso especial.

    
pregunta electro_sm11

1 respuesta

3

Le has dado a c un valor predeterminado de 1, pero luego en el tiempo 0 asigna que sea igual a b (bloqueo). Así que la simulación copia el valor de b a c antes de continuar secuencialmente para realizar a <= b .

Lo que has escrito es esencialmente:

module block;
  reg a;
  reg b = 1'b0;
  reg c;

  initial begin
    c  = b;
    a <= b;
  end

endmodule
    
respondido por el pre_randomize

Lea otras preguntas en las etiquetas