Intel® Quartus® Prime Standard Edition User Guide: Design Recommendations
ID
683323
Date
9/24/2018
Public
2.1. Using Provided HDL Templates
2.2. Instantiating IP Cores in HDL
2.3. Inferring Multipliers and DSP Functions
2.4. Inferring Memory Functions from HDL Code
2.5. Register and Latch Coding Guidelines
2.6. General Coding Guidelines
2.7. Designing with Low-Level Primitives
2.8. Recommended HDL Coding Styles Revision History
2.4.1.1. Use Synchronous Memory Blocks
2.4.1.2. Avoid Unsupported Reset and Control Conditions
2.4.1.3. Check Read-During-Write Behavior
2.4.1.4. Controlling RAM Inference and Implementation
2.4.1.5. Single-Clock Synchronous RAM with Old Data Read-During-Write Behavior
2.4.1.6. Single-Clock Synchronous RAM with New Data Read-During-Write Behavior
2.4.1.7. Simple Dual-Port, Dual-Clock Synchronous RAM
2.4.1.8. True Dual-Port Synchronous RAM
2.4.1.9. Mixed-Width Dual-Port RAM
2.4.1.10. RAM with Byte-Enable Signals
2.4.1.11. Specifying Initial Memory Contents at Power-Up
2.6.6.1. If Performance is Important, Optimize for Speed
2.6.6.2. Use Separate CRC Blocks Instead of Cascaded Stages
2.6.6.3. Use Separate CRC Blocks Instead of Allowing Blocks to Merge
2.6.6.4. Take Advantage of Latency if Available
2.6.6.5. Save Power by Disabling CRC Blocks When Not in Use
2.6.6.6. Initialize the Device with the Synchronous Load (sload) Signal
3.4.1. Apply Complete System-Centric Timing Constraints for the Timing Analyzer
3.4.2. Force the Identification of Synchronization Registers
3.4.3. Set the Synchronizer Data Toggle Rate
3.4.4. Optimize Metastability During Fitting
3.4.5. Increase the Length of Synchronizers to Protect and Optimize
3.4.6. Set Fitter Effort to Standard Fit instead of Auto Fit
3.4.7. Increase the Number of Stages Used in Synchronizers
3.4.8. Select a Faster Speed Grade Device
2.4.3. Inferring Shift Registers in HDL Code
To infer shift registers, synthesis tools detect a group of shift registers of the same length, and convert them to an Intel FPGA shift register IP core.
For detection, all shift registers must have the following characteristics:
- Use the same clock and clock enable
- No other secondary signals
- Equally spaced taps that are at least three registers apart
Synthesis recognizes shift registers only for device families with dedicated RAM blocks. Intel® Quartus® Prime Standard Edition integrated synthesis uses the following guidelines:
- The Intel® Quartus® Prime software determines whether to infer the Intel FPGA shift register IP core based on the width of the registered bus (W), the length between each tap (L), or the number of taps (N).
- If the Auto Shift Register Recognition option is set to Auto, Intel® Quartus® Prime Standard Edition integrated synthesis determines which shift registers are implemented in RAM blocks for logic by using:
- The Optimization Technique setting
- Logic and RAM utilization information about the design
- Timing information from Timing-Driven Synthesis
- If the registered bus width is one (W = 1), Intel® Quartus® Prime synthesis infers shift register IP if the number of taps times the length between each tap is greater than or equal to 64 (N x L > 64).
- If the registered bus width is greater than one (W > 1), and the registered bus width times the number of taps times the length between each tap is greater than or equal to 32 (W × N × L > 32), the Intel® Quartus® Prime synthesis infers Intel FPGA shift register IP core.
- If the length between each tap (L) is not a power of two, Intel® Quartus® Prime synthesis needs external logic (LEs or ALMs) to decode the read and write counters, because of different sizes of shift registers. This extra decode logic eliminates the performance and utilization advantages of implementing shift registers in memory.
The registers that Intel® Quartus® Prime synthesis maps to the Intel FPGA shift register IP core, and places in RAM are not available in a Verilog HDL or VHDL output file for simulation tools, because their node names do not exist after synthesis.
Note: The Compiler cannot implement a shift register that uses a shift enable signal into MLAB memory; instead, the Compiler uses dedicated RAM blocks. To control the type of memory structure that implements the shift register, use the ramstyle attribute.