Pregunta

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

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

Nota:Esta pregunta es sobre todo porque tengo curiosidad por ver si hay alguna programadores de hardware en el sitio.:)

¿Fue útil?

Solución

Esto significa que la tarea es re-participante - artículos declarados dentro de la tarea que se asigna de forma dinámica en lugar de compartir entre las diferentes invocaciones de la tarea.

Como veis, algunos de nosotros Verilog...(ugh)

Otros consejos

"automático" en realidad significa "re-participante".El término en sí mismo es robado de software de idiomas, por ejemplo, C tiene el "auto" de palabras clave para declarar variables como ser asignado en la pila cuando el ámbito es en el que se ejecuta, y se cancela la asignación de después, así que varias invocaciones de la misma el alcance no ver persistente de los valores de esa variable.La razón por la que no han oído hablar de la palabra clave this en C es que es el valor predeterminado de la clase de almacenamiento para todos los tipos :-) Las alternativas son "estáticas", que significa "asignar a esta variable de forma estática (para una sola 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 invoca la función", y "volátil", lo que significa que "este es un registro en otra parte de mi SoC o algo en otro dispositivo que no tengo control sobre;compilador, por favor, no optimizar lee para mí, incluso cuando usted piensa que usted sabe que mi valor de la anterior lee sin intermedio escribe en el código".

"automático" está destinado a funciones recursivas, sino también para el funcionamiento de la misma función en diferentes hilos de ejecución al mismo tiempo.Por ejemplo, si "tenedor" N bloques diferentes (utilizando Verilog de la horquilla->join), y llamar a la misma función, al mismo tiempo, los mismos problemas se plantean como una función se llama a sí mismo de forma recursiva.

En muchos casos, el código estará bien sin declarar la tarea o función como "automático", pero es una buena práctica poner ahí a menos que específicamente necesitan para ser de otra manera.

El "automático" palabra clave también permite escribir funciones recursivas (desde verilog 2001).Creo que debe ser synthesisable si de tocar fondo, pero no estoy seguro de que si tienen la compatibilidad de la herramienta.

Yo también, ¿ verilog!

Como Voluntad y Marty decir, el automático fue diseñado para funciones recursivas.

Si una normal (es decir,no automáticos) se llama a la función con valores diferentes y procesados por el simulador en el mismo intervalo de tiempo, el valor devuelto es indeterminado.Que puede ser bastante complicado error a punto!Esta es sólo una simulación, cuando se sintetiza la lógica será la correcta.

Lo que hace la función automática de las correcciones de este.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top