标签:
																				
                            杂谈 | 
					分类: ASIC | 
1.1.1 示例1
import "DPI" function void mydisplay(int a[2][2],logic b[4]);
void mydisplay(int a[2][2],svLogic b[4])
svLogic占用一个字节。C中的0,1,2,3分别对应Verilog中的0,1,z,x。
1.1.2 Chandle
// SystemVerilog side, test.sv
program p1;
chandle memory;
import "DPI" function chandle int_new(int size);
import "DPI" function void put_int_data(int size, chandle memory);
initial begin
int size = 10;
$display("SV: call DPI to allocate memory for %0d int",size);
memory = int_new(size);
$display("SV: call DPI to 
put_int_data(size,memory);
end
endprogram
#include <svdpi.h>
#include <stdlib.h>
#include <stdio.h>
int i;
void * int_new(int size) {
int *memory;
memory = (int *)malloc(size*sizeof(int));
printf("C/C++: allocate memory for %0d int in int_new\n",size);
return memory;
}
void put_int_data(int size,void* memory) {
int *temp;
temp = (int *) memory;
for(i=0;i<size;i++) {
temp[i]=i;
printf("C/C++: memory[%0d] is set to %0d\n",i,temp[i]);
 
}
1.2 Packed Array Data Type Mapping
svBitVecVal表示2状态的值。svLogicVecVal表示4状态的值。这些值按照32位的数组来组织。
1.2.1 示例1
// SystemVerilog side, test.sv
program p1;
 
 
 
 
 
 
 
endprogram
#include <svdpi.h>
void mydisplay(const svLogicVec32 a[2]) {
 
 
}
1.2.2 示例2
// SystemVerilog side, test.sv
program p1;
 
 
 
 
 
 
 
 
 
 
endprogram
#include <svdpi.h>
void mydisplay(svLogicVec32 *i) {
 
io_printf("C: i.c is %d\n",i->c);
}
1.2.3 示例3
Packed Struct
// SystemVerilog side, test.sv
program p1;
 
 
 
 
 
 
 
endprogram
#include <svdpi.h>
void mydisplay(svBitVec32 p) {
 
}

加载中…