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