OpenCores
URL https://opencores.org/ocsvn/tv80/tv80/trunk

Subversion Repositories tv80

[/] [tv80/] [trunk/] [sc_env/] [sc_env_top.cpp] - Blame information for rev 96

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 91 ghutchis
#include "systemc.h"
2 94 ghutchis
#include "systemperl.h"
3 91 ghutchis
#include "env_memory.h"
4 92 ghutchis
#include "tv_responder.h"
5 91 ghutchis
#include "Vtv80s.h"
6 94 ghutchis
#include "SpTraceVcd.h"
7 95 ghutchis
#include <unistd.h>
8 96 ghutchis
#include "z80_decoder.h"
9 91 ghutchis
 
10 95 ghutchis
extern char *optarg;
11
extern int optind, opterr, optopt;
12
 
13 91 ghutchis
int sc_main(int argc, char *argv[])
14
{
15 95 ghutchis
        bool dumping = false;
16
        bool memfile = false;
17
        int index;
18
        char *dumpfile_name;
19
        char *mem_src_name;
20
        SpTraceFile *tfp;
21 96 ghutchis
    z80_decoder dec0 ("dec0");
22 95 ghutchis
 
23 96 ghutchis
        while ( (index = getopt(argc, argv, "d:i:k")) != -1) {
24 95 ghutchis
                printf ("DEBUG: getopt optind=%d index=%d char=%c\n", optind, index, (char) index);
25
                if  (index == 'd') {
26
                        dumpfile_name = new char(strlen(optarg)+1);
27
                        strcpy (dumpfile_name, optarg);
28
                        dumping = true;
29
                        printf ("VCD dump enabled to %s\n", dumpfile_name);
30
                } else if (index == 'i') {
31
                        mem_src_name = new char(strlen(optarg)+1);
32
                        strcpy (mem_src_name, optarg);
33
                        memfile = true;
34 96 ghutchis
                } else if (index == 'k') {
35
                        printf ("Z80 Instruction decode enabled\n");
36
                        dec0.en_decode = true;
37 95 ghutchis
                }
38
        }
39
        sc_clock clk("clk125", 8, SC_NS, 0.5);
40 91 ghutchis
 
41
        sc_signal<bool> reset_n;
42
        sc_signal<bool> wait_n;
43
        sc_signal<bool> int_n;
44
        sc_signal<bool> nmi_n;
45
        sc_signal<bool> busrq_n;
46
        sc_signal<bool> m1_n;
47
        sc_signal<bool> mreq_n;
48
        sc_signal<bool> iorq_n;
49
        sc_signal<bool> rd_n;
50
        sc_signal<bool> wr_n;
51
        sc_signal<bool> rfsh_n;
52
        sc_signal<bool> halt_n;
53
        sc_signal<bool> busak_n;
54
        sc_signal<uint32_t>     di;
55 92 ghutchis
        sc_signal<uint32_t> di_mem;
56
        sc_signal<uint32_t> di_resp;
57 91 ghutchis
        sc_signal<uint32_t>     dout;
58
        sc_signal<uint32_t>     addr;
59
 
60
        Vtv80s tv80s ("tv80s");
61
        tv80s.A (addr);
62
        tv80s.reset_n (reset_n);
63
        tv80s.clk (clk);
64
        tv80s.wait_n (wait_n);
65
        tv80s.int_n (int_n);
66
        tv80s.nmi_n (nmi_n);
67
        tv80s.busrq_n (busrq_n);
68
        tv80s.m1_n (m1_n);
69
        tv80s.mreq_n (mreq_n);
70
        tv80s.iorq_n (iorq_n);
71
        tv80s.rd_n (rd_n);
72
        tv80s.wr_n (wr_n);
73
        tv80s.rfsh_n (rfsh_n);
74
        tv80s.halt_n (halt_n);
75
        tv80s.busak_n (busak_n);
76
        tv80s.di (di);
77
        tv80s.dout (dout);
78
 
79
    env_memory env_memory0("env_memory0");
80
    env_memory0.clk (clk);
81
    env_memory0.wr_data (dout);
82
    env_memory0.rd_data (di);
83
    env_memory0.mreq_n (mreq_n);
84
    env_memory0.rd_n (rd_n);
85
    env_memory0.wr_n (wr_n);
86
    env_memory0.addr (addr);
87 94 ghutchis
    env_memory0.reset_n (reset_n);
88 92 ghutchis
 
89
    tv_responder tv_resp0("tv_resp0");
90
    tv_resp0.clk (clk);
91
    tv_resp0.reset_n (reset_n);
92
    tv_resp0.wait_n (wait_n);
93
    tv_resp0.int_n (int_n);
94
    tv_resp0.nmi_n (nmi_n);
95
    tv_resp0.busak_n (busak_n);
96
    tv_resp0.busrq_n (busrq_n);
97
    tv_resp0.m1_n (m1_n);
98
    tv_resp0.mreq_n (mreq_n);
99
    tv_resp0.iorq_n (iorq_n);
100
    tv_resp0.rd_n (rd_n);
101
    tv_resp0.wr_n (wr_n);
102
    tv_resp0.addr (addr);
103
    tv_resp0.di_resp (di_resp);
104
    tv_resp0.dout (dout);
105
    tv_resp0.halt_n (halt_n);
106 96 ghutchis
 
107
    dec0.clk (clk);
108
    dec0.m1_n (m1_n);
109
    dec0.addr (addr);
110
    dec0.mreq_n (mreq_n);
111
    dec0.rd_n (rd_n);
112
    dec0.wait_n (wait_n);
113
    dec0.di (di);
114
    dec0.reset_n (reset_n);
115 91 ghutchis
 
116 92 ghutchis
    // create dumpfile
117 94 ghutchis
    /*
118 92 ghutchis
    sc_trace_file *trace_file;
119
    trace_file = sc_create_vcd_trace_file("sc_tv80_env");
120
    sc_trace (trace_file, clk, "clk");
121
    sc_trace (trace_file, reset_n, "reset_n");
122
    sc_trace (trace_file, wait_n, "wait_n");
123
    sc_trace (trace_file, int_n, "int_n");
124
    sc_trace (trace_file, nmi_n, "nmi_n");
125
    sc_trace (trace_file, busrq_n, "busrq_n");
126
    sc_trace (trace_file, m1_n, "m1_n");
127
    sc_trace (trace_file, mreq_n, "mreq_n");
128
    sc_trace (trace_file, iorq_n, "iorq_n");
129
    sc_trace (trace_file, rd_n, "rd_n");
130
    sc_trace (trace_file, wr_n, "wr_n");
131
    sc_trace (trace_file, halt_n, "halt_n");
132
    sc_trace (trace_file, busak_n, "busak_n");
133
    sc_trace (trace_file, di, "di");
134
    sc_trace (trace_file, dout, "dout");
135
    sc_trace (trace_file, addr, "addr");
136 95 ghutchis
    */
137 94 ghutchis
 
138
    // Start Verilator traces
139 95 ghutchis
    if (dumping) {
140
        Verilated::traceEverOn(true);
141
        tfp = new SpTraceFile;
142
        tv80s.trace (tfp, 99);
143
        tfp->open (dumpfile_name);
144
    }
145 92 ghutchis
 
146 94 ghutchis
        // check for command line argument
147 95 ghutchis
        if (memfile) {
148
                printf ("Loading IHEX file %s\n", mem_src_name);
149
                env_memory0.load_ihex (mem_src_name);
150 94 ghutchis
        }
151
 
152
        // set reset to 0 before sim start
153
        reset_n.write (0);
154 92 ghutchis
 
155 94 ghutchis
    sc_start();
156
    /*
157 92 ghutchis
    sc_close_vcd_trace_file (trace_file);
158 94 ghutchis
    */
159 95 ghutchis
    if (dumping)
160
        tfp->close();
161 92 ghutchis
 
162 91 ghutchis
    return 0;
163 92 ghutchis
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.