打印

Modelsim用PLI的方法

[复制链接]
1473|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
shang651|  楼主 | 2012-10-18 21:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ModelsimPLI的方法
工具:
1.modelsim,我是6.5
2.MinWMSYS(wolf批注:linux模拟器也,你可以写Makefile,可以调用gcc),这是C的编译器和windows下的shell环境,至于这个东西怎么获得,以及安装使用,参考前面的**。当然你也可以用其他编译器。方法类似
3.一个文本编辑器。

原理:
verilog 提供的库非常有限,经常需要自己添加一些常用的“库函数”,而这些库函数,反映出来就是一些taskPLItask。所谓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.编译器,你可以选在MSVC,命令就变了,因为编译器变了……
3.编译的命令,首先是编译成.o文件,但是不链接,最后有一条命令去链接

参考
1.gcc的编译命令请参考gcc的手册
2.PLI部分请参考modelsim的手册

展望
1.我现在还不知道如何通过PLIverilogC之间传递实际的数据,比如打开一个文件,读数据等等。这个哪位大哥知道的(wolf批注:本人知道,方**贴在后续的博文中!),可以留言给我,谢谢!
2.我还没有找到modelsim下面不用命令行仿真的方法,GUI仿真的命令不正确,哪位大哥知道的(wolf批注:写tcl脚本呀!网上搜一下方法一大堆!),也可以留言,谢谢!

相关帖子

沙发
kkzz| | 2012-10-18 22:55 | 只看该作者
有些复杂 还没有搞懂呢

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

305

帖子

1

粉丝