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
8interface renode_axi_if #(
9    int unsigned AddressWidth = 32,
10    int unsigned DataWidth = 32,
11    int unsigned TransactionIdWidth = 8
12) (
13    input logic aclk
14);
15  import renode_axi_pkg::*;
16
17  localparam int unsigned StrobeWidth = (DataWidth / 8);
18
19  typedef logic [AddressWidth-1:0] address_t;
20  typedef logic [DataWidth-1:0] data_t;
21  typedef logic [StrobeWidth-1:0] strobe_t;
22  typedef logic [TransactionIdWidth-1:0] transaction_id_t;
23
24  logic                  areset_n;
25  transaction_id_t       awid;
26  address_t              awaddr;
27  burst_length_t         awlen;
28  burst_size_t           awsize;
29  burst_type_t           awburst;
30  logic                  awlock;
31  logic            [3:0] awcache;
32  logic            [2:0] awprot;
33  logic                  awvalid;
34  logic                  awready;
35  data_t                 wdata;
36  strobe_t               wstrb;
37  logic                  wlast;
38  logic                  wvalid;
39  logic                  wready;
40  transaction_id_t       bid;
41  response_t             bresp;
42  logic                  bvalid;
43  logic                  bready;
44  transaction_id_t       arid;
45  address_t              araddr;
46  burst_length_t         arlen;
47  burst_size_t           arsize;
48  burst_type_t           arburst;
49  logic                  arlock;
50  logic            [3:0] arcache;
51  logic            [2:0] arprot;
52  logic                  arvalid;
53  logic                  arready;
54  transaction_id_t       rid;
55  data_t                 rdata;
56  response_t             rresp;
57  logic                  rlast;
58  logic                  rvalid;
59  logic                  rready;
60
61  function static bit are_valid_bits_supported(renode_pkg::valid_bits_e valid_bits);
62    case (valid_bits)
63      renode_pkg::Byte: return DataWidth >= 8;
64      renode_pkg::Word: return DataWidth >= 16;
65      renode_pkg::DoubleWord: return DataWidth >= 32;
66      renode_pkg::QuadWord: return DataWidth >= 64;
67      default: return 0;
68    endcase
69  endfunction
70
71  function static burst_size_t valid_bits_to_burst_size(renode_pkg::valid_bits_e valid_bits);
72    case (valid_bits)
73      renode_pkg::Byte: return 'b000;
74      renode_pkg::Word: return 'b001;
75      renode_pkg::DoubleWord: return 'b010;
76      renode_pkg::QuadWord: return 'b011;
77      default: return 'x;
78    endcase
79  endfunction
80
81  function static renode_pkg::valid_bits_e burst_size_to_valid_bits(burst_size_t burst_size);
82    case (burst_size)
83      'b000: return renode_pkg::Byte;
84      'b001: return renode_pkg::Word;
85      'b010: return renode_pkg::DoubleWord;
86      'b011: return renode_pkg::QuadWord;
87      default: return renode_pkg::valid_bits_e'(0);
88    endcase
89  endfunction
90
91  function automatic strobe_t burst_size_to_strobe(burst_size_t burst_size);
92    int unsigned bytes_count = 2 ** burst_size;
93    return strobe_t'((1 << bytes_count) - 1);
94  endfunction
95endinterface
96