Community
+This presently just has the Announcements page, but more may be added in the future.
+Announcements
+*
+ + ++ If you encounter any problems using or downloading the software, please see the Gihub Issue page, or create a new issue on the ISSIE GitHub repository. + Any feedback and suggestions are also welcome! +
+ Marco's Dissertation or his Poster. +
+ The project is hosted on Github where you can report issues, fork the project and submit pull + requests. Please take a look at the contribution guidelines for more information. Contact Tom Clarke + for more information about development. +
+ Latest stable release: Click here for the latest GitHub release page, where the latest .zip and .tar file can be found.
+
+ Possibly unstable: Download latest master .zip
+
+ Currently no known incompatibilities. Linux users can run the windows .zip file under WINE. + See Getting Started for information about how to run the binaries. +
+ All releases: Click here
+
+
+ Latest release notes: Click here
+
Contents
++ CURRENTLY IN PROGRESS, CHECK BACK SOON! +
+This presently just has the Announcements page, but more may be added in the future.
+*
+ + +Testing is done in the tests libraries using Expecto which is able to load in any +testing framework you may need, but is strongly encouraged to keep things consistent and use Expecto tests and FsCheck +for any property-based testing.
+Documentation is built dynamically from F# script files and markdown files using FSharp.Formatting.
+The Reference documentation is dynamically generated, and descriptions specified by using ///
rather than //
for comments, see the Formatting documentation
+for more information.
./docsrc
directory.build.cmd
or build.sh
../bin
after being built.Docker
installed.Dist
build task, then create the delta and sig files with the CreateDiffs
task. Upload all of the files
+related to the new version to the release.
+
+
Discover, Learn & Create with the ISSIE circuit schematic editor!
+
+ Issie (Interactive Schematic Simulator and Integrated Editor) is a very easy to use and capable hierarchical block schematic based digital logic editor and simulator, + originally made for the 1st year undergraduate Digital Electronics and Computer Architecture module at the + Department of Electronic and Electrical Engineering, Imperial College London, by 3rd year students at the same institution. +
++ Issie has been well tested on designs with up to 15,000 schematic components. We expect it to be reasonably performant on much larger designs as well. + The simulation speed is approximately 2000 component-clocks per ms. Thus a circuit with 1000 components would run at 2000 clocks per second. Issie + creates fully synchronous circuits with a single clock: logic with asynchronous loops is currently not supported. +
++ Issie is coded in F# transpiled to Javascript by FABLE, and uses a pure F# drawing library. +
Contents
+ ++ ISSIE has an extensive and complete library of components available in the 'Catalogue' menu. + Components include low-level gates and flipflops as + well as larger blocks: RAMs, ROMs, n-bit registers and adders. The lack of HDL-based combinational logic is partly filled by + special components: Bus Select (extracts a bit-field), Bus Compare (decodes a min-term of a bus). Components defined as Verilog + combinational logic are a likely future addition. +
+ Viewer components are used to (optionally) view simulation waveforms of nodes on subsheets. Wire label components allow any number of + nodes on one design sheet to be connected without visible wires. +
+ ISSIE schematic component ports are connected using drag-and-drop: each connection represents a wire or bus. + ISSIE has two methods of routing wires: Auto-routing and Manual-routing. Wires will all start out as Auto-routed, + which means that the wire's path is created automatically by the program. This path will update when moving any connected components. + ISSIE also allows for manual routing, where the user may manipulate segments of the wire as desired to make the circuit more readable. Effort has + been put into making this functionality intuitive, with automatic reversion to auto-routing when wire topology changes, and auto-routing of + endpoints when parts of a wire are manually routed. +
+ Wires will automatically be created the correct width using a width inference algorithm. + Wires connecting two ports of incompatible widths will be highlighted red and an error message shown, as will multiply driven wires. + Additional sanity checks (e.g. for combinational loops, or unconnected ports) are made before simulation with errors highlighted visually. +
+ ISSIE includes two simulations in order to inspect and test circuit schematics: The step simulator, and waveform simulator. + This allows users to visualise the information in different ways to best suit their needs and understanding. +
+ Step Simulation allows the user to 'step' or cycle through each clock tick, and view the current design sheet's Output and Viewer component information. + It also allows users to view how the state changes in stateful components such as RAM. +
+ Waveform Simulation allows the user to see the values in each selected connected circuit element (Netlist) over time as a waveform. + The waveform simulator allows users to move waveforms up/down in the list to make the simulation more readable. + Users may cycle through the simulator using the arrows to directly go to a specific clock cycle. + Alternatively there is a scrollbar for the Waveform simulator that will automatically lengthen the simulation once the end is reached. + The values in the waveform simulator can be viewed in various formats: binary, hexadecimal, unsigned decimal and signed decimal. + The Waveform Simulator also features a draggable sidebar to partition screen space dynamically between waveforms and circuit. +
+ Waveform Simulation also allows for the simulation and contents viewing of memory components such as RAM. +
+ Users may convert their ISSIE schematic design into a Verilog file using the 'Write design as verilog' option found in the header bar of the application. + This allows great flexibility as ISSIE designs may be used in more complex design tools and other programs that use Verilog; + allowing ISSIE to be used as a top-level design that can be further developed if needed. Verilog output for simulation or synthesis is documented + as part of the Verilog write process, this includes links to a [YoSys](http://bygone.clairexen.net/yosys/download.html) workflow for synthesis on FPGAs. + Imperial College users can download a pre-installed VM for this workflow, the VHDL output is standalone and should work with other synthesis methods. +
+ ISSIE allows users to directly edit the contents of Memory components, for more versitility and ease of use. Memory contents can also be exported and imported via .ram files. +
+
+ Namespace: global
+ Parent Module: BusTypes
+
Instance member | Description |
+
+
+ x.Count
+
+
+ Signature: int
+ + |
+
+
+ CompiledName: |
+
+
+
+ x.IsEmpty
+
+
+ Signature: bool
+ + |
+
+
+ CompiledName: |
+
+
+
+ [key]
+
+
+ Signature: key:ConnectionId -> int option
+ + |
+
+
+ CompiledName: |
+
+
+ Namespace: global
+ Parent Module: CommonTypes
+
F# data describing the contents of a single schematic sheet.
+ +Instance member | Description |
+
+
+ x.Item1
+
+
+ Signature: Component list
+ + |
+ + + | +
+
+
+ x.Item2
+
+
+ Signature: Connection list
+ + |
+ + + | +
+
+ Namespace: global
+ Parent Module: CommonTypes
+
JSComponent mapped to F# record. +Id uniquely identifies the component within a sheet and is used by draw2d library. +Label is optional descriptor displayed on schematic.
+ +Record Field | Description |
+
+
+ H
+
+
+ Signature: int
+ + |
+ + + + + + + | +
+
+
+ Id
+
+
+ Signature: string
+ + |
+ + + + + + + | +
+
+
+ InputPorts
+
+
+ Signature: Port list
+ + |
+ + + + + + + | +
+
+
+ Label
+
+
+ Signature: string
+ + |
+ + + + + + + | +
+
+
+ OutputPorts
+
+
+ Signature: Port list
+ + |
+ + + + + + + | +
+
+
+ Type
+
+
+ Signature: ComponentType
+ + |
+ + + + + + + | +
+
+
+ W
+
+
+ Signature: int
+ + |
+ + + + + + + | +
+
+
+ X
+
+
+ Signature: int
+ + |
+ + + + + + + | +
+
+
+ Y
+
+
+ Signature: int
+ + |
+ + + + + + + | +
+
+ Namespace: global
+ Parent Module: CommonTypes
+
Union Case | Description |
+
+
+ And
+
+
+ Signature:
+ + |
+ + + + + + + | +
+
+
+ AsyncROM(Memory)
+
+
+ Signature: Memory
+ + |
+ + + + + + + | +
+
+
+ BusSelection(OutputWidth,OutputLSBit)
+
+
+ Signature: int * int
+ + |
+ + + + + + + | +
+
+
+ Custom(CustomComponentType)
+
+
+ Signature: CustomComponentType
+ + |
+ + + + + + + | +
+
+
+ Demux2
+
+
+ Signature:
+ + |
+ + + + + + + | +
+
+
+ DFF
+
+
+ Signature:
+ + |
+ + + + + + + | +
+
+
+ DFFE
+
+
+ Signature:
+ + |
+ + + + + + + | +
+
+
+ Input(BusWidth)
+
+
+ Signature: int
+ + |
+ + + + + + + | +
+
+
+ IOLabel
+
+
+ Signature:
+ + |
+ + + + + + + | +
+
+
+ MergeWires
+
+
+ Signature:
+ + |
+ + + + + + + | +
+
+
+ Mux2
+
+
+ Signature:
+ + |
+ + + + + + + | +
+
+
+ Nand
+
+
+ Signature:
+ + |
+ + + + + + + | +
+
+
+ NbitsAdder(BusWidth)
+
+
+ Signature: int
+ + |
+ + + + + + + | +
+
+
+ Nor
+
+
+ Signature:
+ + |
+ + + + + + + | +
+
+
+ Not
+
+
+ Signature:
+ + |
+ + + + + + + | +
+
+
+ Or
+
+
+ Signature:
+ + |
+ + + + + + + | +
+
+
+ Output(BusWidth)
+
+
+ Signature: int
+ + |
+ + + + + + + | +
+
+
+ RAM(Memory)
+
+
+ Signature: Memory
+ + |
+ + + + + + + | +
+
+
+ Register(BusWidth)
+
+
+ Signature: int
+ + |
+ + + + + + + | +
+
+
+ RegisterE(BusWidth)
+
+
+ Signature: int
+ + |
+ + + + + + + | +
+
+
+ ROM(Memory)
+
+
+ Signature: Memory
+ + |
+ + + + + + + | +
+
+
+ SplitWire(BusWidth)
+
+
+ Signature: int
+ + |
+ + + + + + + | +
+
+
+ Xnor
+
+
+ Signature:
+ + |
+ + + + + + + | +
+
+
+ Xor
+
+
+ Signature:
+ + |
+ + + + + + + | +
+
+ Namespace: global
+ Parent Module: CommonTypes
+
JSConnection mapped to F# record. +Id uniquely identifies connection globally and is used by library.
+ +Record Field | Description |
+
+
+ Id
+
+
+ Signature: string
+ + |
+ + + + + + + | +
+
+
+ Source
+
+
+ Signature: Port
+ + |
+ + + + + + + | +
+
+
+ Target
+
+
+ Signature: Port
+ + |
+ + + + + + + | +
+
+
+ Vertices
+
+
+ Signature: (float * float) list
+ + |
+ + + + + + + | +
+
+ Namespace: global
+ Parent Module: CommonTypes
+
Name identified the LoadedComponent used. +The labels define legends on symbol. +Label strings are unique per CustomComponent. +Multiple CustomComponent instances are differentiated by Component data.
+ +Record Field | Description |
+
+
+ InputLabels
+
+
+ Signature: (string * int) list
+ + |
+ + + + + + + | +
+
+
+ Name
+
+
+ Signature: string
+ + |
+ + + + + + + | +
+
+
+ OutputLabels
+
+
+ Signature: (string * int) list
+ + |
+ + + + + + + | +
+
+ Namespace: global
+ Parent Module: CommonTypes
+
Static data describing a schematic sheet loaded as a custom component. +Every sheet is always identified with a file from which it is loaded/saved. +Name is human readable (and is the filename - without extension) and identifies sheet. +File path is the sheet directory and name (with extension). +InputLabels, OutputLabels are the I/O connections. +The I/O connection integers are bus widths. +The I/O connection strings are human readable. The strings are guaranteed +to be unique in the I/O connection list. I.e. An input label may be the same +as an output label, but two input (or output) labels cannot be the same. +The position in the I/O connections list is important as it implicitly +indicates the port number. For example, the first element in the InputLabels +list is related to the Component's Port with PortNumber 0. +Two instances of a loaded component have the same LoadedComponent data.
+ +Record Field | Description |
+
+
+ CanvasState
+
+
+ Signature: CanvasState
+ + |
+ + + + + + + | +
+
+
+ FilePath
+
+
+ Signature: string
+ + |
+ + + + + + + | +
+
+
+ InputLabels
+
+
+ Signature: (string * int) list
+ + |
+ + + + + + + | +
+
+
+ Name
+
+
+ Signature: string
+ + |
+ + + + + + + | +
+
+
+ OutputLabels
+
+
+ Signature: (string * int) list
+ + |
+ + + + + + + | +
+
+ Namespace: global
+ Parent Module: CommonTypes
+
Record Field | Description |
+
+
+ AddressWidth
+
+
+ Signature: int
+ + |
+ + + + + + + | +
+
+
+ Data
+
+
+ Signature: int64 list
+ + |
+ + + + + + + | +
+
+
+ WordWidth
+
+
+ Signature: int
+ + |
+ + + + + + + | +
+
+ Namespace: global
+ Parent Module: CommonTypes
+
Union Case | Description |
+
+
+ Bin
+
+
+ Signature:
+ + |
+ + + + + + + | +
+
+
+ Dec
+
+
+ Signature:
+ + |
+ + + + + + + | +
+
+
+ Hex
+
+
+ Signature:
+ + |
+ + + + + + + | +
+
+
+ SDec
+
+
+ Signature:
+ + |
+ + + + + + + | +
+
+ Namespace: global
+ Parent Module: CommonTypes
+
A component I/O. +Id (like any other Id) is a string generated with 32 random hex charactes, +so it is (practically) globally unique. These Ids are used by the draw2d +library to uniquely refer to ports and components. They are generated via: +http://www.draw2d.org/draw2d_touch/jsdoc_6/#!/api/draw2d.util.UUID. +PortNumber is used to identify which port on a component, contiguous from 0 +separately for inputs and outputs. +HostId is the unique Id of the component where the port is. For example, +all three ports on the same And component will have the same HostId.
+ +Record Field | Description |
+
+
+ HostId
+
+
+ Signature: string
+ + |
+ + + + + + + | +
+
+
+ Id
+
+
+ Signature: string
+ + |
+ + + + + + + | +
+
+
+ PortNumber
+
+
+ Signature: int option
+ + |
+ + + + + + + | +
+
+
+ PortType
+
+
+ Signature: PortType
+ + |
+ + + + + + + | +
+
+ Namespace: global
+ Parent Module: CommonTypes
+
Union Case | Description |
+
+
+ Input
+
+
+ Signature:
+ + |
+ + + + + + + | +
+
+
+ Output
+
+
+ Signature:
+ + |
+ + + + + + + | +
+
+ Namespace: global
+ Parent Module: CommonTypes
+
Type for an open project which represents a complete design. +ProjectPath is directory containing project files. +OpenFileName is name of file from which current schematic sheet is loaded/saved. +LoadedComponents contains the list of schematic sheets, each as a component, one per sheet.
+ +Record Field | Description |
+
+
+ LoadedComponents
+
+
+ Signature: LoadedComponent list
+ + |
+ + + + + + + | +
+
+
+ OpenFileName
+
+
+ Signature: string
+ + |
+ + + + + + + | +
+
+
+ ProjectPath
+
+
+ Signature: string
+ + |
+ + + + + + + | +
+
+ Namespace: global
+ Parent Module: DiagramMessageType
+
Union Case | Description |
+
+
+ InferWidths(unit)
+
+
+ Signature: unit
+ + |
+ + + + + + + | +
+
+
+ InitCanvas(JSCanvas)
+
+
+ Signature: JSCanvas
+ + |
+ + + + + + + | +
+
+
+ SelectComponent(JSComponent)
+
+
+ Signature: JSComponent
+ + |
+ + + + + + + | +
+
+
+ SetHasUnsavedChanges(bool)
+
+
+ Signature: bool
+ + |
+ + + + + + + | +
+
+
+ UnselectComponent(unit)
+
+
+ Signature: unit
+ + |
+ + + + + + + | +
+
+ Namespace: global
+ Parent Module: DiagramMessageType
+
Union Case | Description |
+
+
+ AltC
+
+
+ Signature:
+ + |
+ + + + + + + | +
+
+
+ AltShiftZ
+
+
+ Signature:
+ + |
+ + + + + + + | +
+
+
+ AltV
+
+
+ Signature:
+ + |
+ + + + + + + | +
+
+
+ AltZ
+
+
+ Signature:
+ + |
+ + + + + + + | +
+
+
+ CtrlS
+
+
+ Signature:
+ + |
+ + + + + + + | +
+
+ Namespace: global
+ Parent Module: DiagramMessageType
+
Record Field | Description |
+
+
+ Address
+
+
+ Signature: int option
+ + |
+ + + + + + + | +
+
+
+ NumberBase
+
+
+ Signature: NumberBase
+ + |
+ + + + + + + | +
+
+
+ OnlyDiff
+
+
+ Signature: bool
+ + |
+ + + + + + + | +
+
+ Namespace: global
+ Parent Module: DiagramMessageType
+
Union Case | Description |
+
+
+ AddWaveSimFile(string,WaveSimModel)
+
+
+ Signature: string * WaveSimModel
+ + |
+ + + + + + + | +
+
+
+ ChangeRightTab(RightTab)
+
+
+ Signature: RightTab
+ + |
+ + + + + + + | +
+
+
+ CloseDiagramNotification
+
+
+ Signature:
+ + |
+ + + + + + + | +
+
+
+ CloseFilesNotification
+
+
+ Signature:
+ + |
+ + + + + + + | +
+
+
+ CloseMemoryEditorNotification
+
+
+ Signature:
+ + |
+ + + + + + + | +
+
+
+ ClosePopup
+
+
+ Signature:
+ + |
+ + + + + + + | +
+
+
+ CloseProject
+
+
+ Signature:
+ + |
+ + + + + + + | +
+
+
+ ClosePropertiesNotification
+
+
+ Signature:
+ + |
+ + + + + + + | +
+
+
+ CloseSimulationNotification
+
+
+ Signature:
+ + |
+ + + + + + + | +
+
+
+ CloseWaveSimNotification
+
+
+ Signature:
+ + |
+ + + + + + + | +
+
+
+ EndSimulation
+
+
+ Signature:
+ + |
+ + + + + + + | +
+
+
+ IncrementSimulationClockTick
+
+
+ Signature:
+ + |
+ + + + + + + | +
+
+
+ JSDiagramMsg(JSDiagramMsg)
+
+
+ Signature: JSDiagramMsg
+ + |
+ + + + + + + | +
+
+
+ KeyboardShortcutMsg(KeyboardShortcutMsg)
+
+
+ Signature: KeyboardShortcutMsg
+ + |
+ + + + + + + | +
+
+
+ MenuAction(MenuCommand,Msg -> unit)
+
+
+ Signature: MenuCommand * Msg -> unit
+ + |
+ + + + + + + | +
+
+
+ ReloadSelectedComponent(int)
+
+
+ Signature: int
+ + |
+ + + + + + + | +
+
+
+ SelectionHasChanged
+
+
+ Signature:
+ + |
+ + + + + + + | +
+
+
+ SetClipboard(CanvasState)
+
+
+ Signature: CanvasState
+ + |
+ + + + + + + | +
+
+
+ SetCreateComponent(Component)
+
+
+ Signature: Component
+ + |
+ + + + + + + | +
+
+
+ SetDragMode(DragMode)
+
+
+ Signature: DragMode
+ + |
+ + + + + + + | +
+
+
+ SetFilesNotification(...)
+
+
+ Signature: (Msg -> unit) -> (type)
+ + |
+ + + + + + + | +
+
+
+ SetHighlighted(...)
+
+
+ Signature: ComponentId list * ConnectionId list
+ + |
+ + + + + + + | +
+
+
+ SetMemoryEditorNotification(...)
+
+
+ Signature: (Msg -> unit) -> (type)
+ + |
+ + + + + + + | +
+
+
+ SetPopupDialogInt(int option)
+
+
+ Signature: int option
+ + |
+ + + + + + + | +
+
+
+ SetPopupDialogMemorySetup(...)
+
+
+ Signature: (int * int) option
+ + |
+ + + + + + + | +
+
+
+ SetPopupDialogText(string option)
+
+
+ Signature: string option
+ + |
+ + + + + + + | +
+
+
+ SetPopupDialogTwoInts(...)
+
+
+ Signature: int option * IntMode
+ + |
+ + + + + + + | +
+
+
+ SetPopupMemoryEditorData(...)
+
+
+ Signature: MemoryEditorData option
+ + |
+ + + + + + + | +
+
+
+ SetProject(Project)
+
+
+ Signature: Project
+ + |
+ + + + + + + | +
+
+
+ SetPropertiesNotification(...)
+
+
+ Signature: (Msg -> unit) -> (type)
+ + |
+ + + + + + + | +
+
+
+ SetSimulationBase(NumberBase)
+
+
+ Signature: NumberBase
+ + |
+ + + + + + + | +
+
+
+ SetSimulationGraph(SimulationGraph)
+
+
+ Signature: SimulationGraph
+ + |
+ + + + + + + | +
+
+
+ SetSimulationNotification(...)
+
+
+ Signature: (Msg -> unit) -> (type)
+ + |
+ + + + + + + | +
+
+
+ SetTopMenu(TopMenu)
+
+
+ Signature: TopMenu
+ + |
+ + + + + + + | +
+
+
+ SetViewerWidth(int)
+
+
+ Signature: int
+ + |
+ + + + + + + | +
+
+
+ ShowPopup(PopupDialogData -> (type))
+
+
+ Signature: PopupDialogData -> (type)
+ + |
+ + + + + + + | +
+
+
+ StartSimulation(...)
+
+
+ Signature: Result<SimulationData,SimulationError>
+ + |
+ + + + + + + | +
+
+
+ StartWaveSim(...)
+
+
+ Signature: Result<WaveSimModel,SimulationError option>
+ + |
+ + + + + + + | +
+
+ Namespace: global
+ Parent Module: DiagramMessageType
+
Possible fields that may (or may not) be used in a dialog popup.
+ +Record Field | Description |
+
+
+ Int
+
+
+ Signature: int option
+ + |
+ + + + + + + | +
+
+
+ Int2
+
+
+ Signature: int option
+ + |
+ + + + + + + | +
+
+
+ MemoryEditorData
+
+
+ Signature: MemoryEditorData option
+ + |
+ + + + + + + | +
+
+
+ MemorySetup
+
+
+ Signature: (int * int) option
+ + |
+ + + + + + + | +
+
+
+ Text
+
+
+ Signature: string option
+ + |
+ + + + + + + | +
+
+ Namespace: global
+ Parent Module: DiagramMessageType
+
Union Case | Description |
+
+
+ Catalogue
+
+
+ Signature:
+ + |
+ + + + + + + | +
+
+
+ Properties
+
+
+ Signature:
+ + |
+ + + + + + + | +
+
+
+ Simulation
+
+
+ Signature:
+ + |
+ + + + + + + | +
+
+
+ WaveSim
+
+
+ Signature:
+ + |
+ + + + + + + | +
+
+ Namespace: global
+ Parent Module: DiagramMessageType
+
Union Case | Description |
+
+
+ Closed
+
+
+ Signature:
+ + |
+ + + + + + + | +
+
+
+ Files
+
+
+ Signature:
+ + |
+ + + + + + + | +
+
+
+ Project
+
+
+ Signature:
+ + |
+ + + + + + + | +
+
+ Namespace: global
+ Parent Module: DiagramMessageType
+
Record Field | Description |
+
+
+ ClkWidth
+
+
+ Signature: float
+ + |
+ + + + + + + | +
+
+
+ Cursor
+
+
+ Signature: uint32
+ + |
+ + + + + + + | +
+
+
+ LastCanvasState
+
+
+ Signature: JSCanvasState option
+ + |
+ + + + + + + | +
+
+
+ LastClk
+
+
+ Signature: uint32
+ + |
+ + + + + + + | +
+
+
+ Ports
+
+
+ Signature: WaveSimPort array
+ + |
+ + + + + + + | +
+
+
+ Radix
+
+
+ Signature: NumberBase
+ + |
+ + + + + + + | +
+
+
+ Selected
+
+
+ Signature: bool array
+ + |
+ + + + + + + | +
+
+
+ SimData
+
+
+ Signature: SimulationData array
+ + |
+ + + + + + + | +
+
+
+ WaveAdder
+
+
+ Signature: WaveAdderModel
+ + |
+ + + + + + + | +
+
+
+ WaveData
+
+
+ Signature: SimTime array
+ + |
+ + + + + + + | +
+
+
+ WaveNames
+
+
+ Signature: WaveName array
+ + |
+ + + + + + + | +
+
+ Namespace: global
+ Parent Module: DiagramModelType
+
Record Field | Description |
+
+
+ Clipboard
+
+
+ Signature: CanvasState
+ + |
+ + + + + + + | +
+
+
+ CreateComponent
+
+
+ Signature: Component option
+ + |
+ + + + + + + | +
+
+
+ CurrentSelected
+
+
+ Signature: Component list * Connection list
+ + |
+ + + + + + + | +
+
+
+ CurrProject
+
+
+ Signature: Project option
+ + |
+ + + + + + + | +
+
+
+ Diagram
+
+
+ Signature: Draw2dWrapper
+ + |
+ + + + + + + | +
+
+
+ DragMode
+
+
+ Signature: DragMode
+ + |
+ + + + + + + | +
+
+
+ HasUnsavedChanges
+
+
+ Signature: bool
+ + |
+ + + + + + + | +
+
+
+ Hilighted
+
+
+ Signature: ComponentId list * ConnectionId list
+ + |
+ + + + + + + | +
+
+
+ LastSelected
+
+
+ Signature: Component list * Connection list
+ + |
+ + + + + + + | +
+
+
+ LastUsedDialogWidth
+
+
+ Signature: int
+ + |
+ + + + + + + | +
+
+
+ Notifications
+
+
+ Signature: Notifications
+ + |
+ + + + + + + | +
+
+
+ Popup
+
+
+ Signature: (PopupDialogData -> (type)) option
+ + |
+ + + + + + + | +
+
+
+ PopupDialogData
+
+
+ Signature: PopupDialogData
+ + |
+ + + + + + + | +
+
+
+ RightTab
+
+
+ Signature: RightTab
+ + |
+ + + + + + + | +
+
+
+ SelectedComponent
+
+
+ Signature: Component option
+ + |
+ + + + + + + | +
+
+
+ Simulation
+
+
+ Signature: Result<SimulationData,SimulationError> option
+ + |
+ + + + + + + | +
+
+
+ TopMenu
+
+
+ Signature: TopMenu
+ + |
+ + + + + + + | +
+
+
+ ViewerWidth
+
+
+ Signature: int
+ + |
+ + + + + + + | +
+
+
+ WaveSim
+
+
+ Signature: Map<string,WaveSimModel> * SimulationError option
+ + |
+ + + + + + + | +
+
+ Namespace: global
+ Parent Module: DiagramModelType
+
Record Field | Description |
+
+
+ FromDiagram
+
+
+ Signature: ((Msg -> unit) -> (type)) option
+ + |
+ + + + + + + | +
+
+
+ FromFiles
+
+
+ Signature: ((Msg -> unit) -> (type)) option
+ + |
+ + + + + + + | +
+
+
+ FromMemoryEditor
+
+
+ Signature: ((Msg -> unit) -> (type)) option
+ + |
+ + + + + + + | +
+
+
+ FromProperties
+
+
+ Signature: ((Msg -> unit) -> (type)) option
+ + |
+ + + + + + + | +
+
+
+ FromSimulation
+
+
+ Signature: ((Msg -> unit) -> (type)) option
+ + |
+ + + + + + + | +
+
+
+ FromWaveSim
+
+
+ Signature: ((Msg -> unit) -> (type)) option
+ + |
+ + + + + + + | +
+
+ Namespace: global
+ Parent Module: Draw2dWrapper
+
Determines size of schematic. +ToDo - make this more flexible and expose sizes
+ +Union Case | Description |
+
+
+ DispMode((type))
+
+
+ Signature: (type)
+ + |
+ + + + + + + | +
+ Namespace: global
+ Parent Module: FilesIO
+
+ Attributes:
+[<AutoOpen>]
+
+
+
Function or value | Description |
+
+
+ jsonStringToState(jsonString)
+
+
+ Signature: jsonString:string -> Result<CanvasState,string>
+ + |
+ + + + + + + | +
+
+
+ stateToJsonString(arg1, arg2)
+
+
+ Signature: (Component list * Connection list) -> string
+ + |
+ + + + + + + | +
+ Namespace: global
+
Type | Description |
+ ComponentId + | ++ + | +
+ ConnectionId + | ++ + | +
+ ConnectionsWidth + | ++ + | +
+ InputPortId + | ++ + | +
+ InputPortNumber + | ++ + | +
+ OutputPortId + | ++ + | +
+ OutputPortNumber + | ++ + | +
+ WidthInferError + | ++ + | +
+ Namespace: global
+
Function or value | Description |
+
+
+ getConnectionWidth(...)
+
+
+ Signature: connectionsWidth:ConnectionsWidth -> connId:ConnectionId -> int option
+ + |
+
+
+
+
+
+ Lookup the width of a connection in the connectionsWidth map or fail. + + + |
+
+
+
+ inferConnectionsWidth(arg1, arg2)
+
+
+ Signature: (Component list * Connection list) -> Result<ConnectionsWidth,WidthInferError>
+ + |
+
+
+
+
+
+ Infer width of all connections or return an error + + + |
+
+ Namespace: global
+
Type | Description |
+ MapData + | +
+ Return all the Ids of all input ports across all components. +Return also the ComponentId which may be used in error messages. + + + |
+
Function or value | Description |
+
+
+ analyseState(arg1, arg2)
+
+
+ Signature: (Component list * Connection list) -> SimulationError option
+ + |
+
+
+
+
+
+ Analyse a CanvasState and return any error (or None). + + + |
+
+ Namespace: global
+
Type | Description |
+ CanvasState + | +
+ F# data describing the contents of a single schematic sheet. + + + |
+
+ Component + | +
+ JSComponent mapped to F# record. +Id uniquely identifies the component within a sheet and is used by draw2d library. +Label is optional descriptor displayed on schematic. + + + |
+
+ ComponentType + | ++ + | +
+ Connection + | +
+ JSConnection mapped to F# record. +Id uniquely identifies connection globally and is used by library. + + + |
+
+ CustomComponentType + | +
+ Name identified the LoadedComponent used. +The labels define legends on symbol. +Label strings are unique per CustomComponent. +Multiple CustomComponent instances are differentiated by Component data. + + + |
+
+ HighLightColor + | +
+ Colors to highlight components +Case name is used (lowercase) as HTML color name +See JSHelpers.getColorString +lots of colors can be added, see https://www.w3schools.com/colors/colors_names.asp + + + |
+
+ LoadedComponent + | +
+ Static data describing a schematic sheet loaded as a custom component. +Every sheet is always identified with a file from which it is loaded/saved. +Name is human readable (and is the filename - without extension) and identifies sheet. +File path is the sheet directory and name (with extension). +InputLabels, OutputLabels are the I/O connections. +The I/O connection integers are bus widths. +The I/O connection strings are human readable. The strings are guaranteed +to be unique in the I/O connection list. I.e. An input label may be the same +as an output label, but two input (or output) labels cannot be the same. +The position in the I/O connections list is important as it implicitly +indicates the port number. For example, the first element in the InputLabels +list is related to the Component's Port with PortNumber 0. +Two instances of a loaded component have the same LoadedComponent data. + + + |
+
+ Memory + | ++ + | +
+ NumberBase + | ++ + | +
+ Port + | +
+ A component I/O. +Id (like any other Id) is a string generated with 32 random hex charactes, +so it is (practically) globally unique. These Ids are used by the draw2d +library to uniquely refer to ports and components. They are generated via: +http://www.draw2d.org/draw2d_touch/jsdoc_6/#!/api/draw2d.util.UUID. +PortNumber is used to identify which port on a component, contiguous from 0 +separately for inputs and outputs. +HostId is the unique Id of the component where the port is. For example, +all three ports on the same And component will have the same HostId. + + + |
+
+ PortType + | ++ + | +
+ Project + | +
+ Type for an open project which represents a complete design. +ProjectPath is directory containing project files. +OpenFileName is name of file from which current schematic sheet is loaded/saved. +LoadedComponents contains the list of schematic sheets, each as a component, one per sheet. + + + |
+
Function or value | Description |
+
+
+ draw2dCanvasHeight
+
+
+ Signature: int
+ + |
+ + + + + + + | +
+
+
+ draw2dCanvasWidth
+
+
+ Signature: int
+ + |
+ + + + + + + | +
+ Namespace: global
+
Function or value | Description |
+
+
+ mergeDependencies(...)
+
+
+ Signature: currDiagramName:string -> graph:SimulationGraph -> (Component list * Connection list) -> loadedDependencies:LoadedComponent list -> Result<SimulationGraph,SimulationError>
+ + |
+
+
+
+
+
+ Try to resolve all the dependencies in a graph, and replace the reducer +of the custom components with a simulationgraph. +Return an error if there are problems with the dependencies. +For example, if the graph of an ALU refers to custom component such as +adders, replace them with the actual simulation graph for the adders. + + + |
+
+ Namespace: global
+
Type | Description |
+ DiagEl + | ++ + | +
+ DragMode + | ++ + | +
+ IntMode + | ++ + | +
+ JSDiagramMsg + | ++ + | +
+ KeyboardShortcutMsg + | ++ + | +
+ MemoryEditorData + | ++ + | +
+ MenuCommand + | ++ + | +
+ Msg + | ++ + | +
+ PopupDialogData + | +
+ Possible fields that may (or may not) be used in a dialog popup. + + + |
+
+ RightTab + | ++ + | +
+ Sample + | ++ + | +
+ SimTime + | ++ + | +
+ StateSample + | ++ + | +
+ TopMenu + | ++ + | +
+ WaveAdderModel + | ++ + | +
+ WaveName + | ++ + | +
+ WaveSimModel + | ++ + | +
+ WaveSimPort + | ++ + | +
+ Waveform + | ++ + | +
+ Wire + | ++ + | +
Function or value | Description |
+
+
+ initWA
+
+
+ Signature: WaveAdderModel
+ + |
+ + + + + + + | +
+
+
+ initWS
+
+
+ Signature: WaveSimModel
+ + |
+ + + + + + + | +
+ Namespace: global
+
Type | Description |
+ Model + | ++ + | +
+ Notifications + | ++ + | +
+ Namespace: global
+
Type | Description |
+ DisplayModeType + | +
+ Determines size of schematic. +ToDo - make this more flexible and expose sizes + + + |
+
+ Namespace: global
+
Function or value | Description |
+
+
+ extractComponent(jsComponent)
+
+
+ Signature: jsComponent:JSComponent -> Component
+ + |
+
+
+
+
+
+ Transform a JSComponent into an f# data structure. + + + |
+
+
+
+ extractConnection(jsConnection)
+
+
+ Signature: jsConnection:JSConnection -> Connection
+ + |
+ + + + + + + | +
+
+
+ extractState(arg1, arg2)
+
+
+ Signature: (JSComponent list * JSConnection list) -> CanvasState
+ + |
+
+
+
+
+
+ Transform the JSCanvasState into an f# data structure. + + + |
+
+ Namespace: global
+
Function or value | Description |
+
+
+ addFileToProject model dispatch
+
+
+ Signature: model:Model -> dispatch:(Msg -> unit) -> unit
+ + |
+
+
+
+
+
+ Create a new file in this project and open it automatically. + + + |
+
+
+
+ bitNums(a, b)
+
+
+ Signature: (a:int * b:int) -> string
+ + |
+ + + + + + + | +
+
+
+ clkAdvance(sD)
+
+
+ Signature: sD:SimulationData -> SimulationData
+ + |
+ + + + + + + | +
+
+
+ compsConns2portLst(...)
+
+
+ Signature: model:Model -> simData:SimulationData -> diagElLst:DiagEl list -> WaveSimPort []
+ + |
+ + + + + + + | +
+
+
+ currWS(model)
+
+
+ Signature: model:Model -> WaveSimModel
+ + |
+ + + + + + + | +
+
+
+ driveOut simGraph targetCompId inPortN
+
+
+ Signature: simGraph:Map<'?8513,SimulationComponent> -> targetCompId:ComponentId -> inPortN:InputPortNumber -> ('?8513 * OutputPortNumber) option
+ + Type parameters: '?8513 |
+
+
+
+
+
+ Returns a tuple option representing the output to which the target input is connected + + + |
+
+
+
+ extractSimData simData nCycles
+
+
+ Signature: simData:SimulationData -> nCycles:uint32 -> SimulationData []
+ + |
+ + + + + + + | +
+
+
+ extractSimTime model portFunc simData
+
+
+ Signature: model:'?8528 -> portFunc:('?8528 -> SimulationData -> WaveSimPort []) -> simData:SimulationData -> Sample []
+ + Type parameters: '?8528 |
+ + + + + + + | +
+
+
+ extractWaveData(...)
+
+
+ Signature: model:'a -> portFunc:('a -> SimulationData -> WaveSimPort []) -> simDataArr:SimulationData [] -> SimTime []
+ + Type parameters: 'a |
+ + + + + + + | +
+
+
+ extractWaveNames simData model portFunc
+
+
+ Signature: simData:SimulationData -> model:Model -> portFunc:(Model -> SimulationData -> WaveSimPort []) -> string []
+ + |
+ + + + + + + | +
+
+
+ findName simGraph arg2
+
+
+ Signature: simGraph:SimulationGraph -> WaveSimPort -> (string * (int * int)) list
+ + |
+ + + + + + + | +
+
+
+ getCurrFile(model)
+
+
+ Signature: model:Model -> string
+ + |
+ + + + + + + | +
+
+
+ getSelected(model)
+
+
+ Signature: model:Model -> DiagEl list
+ + |
+ + + + + + + | +
+
+
+ initFileWS(model)
+
+
+ Signature: model:Model -> Msg
+ + |
+ + + + + + + | +
+
+
+ limBits(name)
+
+
+ Signature: name:string -> (int * int) option
+ + |
+ + + + + + + | +
+
+
+ makeSimData(model)
+
+
+ Signature: model:Model -> Result<SimulationData,SimulationError> option * Result<(Map<string,WaveSimModel> * SimulationError option),'a> option
+ + Type parameters: 'a |
+ + + + + + + | +
+
+
+ processComp simData cId
+
+
+ Signature: simData:SimulationData -> cId:ComponentId -> WaveSimPort []
+ + |
+ + + + + + + | +
+
+
+ procIns simData compId inputs
+
+
+ Signature: simData:SimulationData -> compId:ComponentId -> inputs:InputPortNumber [] -> WaveSimPort []
+ + |
+ + + + + + + | +
+
+
+ reloadablePorts model simData
+
+
+ Signature: model:Model -> simData:SimulationData -> WaveSimPort []
+ + |
+ + + + + + + | +
+
+
+ remDuplicates(arrWithDup)
+
+
+ Signature: arrWithDup:WaveSimPort [] -> WaveSimPort []
+ + |
+ + + + + + + | +
+
+
+ saveOpenFileAction(model)
+
+
+ Signature: model:Model -> unit
+ + |
+
+
+
+
+
+ Save the file currently open. + + + |
+
+
+
+ selected2portLst model simData
+
+
+ Signature: model:Model -> simData:SimulationData -> WaveSimPort []
+ + |
+ + + + + + + | +
+
+
+ simLst model dispatch portsFunc
+
+
+ Signature: model:Model -> dispatch:(Msg -> unit) -> portsFunc:(Model -> SimulationData -> WaveSimPort []) -> Msg
+ + |
+ + + + + + + | +
+
+
+ simWireData2Wire(wireData)
+
+
+ Signature: wireData:Bit list -> bigint
+ + |
+ + + + + + + | +
+
+
+ viewNoProjectMenu model dispatch
+
+
+ Signature: model:Model -> dispatch:(Msg -> unit) -> (type)
+ + |
+
+
+
+
+
+ Display the initial Open/Create Project menu at the beginning if no project +is open. + + + |
+
+
+
+ viewTopMenu model dispatch
+
+
+ Signature: model:Model -> dispatch:(Msg -> unit) -> (type)
+ + |
+
+
+
+
+
+ Display top menu. + + + |
+
+
+
+ wSPort2Name simGraph p
+
+
+ Signature: simGraph:SimulationGraph -> p:WaveSimPort -> string
+ + |
+ + + + + + + | +
+ Namespace: global
+
Module | Description |
+ JsonHelpers + | ++ + | +
Function or value | Description |
+
+
+ askForExistingProjectPath()
+
+
+ Signature: unit -> string option
+ + |
+
+
+
+
+
+ Ask the user to choose a project file, with a dialog window. +Return the folder containing the chosen project file. +Return None if the user exits withouth selecting a path. + + + |
+
+
+
+ askForNewProjectPath()
+
+
+ Signature: unit -> string option
+ + |
+
+
+
+
+
+ Ask the user a new project path, with a dialog window. +Return None if the user exits withouth selecting a path. + + + |
+
+
+
+ baseName(filePath)
+
+
+ Signature: filePath:string -> string
+ + |
+ + + + + + + | +
+
+
+ createEmptyDgmFile folderPath baseName
+
+
+ Signature: folderPath:string -> baseName:string -> unit
+ + |
+
+
+
+
+
+ Create new empty diagram file. Automatically add the .dgm suffix. + + + |
+
+
+
+ dirName(filePath)
+
+
+ Signature: filePath:string -> string
+ + |
+ + + + + + + | +
+
+
+ pathJoin(args)
+
+
+ Signature: args:string [] -> string
+ + |
+ + + + + + + | +
+
+
+ removeFile folderPath baseName
+
+
+ Signature: folderPath:string -> baseName:string -> unit
+ + |
+
+
+
+
+
+ Asyncronously remove file. + + + |
+
+
+
+ savePngFile folderPath baseName png
+
+
+ Signature: folderPath:string -> baseName:string -> png:'a -> unit
+ + Type parameters: 'a |
+
+
+
+
+
+ Save a PNG file (encoded base64, as from draw2d) +Overwrite existing file if needed + + + |
+
+
+
+ saveStateToFile(...)
+
+
+ Signature: folderPath:string -> baseName:string -> (Component list * Connection list) -> unit
+ + |
+
+
+
+
+
+ Save state to file. Automatically add the .dgm suffix. + + + |
+
+
+
+ tryCreateFolder(path)
+
+
+ Signature: path:string -> Result<unit,string>
+ + |
+ + + + + + + | +
+
+
+ tryLoadComponentsFromPath(folderPath)
+
+
+ Signature: folderPath:string -> Result<LoadedComponent list,string>
+ + |
+
+
+
+
+
+ Try to load all diagram components from a file path. +Return a string with error if not possible. + + + |
+
+
+
+ writeFile path data
+
+
+ Signature: path:string -> data:'b -> unit
+ + Type parameters: 'b |
+
+
+
+
+
+ Write utf8 encoded data to file. +Create file if it does not exist. + + + |
+
+
+
+ writeFileBase64 path data
+
+
+ Signature: path:string -> data:'?8952 -> unit
+ + Type parameters: '?8952 |
+
+
+
+
+
+ Write base64 encoded data to file. +Create file if it does not exist. + + + |
+
+ Namespace: global
+
Function or value | Description |
+
+
+ assertThat cond msg
+
+
+ Signature: cond:bool -> msg:string -> unit
+ + |
+ + + + + + + | +
+
+
+ cropToLength len fromStart str
+
+
+ Signature: len:int -> fromStart:bool -> str:string -> string
+ + |
+
+
+
+
+
+ Crop a string to the specified length.
+fromStart indicates whether you want the first |
+
+
+
+ listSet lst item idx
+
+
+ Signature: lst:'a list -> item:'a -> idx:int -> 'a list
+ + Type parameters: 'a |
+
+
+
+
+
+ Set an element of the list at the specified position. +This function is slow: O(n). Do not use unless necessary. + + + |
+
+
+
+ pow2(exponent)
+
+
+ Signature: exponent:int -> int
+ + |
+
+
+
+
+
+ Return 2^exponent. + + + |
+
+
+
+ pow2int64(exponent)
+
+
+ Signature: exponent:int -> int64
+ + |
+
+
+
+
+
+ Return 2^exponent, packed into an int64. + + + |
+
+
+
+ tryFindError(lst)
+
+
+ Signature: lst:Result<'a,'b> list -> Result<'a list,'b>
+ + Type parameters: 'a, 'b |
+
+
+
+
+
+ Return the first error found in a list of results, or the list of Oks if +there are none. + + + |
+
+ Namespace: global
+
Type | Description |
+ JSCanvas + | ++ + | +
+ JSCanvasState + | ++ + | +
+ JSComponent + | ++ + | +
+ JSComponents + | ++ + | +
+ JSConnection + | ++ + | +
+ JSConnections + | ++ + | +
+ JSPort + | ++ + | +
+ JSPorts + | ++ + | +
+ JSVertices + | ++ + | +
+ Namespace: global
+
Function or value | Description |
+
+
+ argFlagIsOn(flags)
+
+
+ Signature: flags:string list -> bool
+ + |
+
+
+
+
+
+ Returns true if any of flags are present as command line argument. + + + |
+
+
+
+ args
+
+
+ Signature: string list
+ + |
+ + + + + + + | +
+
+
+ createMainWindow()
+
+
+ Signature: unit -> unit
+ + |
+ + + + + + + | +
+
+
+ debug
+
+
+ Signature: bool
+ + |
+ + + + + + + | +
+
+
+ hasDebugArgs()
+
+
+ Signature: unit -> bool
+ + |
+ + + + + + + | +
+
+
+ mainWindow
+
+
+ Signature: (type) option
+ + |
+ + + + + + + | +
+ Namespace: global
+
Function or value | Description |
+
+
+ bin(num)
+
+
+ Signature: num:int -> string
+ + |
+ + + + + + + | +
+
+
+ bin64(num)
+
+
+ Signature: num:int64 -> string
+ + |
+ + + + + + + | +
+
+
+ bitToString(bit)
+
+
+ Signature: bit:Bit -> string
+ + |
+
+
+
+
+
+ Convert a bit to string. + + + |
+
+
+
+ convertIntToWireData width num
+
+
+ Signature: width:int -> num:int64 -> WireData
+ + |
+
+
+
+
+
+ Convert an int into a Bit list with the provided width. The Least +Significant Bits are the one with low index (e.g. LSB is at position 0, MSB +is at position N). Little Endian. +If the number has more bits than width, then more bits will be returned. + + + |
+
+
+
+ convertWireDataToInt(bits)
+
+
+ Signature: bits:WireData -> int64
+ + |
+
+
+
+
+
+ Convert a list of Bits into an int. The Least Significant Bits are the one +with low index (e.g. LSB is at position 0, MSB is at position N). +Little Endian. + + + |
+
+
+
+ dec(num)
+
+
+ Signature: num:int -> string
+ + |
+ + + + + + + | +
+
+
+ dec64(num)
+
+
+ Signature: num:int64 -> string
+ + |
+ + + + + + + | +
+
+
+ hex(num)
+
+
+ Signature: num:int -> string
+ + |
+ + + + + + + | +
+
+
+ hex64(num)
+
+
+ Signature: num:int64 -> string
+ + |
+ + + + + + + | +
+
+
+ sDec64(num)
+
+
+ Signature: num:int64 -> string
+ + |
+ + + + + + + | +
+
+
+ strToInt(str)
+
+
+ Signature: str:string -> Result<int64,string>
+ + |
+
+
+
+
+
+ Try to convert a string to an int, or return an error message if that was +not possible. + + + |
+
+
+
+ strToIntCheckWidth str width
+
+
+ Signature: str:string -> width:int -> Result<int64,string>
+ + |
+
+
+
+
+
+ Convert a string to a number making sure that it has no more bits than +specified in width. + + + |
+
+ Namespace: global
+
Function or value | Description |
+
+
+ getLabelConnections comps conns
+
+
+ Signature: comps:Component list -> conns:Connection list -> Connection list
+ + |
+ + + + + + + | +
+
+
+ runCanvasStateChecksAndBuildGraph(...)
+
+
+ Signature: (Component list * Connection list) -> Result<SimulationGraph,SimulationError>
+ + |
+
+
+
+
+
+ Validate a diagram and generate its simulation graph. + + + |
+
+ Namespace: global
+
Function or value | Description |
+
+
+ analyseSimulationGraph(...)
+
+
+ Signature: diagramName:string -> graph:SimulationGraph -> connections:Connection list -> SimulationError option
+ + |
+
+
+
+
+
+ Analyse a SimulationGraph and return any error (or None). +The SimulationGraph should be fully merged with its dependency, so this +function has to be called after the dependency merger has finished. +This function assumes that there are no cyclic dependencies. + + + |
+
+ Namespace: global
+
Function or value | Description |
+
+
+ diffReducerInputsOrOutputs newIO oldIO
+
+
+ Signature: newIO:Map<'a,WireData> -> oldIO:Map<'a,WireData> -> Map<'a,WireData>
+ + Type parameters: 'a |
+
+
+
+
+
+ Function to determine what reducer inputs or outputs have changed. + + + |
+
+
+
+ extractIncompleteSimulationIOs(...)
+
+
+ Signature: simulationIOs:SimulationIO list -> graph:SimulationGraph -> (SimulationIO * WireData) list
+ + |
+
+
+
+
+
+ Simlar to extractSimulationIOs, but do not fail if a bit is not set, just +ignore it. + + + |
+
+
+
+ extractSimulationIOs simulationIOs graph
+
+
+ Signature: simulationIOs:SimulationIO list -> graph:SimulationGraph -> (SimulationIO * WireData) list
+ + |
+
+
+
+
+
+ Given a list of IO nodes (i.e. Inputs or outputs) extract their value. +If they dont all have a value, an error is thrown. + + + |
+
+
+
+ feedClockTick(graph)
+
+
+ Signature: graph:SimulationGraph -> SimulationGraph
+ + |
+
+
+
+
+
+ Send one global clock tick to all clocked components, and return the updated +simulationGraph. + + + |
+
+
+
+ feedSimulationInput(...)
+
+
+ Signature: graph:SimulationGraph -> inputId:ComponentId -> wireData:WireData -> SimulationGraph
+ + |
+
+
+
+
+
+ Feed zero to a simulation input. +This function is supposed to be used with Components of type Input. + + + |
+
+
+
+ getSimulationIOs(components)
+
+
+ Signature: components:Component list -> SimulationIO list * SimulationIO list
+ + |
+
+
+
+
+
+ Get ComponentIds, ComponentLabels and wire widths of all input and output +nodes. + + + |
+
+
+
+ getSimulationIOsFromGraph(graph)
+
+
+ Signature: graph:SimulationGraph -> SimulationIO list * SimulationIO list
+ + |
+
+
+
+
+
+ Get ComponentIds, ComponentLabels and wire widths of all input and output +nodes in a simulationGraph. + + + |
+
+
+
+ InitialiseGraphWithZeros inputIds graph
+
+
+ Signature: inputIds:SimulationIO list -> graph:SimulationGraph -> SimulationGraph
+ + |
+
+
+
+
+
+ Feed zeros to all simulation inputs, and feed a single clock tick. +This way all combinational logic has been touched once and had produced its +outputs. + + + |
+
+ Namespace: global
+
Function or value | Description |
+
+
+ extractSimulationIOs
+
+
+ Signature: SimulationIO list -> SimulationGraph -> (SimulationIO * WireData) list
+ + |
+
+
+
+
+
+ Expose the extractSimulationIOs function from SimulationRunner. + + + |
+
+
+
+ extractStatefulComponents(graph)
+
+
+ Signature: graph:SimulationGraph -> SimulationComponent list
+ + |
+
+
+
+
+
+ Get some info and the state of all stateful components in a graph. + + + |
+
+
+
+ feedClockTick
+
+
+ Signature: SimulationGraph -> SimulationGraph
+ + |
+
+
+
+
+
+ Expose the feedClockTick function from SimulationRunner. + + + |
+
+
+
+ feedSimulationInput
+
+
+ Signature: SimulationGraph -> ComponentId -> WireData -> SimulationGraph
+ + |
+
+
+
+
+
+ Expose the feedSimulationInput function from SimulationRunner. + + + |
+
+
+
+ prepareSimulation(...)
+
+
+ Signature: diagramName:string -> (Component list * Connection list) -> loadedDependencies:LoadedComponent list -> Result<SimulationData,SimulationError>
+ + |
+
+
+
+
+
+ Builds the graph and simulates it with all inputs zeroed. + + + |
+
+ Namespace: global
+
Type | Description |
+ Bit + | ++ + | +
+ ComponentId + | ++ + | +
+ ComponentLabel + | ++ + | +
+ ConnectionId + | ++ + | +
+ InputPortId + | ++ + | +
+ InputPortNumber + | ++ + | +
+ IsClockTick + | ++ + | +
+ OutputPortId + | ++ + | +
+ OutputPortNumber + | ++ + | +
+ ReducerInput + | ++ + | +
+ ReducerOutput + | ++ + | +
+ SimulationComponent + | ++ + | +
+ SimulationComponentState + | ++ + | +
+ SimulationData + | ++ + | +
+ SimulationError + | ++ + | +
+ SimulationGraph + | ++ + | +
+ SimulationIO + | ++ + | +
+ WireData + | ++ + | +
+ Namespace: global
+
Function or value | Description |
+
+
+ calculateCustomComponentsCombinatorialPaths(...)
+
+
+ Signature: diagramName:string -> graph:SimulationGraph -> CustomCompsCombPaths option
+ + |
+
+
+
+
+
+ For each dependecy in a simulation graph, create a map containing: +- key: name of the custom component. +- value: a map with: +- key: each InputPortNumber +- value: a list of OutputPortNumber combinatorially connected to the +input. +An input is considered combinatorially connected to an output if there is at +least one logic path connecting an input directly with the output. In other +words, there must be at least one route from the input to output that does +not encounter any synchronous component. +Return None if such information cannot be inferred, for example if there is +a circular dependency. + + + |
+
+
+
+ couldBeSynchronousComponent(compType)
+
+
+ Signature: compType:ComponentType -> bool
+ + |
+
+
+
+
+
+ Tells wether a component is clocked or not. Note that Custom components may +be clocked (cannot tell without recursively analysing them), so they are +considered synchronous. + + + |
+
+
+
+ getCombinatorialOutputs(...)
+
+
+ Signature: combRoutes:CustomCompsCombPaths -> node:SimulationComponent -> inputPortNumberOpt:InputPortNumber option -> Map<OutputPortNumber,(ComponentId * InputPortNumber) list>
+ + |
+
+
+
+
+
+ Given a map of combinatorial routes from inputs to outputs for every +simulation graph, perform a lookup to find the combinatorial routes from a +given input to the outputs. Then filter the outputs of the custom node to +only point to the combinatorial children (i.e. the ones connected to the +combinatorial outptus). + + + |
+
+
+
+ getCustomComponentType(_arg1)
+
+
+ Signature: _arg1:ComponentType -> CustomComponentType
+ + |
+ + + + + + + | +
+
+
+ getCustomName(_arg1)
+
+
+ Signature: _arg1:ComponentType -> string
+ + |
+ + + + + + + | +
+
+
+ getNodeOrFail graph id
+
+
+ Signature: graph:SimulationGraph -> id:ComponentId -> SimulationComponent
+ + |
+ + + + + + + | +
+
+
+ hasSynchronousComponents(graph)
+
+
+ Signature: graph:Map<ComponentId,SimulationComponent> -> bool
+ + |
+
+
+
+
+
+ Find out whether a simulation graph has some synchronous components. + + + |
+
+
+
+ isCustom(_arg1)
+
+
+ Signature: _arg1:ComponentType -> bool
+ + |
+ + + + + + + | +
+
+
+ isInput(_arg1)
+
+
+ Signature: _arg1:ComponentType -> bool
+ + |
+ + + + + + + | +
+
+
+ isOutput(_arg1)
+
+
+ Signature: _arg1:ComponentType -> bool
+ + |
+ + + + + + + | +
Module | Description |
+ CommonTypes + | ++ + | +
+ Helpers + | ++ + | +
+ Main + | ++ + | +
+ DiagramMessageType + | ++ + | +
+ DiagramModelType + | ++ + | +
+ Draw2dWrapper + | ++ + | +
+ Extractor + | ++ + | +
+ FileMenuView + | ++ + | +
+ FilesIO + | ++ + | +
+ JSTypes + | ++ + | +
+ CanvasStateAnalyser + | ++ + | +
+ DependencyMerger + | ++ + | +
+ NumberHelpers + | ++ + | +
+ SimulationBuilder + | ++ + | +
+ SimulationGraphAnalyser + | ++ + | +
+ SimulationRunner + | ++ + | +
+ Simulator + | ++ + | +
+ SimulatorTypes + | ++ + | +
+ SynchronousUtils + | ++ + | +
+ BusTypes + | ++ + | +
+ BusWidthInferer + | ++ + | +
+
+ Namespace: global
+ Parent Module: JSTypes
+
Instance member | Description |
+
+
+ x.Item1
+
+
+ Signature: JSComponent list
+ + |
+ + + | +
+
+
+ x.Item2
+
+
+ Signature: JSConnection list
+ + |
+ + + | +
+
+ Namespace: global
+ Parent Module: SimulatorTypes
+
Union Case | Description |
+
+
+ One
+
+
+ Signature:
+ + |
+ + + + + + + | +
+
+
+ Zero
+
+
+ Signature:
+ + |
+ + + + + + + | +
+
+ Namespace: global
+ Parent Module: SimulatorTypes
+
Union Case | Description |
+
+
+ ComponentId(string)
+
+
+ Signature: string
+ + |
+ + + + + + + | +
+
+ Namespace: global
+ Parent Module: SimulatorTypes
+
Union Case | Description |
+
+
+ ComponentLabel(string)
+
+
+ Signature: string
+ + |
+ + + + + + + | +
+
+ Namespace: global
+ Parent Module: SimulatorTypes
+
Union Case | Description |
+
+
+ ConnectionId(string)
+
+
+ Signature: string
+ + |
+ + + + + + + | +
+
+ Namespace: global
+ Parent Module: SimulatorTypes
+
Union Case | Description |
+
+
+ InputPortId(string)
+
+
+ Signature: string
+ + |
+ + + + + + + | +
+
+ Namespace: global
+ Parent Module: SimulatorTypes
+
Union Case | Description |
+
+
+ InputPortNumber(int)
+
+
+ Signature: int
+ + |
+ + + + + + + | +
+
+ Namespace: global
+ Parent Module: SimulatorTypes
+
Union Case | Description |
+
+
+ No
+
+
+ Signature:
+ + |
+ + + + + + + | +
+
+
+ Yes(SimulationComponentState)
+
+
+ Signature: SimulationComponentState
+ + |
+ + + + + + + | +
+
+ Namespace: global
+ Parent Module: SimulatorTypes
+
Union Case | Description |
+
+
+ OutputPortId(string)
+
+
+ Signature: string
+ + |
+ + + + + + + | +
+
+ Namespace: global
+ Parent Module: SimulatorTypes
+
Union Case | Description |
+
+
+ OutputPortNumber(int)
+
+
+ Signature: int
+ + |
+ + + + + + + | +
+
+ Namespace: global
+ Parent Module: SimulatorTypes
+
Record Field | Description |
+
+
+ CustomSimulationGraph
+
+
+ Signature: SimulationGraph option
+ + |
+ + + + + + + | +
+
+
+ Inputs
+
+
+ Signature: Map<InputPortNumber,WireData>
+ + |
+ + + + + + + | +
+
+
+ IsClockTick
+
+
+ Signature: IsClockTick
+ + |
+ + + + + + + | +
+
+ Namespace: global
+ Parent Module: SimulatorTypes
+
Record Field | Description |
+
+
+ NewCustomSimulationGraph
+
+
+ Signature: SimulationGraph option
+ + |
+ + + + + + + | +
+
+
+ NewState
+
+
+ Signature: SimulationComponentState
+ + |
+ + + + + + + | +
+
+
+ Outputs
+
+
+ Signature: Map<OutputPortNumber,WireData> option
+ + |
+ + + + + + + | +
+
+ Namespace: global
+ Parent Module: SimulatorTypes
+
Record Field | Description |
+
+
+ CustomSimulationGraph
+
+
+ Signature: SimulationGraph option
+ + |
+ + + + + + + | +
+
+
+ Id
+
+
+ Signature: ComponentId
+ + |
+ + + + + + + | +
+
+
+ Inputs
+
+
+ Signature: Map<InputPortNumber,WireData>
+ + |
+ + + + + + + | +
+
+
+ Label
+
+
+ Signature: ComponentLabel
+ + |
+ + + + + + + | +
+
+
+ Outputs
+
+
+ Signature: Map<OutputPortNumber,(ComponentId * InputPortNumber) list>
+ + |
+ + + + + + + | +
+
+
+ Reducer
+
+
+ Signature: ReducerInput -> ReducerOutput
+ + |
+ + + + + + + | +
+
+
+ State
+
+
+ Signature: SimulationComponentState
+ + |
+ + + + + + + | +
+
+
+ Type
+
+
+ Signature: ComponentType
+ + |
+ + + + + + + | +
+
+ Namespace: global
+ Parent Module: SimulatorTypes
+
Union Case | Description |
+
+
+ DffState(Bit)
+
+
+ Signature: Bit
+ + |
+ + + + + + + | +
+
+
+ NoState
+
+
+ Signature:
+ + |
+ + + + + + + | +
+
+
+ RamState(Memory)
+
+
+ Signature: Memory
+ + |
+ + + + + + + | +
+
+
+ RegisterState(WireData)
+
+
+ Signature: WireData
+ + |
+ + + + + + + | +
+
+ Namespace: global
+ Parent Module: SimulatorTypes
+
Record Field | Description |
+
+
+ ClockTickNumber
+
+
+ Signature: int
+ + |
+ + + + + + + | +
+
+
+ Graph
+
+
+ Signature: SimulationGraph
+ + |
+ + + + + + + | +
+
+
+ Inputs
+
+
+ Signature: SimulationIO list
+ + |
+ + + + + + + | +
+
+
+ IsSynchronous
+
+
+ Signature: bool
+ + |
+ + + + + + + | +
+
+
+ NumberBase
+
+
+ Signature: NumberBase
+ + |
+ + + + + + + | +
+
+
+ Outputs
+
+
+ Signature: SimulationIO list
+ + |
+ + + + + + + | +
+
+ Namespace: global
+ Parent Module: SimulatorTypes
+
Record Field | Description |
+
+
+ ComponentsAffected
+
+
+ Signature: ComponentId list
+ + |
+ + + + + + + | +
+
+
+ ConnectionsAffected
+
+
+ Signature: ConnectionId list
+ + |
+ + + + + + + | +
+
+
+ InDependency
+
+
+ Signature: string option
+ + |
+ + + + + + + | +
+
+
+ Msg
+
+
+ Signature: string
+ + |
+ + + + + + + | +
+
+ Namespace: global
+ Parent Module: SimulatorTypes
+
Instance member | Description |
+
+
+ x.Count
+
+
+ Signature: int
+ + |
+
+
+ CompiledName: |
+
+
+
+ x.IsEmpty
+
+
+ Signature: bool
+ + |
+
+
+ CompiledName: |
+
+
+
+ [key]
+
+
+ Signature: key:ComponentId -> SimulationComponent
+ + |
+
+
+ CompiledName: |
+
+
+ Namespace: global
+ Parent Module: SimulatorTypes
+
Instance member | Description |
+
+
+ x.Item1
+
+
+ Signature: ComponentId
+ + |
+ + + | +
+
+
+ x.Item2
+
+
+ Signature: ComponentLabel
+ + |
+ + + | +
+
+
+ x.Item3
+
+
+ Signature: int
+ + |
+ + + | +
+
+ Namespace: global
+ Parent Module: SimulatorTypes
+
Instance member | Description |
+
+
+ x.Head
+
+
+ Signature: Bit
+ + |
+
+
+ CompiledName: |
+
+
+
+ x.IsEmpty
+
+
+ Signature: bool
+ + |
+
+
+ CompiledName: |
+
+
+
+ [index]
+
+
+ Signature: index:int -> Bit
+ + |
+
+
+ CompiledName: |
+
+
+
+ x.Length
+
+
+ Signature: int
+ + |
+
+
+ CompiledName: |
+
+
+
+ x.Tail
+
+
+ Signature: Bit list
+ + |
+
+
+ CompiledName: |
+
Static member | Description |
+
+
+ List.Empty
+
+
+ Signature: Bit list
+ + |
+
+
+ CompiledName: |
+