Me gustaría hacer tres preguntas sobre el bloqueo & asignación no bloqueante.
La primera pregunta es que cómo funcionan las instrucciones de bloqueo y no bloqueo cuando se combinan .
siguiendo el libro "FPGA_Prototyping_By_Verilog_Examples" dice que
Cuando se activa un bloque siempre, las expresiones del lado derecho de las asignaciones sin bloqueo se evalúan al comienzo del paso de tiempo.
Basándome en la declaración anterior sobre una declaración de no bloqueo, he esperado que el siguiente bloque siempre requiera dos relojes para asignar el valor de a & b al q0, pero el libro dice que puede hacerlo en un solo reloj ciclo.
always @(posedge clk)
begin
abO = a & b ;
qO <= abO;
end
A primera vista, he pensado que el valor de ab0 (RHS de asignación sin bloqueo) se almacenará en algún lugar antes de que se ejecute siempre el bloque y se use en q0 < = ab0 ; . Por lo tanto, asumí que el valor de ab0 se estimará en el primer ciclo de reloj y el valor estimado de ab0 se asignará a q0 en el segundo flanco ascendente del reloj.
Así que mi pregunta es, cuando el valor de RHS de las declaraciones no bloqueantes se decide cuando se usan con las declaraciones bloqueadoras. Si se determina independientemente de la declaración de bloqueo, por favor hágamelo saber.
La segunda pregunta es ¿Cómo afectan el hardware real las declaraciones de no bloqueo y bloqueo?
He leído muchos artículos que dicen que las asignaciones de no bloqueo y bloqueo no tienen ningún efecto en la síntesis, sino solo en la simulación. Si se trata solo de la simulación, ¿cómo funciona realmente el hardware para ejecutar las instrucciones dentro del bloque siempre? ¿Ejecuta secuencialmente las instrucciones una por una como el código C?
Por lo que sé, la regla básica es
- use la asignación de no bloqueo en el circuito secuencial.
- usa la asignación de bloqueo en el circuito de la comunidad.
Sin embargo, parece que el uso de la asignación de no bloqueo en el circuito combinacional y la asignación de bloqueo en el circuito secuencial son todos legítimos y están permitidos o incluso mezclados.
Por lo tanto, mi última pregunta es ¿Cuál es la ventaja de mezclar dos asignaciones o qué tipo de casos hay para usar asignación no bloqueante en el circuito combinatorio y < fuerte> bloqueo de asignación en circuito secuencial ?