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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 254|回复: 4

[求助] 关于DPI-C的使用方式

[复制链接]
发表于 2025-3-21 15:55:36 | 显示全部楼层 |阅读模式

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

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

x
各位:

      最近正在学习使用DPI-C。我有一个C文件,如下:




  1. #include <svdpi.h>
  2. #include <math.h>

  3. double sin(double r){
  4.     return sin(r);
  5. }

  6. int sum(int a, int b){
  7.     reurn a+b;
  8. }



复制代码
然后,在sv中,




  1. module dpi_test;
  2.      import "DPI-C" function real sin(real n2);
  3.      import "DPI-C" function int sum(int a, int b);
  4.      int a, b, c;
  5.      initial begin
  6.            $display("sin(0.73)=%f", sin(0.73));
  7.            a=2;
  8.            b=7;
  9.            c=sum(a,b);
  10.            $display("a+b=%d", c);
  11.     end
  12. endmodule


复制代码
我首先是用 vcs 直接编译sv文件和C文件:




  1. vcs -full64 -sverilog +v2k +cli -kdb -o ./simv -l cmp.log dpi_test.sv c_func.c -debug_all +DPI


复制代码
然后,运行./simv,得到STACK_OVERFLOW的报错:



  1. Info:[STACK_OVERFLOW] Stack Overflow Detected.
  2. Note:[STACK_INCREASED] Bumping stack from 8388608 to 18846720 bytes.
  3. .....
  4. -- Stack trace follows:
  5. Dumping VCS Annotated Stack:
  6. #0 0x00000036916ac89e in waitpid() from /lib64/libc.so.6
  7. #1 0x000000369163e4e9 in do_system() from /lib64/libc.so.6
  8. ......


复制代码
然后,如果先用gcc编译C,



  1. gcc -I$VCS_HOME/nclude -shard -fPIC -o libdpi.so c_func.c -lm


复制代码
然后再用上面的vcs编译命令(去掉c_func.c),再执行./simv
前面的sin计算倒是出来结果了,但是,后面的sum函数,则得到错误提示:



  1. Error - [DPI-DIFNF] DPI import function not found.
  2. The definition of DPI import function/task 'sum' does not exist. Please check the started DPI import function/task is defined, and its definition is either passed in a source file at cimpile-time, or provided in a shared library specified using the LRM Annex-J options at run-time.


复制代码
我该怎么做,才能让这两个函数都能正常使用呢?


发表于 2025-3-21 18:05:02 | 显示全部楼层
import "DPI-C" context function int sum(...);  // 声明为上下文相关‌:ml-citation{ref="6,8" data="citationList"} import sum的时候添加context试试呢?
发表于 5 天前 | 显示全部楼层
c中的math.h里面是有一个sin函数的,代码里面又定义一个sin,这里会递归调用用户自己定义的这个sin吧,最好换个名字试试看?
发表于 5 天前 | 显示全部楼层
参考这里https://blog.csdn.net/zhajio/article/details/109362377
从C向SV导入函数作为一个函数(function)使用一节,这里的定义也是用的”Sin“而不是”sin“
 楼主| 发表于 3 天前 | 显示全部楼层


LLLT 发表于 2025-3-24 10:42
c中的math.h里面是有一个sin函数的,代码里面又定义一个sin,这里会递归调用用户自己定义的这个sin吧,最好 ...


好的。谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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

GMT+8, 2025-3-29 21:05 , Processed in 0.018429 second(s), 8 queries , Gzip On, MemCached On.

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