gahelton
Newbie level 4
I am having problems meeting timing requirements for my FPGA design (VHDL). According to the timing reports, the bulk of the timing errors are related to math functions in my ALU. The math functions are 32 by 32 bit with 64 bit temporary values for the multiplier and divider (there is no HW multiplier blocks for my particular part). These 64 bit adders and subtractors are the primary cause of timing failure, so I replaced them with fast look ahead carry versions. I think that this is going to help tremendously. However, the division and multiplication components also use the "built in" abs() function for VHDL. Of course, the abs() function would have to negate an input value if it were negative. Negation means twos-complement, which also means an internal addition has to take place.
But what kind of adder gets synthesised in the abs() function ? Ripple carry adder, fast look ahead carry adder, or something else ? It matters a lot when it comes to speed.
I know that I can roll my own, by checking the sign bit, and if needed, performing the negation with a 1's complement and my fast adder.
Am I being overly paranoid ? Will the synthesis tool do a good job on the abs() function to make rolling my own unnecessary ?
Thanks in advance.
But what kind of adder gets synthesised in the abs() function ? Ripple carry adder, fast look ahead carry adder, or something else ? It matters a lot when it comes to speed.
I know that I can roll my own, by checking the sign bit, and if needed, performing the negation with a 1's complement and my fast adder.
Am I being overly paranoid ? Will the synthesis tool do a good job on the abs() function to make rolling my own unnecessary ?
Thanks in advance.
Last edited: