For some time now, I have been tinkering with the idea of developing a hardware IDE of sorts to help with chip design projects. Like with many sort of programming tasks, there are tedious and error-prone aspects of coding Verilog, and I thought it would be nice to have a tool that would take care of many of these things for me. There are some tools already to do this (e.g. Renoir), but they're expensive and not Free Software.
One of the most bothersome problems with Verilog is with gluing modules together. Say you've designed three modules that need to be attached together as a pipeline. The typical approach would be to write another module in which to instantiate them, with wires indicating how they connect to each other and the enclosing module. My most common mistakes are in forgetting to declare a wire that I used to connect ports (thereby implying a single-bit bus even if the ports are wider) and declaring the wrong bus size. Some of these can be hard to locate and debug. Another problem is with refactoring, such as if you want to insert another pipeline stage. Plus, there's all of the typing and the boredom and potential for typos and other errors. So I have been tinkering with a proof-of-concept prototype as a way to demonstrate some of the ideas I have in mind. The first major thing I want to do is "draw" logic hierarchies. I have this approach in mind: At any given moment, you're looking at a particular module in the hierarchy and its immediate children. You can add ports to the module and its children and connect wires/busses visually. You can then expand a child module, making it the current level, giving you access to its children, etc. Add code to the modules for functionality, and export it as Verilog, ready for simulation and synthesis. Make drastic changes and reexport, something that would otherwise have taken hours. Additionally, there would be libraries of standard modules that provide template functionality. So, I've been hacking at this on and off for a little while, and I thought I'd share what I have so far. It's more of a skeleton of the basic visual stuff, with no way to add/remove anything. I hesitate to release it TOO early, because I want to make sure I get in enough of what I consider to be the critical features before letting others start hacking at it. Here's the location: http://www.cse.ohio-state.edu/~millerti/HIDE.zip NOTE: It's a NetBeans project. You can look at all the code without NetBeans, but NetBeans is a nice IDE that I find to be quite helpful. I'm quite new to Java, and it takes some of the pain out of the process. I'm not using any of the NetBeans GUI builder stuff, though, because all of my widgets are custom. And before anyone complains about Java, that's the only language I could find that had both a relatively mature GUI toolkit and one that would look relatively native on any platform, including MacOS X. I've tried other languages and toolkits, but Qt, for instances, always resulted in errors that I can't decipher. Also, I hate C++. I'm an expert in the language, but I have come to despise it due to all of the unnecessary cruft compared to other languages (compare to Ruby, for instance). Java isn't vastly better than C++, but it's better enough. I really like Ruby, but it's terrible for GUIs (mostly due to lack of documentation). I have considered looking at JRuby. Anyhow, this rambling here is primarily so that the issue of language/toolkit simply won't come up again. Maybe YOU like something better, but I don't have time or energy to learn it. -- Timothy Normand Miller http://www.cse.ohio-state.edu/~millerti Open Graphics Project _______________________________________________ Open-graphics mailing list [email protected] http://lists.duskglow.com/mailman/listinfo/open-graphics List service provided by Duskglow Consulting, LLC (www.duskglow.com)
