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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 4531|回复: 2

[求助] 这是DPI接口使用中的一个神奇的问题,你们肯定没遇到,求大神教啊

[复制链接]
发表于 2011-10-26 13:13:40 | 显示全部楼层 |阅读模式

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

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

x
在DPI接口使用时遇到了一个很神奇的问题,
下面是需要导入的C函数
#include “stdio.h”
#include “svdpi.h”
int addr2(svBitBecVal  w[255])
{  unsigned char z=0;
    int i;

(for i=0;i<255;i=i++)
  { z+=w;
    io_printf(“z: %d” ,z  );
  }
  return z;
}

下面是top.v文件的部分程序
top;
import "DPI-C" function int adder2(input bit [0:0] w[255]);
reg  [254:0] data_in;  //(这个是verilog的输入  ,我要输入给C函数,必须转换为数组的形式 ,
                                //所以下面就通过bit  [0:0]  a [255];转化一下)

bit  [0:0]  a [255];
int i;

for(for i=0;i<255;i=i++)
begin
data_in=1;
a=data_in;
end

$display ("%d", adder2(a) );

最后仿真打印出的数据正常,结果为 255。


但是我想把这个C函数wrapper起来,变成一个具有verilog接口的.V文件。主要是想直接接到[254:0] data_in的接口上,于是我在wrapper文件中做了这样的处理

运用了verilog函数

wrapper(
  data_in;
  data_out;
)
import "DPI-C" function int adder2(input bit [0:0] w[255]);

input [254:0] data_in;
output [7:0] data_out;

function [7:0] result;
input [254:0] data_in;
bit [0:0] a [255];
integer i;
for(for i=0;i<255;i=i+1)   
a=data_in;
result=addr2(a);
endfunction

assgin data_out =result(data_in);

整个过程相对之前只是把C函数需要的入口为数组的转换由原来的顶层文件放在了这个wrapper文件中,
但是在最后我仿真时却发现结果不对。
原来C语言打印出来的Z的结果是很规律的 1,2,3.。。。一直到255
现在我看C打印出来Z的结果很乱 一开始就是145,。毫无规律。。。最后算出的结果居然是241。

求高人指教啊, 实在是找不出问题出在哪里了
 楼主| 发表于 2011-10-28 12:12:38 | 显示全部楼层
老问题没解决,又又碰到下面的新问题

需要写一个C函数  ,实现255bit的数据位相加,   就是说结果是 位宽为255的所有位的值相加 。最大值也就是255了。

C函数的数据入口最好为1bit的 , 这样连续输入255个1bit的数据,通过该函数计算最后得到他们之和。

(就像Verilog模块中每来一个clk上升沿,就输入1bit新的数据,最后实现255bit的数据输入)
发表于 2011-11-6 12:12:28 | 显示全部楼层
来学习下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-11-11 06:17 , Processed in 0.023104 second(s), 9 queries , Gzip On, Redis On.

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