⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test.c

📁 vcs tutorial Lab2-PLI verygood
💻 C
字号:
#ifdef XL#include "veriuser.h"#include "vxl_veriuser.h"#else#include "vcsuser.h"#include "acc_user.h"#endif#define NULL 0typedef struct t_inlist        {           handle signal;           int value;           struct t_iolist *iolist;           struct t_inlist *next;        } s_inlist, *p_inlist;typedef struct t_iolist        {           handle output;           p_inlist inputs;        } s_iolist, *p_iolist;int and_vcl();/* call routine for $and */and_call(){   int num_args = tf_nump();   int i;   p_iolist iolist = (p_iolist) malloc(sizeof(s_iolist));   p_inlist curr_in;   /* build list of input handles and output handle      and set VCL triggers on inputs */   iolist->output = acc_handle_tfarg(1);    iolist->inputs = NULL;   for (i = 2; i <= num_args; i++)   {      curr_in = (p_inlist) malloc(sizeof(s_inlist));      curr_in->signal = acc_handle_tfarg(i);      /* initial value */      switch (*tf_strgetp(i,'b'))      {         case '0':            curr_in->value = vcl0;            break;          case '1':            curr_in->value = vcl1;            break;          case 'x':            curr_in->value = vclX;            break;          case 'z':            curr_in->value = vclZ;            break;       }      /* set VCL trigger */      acc_vcl_add(curr_in->signal,and_vcl,curr_in,vcl_verilog_logic);      curr_in->iolist = iolist;      curr_in->next = iolist->inputs;      iolist->inputs = curr_in;   }   /* calculate and schedule initial output value */ and_calc_sched(iolist);}/* VCL consumer routine */and_vcl(vc_record)p_vc_record vc_record;{   p_inlist curr_in = (p_inlist) vc_record->user_data;   /* update signal value */   curr_in->value = vc_record->out_value.logic_value;   /* calculate and schedule output value */   and_calc_sched(curr_in->iolist);}   /* output value calculation and scheduling routine for $and */and_calc_sched(iolist)p_iolist iolist;{   p_inlist curr_in;   /* for acc_set_value() */   static s_setval_delay delay = {{accTime, 0, 0, 0.0}, accNoDelay};   static s_setval_value value = {accScalarVal};   /* loop over inputs and calculate/schedule value */   value.value.scalar = acc1;   curr_in = iolist->inputs;   while (curr_in != NULL)   {      switch (curr_in->value)      {         case vcl0:            /* output must be 0 */            value.value.scalar = acc0;            acc_set_value(iolist->output,&value,&delay);            return;         case vcl1:            /* 1 is default, so just go on */            break;         case vclX:         case vclZ:            /* unknown input will set output to X unless               a 0 input is found */            value.value.scalar = accX;            break;      }      curr_in = curr_in->next;   }   /* schedule output value (1 or X) */   acc_set_value(iolist->output,&value,&delay);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -