Hi Kaz,
--- Quote Start ---
I myself was a fan of coding by inference since it is compact and readable. This is certainly true for registers and most additions, shifts ...etc. but with multipliers I encountered some issues:
1) compilers tend to infer a mult per occurence in a construct and it does not realise when one mult can do the job. This can be easily avoided by coding style.
2) I can't decide pipeline inside inferred mults.
3) in stratix III/IV there is what is termed dsp element which is made up of 4 mults plus adders in a single block. This block has enough input ports for 4 mults but only 72 outputs meaning that you can only use 2 mults on their own wasting two or all 4 mults if you use adders inside. The compiler does not infer these blocks from code (unless there is special way). Thus HDL coding needs to account for these mini-asic blocks inside fpgas.
With regard to DSPbuilder, I have started using it reluctantly. It offers wonderful development and iteration speed when it works but a painful dilemma if it does not, no one can repair the generated code. Interestingly, while it can be used by beginners , it can be used far more powerfully if designer has prior dsp knowledge. The resource usage and speed are impressive. But... its main drawback as any tool is on the skills of the workforce...
--- Quote End ---
Interesting, thanks for the valuable insight.
What I have been doing with code that needs to use DSP blocks is to write both Altera-IP provided component code, and what I hope to be equivalent generic inferable (sp?) VHDL. I then use a generic and a generate block to select between them. I then look at the RTL viewer to see if I ended up with the same logic. If I want to target this same DSP logic to Xilinx or Lattice devices, I'll add new generic values, and new generate blocks, and use their components and inferable VHDL.
Regarding inferred logic vs generic VHDL, out of habit I use lpm_counter's directly, so I can access their carry-out signals as the 'done' indicator to FSMs. I always found that a generic VHDL counter and zero-detection logic would also use more logic cells. I think when I tried this recently, I got about the same number of logic cells, so the synthesis tool has got better. One could also argue that with today's 1M logic cell devices, that those sorts of inefficiencies could be tolerated ... but I still find it annoying :)
Cheers,
Dave