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

Subversion Repositories riscv_vhdl

[/] [riscv_vhdl/] [trunk/] [debugger/] [src/] [cpu_sysc_plugin/] [cpu_riscv_rtl.h] - 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      CPU synthesizable SystemC class declaration.
6
 *
7
 * @details    Use the following targets attributes to generate trace files:
8
 *             GenerateRef - Generate memory and registers write accesses
9
 *                           trace files to compare them with functional model
10
 *             InVcdFile   - Stimulus VCD file
11
 *             OutVcdFile  - Reference VCD file with any number of signals
12
 *
13
 * @note       When GenerateRef is true Core uses step counter instead
14
 *             of clock counter to generate callbacks.
15
 */
16
 
17
#ifndef __DEBUGGER_CPU_RISCV_RTL_H__
18
#define __DEBUGGER_CPU_RISCV_RTL_H__
19
 
20
#include "iclass.h"
21
#include "iservice.h"
22
#include "ihap.h"
23
#include "async_tqueue.h"
24
#include "coreservices/ithread.h"
25
#include "coreservices/icpuriscv.h"
26
#include "coreservices/imemop.h"
27
#include "coreservices/ibus.h"
28
#include "coreservices/iclock.h"
29
#include "rtl_wrapper.h"
30
#include "riverlib/river_top.h"
31
#include <systemc.h>
32
 
33
namespace debugger {
34
 
35
class CpuRiscV_RTL : public IService,
36
                 public IThread,
37
                 public IClock,
38
                 public IHap {
39
public:
40
    CpuRiscV_RTL(const char *name);
41
    virtual ~CpuRiscV_RTL();
42
 
43
    /** IService interface */
44
    virtual void postinitService();
45
 
46
    /** IClock */
47
    virtual uint64_t getStepCounter() {
48
        return wb_time.read() + 2;
49
    }
50
 
51
    virtual void registerStepCallback(IClockListener *cb, uint64_t t) {
52
        wrapper_->registerStepCallback(cb, t);
53
    }
54
 
55
    /** IHap */
56
    virtual void hapTriggered(IFace *isrc, EHapType type, const char *descr);
57
 
58
    virtual void stop();
59
 
60
protected:
61
    /** IThread interface */
62
    virtual void busyLoop();
63
 
64
private:
65
    void createSystemC();
66
    void deleteSystemC();
67
 
68
private:
69
    AttributeType bus_;
70
    AttributeType freqHz_;
71
    AttributeType InVcdFile_;
72
    AttributeType OutVcdFile_;
73
    AttributeType GenerateRef_;
74
    event_def config_done_;
75
    IBus *ibus_;
76
 
77
    sc_signal<bool> w_clk;
78
    sc_signal<bool> w_nrst;
79
    // Timer:
80
    sc_signal<sc_uint<64>> wb_time;
81
    // Memory interface:
82
    sc_signal<bool> w_req_mem_ready;
83
    sc_signal<bool> w_req_mem_valid;
84
    sc_signal<bool> w_req_mem_write;
85
    sc_signal<sc_uint<BUS_ADDR_WIDTH>> wb_req_mem_addr;
86
    sc_signal<sc_uint<BUS_DATA_BYTES>> wb_req_mem_strob;
87
    sc_signal<sc_uint<BUS_DATA_WIDTH>> wb_req_mem_data;
88
    sc_signal<bool> w_resp_mem_data_valid;
89
    sc_signal<sc_uint<BUS_DATA_WIDTH>> wb_resp_mem_data;
90
    /** Interrupt line from external interrupts controller. */
91
    sc_signal<bool> w_interrupt;
92
    // Debug interface
93
    sc_signal<bool> w_dport_valid;
94
    sc_signal<bool> w_dport_write;
95
    sc_signal<sc_uint<2>> wb_dport_region;
96
    sc_signal<sc_uint<12>> wb_dport_addr;
97
    sc_signal<sc_uint<RISCV_ARCH>> wb_dport_wdata;
98
    sc_signal<bool> w_dport_ready;
99
    sc_signal<sc_uint<RISCV_ARCH>> wb_dport_rdata;
100
 
101
 
102
    sc_trace_file *i_vcd_;      // stimulus pattern
103
    sc_trace_file *o_vcd_;      // reference pattern for comparision
104
    RiverTop *top_;
105
    RtlWrapper *wrapper_;
106
};
107
 
108
DECLARE_CLASS(CpuRiscV_RTL)
109
 
110
}  // namespace debugger
111
 
112
#endif  // __DEBUGGER_CPU_RISCV_RTL_H__

powered by: WebSVN 2.1.0

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