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 3

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

Line No. Rev Author Line
1 3 sergeykhbr
/**
2
 * @file
3
 * @copyright  Copyright 2016 GNSS Sensor Ltd. All right reserved.
4
 * @author     Sergey Khabarov - sergeykhbr@gmail.com
5
 * @brief      "River" CPU Top level.
6
 */
7
 
8
#include "river_top.h"
9
 
10
namespace debugger {
11
 
12
RiverTop::RiverTop(sc_module_name name_)
13
    : sc_module(name_) {
14
 
15
    proc0 = new Processor("proc0");
16
    proc0->i_clk(i_clk);
17
    proc0->i_nrst(i_nrst);
18
    proc0->i_req_ctrl_ready(w_req_ctrl_ready);
19
    proc0->o_req_ctrl_valid(w_req_ctrl_valid);
20
    proc0->o_req_ctrl_addr(wb_req_ctrl_addr);
21
    proc0->i_resp_ctrl_valid(w_resp_ctrl_valid);
22
    proc0->i_resp_ctrl_addr(wb_resp_ctrl_addr);
23
    proc0->i_resp_ctrl_data(wb_resp_ctrl_data);
24
    proc0->o_resp_ctrl_ready(w_resp_ctrl_ready);
25
    proc0->i_req_data_ready(w_req_data_ready);
26
    proc0->o_req_data_valid(w_req_data_valid);
27
    proc0->o_req_data_write(w_req_data_write);
28
    proc0->o_req_data_addr(wb_req_data_addr);
29
    proc0->o_req_data_size(wb_req_data_size);
30
    proc0->o_req_data_data(wb_req_data_data);
31
    proc0->i_resp_data_valid(w_resp_data_valid);
32
    proc0->i_resp_data_addr(wb_resp_data_addr);
33
    proc0->i_resp_data_data(wb_resp_data_data);
34
    proc0->o_resp_data_ready(w_resp_data_ready);
35
    proc0->i_ext_irq(i_ext_irq);
36
    proc0->o_time(o_time);
37
    proc0->i_dport_valid(i_dport_valid);
38
    proc0->i_dport_write(i_dport_write);
39
    proc0->i_dport_region(i_dport_region);
40
    proc0->i_dport_addr(i_dport_addr);
41
    proc0->i_dport_wdata(i_dport_wdata);
42
    proc0->o_dport_ready(o_dport_ready);
43
    proc0->o_dport_rdata(o_dport_rdata);
44
    proc0->i_istate(wb_istate);
45
    proc0->i_dstate(wb_dstate);
46
    proc0->i_cstate(wb_cstate);
47
 
48
    cache0 = new CacheTop("cache0");
49
    cache0->i_clk(i_clk);
50
    cache0->i_nrst(i_nrst);
51
    cache0->i_req_ctrl_valid(w_req_ctrl_valid);
52
    cache0->i_req_ctrl_addr(wb_req_ctrl_addr);
53
    cache0->o_req_ctrl_ready(w_req_ctrl_ready);
54
    cache0->o_resp_ctrl_valid(w_resp_ctrl_valid);
55
    cache0->o_resp_ctrl_addr(wb_resp_ctrl_addr);
56
    cache0->o_resp_ctrl_data(wb_resp_ctrl_data);
57
    cache0->i_resp_ctrl_ready(w_resp_ctrl_ready);
58
    cache0->i_req_data_valid(w_req_data_valid);
59
    cache0->i_req_data_write(w_req_data_write);
60
    cache0->i_req_data_addr(wb_req_data_addr);
61
    cache0->i_req_data_size(wb_req_data_size);
62
    cache0->i_req_data_data(wb_req_data_data);
63
    cache0->o_req_data_ready(w_req_data_ready);
64
    cache0->o_resp_data_valid(w_resp_data_valid);
65
    cache0->o_resp_data_addr(wb_resp_data_addr);
66
    cache0->o_resp_data_data(wb_resp_data_data);
67
    cache0->i_resp_data_ready(w_resp_data_ready);
68
    cache0->i_req_mem_ready(i_req_mem_ready);
69
    cache0->o_req_mem_valid(o_req_mem_valid);
70
    cache0->o_req_mem_write(o_req_mem_write);
71
    cache0->o_req_mem_addr(o_req_mem_addr);
72
    cache0->o_req_mem_strob(o_req_mem_strob);
73
    cache0->o_req_mem_data(o_req_mem_data);
74
    cache0->i_resp_mem_data_valid(i_resp_mem_data_valid);
75
    cache0->i_resp_mem_data(i_resp_mem_data);
76
    cache0->o_istate(wb_istate);
77
    cache0->o_dstate(wb_dstate);
78
    cache0->o_cstate(wb_cstate);
79
};
80
 
81
RiverTop::~RiverTop() {
82
    delete cache0;
83
    delete proc0;
84
}
85
 
86
void RiverTop::generateVCD(sc_trace_file *i_vcd, sc_trace_file *o_vcd) {
87
    /**
88
     * ModelSim commands for automatic comparision Stimulus vs SystemC reference:
89
     *
90
     * Convert VCD to WLF and back to VCD because ModelSim supports only
91
     * 1-bit signals, such conversion allows to create compatible VCD-file.
92
     *
93
     * 1. Prepare compatible VCD/wlf files:
94
     *      vcd2wlf E:/../win32build/Debug/i_river.vcd -o e:/i_river.wlf
95
     *      vcd2wlf E:/../win32build/Debug/o_river.vcd -o e:/o_river.wlf
96
     *      wlf2vcd e:/i_river.wlf -o e:/i_river.vcd
97
     *
98
     * 2. Add waves to simulation view and simulate 350 us:
99
     *      vsim -t 1ps -vcdstim E:/i_river.vcd riverlib.RiverTop
100
     *      vsim -view e:/o_river.wlf
101
     *      add wave o_river:/SystemC/ *
102
     *      add wave sim:/rivertop/ *
103
     *      run 350us
104
     *
105
     * 3. Start automatic comparision:
106
     *      compare start o_river sim
107
     *      compare add -wave sim:/RiverTop/o_req_mem_valid o_river:/SystemC/o_req_mem_valid
108
     *      compare add -wave sim:/RiverTop/o_req_mem_write o_river:/SystemC/o_req_mem_write
109
     *      compare add -wave sim:/RiverTop/o_req_mem_addr o_river:/SystemC/o_req_mem_addr
110
     *      compare add -wave sim:/RiverTop/o_req_mem_strob o_river:/SystemC/o_req_mem_strob
111
     *      compare add -wave sim:/RiverTop/o_req_mem_data o_river:/SystemC/o_req_mem_data
112
     *      compare add -wave sim:/RiverTop/o_step_cnt o_river:/SystemC/o_step_cnt
113
     *      compare run
114
     *
115
     */
116
    if (i_vcd) {
117
        sc_trace(i_vcd, i_clk, "i_clk");
118
        sc_trace(i_vcd, i_nrst, "i_nrst");
119
        sc_trace(i_vcd, i_req_mem_ready, "i_req_mem_ready");
120
        sc_trace(i_vcd, i_resp_mem_data_valid, "i_resp_mem_data_valid");
121
        sc_trace(i_vcd, i_resp_mem_data, "i_resp_mem_data");
122
        sc_trace(i_vcd, i_ext_irq, "i_ext_irq");
123
        sc_trace(i_vcd, i_dport_valid, "i_dport_valid");
124
        sc_trace(i_vcd, i_dport_write, "i_dport_write");
125
        sc_trace(i_vcd, i_dport_region, "i_dport_region");
126
        sc_trace(i_vcd, i_dport_addr, "i_dport_addr");
127
        sc_trace(i_vcd, i_dport_wdata, "i_dport_wdata");
128
 
129
    }
130
    if (o_vcd) {
131
        sc_trace(o_vcd, o_req_mem_valid, "o_req_mem_valid");
132
        sc_trace(o_vcd, o_req_mem_write, "o_req_mem_write");
133
        sc_trace(o_vcd, o_req_mem_addr, "o_req_mem_addr");
134
        sc_trace(o_vcd, o_req_mem_strob, "o_req_mem_strob");
135
        sc_trace(o_vcd, o_req_mem_data, "o_req_mem_data");
136
        sc_trace(o_vcd, o_time, "o_time");
137
        sc_trace(o_vcd, o_dport_ready, "o_dport_ready");
138
        sc_trace(o_vcd, o_dport_rdata, "o_dport_rdata");
139
    }
140
 
141
    proc0->generateVCD(i_vcd, o_vcd);
142
    cache0->generateVCD(i_vcd, o_vcd);
143
}
144
 
145
}  // namespace debugger
146
 

powered by: WebSVN 2.1.0

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