[Fpga-synth] Terminology Question

Mike Ravkine krypt at mountaincable.net
Thu Jun 7 17:42:09 CEST 2007


Scott Gravenhorst wrote:
> A couple of questions:
>   
I will try to answer them..
> 1) Why is this called "pipelining"?  I'm interested in a historical
> perspective if there is one.
>   
I'm not sure, but perhaps it's a reference to the assembly line method 
of producing cars.  Pipelining was originally invented for CPUs.  A CPU 
needs to go through several stages (fetch, decode, execute, write-back 
at the very minimum).  So each instruction takes 4 cycles to execute.  A 
pipelined CPU would fetch, decode, execute and write-back on every 
cycle.. so there are 4 instructions really being executed at any point 
in time, giving an average of 1 cycle/instruction, despite the fact that 
it's still taking 4 cycles to execute them.

In Synths, we face a similar problem.  Computing the output sample often 
requires the computation of many intermediate values.  So instead of 
generating these values step-by-step, we allow the computation of 
multiple output samples concurrently (similarly to how a pipelined cpu 
allows the execution of multiple instructions concurrently).
> 2) I see WebPACK telling me that the "performance of muliplier XYZ can be
> improved by using pipelining".  However, I don't understand what is meant
> by "improved performance" when if the multipliers are strung together, the
> result can actually be available sooner than if the multipliers are all
> cascaded through pipelining.
>   
It's referring to the maximum attainable clock rate.  A pipelined 
multiplier can simply be clocked faster (but will have an output latency 
of one or more cycles).
> 3) Are there obvious "never do" or "always do" rules that I am missing
> regarding this?  I.e., I can design a calculation that takes (eg) 45
> nanoseconds.  Why wouldn't I simply use a 50 nanosecond clock?  Do I only
> need to use pipelining when my design demands a faster clock for other reasons?
>   
The calculation may take 45ns yes, but there are also routing delays and 
wire delays to consider, as well as setup and hold times on the flip 
flops.  This can make the 'real' delay (after P&R) much higher then you 
expect.  The larger your system gets, the worse these transport delays 
become.   Sometimes pipeline flops are inserted with no logic between 
them.  These have nothing to do with splitting up the computation 
itself, but simply to get the inputs of the next computation stage to be 
physically closer to the next bit of computation logic, and so reducing 
those pesky routing and transport delays.

You are essentially right though, if you are happy with the clock rate 
you are getting without pipelining then there is no need to introduce 
it.and the added complexity it brings.
> This was getting me into trouble before I understood timing constraints...
>
> I know this isn't specifically about synths, so if there's a better place
> to post this, please let me know.
>   
I completed a course on pipelining a few months ago, so most of it is 
still fresh in my mind .. if you have any more questions, feel free to 
mail me off list.

--Mike


More information about the Fpga-synth mailing list