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

Subversion Repositories csa

[/] [csa/] [trunk/] [bench/] [csa_pli.c] - Diff between revs 20 and 24

Go to most recent revision | Only display areas with differences | Details | Blame | View Log

Rev 20 Rev 24
/*
/*
 * =====================================================================================
 * =====================================================================================
 *
 *
 *       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
};
};
 
 
 
 

powered by: WebSVN 2.1.0

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