OpenCores
URL https://opencores.org/ocsvn/csa/csa/trunk

Subversion Repositories csa

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /csa/trunk
    from Rev 36 to Rev 37
    Reverse comparison

Rev 36 → Rev 37

/bench/csa_pli.c
177,20 → 177,16
int read;
value_s.format = vpiVectorVal;
vpi_get_value(arg_handle_reg, &value_s);
i=0;
if(read_size >= 32)
for(i=0;i+32<=read_size;i+=32)
{
for(i=0;i<read_size;i+=32)
read=fread(&dword,4,1,fp);
if(1!=read)
{
read=fread(&dword,4,1,fp);
if(1!=read)
{
vpi_printf("warning read fail [%d] \n",read);
break;
}
value_s.value.vector[i/32].bval=0x00;
value_s.value.vector[i/32].aval=dword;
vpi_printf("warning read fail [%d] \n",read);
break;
}
value_s.value.vector[i/32].bval=0x00;
value_s.value.vector[i/32].aval=dword;
}
if(i<read_size)
{
233,23 → 229,107
vpi_register_systf(&tf_data);
}
 
// write system call
// usage $write_data( file name , [ flags ,] reg)
 
static int write_data_compile(char* used_data)
{
vpiHandle systf_h;
vpiHandle trarg_itr; // argument iterator
vpiHandle trarg_h; // argument handle;
PLI_INT32 trarg_type; // argument type
s_vpi_value value_s;
 
systf_h=vpi_handle(vpiSysTfCall,NULL);
if(!systf_h)
{
vpi_printf("ERROR: could not obtain the handle to systf call\n");
tf_dofinish();
return 0;
}
 
trarg_itr=vpi_iterate(vpiArgument, systf_h);
if(!trarg_itr)
{
vpi_printf("ERROR: could not obtain the iterate to argument\n");
tf_dofinish();
return 0;
}
 
 
// get the first argument
trarg_h=vpi_scan(trarg_itr);
if(vpi_get(vpiType,trarg_h)!=vpiConstant&&vpi_get(vpiConstType,trarg_h)!=vpiStringConst)
{
vpi_printf("the first argument type is incorrect (not a string constant)\n");
tf_dofinish();
return 0;
}
 
// get flag
trarg_h=vpi_scan(trarg_itr);
trarg_type=vpi_get(vpiType,trarg_h);
if(trarg_type==vpiConstant&&vpi_get(vpiConstType,trarg_h)==vpiStringConst)
// flag
{
value_s.format=vpiStringVal;
vpi_get_value(trarg_h,&value_s);
 
if(
strcasecmp(value_s.value.str,"A")
)
{
vpi_printf("error, not only support addpend A flag[%s]\n",value_s.value.str);
tf_dofinish();
return 0;
}
 
trarg_h=vpi_scan(trarg_itr);
trarg_type=vpi_get(vpiType,trarg_h);
}
 
if(trarg_type!=vpiConstant&&trarg_type!=vpiReg)
{
vpi_printf("error, the last argument is not a constant val [%d]\n",trarg_type);
tf_dofinish();
return 0;
}
if(trarg_type==vpiConstant)
{
if(0!=vpi_get(vpiConstType,trarg_h))
{
vpi_printf("error, the last argument is not a sub 0 type constant val \n");
tf_dofinish();
return 0;
}
}
 
return 0;
}
 
static int write_data(char *xx)
{
vpiHandle systf_handle;
vpiHandle arg_itr;
vpiHandle arg_handle_fn;
vpiHandle arg_handle;
s_vpi_value value_s;
 
FILE *fp;
char str[120];
int i;
int n;
 
systf_handle = vpi_handle(vpiSysTfCall, NULL);
if(systf_handle== NULL)
{
vpi_printf("ERROR: $pow failed to obtain systf call handles\n");
tf_dofinish();
return(0);
}
arg_itr = vpi_iterate(vpiArgument, systf_handle);
if (arg_itr == NULL)
{
vpi_printf("ERROR: $pow failed to obtain systf arg handles\n");
tf_dofinish();
return(0);
}
 
257,36 → 337,60
arg_handle = vpi_scan(arg_itr);
value_s.format = vpiStringVal;
vpi_get_value(arg_handle, &value_s);
strcpy(str,value_s.value.str);
 
arg_handle = vpi_scan(arg_itr);
value_s.format = vpiStringVal;
vpi_get_value(arg_handle, &value_s);
if(!strcmp("a",value_s.value.str))
fp=fopen(str,"ab");
if(vpi_get(vpiType,arg_handle)==vpiConstant&&vpi_get(vpiConstType,arg_handle)==vpiStringConst)
// flags
{
fp=fopen(value_s.value.str,"ab");// if have flag, then open the file with append mode
arg_handle = vpi_scan(arg_itr);
}
else
fp=fopen(str,"wb");
if(fp)
{
fp=fopen(value_s.value.str,"wb");
}
if(!fp)
{
vpi_printf("can not open file to write\n");
tf_dofinish();
return 0;
}
 
// write data
{
unsigned int word;
int b;
int i;
int vector_size;
value_s.format = vpiVectorVal;
arg_handle = vpi_scan(arg_itr);
vector_size = vpi_get(vpiSize, arg_handle);
vpi_get_value(arg_handle, &value_s);
for(i=0;i<vector_size/32;i++)
for(i=0;i+32<=vector_size;i+=32)
{
fwrite(&value_s.value.vector[i].aval,4,1,fp);
if(1!=fwrite(&value_s.value.vector[i/32].aval,4,1,fp))
{
vpi_printf("[%d]warning:write fail \n",__LINE__);
}
}
fwrite(&value_s.value.vector[i].aval,(vector_size%32)/8,1,fp);
if(i<vector_size)
{
int n;
unsigned char b;
unsigned int last=value_s.value.vector[i/32].aval;
unsigned int mask=0xff;
PLI_INT32 reduant=vector_size-i;
for(n=0;n<reduant;n+=8)
{
b=(last&(mask<<n))>>n;
if(1!=fwrite(&b,1,1,fp))
{
vpi_printf("[%d]warning:write fail \n",__LINE__);
}
}
}
//fwrite(&value_s.value.vector[i].aval,(vector_size%32)/8,1,fp);
fclose(fp);
}
else
{
vpi_printf("can't open the output file in %s \n", __FUNCTION__);
}
return 0;
}
297,7 → 401,7
tf_data.type = vpiSysTask;
tf_data.tfname = "$write_data";
tf_data.calltf = write_data;
tf_data.compiletf = 0;
tf_data.compiletf = write_data_compile;
tf_data.sizetf = 0;
vpi_register_systf(&tf_data);
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.