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

Subversion Repositories riscv_vhdl

[/] [riscv_vhdl/] [trunk/] [debugger/] [src/] [cpu_sysc_plugin/] [riverlib/] [river_top.cpp] - Blame information for rev 4

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 4 sergeykhbr
/*
2
 *  Copyright 2018 Sergey Khabarov, sergeykhbr@gmail.com
3
 *
4
 *  Licensed under the Apache License, Version 2.0 (the "License");
5
 *  you may not use this file except in compliance with the License.
6
 *  You may obtain a copy of the License at
7
 *
8
 *      http://www.apache.org/licenses/LICENSE-2.0
9
 *
10
 *  Unless required by applicable law or agreed to in writing, software
11
 *  distributed under the License is distributed on an "AS IS" BASIS,
12
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
 *  See the License for the specific language governing permissions and
14
 *  limitations under the License.
15 3 sergeykhbr
 */
16
 
17
#include "river_top.h"
18
 
19
namespace debugger {
20
 
21
RiverTop::RiverTop(sc_module_name name_)
22
    : sc_module(name_) {
23
 
24
    proc0 = new Processor("proc0");
25
    proc0->i_clk(i_clk);
26
    proc0->i_nrst(i_nrst);
27
    proc0->i_req_ctrl_ready(w_req_ctrl_ready);
28
    proc0->o_req_ctrl_valid(w_req_ctrl_valid);
29
    proc0->o_req_ctrl_addr(wb_req_ctrl_addr);
30
    proc0->i_resp_ctrl_valid(w_resp_ctrl_valid);
31
    proc0->i_resp_ctrl_addr(wb_resp_ctrl_addr);
32
    proc0->i_resp_ctrl_data(wb_resp_ctrl_data);
33
    proc0->o_resp_ctrl_ready(w_resp_ctrl_ready);
34
    proc0->i_req_data_ready(w_req_data_ready);
35
    proc0->o_req_data_valid(w_req_data_valid);
36
    proc0->o_req_data_write(w_req_data_write);
37
    proc0->o_req_data_addr(wb_req_data_addr);
38
    proc0->o_req_data_size(wb_req_data_size);
39
    proc0->o_req_data_data(wb_req_data_data);
40
    proc0->i_resp_data_valid(w_resp_data_valid);
41
    proc0->i_resp_data_addr(wb_resp_data_addr);
42
    proc0->i_resp_data_data(wb_resp_data_data);
43
    proc0->o_resp_data_ready(w_resp_data_ready);
44
    proc0->i_ext_irq(i_ext_irq);
45
    proc0->o_time(o_time);
46
    proc0->i_dport_valid(i_dport_valid);
47
    proc0->i_dport_write(i_dport_write);
48
    proc0->i_dport_region(i_dport_region);
49
    proc0->i_dport_addr(i_dport_addr);
50
    proc0->i_dport_wdata(i_dport_wdata);
51
    proc0->o_dport_ready(o_dport_ready);
52
    proc0->o_dport_rdata(o_dport_rdata);
53
    proc0->i_istate(wb_istate);
54
    proc0->i_dstate(wb_dstate);
55
    proc0->i_cstate(wb_cstate);
56
 
57
    cache0 = new CacheTop("cache0");
58
    cache0->i_clk(i_clk);
59
    cache0->i_nrst(i_nrst);
60
    cache0->i_req_ctrl_valid(w_req_ctrl_valid);
61
    cache0->i_req_ctrl_addr(wb_req_ctrl_addr);
62
    cache0->o_req_ctrl_ready(w_req_ctrl_ready);
63
    cache0->o_resp_ctrl_valid(w_resp_ctrl_valid);
64
    cache0->o_resp_ctrl_addr(wb_resp_ctrl_addr);
65
    cache0->o_resp_ctrl_data(wb_resp_ctrl_data);
66
    cache0->i_resp_ctrl_ready(w_resp_ctrl_ready);
67
    cache0->i_req_data_valid(w_req_data_valid);
68
    cache0->i_req_data_write(w_req_data_write);
69
    cache0->i_req_data_addr(wb_req_data_addr);
70
    cache0->i_req_data_size(wb_req_data_size);
71
    cache0->i_req_data_data(wb_req_data_data);
72
    cache0->o_req_data_ready(w_req_data_ready);
73
    cache0->o_resp_data_valid(w_resp_data_valid);
74
    cache0->o_resp_data_addr(wb_resp_data_addr);
75
    cache0->o_resp_data_data(wb_resp_data_data);
76
    cache0->i_resp_data_ready(w_resp_data_ready);
77
    cache0->i_req_mem_ready(i_req_mem_ready);
78
    cache0->o_req_mem_valid(o_req_mem_valid);
79
    cache0->o_req_mem_write(o_req_mem_write);
80
    cache0->o_req_mem_addr(o_req_mem_addr);
81
    cache0->o_req_mem_strob(o_req_mem_strob);
82
    cache0->o_req_mem_data(o_req_mem_data);
83
    cache0->i_resp_mem_data_valid(i_resp_mem_data_valid);
84
    cache0->i_resp_mem_data(i_resp_mem_data);
85
    cache0->o_istate(wb_istate);
86
    cache0->o_dstate(wb_dstate);
87
    cache0->o_cstate(wb_cstate);
88
};
89
 
90
RiverTop::~RiverTop() {
91
    delete cache0;
92
    delete proc0;
93
}
94
 
95
void RiverTop::generateVCD(sc_trace_file *i_vcd, sc_trace_file *o_vcd) {
96
    /**
97
     * ModelSim commands for automatic comparision Stimulus vs SystemC reference:
98
     *
99
     * Convert VCD to WLF and back to VCD because ModelSim supports only
100
     * 1-bit signals, such conversion allows to create compatible VCD-file.
101
     *
102
     * 1. Prepare compatible VCD/wlf files:
103
     *      vcd2wlf E:/../win32build/Debug/i_river.vcd -o e:/i_river.wlf
104
     *      vcd2wlf E:/../win32build/Debug/o_river.vcd -o e:/o_river.wlf
105
     *      wlf2vcd e:/i_river.wlf -o e:/i_river.vcd
106
     *
107
     * 2. Add waves to simulation view and simulate 350 us:
108
     *      vsim -t 1ps -vcdstim E:/i_river.vcd riverlib.RiverTop
109
     *      vsim -view e:/o_river.wlf
110
     *      add wave o_river:/SystemC/ *
111
     *      add wave sim:/rivertop/ *
112
     *      run 350us
113
     *
114
     * 3. Start automatic comparision:
115
     *      compare start o_river sim
116
     *      compare add -wave sim:/RiverTop/o_req_mem_valid o_river:/SystemC/o_req_mem_valid
117
     *      compare add -wave sim:/RiverTop/o_req_mem_write o_river:/SystemC/o_req_mem_write
118
     *      compare add -wave sim:/RiverTop/o_req_mem_addr o_river:/SystemC/o_req_mem_addr
119
     *      compare add -wave sim:/RiverTop/o_req_mem_strob o_river:/SystemC/o_req_mem_strob
120
     *      compare add -wave sim:/RiverTop/o_req_mem_data o_river:/SystemC/o_req_mem_data
121
     *      compare add -wave sim:/RiverTop/o_step_cnt o_river:/SystemC/o_step_cnt
122
     *      compare run
123
     *
124
     */
125
    if (i_vcd) {
126
        sc_trace(i_vcd, i_clk, "i_clk");
127
        sc_trace(i_vcd, i_nrst, "i_nrst");
128
        sc_trace(i_vcd, i_req_mem_ready, "i_req_mem_ready");
129
        sc_trace(i_vcd, i_resp_mem_data_valid, "i_resp_mem_data_valid");
130
        sc_trace(i_vcd, i_resp_mem_data, "i_resp_mem_data");
131
        sc_trace(i_vcd, i_ext_irq, "i_ext_irq");
132
        sc_trace(i_vcd, i_dport_valid, "i_dport_valid");
133
        sc_trace(i_vcd, i_dport_write, "i_dport_write");
134
        sc_trace(i_vcd, i_dport_region, "i_dport_region");
135
        sc_trace(i_vcd, i_dport_addr, "i_dport_addr");
136
        sc_trace(i_vcd, i_dport_wdata, "i_dport_wdata");
137
 
138
    }
139
    if (o_vcd) {
140
        sc_trace(o_vcd, o_req_mem_valid, "o_req_mem_valid");
141
        sc_trace(o_vcd, o_req_mem_write, "o_req_mem_write");
142
        sc_trace(o_vcd, o_req_mem_addr, "o_req_mem_addr");
143
        sc_trace(o_vcd, o_req_mem_strob, "o_req_mem_strob");
144
        sc_trace(o_vcd, o_req_mem_data, "o_req_mem_data");
145
        sc_trace(o_vcd, o_time, "o_time");
146
        sc_trace(o_vcd, o_dport_ready, "o_dport_ready");
147
        sc_trace(o_vcd, o_dport_rdata, "o_dport_rdata");
148
    }
149
 
150
    proc0->generateVCD(i_vcd, o_vcd);
151
    cache0->generateVCD(i_vcd, o_vcd);
152
}
153
 
154
}  // namespace debugger
155
 

powered by: WebSVN 2.1.0

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