Console: Put the core in its own clock domain.
[firearm.git] / testbench.cpp
index 53be841..da3d75e 100644 (file)
@@ -3,26 +3,51 @@
 #define _XOPEN_SOURCE
 #include <stdlib.h>
 #include <fcntl.h>
 #define _XOPEN_SOURCE
 #include <stdlib.h>
 #include <fcntl.h>
+#include <termios.h>
 
 Vsystem *top;
 
 
 Vsystem *top;
 
+int ptyfd = -1;
+
+void openpty()
+{
+       int fd = posix_openpt(O_RDWR);
+       char b[128];
+       struct termios kbdios;
+       
+       grantpt(fd);  
+       fcntl(fd, F_SETFD, 0);  /* clear close-on-exec */
+       tcgetattr(fd, &kbdios);
+       kbdios.c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN);
+       tcsetattr(fd, TCSANOW, &kbdios);
+       sprintf(b, "rxvt -pty-fd %d -bg black -fg white -title \"Output terminal\" &", fd);
+       system(b);
+       unlockpt(fd);
+       ptyfd = open(ptsname(fd), O_RDWR | O_NONBLOCK);
+       close(fd);
+}
+
+unsigned int term_input()
+{
+       int rv;
+       unsigned char c;
+       if (ptyfd == -1)
+               openpty();
+       rv = read(ptyfd, &c, 1);
+       if (rv < 0)
+               return 0;
+       return 0x100 | c;
+}
+
 void term_output(unsigned char d)
 {
        int fd = posix_openpt(O_RDWR);
        static int fd2 = -1;
        char b[128];
 
 void term_output(unsigned char d)
 {
        int fd = posix_openpt(O_RDWR);
        static int fd2 = -1;
        char b[128];
 
-       if (fd2 == -1)
-       {
-               grantpt(fd);  
-               fcntl(fd, F_SETFD, 0);  /* clear close-on-exec */
-               sprintf(b, "rxvt -pty-fd %d -bg black -fg white -title \"Output terminal\" &", fd);
-               system(b);
-               unlockpt(fd);
-               fd2 = open(ptsname(fd), O_RDWR);
-               close(fd);
-       }
-       write(fd2, &d, 1);
+       if (ptyfd == -1)
+               openpty();
+       write(ptyfd, &d, 1);
 }
 
 unsigned int main_time = 0;
 }
 
 unsigned int main_time = 0;
@@ -40,7 +65,7 @@ int main()
        while (!Verilated::gotFinish())
        {
                top->clk = !top->clk;
        while (!Verilated::gotFinish())
        {
                top->clk = !top->clk;
-               
+               top->rst = 0;
                top->eval();
 //             if (top->clk == 1)
 //                     printf("%d: Bubble: %d. PC: %08x. Ins'n: %08x\n", main_time/2, top->bubbleshield, top->pc, top->insn);
                top->eval();
 //             if (top->clk == 1)
 //                     printf("%d: Bubble: %d. PC: %08x. Ins'n: %08x\n", main_time/2, top->bubbleshield, top->pc, top->insn);
This page took 0.018036 seconds and 4 git commands to generate.