AnsweredAssumed Answered

QuestaSim pli simulation cannot find symbols

Question asked by yanxianghuang on Jul 10, 2015
Latest reply on Jul 13, 2015 by chris_balcom

I am using QuestaSim for Verilog simulation. The simulation need some systemC functions for co-simulation.


Here's where I encounters the problem:


First I compile the .C file into .o file


~/mentor/release2015/questa_v10.4/questasim/gcc-4.7.4-linux_x86_64/bin/gcc \

-lz -std=c99 -c -g  -fPIC -DMODELSIM_VPI -fno-stack-protector\

-I/imec/software/mentor/release2015/questa_v10.4/questasim/include/ \

../src/elf-loader/elf-loader.c ../src/elf-loader/vpi_wraper.c \ 

../src/jtag_vpi/jtag_vpi.c \


I get no warning or errors. Then I generate .vpi files from the .o file, again no warning or errors:


~/mentor/release2015/questa_v10.4/questasim/gcc-4.7.4-linux_x86_64/bin/gcc \

-lm -lz -shared -Bsymbolic \

-o jtag_vpi.vpi jtag_vpi.o


~/mentor/release2015/questa_v10.4/questasim/gcc-4.7.4-linux_x86_64/bin/gcc \

-lm -lz -shared -Bsymbolic \

-o elf-loader.vpi  elf-loader.o vpi_wrapper.o


Note That I have two vpi: jtag_vpi and elf-loader. Then I start QuestaSim loading those two vpi.


vsim -c -L work -t 10ps work.dut \

-pli jtag_vpi.vpi -pli elf-loader.vpi



jtag_vpi  is OK. However, The other elf-loader keeps generating errors that I never get it right by trying out all the gcc configurations I know.



# Loading ./elf-loader.vpi

# ** Error (suppressible): (vsim-3197) Load of "./elf-loader.vpi" failed: ./elf-loader.vpi: undefined symbol: elf_strptr.

# ** Error (suppressible): (vsim-PLI-3002) Failed to load PLI object file "./elf-loader.vpi".



I have been working on this for few days and really appreciate if anyone will help.


Seems to me that ModelSim missed some libraries (e.g. for elf_strptr) the elf-loader.vpi is using. But in GCC there's no warning of that, meaning GCC can find those libararies, but not QuestaSim, why?


for the record: here's uname -a:

Linux MY_SERVER 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux