Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
Show HN: CircuitVerse – Online Digital Circuit Simulator (circuitverse.org)
145 points by arkokoley on June 6, 2018 | hide | past | favorite | 37 comments


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

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.


For pedantic reasons, the circuit posted is still technically invalid, since the output is undefined when both inputs are 1. But yes, the simulator does have trouble with this time dependent response.


When both inputs are 1, both outputs are 0. This is a valid condition and follows from the behaviour of NOR (if any input is 1, the output is 0.)


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?


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

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...


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


You probably have to model the fact that gates need time to change their output. You can use a data-structure like this ([1]) to keep an ordered list of events (ordered by the virtual time), and you just work your way down the list, generating new events, until the network is stable.

[1] https://en.wikipedia.org/wiki/Priority_queue


Yes, the storage loop doesn't work yet. However you can simply use a d-flipflop to do what you need.


However you can simply use a d-flipflop to do what you need.

The point of my exercise was to test a basic functionality. If you cannot simulate that, the feedback loops which arise naturally in more complex circuit designs won't work either. It's like the "fizzbuzz" of logic simulation.


If you have a flip-flop atom then you can do some meaningful stuff; IIRC the gate-level circuit simulator that the Nand To Tetris course uses can't handle this stuff, and you can still build a CPU. I guess it just depends at what level you want to think about the circuit.

Edit: maybe it should be called a "logic circuit" instead of a "digital circuit".


Edit: maybe it should be called a "logic circuit" instead of a "digital circuit".

I will take this advice and discuss with my mentors, Thank you :)


Yeah, I saw 'timing' mentioned, and also tried to create a flip-flop for yucks.


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.



Another good one is http://www.falstad.com/circuit. I remember using this quite a bit to double check homework.


When I was at NI I helped build https://www.multisim.com which is powered by a full SPICE simulator.


Yep! It was inspired by all these simulators :)


I believe that's quite the unfair comparison.

Even if the components model aren't very sophisticated, everycircuit can do full analog simulations.

If you use chrome, you can run everycircuit in-browser, then try this example: http://everycircuit.com/circuit/4709435733180416/infinite-no....

Circuitverse, as far as I can tell is just a logic simulator, which - from reading the comments - doesn't handle feedback loops.


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.


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


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?


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

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

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


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/

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.)


Your analysis is correct with respect to circuitverse. This is just to test the logic correctness of your design after abstracting away the analog and real world nature of electricity.


Depends on the quality of your SPICE models. (https://en.wikipedia.org/wiki/SPICE)

When you model by hand you typically use ideal models. SPICE models can be vastly more complex. A good example is a diode which is harder to model as it's a non-linear device.

Simulated "electricity" (voltage and current) is reduced to a set of differential equations, which the program then uses to plot charts.


Electricity is not the phenomenon being simulated. The circuit and its component is. For example in SPICE, there is no electromagnetic wave, and you need additional software packages for antenna and EMI/EMC analyze.


I found the Qucs technical reference very enlightening - http://qucs.sourceforge.net/tech/ .


Use SPICE or TCAD.


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?


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


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


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


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.


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


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


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


Thank you! but we are from IIIT Bangalore xD




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: