123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145openBasemoduletypePrivate=sigtype('i,'o)ttypeport_listtypet_port_listtypetracedtypetraced_io_porttypetraced_internal_signaltypenodetyperegtypememorytypetask=unit->unitvalcreate:?circuit:Circuit.t->in_ports:port_list->out_ports_before_clock_edge:port_list->out_ports_after_clock_edge:port_list->reset:task->cycle_check:task->cycle_before_clock_edge:task->cycle_at_clock_edge:task->cycle_after_clock_edge:task->traced:traced->lookup_node:(traced_internal_signal->nodeoption)->lookup_reg:(traced_internal_signal->regoption)->lookup_mem:(traced_internal_signal->memoryoption)->unit->t_port_listmoduleStep:sigtypet=|Reset|Check|Before_clock_edge|At_clock_edge|After_clock_edge[@@derivingsexp_of]endvalmodify:('i,'o)t->(Side.t*Step.t*task)list->('i,'o)tvalcoerce:(port_list,port_list)t->to_input:(port_list->'i)->to_output:(port_list->'o)->('i,'o)tendmoduletypeCyclesim0=sigmodulePort_list:sigtypet=(string*Bits.tref)list[@@derivingsexp_of]endmoduleTraced:sigtypeio_port={signal:Signal.t;name:string}[@@derivingsexp_of]typeinternal_signal={signal:Signal.t;mangled_names:stringlist}[@@derivingsexp_of]typet={input_ports:io_portlist;output_ports:io_portlist;internal_signals:internal_signallist}[@@derivingsexp_of]valto_io_port:Signal.t->io_portendmoduleNode=Cyclesim_lookup.NodemoduleReg=Cyclesim_lookup.RegmoduleMemory=Cyclesim_lookup.Memorytypetask=unit->unittype('i,'o)t={in_ports:Port_list.t;out_ports_before_clock_edge:Port_list.t;out_ports_after_clock_edge:Port_list.t;inputs:'i;outputs_after_clock_edge:'o;outputs_before_clock_edge:'o;reset:task;cycle_check:task;cycle_before_clock_edge:task;cycle_at_clock_edge:task;cycle_after_clock_edge:task;traced:Traced.t;lookup_node:Traced.internal_signal->Node.toption;lookup_reg:Traced.internal_signal->Reg.toption;lookup_mem:Traced.internal_signal->Memory.toption;circuit:Circuit.toption;node_by_name:Traced.internal_signalMap.M(String).tLazy.t;memory_by_name:Traced.internal_signalMap.M(String).tLazy.t;reg_by_name:Traced.internal_signalMap.M(String).tLazy.t}[@@derivingfields~getters,sexp_of]typet_port_list=(Port_list.t,Port_list.t)tmoduleConfig:sigtypet={is_internal_port:(Signal.t->bool)option(** Passed each signal in the design which has a name. Returns [true] if the
simulator should expose it for reading in the testbench (or display in a
waveform). *);combinational_ops_database:Combinational_ops_database.t(** Database of instantiations which may be replace by a combinational operation. *);deduplicate_signals:bool(** Perform a pass which finds structurally equal signals and shares them. *);store_circuit:bool(** Stores the post-processed circuit that is used to compile the
simulation. This should generally be set to false, so that the Circuit
can be garbage collected once the simulation is constructed.
*)}valdefault:tvaltrace:[`Everything|`All_named|`Ports_only]->tvaltrace_all:tendmoduletypePrivate=PrivatemodulePrivate:Privatewithtype('i,'o)t=('i,'o)tandtypeport_list=Port_list.tandtypet_port_list=t_port_listandtypetraced=Traced.tandtypetraced_io_port=Traced.io_portandtypetraced_internal_signal=Traced.internal_signalandtypenode=Node.tandtypereg=Reg.tandtypememory=Memory.tend