Como usar SystemVerilog com simuladores da Cadence
Foma 1: Compilação e simulação em um só comando:
ncverilog +sv coisa.sv
Forma 2: Compilação e simulação em tempos separados
ncvlog coisa.sv -sv
ncelab worklib.coisa:module
ncsim worklib.coisa:module
Como usar SystemVerilog junto com C/C++
Arquivo pi_test.c
#include "svdpi.h" //SystemVerilog Direct Programming Interface Header File #include "pi_test.h" #include <math.h> //DPI = Direct Programming Interface double get_real_c() { // imported SV function // exercise DPI function - get calling scope printf("Function Calling HDL scope is %s \n", svGetNameFromScope(svGetScope())); return 3.14159; } void put_real_c(double n) { // imported SV function // exercise DPI function - get calling scope printf("Function Calling HDL scope is %s \n", svGetNameFromScope(svGetScope())); printf("pi + 5.0 = %f\n", n+5.0); }
Arquivo pi_test.h
double get_real_c(); void put_real_c(double n);
Arquivo pi_test.sv
module pi_test (); // map the C function name to the Verilog function name import "DPI-C" context get_real_c = function real get_real_v (); import "DPI-C" context put_real_c = function void put_real_v (real x); real pi; initial begin $display("real_test"); pi = get_real_v(); // get a real number from the C code $display("pi = %f", pi); // display it put_real_v(pi); // send the real number back to C code end endmodule
Arquivo Makefile
vai: ncvlog pi_test.sv -sv ncelab -dpiheader dpi.h worklib.pi_test:module gcc -m32 -fPIC -g -shared -o pi_test.so pi_test.c -I/`ncroot`/tools/include ncsim worklib.pi_test:module -sv_lib pi_test.so clean: rm -rf INCA_libs *.log *.so waves.shm
Observações:
No Makefile é necessário um TAB antes de qualquer comando que não é nome de alvo. Antes de digitar make, digite ius