|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
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。
求高人指教啊, 实在是找不出问题出在哪里了 |
|