element14 Community
element14 Community
    Register Log In
  • Site
  • Search
  • Log In Register
  • About Us
  • Community Hub
    Community Hub
    • What's New on element14
    • Feedback and Support
    • Benefits of Membership
    • Personal Blogs
    • Members Area
    • Achievement Levels
  • Learn
    Learn
    • Ask an Expert
    • eBooks
    • element14 presents
    • Learning Center
    • Tech Spotlight
    • STEM Academy
    • Webinars, Training and Events
    • Learning Groups
  • Technologies
    Technologies
    • 3D Printing
    • FPGA
    • Industrial Automation
    • Internet of Things
    • Power & Energy
    • Sensors
    • Technology Groups
  • Challenges & Projects
    Challenges & Projects
    • Design Challenges
    • element14 presents Projects
    • Project14
    • Arduino Projects
    • Raspberry Pi Projects
    • Project Groups
  • Products
    Products
    • Arduino
    • Avnet Boards Community
    • Dev Tools
    • Manufacturers
    • Multicomp Pro
    • Product Groups
    • Raspberry Pi
    • RoadTests & Reviews
  • Store
    Store
    • Visit Your Store
    • Choose another store...
      • Europe
      •  Austria (German)
      •  Belgium (Dutch, French)
      •  Bulgaria (Bulgarian)
      •  Czech Republic (Czech)
      •  Denmark (Danish)
      •  Estonia (Estonian)
      •  Finland (Finnish)
      •  France (French)
      •  Germany (German)
      •  Hungary (Hungarian)
      •  Ireland
      •  Israel
      •  Italy (Italian)
      •  Latvia (Latvian)
      •  
      •  Lithuania (Lithuanian)
      •  Netherlands (Dutch)
      •  Norway (Norwegian)
      •  Poland (Polish)
      •  Portugal (Portuguese)
      •  Romania (Romanian)
      •  Russia (Russian)
      •  Slovakia (Slovak)
      •  Slovenia (Slovenian)
      •  Spain (Spanish)
      •  Sweden (Swedish)
      •  Switzerland(German, French)
      •  Turkey (Turkish)
      •  United Kingdom
      • Asia Pacific
      •  Australia
      •  China
      •  Hong Kong
      •  India
      •  Korea (Korean)
      •  Malaysia
      •  New Zealand
      •  Philippines
      •  Singapore
      •  Taiwan
      •  Thailand (Thai)
      • Americas
      •  Brazil (Portuguese)
      •  Canada
      •  Mexico (Spanish)
      •  United States
      Can't find the country/region you're looking for? Visit our export site or find a local distributor.
  • Translate
  • Profile
  • Settings
RIoTboard
  • Products
  • Dev Tools
  • Single-Board Computers
  • RIoTboard
  • More
  • Cancel
RIoTboard
Forum DDR3 Memory Lines
  • Blog
  • Forum
  • Documents
  • Files
  • Members
  • Mentions
  • Sub-Groups
  • Tags
  • More
  • Cancel
  • New
Join RIoTboard to participate - click to join for free!
Actions
  • Share
  • More
  • Cancel
Forum Thread Details
  • State Verified Answer
  • Replies 7 replies
  • Answers 1 answer
  • Subscribers 24 subscribers
  • Views 949 views
  • Users 0 members are here
  • ddr3
Related

DDR3 Memory Lines

Former Member
Former Member over 11 years ago

I was looking through the DDR3 connections, and I noticed a rather disturbing configuration.

 

The data line are not enumerated correctly. The chip lists DQ0-15 as would be expected, however the bus leading into it is enumerated as follows (0,1,4,2,5,7,6,3,8,14,15,10,9,12,11,13) on the one chip and (24,30,29,27,25,31,28,26,16,21,19,20,18,17,23,22) on the other. They are in no specific order as far as I can tell.

 

My understanding of DDR3 RAM tells me that this shouldn't matter as long as it is consistent. The data would be written incorrectly, but then when it is incorrectly read back, the values would be correct again (a case where two wrongs make a right). My question was why was this done in the first place?

  • Sign in to reply
  • Cancel
  • Former Member
    0 Former Member over 11 years ago

    While I really don't know what decisions were made in the design, let me take a stab at a couple of possible reasons.

     

    1. Ease of pcb routing

    2. Timing skew, with high speed memory it's important that trace lengths are the same so that synchronous timing doesn't end up with a bit arriving too soon, or too late. This is why you'll see some traces on the pcb taking snake like S paths. Couple this with 1.

    3. within some constraints, memory is just memory, it's theoretically possible to implement your memory array with devices that are anything from 1 bit wide per chip all the way up to the 64 bit width of the memory controller

     

    There is something of a pattern, if you look.

    U5 DQ0 - DRAM_D0 (remaining 1-7 within the same byte)

    U5 DQ8 - DRAM_D8 (remaining 9-15 within the same byte)

     

    U6 DQ0 - DRAM_D24 (25-31 within the same byte)

    U6 DQ8 - DRAM_D16 (17-23 within the same byte)

     

    While it also seems that the high and low byte are swapped on U6, take a look at

    U5 LDQS - DRAM_SDQS0

    U5 UDQS - DRAM_SDQS1

     

    U6 LDQS - DRAM_SDQS3

    U6 UDQS - DRAM_SDQS2

    So the strobes are reversed as well...

     

    While it's been a long while since I looked in detail, it used to be the case that some memory controllers needed that first bit in each byte to be mapped correctly to allow detection of memory size.

     

    In other ways, DDR is more complex than might appear, what's inside the package could theoretically even be multiple dies although probably isn't these days. However they often do implement multiple banks and allow interleaving accesses between banks to increase performance, so the external signal markings (DQ0-DQ15) could be implemented in interesting ways internally where you can't see what's going on. 

     

    However, if you think it's unusual to do this, I suggest having a look at the MarSboard, Sabre-Lite or Wandboard schematics.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Reject Answer
    • Cancel
  • Former Member
    0 Former Member over 11 years ago in reply to Former Member

    Seems weird, but common.

     

    thanks,

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • Former Member
    0 Former Member over 11 years ago in reply to Former Member

    There are available schematics for CubieBoard & OlinuXino which both use a direct 1-1 mapping.

     

    So here's a couple of other thoughts:

     

    1. The Allwinner memory controller cares about it being correct, the Freescale one doesn't.

    2. People are basing things off a reference design that does it in a particular way.

    3. Perhaps tied in to 2, EMC compliance based on a known functional pcb layout.

     

    Only guesswork at this point, but similar to the way spread spectrum at first seems a bit odd at first, I wonder if a deep understanding of instruction encodings, typical access patterns, cache design etc. can come up with some reasons for separating certain signals in order to eliminate crosstalk and produce a more robust and/or EMC friendly design?  Not sure how plausible that is - I expect everyone parroting a reference desigh from somewhere is much more likely.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • GregC
    0 GregC over 11 years ago in reply to Former Member

    Hi Craig

    I am not a processor expert, but I guess the answer to your question should be in the "Hardware Development Guide for i.MX 6" section 3.3 DDR connection information and Routing Rule

    http://cache.freescale.com/files/32bit/doc/user_guide/IMX6DQ6SDLHDG.pdf

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Reject Answer
    • Cancel
  • Former Member
    0 Former Member over 11 years ago in reply to GregC

    Section 3.5.1 of the document you linked to specifies what agrahambell was saying. The first bit in every byte lane must remain fixed, otherwise you can feel free to swap within the same byte lane for ease of routing purposes.

     

    I think this document is going to be my goto reference from now on. I found a wealth of information that I have been struggling to find elsewhere, and I did it in the first few minutes of reading it.

     

    Thanks for all the help!

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • Former Member
    0 Former Member over 11 years ago in reply to Former Member

    There are some very good docs from freescale for the i.MX6, there's one (sorry don't remember which) that shows how to design a board layout such that it can take quad/dual, duallite/solo & sololite as well as using different schemes for the number and size of dram devices all on a single layout.

     

    The only problem with the Freescale docs is that they're huge and there's so many of them image

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • tusharp
    0 tusharp over 11 years ago in reply to Former Member

    they're huge and there's so many of them

    thats the good part with fsl docs image.

    they push a lot of details as documents.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
element14 Community

element14 is the first online community specifically for engineers. Connect with your peers and get expert answers to your questions.

  • Members
  • Learn
  • Technologies
  • Challenges & Projects
  • Products
  • Store
  • About Us
  • Feedback & Support
  • FAQs
  • Terms of Use
  • Privacy Policy
  • Legal and Copyright Notices
  • Sitemap
  • Cookies

An Avnet Company © 2025 Premier Farnell Limited. All Rights Reserved.

Premier Farnell Ltd, registered in England and Wales (no 00876412), registered office: Farnell House, Forge Lane, Leeds LS12 2NE.

ICP 备案号 10220084.

Follow element14

  • X
  • Facebook
  • linkedin
  • YouTube