在学习几乎所有的编程语言时,基本上学习的第一个程序就是helloworld程序,在PLI学习中,也从helloworld开始!^_^
我们知道要完成一个PLI程序,需要有3个文件:veriuser.c, hello.c, hello.v。
veriuser.c链接C语言函数和verilog
系统函数之间的对应关系。
hello.c 中写着C语言函数hello()
hello.v 里调用
系统函数以执行hello.c里的hello()函数。
1. veriuser.c的编写
2. hello.c 编写
在PLI的C程序中,不需要main函数,因为这里的C语言文件不需要单独编译执行。只需要提供单独的函数就可以。
以下是hello.c的代码:
引用:
hello()
{
io_printf(" Hello World ! ");
}
3. hello.v 的编写
在hello.v中调用系统任务来调用hello()函数,以下是hello.v 代码:
引用:
module hello();
initial $hello();
endmodule
现在3个函数都编写完毕了。其中的C语言需要编译执行成C库文件。
用以下命令执行:
引用:
gcc -c -o hello.o -I $(CDS_INSTALL_DIR)/include hello.c
gcc -c -o veriuser.o -I $(CDS_INSTALL_DIR)/include veriuser.c
gcc -shared -o hello.so veriuser.c hello.c
在编译完库文件以后,只需要在跑simulation的时候,加上调用PLI选项,调用方式如下:
引用:
ncverilog +access+wrc +loadpli1=hello.so:hellostrap
结果如下:
今天就讲到这里, 下一节讲述另一个PLI重要程序:从verilog获取值,传递到C程序中。