How to get better PPA for Synthesis?

We discussed how RTL coding can help with PPA. In this post, we share a few guidelines detailing how to get better PPA during synthesis.

Category Guideline Description
Synthesis Friendly RTL Coding StyleDo not handcrafting arithmetic operations such as multiplications by shifting and adding. This prevents synthesis tools from identifying them as arithmetic operations, and the tools will not be able to use better architectures to implement the arithmetic operations. Allow synthesis tools to infer adders, subtractors, and multipliers.
Synthesis Friendly RTL Coding StyleDo not do manual shift-and-add for constant multiplications. Let the synthesis tools infer a multiplier even for constant multiplications.
Synthesis Friendly RTL Coding StyleUse signed operators for any design that needs signed arithmetic.
Avoid mixing unsigned and signed data types in the same expression.
Avoid manual sign extension. Declare appropriate signal types for the synthesis tools to handle sign extensions automatically.
Synthesis Friendly RTL Coding StyleDo not manually negate operands since it prevents Sum-of-Product (SoP) extraction and it has a negative impact on QoS. Simply put a “-” sign before a negative value, to get its absolute value.
Synthesis Friendly RTL Coding StyleCombining adders / multipliers / absolute operations. Add / Multiply / Absolute operations separated by other operands, such as clipping / shifting, could lead to multiple instantiations of adders / multipliers in synthesis.
Move other operands like clipping / shifting around, to allow synthesis tools to combine adders / multipliers to reduce timing pressure and save power.
Synthesis Friendly RTL Coding StyleKeeping relevant operations in the same design hierarchy, allows synthesis tools to perform more logic optimizations.
For example, within the same design hierarchy, synthesis tools look at the design at the operator level and identify clusters of arithmetic operations that can be potentially merged. Instead of implementing multiple discrete arithmetic operations, synthesis tools can merge them as one large complex operation. Arithmetic operations merging can happen for:
1. Vector Sum: x + y + z
2. Multiply and Add: x * y + z
3. Sum of Product: w * x + y * z, etc.
Synthesis Tool SettingsEnable Auto-ungroup. Auto-ungroup removes logic duplication, which often occurs for shared signals across replicated modules
Synthesis Tool SettingsEnable boundary optimizations
Synthesis Tool SettingsEnable register replication to help timing
Synthesis Tool SettingsEnable retiming. Synthesis tools can move combinational logic across pipeline stages for better timing, without human intervention
Synthesis Tool SettingsUse Booth Encoding multipliers. Booth encode the less active operand to reduce the signal toggling in multiplication

Subscribe

Enter your email to get updates from us. You might need to check the spam folder for the confirmation email.

Leave a comment