SystemVerilog:如何在VCS模拟器中使用DPI调用连接C函数?
我有以下文件: C文件及其函数: //funcs.cSystemVerilog:如何在VCS模拟器中使用DPI调用连接C函数?,c,system-verilog,synopsys-vcs,system-verilog-dpi,C,System Verilog,Synopsys Vcs,System Verilog Dpi,我有以下文件: C文件及其函数: //funcs.c #include <stdio.h> void something() { printf("something\n"); sayHello(); } 我如何编译它并使其工作,这样当我从SV调用something()时,它将调用C函数,当我从C调用sayHello()时,它将调用SV函数?回答我自己: 使用VCS编译SV代码时,首先将其转换为C代码 从SV导出函数时,它会生成一个C头文件vc_hdrs.h,该文件
#include <stdio.h>
void something() {
printf("something\n");
sayHello();
}
我如何编译它并使其工作,这样当我从SV调用something()
时,它将调用C函数,当我从C调用sayHello()
时,它将调用SV函数?回答我自己:
使用VCS编译SV代码时,首先将其转换为C代码
从SV导出函数时,它会生成一个C头文件vc_hdrs.h
,该文件应包含在C文件中
所以我在C文件中做的一个更改是添加以下行:
#include "vc_hdrs.h"
然后,我刚刚将C函数文件添加到VCS编译命令中:
> vcs -sverilog hello_world.v funcs.c
它起作用了
我得到的结果是:
something
hello world
.一种适用于以下所有模拟器的解决方案是在导出到C的所有方法前面添加
#包括“svdpi.h”
和前缀extern
关键字。funcs.C应该如下所示:
#include <stdio.h>
#include "svdpi.h"
extern int sayHello();
void something() {
printf("something\n");
sayHello();
}
#包括
#包括“svdpi.h”
extern int sayHello();
使某物无效{
printf(“某物”);
你好;
}
来自
- §H.10.2示例2-简单压缩阵列应用
- §H.10.3示例3-复杂混合类型的应用
就这些。不需要添加额外的头文件嗨,我在这篇文章下面提供了一个很好的例子 Synopsys VCS 1) 使用标志编译C代码,并引入要添加的定义。 在本例中,我们的C代码需要define PYTHON_路径
#GCC in two steps for shared object
gcc -g -D 'PYTHON_PATH="'$PYTHON_DIR'"' -fPIC -Wall -I${VCS_HOME}/include -I/usr/include/python2.6/ -lpython2.6 -c ${PROJECTDIR}/verification/PVE/keycontrol/tb/keycontrol_C_code_wrapper.c
gcc -fPIC -shared -o keycontrol_C_code_wrapper.so keycontrol_C_code_wrapper.o
2) 您可以使用-LDFLAGS'-lpython2.6'
vcs -timescale=1ps/1ps -ntb_opts uvm -lca -kdb -full64 keycontrol_tb_top -debug_access+all+reverse -LDFLAGS '-lpython2.6'
3) 运行创建的模拟文件。调用simv包括-sv\u lib keycontrol\u C\u code\u包装器来导入C共享对象
#RUN C CODE
./simv -gui -ucli +DVE +UVM_NO_RELNOTES -l simv.log +UVM_TESTNAME=keycontrol_basic_test -do ../../verification/PVE/keycontrol/tools/keycontrol_ucli_init.synopsys -sv_lib keycontrol_C_code_wrapper
我必须在import语句中添加“context:
import“DPI-C”上下文函数void something()代码>
vcs -timescale=1ps/1ps -ntb_opts uvm -lca -kdb -full64 keycontrol_tb_top -debug_access+all+reverse -LDFLAGS '-lpython2.6'
#RUN C CODE
./simv -gui -ucli +DVE +UVM_NO_RELNOTES -l simv.log +UVM_TESTNAME=keycontrol_basic_test -do ../../verification/PVE/keycontrol/tools/keycontrol_ucli_init.synopsys -sv_lib keycontrol_C_code_wrapper