Zynq-7000 AP SoC and 7 Series Devices Memory Interface Solutions v4.2
Table of Contents
Ch. 1: DDR3 and DDR2 SDRAM Memory Interface Solution
Introduction
Features
Using MIG in the Vivado Design Suite
Customizing and Generating the Core
MIG Output Options
Pin Compatible FPGAs
Creating 7 Series FPGA DDR3 Memory Controller Block Design
Memory Selection
Controller Options
Create Custom Part
AXI Parameter Options
Setting DDR3 Memory Parameter Option
FPGA Options
Bank Selection
Summary
Memory Model License
PCB Information
Design Notes
Vivado Integrated Design Flow for MIG
Directory Structure and File Descriptions
Output Directory Structure
Directory and File Contents
/example_design/
example_design/rtl
example_design/rtl/traffic_gen
/example_design/par
/example_design/sim
/user_design
user_design/rtl/clocking
user_design/rtl/controller
user_design/rtl/ip_top
user_design/rtl/phy
user_design/rtl/ui
/user_design/xdc
Verify Pin Changes and Update Design
Quick Start Example Design
Overview
Implementing the Example Design
Simulating the Example Design (for Designs with the Standard User Interface)
Traffic Generator Operation
Modifying the Example Design
Modifying Port Address Space
Traffic Generator Signal Description
Memory Initialization and Traffic Test Flow
Memory Initialization
Traffic Test Flow
Simulating the Example Design (for Designs with the AXI4 Interface)
Setting Up for Simulation
Simulation Flow Using IES and VCS Script Files
Simulation Flow Using Vivado Simulator
Simulation Flow Using Questa Advanced Simulator
Simulation Flow Using VCS
Simulation Flow Using IES
Synplify Pro Black Box Testing
Core Architecture
Overview
User FPGA Logic
AXI4 Slave Interface Block
User Interface Block and User Interface
Memory Controller and Native Interface
PHY and the Physical Interface
IDELAYCTRL
User Interface
app_addr[ADDR_WIDTH – 1:0]
app_cmd[2:0]
app_en
app_hi_pri
app_wdf_data[APP_DATA_WIDTH – 1:0]
app_wdf_end
app_wdf_mask[APP_MASK_WIDTH – 1:0]
app_wdf_wren
app_rdy
app_rd_data[APP_DATA_WIDTH – 1:0]
app_rd_data_end
app_rd_data_valid
app_wdf_rdy
app_ref_req
app_ref_ack
app_zq_req
app_zq_ack
ui_clk_sync_rst
ui_clk
init_calib_complete
AXI4 Slave Interface Block
AXI4 Slave Interface Parameters
AXI4 Slave Interface Signals
Arbitration in AXI Shim
Time Division Multiplexing (TDM)
Round-Robin
Read Priority (RD_PRI_REG)
Read Priority with Starve Limit (RD_PRI_REG_STARVE_LIMIT)
Write Priority (WRITE_PRIORITY, WRITE_PRIORITY_REG)
AXI4-Lite Slave Control/Status Register Interface Block
ECC Enable/Disable
Single Error and Double Error Reporting
Interrupt Generation
Fault Collection
Fault Injection
AXI4-Lite Slave Control/Status Register Interface Parameters
AXI4-Lite Slave Control/Status Register Interface Signals
AXI4-Lite Slave Control/Status Register Map
AXI4-Lite Slave Control/Status Register Map Detailed Descriptions
ECC_STATUS
ECC_EN_IRQ
ECC_ON_OFF
CE_CNT
CE_FFA[31:0]
CE_FFA[63:32]
CE_FFD[31:0]
CE_FFD[63:32]
CE_FFD[95:64]
CE_FFD[127:96]
CE_FFE
UE_FFA[31:0]
UE_FFA[63:32]
UE_FFD[31:0]
UE_FFD[63:32]
UE_FFD[95:64]
UE_FFD[127:96]
UE_FFE
FI_D0
FI_D1
FI_D2
FI_D3
FI_ECC
User Interface Block
Native Interface
Command Request Signals
accept
use_addr
data_buf_addr
Write Command Signals
wr_data
wr_data_addr
wr_data_mask
wr_data_en
wr_data_offset
Read Command Signals
rd_data
rd_data_addr
rd_data_en
rd_data_offset
Native Interface Maintenance Command Signals
app_ref_req
app_ref_ack
app_zq_req
app_zq_ack
Clocking Architecture
Internal (FPGA) Logic Clock
Write Path (Output) I/O Logic Clock
Read Path (Input) I/O Logic Clock
IDELAY Reference Clock
Memory Controller
Bank Machines
Rank Machines
Column Machine
Arbitration Block
Reordering
Precharge Policy
Error Correcting Code
Read-Modify-Write
ECC Self-Test Functionality
PHY
Overall PHY Architecture
Memory Initialization and Calibration Sequence
I/O Architecture
PHY Control Block
Command Path
Datapath
Power-Saving Features
Calibration and Initialization Stages
Memory Initialization
PHASER_IN Phase Lock
PHASER_IN DQSFOUND Calibration
Write Leveling
Multi-Purpose Register Read Leveling
OCLKDELAYED Calibration
Write Calibration
Read Leveling
PRBS Read Leveling
Dynamic Calibration and Periodic Read Behavior
Temperature Monitor
Memory Controller to PHY Interface
Designing with the Core
Interfacing to the Core
AXI4 Slave Interface
AXI Addressing
Upsizing
User Interface
Command Path
Write Path
Read Path
User Refresh
User ZQ
Native Interface
User Refresh
User ZQ
Physical Layer Interface (Non-Memory Controller Design)
Customizing the Core
Design Guidelines
DDR3 SDRAM
Design Rules
Bank and Pin Selection Guides for DDR3 Designs
Pin Swapping
Bank Sharing Among Controllers
System Clock, PLL and MMCM Locations, and Constraints
DDR3 Component PCB Routing
VREF
VCCAUX_IO
Power System and Plane Discontinuities
Termination
Trace Lengths
Configuration
I/O Standards
DDR2 SDRAM
Design Rules
Pin Assignments
Bank and Pin Selection Guides for DDR2 Designs
Bank Sharing Among Controllers
Pin Swapping
Internal VREF
System Clock, PLL Location, and Constraints
Configuration
Termination
I/O Standards
Trace Lengths
Clocking
Input Clock Guidelines
Sharing sys_clk between Controllers
Information on Sharing BUFG Clock (phy_clk)
Information on Sync_Pulse
DDR3 Pinout Examples
Debugging DDR3/DDR2 Designs
Finding Help on Xilinx.com
Documentation
Solution Centers
Answer Records
Technical Support
Debug Tools
Example Design
Debug Signals
Vivado Design Suite Debug Feature
Reference Boards
Hardware Debug
General Checks
Calibration Stages
Memory Initialization
Determine the Failing Calibration Stage
Debug Signals
Debugging PHASER_IN PHASELOCKED Calibration Failures (dbg_pi_phaselock_err = 1)
Calibration Overview
Debug
Debugging PHASER_IN DQSFOUND Calibration Failures (dbg_pi_dqsfound_err = 1)
Calibration Overview
Debug
Expected Vivado Logic Analyzer Tool Results
Debugging Write Leveling Failures (dbg_wrlvl_err = 1)
Calibration Overview
Debug
Expected Vivado Logic Analyzer Tool Results
Debugging MPR Read Leveling Failures – DDR3 Only (dbg_rdlvl_err[1] = 1)
Calibration Overview
Debug
Expected Vivado Logic Analyzer Tool Results
Debugging OCLKDELAYED Calibration Failures
Calibration Overview
Debug
Debugging Write Calibration Failures (dbg_wrcal_err = 1)
Calibration Overview
Debug
Expected Vivado Logic Analyzer Tool Results
Debugging Read Leveling Failures (dbg_rdlvl_err[0] = 1)
Calibration Overview
Debug
Expected Vivado Logic Analyzer Tool Results
Debugging PRBS Read Leveling Failures
Calibration Overview
Debug
Calibration Times
Debugging Data Errors
General Checks
Replicating the Error Using the Traffic Generator
Isolating the Data Error
Determining If a Data Error is Due to the Write or Read
Checking and Varying Read Timing
Automated Window Check
Manual Window Check
Analyzing Calibration Results
Interface Debug
AXI4-Lite Interfaces
AXI4-Stream Interfaces
CLOCK_DEDICATED_ROUTE Constraints
System Clock
Reference Clock
Ch. 2: QDR II+ Memory Interface Solution
Introduction
Using MIG in the Vivado Design Suite
Customizing and Generating the Core
MIG Output Options
Pin Compatible FPGAs
Creating the 7 Series FPGA QDR II+ SRAM Design
Memory Selection
Controller Options
Create Custom Part
Memory Options
FPGA Options
Extended FPGA Options
I/O Planning Options
Bank Selection
System Pins Selection
Summary
PCB Information
Design Notes
Finish
Vivado Integrated Design Flow for MIG
Directory Structure and File Descriptions
Output Directory Structure
Directory and File Contents
/example_design/
/user_design
user_design/rtl/clocking
user_design/rtl/phy
/user_design/xdc
Verify Pin Changes and Update Design
Core Architecture
Overview
User Interface
Command Request Signals
Interfacing with the Core through the Client Interface
Clocking Architecture
Physical Interface
Interfacing with the Memory Device
PHY Architecture
Write Path
Output Architecture
Output Path
PHY Control Block
Pre-FIFO
Read Path
Data Capture
Calibration
Calibration of Read Clock and Data
Implementation Details
Data Alignment and Valid Generation
Write Calibration
Customizing the Core
Design Guidelines
Design Rules
Bank Sharing Among Controllers
Trace Length Requirements
Pinout Requirements
System Clock, PLL Location, and Constraints
Configuration
Termination
I/O Standards
Clocking
Input Clock Guidelines
Sharing sys_clk between Controllers
Information on Sharing BUFG Clock (phy_clk)
Information on Sync_Pulse
Debugging QDR II+ SRAM Designs
Introduction
Debug Tools
Example Design
Debug Signals
Vivado Design Suite Debug Feature
Simulation Debug
Verifying the Simulation Using the Example Design
Simulation Flow Using IES and VCS Script Files
Simulation Flow Using Vivado Simulator
Simulation Flow Using Questa Advanced Simulator
Simulation Flow Using VCS
Simulation Flow Using IES
Memory Initialization
Calibration
Test Bench
Proper Write and Read Commands
Synthesis and Implementation Debug
Verify Successful Synthesis and Implementation
Verify Modifications to the MIG Tool Output
Identifying and Analyzing Timing Failures
Hardware Debug
Clocking
Verify Board Pinout
Run Signal Integrity Simulation with IBIS Models
Run the Example Design
Debugging Common Hardware Issues
Isolating Bit Errors
Debugging the Core
Margin Check
Automated Margin Check
DEBUG_PORT Signals
Write Init Debug Signals
Read Stage 1 Calibration Debug Signals
Read Stage 2 Calibration Debug
CLOCK_DEDICATED_ROUTE Constraints
System Clock
Reference Clock
Ch. 3: RLDRAM II and RLDRAM 3 Memory Interface Solutions
Introduction
Using MIG in the Vivado Design Suite
Customizing and Generating the Core
MIG Output Options
Pin Compatible FPGAs
Creating the 7 Series FPGAs RLDRAM II/RLDRAM 3 Memory Design
Memory Selection
Controller Options
Memory Options
FPGA Options
Extended FPGA Options
Bank Selection
System Pins Selection
Summary
PCB Information
Design Notes
Finish
Vivado Integrated Design Flow for MIG
Directory Structure and File Descriptions
Output Directory Structure
Directory and File Contents
/example_design/
/user_design/
user_design/rtl/controller
user_design/rtl/ui
user_design/rtl/phy
user_design/rtl/xdc
Verify Pin Changes and Update Design
Quick Start Example Design
Overview
Implementing the Example Design
Simulating the Example Design (for Designs with the Standard User Interface)
Traffic Generator Operation
Modifying the Example Design
Core Architecture
Overview
Client Interface
Command Request Signals
Interfacing with the Core through the Client Interface
Clocking Architecture
Physical Interface
Memory Controller
PHY Architecture
Write Path
Output Architecture
Read Path
Data Capture
Calibration
Calibration of Read Clock and Data
Implementation Details
Data Alignment and Valid Generation
Write Calibration
Customizing the Core
Design Guidelines
Design Rules
Bank Sharing Among Controllers
Trace Length Requirements
Pinout Requirements
RLDRAM II
RLDRAM 3
System Clock, PLL Location, and Constraints
Configuration
Termination
Manual Pinout Changes
I/O Standards
Clocking
Input Clock Guidelines
Sharing sys_clk between Controllers
Information on Sharing BUFG Clock (phy_clk)
Information on Sync_Pulse
Debugging RLDRAM II and RLDRAM 3 Designs
Introduction
Debug Tools
Example Design
Debug Signals
Vivado Design Suite Debug Feature
Simulation Debug
Verifying the Simulation Using the Example Design
Simulation Flow Using IES and VCS Script Files
Simulation Flow Using Vivado Simulator
Simulation Flow Using Questa Advanced Simulator
Simulation Flow Using VCS
Simulation Flow Using IES
Memory Initialization
Calibration
Test Bench
Proper Write and Read Commands
Synthesis and Implementation Debug
Verify Successful Synthesis and Implementation
Verify Modifications to the MIG Tool Output
Identifying and Analyzing Timing Failures
Hardware Debug
Clocking
Verify Board Pinout
Run Signal Integrity Simulation with IBIS Models
Run the Example Design
Debugging Common Hardware Issues
Isolating Bit Errors
Debugging the Core
DEBUG_PORT Signals
Write Init Debug Signals
Read Stage 1 Calibration Debug Signals
Read Stage 2 Calibration Debug
Write Calibration Debug Map
Margin Check
Automated Margin Check
Debugging Write Calibration
CLOCK_DEDICATED_ROUTE Constraints
System Clock
Reference Clock
Ch. 4: LPDDR2 SDRAM Memory Interface Solution
Introduction
Features
Using MIG in the Vivado Design Suite
Customizing and Generating the Core
MIG Output Options
Pin Compatible FPGAs
Creating 7 Series FPGA LPDDR2 SDRAM Memory Controller Block Design
Memory Selection
Controller Options
Create Custom Part
Setting LPDDR2 SDRAM Memory Parameter Option
FPGA Options
Bank Selection
Summary
Memory Model License
PCB Information
Design Notes
Vivado Integrated Design Flow for MIG
Directory Structure and File Descriptions
Output Directory Structure
Directory and File Contents
/example_design/
example_design/rtl
example_design/rtl/traffic_gen
/example_design/par
/example_design/sim
/user_design
user_design/rtl/clocking
user_design/rtl/controller
user_design/rtl/ip_top
user_design/rtl/phy
user_design/rtl/ui
/user_design/xdc
Verify Pin Changes and Update Design
Quick Start Example Design
Overview
Simulating the Example Design (for Designs with the Standard User Interface)
Traffic Generator Operation
Modifying the Example Design
Modifying Port Address Space
Traffic Generator Signal Description
Memory Initialization and Traffic Test Flow
Memory Initialization
Traffic Test Flow
Setting Up for Simulation
Simulation Flow Using IES and VCS Script Files
Simulation Flow Using Vivado Simulator
Simulation Flow Using Questa Advanced Simulator
Simulation Flow Using VCS
Simulation Flow Using IES
Core Architecture
Overview
User FPGA Logic
User Interface Block and User Interface
Memory Controller and Native Interface
PHY and the Physical Interface
IDELAYCTRL
User Interface
app_addr[ADDR_WIDTH – 1:0]
app_cmd[2:0]
app_en
app_hi_pri
app_wdf_data[APP_DATA_WIDTH – 1:0]
app_wdf_end
app_wdf_mask[APP_MASK_WIDTH – 1:0]
app_wdf_wren
app_rdy
app_rd_data[APP_DATA_WIDTH – 1:0]
app_rd_data_end
app_rd_data_valid
app_wdf_rdy
app_ref_req
app_ref_ack
app_zq_req
app_zq_ack
ui_clk_sync_rst
ui_clk
init_calib_complete
User Interface Block
Native Interface
Command Request Signals
accept
use_addr
data_buf_addr
Write Command Signals
wr_data
wr_data_addr
wr_data_mask
wr_data_en
wr_data_offset
Read Command Signals
rd_data
rd_data_addr
rd_data_en
rd_data_offset
Native Interface Maintenance Command Signals
app_ref_req
app_ref_ack
app_zq_req
app_zq_ack
Clocking Architecture
Internal (FPGA) Logic Clock
Write Path (Output) I/O Logic Clock
Read Path (Input) I/O Logic Clock
IDELAY Reference Clock
Memory Controller
Bank Machines
Rank Machines
Column Machine
Arbitration Block
Reordering
Precharge Policy
PHY
Overall PHY Architecture
Memory Initialization and Calibration Sequence
I/O Architecture
PHY Control Block
Command Path
Datapath
Calibration and Initialization Stages
Memory Initialization
Read Leveling
Read Valid Calibration
PRBS Read Leveling
Phase Detector
Memory Controller to PHY Interface
Designing with the Core
Interfacing to the Core
User Interface
Command Path
Write Path
Read Path
User ZQ
Native Interface
User ZQ
Customizing the Core
Design Guidelines
LPDDR2 SDRAM
Design Rules
Pin Assignments
Bank and Pin Selection Guides for LPDDR2 Designs
Bank Sharing Among Controllers
Pin Swapping
Internal VREF
System Clock, MMCM Location, and Constraints
Configuration
Termination
I/O Standards
Trace Lengths
Clocking
Input Clock Guidelines
Sharing sys_clk between Controllers
Information on Sharing BUFG Clock (phy_clk)
Information on Sync_Pulse
LPDDR2 Pinout Examples
CLOCK_DEDICATED_ROUTE Constraints
System Clock
Reference Clock
Ch. 5: Multicontroller Design
Introduction
Using MIG in the Vivado Design Suite
Customizing and Generating the Core
Multiple Controllers
Creating 7 Series FPGA Multicontroller Block Design
Memory Selection
FPGA Options
Extended FPGA Options Page
System Clock Pins Selection
System Clock Sharing
Vivado Integrated Design Flow for MIG
Directory Structure
Ch. 6: Upgrading the ISE/CORE Generator MIG Core in Vivado
Appx. A: General Memory Routing Guidelines
Appx. B: Additional Resources and Legal Notices
Xilinx Resources
Documentation Navigator and Design Hubs
References
Please Read: Important Legal Notices