/*
|
/*
|
* =====================================================================================
|
* =====================================================================================
|
*
|
*
|
* Filename: read_ikey.c
|
* Filename: read_ikey.c
|
*
|
*
|
* Description: this is a pli module to read the input key
|
* Description: this is a pli module to read the input key
|
*
|
*
|
* Version: 1.0
|
* Version: 1.0
|
* Created: 07/10/2008 09:18:10 PM
|
* Created: 07/10/2008 09:18:10 PM
|
* Revision: none
|
* Revision: none
|
* Compiler: gcc
|
* Compiler: gcc
|
*
|
*
|
* Author: mengxipeng@gmail.com
|
* Author: mengxipeng@gmail.com
|
* Company: mengxipeng
|
* Company: mengxipeng
|
*
|
*
|
* =====================================================================================
|
* =====================================================================================
|
*/
|
*/
|
|
|
#include <string.h>
|
#include <string.h>
|
#include <stdio.h>
|
#include <stdio.h>
|
#include <vpi_user.h>
|
#include <vpi_user.h>
|
|
|
|
|
char data[120*8*8];
|
char data[120*8*8];
|
|
|
static int read_data(char *fn)
|
static int read_data(char *fn)
|
{
|
{
|
vpiHandle systf_handle;
|
vpiHandle systf_handle;
|
vpiHandle arg_itr;
|
vpiHandle arg_itr;
|
vpiHandle arg_handle;
|
vpiHandle arg_handle;
|
s_vpi_value value_s;
|
s_vpi_value value_s;
|
|
|
FILE *fp;
|
FILE *fp;
|
FILE *fp1;
|
FILE *fp1;
|
char str[120];
|
char str[120];
|
int i;
|
int i;
|
int n;
|
int n;
|
|
|
systf_handle = vpi_handle(vpiSysTfCall, NULL);
|
systf_handle = vpi_handle(vpiSysTfCall, NULL);
|
arg_itr = vpi_iterate(vpiArgument, systf_handle);
|
arg_itr = vpi_iterate(vpiArgument, systf_handle);
|
if (arg_itr == NULL)
|
if (arg_itr == NULL)
|
{
|
{
|
vpi_printf("ERROR: $pow failed to obtain systf arg handles\n");
|
vpi_printf("ERROR: $pow failed to obtain systf arg handles\n");
|
return(0);
|
return(0);
|
}
|
}
|
|
|
/* read file name */
|
/* read file name */
|
arg_handle = vpi_scan(arg_itr);
|
arg_handle = vpi_scan(arg_itr);
|
value_s.format = vpiStringVal;
|
value_s.format = vpiStringVal;
|
vpi_get_value(arg_handle, &value_s);
|
vpi_get_value(arg_handle, &value_s);
|
strcpy(str,value_s.value.str);
|
strcpy(str,value_s.value.str);
|
|
|
fp=fopen(str,"r");
|
fp=fopen(str,"r");
|
if(fp)
|
if(fp)
|
{
|
{
|
fscanf(fp,"%s",&data);
|
fscanf(fp,"%s",&data);
|
value_s.format = vpiBinStrVal;
|
value_s.format = vpiBinStrVal;
|
value_s.value.str=data;
|
value_s.value.str=data;
|
arg_handle = vpi_scan(arg_itr);
|
arg_handle = vpi_scan(arg_itr);
|
vpi_put_value(arg_handle, &value_s,NULL, vpiNoDelay);
|
vpi_put_value(arg_handle, &value_s,NULL, vpiNoDelay);
|
fclose(fp);
|
fclose(fp);
|
}
|
}
|
else
|
else
|
{
|
{
|
vpi_printf("can't open the input file in %s \n", __FUNCTION__);
|
vpi_printf("can't open the input file in %s \n", __FUNCTION__);
|
}
|
}
|
|
|
return 0;
|
return 0;
|
}
|
}
|
|
|
static void read_data_register()
|
static void read_data_register()
|
{
|
{
|
s_vpi_systf_data tf_data;
|
s_vpi_systf_data tf_data;
|
tf_data.type = vpiSysTask;
|
tf_data.type = vpiSysTask;
|
tf_data.tfname = "$read_data";
|
tf_data.tfname = "$read_data";
|
tf_data.calltf = read_data;
|
tf_data.calltf = read_data;
|
tf_data.compiletf = 0;
|
tf_data.compiletf = 0;
|
tf_data.sizetf = 0;
|
tf_data.sizetf = 0;
|
vpi_register_systf(&tf_data);
|
vpi_register_systf(&tf_data);
|
}
|
}
|
|
|
static int write_data(char *xx)
|
static int write_data(char *xx)
|
{
|
{
|
vpiHandle systf_handle;
|
vpiHandle systf_handle;
|
vpiHandle arg_itr;
|
vpiHandle arg_itr;
|
vpiHandle arg_handle;
|
vpiHandle arg_handle;
|
s_vpi_value value_s;
|
s_vpi_value value_s;
|
|
|
FILE *fp;
|
FILE *fp;
|
char str[120];
|
char str[120];
|
int i;
|
int i;
|
int n;
|
int n;
|
|
|
systf_handle = vpi_handle(vpiSysTfCall, NULL);
|
systf_handle = vpi_handle(vpiSysTfCall, NULL);
|
arg_itr = vpi_iterate(vpiArgument, systf_handle);
|
arg_itr = vpi_iterate(vpiArgument, systf_handle);
|
if (arg_itr == NULL)
|
if (arg_itr == NULL)
|
{
|
{
|
vpi_printf("ERROR: $pow failed to obtain systf arg handles\n");
|
vpi_printf("ERROR: $pow failed to obtain systf arg handles\n");
|
return(0);
|
return(0);
|
}
|
}
|
|
|
/* read file name */
|
/* read file name */
|
arg_handle = vpi_scan(arg_itr);
|
arg_handle = vpi_scan(arg_itr);
|
value_s.format = vpiStringVal;
|
value_s.format = vpiStringVal;
|
vpi_get_value(arg_handle, &value_s);
|
vpi_get_value(arg_handle, &value_s);
|
strcpy(str,value_s.value.str);
|
strcpy(str,value_s.value.str);
|
|
|
arg_handle = vpi_scan(arg_itr);
|
arg_handle = vpi_scan(arg_itr);
|
value_s.format = vpiStringVal;
|
value_s.format = vpiStringVal;
|
vpi_get_value(arg_handle, &value_s);
|
vpi_get_value(arg_handle, &value_s);
|
if(!strcmp("a",value_s.value.str))
|
if(!strcmp("a",value_s.value.str))
|
fp=fopen(str,"a");
|
fp=fopen(str,"a");
|
else
|
else
|
fp=fopen(str,"w");
|
fp=fopen(str,"w");
|
if(fp)
|
if(fp)
|
{
|
{
|
value_s.format = vpiBinStrVal;
|
value_s.format = vpiBinStrVal;
|
arg_handle = vpi_scan(arg_itr);
|
arg_handle = vpi_scan(arg_itr);
|
vpi_get_value(arg_handle, &value_s);
|
vpi_get_value(arg_handle, &value_s);
|
//fprintf(fp,"%s\n",data);
|
//fprintf(fp,"%s\n",data);
|
fprintf(fp,"%s\n",value_s.value.str);
|
fprintf(fp,"%s\n",value_s.value.str);
|
fclose(fp);
|
fclose(fp);
|
}
|
}
|
else
|
else
|
{
|
{
|
vpi_printf("can't open the output file in %s \n", __FUNCTION__);
|
vpi_printf("can't open the output file in %s \n", __FUNCTION__);
|
}
|
}
|
|
|
return 0;
|
return 0;
|
}
|
}
|
|
|
static void write_data_register()
|
static void write_data_register()
|
{
|
{
|
s_vpi_systf_data tf_data;
|
s_vpi_systf_data tf_data;
|
tf_data.type = vpiSysTask;
|
tf_data.type = vpiSysTask;
|
tf_data.tfname = "$write_data";
|
tf_data.tfname = "$write_data";
|
tf_data.calltf = write_data;
|
tf_data.calltf = write_data;
|
tf_data.compiletf = 0;
|
tf_data.compiletf = 0;
|
tf_data.sizetf = 0;
|
tf_data.sizetf = 0;
|
vpi_register_systf(&tf_data);
|
vpi_register_systf(&tf_data);
|
}
|
}
|
|
|
void (*vlog_startup_routines[])() = {
|
void (*vlog_startup_routines[])() = {
|
read_data_register,
|
read_data_register,
|
write_data_register,
|
write_data_register,
|
0
|
0
|
};
|
};
|
|
|
|
|