Source file internal_bus_intf.ml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
open! Base
open! Hardcaml

module type S = sig
  (** A simpler master to slave interface decoded from AXI requests. *)
  module Master_to_slave : Internal_bus_ports.Master_to_slave

  (** A simpler slave to master interface to be encoded to AXI response. *)
  module Slave_to_master : Internal_bus_ports.Slave_to_master

  (** Demultiplex one master across one or more slaves. *)
  module Demultiplexer : sig
    (** @inline *)
    include
      Demultiplexer.S
      with module Master_to_slave := Master_to_slave
       and module Slave_to_master := Slave_to_master
  end

  (** RAM with per byte enable and configurable size. *)
  module Ram_with_byte_enables : sig
    (** @inline *)
    include
      Ram_with_byte_enables.S
      with module Master_to_slave := Master_to_slave
       and module Slave_to_master := Slave_to_master
  end

  (** Bank of read/write registers connected to a Master interface. *)
  module Register_bank : sig
    (** @inline *)
    include
      Register_bank.S
      with module Master_to_slave := Master_to_slave
       and module Slave_to_master := Slave_to_master
  end
end

module type Internal_bus = sig
  module type S = S

  module Make (X : Master_slave_bus_config.S) : S

  (** With 32 bit data and address bus *)
  module W32 : S
end