微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微电子和IC设计 > IC验证交流 > 这是DPI接口使用中的一个神奇的问题,你们肯定没遇到,求大神教啊

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

时间:10-02 整理:3721RD 点击:
在DPI接口使用时遇到了一个很神奇的问题,
下面是需要导入的C函数
#include “stdio.h”
#include “svdpi.h”
int addr2(svBitBecValw[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。
求高人指教啊, 实在是找不出问题出在哪里了

老问题没解决,又又碰到下面的新问题
需要写一个C函数,实现255bit的数据位相加,就是说结果是 位宽为255的所有位的值相加 。最大值也就是255了。
C函数的数据入口最好为1bit的 , 这样连续输入255个1bit的数据,通过该函数计算最后得到他们之和。
(就像Verilog模块中每来一个clk上升沿,就输入1bit新的数据,最后实现255bit的数据输入)

来学习下

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top