Git Product home page Git Product logo

digital's Introduction

Download

Build Status codecov

Digital

Digital is an easy-to-use digital logic designer and circuit simulator designed for educational purposes.

screnshot

screnshot2

Download and Installation

There is no installation required, just unpack the Digital.zip file, which is available for download. On Linux start the shell script and on Windows and MacOS the JAR file can be started directly. A Java Runtime Environment (at least JRE 8) is required to run Digital. On Windows the easiest way to get Java is to install the binaries provided by the Eclipse Temurin project.

If there are any problems starting Digital on your system, please try to run Digital from a command line within the Digital folder:

java -jar Digital.jar

Features

These are the main features of Digital:

  • Visualization of signal states with measurement graphs.
  • Single gate mode to analyze oscillations.
  • Analysis and synthesis of combinatorial and sequential circuits.
  • Simple testing of circuits: You can create test cases and execute them to verify your design.
  • Many examples: From a transmission gate D-flip-flop to a complete (simple) MIPS-like single cycle CPU.
  • Includes a simple editor for finite state machines (FSM). A FSM can then be converted to a state transition table and a circuit implementing the FSM (See screenshot).
  • Contains a library with the most commonly used 74xx series integrated circuits.
  • Supports generic circuits. This allows the creation of circuits that can be parameterized when used. In this way, it is possible, for e.g., to create a barrel shifter with a selectable bit width.
  • Good performance: The example processor can be clocked at 120 kHz.
  • Supports large circuits: The "Conway's Game of Life" example consists of about 2400 active components and works just fine.
  • It is possible to use custom components which are implemented in Java and packed in a jar file. See this example for details.
  • Simple remote TCP interface which e.g. allows an assembler IDE to control the simulator.
  • Components can be described using VHDL or Verilog. The open source VHDL simulator ghdl needs to be installed to simulate a VHDL defined component, and the open source Verilog simulator Icarus Verilog is required to simulate a Verilog defined component.
  • A circuit can be exported to VHDL or Verilog. There is also direct support for the BASYS3 Board and the TinyFPGA BX board. See the documentation for details. The examples folder contains a variant of the example CPU, which runs on a BASYS3 board.
  • Direct export of JEDEC files which you can flash to a GAL16v8 or a GAL22v10. These chips are somewhat outdated (introduced in 1985!) but sufficient for beginners exercises, easy to understand and well documented. Also the ATF150x chips are supported which offer up to 128 macro-cells and in system programming. See the documentation for details.
  • SVG export of circuits, including a LaTeX/Inkscape compatible SVG version (see ctan)
  • No legacy code.
  • Good test coverage (about 80%; Neither the GUI tests nor the HDL simulator integration tests are running on the Travis-CI build servers, so CodeCov measures only about 50%). Almost all examples contain test cases which ensure that they work correctly.

The latest changes that have not yet been released are listed in the release notes. You can find the latest pre-release builds here. In the pre release builds the automated GUI tests are usually not executed. All other tests, including the HDL tests, were executed without errors.

Documentation

The documentation is available in English, German, Spanish, Portuguese, French, Italian and simplified Chinese. It is still very incomplete but it contains a chapter "First Steps" which explains the basic usage of Digital. The documentation also contains a list of available 74xx chips and a list of available keyboard shortcuts.

Translations

So far Digital is available in English, German, Spanish, Portuguese, French, Italian and simplified Chinese. If someone wants to add a new translation, please let me know. I can provide you with a special file for translation. This file is much easier to translate than the files used directly by Digital. So you don't have to deal with GitHub or the Java source code. Simply add the respective translation of the English text to this file and send it back to me. If you want to know how to create the necessary files yourself, see here.

Comments

If you want to send a bug report or feature request please use the GitHub issue tracker. This helps me to improve Digital, so do not hesitate. If you have general questions, you can also use the new GitHub Discussions to ask your questions without creating an issue.

It's also possible to send a private message to [email protected].

Motivation

Prior to the development of Digital, I used Logisim, developed by Carl Burch. If you are familiar with Logisim you will recognize the wire color scheme.

Logisim is a excellent and proven tool for teaching purposes, that has been actively developed until 2011. In 2013 Carl Burch has started the development of a new simulator called Toves. In his blog he explained why he decided to develop a new simulator instead of improving Logisim. In short: In his opinion, there are weaknesses in Logisim's architecture that are too difficult to overcome. Unfortunately, the development of Toves was discontinued at a very early stage.

In 2014, Carl Burch finally discontinued the development of Logisim. Since Logisim was released as open source, there are a number of forks to continue the work on Logisim:

  • Logisim-evolution by people of a group of swiss institutes (Haute École Spécialisée Bernoise, Haute École du paysage, d'ingénierie et d'architecture de Genève, and Haute École d'Ingénierie et de Gestion du Canton de Vaud)
  • Logisim by Joseph Lawrance at Wentworth Institute of Technology, Boston, MA
  • Logisim-iitd from the Indian Institute of Technology Delhi
  • Logisim from the CS3410 course of the Cornell University

But as far as I know, these projects do not work on solving the architectural difficulties. They are more about adding features and fixing bugs. In Logisim-evolution, for example, a VHDL/Verilog export and a really nice FPGA board integration was added.

So I also decided to implement a new simulator completely from scratch and started the implementation of Digital in March 2016. In the meantime a development level has been reached which is comparable to Logisim. In some areas (performance, testing of circuits, circuit analysis, hardware support) Logisim has already been exceeded.

Below I would like to explain briefly the reasons which led me to start a new development:

Switch On

In Logisim there is no real "switching on" of a circuit. The simulation is running also while you are modifying it. This causes sometimes an unexpected behaviour. So it is possible to build a simple master-slave flip-flop which works fine. But after a circuit reset the flip-flop does not work anymore. Since the circuit is not switched on, there is no settling time to bring the circuit to a stable condition after its completion. A master-slave JK-flip-flop can only be implemented with a reset input, and this reset input needs to be activated to make the circuit operational.

To understand how Digital deals with this issue, you have to look at how the simulation works in Digital: Digital uses an event based simulator approach, i.e. each time a gate undergoes a change at one of its inputs, the new input states are read, however, the outputs of the gate are not updated instantly. Only when all gates involved have read their inputs, the outputs of all gates are updated. All gates seem to change synchronously, i.e. they seem to have all the exact same gate delay time. However, an undesirable feature of this approach is that even a simple RS flip-flop might not be able to reach a stable state. The same problem Logisim has.

To solve that problem, the "switching on" is introduced and a different simulation mode is used during the settling time right after switching on the circuit: Each time a gate undergoes a change at one of its inputs all gate inputs are read and their outputs are updated immediately. This happens gatewise in random order until no further changes occur and the circuit reaches a stable state. The gates appear to have random delay times now. This way, a master-slave flip-flop reaches a stable state after "switch on", however, the final state is still undefined.

To start a circuit in a defined state a special reset gate is used. This gate has a single output which is low during settling time and goes high when settling time is over.

A disadvantage of this approach is the fact that a running simulation cannot be changed. In order to do so, the circuit needs be switched off, modified and switched on again. However, this procedure is also advisable for real circuits.

Oscillations

With Logisim it is hard to find the root cause for oscillating circuits. If Logisim detects an oscillation, a corresponding message is issued, but it is not possible to investigate the cause in more detail, so it is difficult to understand what happens.

The synchronous update of all gates, which have seen a change at one of their inputs may also cause oscillations in Digital. In such a case, the oscillation is detected and simulation stops. However, there is also a single gate mode which allows to propagate a signal change gate by gate. This feature allows to follow the way through the circuit. After each step, all gates with a change at one of their inputs are highlighted. This way you can see how a signal change propagates in a circuit, thus you are able to find the root cause of an oscillation.

Embedded circuits

Similar to Logisim, Digital also allows to embed previously saved circuits in new designs, so hierarchical circuits can be created. However, in Digital embedded circuits are included as often as the circuit is used. This is similar to a C program in which all function calls are compiled as inlined functions. And this is also similar to a real circuit: Each sub circuit is "physically present" as often as it is used in the design. Although this approach increases the size of the data structure of the simulation model in memory, it simplifies the simulation itself. Thus, for example, the inputs and outputs of an embedded circuit are not specifically treat, they simply don't exist anymore after the formation of the simulation model. Even bidirectional connections can be implemented easily. Because of that approach for instance a embedded AND gate in a sub circuit behaves exactly like an AND gate inserted at top level although there is actually no difference between these two variants from the simulation models perspective. Logisim works somewhat different, which sometimes leads to surprises like unexpected signal propagation times and which makes it difficult to use bidirectional pins.

Performance

If a complete processor is simulated, it is possible to calculate the simulation without an update of the graphical representation. A simple processor (see example) can be simulated with a 120kHz clock (Intel® Core ™ i5-3230M CPU @ 2.60GHz), which is suitable also for more complex assembly exercises like Conway's Game of Life. There is a break gate having a single input. If this input changes from low to high this quick run is stopped. This way, an assembler instruction BRK can be implemented, which then can be used to insert break points in assembly language programs. So the debugging of assembly programs becomes very simple.

Debugging

In Logisim there is no easy way to debug an assembly program in a simulated processor. Digital offers a simple TCP-based remote control interface, so an assembler IDE can be used to control the simulator and load assembly programs into the simulated processor, start the program, perform single steps and so on. If a "single step" or a "run to next BRK instruction" is triggered by the assembly IDE, the actual used address of the program memory is returned to the assembler IDE. This allows the assembler IDE to highlight the actual executed instruction. In this way it is very easy to debug an assembly program executed by a simulated processor.

Circuit Synthesis

Logisim is able to generate combinatorial circuits from a truth table and vice versa. In Digital, this is also possible. In addition, a sequential circuit can be generated from an appropriate state transition table. You can specify both the transition circuit and the output circuit. The minimization of the expressions is done by the method of Quine and McCluskey. The truth table also can derived from a circuit which contains simple combinatorial logic, D flip-flops or JK flip-flops, including the generation of the state transition table. Note, however, that a flip-flop build of combinatorial gates is not recognized as such. The analysis of sequential circuits only works with purely combinatorial logic combined with the build-in D or JK flip-flops. Once a truth table or state transition table has been created, a JEDEC file can be exported for a GAL16v8 or a GAL22v10. After that, this file can be flashed onto a appropriate GAL. As mentioned above these GALs are quite old but with 8/10 macro-cells sufficient for beginners exercises. If more macro-cells are required, see the PDF documentation for details on how to set up Digital to support the ATF1502 and ATF1504 CPLDs which offer 32/64 macro-cells and In System Programming. It is also possible to export a circuit to VHDL or Verilog to run it on an FPGA. But the necessary HDL synthesis is sometimes a bit time-consuming and in my experience slows down the workflow in a lab exercise too much, especially if only simple circuits are required and the students change the circuit over and over again.

How do I get set up?

If you want to build Digital from the source code:

  • At first clone the repository.
  • A JDK (at least JDK 8) is required (either the Oracle JDK or OpenJDK)
  • maven is used as build system, so the easiest way is to install maven.
  • After that you can simply run mvn install to build Digital.
  • Run mvn site to create a findbugs and a JaCoCo code coverage report.
  • Most IDEs (Eclipse, NetBeans, IntelliJ) are able to import the pom.xml to create a project.

Contribution guidelines

  • If you want to contribute, please open a GitHub issue first.
    • A discussion should avoid duplicate or unnecessary work.
    • Before you send a pull request, make sure that at least mvn install runs without errors.
  • Don't introduce new findbugs issues.
  • Try to keep the test coverage high. The target is a minimum of 80% test coverage.
  • So far, there are only a few GUI tests, so that the overall test coverage is only slightly below 80%. Try to keep the amount of untested GUI code low.

Credits

Many thanks to the following persons for their help:

  • Ivan de Jesus Deras Tabora from the Universidad Tecnológica Centroamericana in Honduras has implemented the verilog code generator and almost all the necessary verilog templates.
  • Theldo Cruz Franqueira from the Pontifícia Universidade Católica de Minas Gerais in Brazil has provided the Portuguese translation.
  • Ángel Millán from the Instituto de Educación Secundaria Ies Virgen de Villadiego in Peñaflor (Sevilla), Spain has provided the Spanish translation.
  • XinJun Ma (@itviewer) has provided the Chinese translation.
  • Nicolas Maltais (@maltaisn) has provided the French translation.
  • Luca Cavallari (@psiwray) has provided the Italian translation.

Additional Screenshots

screnshot3

digital's People

Contributors

aaraujo666 avatar aaron-rumpler avatar angelmicelti avatar coreidcc avatar d630 avatar dependabot[bot] avatar derulf1 avatar eric-unc avatar frederikrogalski avatar gandalfuk avatar guiweber avatar gustan13 avatar helderdaniel avatar hneemann avatar ideras avatar itviewer avatar jackbashford avatar joshuadoust avatar juli-99 avatar kraeml avatar lmcapacho avatar maltaisn avatar marcelo-schreiber avatar ne565 avatar rdu avatar rj45 avatar roy77 avatar wmono avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

digital's Issues

Import error appears even after removing the error causing part from circuit

Steps to reproduce:

  • Save a circuit named test.dig in that contains only basic parts under \foo and close digital
  • Put the 74116.dig file in \foo\a and in \foo\b
  • Open test.dig and try adding a 74116 IC to the schematic. This will trigger an error because the same file exists twice in the import path.
  • Dismiss the error pop-up and delete the part (large error message placed in the schematic) so that no trace of the 74116 part exists.
  • Try saving the document again and notice that the error pop-up appears again.

Expected results: Removing the error causing part from the schematic should prevent the error message from appearing.

Analysis error message improvement

When starting analysis for a circuit, the following message appears if the input are not labeled. A similar message also appears of the outputs are not labeled.

image

This is confusing as the circuit actually has inputs, they are just not labeled. The message should be changed to reflect that the inputs and outputs are not labeled.

Abbruch aktuelle Aktion mit "Escape"

Ich hoffe Issues in Deutsch sind OK. Andernfalls schreibe ich in Zukunft in Englisch.

Bei meiner ersten Verwendung von "Digital" habe ich intuitiv versucht begonnene Aktionen, wie das Zeichnen von Linien, via "Esc" abzubrechen, was leider nicht möglich ist. Mein Vorschlag wäre, die Taste dafür nutzbar zu machen.

rethink import and library path strategy

If a file is opened the library path is set to the folder of the opened file. All files in and below that location are used as library files, which means you can include them by the components menu.
This avoid the dealing with additional library paths, to include components. You also can simply zip a folder and you have all the components needed to work with the circuit.
But in some cases this behavior is confusing to the user (See #32, #38). Maybe the handling of libraries should be changed.

Edit attributes when more than one component is selected

Simple version
Allow editing attributes when selected components are from same type

  • "Reset all diodes and FGETs" is not needed anymore. The selection allow a group wise reset and set

Advanced version
Allow editing identical attributes when selected components are from different types.

  • fast changing of "Data bits" for all components

Maybe all attributes need internal parameter "allow group wise edit" to define which parameter support this feature (not for Label, Description ...)

High DPI support could be improved

On a high DPI screen, the text, icons and buttons are very small and hard to read.

Here is a screenshot of the settings window. The font size used for the title is scaled properly and is easy to read. However everything inside the window is much smaller than it should be and hard to read.

image

FET in some configuration doesn't work.

I tried create CMOS full adder cell from PSX CPU and encount error. When I try switch pin B or C in given circuit from 0 to 1 not order of update of elements rise error.

At picture there are full adder on left and simplest part that generated error on the right.
fa

If i set default state from the start - circuit updates correctly, but it fails again if I switch from 0 to 1.

Issues when importing a circuit with unnamed pins

  1. The error message says the same thing twice:
    image

  2. A large text object is put on the schematic. This is unnecessary as there is already an error message pop-up giving the same information to the user.
    image

RAM Data dialog not updated after restart

In "Measurments" dialog it is possible to open "Data" dialog which shows the content of a memory. The content is correct updated during simulation. When simulation is stopped the dialog stays opened. After starting the simulation again the content is not updated anymore. The dialog has to be closed and reopened.

Bidirectional pins.

Is it possible to create bidirectional pins that can be used an IN pint and as OUT pins simultaneously? This is usual for data buses.

Slight mouse movements cause unintended behaviors, especially on HiDPI screens

  • Drawing wires and deselecting the wire tool can be hard on a HiDPI screen. Clicking while the mouse is moving will trigger the selection box instead of the wire tool. Right clicking while the mouse is moving will move the schematic instead of triggering the deselect action. If you consider that 1px is the smallest mouse movement that is possible, then a much smaller physical movement is needed on a HiDPI monitor to move the mouse by 1px than on a regular HD screen at the same mouse sensitivity. On my 4k screen, I noticed that I see the selection box appear briefly when I try drawing a wire and it doesn't work. If I stand very still while I click or right click, everything works as intended. So what is considered a mouse movement that alters the non-moving behavior should probably be scaled with the pixel density.

  • If the mouse moves slightly while selecting a component in the tree view, then the component is selected in the tree (greyed out) but the mouse is not moved back to the schematic and the component placement tool is not activated. When this happens, the tree view looks like this:
    image

  • The tree view issue happens even on a regular HD monitor, probably because of the larger mouse movement required to reach the selection zone, although less frequently than on a HiDPI monitor. I suggest removing the mouse movement detection in the tree view as there is no alternate behavior when moving the mouse anyway.

Usability

First of all, I'd like to say that it is great project and I like it very much. But i'm getting frustrated every time I used the program :(

It is pain to move wires and components around once I've place them. Single left click on component for moving it right away - it's very hard to get used to. When I try to select group of components that already wired up, it is nearly impossible without touching connected wires (for example, if I want to select and delete them, it can be done only individually for every single component). No shift + click combination to combine selection.

Single left click to place wire - it's not what I need in most cases. I am expecting Pointer tool be active by default (like in Logisim).

And one more thing: I cannot find how to enable grid dots in document, it difficult to me to wire thing up without grid.

Anywat, Digital is so awesome and intuitive after using Logisim, thank you!

Add Transmission Gates

For implementing XOR, you can use 6 transistors, two of which are transmission gates. It would be great if you could add those!

Restart required warning not shown when changing the shapes

When changing settings that require a restart, a warning is shown to the user explaining that a restart is required. However, when changing the "Use IEEE 91-1984 shapes" setting is changed, no warning is displayed even though a restart is required.

Suggestion: Allow opening the full documentation from the help menu

Having a link to the full documentation pdf within Digital would allow users to quickly open the documentation instead of having to browse their file system. Also, people may not know the documentation exists unless they look into the Digital folder. Having a link would make it easier to discover.

The link could be added in the help menu, right under Components
capture

Additional shortcuts and time saving functionality

After working some more in the latest version, I would suggest the following:

Shortcuts when a basic gate is selected:

  • PLUS (+) : Increase the number of inputs by one
  • MINUS (-) : Decrease the number of input by one

For wire placement (which, by the way, is much improved in the latest version!):

  • When pressing CTRL+Click to select a wire while in wire placement mode, get out of wire placement mode and select the wire instead. It happened a few time that I was trying to select a wire and it wouldn't work because the wire placement mode was active. When it happens, it can hard to see since the wire being placed is over the wire you're trying to select. CTRL+Click should have the priority since it is a more elaborate command which can hardly be made by mistake.

For components that have a label:

  • When you open the component properties, it would be nice to give focus to the Label field, so that you can just type right away and press enter to confirm the new label name. At the moment, the Rotation field has the focus by default. However, rotation can be done with the R shortcut directly in the schematic, so you will rarely want to open the properties dialog to change the rotation. Giving the Label field focus by default would make more sense.

two instance problems

If you open two instances, create a faulty circuit in one instance, you can't start the simulation in the other instance anymore.

Save the component tree view state

It would be nice if the component tree view state (visible or not) was saved, so that people using it do not have to make it visible upon every launch.

Soft Lock when tests end with a comment

Digital stalls when pressing OK in the test window if the last line of the test cases is a comment.

For example:

~U/D	~CE	~PL	CP	D0	D1	D2	D3	Q0	Q1	Q2	Q3
# Pre-Load & Hold
X	X	0	C	1	1	1	1	1	1	1	1
X	1	1	C	1	1	1	1	1	1	1	1

# Count Down

JAR Missing from latest release

Hi just a quick note to let you know that the latest release has no JAR file in either of the archives, but your read me on the main repo page tells folks that it does and is ready to run without building.

All that exists in the Distribution folder is:
Digital.exe
ReleaseNotes.txt
Version.txt
Assembly.xml
l4jconfig.xml

When digital is run it fails and stops with a message it cannot find Digital.jar

Issues with ROM component

In attributes dialog address bit size takes effect after closing dialog. That is confusing when "Edit" is used before closing the dialog.
Before the "Edit" button opens the "Data" dialog a message box should allow the user to accept the current setting.

Can not work with 32 address bits. Only one line of the memory is shown in "Data" dialog.

With data bits 25 and address bits 25 "Edit" do not open the "Data" dialog.

The data dialog shows only 6 chars per cell. So working with data bit sizes greater 24 is a pain. Each time the "Data" dialog is opened the column size of the interested cells have to be changed manually.

Allow skipping pins in the Pin Wizard

It would be useful to be able to skip pins in the Pin Wizard for unused pins such as GND and Vcc.

Suggestion: Right clicking could skip to the next pin number.

Support real diodes and real resistors.

So far, no resistors are available. This makes it impossible to simulate some CMOS circuits (See #22, #29)

In CMOS circuits short circuits often occur for very short time. During this time a large voltage drop occurs at the conductive FET and a large current flows. However, different voltage levels may exist on both sides of the FET because of its residual resistance. After a short time, one of the short-circuiting transistors opens and the current disappears. This produces a sharp current peak at the moment of switching.
In digital, a conducting transistor has no resistance. Source and drain are shorted out in the conducting state and therefore can not have different voltage levels. This causes a signal change to have no effect. Source and drain have always the same voltage level. The transistor which would open due to the different voltages remains conductive. In this case, an error message appears and the simulation is terminated.

Therefore, the simulation of some FET circuits does not work properly. To solve this problem, it must be allowed for a transistor to have different voltages at the source and drain even in the conducting state. This means that the residual resistance must not be zero.

This problem is related to the implementation of real diodes.

To overcome the issues caused by the missing residual resistance, the FET has an option to make it unidirectional. This is an ugly hack, but it helps to make more circuits work.

Selektieren von "Verbindungslinien" mit Klick

Der einzige Weg, den ich gefunden habe, um "Leitungen" zu löschen ist, diese über Aufziehen eines Fensters zu selektieren. Dies ist nicht immer möglich. Bei einer Leitung von der links und rechts weitere abgehen selektiert man automatisch auch die angrenzenden.
Es wäre vorteilhaft, wenn man durch einfachen Klick in eine Leitung diese selektieren könnte. Bisher erzeugt dies einen Abzweig von dieser Leitung.
Eventuell wäre es dann in dem Zuge sinnvoll separate "Auswählen" und "Verbindungsleitung zeichnen"-Werkzeuge anzubieten.

Error when running tests

I'm trying to add test cases for a new IC. I'm not sure what I'm doing wrong, but I get the following error message when running the tests. The input pin labels match the names in the test cases.

capture2
untitled

Suggestion: Allow inverting gate inputs without using discrete inverters

This is something that I love in Logisim but can't do in Digital. While it is purely a convenience feature, it helps make circuits a lot more compact. It is also less wires to connect.

image

Logisim implements this with a drop-down menu for each input (inverted yes/no), but if you want to keep the UI simple and compact a simple text field where a comma/space separated list of input to invert can be provided would work very well.

p.s. I will stop sending you lots of issues soon ;- ) I worked all day in Digital yesterday hence all the issues, but now I think I have pretty much found all I could. Thanks for your work and your support!

Add Export to Verilog

Up to now only export to VHDL is available.

At the moment I use the VHDL export only as a vehicle to run a circuit created with Digital on an FPGA, without explaining the VHDL code itself further. This is similar to the export of a JEDEC file for a GAL16v8: The JEDEC file is necessary to program the GAL, but its content is not considered further.
From this point of view it does not matter if VHDL or Verilog is used.

If someone wants to use an export to VHDL or Verilog in another way, I would be glad to hear about it. In my opinion, an HDL export is not suitable to teach the HDL itself. This is because the generated code uses only a small fraction of the HDL, and the direct translation of all components to an HDL entity is not always optimal. Humans would use an HDL in a different way.

Digital does not start if its folder name has some special characters

This was tested under Windows 10. Many (but not all) valid characters have been tested and only the following two are known to cause the issue:

Character that causes a Java Exception on startup: !
Character that prevents Digital from starting but does not cause an exception: ;

Add persistent RW memory

I'm willing to build a computer with Digital but as far as I know it will not be able to write anything to disk because the only persistent memory we have is ROM.

Would it be possible to add a "hard drive disk" component tied to a specific file or something equivalent ? A nice start would simply be to be able to copy/paste the whole data of a RAM module to manually save or load the content of writable memory as Logisim allows for example.

Resize der Baumansicht der Bauteile klappt nicht immer

Version: v0.12.1, commit 93a576c2e193caa54b9e29ae8341af42919f9cca
OS: macOS Sierra, 10.12.4 - MacBook Pro, Retina 15'

Die Baumansicht der Bauteile wird angezeigt wenn man unter Ansicht diese Option aktiviert. Sie öffnet sich aber zu klein und man kann die Größe nicht immer verändern.

Die Veränderung dieser "Vertical Bar" funktioniert nur bei jedem ca. fünften Versuch (beim verschieben nach rechts). Wenn man die Bar nach links verschiebt klappt es meistens, aber auch nicht immer.

Auch werden die Icons der Bauelemente nicht korrekt skaliert - man kann die Elemente der Baumansicht nicht voneinander unterscheiden.

Screenshot:
Screenshot Bug

Visibility of circuit errors

When a circuit error happens (such as no value set for an input), a message is displayed and a circle is displayed around the affected component. However, if the component is outside the view of the schematic, then the user will not be able to see which component was affected. The x, y coordinates are provided in the error message but these are not useful for the user since there doesn't seem to be a way to display them in the schematic.

I suggest centering the schematic view on the affected component when such an error happens (but make sure the pop-up is not over the component). I would also remove the x, y coordinates from the error message since they are not really useful.

Also, making the error circle around the component bright red would make it more obvious and different from the regular selection circle.

Library sub circuits not being imported if Digital folder renamed with some characters

Adding spaces or certain special characters (e.g. è, ç, %) to the Digital folder name prevent the Library sub circuits from being imported. This was tested under Windows 10.

Steps to reproduce:

  1. Download Digital V 0.13
  2. Extract the zip archive
  3. Start Digital
  4. Notice that the Library sub circuits are imported correctly
  5. Exit Digital
  6. Rename the folder to "Digital 0.13"
  7. Start Digital again
  8. Notice that the Library sub circuits are not available

Mandatory connection of all input pins for DIL package

In order to run the simulation, Digital requires all inputs on DIL packages to have a connection to a definite state. I understand how it is necessary to have all inputs connected for the simulation to be able to establish the state of the outputs. However in practice, when using ICs in DIL packages, sometimes some outputs and their associated inputs remain unconnected because they are not needed. For example, you might only need to use one of the two flip-flops on a 74112.

This makes it impossible to make circuits in Digital that look like what you would really do. For example, in practice, a circuit using a 74107 to toggle an output would look like this. The inputs and outputs of the second flip-flop are not connected but it works just fine.
image

While in Digital you need to connect all other pins to an arbitrary value, which makes it look like this:

image

Would there be a way to remove the requirement to have all inputs connected for DIL packages? In order to avoid dealing with undefined states, this could be effective only if the associated outputs are also not connected. I haven't seen the code so it might not be that simple, but I'm thinking that if all outputs of a circuit inside a DIL are not connected, you could simply ignore that circuit during the simulation.

I just feel the additional wires that need to be connected are causing unnecessary clutter in the schematics, take additional time to setup and might be confusing for the students.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.