Module Hardcaml.Cyclesim
Cycle accurate simulator
module Port_list : sig ... end- type t_port_list- = (Port_list.t, Port_list.t) t
- val scheduling_deps : Signal.t -> Signal.t Hardcaml__.Import.list
- Specialised signal dependencies that define a graph that breaks cycles through sequential elements. This is done by removing the input edges of registers and memories (excluding the read address, since hardcaml memories are read asynchronously). - Instantiations do not allow cycles from output to input ports, which is a valid assumption for the simulator, but not in general. - Note that all signals in the graph cannot be reached from just the outputs of a circuit using these dependencies. The (discarded) inputs to all registers and memories must also be included. 
- val cycle : (_, _) t -> Hardcaml__.Import.unit
- advance by 1 clock cycle (check->comb->seq->comb) 
- val cycle_check : (_, _) t -> Hardcaml__.Import.unit
- check inputs are valid before a simulation cycle 
- val cycle_before_clock_edge : (_, _) t -> Hardcaml__.Import.unit
- update combinatorial logic before clock edge and relative to new inputs. 
- val cycle_at_clock_edge : (_, _) t -> Hardcaml__.Import.unit
- update sequential logic - registers and memories. 
- val cycle_after_clock_edge : (_, _) t -> Hardcaml__.Import.unit
- update combinatorial logic after clock edge 
- val reset : (_, _) t -> Hardcaml__.Import.unit
- reset simulator 
- val in_port : (_, _) t -> Hardcaml__.Import.string -> Bits.t Hardcaml__.Import.ref
- get input port given a name 
- val out_port : ?clock_edge:Side.t -> (_, _) t -> Hardcaml__.Import.string -> Bits.t Hardcaml__.Import.ref
- Get output port given a name. If - clock_edgeis- Beforethe outputs are computed prior to the clock edge -- Aftermeans the outputs are computed after the clock edge.
- val inputs : ('i, _) t -> 'i
- val outputs : ?clock_edge:Side.t -> (_, 'o) t -> 'o
- val in_ports : (_, _) t -> Port_list.t
- val out_ports : ?clock_edge:Side.t -> (_, _) t -> Port_list.t
- val internal_ports : (_, _) t -> Port_list.t
- get list of internal nodes 
- val lookup_signal : (_, _) t -> Signal.Uid.t -> Bits.t Hardcaml__.Import.ref
- val lookup_reg : (_, _) t -> Signal.Uid.t -> Bits.t Hardcaml__.Import.ref
- type 'a with_create_options- = ?is_internal_port:(Signal.t -> Hardcaml__.Import.bool) -> ?combinational_ops_database:Combinational_ops_database.t -> 'a
- val create : (Circuit.t -> t_port_list) with_create_options
- construct a simulator from a circuit 
module Combine_error : sig ... end- val combine : ?port_sets_may_differ:Hardcaml__.Import.bool -> ?on_error:(Combine_error.t -> Hardcaml__.Import.unit) -> ('i, 'o) t -> ('i, 'o) t -> ('i, 'o) t
- Combine 2 simulators. The inputs are set on the 1st simulator and copied to the 2nd. Outputs are checked and - on_erroris called if a difference is found. By default,- on_errorraises.- The simulators should have the same input and output port sets, unless - port_sets_may_differis- true, in which case only ports which exist on both simulators are checked.
module With_interface : functor (I : Interface.S) -> functor (O : Interface.S) -> sig ... endmodule Private : sig ... end