SoC Zynq Development Board

Hello Everyone!

I want to show you and ask for a review for my new designed SoC Zynq Development Board. This board has been designed during Phils Lab “Advanced Digital Hardware Design” course.

Board features:

  • AMD/Xilinx Zync System on Chip (SoC) Half APU (Application Processing Unit) and half FPGA
  • 1GB DDR3 Memory
  • 4GB eMMC Memory
  • Gigabit Ethernet
  • USB HS OTG (USB High Speed On-the-Go) enables connectivity between portable consumer electronic devices over the industry’s most popular peripheral interface
  • On-Board USB-to-JTAG
  • Embedded Linux-Capable

Top 3D View:

Bottom 3D View:

Side 3D View:

Layers with hidden copper fills:

Top Layer:

Inner Layer 1:

Inner Layer 2:

Inner Layer 3:

Inner Layer 4:

Inner Layer 5:

Inner Layer 6:

Inner Layer 7:

Inner Layer 8:

Bot Layer:

In comparison to the original course project component selection, schematics and critical component placement this project is almost identical to the course project, however symbol library, footprint library and schematics have been done by myself in my style and all supportive components placements and layout have been done by myself in trial and error style :). It took me long hours to design this board.

I have not chosen to design my own unique project, because my hobby projects are typically much cheaper and not so advanced in layout perspective, and this board together with assembly and components are out of my hobby budget. Still, during the course and design of this project I learned a lot of new stuff and boosted my skills in HW and PCB design for both hobby and work. Although, I will not be ordering this project and wanted so share it for a review because is taken a lot of hours to complete it and maybe some of you will give me feedback with recommendations how it could be improved or take something for themselves :slight_smile:

These are a link for Schematics, BoM, Assembly Notes, Fabrication Notes and Gerbers:

Thanks and wish everyone a good day!

1 Like

Hi,

Interesting board, but for any reasonably good review, you could post the layout and schematics in kicad format…

Best,
Tom

1 Like

This is a very well done job, both in the schematic and pcb.
I have no real notes, just cosmetic or marketing related:

  • the configuration dip switch sticks out like a sore finger :slight_smile:
  • completely uniform component package choice, the FTDI qfp maybe could be purchased as qfn or bga?
  • minor inconsistencies in the graphical representation of silkscreen (thickness, pin1 indicators)
  • the time of usb-otg and barrel jacks has finally come, please update to usb-pd :slight_smile:

KiCad is looking for modern designs to add to the example directory, in my opinion this could be a nice ‘business card’ for you and for KiCad, if you can / are willing to share the sources.

C.

p.s. if intereseted look here.

1 Like

mmmmmm, I dont really have time for a full review however…
Have you got enough Zynq Bypass capacitors ?
per Page 13, 14 of UG933 Zynq-7000 PCB Design Guide.
No 2.5V rail ? so I gather no LVDS options. So, no high speed interfaces.
CLK to network chip >= than all the other traces ?

Glen- Factory Xilinx Alliance Partner.

1 Like

At the moments all components are used from Global Library. I will prepare project then will share it on GitHub :slight_smile:

Thanks for your comment :slight_smile:

  • I taken FTDI chip from the course, but yes your idea is good. I have reviewed stock and there are QFN FTDI chips
  • Great idea about USB-PD.

I will fix some stuff in a project and upload it on Github later :slight_smile:

Thanks for your comment.

  • For bypass Capacitors I followed course guide and table provided in schematics which is from UG933 Zynq-7000 PCB Design Guide
  • 1V0, 1V35, 1V8 and 3V3 were used. no LVDS in this design
  • I do not understand your last statement, can you elaborate?

I am pretty new to FPGA design, some there may be some points missing, but I tried to follow Phil’s Lab course and Xilinx guidelines for this design

First, I’m in doubt whether to respond here at all, as this sort of PCB is above my experience level. But I guess I’ll make some comments and leave the rest up to you.

As far as I know the extra “GND” / “guard ring” around the PCB with the extra via stitching has very little benefit.

10 layers also seems a bit excessive. I understand the use of multiple GND layers, but I guess this can be done on 8 or maybe 6 layers. For example Inner Layer 8 can (almost) be combined with Inner Layer 4 Both those layers do not have many signals, and the signals they do have are in different locations. but it is a tradeoff between PCB cost and designer time, and thus depends on the expected amount of PCB’s to be manufactured.

Also, the DDR routing on both the Top Layer and Inner Layer 8 are directly on top of a GND layer, while the DDR routing on Bot Layer is not. As of yet KiCad does not have propagation delay / time matching, but only length matching. The length matching “squiggles” on Inner Layer 6 is also sandwiched between two GND layers, which gives yet another propagation delay. I guess it’s better to move the DDR IC’s a bit further form each other to make more room for the length matching and then route them on fewer (but more uniform) layers.

1 Like

Ambitious design! (did I read before that it’s your first one? if so, it’s doubly ambitious).

Few things that can be deduced from the PDFs:

  • You are using an impedance controlled design, but the stackup table (which looks nice btw) doesn’t include the Er of the materials. I assume it’s 4.5-4.6 (standard FR4). For the manufacturer, identify the layers that are impedance controlled.

  • for DDR3 routing, you can pin swap the DQ lines within each byte and (but please double check in Xilinx docs) the entire bytes, at least within the same chip (e.g. DQS0/DM0/DQ0-7 with DQS1/DM1/DQ15-8). This will greatly simplify your routing and you’ll need far less meanders to length match.

  • you seem to have too many layers for the board of this complexity. It’s also unusual to have power layer in between two GND layers. I would suggest using an 8-layer stackup of (top to bottom): signal/GND/signal/PWR1/PWR2/signal/GND/signal. Power planes serve as good reference for high speed signals (distributed capacitance + a few decoupling caps of the component are effectively a short circuit for RF). This should be sufficient for a board of this complexity. Also try staggering the first two rows of vias in the Zynq’s BGA package instead of placing them in a line - fits two tracks between each pair of vias instead of one.

  • Look carefully at the DDR DQS/clock diff pairs, there’s (to my taste) too much deskewing there. KiCad V7 may have bugs/inconsistencies in trace length calculations - but for this (and more review), a kicad_pcb file would be necessary.

  • Set pcbnew KiCad to print all vias into the PDFs (IDK if they are blind/thru).

  • Make sure no high speed signals (in terms of rise time, so not only DDR but also MII/MDIO/FPGA fanout) cross cuts in the power/ground planes. Also don’t cut the GND plane with long traces on mixed layers (e.g. L5).

  • Impedance matched traces look like they have same widths on all layers (inside/outside). Is this the case? Double-check the stackup.

  • R162 should be on the source side if you’re using series termination for the QSPI CLK line.

  • What is the dielectric type (X7R, X5R, Y5V, etc) for the 470nF/6.3V decoupling caps for the FPGA? I suggest adding a few low capacitance (1nF) but with good dielectric (C0G or at least X7R) in parallel.

  • I don’t know what’s the ring around the board for. Just to make it look cool?

3 Likes

@Mantvis,

if you’ve got network PHY interfaces, at RGMII 1 Gb speeds, take lots of care with the timing relationships of clk and data. RTFM twice.

BTW - you should listen to the user @twl , he knows what he is doing . He’s also very kindly spent quite a bit of time looking at your board.

2 Likes

First, thanks @twl and @glenenglish for design review!

It’s my first design of such complexity and I appreciate your feedback. I noted every feedback @twl and @glenenglish and will review my design, try to optimize it and go deeper in the Zynq manuals :slight_smile:

The design was really challenging, but I learned from it a lot and getting good advice and feedback, so I can improve even better, is why I placed the design in this forum.

Nice Job! and Thank you very much for your effort!

1 Like

It is a nice looking board you made there. I have not looked at it in detail, but I feel the need for you to possibly reconsider the microusb connector. In my experience that is in a very fragile from factor. Think tiny connector (in “depth”) and surface mount only. If that specific connector is just there an a extra feature, ok, but if you expect to actually use the connector beware it is very fragile in my experience. Never broken one myself where I noticed, but seen countless colleagues who have turned up with boards broken.

1 Like

Hello @Mantvis

May I ask you a little question?

How did you add propagation delay to your DDR signals? Did you find your own tool or something on KiCAD? I am also trying to create such designs and I have a little problem with propagation delay. I don’t know how to add

Basic maths calculations, which is giving me a bit of a headache.

A tool like Altium would be great :slight_smile:

Hi etsl

First I routed traces, then I used a propagation delay calculator to find out how much I should length tune those traces. It took some time, and I have redone FPGA and DDR routing several times.

Altium would handle this much easier. But if you route everything on the same layer or keep length of parts of traces on the same layer matched, then length matching should be enough. KiCAD can do length matching.

Hi Mantvis

Thanks for your quick reply! that was great!

can I ask something else I just saw that we should also pay attention to package delays?

Could you please tell me how you added package delays for Zynq Pins and DDRs? :slight_smile:
Thanks for your help!

In KiCAD there is an option to add Specify Pad to Die Length. Those delays can be found on IBIS models. I just added equivalent delay in mm to calculate the same delay time for specific pins.

Hi Mantvis

i have just seen that you have put a lot of effort here! i will do as you have done :sweat_smile::+1:

Have you done the same for each of the Rams?

Thanks for your screenshot and the tip!

Hi etsl,

Yes, the same for both. Good luck buddy :slight_smile:

Hi there! I’m also making my own board and I want to have a reference. Will you be publishing your KiCad schematic? Thank you very much for your hard work!