Hi
I have to realize a pipeline to execute this expression: (A+B)^2 - C[D - (E/2)]
A, B, C, D and E are all signed 16 bit.
However I can divide that operation into three (or four) stages:
1°: x=A+B and y=D-(E/2) (the division delay can be negligible because it's a simple right shift)
2°: t=x^2 and w=y*C
3°: t-w
And I have to synthesize it on my Digilent Nexys 2 1200k (Spartan-3E FPGA).
For the addition/subtraction operations I use a Carry Look Ahead AddSub (or a simple Ripple Carry Adder) that I designed and it can run at over 120MHz.
The problem occurs when I have to do the multiplication operation (second stage). I realised a MAC Multiplier, but for 16 bit it's VERY SLOW (under 20MHz), or a Robertson/Booth Multiplier, but it's a FSM. I can't use the multiplier inside my FPGA (I know that it's VERY fast, but it would be too easy and I simply CAN'T use it :<).
So, I would do some questions:
- am I right saying that a FSM at the second stage would be meaningless? (Booth algorithm uses more than 10 stages to produce the result)
- are there other MORE efficient solutions for the multiplication (and for my FPGA)?
Thanks and Happy new year!