Close watchers of Logisim's development have surely noticed that there has been a recent spurt of activity in Logisim's development. You see, I'm on sabbatical for this academic year (through July 2011), and the focus of the sabbatical is to work full-time on Logisim. So you can look forward to several more major updates over the coming year. Already, the code base has grown from 45,000 lines to 56,800 - an increase of 28% - and that doesn't reflect all the changes to existing code, which has been quite substantive. I hope to continue working over Logisim over several more major revisions in the coming year, ending in what will be a full overhaul of Logisim - a version 3.0.
But I could use some help. I'm not particularly looking for help with the software development. But help in any of the following ways would be very appreciated!
Analysis of what should be the future development of Logisim is very welcome! If you were told to identify, say, five areas where you personally would suggest Logisim needs most work, how would you respond? And: Are there any design decisions in Logisim that you'd particularly like to see revisited? Version 3.0 is the ideal opportunity for departing from Logisim's current design in any major ways. (I'll be working some to preserve backwards compatibility - but let your mind wander free, and then we can figure out how to make it happen within the context of backwards compatibility.) You can post your analysis in SourceForge's forum, or you can e-mail it to me at firstname.lastname@example.org (and I'll post it on the forum without your name so others get a chance to respond).
I'd like to build a list of "beta testers" who would provide feedback on the more immediate development of Logisim - not only in identifying bugs, but also in suggesting modifications to how the new features might work. To this end, I've begun posting "fragile versions" of Logisim onto SourceForge - identified by a four-number version (like 18.104.22.168) rather than the three-number version of public releases (2.5.1). These fragile versions are not fully tested, and their features are in a state of flux. Besides providing invaluable help to Logisim, this is also a good opportunity to have a say on on how Logisim works. If you're interested in this, e-mail me and I'll send you an e-mail with each new development release; I'd really like enough people that we can work out some forum in which development releases can be discussed. Again, my e-mail address is email@example.com.
Finally, Logisim would benefit from translators! Ilia Lilov has been doing a great work with keeping a Russian translation up to date. You could simply translate the GUI strings, or you could go all-out like Ilia and do a full translation of all the documentation. Based on SourceForge's download statistics, the top 10 countries using Logisim are the U.S. (24%), Brazil (7%), Mexico (4%), Spain (4%), Germany (3.5%), Colombia (3%), the Phillipines (3%), India (3%), Italy (2.5%), and Croatia (2.5%). There's already a large fraction of users out there who don't use English as their first language! Based on that list, the three greatest needs seem to be Spanish (the current Spanish translation is woefully incomplete by now), Portugese, and German - but I'd be happy to see other languages instead!
Carl, please say here, where users should post bug reports for fragile (or SVN) versions. What did you decide: Trac or common SF.net's bug tracker?
During August I collected a list of my suggestions for future development. I didn't show it at that time since you was busy with 2.5.0 deadline, but now it's time. I just have written all the ideas without any analyze or selection, so you haven't to comment any items of this list; any of them can be rejected without any explanation. It's just a "food for thought" as always.
Colored LED Matrix
Larger LED Matrices
-It is annoying a bit to build larger matrices using some 32x32 ones.
Pixel-to-pixel mode of LED Matrix
-It means one pixel of LED Matrix component corresponds to one pixel on the screen while scale is 100%. It is useful for larger matrices if any.
Off-color for LED
-Color for LED when it turned off can not be configured now.
Multibit input/output pins for plexors
-Such mode could be very useful for plexors in some cases; it could help to avoid excess splitters.
Rectangular areas (panels) with labels for division visualization of circuit parts
-Sometimes blocks of circuits too little to split them to another circuits; but way to show borders of such parts could be handy. I've seen some people use unconnected ("gray") wires for this purpose.
Different RAM/ROM/Keyboard/TTY components referred by labels for command-line execution
-People who use this feature expect this improvement of the feature I think.
Key bindings for Button components
-It's possible to use Keyboard component to read events from keyboard, but bindings to Button component could be more demonstrative and easy.
Bit counter component
-A component which emit count of 1 (or 0) of multibit value (i.e. bit_counter(10010111) == 5).
Module to show diagram of subcircuits hierarchy tree
Components which can be displayed on the subcircuit's component box
-This could be logical continuation for new circuit appearance feature. For example, subcircuit contains a register, whose value should be watched all the time. You can emit value of this register from the circuit to display it on hex display, but possibility to show the value on top of subcircuit's component box would be much more handy.
Switch I/O component
-Button, which toggles it's state after pressing.
Finally, I still think the main disadvantage of Logisim is very low speed of simulation, but it's tooooo hard to increase it appreciably now.
If someone will decide to translate Logisim to any language, I'll give him/her very detailed instruction how to do that with maximum effectiveness and I'll help during all the translation process (if my help will be needed).
Thanks for the offer of helping other translators. In case anybody's contemplating this, Ilia is very good about providing help and has a very good understanding of good translation software to automate some of the process and on using Subversion to edit files within Logisim.
I've decided it's probably best to submit bugs on development versions through SourceForge's Tracker system. To help distinguish bugs in "fragile releases" as opposed to "stable releases," I recommend going to the "Group" drop-down menu and selecting "Fragile release (x.x.x.xx)" when you submit the bug.
The feature list you mention is very helpful - thanks! Several of those are quite easy to add. About the "low speed of simulation": I was actually going to spend this month rewriting the simulation code. The goal is mostly to address some inherent shortcomings in the current technique (like bug #2867869 and the inability to have a two-way pin into subcircuits (feature #2986864)) . But I also have several big ideas for improving the speed that I want to integrate. But just as I was starting that, Georgia Tech told me that their biggest priority is custom subcircuit appearance (which is something that I was planning for the winter or spring), so I've been working on that first.
All that said, I think we have to accept that simulating a circuit is computationally quite intensive - you're taking a process that in real life happens in parallel, but the computer executes programs sequentially. I doubt you're hoping for megahertz simulation speeds, but just to make sure: That's entirely out of the question. I'd be surprised if Logisim can manage even a factor-of-10 speedup - though I have to admit that I'd be very happy to see it simulate with a factor-10 speedup!
(Before anybody gets too upset about talking about computers as "sequential," I'm hoping to try making the simulation multithreaded so it can run on different cores simultaneously - which may or may not help, but I'm interested in trying. Still, dividing "sequential" by 16 or 32 doesn't approach the parallelism of real-life circuits.)
One benchmark I have is an Intel 8080 simulator that I built a few years ago. It was a machine code interpreter built in Java, nowhere close to a circuit in terms of complexity. I put a lot of attention into building highly efficient code - but as I recall, it eked out just 4 KHz (the speed of the 8080) - on what admittedly was a slower computer. (As it happens, I was using Microsoft's first product - a BASIC interpreter that Bill Gates wrote in machine code - to do my testing.) Circuit simulation is far, far more complex, so there's no way you could hope to approach that speed. I have a fairly complicated circuit that I use for testing (based on the one from bug #1938274), and it gets 37.5 Hz when executed from the command line on my computer. (By comparison, a circuit with just a clock, counter, and halt pin achieves 4.4KHz.) *Maybe* we can hope that Logisim could process this complex circuit at 300 Hz. That would be terrific, but I don't personally expect that it will go beyond that.
Ilia, I would appreciate your assistance for translating Logisim to Greek language. At the end, I will try to complete translation by translating also the documents.
Jadir Eduardo Souza Lucas
I would like to aid translate this software to brazilian portuguese. How can I do it?
We use Google Groups mailing list to coordinate translators' work. When Carl will see this your post, I'm sure he will add you to that list. May be you could force this by sending him an e-mail at cburchcburch.com
We have a General Logisim Translation Guide. It is the best first step to read it. It's available here: http://circuit.svn.sourceforge.net/viewvc/circuit/trunk/xlate/guide/general-translation-guide.txt
eep! Copy/paste failure, and no way to edit my previous comment. Moderators, please feel free to delete my previous comment.
Thank you *so* much for logisim! It is almost exactly the tool I have been searching for!
I am a professional software developer, designing a CPU/computer for fun. I know from my own work there are two kinds of programs: those with bugs and missing features, and those that no one uses. So, on to the proof that I use logisim ^_^
The number one thing I would change/improve is the GUI/UI/UX. After playing with a few different related programs for schematic capture and pcb editing (gschem and pcb, parts of gEDA) I feel certain the UX can be improved. In general I have a hard time grabbing and dragging lines.
Almost a bug is the hilarious results that can happen when my hand wiggles up and down slightly as I drag a subset of a circuit left/right. The lines can enter what I call "worm mode" helpfully, and often hilariously, adding line segments. I tried to see how badly I could make it behave once, out of frustration, and think I got a line to zig-zag back and forth making a "5 loop S", where a normal S is a two loop S. I think a lot of my frustrations could be addressed with higher gravity, and or a more clicky-grid. Once I start dragging to the right, for instance, motion up and down should get harder.
On the new features front: Please consider adding PCB/gEDA compatible output. The very best output format would be (a subset of) that produced by gschem. If I could go logisim -> gsch2pcb (a filter program) -> pcb for designing my cpu, and not have to add the step for converting between logisim and gschem schematics I would be very happy. Alternatively if someone made a logisim2pcb filter program I would be happy. The main feature missing is the ability to annotate a symbol with a "footprint" and assign pins to the connections to the symbol. By pins I mean, for example, pin number 3 on a 16 pin DIP. This is unfortunately not a small feature request, one of the missing concepts is the idea of "slots". A 7400 chip has 4 nand gates. Being able to say "this nand gate here uses slot 2 of part IC13" would probably be necessary.
Smaller feature request: I was very surprised to find 'tunnels' don't cross 'page' boundaries. Hierarchies of circuits are nice, but sometimes the design calls for width over depth, for multiple pages describing one circuit. So I would ask for page crossing tunnels and multi-page circuits.
A wave form viewer/logger would be nice, maybe it's in there already, I haven't played with "probes" or logging yet. If the logs logisim produce are in a standard "value changed" format (I don't know anything more than the buzz word) then I could use other gEDA tools to view the wave forms.
I think it would be nice, UX wise, for mouse-wheel to zoom, (mouse) zoom centers the page, right click on the back ground to pan. Bare right click to cancel any 'modeish' thing and (probably) return to select mode. Maybe right click to cancel modeish thing and toggle between "select" and "poke" tools.
Navigating circuits: double click to edit layout is nice, but often I end up *also* in "insert a circuit" mode. Once there double clicking is harder, and doesn't take me out of "insert a circuit" mode. As a result if I am looking over my design trying to find the bug, I often find my mouse turned into a chip instead of a pointing arrow. The only way I've found out of "insert a circuit mode" is to click on the select mode arrow.
I am of two minds about more 'realistic' or 'accurate' delay simulation. It would slow down logisim, and it could raise the entry barrier. Slowing down a little might be OK, but making it harder for a student learning digital design would probably be a mistake. Still there I times when I want to know. I resorted to adding text all over some circuits as I tried to find the fastest adder I could build with 74x00 parts.
(My answer: in general carry-select, in particular 16 bits is best done as a 4 bit stage and a 12 bit stage, 24 bits as an 8 bit stage and a 16 bit stage, 32 bits as an 8 bit, another 8 bit, and a final 16 bit stage. According to my designs / calculations / guestimations / requirements - 74F right now. Though it takes more silicon, the carry-select designs beat the special purpose carry-lookahead parts that I can find.)
Anyway, thanks again! I know programs people use have an infinitely long list of (conflicting) feature requests, I don't have an expectation my requests will be addressed or given any particular priority. The 'missing' features and bugs in logisim are at an annoyance level for me; I will continue to be happy to play with logisim in the future. Keep up the good work!
Oh yeah, one other tiny detail: you should warn users your bundles and forks are little-endian. My computer design is big-endian. It causes lots of grief. Course most parts are labeled little-endian too. Perhaps in the fork/join dialog if you gave each sub-wire two labels like "msb(0) lsb(15):, "msb(1) lsb(14)", … "msb(15) lsb(0)", etc for "most significant bit, and 16th least significant bit" down to "sixteenth most significant bit and least significant bit" A bare 1 can be misinterpreted (over and over by myself much to my annoyance.)
Found a bug-
Register stops working, when a Clear bit attached from a signal splitter(doesn't matter, if it 1 or 0. register wont accept any data)
Whoops. sorry. no bugs. you can delete previous message.
And yeah, great thanks for making such useful program! Keep doing.
Suggestion: Could you add register with synchronous clear?
Do you plan to implement:
- input/output pins? Two-way pins on sub-circuits would be nice. You already have Z and buffers/bus drivers…
- transmission gates? Probably not worth doing until pins can go both ways on sub circuits.
- multi-valued-logic signals? (I am gonna guess the answer is no on this last one, but if you are bored, I vote for at least -1, 0, 1 if not -n … 0 … n. Knuth for one thinks balanced ternary is pretty…)
I'm still having a blast and learning a lot with Logisim! Playing with asynchronous state machines and hazards and such these days. Thank you again!!
P.S. Thanks for deleting my 'ooops' message.
jadirlucas: Thanks for volunteering to work on a translation to Brazilian Portuguese. I have hesitated to respond because somebody else was already working on it, and I wanted to get some clarification on how that is going. As it happens, it has gone quite well, and in fact the translator is nearly finished with it. The development version to be released later today (22.214.171.124) contains the first implementation of a Portuguese translation. I'll keep you in mind if it looks like it needs any further help, though. -Carl
Logisim is a great program and I'll be excited to try the next major version when it is ready.
One feature that I would find useful is increasing the data bits limit of 32. An increase to 64 (maybe just long replacing int in several places) would be a good step that probably wouldn't slow execution. Arbitrary lengths would be great if they can be done without affecting performance or introducing bugs.
Adding some universal, extensible support for input devices would be good - a GUI slider control or joystick Left-Right axis could be mapped to a device outputting a binary representation of the value directly.
To improve performance a mechanism for replacing subcircuits might be good. A 64-bit adder subcircuit could have a drop-in replacement taking the inputs and outputting the sum, described in a Java snippet that would integrate with the simulation. As much as I enjoy building and testing subcircuits and layering on top of them, once you have confidence in the subcircuit it would be nice to be able to speed up execution.
Those are my only new suggestions. Of those suggested by others I especially like the addition of I/O pins, the enhanced display support, and any support to export designs to other formats for ultimately creating PCBs would be really cool. (Also it would be great to be able to program an FPGA or similar PLD from a design done in Logisim - probably would require translating and exporting to another tool.)
How about increasing the Address Width of the RAM and ROM to 32 Bits
I have just completed my first project in Logisim and I have to say thank you for creating and maintaining such a fantastic piece of software. Rather than designing electronic circuits I have been using it to simulate a control logic programme for implementation on a power plant DCS system. I have tried to find a programme that will allow me to simulate this many times and only recently came across Logisim.
I recently posted on this thread suggesting the addition of some timers, shortly after once I got a bit more to grips with the programme I was able to create my own TOD and PO timers and they work just fine.
From my working recently with Logisim I would like to offer some suggestions for possible implementation in future release:
Search and Replace function on Text in Label Names etc.
Renaming of circuits from the project tree (how about a right click menu?)
Move the circuits up and down the project tree by click and drag
More flexible options for zooming and panning around the canvas i.e.
like AutoCad - Zoom All, Zoom Window, Grab & Pan etc.
Some of these may already be implemented and I have just to find them….if so all clues welcome!
Once again, thank you so much for a great programme
I have seen Logisim and i really loved it and i thought of adding a new Feature to it.
I thought of generating a Verilog Output File to the Circuit build in.
One thing I would love to do, and not sure if its already a feature or if it was already suggested but I would love the ability to log the transient states of asynchronous circuits.