Mezcla reiniciar y no reiniciar registros

0

Si debe mezclar fracasos de reinicio síncrono y no reinicio en un solo bloque siempre, esta sería la forma correcta ...

always @ (posedge clk)
if ( reset )
begin
    resettable_flops    <= 0;   // Resettable to 0.
    nonresettable_flops <= 'dx; // No reset function. Is this OK?
end
else
begin
     // Functionality goes here.
end

EDITAR: Si no escribo la asignación x, el ISE infiere la lógica para no cambiar el flop cuando se confirma el reinicio, es decir,! reset termina activando la habilitación del reloj, lo que quiero evitar ya que reiniciar es un gran fanout y puede afectar el tiempo . Sin embargo, la asignación de 1'dx funciona e ISE no utiliza el restablecimiento en la ruta de tiempo de nonresettable_flops.

    
pregunta Revanth Kamaraj

2 respuestas

3

Cuando se configura FPGA / CPLD, cada FF se establece en un estado definido de 0 (sin embargo, puede suceder que este comportamiento se pueda modificar).

Creo que tener una señal digital o registrarse en el estado X (indefinido) no es lo que quieres, y en realidad es incorrecto en la vida real , por lo tanto este X no se sintetizará, sin embargo trabajo para la simulación.

Además, en su código de muestra tiene reinicio síncrono , activado por clk . Si no desea cambiar el estado de FF en pos de clk cuando el reinicio es alto, simplemente no escriba la cláusula de asignación allí.

En realidad, este código Verilog se sintetiza en un circuito electrónico; no es un programa y está sujeto a diferentes términos de ejecución que el programa de computadora habitual.

    
respondido por el Anonymous
0

En la vida real, no hay una "X", ya que no tiene ningún significado, excepto en la simulación donde una señal es "desconocida" debido a que no está inicializada o a varios controladores. Es posible obtener desajustes en la simulación HDL / syn, pero es probable que esté bien, si X no causa problemas en el simulador HDL.

  • Creo que es una buena práctica inicializar todas las FF. Muestra la intención y se consideró explícitamente como parte del diseño ... incluso si es 0
  • Utilizo reinicios asíncronos en IO, reinicios síncronos internamente, con pocas excepciones y solo por una buena razón. El restablecimiento asíncrono de E / S es una buena práctica para evitar dañar el IO, accionar piezas externas, etc. Los restablecimientos síncronos internos ayudan a lograr el cierre de la sincronización.

este es un buen documento que tal vez no sea exactamente aplicable a su pregunta, pero tal vez se aplique en cierto sentido: Asynchronous & Reinicio síncrono Técnicas de diseño - Parte Deux

    
respondido por el CapnJJ

Lea otras preguntas en las etiquetas