
Show HN: CircuitVerse – Online Digital Circuit Simulator - arkokoley
https://circuitverse.org/
======
userbinator
It looks nice and easy to use but I can't seem to get something as basic as a
two-NOR flip-flop to work:

[https://i.imgur.com/V6yXpMl.png](https://i.imgur.com/V6yXpMl.png)

The gates themselves in isolation work fine, but connecting them together
doesn't. I even tried "bootstrapping" the circuit by breaking the storage loop
and setting the two gates' inputs so they're all consistent first before
connecting them together, but then when I disconnect the bootstraps it
immediately returns to the above arrangement.

IMHO having trouble with something like that means the simulation engine is
not quite usable yet...

Edit: the above circuit works fine in Logisim. Also, as another minor tangent,
I think the flip-flop is so much easier to understand when it's drawn to
emphasise the storage loop, i.e. the two NORs essentially become inverters
when one of their inputs is 0, and they act in positive feedback to hold the
bit value; why almost every other diagram insists on crossing the wires is
perplexing, since it only serves to confuse and complicate.

~~~
satu0king
Please look at the examples to see what the simulator engine is capable off.
As for designing the simulator engine to solve these kind of cyclic circuits,
and advice on how to do it?

~~~
userbinator
_As for designing the simulator engine to solve these kind of cyclic circuits,
and advice on how to do it?_

The general idea is to iterate while changes are still propagating through the
circuit; here's some pseudocode:

    
    
        changedNets.add(initial stimulus)
        for each net in changedNets
            changedNets.remove(net)
            for each node in nodes(net)
                for each output in outputs(node)
                    evaluate output
                    if output changed
                        changedNets.add(output)
            if state cycle detected
                break
    

The above algorithm reasonably accurately models what happens in a real
digital circuit: changes propagate through each node until the whole circuit
reaches a steady state. You can even add visualisations to show each step of
the propagation as it takes place, and more elaborate versions can take into
account different propagation delays (i.e. the output of each node can change
at a different time relative to its input, so you process them in a queue
ordered by that.)

To use my example circuit, with both inputs low initially: when one of the
inputs of one NOR is set high, in the next step the output goes low, then the
other NOR's output goes high, and the input of the first NOR goes high. This
doesn't change anything else, so the circuit reaches equilibrium. When you set
that input back down, the NOR already has the other input high, so it doesn't
change state and equilibrium is already reached.

Cycle detection can be as simple as a hardcoded iteration count, or something
a bit more accurate and useful:

[https://en.wikipedia.org/wiki/Cycle_detection](https://en.wikipedia.org/wiki/Cycle_detection)

Interesting fact: A true cycle-detection algorithm will theoretically let you
simulate a whole CPU running any Turing-complete program, if you clock it with
an "inherently unstable" ring oscillator...

~~~
satu0king
Thank you! Not sure if this is within my ability to implement but will give a
definite try

------
k1ns
Man, this brings me back to the days of experimenting with Redstone in
Minecraft. I only ever got as far as a 4-bit ALU, but it really helped set me
up for my circuit and logic classes in college. I wouldn't trade those days
for anything.

------
asdojasdosadsa
Reminds me of [http://everycircuit.com/app/](http://everycircuit.com/app/)

~~~
oplav
Another good one is
[http://www.falstad.com/circuit](http://www.falstad.com/circuit). I remember
using this quite a bit to double check homework.

------
jungletime
Couple suggestions, that would make it fun for youtube videos:

1\. Let the user change the background, and add letters/text.

2\. Ability to add sound effects

3\. Rube golberg style components that could be triggered by the circuit.

4\. Render/Simulate real leds.

5\. Add a gallery ... do you have a gallery of circuits others created?

6\. Also, if you could save and output a video file of the circuit. It would
make it easier to include for things like youtube videos, and possibly do
animated logos and marquees using this simulator.

~~~
satu0king
Thanks for the tips! 1) Feature 4 definitely is a must. 2) Feature 5, not sure
what would work well. 3) Feature 6, No idea what is Rube golberg style! 4)
Feature 7, not sure what you mean but there are LEDs - analog, digital and RGB
LEDs

------
mrspeaker
I love tinkering with circuit simulators - this one seems really cool too,
great work! Just wondering, from a programmer perspective: how do you simulate
electricity? If you model a circuit in CircuitVerse, how similar would the
results be to a real-world version?

~~~
userbinator
This one doesn't "simulate electricity" per se; it's a digital simulator,
which means it evaluates the output of each node based on its inputs, and
propagates the changes as necessary. The core principle is a discrete event
simulator:

[https://en.wikipedia.org/wiki/Discrete_event_simulation](https://en.wikipedia.org/wiki/Discrete_event_simulation)

 _If you model a circuit in CircuitVerse, how similar would the results be to
a real-world version?_

As long as the gate delays and fanin/fanout are considered, the results would
be logically valid. For simulation of more analogue effects (e.g. what happens
if you connect the outputs of two gates together, and one tries to pull it
high and the other low?) something like SPICE is necessary:

[https://en.wikipedia.org/wiki/SPICE](https://en.wikipedia.org/wiki/SPICE)

...and since that involves numerical solutions to nonlinear differential
equations, is at least an order of magnitude slower.

~~~
compumike
It's possible to combine event-driven simulation (for digital) and nonlinear
differential equation based simulation (for analog) within the same simulator.
The simulation engine can be smart enough to mix the two efficiently. As a toy
model, consider this 4-bit counter plus DAC (click "Simulate" at the bottom):

[https://www.circuitlab.com/editor/53xa3r/](https://www.circuitlab.com/editor/53xa3r/)

The simulation loop is _both_ event driven (when CLK1 flips state every 0.5
seconds), propagating those changes through combinatorial gates, _and_ analog,
simulating the op-amp to create a simple digital-to-analog converter (DAC).
Bridging the analog and digital sides within the simulator is tricky, but not
impossible.

You are correct that if there were not both event-driven and analog simulation
intermixed, and we simply simulated all the digital gates with their analog
implementations in MOSFETs, that simulation would be at least an order of
magnitude slower -- probably far worse!

(Disclosure: I built CircuitLab's simulation engine.)

------
bogomipz
This is really slick! Very nice job. I realize that this is primarily a tool
for teachers but I would love to see more public tutorials and examples. I
realize there are many tutorials on the internet but I haven't seen any with
such an interactive design interface like this. Might anyone else have some
suggestion(tutorials plus editor) for such resources?

~~~
satu0king
Thank you, yes the team is working on this. Idea is a full documentation for
people who don't have much knowledge of individual elements + community blog
where community write stuff

~~~
bogomipz
Wow, that's great to hear! I hope you post something here when that becomes
available. Cheers.

~~~
satu0king
Can we post it? I heard you cannot post the same thing again ?

------
exabrial
Man, I would _love_ to have a circuit simulator that can emulate valves
(12AX7, EL84, EL34) correctly and accurately. It's so hard for me to
experiment with guitar amp designs because most of the time you literally have
to build it to figure out how it sounds.

------
Negative1
Completely borked on mobile (Safari); views are squished with main circuit
view being impossible to make out details.

~~~
satu0king
Its really meant to be used on a computer. Mobile compatibility coming soon.

------
samfisher83
This was makes from folks at IIT Bangalore. That is pretty cool.

~~~
satu0king
Thank you! but we are from IIIT Bangalore xD

