FPGARelated.com
Forums

Stratix DSP Block: Choosing which FFs are enabled

Started by Rajeev June 14, 2004
I'm trying to increase the speed of my Stratix design and would
like to change which FFs are turned on within a DSP block.

The Stratix handbook shows the DSP path something like this:

	[ FF ] [ X ] [ FF ] [ + ] [ FF ]

where [X] is the multiplier block, [+] is an accumulate block
and all registers are optional.  I don't use any of the
accumulators, and I use pipeline_delay=2 going through the
multiplier.

What I find is 

(a) Quartus always invokes the first and 2nd FFs, viz

	[ FF ] [ X ] [ FF ] [ --> ] [ --> ]

(b) There's > 1ns interconnect delay getting out from the 2nd
FF.

What I'd really like is to try

	[ FF ] [ X ] [ --> ] [ --> ] [ FF ]

in the hope that this will give me faster overall operation.

But I can't find any way to do this.  I've looked at the multiplier
tdf and it doesn't appear that the choice of which FFs to implement
is brought out to HDL.

What I'd like to learn is :

(i) is the path I've diagrammed above possible in the Stratix
hardware ?

(ii) how can I make the software implement this ?

Thanks for any help,
-rajeev-
Yes, this path is possible to implement in the hardware.  Using the
altmult_add Megafunction you can control explicitly which registers
are used in the DSP Block, while the lpm_mult Megafunction only gives
you an option to specify the number of pipeline stages.

Using the altmult_add MegaWizard, create an altmult_add instantiation
with 1 multiplier, which ensures only the multiplier portion will be
used (the adder portion will not be used).  Within this MegaWizard,
you can explicitly specify which registers to use.  To achieve what
you want, you should use the input registers and extra ouput register,
but disable the multiplier output register.

Hope this helps.

Subroto Datta
Altera Corp.
sdatta@altera.com (Subroto Datta) wrote in message news:<ca4d800d.0406151420.270b95f5@posting.google.com>...
> Yes, this path is possible to implement in the hardware. Using the > altmult_add Megafunction you can control explicitly which registers > are used in the DSP Block, while the lpm_mult Megafunction only gives > you an option to specify the number of pipeline stages. > > Using the altmult_add MegaWizard, create an altmult_add instantiation > with 1 multiplier, which ensures only the multiplier portion will be > used (the adder portion will not be used). Within this MegaWizard, > you can explicitly specify which registers to use. To achieve what > you want, you should use the input registers and extra ouput register, > but disable the multiplier output register. > > Hope this helps. > > Subroto Datta > Altera Corp.
Subroto, Thanks a lot. I'll try this out. It looks like exactly what I wanted. In the meantime I've discovered that with some optimizations turned on, Quartus is aggressively moving the multiplier registers around -- I didn't know it was possible to separate the registers from the multiplier ! Not only that but it's cramming lots of auxiliary registers into the DSP block, even when all 4 (18-bit) multipliers are used. Wow! Regards, -rajeev-