#include #include #include #include #include "sim_vhpi_c.h" struct int_bounds { int left; int right; char dir; unsigned int len; }; struct fat_pointer { void *base; struct int_bounds *bounds; }; char *from_string(void *__p) { struct fat_pointer *p = __p; unsigned long len = p->bounds->len; char *m; m = malloc(len+1); if (!m) { perror("malloc"); exit(1); } memcpy(m, p->base, len); m[len] = 0x0; return m; } uint64_t from_std_logic_vector(unsigned char *p, unsigned long len) { unsigned long ret = 0; if (len > 64) { fprintf(stderr, "%s: invalid length %lu\n", __func__, len); exit(1); } for (unsigned long i = 0; i < len; i++) { unsigned char bit; if (*p == vhpi0) { bit = 0; } else if (*p == vhpi1) { bit = 1; } else { fprintf(stderr, "%s: bad bit %d\n", __func__, *p); bit = 0; } ret = (ret << 1) | bit; p++; } return ret; } void to_std_logic_vector(unsigned long val, unsigned char *p, unsigned long len) { if (len > 64) { fprintf(stderr, "%s: invalid length %lu\n", __func__, len); exit(1); } for (unsigned long i = 0; i < len; i++) { if ((val >> (len-1-i) & 1)) *p = vhpi1; else *p = vhpi0; p++; } }