1 // 2 // Copyright (c) 2010-2024 Antmicro 3 // 4 // This file is licensed under the MIT License. 5 // Full license text is available in 'licenses/MIT.txt'. 6 // 7 #ifndef AxiSlave_H 8 #define AxiSlave_H 9 #include "axi.h" 10 #include <src/renode_bus.h> 11 12 enum class AxiReadState {AR, R}; 13 enum class AxiWriteState {AW, W, B}; 14 15 struct AxiSlave : public BaseAxi, public BaseInitiatorBus 16 { 17 AxiSlave(uint32_t dataWidth, uint32_t addrWidth); 18 virtual void tick(bool countEnable, uint64_t steps); 19 virtual void timeoutTick(uint8_t* signal, uint8_t expectedValue, int timeout); 20 virtual void write(uint64_t addr, uint64_t value); 21 virtual uint64_t read(uint64_t addr); 22 virtual void reset(); 23 24 void readWord(uint64_t addr, uint8_t sel); 25 void writeWord(uint64_t addr, uint64_t data, uint8_t strb); 26 27 void clearSignals(); 28 void updateSignals(); 29 void writeHandler(); 30 void readHandler(); 31 hasSpecifiedAdressAxiSlave32 bool hasSpecifiedAdress() override { throw "unimplemented"; } getSpecifiedAdressAxiSlave33 uint64_t getSpecifiedAdress() override { throw "unimplemented"; } 34 35 AxiWriteState writeState; 36 AxiReadState readState; 37 38 uint8_t awready_new; 39 uint8_t wready_new; 40 uint8_t bvalid_new; 41 42 uint8_t arready_new; 43 uint8_t rvalid_new; 44 uint8_t rlast_new; 45 uint64_t rdata_new; 46 47 AxiBurstType writeBurstType; 48 uint64_t writeAddr; 49 uint8_t writeNumBytes; 50 51 AxiBurstType readBurstType; 52 uint64_t readAddr; 53 uint8_t readLen; 54 uint8_t readNumBytes; 55 56 char buffer [50]; 57 }; 58 #endif 59