package hardcaml_waveterm

  1. Overview
  2. Docs

A waveform is a mutable value that represents the outcome of a simulation; it holds a time series of values for a number of ports. The waveform is updated by running the simulation.

type t
val sexp_of_t : t -> Sexplib0.Sexp.t
val create : ('i, 'o) Hardcaml.Cyclesim.t -> t * ('i, 'o) Hardcaml.Cyclesim.t

Create waveform. Returns a new simulation object that side effects the waveform.

val create_from_data : waves:Hardcaml_waveterm__.Wave.t Base.list -> ports:Hardcaml_waveterm__.Port.t Base.list -> t
val waves : t -> Hardcaml_waveterm__.Wave.t Base.array
val combine : t -> t -> t

Combine two waveforms into one waveform

type 'a with_options = ?display_rules:Display_rules.t -> ?display_width:Base.int -> ?display_height:Base.int -> ?display_values:Base.bool -> ?wave_width:Base.int -> ?wave_height:Base.int -> ?signals_width:Base.int -> ?start_cycle:Base.int -> ?signals_alignment:Text_alignment.t -> 'a

Waveform configuration options.

display_rules see Display_rules. A waveform may be constructed once and displayed multiple times with differing options.

wave_height sets the number of rows each wave is displayed with.

  • <0 an exception is raised
  • 0 2 lines per wave. This show transitions but not the data for multi-bit signals.
  • 1 2 lines for binary data, 3 lines for multi-bit data. This is the default and most compact view.
  • n (n+1) lines per wave.

wave_width sets the number of chars used to render each clock cycle.

  • n>=0 ((n+1)*2) characters per cycle. This ensures that the clock is properly rendered when n=0. The default of 3 allows up to 7 chars per cycle to be rendered to represent data values in the waveform.
  • n<0 (-n) cycles per character. Characters in the waveform within which multiple transitions occur are displayed with a double veritical bar.

display_width and display_height simply set the overall size of the displayed waveform. An auto scaling routine assigns approximately 1/3 of the display for the signals and values windows. The default size is 70 character wide and 20 high. The minimum size is 7 characters wide and 3 high and an exception is raise otherwise.

signals_alignment changes the text alignment of the displayed signals names. By default this is Wave_format.Left.

val sort_ports_and_formats : t -> Display_rules.t Base.option -> Hardcaml_waveterm__.Wave.t Base.array
val to_string : (t -> Base.string) with_options

Convert waveform to a string.

val print : (?show_digest:Base.bool -> ?channel:Stdio.Out_channel.t -> t -> Base.unit) with_options

Print waveform to channel

val expect : (?show_digest:Base.bool -> ?serialize_to:Base.string -> t -> Base.unit) with_options

Print waveforms in expect tests. This is very similar to print except it always outputs to stdout and will optionally serialize the waveform to disk for offline viewing if the environment variable EXPECT_TEST_WAVEFORM=1 and the serialize_to filename is set.

Simulation digests are shown by default.

val equal : t -> t -> Base.bool

For testing marshalling functions.

module Serialize : sig ... end