Issie logo Issie

WaveSimModel Type

Contains all information required by waveform simulator. One WaveSimModel per sheet.

Record fields

Record Field Description

ClkCycleBoxIsEmpty

Full Usage: ClkCycleBoxIsEmpty

Field type: bool

True if no number in clcock cycle box (special case).

Field type: bool

ComponentSearchString

Full Usage: ComponentSearchString

Field type: string
Field type: string

CursorDisplayCycle

Full Usage: CursorDisplayCycle

Field type: int

Current highlighted clock cycle displayed in the waveform viewer. This is scaled by CycleMultiplier, and therefore not the real clock cycle for sampling zoom > 1X.

Field type: int

CursorExactClkCycle

Full Usage: CursorExactClkCycle

Field type: int

This is the real clock cycle of the cursor which determined the values column contents. If sampling, a single highlighted waveform cycle may represent multiple real clock cycles.

Field type: int

DefaultCursor

Full Usage: DefaultCursor

Field type: CursorType

default value for cursor in waveform Simulator

Field type: CursorType

DefaultSelectionPending

Full Usage: DefaultSelectionPending

Field type: bool

Whether this simulation is still owed the selection it gets when the user has chosen nothing - see WaveSimSelect.defaultSelectedWaves. It cannot be derived, which is the whole reason it is here. "Nothing is selected because the simulation has only just started" and "nothing is selected because the user took the last wave off" are the same model otherwise, and refilling the second is a viewer the user cannot empty. Set when a simulation is STARTED and cleared as soon as anything is selected - by the default choice or by the user. It has to survive a refresh or two because of what the choice reads: the ports of the top instance, which while the .NET simulator is simulating are not known until its first slice arrives. Choosing once, at the start, therefore chose from nothing and left the viewer empty - in the mode that ships.

Field type: bool

DraggedIndex

Full Usage: DraggedIndex

Field type: WaveIndexT option

The index of the wave which the user is dragging.

Field type: WaveIndexT option

FetchFailedAtMs

Full Usage: FetchFailedAtMs

Field type: float

When the view the waveforms are drawn under last changed, in ms on the performance clock. Waveforms are deliberately allowed to lag: a viewer whose data comes over a wire keeps showing the last view it has while the next is fetched, because emptying itself on every scroll is what a broken viewer looks like. So "drawn for an older view" is a normal state lasting a frame or two, and it looks exactly like "drawn for a view whose data is never coming". How long it has gone on is the only thing that tells them apart. When a fetch last failed, in ms on the performance clock, or 0 if none has. A fetch is asked for whenever a wave is missing the window it is drawn over, and that is worked out afresh at the end of every update - so a fetch that fails leaves exactly the state that asks for another, and the two spin as fast as the message queue will carry them. This is the one thing that stops it: the same waves are not asked for again until a couple of seconds have passed. A timestamp rather than a flag, because the fetch must be tried again eventually, and "how long since" says that without a second thing to remember to clear. It should never be doing any work: a sidecar that is still starting up is waited for by the transport, so a failure here means a fault - a session that no longer exists, a design that would not build, a sidecar that has died - and those do not fix themselves. This is what stops one of them being asked as fast as the message queue will carry it.

Field type: float

HoveredLabel

Full Usage: HoveredLabel

Field type: WaveIndexT option

The label which a user is hovering over.

Field type: WaveIndexT option

PortSearchString

Full Usage: PortSearchString

Field type: string
Field type: string

PortSelectComp

Full Usage: PortSelectComp

Field type: ComponentId option

The component whose port selection modal is visible, if any. Set by the schematic's right-click menu, which names a component on the canvas rather than one in the simulation.

Field type: ComponentId option

PrevSelectedWaves

Full Usage: PrevSelectedWaves

Field type: WaveIndexT list option

The value of SelectedWaves when the user started dragging a label. Used to restore SelectedWaves if the user drops a label in an illegal location.

Field type: WaveIndexT list option

Radix

Full Usage: Radix

Field type: NumberBase

Radix in which values are being displayed in the wave simulator.

Field type: NumberBase

RamComps

Full Usage: RamComps

Field type: (FComponentId * string) list

Every RAM and ROM the simulation holds, with the name the selector lists it under - which is a fact about the DESIGN, worked out from it rather than from the expansion.

Field type: (FComponentId * string) list

RamModalActive

Full Usage: RamModalActive

Field type: bool

If the ram selection modal is visible.

Field type: bool

RamRows

Full Usage: RamRows

Field type: Map<FComponentId, (RamKey * RamView)>

The rows each open RAM table draws, and the cycle and window they are of. Model state, not a cache beside it, because it is small - at most a hundred rows a table - and because a table redrawn from something the model does not hold is a table that does not redraw when it arrives: the view is memoised on the model, so a reply landing in a module of its own changes nothing the renderer can see. The waveform data proper is different and does live outside (WaveData): it is megabytes of typed arrays read on every render. Empty while the renderer is the one simulating - the tables read its simulation directly - and filled by SimReadRam when the .NET simulator is.

Field type: Map<FComponentId, (RamKey * RamView)>

RamStartLocation

Full Usage: RamStartLocation

Field type: Map<FComponentId, (string * bigint)>

If it exists this is the start location from which RAM locations are displayed. It is transient. The first component of the tuple is the text used to define the location. The second component is the actual location.

Field type: Map<FComponentId, (string * bigint)>

SamplingZoom

Full Usage: SamplingZoom

Field type: int

Used for extreme zoom out. Sample waveforms every this number of cycles. Display sampled data.

Field type: int

ScrollbarBkgRepCycs

Full Usage: ScrollbarBkgRepCycs

Field type: int

Number of clock cycles scrollbar's background represents.

Field type: int

ScrollbarBkgWidth

Full Usage: ScrollbarBkgWidth

Field type: float

Width of scrollbar's gray background, in pixels.

Field type: float

ScrollbarQueueIsEmpty

Full Usage: ScrollbarQueueIsEmpty

Field type: bool
Counter used to coalesce scrollbar mouse actions together.
 If true, queue is clear and can dispatch scrollbar update.
 Otherwise, an update is in progress and mouse event should not be pushed onto the queue.
Field type: bool

ScrollbarTbOffset

Full Usage: ScrollbarTbOffset

Field type: float option
Offset between scrollbar's thumb's position and cursor's position.
 If is Some float, scrollbar is in drag mode; otherwise scrollbar is NOT in drag.
Field type: float option

ScrollbarTbPos

Full Usage: ScrollbarTbPos

Field type: float

Starting position of scrollbar's thumb, in pixels.

Field type: float

ScrollbarTbWidth

Full Usage: ScrollbarTbWidth

Field type: float

Width of scrollbar's thumb, in pixels.

Field type: float

SelectedRams

Full Usage: SelectedRams

Field type: Map<FComponentId, string>

Map of which RAM components have been selected.

Field type: Map<FComponentId, string>

SelectedSheetInstance

Full Usage: SelectedSheetInstance

Field type: Map<string list, InstancePath>

Which instance of each sheet the wave selector is showing, keyed the same way. The value is the instance's path, which is what Wave.SheetId holds. An entry that does not name an instance inside the instance chosen at the parent node is ignored and the alphabetically first used - so choosing a different instance high in the hierarchy needs no cascade of updates to the entries below it.

Field type: Map<string list, InstancePath>

SelectedWaves

Full Usage: SelectedWaves

Field type: WaveIndexT list

List of which waves are currently visible in the waveform viewer.

Field type: WaveIndexT list

SheetSearchString

Full Usage: SheetSearchString

Field type: string

The three filter boxes above the wave selector, each holding what the user typed in it, upper-cased. A sheet box may end in '*', which means "and everything inside it".

Field type: string

ShowGroupDetail

Full Usage: ShowGroupDetail

Field type: Set<ComponentGroup * string list>

What is shown in wave sim group detail elements

Field type: Set<ComponentGroup * string list>

ShowOnlySelected

Full Usage: ShowOnlySelected

Field type: bool

if true, show only the selected waves in the waveform selector

Field type: bool

ShowSheetDetail

Full Usage: ShowSheetDetail

Field type: Set<string list>

Which nodes of the design hierarchy the wave selector has open, each named by its path of design-time sheet names from the top sheet down. An open node shows its signals, and - for a sheet that more than one route reaches, whose contents are otherwise suppressed - shows the sheets inside it. At most one node per sheet name is ever in here: opening one closes the others, so both panes of the selector agree on which occurrence of a sheet is on show.

Field type: Set<string list>

ShownCycles

Full Usage: ShownCycles

Field type: int

Total number of visible clock cycles. This is scaled by cycleMultiplier, and therefore not the real clock cycle for sampling zoom > 1X.

Field type: int

StartCycle

Full Usage: StartCycle

Field type: int

Left-most visible clock cycle. this is scaled by CycleMultiplier, and therefore not the real clock cycle for sampling zoom > 1X.

Field type: int

State

Full Usage: State

Field type: WaveSimState

Current state of WaveSimModel.

Field type: WaveSimState

WSConfig

Full Usage: WSConfig

Field type: WSConfig

Configuration for the waveform simulator.//

Field type: WSConfig

WSConfigDialog

Full Usage: WSConfigDialog

Field type: WSConfig option

temp copy of configuration used by dialog

Field type: WSConfig option

WaveDetails

Full Usage: WaveDetails

Field type: Map<WaveIndexT, Wave>

What is known about each SELECTED wave: its name, its width, where its data lies, and the SVG last drawn for it. The selected waves and no others. It used to be every wave the simulation offered - one per viewable port of every INSTANCE of every sheet, which is 208,896 records on main6 of largeTest, more than the design has components, rebuilt on every scroll step and retained in every model generation React holds. What the viewer draws is at most maxAllowedViewerWaves of them; what the SELECTOR draws it now describes as it draws it, from the handful of sheet instances on screen.

Field type: Map<WaveIndexT, Wave>

WaveModalActive

Full Usage: WaveModalActive

Field type: bool

TODO: Should this be refactored into an ActiveModal type option? If the wave selection modal is visible.

Field type: bool

WaveformColumnWidth

Full Usage: WaveformColumnWidth

Field type: float

Width of the waveform column.

Field type: float

Type something to start searching.