ELEC60015-HLP-CW/docs/index.html

199 lines
11 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>
ISSIE
</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Schematic Editor and Simulator" />
<meta name="author" content="tomcl" />
<link rel="icon" type="image/x-icon" href="content/img/icon.ico" />
<link rel="stylesheet" href="content/style.css" />
<!-- HTML5 shim, for IE6-8 support of HTML5 elements -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
<![endif]-->
</head>
<body>
<h><a name="Home" href="index.html"></a></h>
<div class="topnav">
<a href="index.html" style="font-size: 30px; font-weight:bolder">ISSIE</a>
<a href="UserGuide.html">User Guide</a>
<a href="DeveloperInfo.html">Developer Info</a>
<a href="https://github.com/tomcl/issie/wiki/Issie-Blog"> Issie Blog</a>
<a href="Contact.html">Contact</a>
<div class="topnav-right">
<a href="Download.html">Download</a>
</div>
</div>
<div class="IntroBackground">
<div class="IntroLayer">
<p style="font-size: 24px; margin-left: 0.5%; font-weight:bolder; color: #272838; text-align: center">
<br><br><br> Discover, Learn & Create with the ISSIE circuit schematic editor!
</p>
<div class="topnav-right">
<a href="#Info">About ISSIE</a>
<a href="#Acknowledgements">Acknowledgements</a>
</div>
<br><br><br><br><br>
</div>
</div>
<div class="GeneralText">
<br><br><br>
<div class="section"><h1><a name="Info" class="anchor" href="#Info">What is Issie?</a></h1></div>
<p>
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.
</p>
<p>
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.
</p>
<p>
Issie is coded in F# transpiled to Javascript by <a href="http://fable.io">FABLE</a>, and uses a pure F# drawing library.
</p><br>
<div class="section"><h1><a name="Features" class="anchor" href="#Features">Key Features</a></h1></div>
<br>
<div id="toc_container">
<p class="toc_title">Contents</p>
<ul class="toc_list">
<li><a href="#ComponentLibrary">1 Component Library</a></li>
<li><a href="#WireRouting">2 Wire Routing</a></li>
<li><a href="#WidthInference">3 Width Inference</a></li>
<li>
<a href="#Simulation">4 Circuit Simulation</a>
<ul>
<li><a href="#StepSimulation">4.1 Step Simulation</a></li>
<li><a href="#WaveformSimulation">4.2 Waveform Simulation</a></li>
</ul>
</li>
<li><a href="#Verilog">5 Verilog Output</a></li>
<li><a href="#Memory">6 Memory Editor</a></li>
</ul>
</div>
<div class="section" id="halfwidth"><h2><a name="ComponentLibrary" class="anchor" href="#ComponentLibrary">Component Library</a></h2></div>
<p>
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.
</p><br>
<p>
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.
</p><br>
<div class="img">
<img src="content/img/circuit/catalog.png" alt="Initial circuit and Component tab" />
</div><br>
<div class="section" id="halfwidth"><h2><a name="WireRouting" class="anchor" href="#WireRouting">Wire Routing</a></h2></div>
<p>
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.
</p><br>
<div class="section" id="halfwidth"><h2><a name="WidthInference" class="anchor" href="#WidthInference">Width Inference</a></h2></div>
<p>
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.
</p><br>
<div class="img">
<img src="content/img/circuit/wireerror.png" alt="Width Inferer Error Message" />
</div><br>
<div class="section" id="halfwidth"><h2><a name="CircuitSimulation" class="anchor" href="#CircuitSimulation">Circuit Simulation</a></h2></div>
<p>
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.
</p><br>
<div class="section" id="halfwidth"><h3><a name="StepSimulation" class="anchor" href="#StepSimulation">Step Simulation</a></h3></div>
<p>
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.
</p><br>
<div class="img">
<img src="content/img/circuit/simulation tab.png" alt="Step simulator example" />
</div><br>
<div class="section" id="halfwidth"><h3><a name="WaveformSimulation" class="anchor" href="#WaveformSimulation">Waveform Simulation</a></h3></div>
<p>
Waveform Simulation allows the user to see the values in each selected connected circuit element (<a href="https://en.wikipedia.org/wiki/Netlist">Netlist</a>) 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.
</p><br>
<div class="img">
<img src="content/img/circuit/waveformsimulation.png" alt="Waveform simulator example" />
</div><br>
<p>
Waveform Simulation also allows for the simulation and contents viewing of memory components such as RAM.
</p><br>
<div class="img">
<img src="content/img/circuit/wavesimramview.png" alt="Waveform simulator with RAM example" />
</div><br>
<div class="section" id="halfwidth"><h2><a name="Verilog" class="anchor" href="#Verilog">Verilog Output</a></h2></div>
<p>
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.
</p><br>
<div class="section" id="halfwidth"><h2><a name="Memory" class="anchor" href="#Memory">Memory Editor</a></h2></div>
<p>
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.
</p><br>
<div class="img">
<img src="content/img/circuit/memoryeditor.png" alt="RAM editor example" />
</div><br>
<br>
<div class="section"><h1><a name="Acknowledgements" class="anchor" href="#Acknowledgements">Acknowledgements:</a></h1></div>
<ul>
<li>Marco Selvatici for the 8K lines of base code written for his 3rd year BEng <a href="https://github.com/MarcoSelvatici/DEflow">FYP</a></li>
<li>Edoardo Santi for work improving Issie over Summer 2020.</li>
<li>High Level Programming 2020 cohort for providing the base code of the draw block</li>
<li>Jo Merrick for work improving ISSIE for her 3rd year BEng Project</li>
<li>Dr Tom Clarke for his continued work maintaining and improving ISSIE throughout</li>
<li>All 2020/2021 1st year undergraduate students of the EEE department, Imperial College London, for acting as unpaid beta-testers!</li>
</ul>
</div>
</body>
</html>