WaveSimModel Type
Contains all information required by waveform simulator. One WaveSimModel per sheet.
Record fields
| Record Field | Description |
Full Usage:
ClkCycleBoxIsEmpty
Field type: bool
|
|
Full Usage:
ComponentSearchString
Field type: string
|
|
Full Usage:
CursorDisplayCycle
Field type: int
|
|
Full Usage:
CursorExactClkCycle
Field type: int
|
|
|
|
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.
|
|
|
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.
|
|
|
Full Usage:
PortSearchString
Field type: string
|
|
|
|
|
|
|
|
|
|
Full Usage:
RamModalActive
Field type: bool
|
|
|
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.
|
|
|
Full Usage:
SamplingZoom
Field type: int
|
|
Full Usage:
ScrollbarBkgRepCycs
Field type: int
|
|
Full Usage:
ScrollbarBkgWidth
Field type: float
|
|
Full Usage:
ScrollbarQueueIsEmpty
Field type: bool
|
|
Full Usage:
ScrollbarTbOffset
Field type: float option
|
|
Full Usage:
ScrollbarTbPos
Field type: float
|
|
Full Usage:
ScrollbarTbWidth
Field type: float
|
|
|
|
|
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.
|
|
|
Full Usage:
SheetSearchString
Field type: string
|
|
|
|
Full Usage:
ShowOnlySelected
Field type: bool
|
|
|
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.
|
Full Usage:
ShownCycles
Field type: int
|
|
Full Usage:
StartCycle
Field type: int
|
|
|
|
|
|
|
|
|
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.
|
Full Usage:
WaveModalActive
Field type: bool
|
|
Full Usage:
WaveformColumnWidth
Field type: float
|