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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

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

[求助] DPI访问问题请教

[复制链接]
发表于 2019-5-30 19:57:32 | 显示全部楼层 |阅读模式

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

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

x
现在需要做个DPI函数来实现C与systemverilog之间的通信。目的是SV中调用C的函数,送一个值给变量, 在C中通过另一个读函数把变量的值取出来
做了个简单的例子:
--------------------------
common.c   函数定义
int d;
void c_function( int len)
{
  d =len;
}
int getc_data( )
{
  int data;
  data = d;
  return data;
}
-----------------------
top.v  函数调用

module top;
import "DPI-C" context function void c_function (input int len);
.....
  initial
  begin
    #10us;
    c_function(6);      //此处将C函数中的变量d设置为6
  end
.....

-------------------------
main.c 调用读函数
int main(...)
...
i = getc_data();                   //此处试图得到sv top设定的d的值,但是始终得到的0,而不是6, 为什么?
.....
发表于 2019-5-31 09:11:07 | 显示全部楼层
2个不同的进程,怎么保证同步?
 楼主| 发表于 2019-5-31 10:09:25 | 显示全部楼层
先不考虑同步,做这两个进程时把时间错开,保证sv这边先写,c这边后读就行。 关键问题还是C为什么得不到SV配置的数据?
发表于 2019-5-31 12:05:47 来自手机 | 显示全部楼层
DPI里面需要用到main函数?你这相当于连个进程了,c layer层执行main和sv layer层执行initial的顺序你无法保证。sv标准只规定了sv代码遇到DPI时进入其关联的c函数进行执行,在执行完毕关联的c函数之前不继续执行下面的sv代码,你这里的main()与sv代码执行顺序是无法确认的。
发表于 2019-5-31 12:11:25 来自手机 | 显示全部楼层
或许你的目的就是这样:sv执行完,生成了数据包,你想直观解析或者看数据包,把数据包甩给c或者上层软件,可以看到类似图像或者视频之类的东西。这个时候也许你需要export dpi了,或者使用pli之类的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-3-29 17:18 , Processed in 0.021389 second(s), 6 queries , Gzip On, Redis On.

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