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