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

Subversion Repositories tv80

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

Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

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