Worked Example: Versal SoC + Dual x16 DDR4
A concrete pairing of a real AMD Versal adaptive SoC and two real 16-bit-wide DDR4 devices wired in parallel for a 32-bit interface — with every design decision traced to a specific parameter in one or both datasheets.
The scenario
Two identical 16-bit-wide (x16) DDR4 components are placed side by side and wired to share one command/address/clock bus, while each keeps its own data byte lanes — exactly the "devices per byte lane" pattern from Module 04, applied to build a 32-bit-wide, single-rank, component-based (non-DIMM) DDR4 interface for a Versal SoC memory controller.
The bill of materials: two real parts
FPGA / SoC — AMD Versal AI Core series
Versal adaptive SoC with a hardened DDR Memory Controller (DDRMC) attached to the on-chip Network-on-Chip (NoC) — DDR4/LPDDR4/LPDDR4X are supported directly in hardened silicon rather than built from FPGA fabric, which is the Versal-specific angle Module 10 introduced.
DDR4 SDRAM — Micron, x16, DDR4-3200
8Gb (512 Meg × 16) DDR4 SDRAM, 96-ball FBGA, 1.2V VDD/VDDQ, DDR4-3200 CL22 speed bin. Two of these devices, identical part number, are placed in parallel — the exact requirement Module 04/07 flagged for a clean fly-by bus.
Block diagram
DiagramParameter cross-reference: what drives each circuit decision
This is the table that actually connects the two datasheets — every value below comes from a named section or field in one datasheet, cross-checked against the other.
| Design decision | Versal-side reference | Micron-side reference | Resulting circuit value |
|---|---|---|---|
| CA/CK/CTRL termination | UG863, "Signals and Connections for DDR4 Interfaces": address/command/control signals require 39 Ω to VTT at the far end, fly-by routing | Datasheet input pin electrical spec confirms standard fly-by-compatible input receivers on address/command pins | 39 Ω ± resistors from the last device's CA/CK/CTRL pins to a VTT rail |
| Differential clock impedance | UG863, "Physical Design Rules for DDR4 Signals": differential CK/DQS impedance 90 Ω ± 10% | CK_t/CK_c differential input characteristics (AC/DC input spec, Clock section) | Route CK_t/CK_c as a 90 Ω differential pair, tightly coupled |
| Single-ended CAC/data impedance | UG863, "Physical Design Rules for DDR4 Signals": single-ended CAC and data signal impedance 50 Ω ± 10% | Single-ended input/output characteristics (SSTL/POD-class I/O spec) | Target 50 Ω single-ended trace impedance for CA and DQ |
| DQ/DQS/DM termination | UG863 signal table: data and strobe signals use no PCB termination — ODT only, point-to-point routing | Mode Register 1 (MR1): RTT_NOM field (bits 9, 6, 2) selects the on-die termination value the device applies internally | No board resistors on DQ/DQS/DM; select RTT_NOM via mode-register init in the memory IP |
| FPGA-side I/O calibration | UG863 signal table: IO_VR_7xx/8xx calibration reference, 240 Ω to VCCO_7xx/8xx; AM011 DDRMC PHY calibration description | — | One 240 Ω ± 1% resistor from the IO_VR pin to VCCO on each I/O bank used by the DDRMC |
| DRAM-side ZQ calibration | — | ZQ Calibration section: 240 Ω ± 1% reference resistor from ZQ pin to GND, used to calibrate Ron/RTT over PVT | One 240 Ω ± 1% resistor per device, ZQ pin to GND |
| Speed grade / timing budget | AM011, "DDR4 Memory Controller" chapter: maximum supported data rate for the selected DDRMC configuration | AC Timing/Speed Bin Table: DDR4-3200 CL22 → tCK = 0.625 ns, tRCD = tRP = 22 × tCK = 13.75 ns | Confirm the DDRMC configuration in the memory IP is set for 3200 MT/s, CL22 before layout |
| Supply voltage | UG863, "Versal Adaptive SoC Power Rails": VCCO for the DDR4 bank set to the POD12 1.2 V I/O standard | Electrical Characteristics: VDD = VDDQ = 1.2 V ± 60 mV (1.14–1.26 V) | Shared 1.2 V rail feeds both the DDRMC bank VCCO and both DRAM VDD/VDDQ pins |
| RESET_N | UG863 signal table: RESET_N — 4.7 kΩ to GND at far end, fly-by | RESET_n pin description: power-up/reset sequencing input, held low during initialization | One 4.7 kΩ pulldown, fly-by net from the Versal reset output to both devices |
| Trace length / via budget | UG863, "Physical Design Rules for DDR4 Signals": max 11,000 mils (CAC), 5,500 mils (data/strobe); via count ≤ (2 × device count) + 2 for CAC | — | For 2 devices: CAC via budget ≤ 6; keep both DDR4 packages within the length envelope |
| Package/ballout cross-check | Versal package pin table for the selected I/O bank (per XCVC1902 package files) | Ballout diagram: 96-ball FBGA, DQ/DQS/DM grouping per byte | Verify byte-lane pin assignment against Micron's ball map before locking the footprint (Module 09/10) |
Which FPGA pins to use — and why
DiagramsThis is the one place Versal design genuinely differs from a soft-controller FPGA: you do not hand-pick individual balls for CK/CA/DQ. Module 10 established that the hard DDRMC has a fixed physical PHY; here's what "pin selection" actually means in practice, and why each step is done the way it is.
| Step | What you actually choose | Reason |
|---|---|---|
| 1. Pick a DDRMC-capable bank, not any XPIO bank | Only the specific XPIO banks wired to a DDRMC slice on the die can host a DDR4 interface | AM011 confirms these edge banks "can only be used for DDR memory controller (DDRMC)" — a generic XPIO/HDIO bank has no DDRMC datapath behind it at all, so it is physically not an option, not just a poor choice |
| 2. Check that bank's I/O budget against the byte-lane count needed | Confirm the chosen DDRMC-capable bank(s) on the XCVC1902/VSVA2197 combination (per AM013's "VC1902 Bank Diagram Overview" for that package) provide enough sites for 4 byte lanes (32-bit) plus the shared CA/CK/CTRL group | Each XPIO bank provides a fixed number of XPHY sites (9 per bank, up to 54 single-ended I/O per UG1273); running out mid-design forces a bank or device change, so this is checked before layout, not after |
| 3. Keep both DDR4 devices on the same DDRMC instance | Both MT40A512M16 devices' byte lanes must land in the same memory-controller instance / adjacent banks, never split across two independent DDRMCs | A single DDRMC schedules one logical rank; splitting one rank's byte lanes across two controllers isn't a supported topology — this is the FPGA-side twin of Module 04's "one shared command/address domain" rule |
| 4. Let the Vivado NoC/DDRMC IP wizard assign the physical pins | Specify the DRAM part (MT40A512M16), width (32-bit), rank count (1), and component (not DIMM) architecture in the AXI NoC / DDRMC IP customization GUI; the wizard emits the CK/CA/CTRL/DQS pin-to-ball mapping | PG313's "Pinout Rules" chapter defines a fixed silicon-level mapping between each bank's balls and the DDRMC's internal byte lanes — this mapping is enforced by the tool, not editable by hand, echoing Module 10's "DQS and CK pins are fixed" rule |
| 5. Use only the DQ-within-byte-lane swap table the wizard reports | The single remaining degree of freedom is reassigning which physical DQ ball carries which data bit inside one byte lane | Matches Module 10's pin-swap rules exactly — DQ bits swap freely, DQS/CK do not |
| 6. Cross-check the exported XDC before schematic capture | Compare the wizard's generated constraints against PG313's Pinout Rules chapter and AM013's bank diagram for the VSVA2197 package | AMD's own XTP546 "Versal Adaptive SoC Schematic Review Checklist" exists specifically to catch illegal or suboptimal DDR pin assignments before tape-out — this is the formal gate before Module 09's routing begins |
Capacity and width, worked out
- Each MT40A512M16 is 512 Meg × 16 = 8 Gb of capacity, in a single x16 device.
- Two devices in parallel double the data width (16 → 32 bits) while the shared CA/CK/CTRL bus keeps both devices addressed together — this yields 8 Gb + 8 Gb = 16 Gb = 2 GB total, at 32 bits wide.
- Each device contributes one independent data byte-pair group (DQ[15:0]/DQS[1:0]/DM[1:0] and DQ[31:16]/DQS[3:2]/DM[3:2]) — the same "devices per byte lane" pattern from Module 04/05, just with x16 devices instead of x8.
Key takeaways
- Every termination and impedance value in this design traces to a named table in UG863 (Versal PCB Design User Guide) — nothing here is a rule of thumb.
- ODT/RTT_NOM lives entirely in the Micron datasheet's Mode Register 1 field; the board carries no DQ/DQS termination resistors at all.
- ZQ (DRAM-side) and IO_VR (Versal-side) are the same idea on opposite ends of the interface — a precision 240 Ω reference resistor that calibrates on-die impedance over PVT.
- Both DDR4 devices must be the exact same part number, per UG863's explicit requirement — this isn't optional for a component-based fly-by bus.
- Capacity and width scale independently: adding a second x16 device doubles width (16→32 bit), not depth — depth would require a second rank instead.
- "Selecting FPGA pins" on Versal means selecting a DDRMC-capable bank and letting the memory IP wizard lock the CK/CA/CTRL/DQS mapping (per PG313's Pinout Rules) — not hand-picking individual balls.
References
Every value and rule cited on this page traces to one of the documents below.
AMD / Versal
- DS950 — Versal Architecture and Product Data Sheet: Overview
- AM011 — Versal ACAP Technical Reference Manual: DDR4 Memory Controller
- AM013 — Versal ACAP Packaging and Pinouts Architecture Manual (overview)
- AM013 — VSVA2197 Package, VC1902 Pin Map
- AM013 — VC1902 Bank Diagram Overview
- AM013 — Bank Diagram by Package for VC1902
- PG313 — Versal Adaptive SoC Programmable NoC and Integrated Memory Controller Product Guide (see "Pinout Rules")
- UG863 — Versal Adaptive SoC PCB Design User Guide (overview)
- UG863 — Signals and Connections for DDR4 Interfaces
- UG863 — Physical Design Rules for DDR4 Signals
- UG863 — PCB Routing Guidelines for DDR4 Interfaces
- UG863 — Differences in XPIO, HDIO, and Transceiver Count
- Versal NoC and DDR MC Design Process Guide (index to PG313 Pinout Rules, XTP546 checklist, and memory pinout tutorials)
- XTP546 — Versal Adaptive SoC Schematic Review Checklist
- XCVC1902-2MSEVSVA2197 — part/package reference
Micron / DDR4 device