动态链接库,生成的库文件名必须是libpli.so。在函数编写时不需要boot strap函数,只需要用标准的veriuser表即可,例子如下:
s_tfcell veriusertfs[] =
{
{usertask, 0, tg_check, 0, tg_call, 0, "$my_task1", 1},
{usertask, 0, 0, 0, tg_summary_call, 0, "$my_task2", 0},
0 /*** final entry must be 0 ***/
};
在用命令行调用时一定要先将生成的库的路径定义在LD_LIBRARY_PATH。如
setenv LD_LIBRARY_PATH my_lib_path:$LD_LIBRARY_PATH
然后verilog或ncverilog会自动到my_lib_path下找到libpli.so.
动态加载库。它没有veriuser表,而是有一个boot strap函数。在boot strap函数中定义新系统调用的指针入口。函数如下:
p_tfcell my_bootstrap () {
static s_tfcell my_tfs[] =
{
{usertask, 0, tg_check, 0, tg_call, 0, "$my_task1", 1},
{usertask, 0, 0, 0, tg_summary_call, 0, "$my_task2", 0},
{ 0 } /*** final entry must be 0 ***/
};
return (my_tfs);
}
编译时可以指定库文件名,如 my_lib.so
在命令行调用时可以先定义LD_LIBRARY_PATH,也可以不定义。
运行时要在命令行上要加入选项:
+loadpli1=my_lib_path/my_lib:my_bootstrap
如:
ncverilog +loadpli1=my_lib_path/my_lib:my_bootstrap test.v