¿Cuál es el uso de 'importar' en SystemVerilog?

1

Una vez que se incluye un paquete, se compila el archivo. Entonces, ¿por qué es necesario importar el mismo paquete?

    
pregunta tollin jose

1 respuesta

6

Hay un artículo interesante aquí con respecto al diferencia entre import y 'include cuando se trata de paquetes. Voy a intentar resumirlo aquí.

Cuando 'include un archivo, básicamente dice tomar el contenido de ese archivo y pegarlo en la ubicación de la declaración de inclusión. Este es efectivamente el mismo comportamiento que #include en C / C ++.

Genial, estás pensando, ahora tenemos todo en el archivo, ¿por qué no podemos usarlo? Imagina el caso en el que estás declarando un paquete en SV. Si 'include un archivo que contiene una clase A en dos paquetes diferentes P y Q , básicamente está haciendo una copia diferente en cada paquete, lo que debido a la forma en que SV maneja los tipos será incompatible ( ahora tienes una clase llamada P::A y otra llamada Q::A ).

Aquí es donde entra import . A diferencia de 'include , la declaración import no copia las definiciones que se incluyen en el archivo, en lugar de eso simplemente las hace visibles. Esto es similar a la forma en que funciona el using namespace en C ++. Digamos que todavía 'include la clase A en el paquete P como antes. Pero ahora, en lugar de incluir A directamente en el paquete Q , import P::A en su lugar, tanto P como Q ahora contienen la misma clase P::A en lugar de tener dos diferentes.

Así que en resumen:

  • 'include copia el contenido del archivo al hacer una copia local de cualquier clase / tipo / etc.
  • import no se copia, sino que hace visibles las declaraciones de paquetes existentes en el archivo actual.
respondido por el Tom Carpenter

Lea otras preguntas en las etiquetas