modelsim用PLI的方法

本文简要说明windows下面的modelsim,如何调用PLI。

 

工具:

1.modelsim,我是6.5版

2.MinW和MSYS,这是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} /* 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,命令就变了,因为编译器变了……

3.编译的命令,首先是编译成.o文件,但是不链接,最后有一条命令去链接

 

参考

1.gcc的编译命令请参考gcc的手册

2.PLI部分请参考modelsim的手册

 

展望

1.我现在还不知道如何通过PLI在verilog和C之间传递实际的数据,比如打开一个文件,读数据等等。这个哪位大哥知道的,可以留言给我,谢谢!

2.我还没有找到modelsim下面不用命令行仿真的方法,GUI仿真的命令不正确,哪位大哥知道的,也可以留言,谢谢!

posted on 2010-05-22 10:47  vincenzo.lai  阅读(3779)  评论(3编辑  收藏  举报

导航