Search code examples
verilogfpgahdlregister-transfer-levelasic

Any benefits from implementing CSA versus just using multiplication symbol when synthesizing?


I am synthesizing some multiplication units in verilog and I was wondering if you generally get better results in terms of area/power savings if you implement your own CSA using booth encoding when multplying or if you just use the * symbol and let the synthesis tool take care of the problem for you?

Thank you!


Solution

  • Generally, I tend to trust the compiler tools I use and don't fret so much about the results as long as they meet my timing and area budgets.

    That said, with multipliers that need to run at fast speeds I find I get better results (in DC, at least) if I create a Verilog module containing the multiply (*) and a retiming register or two, and push down into this module to synthesise it before popping up to toplevel synthesis. It seems as if the compiler gets 'distracted' by other timing paths if you try to do everything at once, so making it focus on a multiplier that you know is going to be tricky seems to help.