# Hey emacs: -*- m4 -*- # COPYRIGHT # # PCB, interactive printed circuit board design # Copyright (C) 1994,1995,1996 Thomas Nau # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # # Contact addresses for paper mail and Email: # Thomas Nau, Schlehenweg 15, 88471 Baustetten, Germany # Thomas.Nau@rz.uni-ulm.de # # RCS: $Id: xilinx_bga.inc,v 1.1 2006/05/09 14:31:59 mark_cianfaglione Exp $ # # BGA packages # (C) 2002 Mike Jarabek # # Numbers from: http://www.pcdmag.com/resources/smt/ # # # Some BGA packages from Xilinx # $1: canonical name # $2: name on PCB # $3: value # $4: pkg code (eg. FG900, FG1152.. etc) define(`PIN_LETTERS',`A B C D E F G H J K L M N P R T U V W Y AAABACADAEAFAGAHAJAKALAMANAPARATAUAVAWAYBABB') define(`PIN_LETTER',`translit(substr(PIN_LETTERS,eval(($1-1)*2),2),` ')') define(`PKG_XILINX',` ifelse($4,`FG256',`define(`BGA_L',1575) define(`BGA_M',1969) define(`BGA_E',3937) define(`ROWS',16) define(`COLS',16) define(`ROW_A', `oooooooooooooooo') define(`ROW_B', `oooooooooooooooo') define(`ROW_C', `oooooooooooooooo') define(`ROW_D', `oooooooooooooooo') define(`ROW_E', `oooooooooooooooo') define(`ROW_F', `oooooooooooooooo') define(`ROW_G', `oooooooooooooooo') define(`ROW_H', `oooooooooooooooo') define(`ROW_J', `oooooooooooooooo') define(`ROW_K', `oooooooooooooooo') define(`ROW_L', `oooooooooooooooo') define(`ROW_M', `oooooooooooooooo') define(`ROW_N', `oooooooooooooooo') define(`ROW_P', `oooooooooooooooo') define(`ROW_R', `oooooooooooooooo') define(`ROW_T', `oooooooooooooooo')', $4,`FG456',`define(`BGA_L',1575) define(`BGA_M',1969) define(`BGA_E',3937) define(`ROWS',22) define(`COLS',22) define(`ROW_A',`oooooooooooooooooooooo') define(`ROW_B',`oooooooooooooooooooooo') define(`ROW_C',`oooooooooooooooooooooo') define(`ROW_D',`oooooooooooooooooooooo') define(`ROW_E',`oooooooooooooooooooooo') define(`ROW_F',`oooooooooooooooooooooo') define(`ROW_G',`oooooooooooooooooooooo') define(`ROW_H',`ooooooo ooooooo') define(`ROW_J',`ooooooo oooooo ooooooo') define(`ROW_K',`ooooooo oooooo ooooooo') define(`ROW_L',`ooooooo oooooo ooooooo') define(`ROW_M',`ooooooo oooooo ooooooo') define(`ROW_N',`ooooooo oooooo ooooooo') define(`ROW_P',`ooooooo oooooo ooooooo') define(`ROW_R',`ooooooo ooooooo') define(`ROW_T',`oooooooooooooooooooooo') define(`ROW_U',`oooooooooooooooooooooo') define(`ROW_V',`oooooooooooooooooooooo') define(`ROW_W',`oooooooooooooooooooooo') define(`ROW_Y',`oooooooooooooooooooooo') define(`ROW_AA',`oooooooooooooooooooooo') define(`ROW_AB',`oooooooooooooooooooooo')', $4,`FG676',`define(`BGA_L',1575) define(`BGA_M',1969) define(`BGA_E',3937) define(`ROWS',26) define(`COLS',26) define(`ROW_A',`oooooooooooooooooooooooooo') define(`ROW_B',`oooooooooooooooooooooooooo') define(`ROW_C',`oooooooooooooooooooooooooo') define(`ROW_D',`oooooooooooooooooooooooooo') define(`ROW_E',`oooooooooooooooooooooooooo') define(`ROW_F',`oooooooooooooooooooooooooo') define(`ROW_G',`oooooooooooooooooooooooooo') define(`ROW_H',`oooooooooooooooooooooooooo') define(`ROW_J',`oooooooooooooooooooooooooo') define(`ROW_K',`oooooooooooooooooooooooooo') define(`ROW_L',`oooooooooooooooooooooooooo') define(`ROW_M',`oooooooooooooooooooooooooo') define(`ROW_N',`oooooooooooooooooooooooooo') define(`ROW_P',`oooooooooooooooooooooooooo') define(`ROW_R',`oooooooooooooooooooooooooo') define(`ROW_T',`oooooooooooooooooooooooooo') define(`ROW_U',`oooooooooooooooooooooooooo') define(`ROW_V',`oooooooooooooooooooooooooo') define(`ROW_W',`oooooooooooooooooooooooooo') define(`ROW_Y',`oooooooooooooooooooooooooo') define(`ROW_AA',`oooooooooooooooooooooooooo') define(`ROW_AB',`oooooooooooooooooooooooooo') define(`ROW_AC',`oooooooooooooooooooooooooo') define(`ROW_AD',`oooooooooooooooooooooooooo') define(`ROW_AE',`oooooooooooooooooooooooooo') define(`ROW_AF',`oooooooooooooooooooooooooo')', $4,`FG680',`define(`BGA_L',1575) define(`BGA_M',1969) define(`BGA_E',3937) define(`ROWS',39) define(`COLS',39) define(`ROW_A',`ooooooooooooooooooooooooooooooooooooooo') define(`ROW_B',`ooooooooooooooooooooooooooooooooooooooo') define(`ROW_C',`ooooooooooooooooooooooooooooooooooooooo') define(`ROW_D',`ooooooooooooooooooooooooooooooooooooooo') define(`ROW_E',`ooooooooooooooooooooooooooooooooooooooo') define(`ROW_F',`ooooo ooooo') define(`ROW_G',`ooooo ooooo') define(`ROW_H',`ooooo ooooo') define(`ROW_J',`ooooo ooooo') define(`ROW_K',`ooooo ooooo') define(`ROW_L',`ooooo ooooo') define(`ROW_M',`ooooo ooooo') define(`ROW_N',`ooooo ooooo') define(`ROW_P',`ooooo ooooo') define(`ROW_R',`ooooo ooooo') define(`ROW_T',`ooooo ooooo') define(`ROW_U',`ooooo ooooo') define(`ROW_V',`ooooo ooooo') define(`ROW_W',`ooooo ooooo') define(`ROW_Y',`ooooo ooooo') define(`ROW_AA',`ooooo ooooo') define(`ROW_AB',`ooooo ooooo') define(`ROW_AC',`ooooo ooooo') define(`ROW_AD',`ooooo ooooo') define(`ROW_AE',`ooooo ooooo') define(`ROW_AF',`ooooo ooooo') define(`ROW_AG',`ooooo ooooo') define(`ROW_AH',`ooooo ooooo') define(`ROW_AJ',`ooooo ooooo') define(`ROW_AK',`ooooo ooooo') define(`ROW_AL',`ooooo ooooo') define(`ROW_AM',`ooooo ooooo') define(`ROW_AN',`ooooo ooooo') define(`ROW_AP',`ooooo ooooo') define(`ROW_AR',`ooooooooooooooooooooooooooooooooooooooo') define(`ROW_AT',`ooooooooooooooooooooooooooooooooooooooo') define(`ROW_AU',`ooooooooooooooooooooooooooooooooooooooo') define(`ROW_AV',`ooooooooooooooooooooooooooooooooooooooo') define(`ROW_AW',`ooooooooooooooooooooooooooooooooooooooo')', $4,`FG860',`define(`BGA_L',1575) define(`BGA_M',1969) define(`BGA_E',3937) define(`ROWS',42) define(`COLS',42) define(`ROW_A',` oooooooooooooooooooooooooooooooooooooooo ') define(`ROW_B',`oooooooooooooooooooooooooooooooooooooooooo') define(`ROW_C',`oooooooooooooooooooooooooooooooooooooooooo') define(`ROW_D',`oooooooooooooooooooooooooooooooooooooooooo') define(`ROW_E',`oooooooooooooooooooooooooooooooooooooooooo') define(`ROW_F',`oooooooooooooooooooooooooooooooooooooooooo') define(`ROW_G',`oooooo oooooo') define(`ROW_H',`oooooo oooooo') define(`ROW_J',`oooooo oooooo') define(`ROW_K',`oooooo oooooo') define(`ROW_L',`oooooo oooooo') define(`ROW_M',`oooooo oooooo') define(`ROW_N',`oooooo oooooo') define(`ROW_P',`oooooo oooooo') define(`ROW_R',`oooooo oooooo') define(`ROW_T',`oooooo oooooo') define(`ROW_U',`oooooo oooooo') define(`ROW_V',`oooooo oooooo') define(`ROW_W',`oooooo oooooo') define(`ROW_Y',`oooooo oooooo') define(`ROW_AA',`oooooo oooooo') define(`ROW_AB',`oooooo oooooo') define(`ROW_AC',`oooooo oooooo') define(`ROW_AD',`oooooo oooooo') define(`ROW_AE',`oooooo oooooo') define(`ROW_AF',`oooooo oooooo') define(`ROW_AG',`oooooo oooooo') define(`ROW_AH',`oooooo oooooo') define(`ROW_AJ',`oooooo oooooo') define(`ROW_AK',`oooooo oooooo') define(`ROW_AL',`oooooo oooooo') define(`ROW_AM',`oooooo oooooo') define(`ROW_AN',`oooooo oooooo') define(`ROW_AP',`oooooo oooooo') define(`ROW_AR',`oooooo oooooo') define(`ROW_AT',`oooooo oooooo') define(`ROW_AU',`oooooooooooooooooooooooooooooooooooooooooo') define(`ROW_AV',`oooooooooooooooooooooooooooooooooooooooooo') define(`ROW_AW',`oooooooooooooooooooooooooooooooooooooooooo') define(`ROW_AY',`oooooooooooooooooooooooooooooooooooooooooo') define(`ROW_BA',`oooooooooooooooooooooooooooooooooooooooooo') define(`ROW_BB',` oooooooooooooooooooooooooooooooooooooooo ')', $4,`FG900',`define(`BGA_L',1575) define(`BGA_M',1969) define(`BGA_E',3937) define(`ROWS',30) define(`COLS',30) define(`ROW_A',`oooooooooooooooooooooooooooooo') define(`ROW_B',`oooooooooooooooooooooooooooooo') define(`ROW_C',`oooooooooooooooooooooooooooooo') define(`ROW_D',`oooooooooooooooooooooooooooooo') define(`ROW_E',`oooooooooooooooooooooooooooooo') define(`ROW_F',`oooooooooooooooooooooooooooooo') define(`ROW_G',`oooooooooooooooooooooooooooooo') define(`ROW_H',`oooooooooooooooooooooooooooooo') define(`ROW_J',`oooooooooooooooooooooooooooooo') define(`ROW_K',`oooooooooooooooooooooooooooooo') define(`ROW_L',`oooooooooooooooooooooooooooooo') define(`ROW_M',`oooooooooooooooooooooooooooooo') define(`ROW_N',`oooooooooooooooooooooooooooooo') define(`ROW_P',`oooooooooooooooooooooooooooooo') define(`ROW_R',`oooooooooooooooooooooooooooooo') define(`ROW_T',`oooooooooooooooooooooooooooooo') define(`ROW_U',`oooooooooooooooooooooooooooooo') define(`ROW_V',`oooooooooooooooooooooooooooooo') define(`ROW_W',`oooooooooooooooooooooooooooooo') define(`ROW_Y',`oooooooooooooooooooooooooooooo') define(`ROW_AA',`oooooooooooooooooooooooooooooo') define(`ROW_AB',`oooooooooooooooooooooooooooooo') define(`ROW_AC',`oooooooooooooooooooooooooooooo') define(`ROW_AD',`oooooooooooooooooooooooooooooo') define(`ROW_AE',`oooooooooooooooooooooooooooooo') define(`ROW_AF',`oooooooooooooooooooooooooooooo') define(`ROW_AG',`oooooooooooooooooooooooooooooo') define(`ROW_AH',`oooooooooooooooooooooooooooooo') define(`ROW_AJ',`oooooooooooooooooooooooooooooo') define(`ROW_AK',`oooooooooooooooooooooooooooooo')', $4,`FG1156',`define(`BGA_L',1575) define(`BGA_M',1969) define(`BGA_E',3937) define(`ROWS',34) define(`COLS',34) define(`ROW_A',`oooooooooooooooooooooooooooooooooo') define(`ROW_B',`oooooooooooooooooooooooooooooooooo') define(`ROW_C',`oooooooooooooooooooooooooooooooooo') define(`ROW_D',`oooooooooooooooooooooooooooooooooo') define(`ROW_E',`oooooooooooooooooooooooooooooooooo') define(`ROW_F',`oooooooooooooooooooooooooooooooooo') define(`ROW_G',`oooooooooooooooooooooooooooooooooo') define(`ROW_H',`oooooooooooooooooooooooooooooooooo') define(`ROW_J',`oooooooooooooooooooooooooooooooooo') define(`ROW_K',`oooooooooooooooooooooooooooooooooo') define(`ROW_L',`oooooooooooooooooooooooooooooooooo') define(`ROW_M',`oooooooooooooooooooooooooooooooooo') define(`ROW_N',`oooooooooooooooooooooooooooooooooo') define(`ROW_P',`oooooooooooooooooooooooooooooooooo') define(`ROW_R',`oooooooooooooooooooooooooooooooooo') define(`ROW_T',`oooooooooooooooooooooooooooooooooo') define(`ROW_U',`oooooooooooooooooooooooooooooooooo') define(`ROW_V',`oooooooooooooooooooooooooooooooooo') define(`ROW_W',`oooooooooooooooooooooooooooooooooo') define(`ROW_Y',`oooooooooooooooooooooooooooooooooo') define(`ROW_AA',`oooooooooooooooooooooooooooooooooo') define(`ROW_AB',`oooooooooooooooooooooooooooooooooo') define(`ROW_AC',`oooooooooooooooooooooooooooooooooo') define(`ROW_AD',`oooooooooooooooooooooooooooooooooo') define(`ROW_AE',`oooooooooooooooooooooooooooooooooo') define(`ROW_AF',`oooooooooooooooooooooooooooooooooo') define(`ROW_AG',`oooooooooooooooooooooooooooooooooo') define(`ROW_AH',`oooooooooooooooooooooooooooooooooo') define(`ROW_AJ',`oooooooooooooooooooooooooooooooooo') define(`ROW_AK',`oooooooooooooooooooooooooooooooooo') define(`ROW_AL',`oooooooooooooooooooooooooooooooooo') define(`ROW_AM',`oooooooooooooooooooooooooooooooooo') define(`ROW_AN',`oooooooooooooooooooooooooooooooooo') define(`ROW_AP',`oooooooooooooooooooooooooooooooooo')', `define(`BGA_L',`1575') define(`BGA_M',`1969') define(`BGA_E',`3937') define(`ROWS',16) define(`COLS',16) define(`ROW_A', `oooooooooooooooo') define(`ROW_B', `oooooooooooooooo') define(`ROW_C', `oooooooooooooooo') define(`ROW_D', `oooooooooooooooo') define(`ROW_E', `oooooooooooooooo') define(`ROW_F', `oooooooooooooooo') define(`ROW_G', `oooooooooooooooo') define(`ROW_H', `oooooooooooooooo') define(`ROW_J', `oooooooooooooooo') define(`ROW_K', `oooooooooooooooo') define(`ROW_L', `oooooooooooooooo') define(`ROW_M', `oooooooooooooooo') define(`ROW_N', `oooooooooooooooo') define(`ROW_P', `oooooooooooooooo') define(`ROW_R', `oooooooooooooooo') define(`ROW_T', `oooooooooooooooo')') define(`SCALE',1) define(`PAD_CLR',50) define(`PKG_CLR',100) define(`LINEW',5) define(`BGA_M',eval(BGA_M/SCALE)) define(`BGA_L',eval(BGA_L/SCALE)) define(`MAXX',eval((BGA_E * (COLS-1))/SCALE + PKG_CLR)) define(`MAXY',eval((BGA_E * (ROWS-1))/SCALE + PKG_CLR)) Element[0x00 "$1" "$2" "$3" 0 0 0 eval(-PKG_CLR-50) 0 100 0x00] ( forloop(`i', 1, ROWS, `define(`CY', eval(((i-1) * BGA_E)/SCALE)) define(`THE_ROW',ROW_`'PIN_LETTER(i)) forloop(`j', 1, COLS, `define(`CX', eval(((j-1) * BGA_E)/SCALE))dnl ifelse(substr(THE_ROW,eval(j-1),1),`o',` Pad[ CX CY CX CY BGA_L PAD_CLR BGA_M "PIN_LETTER(i)`'j" "PIN_LETTER(i)`'j" 0x00)')')']$4,`FG256',`define(`BGA_L',1575) define(`BGA_M',1969) define(`BGA_E',3937) define(`ROWS',16) define(`COLS',16) define(`ROW_A', `oooooooooooooooo') define(`ROW_B', `oooooooooooooooo') define(`ROW_C', `oooooooooooooooo') define(`ROW_D', `oooooooooooooooo') define(`ROW_E', `oooooooooooooooo') define(`ROW_F', `oooooooooooooooo') define(`ROW_G', `oooooooooooooooo') define(`ROW_H', `oooooooooooooooo') define(`ROW_J', `oooooooooooooooo') define(`ROW_K', `oooooooooooooooo') define(`ROW_L', `oooooooooooooooo') define(`ROW_M', `oooooooooooooooo') define(`ROW_N', `oooooooooooooooo') define(`ROW_P', `oooooooooooooooo') define(`ROW_R', `oooooooooooooooo') define(`ROW_T', `oooooooooooooooo')', # Draw the element lines around the dodad ElementLine[ 0 -PKG_CLR MAXX -PKG_CLR LINEW] ElementLine[MAXX -PKG_CLR MAXX MAXY LINEW] ElementLine[MAXX MAXY -PKG_CLR MAXY LINEW] ElementLine[-PKG_CLR MAXY -PKG_CLR 0 LINEW] ElementLine[-PKG_CLR 0 0 -PKG_CLR LINEW] ) undefine(`BGA_L') undefine(`BGA_M') undefine(`ROWS') undefine(`COLS') undefine(`CY') undefine(`CX') undefine(`PKG_CLR') undefine(`PAD_CLR') undefine(`MAXX') undefine(`MAXY') ')