Git Product home page Git Product logo

logisim-evolution's Introduction

Logisim-evolution


Logisim-evolution


Features

Logisim-evolution is educational software for designing and simulating digital logic circuits. Logisim-evolution is free, open-source, and cross-platform.

Project highlights:

  • easy to use circuit designer,
  • logic circuit simulations,
  • chronogram (to see the evolution of signals in your circuit),
  • electronic board integration (schematics can be simulated on real hardware),
  • VHDL components (components behavior can be specified in VHDL!),
  • TCL/TK console (interfaces between the circuit and the user),
  • huge library of components (LEDs, TTLs, switches, SoCs),
  • supports multiple languages,
  • and more!

Logisim-evolution Logisim-evolution Logisim-evolution


Requirements

Logisim-evolution is a Java application; therefore, it can run on any operating system supporting the Java runtime enviroment. It requires Java 16 (or newer).


Download

Logisim-evolution is available for download in compiled form with ready to use installable packages for Windows, macOS, and Linux or in source code form, which you can build yourself.

The following platform specific packages include the Java runtime and do not require it to be installed separately:

  • logisim-evolution_<version>-1_amd64.deb: Debian package (also suitable for Ubuntu and derivatives),
  • logisim-evolution-<version>-1.x86_64.rpm: Package for Fedora/Redhat/CentOS/SuSE Linux distributions,
  • logisim-evolution-<version>_amd64.snap: The Snap archive for all supported Linux distributions (also available in Snapcraft store),
  • logisim-evolution-<version>-aarch64.msi: Installer package for Microsoft Windows for Arm processors,
  • logisim-evolution-<version>-amd64.msi: Installer package for Microsoft Windows for Intel processors,
  • logisim-evolution-<version>-aarch64.dmg: macOS package for Apple processors,
  • logisim-evolution-<version>-x86_64.dmg: macOS package for Intel processors (also runs on Apple processors in simulation).

The Java JAR logisim-evolution-<version>-all.jar is also available and can be run on any system with a supported Java runtime installed.

Get it from the Snap Store


Note for macOS users: The Logisim-evolution.app is not signed with an Apple approved certificate.

When launching the application for the first time, you will have to start it via the "Open" entry in the application icon's context menu in the macOS Finder. This is either done by clicking the application icon with the right mouse button or holding down CTRL while clicking the icon with the left mouse button. This will open a panel asking you to verify that you wish to launch the application. On more recent versions of macOS, the panel will only give you a choice of moving the app to the trash or Cancel. On those systems, click Cancel, open System Preferences, and select Security & Privacy. There you may need to click the lock to make changes and authenticate with an administrative acccount. It should show an option to open the app. See Safely open apps on your Mac for more information.

Depending on your security settings, you may also get a panel asking if you wish to allow it to accept network connections. You can click "Deny" as we do not need network access currently nor we do request any.

Package Manager

Logisim-evolution is available from a bunch of package managers.
Note that these (except for Snap) are not maintained by the core developers.
If you should observe a bug in Logisim-evolution while using one of these packages, first make sure that it can be reproduced with the most recent official packages provided through this repository and ideally the HEAD of our main branch before creating an issue on the official Logisim-evolution repository.
Otherwise, report the issue to the package maintainer!

  • Snap (snap install logisim-evolution)
  • Flathub (flatpak install flathub com.github.reds.LogisimEvolution)
  • Homebrew (brew install --cask logisim-evolution)
  • MacPorts (port install logisim-evolution)
  • Chocolatey (choco install logisim-evolution)
  • winget (winget install -e --id logisim-evolution.logisim-evolution)
  • Arch User Repository

Nightly builds

We also offer builds based on the current state of the main branch. If the main branch has been changed, a new Nightly build is created at midnight UTC.

Note that these builds may be unstable since the main branch is a work in progress.

To get nightly downloads, please click here and browse to the last successful run of Nightly worker, which should be on top. Note that due to Github internals, all files are provided as ZIP archives. You must unzip the downloaded file to get the installation package.

Please share your experience in Discussions or open a ticket if you found a bug or have suggestions for improvement.


License

logisim-evolution's People

Contributors

alexandremalki avatar aplq avatar bfh-ktt1 avatar btb avatar cosineblast avatar davidhutchens avatar dbh201 avatar dependabot[bot] avatar dtowell avatar egkoppel avatar esseivan avatar gocpicnic avatar gtxzsxxk avatar kevinawalsh avatar leadrien avatar maehne avatar marcinorlowski avatar matheusdmm avatar mbaillif avatar mkayaalp avatar pduive23 avatar r3dst0ne avatar reds-heig avatar rri-reds avatar sderrien avatar seanpquinn avatar simoc avatar smallg0at avatar superenginegit avatar zdimension 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

logisim-evolution's Issues

Automatic symbol generation with I/O names (like VHDL symbols) for components

A Logisim component created starting from graphical components does not show the I/O labels inside its body. Connection pins are not so visible, and one has to put the arrow exactly above it to have an information box displaying the name. This is not the case for the components created from VHDL code, which show clearly both the component and the I/O labels.

Adding this would greatly improve the lisibility of Logisim schemes.

It would also be interestin to change the position of the I/O inside the symbol. Simulink uses this trick: a property "order numeration" is added to the pins, with 1 being above the symbol, then 2, 3, ...

Update the "User Guide"

Logisim-evolution contains several new tools with respect to the original Logisim. Nonetheless, as usual :(, the documentation did not follow. The User Guide should now be updated to keep track of the news!

"Export log" button to analyze weird problems

Sometimes Logisim has a weird behaviour -- signals that change value by theirself, other signals that become undefined, ...

To debug this, it would be helpful to have a written trace of what Logisim does in those moments. Given the logging system of #6, one should have a button that dumps the whole set of logs in a file, for later analysis.

Show bases on IO

When printing schemes, the bases of I/O are not shown.
It would be nice to have a small symbol indicating

  • b for binary
  • o for octal
  • u for unsigned decimal
  • s for signed decimal
  • h for hex

The image below shows why this could avoid headaches in certain cases...
radix_logisim

Show signal names in circuit's instantiation

For the moment, when the mouse pointer passes over a circuit's pin, the signal name is shown. This is insufficient, as when the schema is printed these names are not visible.

Requested functionality: show in a circuit's symbol then names of the signals given in the schema.

Create an "export project" function

It is often important to distribute a project on which one is working -- and this is particularly true for project assistants, or for students that have to hand back their work.

In these cases, one has to manually ensure that all the needed files are in the archive, and often the paths are wrong.

It would be nice to have this archive created automatically with a button directly from logisim, fixing and the same time the paths encoded in the .circ file.

Improve VHDL code highlighting

The highlighting currently used in the editor is not the correct VHDL one, so some keywords are features are missing. However, it is possible to change it, just by creating the corresponding file.

The "combinatorial analysis" section is not available in the user guide

Even when starting Logisim with the proper flag to have the analyzer, the help of the combinatorial analysis part is not accessible. This problem should be due to the fact that, in build.xml, the HTML pages are ruled ouot because of the line
<fileset dir="." includes="doc/ resources/" excludes="doc/**/html/guide/analyze/" />

F2 key not working correctly in chronogram

The F2 key allows to do a clock step on the main clock. The problem is that it Logisim looks for the clock only in the circuit marked as main when handling the F2 key (file ChronoFrame.java), ignoring the circuit that is analysed with the chronogram at that precise moment if it is not marked as such.

The functioning of the F2 key should be revised, making it work properly and making its behaviour intuitive.

Test Logisim-evolution with Modelsim

It would be nice to test whether Logisim-evolution works with the free version of Modelsim, so that everyone can use advanced functionalities of Logisim-evolution.

logisim-evolution-2.13.5.jar doesn't like my java version

Windows XP (Home Ed.) SP3, Java 1.7.0_71

D:\Program Files\logisim>java -jar logisim-evolution-2.13.5.jar
Exception in thread "main" java.lang.UnsupportedClassVersionError: com/cburch/lo
gisim/Main : Unsupported major.minor version 52.0
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(Unknown Source)
        at java.security.SecureClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.access$100(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)

D:\Program Files\logisim>java -version
java version "1.7.0_71"
Java(TM) SE Runtime Environment (build 1.7.0_71-b14)
Java HotSpot(TM) Client VM (build 24.71-b01, mixed mode, sharing)

Combinational analysis!?

Where did that go? I liked being able to switch between boolean expressions, K-maps, and truth tables; the inability to do that in Logisim Evolution is a real deal-breaker for me, even if it doesn't have much bearing on the circuit itself.

FPGA Commander: carte REPTAR

Pour la carte REPTAR, le connecteru 80 pôles est bien prévu. Par contre il n'y a pas de texte (donc pas visible).

Il faut rajouter un texte pour le connecteur 80 pôles, soit : 80 pins connector

Additional buttons in the menu bar

The menu bar takes all the window size, additional buttons could be added:

  • simulation start
  • simulation end
  • activate VHDL simulation
  • reset VHDL simulation

Tag a release and provide a binary download

This issue stands to propose that

  1. a commit is tagged with the appropriate version number (or, preferably, all release commits are tagged)
  2. and a new release is made with the binary compiled against it attached.

Currently the only hint on a version number outside of the actual sources is the following line in README.md:

java -jar logisim-evolution-2.13.9.jar

and the only source of a binary download is a private IIS7 server which at the moment of this writing is happily 500'ing. I doubt whether all current and potential Logisim users have Java SDK installed as well as they know how to compile from sources to deal with the unavailable binaries on their own.

I personally don't really feel the inclination to pull that untagged HEAD of your master to have a go at compiling myself, without knowing for sure whether it is a stable release or some WIP, and whether it will compile at all.

By resolving this issue in the proposed way you would achive

  1. commit history that is more readable and manageable, as releases are tagged
  2. and binary downloads always available for every future (and, optimally, past as well) release.

Lost RAM functionality

It would be nice to have the "Data Interface" option on the RAM, particularly the "separate load and store ports" option.

I've been recommending Logisim to From Nand to Tetris (The Elements of Computer Systems) students as a logic simulator that can easily build the Hack Computer designed in the course.

This is a Harvard architecture machine that executes one instruction per clock and includes RAM read/modify/write instructions. The RAM design presented in the book is a RAM that does combinatorial reads and synchronous writes in a similar fashion to the old "separate load and store ports" option.

(Clearly this can be done with the new RAM with some external glue that reads into a latch on the first half-cycle and then does the write on the second half-cycle, but that seems like a bit much to expect from first year CS students.)

Create a library of test circuits

A test library made of circuits is needed to test that each release properly works on a standard set of example. It would be nice that those circuits include all the components, and that their output immediately reflects the success/failure state of the system (e.g., a signal that gets to 1 when everything works correctly).

States in chronogram

It would be nice to have a list of states in the chronogram, instead of the values -- for instance for a state machine.

Add support for new Board

cyclone v gx starter kit.
One of the best "low cost" boards in my opinion. I own it and its awesome 💨

Help for Chronogram?

There does not appear to be any help for the Chronogram.

I build a simple circuit consisting of the system clock connected to a T flip-flop. I add 'Clock' and 'T Flip-Flop' in the selection tab and select 'Clock' for "Choose your clock".

The Start Chronogram button brings up a Window with no display and the status message "Add 'sysclk' signal in Simulate->Chronogram for real time use, or load file"

There is no 'sysclk' available to add.

How do you make the Chronogram work?

Simulation halted by internal error

The file contains 15 sub-ciruits, and the simulation is oftentimes interrupted by message "Simulation halted by internal error" along with several arbitrary wires changing color to either red or blue. Sometimes issues is fixed by repeatedly restarting simulation or Ctrl+E.

Ran from the command line: java -jar logisim-evolution-2.13.9.jar.
OS: ubuntu 14.04
3.13.0-49-generic #83-Ubuntu SMP x86_64 x86_64 x86_64 GNU/Linux

Uploading Issue.jpg . . .

Stack trace printed to stdout:

at com.cburch.logisim.circuit.Simulator$PropagationManager.run(Simulator.java:126)

java.lang.NullPointerException
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.Propagator.clearDirtyPoints(Propagator.java:243)
at com.cburch.logisim.circuit.Propagator.propagate(Propagator.java:305)
at com.cburch.logisim.circuit.Simulator$PropagationManager.run(Simulator.java:126)
java.lang.NullPointerException
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.Propagator.clearDirtyPoints(Propagator.java:243)
at com.cburch.logisim.circuit.Propagator.propagate(Propagator.java:305)
at com.cburch.logisim.circuit.Simulator$PropagationManager.run(Simulator.java:126)
java.lang.NullPointerException
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.Propagator.clearDirtyPoints(Propagator.java:243)
at com.cburch.logisim.circuit.Propagator.propagate(Propagator.java:305)
at com.cburch.logisim.circuit.Simulator$PropagationManager.run(Simulator.java:126)
java.lang.NullPointerException
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.Propagator.clearDirtyPoints(Propagator.java:243)
at com.cburch.logisim.circuit.Propagator.propagate(Propagator.java:305)
at com.cburch.logisim.circuit.Simulator$PropagationManager.run(Simulator.java:126)
java.lang.NullPointerException
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.Propagator.clearDirtyPoints(Propagator.java:243)
at com.cburch.logisim.circuit.Propagator.propagate(Propagator.java:305)
at com.cburch.logisim.circuit.Simulator$PropagationManager.run(Simulator.java:126)
java.lang.NullPointerException
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.Propagator.clearDirtyPoints(Propagator.java:243)
at com.cburch.logisim.circuit.Propagator.propagate(Propagator.java:305)
at com.cburch.logisim.circuit.Simulator$PropagationManager.run(Simulator.java:126)
java.lang.NullPointerException
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.Propagator.clearDirtyPoints(Propagator.java:243)
at com.cburch.logisim.circuit.Propagator.propagate(Propagator.java:305)
at com.cburch.logisim.circuit.Simulator$PropagationManager.run(Simulator.java:126)
java.lang.NullPointerException
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.Propagator.clearDirtyPoints(Propagator.java:243)
at com.cburch.logisim.circuit.Propagator.propagate(Propagator.java:305)
at com.cburch.logisim.circuit.Simulator$PropagationManager.run(Simulator.java:126)
java.lang.NullPointerException
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.Propagator.clearDirtyPoints(Propagator.java:243)
at com.cburch.logisim.circuit.Propagator.propagate(Propagator.java:305)
at com.cburch.logisim.circuit.Simulator$PropagationManager.run(Simulator.java:126)
java.lang.NullPointerException
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.Propagator.clearDirtyPoints(Propagator.java:243)
at com.cburch.logisim.circuit.Propagator.propagate(Propagator.java:305)
at com.cburch.logisim.circuit.Simulator$PropagationManager.run(Simulator.java:126)
java.lang.NullPointerException
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.Propagator.clearDirtyPoints(Propagator.java:243)
at com.cburch.logisim.circuit.Propagator.propagate(Propagator.java:305)
at com.cburch.logisim.circuit.Simulator$PropagationManager.run(Simulator.java:126)
java.lang.NullPointerException
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.Propagator.clearDirtyPoints(Propagator.java:243)
at com.cburch.logisim.circuit.Propagator.propagate(Propagator.java:305)
at com.cburch.logisim.circuit.Simulator$PropagationManager.run(Simulator.java:126)
java.lang.NullPointerException
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.Propagator.clearDirtyPoints(Propagator.java:243)
at com.cburch.logisim.circuit.Propagator.propagate(Propagator.java:305)
at com.cburch.logisim.circuit.Simulator$PropagationManager.run(Simulator.java:126)
java.lang.NullPointerException
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.Propagator.clearDirtyPoints(Propagator.java:243)
at com.cburch.logisim.circuit.Propagator.propagate(Propagator.java:305)
at com.cburch.logisim.circuit.Simulator$PropagationManager.run(Simulator.java:126)
java.lang.NullPointerException
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.Propagator.clearDirtyPoints(Propagator.java:243)
at com.cburch.logisim.circuit.Propagator.propagate(Propagator.java:305)
at com.cburch.logisim.circuit.Simulator$PropagationManager.run(Simulator.java:126)
java.lang.NullPointerException
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.Propagator.clearDirtyPoints(Propagator.java:243)
at com.cburch.logisim.circuit.Propagator.propagate(Propagator.java:305)
at com.cburch.logisim.circuit.Simulator$PropagationManager.run(Simulator.java:126)
java.lang.ArrayIndexOutOfBoundsException: 22
at java.util.ArrayList.add(ArrayList.java:459)
at com.cburch.logisim.data.AbstractAttributeSet.addAttributeListener(AbstractAttributeSet.java:45)
at com.cburch.logisim.gui.main.SimulationTreeCircuitNode.(SimulationTreeCircuitNode.java:75)
at com.cburch.logisim.gui.main.SimulationTreeCircuitNode.computeChildren(SimulationTreeCircuitNode.java:153)
at com.cburch.logisim.gui.main.SimulationTreeCircuitNode.circuitChanged(SimulationTreeCircuitNode.java:106)
at com.cburch.logisim.circuit.Circuit.fireEvent(Circuit.java:430)
at com.cburch.logisim.circuit.Circuit.fireEvent(Circuit.java:435)
at com.cburch.logisim.circuit.Circuit$MyComponentListener.componentInvalidated(Circuit.java:113)
at com.cburch.logisim.instance.InstanceComponent.fireInvalidated(InstanceComponent.java:264)
at com.cburch.logisim.instance.InstanceStateImpl.fireInvalidated(InstanceStateImpl.java:58)
at com.cburch.logisim.circuit.SubcircuitFactory.getSubstate(SubcircuitFactory.java:322)
at com.cburch.logisim.circuit.SubcircuitFactory.getSubstate(SubcircuitFactory.java:307)
at com.cburch.logisim.gui.main.SimulationTreeCircuitNode.computeChildren(SimulationTreeCircuitNode.java:141)
at com.cburch.logisim.gui.main.SimulationTreeCircuitNode.circuitChanged(SimulationTreeCircuitNode.java:106)
at com.cburch.logisim.circuit.Circuit.fireEvent(Circuit.java:430)
at com.cburch.logisim.circuit.Circuit.fireEvent(Circuit.java:435)
at com.cburch.logisim.circuit.Circuit$MyComponentListener.componentInvalidated(Circuit.java:113)
at com.cburch.logisim.instance.InstanceComponent.fireInvalidated(InstanceComponent.java:264)
at com.cburch.logisim.instance.InstanceStateImpl.fireInvalidated(InstanceStateImpl.java:58)
at com.cburch.logisim.circuit.SubcircuitFactory.getSubstate(SubcircuitFactory.java:322)
at com.cburch.logisim.circuit.SubcircuitFactory.getSubstate(SubcircuitFactory.java:307)
at com.cburch.logisim.gui.main.SimulationTreeCircuitNode.computeChildren(SimulationTreeCircuitNode.java:141)
at com.cburch.logisim.gui.main.SimulationTreeCircuitNode.circuitChanged(SimulationTreeCircuitNode.java:106)
at com.cburch.logisim.circuit.Circuit.fireEvent(Circuit.java:430)
at com.cburch.logisim.circuit.Circuit.fireEvent(Circuit.java:435)
at com.cburch.logisim.circuit.Circuit$MyComponentListener.componentInvalidated(Circuit.java:113)
at com.cburch.logisim.instance.InstanceComponent.fireInvalidated(InstanceComponent.java:264)
at com.cburch.logisim.instance.InstanceStateImpl.fireInvalidated(InstanceStateImpl.java:58)
at com.cburch.logisim.circuit.SubcircuitFactory.getSubstate(SubcircuitFactory.java:322)
at com.cburch.logisim.circuit.SubcircuitFactory.getSubstate(SubcircuitFactory.java:307)
at com.cburch.logisim.gui.main.SimulationTreeCircuitNode.computeChildren(SimulationTreeCircuitNode.java:141)
at com.cburch.logisim.gui.main.SimulationTreeCircuitNode.circuitChanged(SimulationTreeCircuitNode.java:106)
at com.cburch.logisim.circuit.Circuit.fireEvent(Circuit.java:430)
at com.cburch.logisim.circuit.Circuit.fireEvent(Circuit.java:435)
at com.cburch.logisim.circuit.Circuit$MyComponentListener.componentInvalidated(Circuit.java:113)
at com.cburch.logisim.instance.InstanceComponent.fireInvalidated(InstanceComponent.java:264)
at com.cburch.logisim.instance.InstanceStateImpl.fireInvalidated(InstanceStateImpl.java:58)
at com.cburch.logisim.circuit.SubcircuitFactory.getSubstate(SubcircuitFactory.java:322)
at com.cburch.logisim.circuit.SubcircuitFactory.getSubstate(SubcircuitFactory.java:307)
at com.cburch.logisim.gui.main.SimulationTreeCircuitNode.computeChildren(SimulationTreeCircuitNode.java:141)
at com.cburch.logisim.gui.main.SimulationTreeCircuitNode.circuitChanged(SimulationTreeCircuitNode.java:106)
at com.cburch.logisim.circuit.Circuit.fireEvent(Circuit.java:430)
at com.cburch.logisim.circuit.Circuit.fireEvent(Circuit.java:435)
at com.cburch.logisim.circuit.Circuit$MyComponentListener.componentInvalidated(Circuit.java:113)
at com.cburch.logisim.instance.InstanceComponent.fireInvalidated(InstanceComponent.java:264)
at com.cburch.logisim.instance.InstanceStateImpl.fireInvalidated(InstanceStateImpl.java:58)
at com.cburch.logisim.circuit.SubcircuitFactory.getSubstate(SubcircuitFactory.java:322)
at com.cburch.logisim.circuit.SubcircuitFactory.getSubstate(SubcircuitFactory.java:307)
at com.cburch.logisim.gui.main.SimulationTreeCircuitNode.computeChildren(SimulationTreeCircuitNode.java:141)
at com.cburch.logisim.gui.main.SimulationTreeCircuitNode.circuitChanged(SimulationTreeCircuitNode.java:106)
at com.cburch.logisim.circuit.Circuit.fireEvent(Circuit.java:430)
at com.cburch.logisim.circuit.Circuit.fireEvent(Circuit.java:435)
at com.cburch.logisim.circuit.Circuit$MyComponentListener.componentInvalidated(Circuit.java:113)
at com.cburch.logisim.instance.InstanceComponent.fireInvalidated(InstanceComponent.java:264)
at com.cburch.logisim.instance.InstanceStateImpl.fireInvalidated(InstanceStateImpl.java:58)
at com.cburch.logisim.circuit.SubcircuitFactory.getSubstate(SubcircuitFactory.java:322)
at com.cburch.logisim.circuit.SubcircuitFactory.getSubstate(SubcircuitFactory.java:307)
at com.cburch.logisim.gui.main.SimulationTreeCircuitNode.computeChildren(SimulationTreeCircuitNode.java:141)
at com.cburch.logisim.gui.main.SimulationTreeCircuitNode.circuitChanged(SimulationTreeCircuitNode.java:106)
at com.cburch.logisim.circuit.Circuit.fireEvent(Circuit.java:430)
at com.cburch.logisim.circuit.Circuit.fireEvent(Circuit.java:435)
at com.cburch.logisim.circuit.Circuit$MyComponentListener.componentInvalidated(Circuit.java:113)
at com.cburch.logisim.instance.InstanceComponent.fireInvalidated(InstanceComponent.java:264)
at com.cburch.logisim.instance.InstanceStateImpl.fireInvalidated(InstanceStateImpl.java:58)
at com.cburch.logisim.circuit.SubcircuitFactory.getSubstate(SubcircuitFactory.java:322)
at com.cburch.logisim.circuit.SubcircuitFactory.getSubstate(SubcircuitFactory.java:307)
at com.cburch.logisim.gui.main.SimulationTreeCircuitNode.computeChildren(SimulationTreeCircuitNode.java:141)
at com.cburch.logisim.gui.main.SimulationTreeCircuitNode.circuitChanged(SimulationTreeCircuitNode.java:106)
at com.cburch.logisim.circuit.Circuit.fireEvent(Circuit.java:430)
at com.cburch.logisim.circuit.Circuit.fireEvent(Circuit.java:435)
at com.cburch.logisim.circuit.Circuit$MyComponentListener.componentInvalidated(Circuit.java:113)
at com.cburch.logisim.instance.InstanceComponent.fireInvalidated(InstanceComponent.java:264)
at com.cburch.logisim.instance.InstanceStateImpl.fireInvalidated(InstanceStateImpl.java:58)
at com.cburch.logisim.circuit.SubcircuitFactory.getSubstate(SubcircuitFactory.java:322)
at com.cburch.logisim.circuit.SubcircuitFactory.getSubstate(SubcircuitFactory.java:307)
at com.cburch.logisim.gui.main.SimulationTreeCircuitNode.computeChildren(SimulationTreeCircuitNode.java:141)
at com.cburch.logisim.gui.main.SimulationTreeCircuitNode.(SimulationTreeCircuitNode.java:80)
at com.cburch.logisim.gui.main.SimulationTreeCircuitNode.computeChildren(SimulationTreeCircuitNode.java:153)
at com.cburch.logisim.gui.main.SimulationTreeCircuitNode.circuitChanged(SimulationTreeCircuitNode.java:106)
at com.cburch.logisim.circuit.Circuit.fireEvent(Circuit.java:430)
at com.cburch.logisim.circuit.Circuit.fireEvent(Circuit.java:435)
at com.cburch.logisim.circuit.Circuit$MyComponentListener.componentInvalidated(Circuit.java:113)
at com.cburch.logisim.instance.InstanceComponent.fireInvalidated(InstanceComponent.java:264)
at com.cburch.logisim.instance.InstanceStateImpl.fireInvalidated(InstanceStateImpl.java:58)
at com.cburch.logisim.circuit.SubcircuitFactory.getSubstate(SubcircuitFactory.java:322)
at com.cburch.logisim.circuit.SubcircuitFactory.propagate(SubcircuitFactory.java:385)
at com.cburch.logisim.instance.InstanceComponent.propagate(InstanceComponent.java:357)
at com.cburch.logisim.circuit.CircuitState.processDirtyComponents(CircuitState.java:388)
at com.cburch.logisim.circuit.Propagator.clearDirtyComponents(Propagator.java:239)
at com.cburch.logisim.circuit.Propagator.propagate(Propagator.java:306)
at com.cburch.logisim.circuit.Simulator$PropagationManager.run(Simulator.java:126)
java.lang.NullPointerException
java.lang.NullPointerException
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.Propagator.clearDirtyPoints(Propagator.java:243)
at com.cburch.logisim.circuit.Propagator.propagate(Propagator.java:305)
at com.cburch.logisim.circuit.Simulator$PropagationManager.run(Simulator.java:126)
java.lang.NullPointerException
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.Propagator.clearDirtyPoints(Propagator.java:243)
at com.cburch.logisim.circuit.Propagator.propagate(Propagator.java:305)
at com.cburch.logisim.circuit.Simulator$PropagationManager.run(Simulator.java:126)
java.lang.NullPointerException
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.Propagator.clearDirtyPoints(Propagator.java:243)
at com.cburch.logisim.circuit.Propagator.propagate(Propagator.java:305)
at com.cburch.logisim.circuit.Simulator$PropagationManager.run(Simulator.java:126)
java.lang.NullPointerException
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.Propagator.clearDirtyPoints(Propagator.java:243)
at com.cburch.logisim.circuit.Propagator.propagate(Propagator.java:305)
at com.cburch.logisim.circuit.Simulator$PropagationManager.run(Simulator.java:126)
java.lang.NullPointerException
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.Propagator.clearDirtyPoints(Propagator.java:243)
at com.cburch.logisim.circuit.Propagator.propagate(Propagator.java:305)
at com.cburch.logisim.circuit.Simulator$PropagationManager.run(Simulator.java:126)
java.lang.NullPointerException
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.Propagator.clearDirtyPoints(Propagator.java:243)
at com.cburch.logisim.circuit.Propagator.propagate(Propagator.java:305)
at com.cburch.logisim.circuit.Simulator$PropagationManager.run(Simulator.java:126)
java.lang.NullPointerException
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.Propagator.clearDirtyPoints(Propagator.java:243)
at com.cburch.logisim.circuit.Propagator.propagate(Propagator.java:305)
at com.cburch.logisim.circuit.Simulator$PropagationManager.run(Simulator.java:126)
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException

....

java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
at java.util.ArrayList$Itr.next(ArrayList.java:851)
at com.cburch.logisim.gui.main.SimulationTreeModel.fireStructureChanged(SimulationTreeModel.java:81)
at com.cburch.logisim.gui.main.SimulationTreeCircuitNode.circuitChanged(SimulationTreeCircuitNode.java:107)
at com.cburch.logisim.circuit.Circuit.fireEvent(Circuit.java:430)
at com.cburch.logisim.circuit.Circuit.fireEvent(Circuit.java:435)
at com.cburch.logisim.circuit.Circuit$MyComponentListener.componentInvalidated(Circuit.java:113)
at com.cburch.logisim.instance.InstanceComponent.fireInvalidated(InstanceComponent.java:264)
at com.cburch.logisim.instance.InstanceStateImpl.fireInvalidated(InstanceStateImpl.java:58)
at com.cburch.logisim.circuit.SubcircuitFactory.getSubstate(SubcircuitFactory.java:322)
at com.cburch.logisim.circuit.SubcircuitFactory.propagate(SubcircuitFactory.java:385)
at com.cburch.logisim.instance.InstanceComponent.propagate(InstanceComponent.java:357)
at com.cburch.logisim.circuit.CircuitState.processDirtyComponents(CircuitState.java:388)
at com.cburch.logisim.circuit.Propagator.clearDirtyComponents(Propagator.java:239)
at com.cburch.logisim.circuit.Propagator.propagate(Propagator.java:306)
at com.cburch.logisim.circuit.Simulator$PropagationManager.run(Simulator.java:126)
java.lang.NullPointerException
java.lang.NullPointerException

...

java.lang.NullPointerException
java.lang.NullPointerException

java -jar logisim-evolution-2.13.9.jar
Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException: ends changed outside transaction
at com.cburch.logisim.circuit.CircuitLocker.checkForWritePermission(CircuitLocker.java:121)
at com.cburch.logisim.circuit.Circuit$MyComponentListener.endChanged(Circuit.java:117)
at com.cburch.logisim.instance.InstanceComponent.fireEndsChanged(InstanceComponent.java:252)
at com.cburch.logisim.instance.InstanceComponent.computeEnds(InstanceComponent.java:193)
at com.cburch.logisim.instance.InstanceComponent.setPorts(InstanceComponent.java:380)
at com.cburch.logisim.instance.Instance.setPorts(Instance.java:119)
at com.cburch.logisim.circuit.SubcircuitFactory.computePorts(SubcircuitFactory.java:140)
at com.cburch.logisim.circuit.CircuitAttributes$MyListener.circuitAppearanceChanged(CircuitAttributes.java:66)
at com.cburch.logisim.circuit.appear.CircuitAppearance.fireCircuitAppearanceChanged(CircuitAppearance.java:160)
at com.cburch.logisim.circuit.appear.CircuitAppearance.setObjectsForce(CircuitAppearance.java:354)
at com.cburch.logisim.circuit.appear.CircuitAppearance.recomputeDefaultAppearance(CircuitAppearance.java:274)
at com.cburch.logisim.circuit.appear.CircuitAppearance.recomputePorts(CircuitAppearance.java:280)
at com.cburch.logisim.circuit.appear.PortManager.updatePorts(PortManager.java:217)
at com.cburch.logisim.circuit.appear.CircuitPins$MyComponentListener.attributeValueChanged(CircuitPins.java:61)
at com.cburch.logisim.data.AbstractAttributeSet.fireAttributeValueChanged(AbstractAttributeSet.java:85)
at com.cburch.logisim.std.wiring.ProbeAttributes.setValue(ProbeAttributes.java:122)
at com.cburch.logisim.std.wiring.PinAttributes.setValue(PinAttributes.java:110)
at com.cburch.logisim.circuit.CircuitMutatorImpl.set(CircuitMutatorImpl.java:153)
at com.cburch.logisim.circuit.CircuitChange.execute(CircuitChange.java:192)
at com.cburch.logisim.circuit.CircuitMutation.run(CircuitMutation.java:133)
at com.cburch.logisim.circuit.CircuitTransaction.execute(CircuitTransaction.java:48)
at com.cburch.logisim.tools.SetAttributeAction.doIt(SetAttributeAction.java:85)
at com.cburch.logisim.proj.Project.doAction(Project.java:196)
at com.cburch.logisim.gui.main.AttrTableSelectionModel.setValueRequested(AttrTableSelectionModel.java:128)
at com.cburch.logisim.gui.generic.AttributeSetTableModel$AttrRow.setValue(AttributeSetTableModel.java:90)
at com.cburch.logisim.gui.generic.AttrTable$TableModelAdapter.setValueAt(AttrTable.java:448)
at javax.swing.JTable.setValueAt(JTable.java:2741)
at javax.swing.JTable.editingStopped(JTable.java:4723)
at com.cburch.logisim.gui.generic.AttrTable$CellEditor.fireEditingStopped(AttrTable.java:123)
at com.cburch.logisim.gui.generic.AttrTable$CellEditor.stopCellEditing(AttrTable.java:248)
at com.cburch.logisim.gui.generic.AttrTable$CellEditor.actionPerformed(AttrTable.java:88)
at javax.swing.JComboBox.fireActionEvent(JComboBox.java:1258)
at javax.swing.JComboBox.setSelectedItem(JComboBox.java:586)
at javax.swing.JComboBox.setSelectedIndex(JComboBox.java:622)
at javax.swing.plaf.basic.BasicComboPopup$Handler.mouseReleased(BasicComboPopup.java:834)
at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:290)
at java.awt.Component.processMouseEvent(Component.java:6525)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3322)
at javax.swing.plaf.basic.BasicComboPopup$1.processMouseEvent(BasicComboPopup.java:498)
at java.awt.Component.processEvent(Component.java:6290)
at java.awt.Container.processEvent(Container.java:2234)
at java.awt.Component.dispatchEventImpl(Component.java:4881)
at java.awt.Container.dispatchEventImpl(Container.java:2292)
at java.awt.Component.dispatchEvent(Component.java:4703)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4898)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4533)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462)
at java.awt.Container.dispatchEventImpl(Container.java:2278)
at java.awt.Window.dispatchEventImpl(Window.java:2739)
at java.awt.Component.dispatchEvent(Component.java:4703)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:751)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:702)
at java.awt.EventQueue$3.run(EventQueue.java:696)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.awt.EventQueue$4.run(EventQueue.java:724)
at java.awt.EventQueue$4.run(EventQueue.java:722)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:721)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
java.lang.NullPointerException
at com.cburch.logisim.circuit.CircuitState.processDirtyComponents(CircuitState.java:399)
at com.cburch.logisim.circuit.CircuitState.processDirtyComponents(CircuitState.java:399)
at com.cburch.logisim.circuit.CircuitState.processDirtyComponents(CircuitState.java:399)
at com.cburch.logisim.circuit.CircuitState.processDirtyComponents(CircuitState.java:399)
at com.cburch.logisim.circuit.CircuitState.processDirtyComponents(CircuitState.java:399)
at com.cburch.logisim.circuit.Propagator.clearDirtyComponents(Propagator.java:239)
at com.cburch.logisim.circuit.Propagator.propagate(Propagator.java:306)
at com.cburch.logisim.circuit.Simulator$PropagationManager.run(Simulator.java:126)
java.lang.NullPointerException
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.Propagator.clearDirtyPoints(Propagator.java:243)
at com.cburch.logisim.circuit.Propagator.propagate(Propagator.java:305)
at com.cburch.logisim.circuit.Simulator$PropagationManager.run(Simulator.java:126)
java.lang.NullPointerException
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.Propagator.clearDirtyPoints(Propagator.java:243)
at com.cburch.logisim.circuit.Propagator.propagate(Propagator.java:305)
at com.cburch.logisim.circuit.Simulator$PropagationManager.run(Simulator.java:126)
java.lang.NullPointerException
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.Propagator.clearDirtyPoints(Propagator.java:243)
at com.cburch.logisim.circuit.Propagator.propagate(Propagator.java:305)
at com.cburch.logisim.circuit.Simulator$PropagationManager.run(Simulator.java:126)
java.lang.NullPointerException
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.CircuitState.processDirtyPoints(CircuitState.java:428)
at com.cburch.logisim.circuit.Propagator.clearDirtyPoints(Propagator.java:243)
at com.cburch.logisim.circuit.Propagator.propagate(Propagator.java:305)
at com.cburch.logisim.circuit.Simulator$PropagationManager.run(Simulator.java:126)
java.lang.NullPointerException
java.lang.NullPointerException

Fix XML parsing/generation

The current implementation of XML files parsing/generation is scary -- it takes ages to fix the smallest bug, some functions are called multiple times without any apparent reason, ...

This part should be ideally rewritten from scratch, with a clear plan in mind.

"Sensible names" in Logisim

There are some words that are forbidden in Logisim: if they are used, weird errors appear when downloading on the board.
It would be nice to identify these names (for instance, "top_sim"), understand why this happens, and solve the problem (either by displaying an error when they are used, or by solving the problem preventing their use).

Improve logging system

The code presents multiple logging systems, and often many things happen without the user being notified on the command line.

SLF4J has been partially introduced, but this approach has to be generalized.

Tick frequency has to be equal to FPGA's one

In the FPGA commander, one has to choose the tick frequency. This selection is limited to 4.1kHz. This limitation has to be removed to let the system work at the real frequency.

The VHDL code generator automatically adds a latch and a counter to perform the frequency division. If one chooses a frequency equal to the real one, the working frequency is divided by 2 anyway.

Wiring -- bus crossing identical to bus connection

When two wires are connected, a blob appears to mark the connection (to avoid mistaking it for a crossing). For the buses, a blob also appears, but its size is so close to that of the bus that it is invisible.
See for instance the image -- there are 3 connections and 2 crossings.

ticket

Suppress the confusion between "Pin in" and "Pin out"

People often have problems because they forget to change the in/out type of a pin, or its orientation (or both).
To solve this issue, the multi-usage pin should be replaced by two components

  • Pin_In with the connection on the right and without the property "Output?"
  • Pin_Out with the connection on the left and without the property "Output?"

Also, verify that the pin components in the bar are the new ones, and that this change is retro-compatible!

Clock on TCL components

The TCL-TL consoles in Logisim should have a fake input "clk" to allow Logisim update the outputs when this input changes. Otherwise, when the circuit is combinatorial, the system is blocked and nothing happens.

Bug compilation flip-flop for Xilinx FPGA

Utilisation Logisim sur REPTAR:

Utilisation de Logism version 2.13.9 avec carte REPTAR, avec FPGA Xilinx Spartan6.

Design: Interface_LB_REPTAR_mod_emi.circ
celui-ci comprend un fli-flop D !!

Lancer FPGA_Commander => Download

Message Error
1> _FATAL_ Failed to Synthesize Xilinx project; cannot download

Message de la console:
ERROR:HDLCompiler:1005 - "/home/messerli/logisim_workspace//Interface_LB_REPTAR_mod_emi/FPGA_Top/vhdl/memory/D_FLIPFLOP_behavior.vhd" Line 37: Cannot index the result of a type conversion
copy of the line 37 from D_FLIPFLOP_behavior.vhd
ELSIF (Clock'event AND (Clock = std_logic_vector(to_unsigned(ActiveLevel,1))(0))) THEN

Adding optional elements in the qsf file of a board -- elements defined in the XML file

Some boards need additional informations in their qsf file. This informations are not supported yet.
The following informations are always included in the qsf file:
FAMILY
DEVICE
TOP_LEVEL_ENTITY
ORIGINAL_QUARTUS_VERSION
PROJECT_CREATION_TIME_DATE
LAST_QUARTUS_VERSION
DEVICE_FILTER_PACKAGE
DEVICE_FILTER_PIN_COUNT
RESERVE_ALL_UNUSED_PINS
Informations like Family, Device, ... are present for all the boards.

As an example, for the DE0 board, the information set_global_assignment -name CYCLONEII_RESERVE_NCEO_AFTER_CONFIGURATION "USE AS REGULAR IO". Currently, this line is manually added at each download -- the download and the compilation have to be performed separately.

Changes to perform: modify the XML parser to allow an additional optional parameter that will be copied without change in the qsf and tcl files.

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.