modelsim用PLI的方法
本文简要说明windows下面的modelsim,如何调用PLI。
工具:
1.modelsim,我是6.5版
2.MinWG去官网下载
原理:
verilog提供的库非常有限,经常需要自己添加一些常用的“库函数”,而这些库函数,反映出来就是一些task,PLI的task。所谓PLI,就是programing language interface。这里提供了一个调用自己的函数的借口。而自己的函数,是以dll的方式存在的,而这个dll需要放到一个特定的位置,被modelsim找到,然后就可以被verilog调用了。
步骤:
1.用文本编辑器编辑保存c文件。
hello.c,内容如下:
#include "stdio.h"
#include "<modelsim_dir>/include/veriuser.h"
static PLI_INT32 hello()
{
printf("hello pli");
return 0;
}
s_tfcell veriusertfs[] = {
{usertask, 0, 0, 0, hello, 0, "$hello"},
{0} /* last entry must be 0 */
};
其中<modelsim_dir>是你的modelsim的安装目录。veriuser.h包含了一些modelsim提供的PLI的头文件的信息和定义。比如PLI_INT32是什么东西。你可以打开veriuser.h这个文件来看看就明白了。
2.用文本编辑器编辑保存v文件:
hello.v,内容如下:
module hello();
initial
begin
$hello;
end
endmodule
3.打开MSYS,用gcc编译c文件,命令是:
gcc -c -l <modelsim_dir>\include hello.c
gcc -shared -Bsymbolic -o hello.dll hello.o (-L<modelsim_dir>\win32 -lmtipli)括号中的可以不加
4.此时生成了一个hello.dll文件,将其拷贝到<modelsim_dir>/win32目录下面
5.打开modelsim,建立工程hello
6.在modelsim里面,敲入命令:
vsim -c -pli hello.dll hello
然后
run -all
你就可以看到打印出来的hello pli了
说明
1.hello.c里面,一定要有s_tfcell veriusertfs[]这个东西,这个是提供给PLI,让verilog能够认出这个task的东西。这里规定了这个task的名字是hello等相关信息。
2.编译器,你可以选在MS的VC,命令就变了,因为编译器变了……(modulesim的手册)
3.编译的命令,首先是编译成.o文件,但是不链接,最后有一条命令去链接
参考
1.gcc的编译命令请参考gcc的手册
2.PLI部分请参考modelsim的手册
展望
1.我现在还不知道如何通过PLI在verilog和C之间传递实际的数据,比如打开一个文件,读数据等等。这个哪位大哥知道的,可以留言给我,谢谢!
2.我还没有找到modelsim下面不用命令行仿真的方法,GUI仿真的命令不正确,哪位大哥知道的,也可以留言,谢谢!