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 Axi_H
8 #define Axi_H
9 #include "bus.h"
10 #include <src/renode_bus.h>
11 
12 enum class AxiBurstType  {FIXED = 0, INCR = 1, WRAP = 2, RESERVED = 3};
13 
14 struct BaseAxi : virtual public BaseBus
15 {
16     bool areSignalsConnected();
17     BaseAxi(uint32_t dataWidth, uint32_t addrWidth);
18 
19     uint32_t dataWidth;
20     uint32_t addrWidth;
21 
22     // Global AXI Signals
23     uint8_t  *aclk = nullptr;
24     uint8_t  *aresetn = nullptr;
25 
26     // Write Address Channel Signals
27     uint8_t  *awid = nullptr;
28     uint32_t *awaddr = nullptr;
29     uint8_t  *awlen = nullptr;
30     uint8_t  *awsize = nullptr;
31     uint8_t  *awburst = nullptr;
32     uint8_t  *awlock = nullptr;
33     uint8_t  *awcache = nullptr;
34     uint8_t  *awprot = nullptr;
35     uint8_t  *awqos = nullptr;
36     uint8_t  *awregion = nullptr;
37     uint8_t  *awuser = nullptr;
38     uint8_t  *awvalid = nullptr;
39     uint8_t  *awready = nullptr;
40 
41     // Write Data Channel Signals
42     uint32_t *wdata = nullptr;
43     uint8_t  *wstrb = nullptr;
44     uint8_t  *wlast = nullptr;
45     uint8_t  *wuser = nullptr;
46     uint8_t  *wvalid = nullptr;
47     uint8_t  *wready = nullptr;
48 
49     // Write Response Channel Signals
50     uint8_t  *bid = nullptr;
51     uint8_t  *bresp = nullptr;
52     uint8_t  *buser = nullptr;
53     uint8_t  *bvalid = nullptr;
54     uint8_t  *bready = nullptr;
55 
56     // Read Address Channel Signals
57     uint8_t  *arid = nullptr;
58     uint32_t *araddr = nullptr;
59     uint8_t  *arlen = nullptr;
60     uint8_t  *arsize = nullptr;
61     uint8_t  *arburst = nullptr;
62     uint8_t  *arlock = nullptr;
63     uint8_t  *arcache = nullptr;
64     uint8_t  *arprot = nullptr;
65     uint8_t  *arqos = nullptr;
66     uint8_t  *arregion = nullptr;
67     uint8_t  *aruser = nullptr;
68     uint8_t  *arvalid = nullptr;
69     uint8_t  *arready = nullptr;
70 
71     // Read Data Channel Signals
72     uint8_t  *rid = nullptr;
73     uint32_t *rdata = nullptr;
74     uint8_t  *rresp = nullptr;
75     uint8_t  *rlast = nullptr;
76     uint8_t  *ruser = nullptr;
77     uint8_t  *rvalid = nullptr;
78     uint8_t  *rready = nullptr;
79 };
80 
81 struct Axi : public BaseAxi, virtual public BaseTargetBus
82 {
83     Axi(uint32_t dataWidth, uint32_t addrWidth);
84     virtual void tick(bool countEnable, uint64_t steps);
85     virtual void write(int width, uint64_t addr, uint64_t value);
86     virtual uint64_t read(int width, uint64_t addr);
87     virtual void reset();
88 
89     void timeoutTick(uint8_t *signal, uint8_t value, int timeout);
90 };
91 #endif
92