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