Announcement

Collapse
No announcement yet.

PCB Stack Impedance issue

Collapse
X
 
  • Time
  • Show
Clear All
new posts

  • PCB Stack Impedance issue

    Hi there,
    I am preparing to design an iMX6UL development kit.
    My PCB stack is 4 layer.

    L1 (signal)
    L2 (GND)
    L3 (POWER)
    L4 (signal)

    Should i have to control impedance on both of layer when routing DDR3? Assume that the track what has 50Ohm impedance in layer 1 is 0.12 mm width, but 0.12mm track is not 50Ohm impedance in layer 4. So that what will i have problem if i route 0.12mm track for DDR3 signal in layer 4?

    Thank you for your help!

  • #2
    You definitely need impedance control on all layers where you are routing DDR3 signals. L4 will normally use the L3 power layer as a reference, so you should be having the same track parameters.

    Despite the reference design for iMX6UL from NXP being done on 4 layers (if I remember correctly), this puts some limitations on what you can do on the board and will be quite challenging as well, if you don't have much experience designing such boards.

    Comment


    • #3
      I agree with mairomaster.

      PS: This iMX6UL design confused a lot of people. If you would like to use POWER as a reference plane, be sure there are a lot of decoupling capacitors between the plane and GND and also be sure this plane is above all the memory tracks.

      Comment


      • #4
        Thank you mairomaster and robertferanec,
        Exactly, the reference layout is 4 layers. I checked reference layout and reference design and i did not find some decoupling capacitor such C101, C102. I guest that it was be removed.

        This is my very first high speed design. So that i will try to route with 6 layers PCB. Base on robertferanec 's guide in his course, I define my PCB stack like attachment.

        Do you have any comment for my further work?
        Attached Files
        Last edited by huypq6; 03-30-2017, 08:33 PM.

        Comment


        • #5
          6 layers could help. Be sure you know track geometry on top and bottom layer for all the impedances you need. Double check the stackup and impedances with your PCB manufacturer.

          Comment


          • #6
            robertferanec Thank you, I worked with 8 layers.

            Comment


            • #7
              i got the pcb.
              Now, i have trouble while debug it. I used Mfg tool from NXP.
              when i upload uboot into kit, i received error about initializing memory. Below is MFG log and config. Pls, give me some advice in this case.

              MFG log
              Code:
              DLL version: 2.6.2
              Friday, June 30, 2017 10:22:44   Start new logging
              ModuleID[2] LevelID[10]: CMyExceptionHandler thread is running
              ModuleID[2] LevelID[1]: new MxHidDeviceClass
              ModuleID[2] LevelID[10]: new MxHidDevice[04718FB8]
              ModuleID[2] LevelID[1]: new MxHidDeviceClass
              ModuleID[2] LevelID[10]: new MxHidDevice[04719488]
              ModuleID[2] LevelID[1]: new MxHidDeviceClass
              ModuleID[2] LevelID[10]: new MxHidDevice[047BF6D8]
              ModuleID[2] LevelID[1]: new MxHidDeviceClass
              ModuleID[2] LevelID[10]: new MxHidDevice[04819050]
              ModuleID[2] LevelID[1]: new MxHidDeviceClass
              ModuleID[2] LevelID[10]: new MxHidDevice[04842A38]
              ModuleID[2] LevelID[1]: new MxHidDeviceClass
              ModuleID[2] LevelID[10]: new MxHidDevice[0483D730]
              ModuleID[2] LevelID[10]: Device Manager thread is running
              ModuleID[2] LevelID[1]: Can't set m_hStopEvent before it initialized or it already stop
              
              ModuleID[2] LevelID[10]: CmdOperation[0] device chagned and reset to state 0
              ModuleID[2] LevelID[10]: CmdOperation[0], skip current command, so SetEvent(hDevCanDeleteEvent)
              ModuleID[2] LevelID[10]: CmdOperation[0], skip current command, so SetEvent(hDevCanDeleteEvent)
              ModuleID[2] LevelID[10]: CmdOperation[0], skip current command, so SetEvent(hDevCanDeleteEvent)
              ModuleID[2] LevelID[10]: CmdOperation[0], skip current command, so SetEvent(hDevCanDeleteEvent)
              ModuleID[2] LevelID[10]: CmdOperation[0], skip current command, so SetEvent(hDevCanDeleteEvent)
              ModuleID[2] LevelID[10]: ExecuteCommand--Boot[WndIndex:0], File is C:\Users\Huypq6\Downloads\L4.1.15_1.0.0_ga-mfg-tools.tar\L4.1.15-1.0.0_ga-mfg-tools\mfgtools\Profiles\Linux\OS Firmware\firmware\u-boot-imx6ul14x14ddr3arm2_sd.imx
              ModuleID[2] LevelID[1]: MxHidDevice::Write() Error writing to device 0x1f.
              ModuleID[2] LevelID[1]: Failed to initialize memory!
              ModuleID[2] LevelID[1]: PortMgrDlg(0)--MxHidDevice--Command Boot excute failed
              ModuleID[2] LevelID[10]: CmdOperation[0], current command executed failed, so SetEvent(hDevCanDeleteEvent)
              ModuleID[2] LevelID[10]: ExecuteCommand--Boot[WndIndex:0], File is C:\Users\Huypq6\Downloads\L4.1.15_1.0.0_ga-mfg-tools.tar\L4.1.15-1.0.0_ga-mfg-tools\mfgtools\Profiles\Linux\OS Firmware\firmware\u-boot-imx6ul14x14ddr3arm2_sd.imx
              ModuleID[2] LevelID[1]: MxHidDevice::Write() Error writing to device 0x1f.
              ModuleID[2] LevelID[1]: Failed to initialize memory!
              ModuleID[2] LevelID[1]: PortMgrDlg(0)--MxHidDevice--Command Boot excute failed
              ModuleID[2] LevelID[10]: CmdOperation[0], current command executed failed, so SetEvent(hDevCanDeleteEvent)
              ModuleID[2] LevelID[10]: ExecuteCommand--Boot[WndIndex:0], File is C:\Users\Huypq6\Downloads\L4.1.15_1.0.0_ga-mfg-tools.tar\L4.1.15-1.0.0_ga-mfg-tools\mfgtools\Profiles\Linux\OS Firmware\firmware\u-boot-imx6ul14x14ddr3arm2_sd.imx
              ModuleID[2] LevelID[1]: MxHidDevice::Write() Error writing to device 0x1f.
              ModuleID[2] LevelID[1]: Failed to initialize memory!
              ModuleID[2] LevelID[1]: PortMgrDlg(0)--MxHidDevice--Command Boot excute failed
              ModuleID[2] LevelID[10]: CmdOperation[0], current command executed failed, so SetEvent(hDevCanDeleteEvent)
              ModuleID[2] LevelID[10]: ExecuteCommand--Boot[WndIndex:0], File is C:\Users\Huypq6\Downloads\L4.1.15_1.0.0_ga-mfg-tools.tar\L4.1.15-1.0.0_ga-mfg-tools\mfgtools\Profiles\Linux\OS Firmware\firmware\u-boot-imx6ul14x14ddr3arm2_sd.imx
              ModuleID[2] LevelID[1]: MxHidDevice::Write() Error writing to device 0x1f.
              ModuleID[2] LevelID[1]: Failed to initialize memory!
              ModuleID[2] LevelID[1]: PortMgrDlg(0)--MxHidDevice--Command Boot excute failed
              ModuleID[2] LevelID[10]: CmdOperation[0], current command executed failed, so SetEvent(hDevCanDeleteEvent)
              ModuleID[2] LevelID[10]: DeviceManager::DevChangeWnd::OnDeviceChange() - DEVICE_REMOVAL_EVT(\\?\USB#VID_15A2&PID_007D#6&106a4439&0&2#{a5dcbf10-6530-11d2-901f-00c04fb951ed})
              ModuleID[2] LevelID[10]: DeviceManager::DevChangeWnd::OnDeviceChange() - end
              ModuleID[2] LevelID[10]: DeviceManager::OnMsgDeviceEvent() - DEVICE_REMOVAL_EVT(\\?\USB#VID_15A2&PID_007D#6&106a4439&0&2#{a5dcbf10-6530-11d2-901f-00c04fb951ed})
              ModuleID[2] LevelID[10]: DeviceClass::FindDeviceByUsbPath--DeviceListType_Current, _devices.size: 1
              ModuleID[2] LevelID[10]: DeviceClass::FindDeviceByUsbPath--DeviceListType_Current, devInstPathToFind: USB\VID_15A2&PID_007D\6&106A4439&0&2, _deviceInstanceID: USB\VID_15A2&PID_007D\6&106A4439&0&2
              ModuleID[2] LevelID[10]: DeviceClass::FindDeviceByUsbPath--DeviceListType_Current, Find the device
              ModuleID[2] LevelID[10]: DeviceManager::OnMsgDeviceEvent() - DEVICE_REMOVAL_EVT,[MxHidDeviceClass] vid_15a2&pid_007d, Hub:6-Port:2
              ModuleID[2] LevelID[10]: DeviceManager::OnMsgDeviceEvent() - DEVICE_REMOVAL_EVT, Notify
              ModuleID[2] LevelID[10]: CmdOpreation[0]--OnDeviceChangeNotify, Volume Arrive/Remove or Device Arrive/Remove
              ModuleID[2] LevelID[10]: CmdOpreation[0]--OnDeviceChangeNotify, m_p_usb_port is not NULL, so only refresh
              ModuleID[2] LevelID[10]: CmdOpreation[0]--OnDeviceChangeNotify, Volume/Device Remove
              ModuleID[2] LevelID[1]: CmdOpreation[0]--set m_hDeviceRemoveEvent.
              ModuleID[2] LevelID[10]: CmdOpreation[0]--WaitforEvents device remove1
              ModuleID[2] LevelID[10]: DeviceManager::OnMsgDeviceEvent()-DEVICE_REMOVAL_EVT, hDevCanDeleteEvent has been set
              ModuleID[2] LevelID[10]: delete MxHidDevice[0483D730]
              MFG config
              Code:
              [profiles]
              chip = Linux
              
              [platform]
              board = SabreSD[LIST]
              name = SDCard
              
              [variable]
              board = sabresd
              mmc = 0
              sxuboot=sabresd
              sxdtb=sdb
              7duboot=sabresd
              7ddtb=sdb
              6uluboot=14x14ddr3arm2
              6uldtb=14x14-ddr3-arm2
              ldo=
              plus=
              initramfs=fsl-image-mfgtool-initramfs-imx_mfgtools.cpio.gz.u-boot
              seek = 1
              sxnor=qspi2
              7dnor=qspi1
              6ulnor=qspi1
              nor_part=0

              Comment


              • #8
                I am not sure. I do not use latest MFG tools. I use this: http://www.imx6rex.com/open-rex/soft...setup-mfgtool/

                Comment

                Working...
                X
                😀
                🥰
                🤢
                😎
                😡
                👍
                👎