1 //
2 // Copyright (c) 2010-2025 Antmicro
3 //
4 // This file is licensed under the MIT License.
5 // Full license text is available in 'licenses/MIT.txt'.
6 //
7 #ifndef BaseBus_H
8 #define BaseBus_H
9 
10 #include <cstdint>
11 
12 #ifndef DEFAULT_TIMEOUT
13 #define DEFAULT_TIMEOUT 2000
14 #endif
15 
16 class RenodeAgent;
17 
18 class BaseBus
19 {
20 public:
BaseBus()21     BaseBus() : agent(nullptr), tickCounter(0) {}
22     virtual void tick(bool countEnable, uint64_t steps) = 0;
23     virtual void timeoutTick(uint8_t* signal, uint8_t expectedValue, int timeout) = 0;
24     virtual void reset() = 0;
25     void (*evaluateModel)();
26     virtual void setAgent(RenodeAgent *newAgent);
27 protected:
28     virtual bool areSignalsConnected() = 0;
29     friend class RenodeAgent;
30     RenodeAgent *agent;
31     uint64_t tickCounter;
32     template<typename T>
setSignal(T * signal,T value)33     void setSignal(T* signal, T value) {
34       *signal = value;
35       evaluateModel();
36     }
37     bool isSignalConnected(void* signal, const char *signalName);
38 };
39 
40 class BaseTargetBus : virtual public BaseBus
41 {
42 public:
43     virtual void write(int width, uint64_t addr, uint64_t value) = 0;
44     virtual uint64_t read(int width, uint64_t addr) = 0;
45 };
46 
47 class BaseInitiatorBus : virtual public BaseBus
48 {
49 public:
50     virtual void readWord(uint64_t addr, uint8_t sel) = 0;
51     virtual void writeWord(uint64_t addr, uint64_t data, uint8_t sel) = 0;
52     virtual void readHandler() = 0;
53     virtual void writeHandler() = 0;
54     virtual void clearSignals() = 0;
55     virtual bool hasSpecifiedAdress() = 0;
56     virtual uint64_t getSpecifiedAdress() = 0;
57 };
58 #endif
59