On 2/19/08, Viktor Pracht <[EMAIL PROTECTED]> wrote:

> I'm a Supreme Commander fan. My idea of the perfect schematic editor involves 
> a zoom-based UI like the one in Supreme Commander
> http://www.youtube.com/watch?v=MchZAhDFr-I

That has some interesting ideas that we might borrow from.

> What does _your_ perfect IDE look like? (For all values of "you" on this 
> list.)

Ok.  This is incomplete and not fully thought-through (I had planned
on figuring out what worked and didn't as I went along).


At any point in time, you are looking at a module and its immediate
submodules.  Optionally, you can view even more levels, but that is
something that you wouldn't want to have enabled all of the time.  The
current level module is represented as a rectangle that can be zoomed
or fixed to the size of the window, decorated on the outside with its
I/O ports.  Those ports can be dragged around, added (drag in from a
palette?), removed (dragged off into space?), renamed (dclick?), and
have other attributes (bus width, etc.) edited (right-click?), have
their name changed, etc.

Inside of the current module, you can drag in from a palette various
template modules.  Generic containers that just let you write your own
Verilog code or more complex things like pipeline stages.  These can
be dragged around arbitrarily inside of the current module.  They can
have ports added, removed, dragged around, renamed, edited, named,
same as the top level.  Some way must be provided to connect (wire)
ports of submodules (shift + click, drag?) to each other and to the
ports of the surrounding module.  Select a wire and press delete to
move it.  Lasso a bunch of them to move, connect, disconnect in
relative unison.  Use some kind of snapping thing to automatically
connect to nearby ports.

Double-click (maybe) the empty space in a submodule to expand it.  It
now becomes the current module, and you see its submodules.  Some "up"
toolbar button would go up a level.

Here's a use case:  I've put together a pipeline by wiring up various
types of pipeline segments, and I have coded up the arithmetic done by
each.  The encoding of the logic design on disk is in Verilog code
with comments, so there's no import/export to speak of.  I've run it
through the synthesizer and discovered that this one stage (A) has too
much combinatorial delay, so I want to split it (into A' and B) (and
manually recode the math, of course).  I select the connecting wires
between the module in question (A) and some other module it's
connected to (C).  Through either a direct split function or via
disconnect+duplicate+drag, I wind up separating A and C and having
dangling wires sticking out.  Then I drag from the palette another
pipeline stage.  I select groups of wires, and connect them up so that
A connects to B, which connects to C.  Now I edit the logic in A and B
(depending on the semantics, that may require expanding into them).

There may be a better way of going about this.  But it's a hell of a
lot easier than doing it by hand.  That would involve copying and
renaming loads of wires, visually ensuring that their widths are
correct, typing in another module instance, etc.  Very error prone.  I
would know, because I do it a lot and screw it up every time.

I expect I will want to get my hands dirty in the development.  I have
had success with Java (swing) and wxWidgets.  But I'm sick of C++ (I
know more about it than most people I know who still use it, but after
spending so much time using Ruby, I loathe going back).  I could never
get Qt to work.  I don't feel like learning GTK.  wxWidgets seem
logical to me; Java widgets seem logical enough.  Also, I like
NetBeans... seems less busy than Eclipse.  Also, although I don't
usually use an IDE, since I don't know the Java classes inheritance
tree for their built-in objects, it's nice to have it right there in
front of me.  I don't want to learn another framework.  I want to hack
hardware, so selfishly, I suggest this so as to minimize my cognitive
load.

We need to cater to hardware hackers.  That means we need to have a
Windows installer.  Some even use Macs.  An easy way to make it
cross-platform is to develop in Java.  This has the added benefit of
making it look reasonably native on all platforms.  (No need to use
X11 on the Mac either.)

Oh, and although I don't know how to do this, I'm going to make it a
point of priority.  The UI doesn't need to be particularly pretty or
clever.  It needs to be (relatively) obvious, totally orthogonal, and
efficient to use for beginner, intermediate, and expert (which means
that some UI operations need to have more than one way to get at
them).

I think "save" should go the way of the dodo.  One of those UI design
tutorials linked to through OSnews (check them out!) described this
financial app.  When you want to add a transaction, you click some +
button and fill out a form.  When you're done, you just do something
else.  If you want to edit it, you select the entry and start editing.
 iCal on the Mac is like this.  We should think this way!  No more
lost work due to crash.  No more forgetting to save.  But say you want
to revert to an earlier version?  Simple:  Excellent Undo capability
and revision control.  We need to decide if that's an innovation we
really want to make for this, because we'll have someone wanting to
hit Save and immediately switch over to ISE and his Synthesize.  If
we're saving on some timer, they could get ahead of us by half a
second and have inconsistent files.


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

Reply via email to