Modelsim用PLI的方法
工具:
1.modelsim,我是6.5版
2.MinW和MSYS(wolf批注:linux模拟器也,你可以写Makefile,可以调用gcc),这是C的编译器和windows下的shell环境,至于这个东西怎么获得,以及安装使用,参考前面的**。当然你也可以用其他编译器。方法类似
3.一个文本编辑器。
原理:
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}
};
其中<modelsim_dir>是你的modelsim的安装目录。veriuser.h(wolf批注:重要!一定要与你的modelsim版本相匹配!)包含了一些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,命令就变了,因为编译器变了……
3.编译的命令,首先是编译成.o文件,但是不链接,最后有一条命令去链接
参考
1.gcc的编译命令请参考gcc的手册
2.PLI部分请参考modelsim的手册
展望
1.我现在还不知道如何通过PLI在verilog和C之间传递实际的数据,比如打开一个文件,读数据等等。这个哪位大哥知道的(wolf批注:本人知道,方**贴在后续的博文中!),可以留言给我,谢谢!
2.我还没有找到modelsim下面不用命令行仿真的方法,GUI仿真的命令不正确,哪位大哥知道的(wolf批注:写tcl脚本呀!网上搜一下方法一大堆!),也可以留言,谢谢! |