Shift register optimization includes multiple transformations.
- SRL fanout optimization: if an SRL (LUT-based shift register) primitive drives a fanout of 100 or greater, a register stage is taken from the end of the SRL chain and transformed into a register primitive. This enables more flexible downstream replication if the net becomes timing-critical. In general it is easier to replicate high-fanout register drivers compared to high fanout SRL drivers.
- Transformation between SRL and register primitives:
- An SRL primitive can be converted to a logically equivalent chain of register primitives using the SRL_TO_REG property with a value of true. This transform is typically used to increase the number of available pipeline register stages that can be spread to allow signals to traverse long distances within a device. Increasing the number of register stages can increase the clock frequency at the expense of higher latency.
- A chain of register primitives can be converted to a logically equivalent SRL primitive using the REG_TO_SRL property with a value of true. This transform is typically used to reduce the number of pipeline register stages used by signals to traverse long distances within a device. Having too many register stages may create congestion or other placement problems.
- Selective movement of pipeline stages between SRLs and register chains: These
transformations can be used when a pipeline register chain consists of SRLs and
register primitives. A register stage can be pulled out of or pushed into SRLs
on either the SRL inputs or SRL outputs. This allows increased control of
pipeline register structures to address under and over-pipelining.
- Under-pipelining: To pull a register from an SRL through its input, apply the SRL property SRL_STAGES_TO_REG_INPUT with value 1. To pull a register stage from an SRL output, apply SRL_STAGES_TO_REG_OUTPUT with value 1.
- Over-pipelining: To push a register into an SRL input, apply the SRL property SRL_STAGES_TO_REG_INPUT with value -1. To push a register stage into an SRL output, apply SRL_STAGES_TO_REG_OUTPUT with value -1.
Note: All transforms from registers to SRLs are only possible if control
sets are compatible.