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