2008-08-29 18 views
15

¿Qué significa si una tarea se declara con la palabra clave automática en Verilog?Tarea automática Verilog

task automatic do_things; 
    input [31:0] number_of_things; 
    reg [31:0] tmp_thing; 
    begin 
    // ... 
    end 
endtask; 

Nota: Esta pregunta se debe principalmente a que tengo curiosidad por si hay programadores de hardware en el sitio. :)

Respuesta

14

Significa que la tarea es reentrante: los elementos declarados dentro de la tarea se asignan dinámicamente en lugar de compartirse entre diferentes invocaciones de la tarea.

Ves - algunos de nosotros Verilog ... (uf)

3

La palabra clave "automático" también le permite escribir funciones recursivas (desde verilog 2001). Creo que deberían ser sintetizables si tocan fondo, pero no estoy seguro de si tienen soporte de herramientas.

Yo también, hago verilog!

1

Como dicen Will y Marty, la automática fue pensada para funciones recursivas.

Si se llama a una función normal (es decir, no automática) con diferentes valores y el simulador la procesa en el mismo segmento de tiempo, el valor devuelto es indeterminado. ¡Eso puede ser un error bastante difícil de detectar! Esto es solo un problema de simulación, cuando se sintetiza la lógica será correcta.

La función automática corrige esto.

21

"automático" significa de hecho "reentrada". El término en sí es robado de los lenguajes de software; por ejemplo, C tiene la palabra clave "auto" para declarar variables que se asignan en la pila cuando se ejecuta el ámbito en el que está, y luego se desasigna, de modo que múltiples invocaciones del mismo alcance no ver los valores persistentes de esa variable. La razón por la que puede que no haya oído hablar de esta palabra clave en C es que es la clase de almacenamiento predeterminada para todos los tipos :-) Las alternativas son "estáticas", lo que significa "asignar esta variable estáticamente (a una única ubicación global en la memoria), y se refieren a esta misma ubicación de memoria durante la ejecución del programa, independientemente de cuántas veces se invoque la función "y" volátil ", lo que significa que" esto es un registro en otro lugar en mi SoC o algo en otro dispositivo que no tengo control, compilador, no optimice las lecturas para mí, incluso cuando crea que conoce mi valor de lecturas anteriores sin escrituras intermedias en el código ".

"automático" está diseñado para funciones recursivas, pero también para ejecutar la misma función en diferentes hilos de ejecución al mismo tiempo. Por ejemplo, si "bifurca" N bloques diferentes (usando el enunciado tenedor-> unión de Verilog), y hace que todos invoquen la misma función al mismo tiempo, surgen los mismos problemas que una función que se hace llamar recursivamente.

En muchos casos, su código estará bien sin declarar la tarea o función como "automática", pero es una buena práctica ponerlo allí a menos que específicamente lo necesite.

Cuestiones relacionadas