| #include <stdio.h> |
| #include <string.h> |
| #include "vpi_user.h" |
| |
| static void spaces(int num) |
| { |
| while (num > 0) { |
| vpi_printf(" "); |
| num--; |
| } |
| } |
| |
| static void RecurseScope(vpiHandle handle, int depth) |
| { |
| vpiHandle iter, hand; |
| |
| iter = !handle ? vpi_iterate(vpiModule, NULL) : |
| vpi_iterate(vpiInternalScope, handle); |
| |
| while (iter && (hand = vpi_scan(iter))) { |
| spaces(depth); |
| vpi_printf("%s is type ", vpi_get_str(vpiName, hand)); |
| switch (vpi_get(vpiType,hand)) { |
| case vpiModule: vpi_printf("vpiModule\n"); break; |
| case vpiTask: vpi_printf("vpiTask\n"); break; |
| case vpiFunction: vpi_printf("vpiFunction\n"); break; |
| case vpiNamedBegin: vpi_printf("vpiNamedBegin\n"); break; |
| case vpiNamedFork: vpi_printf("vpiNamedFork\n"); break; |
| default: vpi_printf("unknown (%d)\n", vpi_get(vpiType,hand)); break; |
| } |
| RecurseScope(hand, depth + 2); |
| } |
| } |
| |
| static int CompileTF(char *x) |
| { |
| RecurseScope(NULL, 0); |
| return 0; |
| } |
| |
| static void my_Register(void) |
| { |
| s_vpi_systf_data tf_data; |
| |
| tf_data.type = vpiSysTask; |
| tf_data.tfname = "$test"; |
| tf_data.calltf = 0; |
| tf_data.compiletf = CompileTF; |
| tf_data.sizetf = 0; |
| vpi_register_systf(&tf_data); |
| } |
| |
| void (*vlog_startup_routines[]) () = { |
| my_Register, 0}; |