Why Toves?

Why Toves? I’ve developed Logisim for over twelve years, but over time I’ve found some inherent limitations that are deeply embedded in the system but prevent it from maturing to “the next level.” Rather than try to find some route to overcoming these several limitations within the current framework, I wanted to build on a replacement system from scratch. Hence this project.

Logisim represents a lot of accumulated work, so naturally replacing it will take a lot of work. Though I’ve put significant work into what Toves is today, it’s not very far. Right now, all Toves can do is allow you to build and simulate a simple circuit out of 2-input AND, OR, and NOT gates. No subcircuits, no multibit wires, not even copy-and-paste or opening a file. For now, what makes Toves interesting is primarily what’s under the hood, which I’ll discuss in later posts.

But while it’s hardly useful, I’ve now uploaded the first working version – version 0.0.1. While it’s not particularly useful, it’s there for you to look at and critique.

In this blog, I hope to chronicle the progress of Toves development. Some posts will present user-facing design decisions, seeking feedback on ways to improve. Others will describe internal architectural decisions, reflecting lessons learned the hard way from Logisim. My hope is that others will contribute comments, leading to ideas that ultimately will lead Toves to be even better than it would be if I worked in isolation.

To give you a taste of what to hope for from this project, here are a few of the features that I eventually hope to include in Toves, but which aren’t in Logisim:

  • Diagonal wires [This is in Toves today: Horizontal/vertical is the default, but alt-drag creates a diagonal wire.]
  • Canvas extends infinitely in all directions (rather than having a fixed upper left corner) [This is in Toves today.]
  • Z-ordering of components preserved
  • Drawing arbitrary shapes like rectangles or lines in a layout
  • Modules of varying types – usually a layout (the only Logisim option), but a module might also be a memory, a truth table, or a state machine – and hopefully one day source code (perhaps written in Verilog)
  • No delay in sending signals into a subcircuit (Logisim introduced a one-step delay when sending a signal into or out of a subcircuit)
  • Bidirectional connections into subcircuits
  • Eight-valued logic, allowing weakly-driven 1’s and 0’s – particularly useful for open-collector circuits
  • An oscilloscope for viewing how signals change over time
  • Components that must be “closed” once the simulation becomes inactive – particularly file and network I/O
  • Components that “time out” after a period, like a monoflop.
  • Tablet support under iOS and Android.

I invite you to follow along in the coming months – maybe years – and to participate in the discussion!

What features would you particularly like to see (or not see)?

One thought on “Why Toves?

  1. saltedchips

    Hello, first, I just want to give a big massive “THANK YOU!” for Logisim. I’m a computer science student and I used it extensively during my first year to design a FSM for a serial protocol between two CPLDs (one basically was on a handset sending commands and displaying information to/from the other one). I used Logisim to test how the Receive FSM should sample at the middle point of the bit and also how it should shift the incomming bits and then move them into an ‘output register’. Same for the Transmit FSM. It was easy to test because I could manually simmulate the changing RX with a simple button (allowing for realtime simulation). It was way easier then to write the VHDL description (to actually program the CPLDs) after the design was tested with Logisim!

    Second, massive “GOOD LUCK!” with Toves. As I said, Logisim was brilliant, simple, elegant and very powerful.

    Now, I would have a question since it’s still in the early days of Toves: do you know of someway of compiling the created circuits to use in other programs? I don’t know if something like this actually exists, but I remember thinking how awesome would be to create a digital circuit (in say Logisim), “compile it” in some way or another and then import it in something like QEMU. This would be I think a massive boost I think for hardware hobbyist, who could design a digital circuit and then quickly test out controlling it from an OS. Of course, this would require something along the lines of a configurable system map for the simulator (QEMU) to map memory to ‘registers’ on the device – which I’m not sure exists.
    For example, say you wanted to make a 2×30 bit BCD adder out of 74xx logic gates. You could easily design it in something like Logisim and could test it for a few cases. But what if you wanted to try out all possible combinations? The only way I could think of would be to actually make it, connect it in someway to say a Raspberry PI or Arduino and then test it. This would further be slowed down by the need for shift registers to do serialparallel conversion as there aren’t enough GPIOs (not on the Raspberry at least)
    This however could (in theory) be done in software using something like QEMU and mapping the input and outputs of the BCD to memory locations.

    Regards,
    Eduard Nicodei

Comments are closed.