Module Hardcaml__.Always

type t
val sexp_of_t : t -> Ppx_sexp_conv_lib.Sexp.t
type always = t
module Variable : sig ... end

The type of variables in guarded assignments. Variables may be asychronous wires, or synchronous regs. The current value of the variable may be accessed through the value field below.

type 'a case = 'a * t Hardcaml__.Import.list
type 'a cases = 'a case Hardcaml__.Import.list
val if_ : Hardcaml.Signal.t -> t Hardcaml__.Import.list -> t Hardcaml__.Import.list -> t

if statement

val elif : Hardcaml.Signal.t -> t Hardcaml__.Import.list -> t Hardcaml__.Import.list -> t Hardcaml__.Import.list

else if branch

val when_ : Hardcaml.Signal.t -> t Hardcaml__.Import.list -> t

if sel then ... else

val unless : Hardcaml.Signal.t -> t Hardcaml__.Import.list -> t

if sel then else ...

val switch : Hardcaml.Signal.t -> Hardcaml.Signal.t cases -> t

switch statement

val proc : t Hardcaml__.Import.list -> t

Allows sequences of expressions to be inserted into the code; a syntactic nicety.

val (<--) : Variable.t -> Hardcaml.Signal.t -> t

assignment

val (<--.) : Variable.t -> Hardcaml__.Import.int -> t

assignment with an integer constant - width is inferred

module State_machine : sig ... end
val compile : t Hardcaml__.Import.list -> Hardcaml__.Import.unit

compile to structural code