AR# 11854: 6.1i CORE Generator - Multiplier Core: Style differences between Rectangular Shape and Triangular Shape (formerly called "Optimal Packing" in version 3.1i)
6.1i CORE Generator - Multiplier Core: Style differences between Rectangular Shape and Triangular Shape (formerly called "Optimal Packing" in version 3.1i)
General Description: When you create a multiplier from CORE Generator and select "Create RPM," you can choose from two styles, "Rectangular Shape" and "Triangular Shape." "Triangular Shape" was called "Optimal Packing" in version 3.1i.
What are the advantages and disadvantages of these two styles?
The multiplier is built from a tree of partial product adders. These adders become larger at each node in the tree.
If you select "Triangular Shape," the partial product adders are simply placed one beside the other in a row, with the adder size generally growing as you move to the right of the core. This usually results in an approximately triangular shape. There are very few holes within the triangle, but if you try to place another core above this multiplier, you will end up with a large empty triangle between the two cores. Because the slice density within the triangular area of the core itself is as high as possible, this is referred to as "dense and optimal packing." This basically results in tight packing and chances of difficulty during routing.
If you select "rectangular," the core tries to implement a shape that is roughly rectangular. (This feature was developed in response to a number of requests to make it easier to place multipliers with other logic in larger designs). The rectangular shape is achieved by placing small partial product adders on top of one another and trying to match the stack of adders to the height of the final (and largest) partial product adder. The resulting shape will be roughly rectangular.
There will usually be some holes within the rectangle where adders of different sizes are placed together. Basically, it makes placement of this core in respect to other modules, which are rectangular as well. This does not necessarily give greater performance, but it makes routing easier than in the "Triangular Shape."
Sometimes adders cannot be stacked on top of each other without protruding beyond the height of the final adder. In these cases, using either the "rectangular" or the "triangular" option will result in the same layout.
Regarding speed, it is not clear that one option is always preferable to the other. You should implement it both ways and compare the timing results.
Example of a 12x8 Multiplier:
A 12x8 multiplier generates a 20-bit result, so the final adder stage must generate a much larger result than the other adder stages. If we capture the result, the final capture registers will also be 20-bits wide, which is 10 slices. (You will see this in the core viewer if you choose a 12 x 8 multiplier.) You can conclude that the natural layout of the multiplier is an approximate triangle shape, as you have seen in the core viewer.
But we know that a Xilinx FPGA is square by nature, and to achieve the best packing, we would like square functions. If we fold the capture register over into the empty part of the triangle, we can achieve the rectangular shape.
Multiplier - Triangular Shape vs Rectangular Shape