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

Subversion Repositories tv80

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

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

powered by: WebSVN 2.1.0

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