// file: phys_48_pin_geom // // Original Date: 8-Mar-2015 // // 21-Apr-2016 Stable correct version // // 13-Sep-2016 Move the backside metal for the center thermal/gnd // pad from Breakout_2 to Sheet_Dielectric_1. // Handling of the backside metal is described in // the Hub trace routing details file. // // 10-Dec-2016 To the Pin/Pad Stack for the Center Thermal Pad Via // geometry add a 0.28 mm diameter flash on PREPREG_5 // to indicate the location of a Via that needs to be // Plugged from the Top. This works because in the Hub // design the Phys_48_pin_geom package is only instanced // on the top side of the card. // // // // // This geometry is for the KSZ9031RNX Micrel Phys. // // // Package and PCB Layout Data from Micrel with a few comments: // // This is a 48 pin part with 12 pins per side. // // There is also an Exposed Pad with 4 thermal / ground vias. // These bring the pin count up to 52 // // This is a 48 pin QFN package. // - pin pitch is 0.50 mm // - width of the pkg pins is 0.25 mm nominal // - length of the pkg pins is 0.40 mm nominal // - edges of the plastic package are 7.00 mm square. // // // The external edges of the PCB pads are 7.30 mm square. // The internal edges of the PCB pads are 6.30 mm square. // --> pcb pads are 0.50 mm long // --> pcb pads go in towards the center for 0.35 from the pgk edge // --> pcb pads go out from pkg edge for only 0.15 mm // // The size of the Exposed Package Terminal is 3.50 mm by 3.50 mm. // The size of the Pad for the Exposed Term is 3.00 mm by 3.00 mm. // and has 4 rivets to the Ground Planes. Note that the PCB Pad // is smaller than the devices Exposed Terminal. // // There are 4 openings in the Paste_Mask (aka Solder Stencil). // Each of these square openings is 0.94 mm on a side, // The pitch of these Paste Mask openings is 1.25 mm // and inconsistently they say this give 0.25 mm between openings. // // The Thermal Land is 3 mm by 3 mm or 9 sq mm. // The Paste Mask openings are each 0.94 mm by 0.94 mm or 0.8836 sq mm. // Thus the total Paste Mask opening area is only 39% of this Land area. // // // Problems with the Micrel PCB design: // // - This Micrel PCB design is quite different than the IPC standards. // // - Micrel has very small signal pads on the PCB they go out // past the package edge for only 0.15 mm and they do not // go in twards the center as far as the package pad, i.e. // there is a nominal 0.05mm of package pad that does not // have a matching PCB pad land. // // --> So change the Micrel design to be more IPC like: // use 0.25 mm wide 0.70 mm long pads with their // centers at 3.40 mm from the package center line. // This give PCB pad for 0.25 mm out past the package edge // and the PCB pad goes in 0.05 mm further towards the // center of the package than the package pad. // // The signal pin pads are 0.25 mm by 0.70 mm. // // // - Another issue with the Micrel design is that its package // Exposed Pad is 3.50 x 3.50 but its PCB Thermal Land // is only 3.00 x 3.00 mm. // // Why did they do this. Everything else seems to have a // close match between Package Exposed Pad and PCB Thermal Land. // // // - Another issue with the Micrel design is that their 0.93 by // 0.93 mm windows in the Solder Stencil gives only 39% // of the open area of the PCB Thermal Land. // // --> So for now change this to 1.0 x 1.0 mm windows just as // a marker that I know there is a problem here. 1.0 x 1.0 // 1.0 x 1.0 mm windows gives 44% solder coverage which // is still lower than most other setups that I see. // // // - Another issue with the Micrel design is that they do // nothing to control wicking from the pcb thermal land // back into its thermal / ground vias. // // // // // This geometry has been written with pin #1 in the upper // left-hand corner aka the North-West corner. // // // First define SMD pad pinstacks and then start the 48 pin geometry. // $abort_enable = @false; $$lock_windows(@on) ; $$snap_diagonal(@off) ; $$snap_orthogonal(@off) ; //---------------------------------------------------------------------------- $$create_pin("PHYS_HORZ_PAD", @replace); $$page(0.0,0.0,0.0, @mm, 0.0, 0.0, [0.0, 0.0, 'PI$PHYS_HORZ_PAD']); $$point_mode(@vertex); $$polygon( "PAD", , [ 0.35, 0.13, -0.35, 0.13, -0.35, -0.13, 0.35, -0.13 ] ); $$polygon( "SOLDER_MASK", , [ 0.39, 0.17, -0.39, 0.17, -0.39, -0.17, 0.39, -0.17 ] ); $$polygon( "PASTE_MASK", , [ 0.35, 0.13, -0.35, 0.13, -0.35, -0.13, 0.35, -0.13 ] ); $$attribute( "TERMINAL_SURFACE_DEFINITION", ""); //---------------------------------------------------------------------------- $$create_pin("PHYS_VERT_PAD", @replace); $$page(0.0,0.0,0.0, @mm, 0.0, 0.0, [0.0, 0.0, 'PI$PHYS_VERT_PAD']); $$point_mode(@vertex); $$polygon( "PAD", , [ 0.13, 0.35, -0.13, 0.35, -0.13, -0.35, 0.13, -0.35 ] ); $$polygon( "SOLDER_MASK", , [ 0.17, 0.39, -0.17, 0.39, -0.17, -0.39, 0.17, -0.39 ] ); $$polygon( "PASTE_MASK", , [ 0.13, 0.35, -0.13, 0.35, -0.13, -0.35, 0.13, -0.35 ] ); $$attribute( "TERMINAL_SURFACE_DEFINITION", ""); //---------------------------------------------------------------------------- // // Thermal/Ground Plated Through Hole Pin/Pad Stack // // for connecting the PCB Thermal Land to its internal Ground Planes // // 0.30 mm drill // 0.60 mm pad land // 0.70 mm soldermask opening On the Bottom Side #2 Only // 0.90 mm plane relief // 0.28 mm PrePreg_5 flash to indicate a // via that is plugged from the top // // // --> the thickness of the donut wall is 0.150 mm // --> the clearance from pad land to plane 0.150 mm // --> the clearance from drill hole to plane 0.325 mm // --> the thickness of the Gnd Plane web is 0.225 mm for 1.125 mm spaced pins // // Note that the design of this plated through hole tries to keep // the plane relief moderately small so that the webs in the planes // will be as thick as practical. The Ground Planes in the area // under the Phys Chips will flood these Thermal/Ground Plated // Through Holes and will thus be as effective as possible in // carrying away the heat an providing a stiff electrical connection. // There is plenty of clearance between the drill hole wall and the // other planes ( 0.325 mm). There is only 0.150 mm clearance // between a pad and the other planes but this condition is not // exected to actually ever exist ( i.e. pads are not flashed on // layers were no connection is made to these Plated Through Holes ). $$create_pin("Phys_Thermal_PTH", @replace); $$page(0.0,0.0,0.0, @mm, 0.0, 0.0, [0.0, 0.0, 'PI$Phys_Thermal_PTH']); $$point_mode(@vertex); $$attribute( "TERMINAL_THRUHOLE_DEFINITION", ""); $$attribute( "TERMINAL_DRILL_SIZE", "", , @scale , , [ 0.30, 0.0 ]); $$circle( "PAD", 0.0, 0.0, 0.60, 0.0); $$circle( "SIGNAL", 0.0, 0.0, 0.60, 0.0); $$circle( "SOLDER_MASK_2", 0.0, 0.0, 0.70, 0.0); $$circle( "POWER", 0.0, 0.0, 0.90, 0.0); $$circle( "PREPREG_5", 0.0, 0.0, 0.28, 0.0 ); //---------------------------------------------------------------------------- // // Now start the Phys 48 Pin geometry // $$create_component("PHYS_48", @replace); $$page(0.0,0.0,0.0, @mm, 0.0, 0.0, [0.0, 0.0, 'CO$PHYS_48']); $$point_mode(@vertex); $$attribute( "COMPONENT_LAYOUT_TYPE", "surface"); $$attribute( "COMPONENT_LAYOUT_SURFACE", "both"); $$attribute( "COMPONENT_HEIGHT", "1.20", , @scale , , [0.0, 0.0] ); // // Component Outline // $$initial([ 3.90, 3.90 ], , @nosnap ); $$terminal([ -3.90, 3.90 ]); $$terminal([ -3.90, -3.90 ]); $$terminal([ 3.90, -3.90 ]); $$terminal([ 3.90, 3.90 ]); $$attribute( "COMPONENT_PLACEMENT_OUTLINE", "", @mark, @scale ); // // Silkscreen // $$path( "SILKSCREEN", 0.20 , , [ -4.00, 4.00, 4.00, 4.00 ] ); $$path( "SILKSCREEN", 0.20 , , [ -4.00, -4.00, 4.00, -4.00 ] ); $$path( "SILKSCREEN", 0.20 , , [ -4.00, 4.00, -4.00, -4.00 ] ); $$path( "SILKSCREEN", 0.20 , , [ 4.00, 4.00, 4.00, -4.00 ] ); // // Pin #1 Marker // $$circle( "SILKSCREEN_1", -4.4, 4.4, 0.5, 0.20 ); $$circle( "SILKSCREEN_1", -4.4, 4.4, 0.3, 0.20 ); // // Reference Designator // $$text( "SILKSCREEN", "^$ref", 0.0, 0.0, 2.5, @CC, 0, 0.7, 0.20, "std", "None", 0.0, 0.0 ); // // Now include the Thermal / Ground Land on the Top side // // and Bottom side copper for Thermal / Ground connections. // // Notes: Currently the 4 Thermal / Ground Vias in the Thermal / Ground // Land are not blocked with Solder Mask so they could wick // the solder away from the exposed pad on the Phys chip. // // There are 4 openings in the Paste_Mask (aka Solder Stencil). // Each of these square openings is 0.94 mm on a side, // The pitch of these Paste Mask openings is 1.25 mm // // The Thermal Land is 3 mm by 3 mm or 9 sq mm. // The Paste Mask openings are each 0.94 mm by 0.94 mm or 0.8836 sq mm. // Thus the total Paste Mask opening area is only 39% of this Land area. // $$polygon( "BREAKOUT_1", , [ 1.50, 1.50, -1.50, 1.50, -1.50, -1.50, 1.50, -1.50 ] ); $$polygon( "SHEET_DIELECTRIC_1", , [ 1.50, 1.50, -1.50, 1.50, -1.50, -1.50, 1.50, -1.50 ] ); $$polygon( "SOLDER_MASK", , [ 1.55, 1.55, -1.55, 1.55, -1.55, -1.55, 1.55, -1.55 ] ); $$polygon( "PASTE_MASK", , [ 1.13, 1.13, 0.13, 1.13, 0.13, 0.13, 1.13, 0.13 ] ); $$polygon( "PASTE_MASK", , [ -0.13, 1.13, -1.13, 1.13, -1.13, 0.13, -0.13, 0.13 ] ); $$polygon( "PASTE_MASK", , [ -0.13, -0.13, -1.13, -0.13, -1.13, -1.13, -0.13, -1.13 ] ); $$polygon( "PASTE_MASK", , [ 1.13, -0.13, 0.13, -0.13, 0.13, -1.13, 1.13, -1.13 ] ); // // Setup the Local Fiducial Marks // //$$circle( "PAD_1", 11.50, 11.50, 1.0, 0.0); //$$circle( "SOLDER_MASK_1", 11.50, 11.50, 1.3, 0.0); //$$circle( "PAD_1", 11.50, -11.50, 1.0, 0.0); //$$circle( "SOLDER_MASK_1", 11.50, -11.50, 1.3, 0.0); //$$circle( "PAD_1", -11.50, -11.50, 1.0, 0.0); //$$circle( "SOLDER_MASK_1", -11.50, -11.50, 1.3, 0.0); //$$circle( "PAD_1", -11.50, 11.50, 1.0, 0.0); //$$circle( "SOLDER_MASK_1", -11.50, 11.50, 1.3, 0.0); // // ========================================================== // // // Now list the physical pins // // // Pins 1:12 // $$attribute( "COMPONENT_PIN_DEFINITION", "1", , @scale , , [ -3.40, 2.75 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "1, PHYS_HORZ_PAD"); $$attribute( "COMPONENT_PIN_DEFINITION", "2", , @scale , , [ -3.40, 2.25 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "2, PHYS_HORZ_PAD"); $$attribute( "COMPONENT_PIN_DEFINITION", "3", , @scale , , [ -3.40, 1.75 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "3, PHYS_HORZ_PAD"); $$attribute( "COMPONENT_PIN_DEFINITION", "4", , @scale , , [ -3.40, 1.25 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "4, PHYS_HORZ_PAD"); $$attribute( "COMPONENT_PIN_DEFINITION", "5", , @scale , , [ -3.40, 0.75 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "5, PHYS_HORZ_PAD"); $$attribute( "COMPONENT_PIN_DEFINITION", "6", , @scale , , [ -3.40, 0.25 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "6, PHYS_HORZ_PAD"); $$attribute( "COMPONENT_PIN_DEFINITION", "7", , @scale , , [ -3.40, -0.25 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "7, PHYS_HORZ_PAD"); $$attribute( "COMPONENT_PIN_DEFINITION", "8", , @scale , , [ -3.40, -0.75 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "8, PHYS_HORZ_PAD"); $$attribute( "COMPONENT_PIN_DEFINITION", "9", , @scale , , [ -3.40, -1.25 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "9, PHYS_HORZ_PAD"); $$attribute( "COMPONENT_PIN_DEFINITION", "10", , @scale , , [ -3.40, -1.75 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "10, PHYS_HORZ_PAD"); $$attribute( "COMPONENT_PIN_DEFINITION", "11", , @scale , , [ -3.40, -2.25 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "11, PHYS_HORZ_PAD"); $$attribute( "COMPONENT_PIN_DEFINITION", "12", , @scale , , [ -3.40, -2.75 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "12, PHYS_HORZ_PAD"); // // Pins 13:24 // $$attribute( "COMPONENT_PIN_DEFINITION", "13", , @scale , , [ -2.75, -3.40 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "13, PHYS_VERT_PAD"); $$attribute( "COMPONENT_PIN_DEFINITION", "14", , @scale , , [ -2.25, -3.40 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "14, PHYS_VERT_PAD"); $$attribute( "COMPONENT_PIN_DEFINITION", "15", , @scale , , [ -1.75, -3.40 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "15, PHYS_VERT_PAD"); $$attribute( "COMPONENT_PIN_DEFINITION", "16", , @scale , , [ -1.25, -3.40 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "16, PHYS_VERT_PAD"); $$attribute( "COMPONENT_PIN_DEFINITION", "17", , @scale , , [ -0.75, -3.40 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "17, PHYS_VERT_PAD"); $$attribute( "COMPONENT_PIN_DEFINITION", "18", , @scale , , [ -0.25, -3.40 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "18, PHYS_VERT_PAD"); $$attribute( "COMPONENT_PIN_DEFINITION", "19", , @scale , , [ 0.25, -3.40 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "19, PHYS_VERT_PAD"); $$attribute( "COMPONENT_PIN_DEFINITION", "20", , @scale , , [ 0.75, -3.40 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "20, PHYS_VERT_PAD"); $$attribute( "COMPONENT_PIN_DEFINITION", "21", , @scale , , [ 1.25, -3.40 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "21, PHYS_VERT_PAD"); $$attribute( "COMPONENT_PIN_DEFINITION", "22", , @scale , , [ 1.75, -3.40 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "22, PHYS_VERT_PAD"); $$attribute( "COMPONENT_PIN_DEFINITION", "23", , @scale , , [ 2.25, -3.40 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "23, PHYS_VERT_PAD"); $$attribute( "COMPONENT_PIN_DEFINITION", "24", , @scale , , [ 2.75, -3.40 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "24, PHYS_VERT_PAD"); // // Pins 25:36 // $$attribute( "COMPONENT_PIN_DEFINITION", "25", , @scale , , [ 3.40, -2.75 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "25, PHYS_HORZ_PAD"); $$attribute( "COMPONENT_PIN_DEFINITION", "26", , @scale , , [ 3.40, -2.25 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "26, PHYS_HORZ_PAD"); $$attribute( "COMPONENT_PIN_DEFINITION", "27", , @scale , , [ 3.40, -1.75 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "27, PHYS_HORZ_PAD"); $$attribute( "COMPONENT_PIN_DEFINITION", "28", , @scale , , [ 3.40, -1.25 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "28, PHYS_HORZ_PAD"); $$attribute( "COMPONENT_PIN_DEFINITION", "29", , @scale , , [ 3.40, -0.75 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "29, PHYS_HORZ_PAD"); $$attribute( "COMPONENT_PIN_DEFINITION", "30", , @scale , , [ 3.40, -0.25 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "30, PHYS_HORZ_PAD"); $$attribute( "COMPONENT_PIN_DEFINITION", "31", , @scale , , [ 3.40, 0.25 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "31, PHYS_HORZ_PAD"); $$attribute( "COMPONENT_PIN_DEFINITION", "32", , @scale , , [ 3.40, 0.75 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "32, PHYS_HORZ_PAD"); $$attribute( "COMPONENT_PIN_DEFINITION", "33", , @scale , , [ 3.40, 1.25 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "33, PHYS_HORZ_PAD"); $$attribute( "COMPONENT_PIN_DEFINITION", "34", , @scale , , [ 3.40, 1.75 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "34, PHYS_HORZ_PAD"); $$attribute( "COMPONENT_PIN_DEFINITION", "35", , @scale , , [ 3.40, 2.25 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "35, PHYS_HORZ_PAD"); $$attribute( "COMPONENT_PIN_DEFINITION", "36", , @scale , , [ 3.40, 2.75 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "36, PHYS_HORZ_PAD"); // // Pins 37:48 // $$attribute( "COMPONENT_PIN_DEFINITION", "37", , @scale , , [ 2.75, 3.40 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "37, PHYS_VERT_PAD"); $$attribute( "COMPONENT_PIN_DEFINITION", "38", , @scale , , [ 2.25, 3.40 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "38, PHYS_VERT_PAD"); $$attribute( "COMPONENT_PIN_DEFINITION", "39", , @scale , , [ 1.75, 3.40 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "39, PHYS_VERT_PAD"); $$attribute( "COMPONENT_PIN_DEFINITION", "40", , @scale , , [ 1.25, 3.40 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "40, PHYS_VERT_PAD"); $$attribute( "COMPONENT_PIN_DEFINITION", "41", , @scale , , [ 0.75, 3.40 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "41, PHYS_VERT_PAD"); $$attribute( "COMPONENT_PIN_DEFINITION", "42", , @scale , , [ 0.25, 3.40 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "42, PHYS_VERT_PAD"); $$attribute( "COMPONENT_PIN_DEFINITION", "43", , @scale , , [ -0.25, 3.40 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "43, PHYS_VERT_PAD"); $$attribute( "COMPONENT_PIN_DEFINITION", "44", , @scale , , [ -0.75, 3.40 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "44, PHYS_VERT_PAD"); $$attribute( "COMPONENT_PIN_DEFINITION", "45", , @scale , , [ -1.25, 3.40 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "45, PHYS_VERT_PAD"); $$attribute( "COMPONENT_PIN_DEFINITION", "46", , @scale , , [ -1.75, 3.40 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "46, PHYS_VERT_PAD"); $$attribute( "COMPONENT_PIN_DEFINITION", "47", , @scale , , [ -2.25, 3.40 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "47, PHYS_VERT_PAD"); $$attribute( "COMPONENT_PIN_DEFINITION", "48", , @scale , , [ -2.75, 3.40 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "48, PHYS_VERT_PAD"); // // ======================================== // // Pins 49:52 Exposed Thermal / Ground Pad $$attribute( "COMPONENT_PIN_DEFINITION", "49", , @scale , , [ 0.63, 0.63 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "49, Phys_Thermal_PTH"); $$attribute( "COMPONENT_PIN_DEFINITION", "50", , @scale , , [ -0.63, 0.63 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "50, Phys_Thermal_PTH"); $$attribute( "COMPONENT_PIN_DEFINITION", "51", , @scale , , [ -0.63, -0.63 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "51, Phys_Thermal_PTH"); $$attribute( "COMPONENT_PIN_DEFINITION", "52", , @scale , , [ 0.63, -0.63 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "52, Phys_Thermal_PTH");