¿cuándo utilizamos la instrucción de inhabilitación en verilog? ¿Es posible desactivar un bloque fuera de ese bloque?

-2

Quiero deshabilitar un bloque utilizando una condición if fuera de ese bloque. Estoy recibiendo un error:

UNEXPECTED DISABLE EXPECTING ASSERT
    
pregunta twinkle

2 respuestas

4

Respuesta corta: no, especialmente si quieres un Verilog sintetizable.

Respuesta larga: 'deshabilitar' es para tareas y bloques con nombre, no módulos. Tiene una semántica ligeramente sorprendente: consulte enlace ; Algo similar a 'romper'. No es un verilog muy idiomático.

Si estás tratando de construir un bloque lógico computacional normal que tenga una señal de habilitación, envuelve toda tu lógica en if (enabled) begin ... end .

    
respondido por el pjc50
2

Un uso común para disable en su verilog testbench podría ser:

fork : wait_or_timeout
  begin : timeout
    #10_000; //#10ms
    $display("Timeout");
    $finish();
    disable wait_for_signal;
  end
  begin :wait_for_signal
    @(posedge SIGNAL);
    disable timeout;
  end
join

Aquí comenzamos 2 procesos paralelos, el simulador no ejecutará ningún otro código hasta que ambos se completen. Al usar deshabilitar, el primero en completar desactiva el otro.

Para mejorar la modularidad y la reutilización del código, se pueden utilizar generar declaraciones . Sin embargo, estas son constantes de tiempo de compilación, no deshabilitan ni apagan el hardware, hacen que el hardware exista o no exista en función de las opciones de configuración constante antes de ejecutar su sim o síntesis.

Para las técnicas de ahorro de energía, el uso de habilita en sus flip-flops con opciones de selección automática del reloj para la síntesis puede resultar en un buen ahorro de energía.

always @(posedge clk or negedge reset_n) begin
  if (~reset_n) begin
    //reset
  end
  else if (enabled) begin
    //<= nextvalue;
  end
  // no final else, if not enabled hold value
  //   this allows clk to be stopped
end
    
respondido por el pre_randomize

Lea otras preguntas en las etiquetas