?? test.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 + -