"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.