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

Subversion Repositories riscv_vhdl

[/] [riscv_vhdl/] [trunk/] [debugger/] [src/] [common/] [coreservices/] [icpufunctional.h] - Blame information for rev 5

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 5 sergeykhbr
/**
2
 * @file
3
 * @copyright  Copyright 2017 GNSS Sensor Ltd. All right reserved.
4
 * @author     Sergey Khabarov - sergeykhbr@gmail.com
5
 * @brief      Functional CPU model interface.
6
 */
7
 
8
#ifndef __DEBUGGER_COMMON_CORESERVICES_ICPUFUNCTIONAL_H__
9
#define __DEBUGGER_COMMON_CORESERVICES_ICPUFUNCTIONAL_H__
10
 
11
#include <inttypes.h>
12
#include <iface.h>
13
#include <api_types.h>
14
#include "coreservices/imemop.h"
15
 
16
namespace debugger {
17
 
18
static const char *const IFACE_INSTRUCTION = "IInstruction";
19
 
20
class IInstruction : public IFace {
21
 public:
22
    IInstruction() : IFace(IFACE_INSTRUCTION) {}
23
 
24
    virtual const char *name() = 0;
25
    /** Return instruction size */
26
    virtual int exec(Reg64Type *payload) = 0;
27
};
28
 
29
class GenericInstruction : public IInstruction {
30
 public:
31
    GenericInstruction() : IInstruction() {}
32
};
33
 
34
enum EEndianessType {
35
    LittleEndian,
36
    BigEndian,
37
};
38
 
39
static const char *const IFACE_CPU_FUNCTIONAL = "ICpuFunctional";
40
 
41
class ICpuFunctional : public IFace {
42
 public:
43
    ICpuFunctional() : IFace(IFACE_CPU_FUNCTIONAL) {}
44
 
45
    virtual void raiseSoftwareIrq() = 0;
46
    virtual uint64_t getPC() = 0;
47
    virtual void setBranch(uint64_t npc) = 0;
48
    virtual void pushStackTrace() = 0;
49
    virtual void popStackTrace() = 0;
50
    virtual uint64_t getPrvLevel() = 0;
51
    virtual void setPrvLevel(uint64_t lvl) = 0;
52
    virtual void dma_memop(Axi4TransactionType *tr) = 0;
53
    virtual bool isOn() = 0;
54
    virtual bool isHalt() = 0;
55
    virtual bool isSwBreakpoint() = 0;
56
    virtual bool isHwBreakpoint() = 0;
57
    virtual void go() = 0;
58
    virtual void halt(const char *descr) = 0;
59
    virtual void step() = 0;
60
    virtual void addHwBreakpoint(uint64_t addr) = 0;
61
    virtual void removeHwBreakpoint(uint64_t addr) = 0;
62
    virtual void skipBreakpoint() = 0;
63
 
64
  protected:
65
    virtual uint64_t getResetAddress() = 0;
66
    virtual uint64_t getIrqAddress(int idx) = 0;
67
    virtual EEndianessType endianess() = 0;
68
    virtual GenericInstruction *decodeInstruction(Reg64Type *cache) = 0;
69
    virtual void generateIllegalOpcode() = 0;
70
    virtual void handleTrap() = 0;
71
    /** Tack Registers changes during execution */
72
    virtual void trackContextStart() = 0;
73
    /** Stop tracking and write trace file */
74
    virtual void trackContextEnd() = 0;
75
};
76
 
77
}  // namespace debugger
78
 
79
#endif  // __DEBUGGER_COMMON_CORESERVICES_ICPUFUNCTIONAL_H__

powered by: WebSVN 2.1.0

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