Imprimiendo correctamente desde SystemVerilog DPI

3

Tengo algún código VPI de verilog que estoy portando para usar SystemVerilog DPI, que se ejecutará en Modelsim y Verilator.

En VPI, uso vpi_printf () para la depuración y la información de estado. Esto no funciona cuando se ejecuta el DPI en Verilator. ¿Debería usar simplemente printf () en su lugar?

(Parece que debería ser una pregunta simple, pero los buenos ejemplos de SystemVerilog parecen ser escasos)

    
pregunta pjc50

1 respuesta

5

DPI no tiene comandos especiales de impresión. Puede usar C printf() o std::cout << "Your Message Here" << std::end regular. Puede encontrar algunos tutoriales razonables con su motor de búsqueda preferido con [systemverilog dpi] como su término de búsqueda.

Si quieres ser perezoso, puedes mantener #include <vpi_user.h> en tus archivos DPI para seguir usando vpi_printf()

Como alternativa, haga que su DPI llame a una función SV. Con este método, es posible agregar la marca de tiempo del simulador. Ejemplo:

my_sv.sv:

// ...
export "DPI-C" function dpi_print;
function void dpi_print(input string msg);
  $display("%t :: %s", $time, msg);
endfunction : dpi_print
// ...

mi_dpi.c:

#include <stdlib.h>
#include <stdio.h>
#include "svdpi.h"
...
extern dpi_print(const char* msg);
....
int some_c_func( /* ... */ ) {
  // ...
  dpi_print("message");
  // ...
}
    
respondido por el Greg

Lea otras preguntas en las etiquetas