Jonathan said:
but there's a big part of me that wants to go with Mike Treseler's "do everything
in one clocked process" plan. [...]
The latter gives you (at best) almost software-like
clarity
Haven't you heard though? Software is going parallel.
I wish. I've been trying to do, and encourage, parallel software
since long before it was even a teeny little bit fashionable.
We hardware folk do parallel all the time, and thank heavens
we have languages that let us describe static instantiation
and parallel execution rather easily. However, if you are
trying to see the overall story about what happens to some
data as it flows through the system, a serialised description
is often more lucid. My concern - the one I was asking
people to share in the original post - was that it's almost
impossible to preserve such a serialised description across
a pipelined design. Several contributors have suggested
ways to help with this, but I still see it as an issue.
Any benchmark examples of what that expense might be? Like it took 2
hours to synthesize with one approach, 1:57 with another? Or maybe
only 15 minutes? Or just shooting from the hip maybe based on things
you've seen?
A bit more than shooting from the hip; rather, the experience that
synth tools often fail to find opportunities to simplify a datapath
when the operations that imply that datapath are deeply entangled
in control code. To take a trivial example: suppose an address
counter is incremented in each of several branches of a case
statement. It's obviously easier for the synth tool to optimise
thatif the programmer sets an increment-enable flag in each
branch, and uses that flag to enable the increment operation,
than if the increment is specified independently in each branch.
This example probably doesn't cause any trouble, but I have
plenty of experience of more complex examples of arithmetic
or logic actions *not* being optimised in situations like this.
I find it hard to believe that it is a 'style' thing that is optomizing
well or not.
See above. Perhaps "style" was the wrong word, but there's
no doubt that some ways of writing the code optimise better
than others. And in no-trivial cases it's sometimes tough to
predict in advance what will cause trouble and what won't.
Thanks for all the other interesting insights.
--
Jonathan Bromley, Consultant
DOULOS - Developing Design Know-how
VHDL * Verilog * SystemC * e * Perl * Tcl/Tk * Project Services
Doulos Ltd., 22 Market Place, Ringwood, BH24 1AW, UK
(e-mail address removed)
http://www.MYCOMPANY.com
The contents of this message may contain personal views which
are not the views of Doulos Ltd., unless specifically stated.