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 : [email protected] > 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 : [email protected] Unsubscribe : https://launchpad.net/~kicad-developers More help : https://help.launchpad.net/ListHelp

