14
\$\begingroup\$

I made a fairly complex circuit (at least for my level).

After spending a few hours trying to manually autoroute, I had like only 5% finished, and every time run into obstacles of not being able to continue routing.

So I tried to use CircuitMaker's autorouter. Initially I thought it did a good job, but then I found out most autorouted tracks had vioations, so I switched on the option 'Rip-up Violations After Routing' and found out like 25%-50% was autorouted. See below.

enter image description here

I am sure I can improve rotating or rearranging components better, but I was hoping an autorouter could do better (or at least I hope there is 'some' solution). Afaik I have seen much more complex boards which are routed (either by hand or autorouted).

I wonder what is now the best approach to continue:

My setup/settings are:

  • Two layer board
  • Bottom layer is initially a GND plane (but the autorouter can use it to put traces over it).
  • I used (for now) the easiest settings (clearance 5 mil, smallest track width 5 mil)
  • I defined several time of net classes, but don't use them (for now) for checking rules (so everyth track width is set to 5 mils)

Also, a lot of the transistor (Q) components are not fully defined (so even more tracks need to be added/routed).

How should I proceed routing this PCB?

  1. Use the autorouter but differently? (if so, how?)
  2. Spent (much) more time on rotating/relayouting?
  3. Use a bigger PCB? (I hope not, because I really want to have it in around 18x12 cm which is this one)?
  4. Move some parts move apart? (I have the feeling even the ICs are spaced enough, but I don't have much experience in this).
  5. Removing the GND plane? (Although even the autorouter couldn't make much of it either with/without the GND plane). Also I use both digital/analog traces, so I think GND is good, maybe necessary.
  6. Or did I miss some (CircuitMaker) settings that makes it able to autoroute this PCB?

UPDATE

It seemed that the autorouter did it's work well. However, because I selected the option 'Rip-up Violations After Routing', the autorouter throwed away all violating traces.

Sadly, there are a lot of inner footprint clearance violations which I don't know how to remove. See Altium's 'Ignore pad to pad clearances within a footprint' inside CircuitMaker? for a related question of me.

\$\endgroup\$
7
  • 4
    \$\begingroup\$ If the second layer of your two layer board is reserved for ground, I doubt this is routable. \$\endgroup\$
    – Reinderien
    Mar 22, 2020 at 4:07
  • \$\begingroup\$ @reinderien it does not mean there should or may be no tracks on the bottom layer. \$\endgroup\$ Mar 22, 2020 at 4:12
  • 1
    \$\begingroup\$ Your traces look too small to be manufacturable. What is the trace size, are you sure it's 5/5? Is this a single sided board (all components/traces on one side)? If this is a 2 sided board, I don't see this as difficult to route. \$\endgroup\$
    – Ron Beyer
    Mar 22, 2020 at 4:23
  • 3
    \$\begingroup\$ All PCB layout engineers I know abhor the auto-routers. They do everything by hand. I personally have gotten good result from the PADS auto-router in some not-too-complex cases, but I still do a fair amount of clean-up afterwards. \$\endgroup\$
    – Oldfart
    Mar 22, 2020 at 7:31
  • \$\begingroup\$ @RonBeyer Yes, it's 5/5. All components are on one side indeed. And it's a 2 sided board, but the autorouter cannot handle it at all somehow. \$\endgroup\$ Mar 22, 2020 at 11:57

7 Answers 7

32
\$\begingroup\$

I think the placing of the parts is your biggest problem.

Look at U6 and the U13, U14, and U15.

U6 has multiple connections to U13, but those connections have to cross all the connections to U11 and U12 to get there.

U14 and U15 are similar - all the connections to them have to cross connections to other ICs to get to U6.

You've placed your parts in a nice, neat, numerical order. That makes it easy to find the parts on the board, but makes the routing more complicated.

  • Ignore the part designators.
  • Place your parts strictly by function and minimizing cross overs in the rats nest.
  • Place any connector that has to physically be in a particular place first.
  • Move components connected to the connectors to minimize crossings in the rats nest.
  • Place the rest of the parts so as to minimize crossings in the rats nest.

I think your circuit can be managed on a double sided board, but you're going to have to be more flexible in where you place the parts.


Mmmpf. I didn't actually answer your question.

Don't bother with the autorouter. As most folks, I've tried them and found that I can route my boards faster and better by hand.

Autorouters might work alright if you have time to tune the parameters for best performance. That will take a lot of time and patience.

About the only time that would make sense is if you are doing large multi layer PCBs with thousands of nodes where you will expect a lot of changes. Manually re-routing that kind of thing would be a lot of work, so tuning the autorouter would be worthwhile.


Additional suggestions:

Look at your schematic.

  • Try drawing the schematic somewhat like your PCB layout, and group the multiplexers by function and IC.

  • Try to minimize crossovers in the schematic by grouping which signals go through which ICs and which multiplexers.

  • The simpler it is to draw the schematic, the easier it will be to lay out the PCB.
  • Draw your circuit using wires for all connections rather than using signal flags.
  • Your goal is a simple, readable schematic with (nearly) all connections as wires and very few crossed connections. That will translate into a PCB layout with fewer crossed connections.
  • Keep crosstalk in mind since you are working with audio.
  • You'll want to use separate multiplexer ICs for certain signals to reduce crosstalk between channels. You'll have to keep that in mind while simplifying the circuit.
\$\endgroup\$
16
  • 1
    \$\begingroup\$ Thanks for all these tips ... I will need some time to perform them. Also I found another issue that might solve my auto routing issue, but I will ask this in a new question. \$\endgroup\$ Mar 22, 2020 at 12:22
  • 2
    \$\begingroup\$ I'm one of those who don't use autorouters. I tried them, and discovered that I spent more time waiting on the autorouter and trying to tune its performance than it would take me to do the routing manually. Its probably worth it if you are doing multilayer PCBs with thousands of nodes. For most things, it just isn't worth the hassle. \$\endgroup\$
    – JRE
    Mar 22, 2020 at 12:25
  • 7
    \$\begingroup\$ The placement of C16 to C23 is very suspicious as well. Are they decoupling capacitors? Then they should be right next to the parts they are supposed to decouple. \$\endgroup\$
    – Michael
    Mar 22, 2020 at 12:50
  • 4
    \$\begingroup\$ As a former Altium employee, Dave Jones of the EEVBlog describes autorouters pretty well: youtube.com/watch?v=6JYG49zgEio \$\endgroup\$
    – DerStrom8
    Mar 22, 2020 at 13:28
  • 5
    \$\begingroup\$ I gave +1 for not using autorouter; But that advice is only for people not knowing WHEN to use it. Autorouter is perfectly fine to route a low number of traces (and it will do it better than you do ) but don't ever feed it a whole board at once. \$\endgroup\$ Mar 23, 2020 at 2:13
7
\$\begingroup\$

If you have a two layer board, and dedicate one to ground, then it's unlikely you can route everything on the other layer.

With a board this complex, you need a policy. Simply dropping wires here and there is not going to work. I notice it's mostly DIL ICs, which means it's not an RF board. So while you still need a competent ground, you do not need a ground plane.

Choose a gridded ground. Lay out a series of ground tracks East-West on one layer, and North-South on the other layer. Connect them into a grid with vias, preferrably at the ground pins of the ICs.

Now place your other tracks. Follow the same orientation on each layer, via through when you change direction, and you will always have a systematic method for getting from A to B, without topologically blocking any other connection. You may still run into crowding problems, which means you need to backtrack and change your placements.

This two layer EW/NS routing is called 'Manhattan Routing'.

Most/some? autorouters have an option for you to restrict tracks on certain layers, so you may be able to set up yours to follow this orientation pattern. However, working with a Manhattan layout means that manual routing is quite straightforward.

I would not recommend leaving the ground until last, and then 'filling the empty areas with copper, using vias to bridge connections between isolated polygons'. The board is so busy that you will miss something, and there is no guarantee that you can actually get ground connectivity at all. Better to start with a complete ground grid (easy to place and check), and then place a track at a time (easy to place and check).

\$\endgroup\$
5
  • \$\begingroup\$ I updated the settins part, I meant that I put GND on the bottom layer, but does not mean there can be no routes via the bottom layer. Also, all ICs are SMD, not DIL. I will try the Manhattan approach. \$\endgroup\$ Mar 22, 2020 at 12:01
  • 3
    \$\begingroup\$ Allowing tracks through a ground area is functionally the same as leaving the ground until last, which I do not recommend. The ground gets turned into a lace curtain, with no guarantee of connectivity, and then has to be repaired where necessary. However, where necessary is now difficult to fathom, and it's difficult to fix, with a completely routed board. \$\endgroup\$
    – Neil_UK
    Mar 22, 2020 at 14:12
  • \$\begingroup\$ So far I did always GND to bottom layer first (but I only did a few much simpler boards, just to try, never let them manufacture), but I will try it with your way. \$\endgroup\$ Mar 22, 2020 at 15:24
  • \$\begingroup\$ If you draw the ground rectangle first and disallow isolated polygons, then it will quickly become clear if you sever some portion of the rectangle from the other, as you'll no longer have any fill there. \$\endgroup\$
    – Doktor J
    Mar 24, 2020 at 13:18
  • \$\begingroup\$ @DoktorJ Unfortunately what the tool means by 'no isolated polygons' isn't the same as what electronic engineers mean by 'the ground plane not being turned into a lace curtain'. It's not just RF boards that need ground actually under the tracks that are carrying signal, plenty of low frequency and DC boards need to keep currents out of ground connections that generate stray voltages where they shouldn't, pure continuity is insufficient. Trying to spot that after the board has got complex is difficult and error-prone. Fix a good ground first, and don't mess with it. \$\endgroup\$
    – Neil_UK
    Mar 24, 2020 at 13:27
7
\$\begingroup\$

While a two layer board is probably appropriate here, when doing one off designs the cost to go from 2 to 4 layers is often less than shipping. If your goal was to have a dedicated ground plane, and you don't want to spend a lot of time routing efficiently, using a 4 layer board would allow you to have a dedicated ground plane while greatly simplifying routing.

Things are a little up in the air right now due to corona virus, but I just punched in a 4 layer 100x100 mm board into a cheap prototyping service and it came back less than $30. I used to spend hours trying to fit parts onto 2 layers to save on 4 layer boards when they were hundreds of dollars extra, but costs have come down so far it's often not worth the time.

\$\endgroup\$
5
  • \$\begingroup\$ I will check for a 4 layer board, although on the other hand, so many people advise using manual routing, and since my main goal is learning electronics a bit better, that I will try a 2 layer board, but good to know I should consider a 4 layer board if I cannot get or done, or better, for a future even more complicated board. \$\endgroup\$ Mar 22, 2020 at 21:48
  • 4
    \$\begingroup\$ @MichelKeijzers I don't think going to 4 layers is going to let you avoid the need to manually route at least some of the board. It just makes it a lot quicker to do, and often results in better routing since you can have dedicated power/gnd planes. \$\endgroup\$ Mar 22, 2020 at 21:50
  • 1
    \$\begingroup\$ Yes that is true as well ... maybe I should try both ways, just as an exercise. \$\endgroup\$ Mar 22, 2020 at 21:51
  • 2
    \$\begingroup\$ Really, the only reason to minimise the number of layers are cost. And from 2 to 4, the cost increase is marginal, so I would suggest 4. Having a big power and ground plane makes the circuit perform better, to put it simply \$\endgroup\$
    – MrGerber
    Mar 23, 2020 at 20:30
  • \$\begingroup\$ @MrGerber I checked but it means more than doubling of the price ... and it's just for a hobby project, not even sure if I ever can solder it manually. \$\endgroup\$ Mar 23, 2020 at 20:50
5
\$\begingroup\$

As you have found, autorouting is not a cure-all and requires a lot of up front planning for success for all but the most trivial of designs.

The planning is very much the same (but more rigorous) as the normal planning for any dense or complex board.

Set up functional blocks (I do not know if Circuit Maker permits this although it is a fairly standard part of any ECAD package these days) and place them as separate blocks (not necessarily in their final locations) and tweak any pins possible (by moving parts around within the block and / or gate swapping or function swapping as in the case of multiple amplifiers in a package) until the rats nest is the cleanest you can get for each functional block.

Then look at the interfaces between these blocks and move the blocks around to get those connections in the rats nest as clean as possible.

When you look at the time taken here, the time to route is really not that much higher doing it manually than letting the autorouter do its thing.

There are areas where autorouters do excel (high speed parallel memory interfaces with strict timing constraints come to mind); I have seen those done (as a limited set of nets for the autorouter to touch) in some circumstances. usually those nets are then locked so that once almost everything else is done you can let the autorouter do the last few tracks.

I once did a board (18 layers in that case, 95mm x 55mm) that was a GHz class PowerPC processor with 512MB DDR2 and 512MB flash (and some other bits) that exposed serial ports, PCI and PCI express to the connectors and had very complex power and sequencing requirements and we (it was a team) spent at least a week just planning the location of parts to make everything fit.

\$\endgroup\$
1
  • \$\begingroup\$ I will check if CircuitMaker has functional blocks ... I divided my circuit in more than 10 different pages, but I'm not sure if it can be done on a PCB. However, I manually moved all components belonging together in their own virtual area. Thanks for all the tips and ideas. In my case I'm afraid I have a lot of 'interfacing' between each functional block (e.g. both analog and digital signals). Luckily I don't really have buses (like you mention with serial ports, PCI express etc). I will also check if I should use buses for SPI for example. \$\endgroup\$ Mar 22, 2020 at 21:47
3
\$\begingroup\$

Depending on the purpose of the board and whether or not you expect it to pass certain compliance tests, it may not be necessary to have an entire layer be ground. In many cases it can suffice to route the board with traces on both sides and then fill the empty area with copper connected to ground (many CAD programs have a command to do this automatically, typically called something like Copper Fill or Polygon Pour, but I'm not familiar with what it is in CircuitMaker). It seems like the traces on your board could end up being fairly sparse, meaning you could still have a nice, low-impedance ground using the copper fill.

I would suggest removing the ground layer as you have it now, routing the board (typically manual routing produces higher-quality results but work at your discretion), then filling the empty areas with copper, using vias to bridge connections between isolated polygons.

\$\endgroup\$
3
  • \$\begingroup\$ I did a copper pour on the bottom (It's in CircuitMaker). The problem is that auto routing didn't succeed, while I have seen (at least at a glance) much more complicated boards. \$\endgroup\$ Mar 22, 2020 at 12:03
  • 1
    \$\begingroup\$ @MichelKeijzers Exactly - you want to remove the copper pour first, so that the autorouter can route in that space. Then fill the area with copper after routing has been completed. \$\endgroup\$ Mar 22, 2020 at 19:13
  • \$\begingroup\$ Thanks ... that's what I did ... seems the errors I get were from inner-IC clearances. \$\endgroup\$ Mar 22, 2020 at 21:43
3
\$\begingroup\$

You probably gave the autorouter an impossible task. You are reserving the entire bottom plane for ground. Without access to a second plane, the router cannot make vias cross over. This means nonplanar circuits will be impossible to route (actually, you could route a nonplanar circuit if the only "nonplanar part" is the ground plane).

To route this board, you will probably need to use the bottom plane to make vias cross over. If your routing is well done, this will be kept to a minimum. If you just give the autorouter access to the bottom layer it should succeed, but your supply paths will probably be... subpar.


Now, for the mandatory "autorouters suck" part of the answer. First of all, this nonplanar thing would have been obvious to you if you tried routing by hand.

As a rule of thumb, autorouters should be used to save time on easy and boring parts of routing. Autorouters will do a terrible job when components are not well placed, and tend to screw up the power and ground paths.

In general, you should ensure the component placing is good, route the supply paths manually, and only then consider autorouting. However, a board with bad component placing should still be routable if you just make it oversized. I call this "suburb routing" :-). IMO your board is already big and routing on two layers should be easy.

I personally only had a good experience using the autorouter on 4 layer boards to route several low speed digital signals on the inner layers. For 1 or 2 layer boards, the autorouter will only work after I finally reach good component placement and route critical traces by hand. At that point, it doesn't save me that much work.

\$\endgroup\$
6
  • \$\begingroup\$ Thanks for this comment... Actually I let the autorouter use the bottom plane too, but I crossed an option in the autorouter to 'Rip-up Violations After Routing. However, I got errors, see: electronics.stackexchange.com/questions/487449/… and because of that it throwed away a lot of traces, which I thought were problematic but they are not. \$\endgroup\$ Mar 23, 2020 at 15:55
  • \$\begingroup\$ I will update my question \$\endgroup\$ Mar 23, 2020 at 15:55
  • 1
    \$\begingroup\$ well, in that case you gave the autorouter an even impossibler task: "route this board, which contains components with design rule violations, without design rules violations" \$\endgroup\$
    – FrancoVS
    Mar 23, 2020 at 16:50
  • \$\begingroup\$ Maybe … but those are existing (not self created) components, and there is no way (that I know) to get rid of those violations except ignoring them. Altium has an option for this ('ignore Pad to Pad clearances within a footprint' but CircuitMaker does not). \$\endgroup\$ Mar 23, 2020 at 16:54
  • 1
    \$\begingroup\$ I'm not familiar with CircuitMaker. However, your footprints seem pretty conservative. Which ones don't obey the clearances? Perhaps you should reevaluate your clearances? In your other post, it seems you are using 10mils... do you really need that? \$\endgroup\$
    – FrancoVS
    Mar 23, 2020 at 17:17
2
\$\begingroup\$

Instead of trying to have a layer be mostly ground, I'd suggest drawing a pair of vertical power and ground lines at roughly 1-2 inch intervals on the top layer (probably one under each column of chips, and one halfway between columns of chips), and draw pairs of horizontal power and ground lines at similar intervals (perhaps immediately above and below each column of chips). Stitch the lines with a via at each intersection. Auto-routing should then be relatively straightforward. Routes will end up with lots of vias, but your board looks like the vertical and horizontal channels would be wide enough to carry the necessary signals.

Using this style of routing will probably require that components be placed less densely than would be necessary if using a multi-layer board, but it looks like your components are already spaced pretty widely. I don't know whether modern auto-routers would start out trying to do this, but putting horizontals on the bottom layer would allow an auto-router to lay out vias for each chip as four columns with 100mil spacing, which would leave lots of room for horizontal routing between vias on the back side. There may not be a huge amount of room under chips for vertical routing, but there should be enough for power and ground.

BTW, if space permits, it may be helpful to start out layout the board with two power and two ground nets, one of which uses the vertical tracks that run through the centers of the chips, and one of which uses the vertical tracks that run between chips. Connect power and ground supply pins to the former net and strapped signal pins to the latter. Connect the nets after routing. This will ensure that the strapping for the pins will be accessible somewhere in case it's necessary to break the power/ground connection to those pins and connect them to something else.

\$\endgroup\$
4
  • \$\begingroup\$ Thanks for this tips … I need to read them a few times more to see how I exactly can do it, but it seems a good idea. The reason I put the components not too close is that I'm not that comfortable (yet) with SMD soldering so this is a ' huge' hobby project for me. And another reason is that it needs to be in an enclosure that's around 7x5" (this version), otherwise I have to go down to about 4x4" which will be too dense. \$\endgroup\$ Mar 23, 2020 at 16:03
  • 1
    \$\begingroup\$ @MichelKeijzers: Auto-routers can do fine if there's enough space around components, and if one doesn't care about minimizing the number of vias. When manually routing a board, one often manage to keep a lot of connections entirely on one side of the board. An old-fashioned "Manhattan" auto-router won't even try in many cases. Instead, it will treat the board as a mesh and assume that each mesh has a certain capacity. It will then assign tracks to mesh segments, and simply lay out tracks side by side in each segment, and then place vias as appropriate. Newer auto-routers are of course... \$\endgroup\$
    – supercat
    Mar 23, 2020 at 17:06
  • 1
    \$\begingroup\$ ...much more sophisticated than that, but the basic approach would allow even rather primitive computers from the 1970s to handle rather complicated board tasks if given sufficient room for routing, and if vias weren't an issue. \$\endgroup\$
    – supercat
    Mar 23, 2020 at 17:08
  • \$\begingroup\$ I will try this week (in my free time) gather all tips and probably try to manually route it myself, to learn from it, and to get a much better board (layout) and routing. \$\endgroup\$ Mar 23, 2020 at 17:29

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.