With the attached patch, the router fully supports both routing over/under blind/buried vias and shoving them, but cannot yet add new blind vias.
The current code cannot distinguish between blind vias and microvias. It uses a simple heuristic: if a via goes from the top to the bottom it must be a through-board via, otherwise blind/buried. This means that when a microvia is shoved, it's silently converted to a regular blind via. This may be the time for a discussion of why microvias are considered "special" compared to normal blind vias. I'm working on a board now that uses layer 1-2 and 1-3 microvias. These are implemented at the fab by drilling from layer 2-3 anywhere that a layer 1-3 via is needed, then laminating layer 1 and drilling from 1-2 anywhere that either 1-2 or 1-3 vias are used. In other words, real microvias (when using a stacked process) can go to layers other than 2 and N-1. If this is the only distinction between microvias and blind vias in KiCAD, I propose eliminating the microvia entity entirely. There could perhaps be a DRC mode to only allow blind vias between specific layer pairs if you're targeting a process with a limited number of microvia layers. On Tue, 2014-07-22 at 12:16 -0400, Andrew Zonenberg wrote: > I've already fixed item 2 in a pending patch (three-line change to > PNS_ROUTER::syncVia, works experimentally but not heavily tested). > > With any luck there will be a fix for 3 soon as well. 1 will be more > work and I'm not sure I have time to patch that right now. > > On Tue, 2014-07-22 at 17:37 +0200, Tomasz Wlostowski wrote: > > On 22.07.2014 17:32, Andrew Zonenberg wrote: > > > I've found three problems so far: > > > > > > 1) Pressing the "insert blind via" key when using the push-and-shove > > > router does not actually add a blind via. > > > > > > 2) In both "avoid" and "shove" mode, the router treats blind vias as > > > through-board vias and will move or avoid them even if there's no real > > > collision (for example, routing a layer 4 trace under a blind layer 1-2 > > > via doesn't work). I've been mitigating this by drawing the portion of > > > the track that goes under a blind via by hand, but all of the mode > > > switching is awkward. > > > > > > 3) When a blind via is moved by the router in "shove" mode, it is > > > converted to a through-board via. > > > > Hi Andrew, > > > > There's no support yet for blind/buried vias in the P&S. We may add it > > in the near future. > > > > Regards, > > Tom > > > > _______________________________________________ > Mailing list: https://launchpad.net/~kicad-developers > Post to : kicad-developers@lists.launchpad.net > Unsubscribe : https://launchpad.net/~kicad-developers > More help : https://help.launchpad.net/ListHelp -- Andrew Zonenberg PhD student, security group Computer Science Department Rensselaer Polytechnic Institute http://colossus.cs.rpi.edu/~azonenberg/
=== modified file 'pcbnew/router/pns_router.cpp' --- pcbnew/router/pns_router.cpp 2014-07-09 14:57:01 +0000 +++ pcbnew/router/pns_router.cpp 2014-07-22 16:40:01 +0000 @@ -227,9 +227,12 @@ PNS_ITEM* PNS_ROUTER::syncVia( VIA* aVia ) { + LAYER_ID top, bottom; + aVia->LayerPair(&top, &bottom); + PNS_VIA* v = new PNS_VIA( aVia->GetPosition(), - PNS_LAYERSET( 0, MAX_CU_LAYERS - 1 ), + PNS_LAYERSET( top, bottom), aVia->GetWidth(), aVia->GetDrillValue(), aVia->GetNetCode() ); @@ -759,8 +762,23 @@ via_board->SetWidth( via->Diameter() ); via_board->SetDrill( via->Drill() ); via_board->SetNetCode( via->Net() ); - via_board->SetLayerPair( ToLAYER_ID( m_settings.GetLayerTop() ), - ToLAYER_ID( m_settings.GetLayerBottom() ) ); + via_board->SetLayerPair( ToLAYER_ID( via->Layers().Start() ), + ToLAYER_ID( via->Layers().End() ) ); + + //If we're on all layers of the board, we must be a through via + if( (via->Layers().Start() == m_settings.GetLayerTop()) && + (via->Layers().End() == m_settings.GetLayerBottom()) + ) + { + via_board->SetViaType(VIA_THROUGH); + } + + //Otherwise we're a blind/buried via or microvia. + //There's no way to tell without adding extra fields to the PNS_VIA class so for now, guess blind/buried. + //Note that shoved microvias will be converted silently to blind/buried vias of the same size until fixed. + else + via_board->SetViaType(VIA_BLIND_BURIED); + newBI = via_board; break; }
signature.asc
Description: This is a digitally signed message part
_______________________________________________ Mailing list: https://launchpad.net/~kicad-developers Post to : kicad-developers@lists.launchpad.net Unsubscribe : https://launchpad.net/~kicad-developers More help : https://help.launchpad.net/ListHelp