1//
2// Copyright (c) 2023 Renesas Electronics Corporation
3// Copyright (c) 2010-2024 Antmicro
4//
5// This file is licensed under the MIT License.
6// Full license text is available in 'LICENSE'.
7//
8
9interface renode_ahb_if #(
10    int unsigned AddressWidth = 32,
11    int unsigned DataWidth = 32
12) (
13    input logic hclk
14);
15  import renode_ahb_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
23  logic                hresetn;
24  address_t            haddr;
25  data_t               hwdata;
26  data_t               hrdata;
27  burst_t              hburst;
28  transfer_direction_t hwrite;
29  transfer_type_t      htrans;
30  response_t           hresp;
31  transfer_size_t      hsize;
32  strobe_t             hwstrb;
33  logic                hsel;
34  logic                hready;
35  logic                hgrant;
36  logic                hreadyout;
37
38  function static bit are_valid_bits_supported(renode_pkg::valid_bits_e valid_bits);
39    case (valid_bits)
40      renode_pkg::Byte: return DataWidth >= 8;
41      renode_pkg::Word: return DataWidth >= 16;
42      renode_pkg::DoubleWord: return DataWidth >= 32;
43      renode_pkg::QuadWord: return DataWidth >= 64;
44      default: return 0;
45    endcase
46  endfunction
47
48  function static transfer_size_e valid_bits_to_transfer_size(renode_pkg::valid_bits_e valid_bits);
49    case (valid_bits)
50      renode_pkg::Byte: return Byte8bit;
51      renode_pkg::Word: return Halfword16bit;
52      renode_pkg::DoubleWord: return Word32bit;
53      renode_pkg::QuadWord: return Doubleword64bit;
54      default: return transfer_size_e'('x);
55    endcase
56  endfunction
57
58  function static renode_pkg::valid_bits_e transfer_size_to_valid_bits(transfer_size_t transfer_size);
59    case (transfer_size)
60      Byte8bit: return renode_pkg::Byte;
61      Halfword16bit: return renode_pkg::Word;
62      Word32bit: return renode_pkg::DoubleWord;
63      Doubleword64bit: return renode_pkg::QuadWord;
64      default: return renode_pkg::valid_bits_e'(0);
65    endcase
66  endfunction
67
68  function automatic strobe_t transfer_size_to_strobe(transfer_size_t size);
69    int unsigned bytes_count = 2 ** size;
70    return strobe_t'((1 << bytes_count) - 1);
71  endfunction
72endinterface
73