11 #define vhpi0 2 /* forcing 0 */
12 #define vhpi1 3 /* forcing 1 */
14 static uint64_t from_std_logic_vector(unsigned char *p
, unsigned long len
)
16 unsigned long ret
= 0;
19 fprintf(stderr
, "%s: invalid length %lu\n", __func__
, len
);
23 for (unsigned long i
= 0; i
< len
; i
++) {
28 } else if (*p
== vhpi1
) {
31 fprintf(stderr
, "%s: bad bit %d\n", __func__
, *p
);
35 ret
= (ret
<< 1) | bit
;
42 static void to_std_logic_vector(unsigned long val
, unsigned char *p
,
46 fprintf(stderr
, "%s: invalid length %lu\n", __func__
, len
);
50 for (unsigned long i
= 0; i
< len
; i
++) {
51 if ((val
>> (len
-1-i
) & 1))
60 static struct termios oldt
;
62 static void restore_termios(void)
64 tcsetattr(STDIN_FILENO
, TCSANOW
, &oldt
);
67 static void nonblocking(void)
69 static bool initialized
= false;
72 static struct termios newt
;
74 tcgetattr(STDIN_FILENO
, &oldt
);
76 newt
.c_lflag
&= ~(ICANON
|ECHO
);
78 newt
.c_iflag
&= ~(BRKINT
| ICRNL
| INPCK
| ISTRIP
| IXON
);
79 newt
.c_oflag
&= ~(OPOST
);
80 newt
.c_cflag
|= (CS8
);
81 newt
.c_lflag
&= ~(ECHO
| ICANON
| IEXTEN
| ISIG
);
83 tcsetattr(STDIN_FILENO
, TCSANOW
, &newt
);
85 atexit(restore_termios
);
89 void sim_console_read(unsigned char *__rt
)
92 unsigned long val
= 0;
96 ret
= read(STDIN_FILENO
, &val
, 1);
98 fprintf(stderr
, "%s: read of stdin returns %d\n", __func__
, ret
);
102 //fprintf(stderr, "read returns %c\n", val);
104 to_std_logic_vector(val
, __rt
, 64);
107 void sim_console_poll(unsigned char *__rt
)
110 struct pollfd fdset
[1];
115 memset(fdset
, 0, sizeof(fdset
));
117 fdset
[0].fd
= STDIN_FILENO
;
118 fdset
[0].events
= POLLIN
;
120 ret
= poll(fdset
, 1, 0);
121 //fprintf(stderr, "poll returns %d\n", ret);
126 to_std_logic_vector(val
, __rt
, 64);
129 void sim_console_write(unsigned char *__rs
)
133 val
= from_std_logic_vector(__rs
, 64);
135 fprintf(stderr
, "%c", val
);