VPI:Verilog与C相互调用
参考 :深入浅出FPGA-18-VPI
1 安装C编译器
windows环境下安装Mingw。编译器版本要和Questasim或modelsim版本相对应,(32位还是64位),并将bin目录添加至环境变量path
2 编写verilog和c程序
新建文件夹,编写相应的hello.v 和 hello.c
hello.v
module hello;
initial $hello;
endmodule
hello.c
/*
* vpi simple test
* rill,2014-03-21
*/
#include "vpi_user.h"
static PLI_INT32 hello(PLI_BYTE8 * param) {
vpi_printf("Hello Rill!\n");
return 0;
}
// Associate C Function with a New System Task
void registerHelloSystfs(void) {
s_vpi_systf_data task_data_s;
vpiHandle systf_handle;
task_data_s.type = vpiSysTask;
task_data_s.sysfunctype = vpiSysTask;
task_data_s.tfname = "$hello";
task_data_s.calltf = hello;
task_data_s.compiletf = 0;
task_data_s.sizetf = 0;
task_data_s.user_data = 0;
systf_handle = vpi_register_systf(&task_data_s);
vpi_free_object(systf_handle);
}
// Register the new system task here
void (*vlog_startup_routines[]) () = {
registerHelloSystfs,
0 // last entry must be 0
};
代码意思先不要管,先能跑起来再说。
3 run code
1 建立work文件夹,
vlib work
如果再modelsim/questa中新建工程时,目录中会自动生成work文件夹,这里我们全程使用vscode,故需要自己手动建立work文件夹
2 在work中存放hello.c和hello.v相关信息
vlog hello.c
vlog hello.v
3 编译链接
gcc -c -I E:\questasim\include hello.c
路径为modelsim或questasim的路径
gcc -shared -Bsymbolic -o hello.dll hello.o -L E:\questasim\win64 -lmtipli
4 运行
vsim -c -pli hello.dll hello
run -all
运行结果
5 退出
quit
后续再增加每条命令的具体意思。