在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 16738|回复: 15

[原创] 今天早上复习了DPI,发现cadence的sysverilog.pdf上gcc编译c语言少了个选项

[复制链接]
发表于 2010-12-29 11:44:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x

今天又重新拾起cosim,却发现怎么编译都报错,找了之前的ppt,又仔细观摩了NCsystemverilog.pdf,就是不行,老是报这个错误:

icds:liawang@shaltc01:[~/nc_prj/nc_dpi_first]> ncsim -sv_lib hello hello

ncsim: 09.20-s016: (c) Copyright 1995-2010 Cadence Design Systems, Inc.

ncsim: *W,NOLDPI: Unable to load hello.

OSDLERROR: ./hello.so: cannot open shared object file: No such file or directory or file is not valid ELFCLASS32 library..

ncsim: *F,NOFDPI: Function pass_string_c not found in any of the shared object specified with -SV_LIB switch.

我简直头大,一切都是按照Cadencesysverilog.pdf来的啊,怎么就能出错呢??

ncvlog -sv hello.sv

ncelab -access +RWC hello

gcc -fPIC -shared -o libdpi.so hello.c -I /tools/ius-9.20.016/tools/inca/include

ncsim -messages hello

显然是c语言文件生成的so文件没有被ncsim正确load,那么问题出在哪儿呢?问题大概出现在gcc的编译选项上。后来看了之前自己的笔记,发现这个gcc的编译选项漏了-m32,加上以后真的就好了!!

icds:liawang@shaltc01:[~/nc_prj/nc_dpi_first]> ncsim -sv_lib hello hello

ncsim: 09.20-s016: (c) Copyright 1995-2010 Cadence Design Systems, Inc.

ncsim> run

DPI: pass it ON

Exported Verilog String=
string passed from C

Verilog: C: give up a string

Gimme String

Simulation complete via $finish(1) at time 0 FS + 0

./hello.sv:22
$finish;

ncsim> exit

下面两个文件分别是设计文件和c文件,后面还有在nc环境下的仿真命令:

//hello.sv

module hello();

import "DPI-C" context pass_string_c= task pass_string_sv(input string a);

import "DPI-C" context string_c2v_c= function string string_c2v_sv();

string some_string;

// This doesnt work in IUS583, will work in IUS6.0

export "DPI-C" print_string_c = function print_string_sv;

   

function void print_string_sv(input string aaa);


$display("Exported Verilog String=
%s", aaa);

endfunction

initial


begin


some_string = "pass it ON";


// enable when running IUS6.0


pass_string_sv(some_string);
// pass string to C


$display("Verilog: %s \n", string_c2v_sv() );
// get string from C


$finish;

end

endmodule

//hello.c

#include <stdio.h>

#include <svdpi.h>

// to use io_printf (prints to ncsim.log)

#include <veriuser.h>


void pass_string_c(const char* a) {


io_printf("DPI: %s\n", a);


// now call exported function


print_string_c("string passed from C");
// This wont work in IUS583

}


const char* string_c2v_c(void) {


io_printf("C: give up a string\n");


return "Gimme String";

}

//cmd

ncvlog -sv hello.sv

ncelab -access +RWC hello

gcc -m32 -fPIC -shared -o libdpi.so hello.c -I /tools/ius-9.20.016/tools/inca/include

ncsim -messages hello

我还没来得及看-m32选项的作用,希望大家能够顺利cosim

 楼主| 发表于 2010-12-29 12:20:05 | 显示全部楼层
补充一句,sysverilog.pdf里还提供一种一步仿真的方法,就是这个命令:
irun hello.sv hello.c
这个对入门者比较简单,呵呵
发表于 2010-12-31 12:48:58 | 显示全部楼层
谢谢你的文章,正在研究DPI,有机会多多讨论。
发表于 2011-1-16 23:05:49 | 显示全部楼层
好东西啊 nice~~
发表于 2011-1-31 09:57:33 | 显示全部楼层
pei fu ,pei fu
发表于 2012-4-10 10:47:24 | 显示全部楼层
这里的.so文件应该是编译完的链表文件吧,是不是不能直接运行的那种?
发表于 2012-4-10 22:23:37 | 显示全部楼层
.so是库文件
发表于 2012-12-4 16:34:43 | 显示全部楼层
Cadence的sysverilog.pdf, 能上传一下吗?
发表于 2012-12-6 16:02:25 | 显示全部楼层
研究DPI中,可以多多讨论。
发表于 2012-12-7 14:31:32 | 显示全部楼层
nice good
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-5 16:04 , Processed in 0.027041 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表