De Wikipedia, la enciclopedia libre
Saltar a navegación Saltar a búsqueda

SystemVerilog DPI (Interfaz de programación directa) es una interfaz que se puede utilizar para interconectar SystemVerilog con idiomas extranjeros. Estos idiomas extranjeros pueden ser C , C ++ , SystemC y otros. Los DPI constan de dos capas: un SystemVerilogcapa y una capa de idioma extranjero. Ambas capas están aisladas entre sí. El lenguaje de programación que se usa realmente como idioma extranjero es transparente e irrelevante para el lado System-Verilog de esta interfaz. No se requiere ni el compilador SystemVerilog ni el compilador de idioma extranjero para analizar el código fuente en el idioma del otro. Se pueden usar y admitir diferentes lenguajes de programación con la misma capa SystemVerilog intacta. Por ahora, sin embargo, SystemVerilog define una capa de idioma extranjero solo para el lenguaje de programación C.

La motivación de esta interfaz es doble. El requisito metodológico es que la interfaz permita construir un sistema heterogéneo (un diseño o un banco de pruebas) en el que algunos componentes se puedan escribir en un idioma (o más idiomas) distinto al SystemVerilog, en adelante denominado idioma extranjero. Por otro lado, también existe una necesidad práctica de una manera fácil y eficiente de conectar el código existente, generalmente escrito en C o C ++, sin el conocimiento y la sobrecarga de PLI o VPI. DPI sigue el principio de una caja negra: la especificación y la implementación de un componente están claramente separadas y la implementación real es transparente para el resto del sistema. Por lo tanto, el lenguaje de programación real de la implementación también es transparente, aunque este estándar solo define la semántica de enlace C.La separación entre el código SystemVerilog y el idioma extranjero se basa en el uso de funciones como la unidad de encapsulación natural en SystemVerilog. En general, cualquier función puede tratarse como una caja negra e implementarse en SystemVerilog o en el idioma extranjero de forma transparente, sin cambiar sus llamadas.

Explicación [ editar ]

La interfaz de programación directa ( DPI ) permite llamadas directas a funciones entre idiomas entre SystemVerilog y el idioma extranjero. Las funciones implementadas en idioma extranjero se pueden llamar desde SystemVerilog y dichas funciones se denominan funciones de importación . De manera similar, las funciones implementadas en SystemVerilog se pueden llamar desde idioma extranjero ( C / C ++ o System C ), tales funciones se denominan funciones de exportación . Los DPI permiten la transferencia de datos entre dos dominios a través de argumentos de función y retorno.

Función de importación y exportación [ editar ]

1) Importación de funciones: - Una función implementada en idioma extranjero se puede utilizar en SystemVerilog importándola. Una función de idioma extranjero utilizada en SystemVerilog se denomina función importada.

Propiedades de la función y tarea importadas [ editar ]

  1. Una función importada completará su ejecución instantáneamente y consumirá cero tiempo de simulación. La tarea importada puede consumir tiempo.
  2. La función importada puede tener argumentos de entrada, salida e inout.
    • Los argumentos formales de entrada no se modificarán. Si dichos argumentos se cambian dentro de una función, los cambios no serán visibles fuera de la función.
    • La función importada no asumirá ningún valor inicial de los argumentos de salida formales. El valor inicial de los argumentos de salida es indeterminado y depende de la implementación.
    • La función importada puede acceder al valor inicial de un argumento inout formal. Los cambios que realiza la función Imported a un argumento formal inout serán visibles fuera de la función.
  3. Una función importada no liberará la memoria asignada por el código SystemVerilog ni esperará que el código SystemVerilog libere la memoria asignada por el código externo o (compilador externo).
  4. Una llamada a una tarea importada puede resultar en la suspensión del subproceso que se está ejecutando actualmente. Esto ocurre cuando una tarea importada llama a una tarea exportada y la tarea exportada ejecuta un control de retardo, un control de eventos o una declaración de espera. Por lo tanto, es posible que una tarea importada esté activa simultáneamente en varios subprocesos de ejecución.
  5. Una función o tarea importada se puede equipar con propiedades especiales llamadas puras o contexto.

Tareas y funciones puras y contextuales [ editar ]

Funciones puras [ editar ]

Una función cuyos resultados dependen únicamente del valor de sus argumentos de entrada sin efectos secundarios se llama función pura.

Propiedades de funciones puras [ editar ]

  1. Solo las funciones no nulas sin salida o entrada se pueden llamar como funciones puras.
  2. Las funciones especificadas como Pure no tendrán efectos secundarios, sus resultados deben depender únicamente de los valores de sus argumentos de entrada.
  3. Una llamada de función pura se puede eliminar de forma segura si su resultado no es necesario o si sus resultados para el mismo valor de argumentos de entrada están disponibles para su reutilización sin necesidad de recalcular.
  4. Se supone que una función pura no realiza directa o indirectamente lo siguiente:
    1. Realice cualquier operación de archivo.
    2. Lea o escriba cualquier cosa en la variable de entorno, memoria compartida, sockets, etc.
    3. Acceda a cualquier dato persistente como variable global o estática.
  5. Una tarea importada nunca se puede declarar pura.

Funciones y tareas de contexto [ editar ]

Una tarea o función importada que llama a tareas o funciones "exportadas" o accede a objetos de datos de SystemVerilog distintos de sus argumentos reales se denomina tarea o función de contexto.

Propiedades de funciones y tareas de contexto [ editar ]

1) Una tarea o función importada de contexto puede acceder (leer o escribir) cualquier objeto de datos SystemVerilog llamando (PLI / VPI) o llamando a la tarea o función Exportar. Por lo tanto, una llamada a la función o tarea de contexto es una barrera para la optimización del compilador SystemVerilog.

Declaración de importación [ editar ]

importar función  " DPI - C " int calc_parity (entrada int a);

Declaración de exportación [ editar ]

exportar  "DPI-C"  my_cfunction  =  function  myfunction ;

Llamar a funciones de Unix [ editar ]

El código SystemVerilog puede llamar a funciones Unix directamente importándolas, sin necesidad de un contenedor.

Ejemplo de PPP [ editar ]

Llamar a funciones 'C' en SystemVerilog [ editar ]

C - archivo de código [ editar ]

#include  <stdio.h>#include  <stdlib.h>extern  int  add ()  {  int  a  =  10 ,  b  =  20 ;  a  =  a  +  b ; printf ( "Adición exitosa y resultado =% d \ n " ,  a );  return  a ; }

Archivo de código SystemVerilog [ editar ]

módulo  tb_dpi ; función de importación  " DPI - C " int add ();  importar función  " DPI - C " int sleep (input int secs);  int  j ;  initial  begin  $ display ( "Ingresando en SystemVerilog Initial Block" );  # 20  j  =  agregar ();  $ display ( "Valor de J =% d" ,  j );  $ display ( "Dormir durante 3 segundos con función Unix" );  dormir ( 3 );  $ display ( "Salir del bloque inicial de SystemVerilog" );  # 5  $ acabado ;  final endmodule

Referencias [ editar ]

  • Gopi Krishna (9 de noviembre de 2005). "Tutorial de SystemVerilog DPI" .
  • Tutorial de SystemVerilog DPI de Project VeriPage