Eeschema: in intermediate netlist generation: remove redundant pins list by component, and make Dick happy.
Known bug in intermediate netlist generation: multi parts per package have their common pins listed more than once in nets section. Will be fixed.
This commit is contained in:
parent
34094e77fc
commit
0cb6cd8c02
|
@ -1,4 +1,4 @@
|
|||
EESchema-LIBRARY Version 2.3 Date: 17/05/2010 10:14:05
|
||||
EESchema-LIBRARY Version 2.3 Date: 09/02/2011 18:36:39
|
||||
#
|
||||
# 74LS125
|
||||
#
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
EESchema Schematic File Version 2 date 17/05/2010 10:14:05
|
||||
EESchema Schematic File Version 2 date 09/02/2011 18:36:39
|
||||
LIBS:power
|
||||
LIBS:device
|
||||
LIBS:conn
|
||||
|
@ -25,12 +25,12 @@ LIBS:cypress
|
|||
LIBS:siliconi
|
||||
LIBS:contrib
|
||||
LIBS:sonde xilinx-cache
|
||||
EELAYER 23 0
|
||||
EELAYER 25 0
|
||||
EELAYER END
|
||||
$Descr A4 11700 8267
|
||||
Sheet 1 1
|
||||
Title "CABLE PARALLELE III"
|
||||
Date "3 may 2007"
|
||||
Date "9 feb 2011"
|
||||
Rev "1"
|
||||
Comp ""
|
||||
Comment1 ""
|
||||
|
@ -48,17 +48,17 @@ Wire Wire Line
|
|||
Wire Wire Line
|
||||
6400 4200 5900 4200
|
||||
$Comp
|
||||
L GND #PWR01
|
||||
U 1 1 3EBF81B1
|
||||
L GND #PWR111
|
||||
U 1 1 4D52D0AC
|
||||
P 6300 4650
|
||||
F 0 "#PWR01" H 6300 4650 40 0001 C CNN
|
||||
F 0 "#PWR111" H 6300 4650 40 0001 C CNN
|
||||
F 1 "GND" H 6300 4580 40 0001 C CNN
|
||||
1 6300 4650
|
||||
1 0 0 -1
|
||||
$EndComp
|
||||
$Comp
|
||||
L C C4
|
||||
U 1 1 3EBF81A7
|
||||
U 1 1 4D52D0AA
|
||||
P 6300 4450
|
||||
F 0 "C4" H 6350 4550 50 0000 L CNN
|
||||
F 1 "100pF" H 6350 4350 50 0000 L CNN
|
||||
|
@ -67,7 +67,7 @@ F 1 "100pF" H 6350 4350 50 0000 L CNN
|
|||
$EndComp
|
||||
$Comp
|
||||
L R R13
|
||||
U 1 1 3EBF819B
|
||||
U 1 1 4D52D0A6
|
||||
P 6650 4200
|
||||
F 0 "R13" V 6730 4200 50 0000 C CNN
|
||||
F 1 "100" V 6650 4200 50 0000 C CNN
|
||||
|
@ -134,37 +134,37 @@ Wire Wire Line
|
|||
Wire Wire Line
|
||||
8400 3700 8400 2750
|
||||
$Comp
|
||||
L PWR_FLAG #FLG02
|
||||
L PWR_FLAG #FLG102
|
||||
U 1 1 3EBF848F
|
||||
P 6200 1050
|
||||
F 0 "#FLG02" H 6200 1320 30 0001 C CNN
|
||||
F 0 "#FLG102" H 6200 1320 30 0001 C CNN
|
||||
F 1 "PWR_FLAG" H 6200 1280 30 0000 C CNN
|
||||
1 6200 1050
|
||||
1 0 0 -1
|
||||
$EndComp
|
||||
$Comp
|
||||
L VCC #PWR03
|
||||
L VCC #PWR106
|
||||
U 1 1 3EBF8479
|
||||
P 5900 1050
|
||||
F 0 "#PWR03" H 5900 1150 30 0001 C CNN
|
||||
F 0 "#PWR106" H 5900 1150 30 0001 C CNN
|
||||
F 1 "VCC" H 5900 1150 30 0000 C CNN
|
||||
1 5900 1050
|
||||
1 0 0 -1
|
||||
$EndComp
|
||||
$Comp
|
||||
L GND #PWR04
|
||||
L GND #PWR101
|
||||
U 1 1 3EBF8458
|
||||
P 800 7300
|
||||
F 0 "#PWR04" H 800 7300 40 0001 C CNN
|
||||
F 0 "#PWR101" H 800 7300 40 0001 C CNN
|
||||
F 1 "GND" H 800 7230 40 0001 C CNN
|
||||
1 800 7300
|
||||
1 0 0 -1
|
||||
$EndComp
|
||||
$Comp
|
||||
L PWR_FLAG #FLG05
|
||||
L PWR_FLAG #FLG101
|
||||
U 1 1 3EBF843C
|
||||
P 800 7300
|
||||
F 0 "#FLG05" H 800 7570 30 0001 C CNN
|
||||
F 0 "#FLG101" H 800 7570 30 0001 C CNN
|
||||
F 1 "PWR_FLAG" H 800 7530 30 0000 C CNN
|
||||
1 800 7300
|
||||
1 0 0 -1
|
||||
|
@ -179,10 +179,10 @@ Wire Wire Line
|
|||
Wire Wire Line
|
||||
2500 2700 2200 2700
|
||||
$Comp
|
||||
L GND #PWR06
|
||||
U 1 1 3EBF8100
|
||||
L GND #PWR104
|
||||
U 1 1 4D52D0A5
|
||||
P 2500 2750
|
||||
F 0 "#PWR06" H 2500 2750 40 0001 C CNN
|
||||
F 0 "#PWR104" H 2500 2750 40 0001 C CNN
|
||||
F 1 "GND" H 2500 2680 40 0001 C CNN
|
||||
1 2500 2750
|
||||
1 0 0 -1
|
||||
|
@ -200,10 +200,10 @@ Wire Wire Line
|
|||
Text Label 9450 3500 0 60 ~ 0
|
||||
PWR(3,3-5V)
|
||||
$Comp
|
||||
L GND #PWR07
|
||||
L GND #PWR114
|
||||
U 1 1 3EBF8376
|
||||
P 10050 3600
|
||||
F 0 "#PWR07" H 10050 3600 40 0001 C CNN
|
||||
F 0 "#PWR114" H 10050 3600 40 0001 C CNN
|
||||
F 1 "GND" H 10050 3530 40 0001 C CNN
|
||||
1 10050 3600
|
||||
0 1 1 0
|
||||
|
@ -219,10 +219,10 @@ TD0-DONE/P
|
|||
Text Label 7700 2550 0 60 ~ 0
|
||||
PWR(3,3-5V)
|
||||
$Comp
|
||||
L GND #PWR08
|
||||
U 1 1 3EBF8376
|
||||
L GND #PWR113
|
||||
U 1 1 4D52D0AF
|
||||
P 8500 2650
|
||||
F 0 "#PWR08" H 8500 2650 40 0001 C CNN
|
||||
F 0 "#PWR113" H 8500 2650 40 0001 C CNN
|
||||
F 1 "GND" H 8500 2580 40 0001 C CNN
|
||||
1 8500 2650
|
||||
0 1 1 0
|
||||
|
@ -266,10 +266,10 @@ Connection ~ 6500 1050
|
|||
Wire Wire Line
|
||||
6500 1100 6500 1050
|
||||
$Comp
|
||||
L GND #PWR09
|
||||
L GND #PWR112
|
||||
U 1 1 3EBF82CF
|
||||
P 6500 1500
|
||||
F 0 "#PWR09" H 6500 1500 40 0001 C CNN
|
||||
F 0 "#PWR112" H 6500 1500 40 0001 C CNN
|
||||
F 1 "GND" H 6500 1430 40 0001 C CNN
|
||||
1 6500 1500
|
||||
1 0 0 -1
|
||||
|
@ -299,10 +299,10 @@ Wire Wire Line
|
|||
Wire Wire Line
|
||||
6400 1900 5900 1900
|
||||
$Comp
|
||||
L GND #PWR010
|
||||
U 1 1 3EBF81B1
|
||||
L GND #PWR110
|
||||
U 1 1 4D52D0AD
|
||||
P 6300 3750
|
||||
F 0 "#PWR010" H 6300 3750 40 0001 C CNN
|
||||
F 0 "#PWR110" H 6300 3750 40 0001 C CNN
|
||||
F 1 "GND" H 6300 3680 40 0001 C CNN
|
||||
1 6300 3750
|
||||
1 0 0 -1
|
||||
|
@ -318,7 +318,7 @@ F 1 "100pF" H 6350 3450 50 0000 L CNN
|
|||
$EndComp
|
||||
$Comp
|
||||
L R R12
|
||||
U 1 1 3EBF819B
|
||||
U 1 1 4D52D0A7
|
||||
P 6650 3300
|
||||
F 0 "R12" V 6730 3300 50 0000 C CNN
|
||||
F 1 "100" V 6650 3300 50 0000 C CNN
|
||||
|
@ -326,17 +326,17 @@ F 1 "100" V 6650 3300 50 0000 C CNN
|
|||
0 1 1 0
|
||||
$EndComp
|
||||
$Comp
|
||||
L GND #PWR011
|
||||
U 1 1 3EBF81B1
|
||||
L GND #PWR109
|
||||
U 1 1 4D52D0AE
|
||||
P 6300 3050
|
||||
F 0 "#PWR011" H 6300 3050 40 0001 C CNN
|
||||
F 0 "#PWR109" H 6300 3050 40 0001 C CNN
|
||||
F 1 "GND" H 6300 2980 40 0001 C CNN
|
||||
1 6300 3050
|
||||
1 0 0 -1
|
||||
$EndComp
|
||||
$Comp
|
||||
L C C2
|
||||
U 1 1 3EBF81A7
|
||||
U 1 1 4D52D0AB
|
||||
P 6300 2850
|
||||
F 0 "C2" H 6350 2950 50 0000 L CNN
|
||||
F 1 "100pF" H 6350 2750 50 0000 L CNN
|
||||
|
@ -345,7 +345,7 @@ F 1 "100pF" H 6350 2750 50 0000 L CNN
|
|||
$EndComp
|
||||
$Comp
|
||||
L R R11
|
||||
U 1 1 3EBF819B
|
||||
U 1 1 4D52D0A8
|
||||
P 6650 2600
|
||||
F 0 "R11" V 6730 2600 50 0000 C CNN
|
||||
F 1 "100" V 6650 2600 50 0000 C CNN
|
||||
|
@ -365,26 +365,26 @@ Wire Wire Line
|
|||
Wire Wire Line
|
||||
6200 1050 6200 1100
|
||||
$Comp
|
||||
L GND #PWR012
|
||||
L GND #PWR107
|
||||
U 1 1 3EBF81B3
|
||||
P 6200 1600
|
||||
F 0 "#PWR012" H 6200 1600 40 0001 C CNN
|
||||
F 0 "#PWR107" H 6200 1600 40 0001 C CNN
|
||||
F 1 "GND" H 6200 1530 40 0001 C CNN
|
||||
1 6200 1600
|
||||
1 0 0 -1
|
||||
$EndComp
|
||||
$Comp
|
||||
L GND #PWR013
|
||||
L GND #PWR108
|
||||
U 1 1 3EBF81B1
|
||||
P 6300 2350
|
||||
F 0 "#PWR013" H 6300 2350 40 0001 C CNN
|
||||
F 0 "#PWR108" H 6300 2350 40 0001 C CNN
|
||||
F 1 "GND" H 6300 2280 40 0001 C CNN
|
||||
1 6300 2350
|
||||
1 0 0 -1
|
||||
$EndComp
|
||||
$Comp
|
||||
L C C3
|
||||
U 1 1 3EBF81A7
|
||||
U 1 1 4D52D0A9
|
||||
P 6300 2150
|
||||
F 0 "C3" H 6350 2250 50 0000 L CNN
|
||||
F 1 "100pF" H 6350 2050 50 0000 L CNN
|
||||
|
@ -450,19 +450,19 @@ Wire Wire Line
|
|||
Wire Wire Line
|
||||
2500 1700 2200 1700
|
||||
$Comp
|
||||
L GND #PWR014
|
||||
L GND #PWR103
|
||||
U 1 1 3EBF8100
|
||||
P 2500 1750
|
||||
F 0 "#PWR014" H 2500 1750 40 0001 C CNN
|
||||
F 0 "#PWR103" H 2500 1750 40 0001 C CNN
|
||||
F 1 "GND" H 2500 1680 40 0001 C CNN
|
||||
1 2500 1750
|
||||
1 0 0 -1
|
||||
$EndComp
|
||||
$Comp
|
||||
L GND #PWR015
|
||||
L GND #PWR105
|
||||
U 1 1 3EBF80DD
|
||||
P 4650 2000
|
||||
F 0 "#PWR015" H 4650 2000 40 0001 C CNN
|
||||
F 0 "#PWR105" H 4650 2000 40 0001 C CNN
|
||||
F 1 "GND" H 4650 1930 40 0001 C CNN
|
||||
1 4650 2000
|
||||
1 0 0 -1
|
||||
|
@ -531,10 +531,10 @@ Wire Wire Line
|
|||
Wire Wire Line
|
||||
1700 7200 1150 7200
|
||||
$Comp
|
||||
L GND #PWR016
|
||||
L GND #PWR102
|
||||
U 1 1 3EBF7F0D
|
||||
P 1150 7300
|
||||
F 0 "#PWR016" H 1150 7300 40 0001 C CNN
|
||||
F 0 "#PWR102" H 1150 7300 40 0001 C CNN
|
||||
F 1 "GND" H 1150 7230 40 0001 C CNN
|
||||
1 1150 7300
|
||||
1 0 0 -1
|
||||
|
@ -653,7 +653,7 @@ F 1 "100" V 3950 3300 50 0000 C CNN
|
|||
$EndComp
|
||||
$Comp
|
||||
L R R8
|
||||
U 1 1 3EBF7D33
|
||||
U 1 1 4D52D0A4
|
||||
P 3950 2900
|
||||
F 0 "R8" V 4030 2900 50 0000 C CNN
|
||||
F 1 "100" V 3950 2900 50 0000 C CNN
|
||||
|
@ -662,7 +662,7 @@ F 1 "100" V 3950 2900 50 0000 C CNN
|
|||
$EndComp
|
||||
$Comp
|
||||
L R R7
|
||||
U 1 1 3EBF7D31
|
||||
U 1 1 4D52D0A3
|
||||
P 3950 2600
|
||||
F 0 "R7" V 4030 2600 50 0000 C CNN
|
||||
F 1 "100" V 3950 2600 50 0000 C CNN
|
||||
|
|
|
@ -941,10 +941,6 @@ XNODE* EXPORT_HELP::makeGenericComponents()
|
|||
wxString sLib = wxT( "lib" );
|
||||
wxString sPart = wxT( "part" );
|
||||
wxString sNames = wxT( "names" );
|
||||
wxString sPinNum = wxT( "num" );
|
||||
wxString sPinNetname = wxT( "netname" );
|
||||
wxString sPinNetcode = wxT( "netcode" );
|
||||
|
||||
|
||||
m_ReferencesAlreadyFound.Clear();
|
||||
|
||||
|
@ -957,7 +953,7 @@ XNODE* EXPORT_HELP::makeGenericComponents()
|
|||
{
|
||||
for( EDA_ITEM* schItem = path->LastDrawList(); schItem; schItem = schItem->Next() )
|
||||
{
|
||||
SCH_COMPONENT* comp = findNextComponentAndCreatPinList( schItem, path );
|
||||
SCH_COMPONENT* comp = findNextComponent( schItem, path );
|
||||
if( !comp )
|
||||
break; // No component left
|
||||
|
||||
|
@ -1021,26 +1017,6 @@ XNODE* EXPORT_HELP::makeGenericComponents()
|
|||
|
||||
timeStamp.Printf( sTSFmt, comp->m_TimeStamp );
|
||||
xcomp->AddChild( node( sTStamp, timeStamp ) );
|
||||
|
||||
// Add pins list for this component.
|
||||
// Useful to build netlist which have pads connection inside the footprint description
|
||||
// (Spice, OrcadPCB2 ...)
|
||||
XNODE* xpinslist;
|
||||
xcomp->AddChild( xpinslist = node( sPins ) );
|
||||
for( unsigned ii = 0; ii < m_SortedComponentPinList.size(); ii++ )
|
||||
{
|
||||
NETLIST_OBJECT* Pin = m_SortedComponentPinList[ii];
|
||||
if( !Pin )
|
||||
continue;
|
||||
XNODE* xpin;
|
||||
xpinslist->AddChild( xpin = node( sPin ) );
|
||||
wxString text;
|
||||
xpin->AddAttribute( sPinNum, Pin->GetPinNumText() );
|
||||
sprintPinNetName( &text, wxT( "N-%.6d" ), Pin );
|
||||
xpin->AddAttribute( sPinNetname, text );
|
||||
text.Printf( wxT( "%d" ), Pin->GetNet() );
|
||||
xpin->AddAttribute( sPinNetcode, text );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -377,9 +377,9 @@ void NETLIST_DIALOG::AddNewPluginPanel( wxCommandEvent& event )
|
|||
wxFileName fn( FullFileName );
|
||||
wxString ext = fn.GetExt();
|
||||
if( ext == wxT("xsl" ) )
|
||||
cmdLine.Printf(wxT("xsltproc -o %%O \"%s\" %%I"), GetChars(FullFileName) );
|
||||
cmdLine.Printf(wxT("xsltproc -o \"%%O\" \"%s\" \"%%I\""), GetChars(FullFileName) );
|
||||
else if( ext == wxT("exe" ) || ext.IsEmpty() )
|
||||
cmdLine.Printf(wxT("\"%s\" > %%O < %%I"), GetChars(FullFileName) );
|
||||
cmdLine.Printf(wxT("\"%s\" > \"%%O\" < \"%%I\""), GetChars(FullFileName) );
|
||||
else
|
||||
cmdLine.Printf(wxT("\"%s\""), GetChars(FullFileName) );
|
||||
|
||||
|
|
|
@ -14,28 +14,50 @@
|
|||
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
|
||||
<xsl:output method="text" omit-xml-declaration="yes" indent="no"/>
|
||||
|
||||
<!-- Netlist header -->
|
||||
<!--
|
||||
Netlist header
|
||||
Creates the entire netlist
|
||||
(can be seen as equivalent to main function in C
|
||||
-->
|
||||
<xsl:template match="/export">
|
||||
<xsl:text>( { EESchema Netlist Version 1.1 </xsl:text>
|
||||
<xsl:apply-templates select="design/date"/> <!-- Generate line .TIM <time> -->
|
||||
<xsl:apply-templates select="design/tool"/> <!-- Generate line .APP <eeschema version> -->
|
||||
<!-- Generate line .TIM <time> -->
|
||||
<xsl:apply-templates select="design/date"/>
|
||||
<!-- Generate line eeschema version ... -->
|
||||
<xsl:apply-templates select="design/tool"/>
|
||||
<xsl:text>}&nl;</xsl:text>
|
||||
|
||||
<!-- Generate the list of components -->
|
||||
<xsl:apply-templates select="components/comp"/> <!-- Generate list of components -->
|
||||
|
||||
<!-- end of file -->
|
||||
<xsl:text>)&nl;*&nl;</xsl:text>
|
||||
</xsl:template>
|
||||
|
||||
<!-- Generate id in header like "eeschema (2010-08-17 BZR 2450)-unstable" -->
|
||||
<!--
|
||||
Generate id in header like "eeschema (2010-08-17 BZR 2450)-unstable"
|
||||
-->
|
||||
<xsl:template match="tool">
|
||||
<xsl:apply-templates/>
|
||||
</xsl:template>
|
||||
|
||||
<!-- Generate date in header like "20/08/2010 10:45:33" -->
|
||||
<!--
|
||||
Generate date in header like "20/08/2010 10:45:33"
|
||||
-->
|
||||
<xsl:template match="date">
|
||||
<xsl:apply-templates/>
|
||||
<xsl:text>&nl;</xsl:text>
|
||||
</xsl:template>
|
||||
|
||||
<!-- for each component -->
|
||||
<!--
|
||||
This template read each component
|
||||
(path = /export/components/comp)
|
||||
creates lines:
|
||||
( 3EBF7DBD $noname U1 74LS125
|
||||
... pin list ...
|
||||
)
|
||||
and calls "create_pin_list" template to build the pin list
|
||||
-->
|
||||
<xsl:template match="comp">
|
||||
<xsl:text> ( </xsl:text>
|
||||
<xsl:choose>
|
||||
|
@ -67,24 +89,122 @@
|
|||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
<xsl:text>&nl;</xsl:text>
|
||||
<xsl:apply-templates select="pins/pin"/>
|
||||
<xsl:call-template name="Search_pin_list" >
|
||||
<xsl:with-param name="cmplib_id" select="libsource/@part"/>
|
||||
<xsl:with-param name="cmp_ref" select="@ref"/>
|
||||
</xsl:call-template>
|
||||
<xsl:text> )&nl;</xsl:text>
|
||||
</xsl:template>
|
||||
|
||||
<!-- for each pin in a component -->
|
||||
<xsl:template match="pin">
|
||||
<xsl:text> ( </xsl:text>
|
||||
<!--
|
||||
This template search for a given lib component description in list
|
||||
lib component descriptions are in /export/libparts,
|
||||
and each description start at ./libpart
|
||||
We search here for the list of pins of the given component
|
||||
This template has 2 parameters:
|
||||
"cmplib_id" (reference in libparts)
|
||||
"cmp_ref" (schematic reference of the given component)
|
||||
-->
|
||||
<xsl:template name="Search_pin_list" >
|
||||
<xsl:param name="cmplib_id" select="0" />
|
||||
<xsl:param name="cmp_ref" select="0" />
|
||||
<xsl:for-each select="/export/libparts/libpart">
|
||||
<xsl:if test = "@part = $cmplib_id ">
|
||||
<xsl:apply-templates name="build_pin_list" select="pins/pin">
|
||||
<xsl:with-param name="cmp_ref" select="$cmp_ref"/>
|
||||
</xsl:apply-templates>
|
||||
</xsl:if>
|
||||
</xsl:for-each>
|
||||
</xsl:template>
|
||||
|
||||
|
||||
<!--
|
||||
This template writes the pin list of a component
|
||||
from the pin list of the library description
|
||||
The pin list from library description is something like
|
||||
<pins>
|
||||
<pin num="1" type="passive"/>
|
||||
<pin num="2" type="passive"/>
|
||||
</pins>
|
||||
Output pin list is ( pin num = net name )
|
||||
something like
|
||||
( 1 = VCC )
|
||||
( 2 = GND )
|
||||
-->
|
||||
<xsl:template name="build_pin_list" match="pin">
|
||||
<xsl:param name="cmp_ref" select="0" />
|
||||
|
||||
<!-- write pin numner and separator -->
|
||||
<xsl:text> ( </xsl:text>
|
||||
<xsl:value-of select="@num"/>
|
||||
<xsl:text> = </xsl:text>
|
||||
<xsl:choose>
|
||||
<xsl:when test = "@netname != '' ">
|
||||
<xsl:apply-templates select="@netname"/>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:text>?</xsl:text>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
|
||||
<!-- search net name in nets section and write it: -->
|
||||
<xsl:variable name="pinNum" select="@num" />
|
||||
<xsl:for-each select="/export/nets/net">
|
||||
<!-- net name is output only if there is more than one pin in net
|
||||
else use "?" as net name, so count items in this net
|
||||
-->
|
||||
<xsl:variable name="pinCnt" select="count(node)" />
|
||||
<xsl:apply-templates name="Search_pin_netname" select="node">
|
||||
<xsl:with-param name="cmp_ref" select="$cmp_ref"/>
|
||||
<xsl:with-param name="pin_cnt_in_net" select="$pinCnt"/>
|
||||
<xsl:with-param name="pin_num"> <xsl:value-of select="$pinNum"/>
|
||||
</xsl:with-param>
|
||||
</xsl:apply-templates>
|
||||
</xsl:for-each>
|
||||
|
||||
<!-- close line -->
|
||||
<xsl:text> )&nl;</xsl:text>
|
||||
</xsl:template>
|
||||
|
||||
<!--
|
||||
This template writes the pin netname of a given pin of a given component
|
||||
from the nets list
|
||||
The nets list description is something like
|
||||
<nets>
|
||||
<net code="1" name="GND">
|
||||
<node ref="J1" pin="20"/>
|
||||
<node ref="C2" pin="2"/>
|
||||
</net>
|
||||
<net code="2" name="">
|
||||
<node ref="U2" pin="11"/>
|
||||
</net>
|
||||
</nets>
|
||||
This template has 2 parameters:
|
||||
"cmp_ref" (schematic reference of the given component)
|
||||
"pin_num" (pin number)
|
||||
-->
|
||||
|
||||
<xsl:template name="Search_pin_netname" match="node">
|
||||
<xsl:param name="cmp_ref" select="0" />
|
||||
<xsl:param name="pin_num" select="0" />
|
||||
<xsl:param name="pin_cnt_in_net" select="0" />
|
||||
|
||||
<xsl:if test = "@ref = $cmp_ref ">
|
||||
<xsl:if test = "@pin = $pin_num">
|
||||
<!-- net name is output only if there is more than one pin in net
|
||||
else use "?" as net name
|
||||
-->
|
||||
<xsl:if test = "$pin_cnt_in_net>1">
|
||||
<xsl:choose>
|
||||
<!-- if a net has a name, use it,
|
||||
else build a name from its net code
|
||||
-->
|
||||
<xsl:when test = "../@name != '' ">
|
||||
<xsl:value-of select="../@name"/>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:text>$N-0</xsl:text><xsl:value-of select="../@code"/>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:if>
|
||||
<xsl:if test = "$pin_cnt_in_net <2">
|
||||
<xsl:text>?</xsl:text>
|
||||
</xsl:if>
|
||||
</xsl:if>
|
||||
</xsl:if>
|
||||
|
||||
</xsl:template>
|
||||
|
||||
</xsl:stylesheet>
|
||||
|
|
|
@ -0,0 +1,131 @@
|
|||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
<!--XSL style sheet to EESCHEMA Generic Netlist Format to CADSTAR netlist format
|
||||
Copyright (C) 2010, SoftPLC Corporation.
|
||||
GPL v2.
|
||||
|
||||
How to use:
|
||||
https://lists.launchpad.net/kicad-developers/msg05157.html
|
||||
-->
|
||||
|
||||
<!DOCTYPE xsl:stylesheet [
|
||||
<!ENTITY nl "
"> <!--new line CR, LF -->
|
||||
]>
|
||||
|
||||
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
|
||||
<xsl:output method="text" omit-xml-declaration="yes" indent="no"/>
|
||||
|
||||
<!-- Netlist header -->
|
||||
<xsl:template match="/export">
|
||||
<xsl:text>.HEA&nl;</xsl:text>
|
||||
<xsl:apply-templates select="design/date"/> <!-- Generate line .TIM <time> -->
|
||||
<xsl:apply-templates select="design/tool"/> <!-- Generate line .APP <eeschema version> -->
|
||||
<xsl:text>&nl;</xsl:text>
|
||||
<xsl:apply-templates select="components/comp"/> <!-- Generate list of components -->
|
||||
<xsl:text>&nl;&nl;</xsl:text>
|
||||
<xsl:apply-templates select="nets/net"/> <!-- Generate list of nets and connections -->
|
||||
<xsl:text>&nl;.END&nl;</xsl:text>
|
||||
</xsl:template>
|
||||
|
||||
<!-- Generate line .APP "eeschema (2010-08-17 BZR 2450)-unstable" -->
|
||||
<xsl:template match="tool">
|
||||
<xsl:text>.APP "</xsl:text>
|
||||
<xsl:apply-templates/>
|
||||
<xsl:text>"&nl;</xsl:text>
|
||||
</xsl:template>
|
||||
|
||||
<!-- Generate line .TIM 20/08/2010 10:45:33 -->
|
||||
<xsl:template match="date">
|
||||
<xsl:text>.TIM </xsl:text>
|
||||
<xsl:apply-templates/>
|
||||
<xsl:text>&nl;</xsl:text>
|
||||
</xsl:template>
|
||||
|
||||
<!-- for each component -->
|
||||
<!-- create lines like
|
||||
.ADD_COM U3 74LS541 (when no footprint name specified)
|
||||
.ADD_COM JP1 CONN_8X2 pin_array_8x2 pin_array_8x2 (with a specified footprint name)
|
||||
-->
|
||||
<xsl:template match="comp">
|
||||
<xsl:text>.ADD_COM </xsl:text>
|
||||
<xsl:value-of select="@ref"/>
|
||||
<xsl:text> </xsl:text>
|
||||
<xsl:choose>
|
||||
<xsl:when test = "value != '' ">
|
||||
<xsl:apply-templates select="value"/>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:text>?</xsl:text>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
<xsl:choose>
|
||||
<xsl:when test = "footprint != '' ">
|
||||
<xsl:text> </xsl:text>
|
||||
<xsl:apply-templates select="footprint"/>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
<xsl:text>&nl;</xsl:text>
|
||||
</xsl:template>
|
||||
|
||||
<!-- for each net -->
|
||||
<!-- create lines like
|
||||
.ADD_TER U3.9 /PC-RST
|
||||
.TER U3.8
|
||||
BUS1.2
|
||||
.ADD_TER BUS1.14 /PC-IOR
|
||||
.TER U3.7
|
||||
-->
|
||||
<xsl:template match="net">
|
||||
<!-- nets are output only if there is more than one pin in net -->
|
||||
<xsl:if test="count(node)>1">
|
||||
<xsl:variable name="netname">
|
||||
<xsl:text> </xsl:text>
|
||||
<xsl:choose>
|
||||
<xsl:when test = "@name != '' ">
|
||||
<xsl:value-of select="@name"/>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:text>N-</xsl:text>
|
||||
<xsl:value-of select="@code"/>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
<xsl:text>&nl;</xsl:text>
|
||||
</xsl:variable>
|
||||
<xsl:apply-templates select="node" mode="first"/>
|
||||
<xsl:value-of select="$netname"/>
|
||||
<xsl:apply-templates select="node" mode="others"/>
|
||||
</xsl:if>
|
||||
</xsl:template>
|
||||
|
||||
<!-- for each node -->
|
||||
<xsl:template match="node" mode="first">
|
||||
<xsl:if test="position()=1">
|
||||
<xsl:text>.ADD_TER </xsl:text>
|
||||
<xsl:value-of select="@ref"/>
|
||||
<xsl:text>.</xsl:text>
|
||||
<xsl:value-of select="@pin"/>
|
||||
<xsl:text> </xsl:text>
|
||||
</xsl:if>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="node" mode="others">
|
||||
<xsl:choose>
|
||||
<xsl:when test='position()=1'>
|
||||
</xsl:when>
|
||||
<xsl:when test='position()=2'>
|
||||
<xsl:text>.TER </xsl:text>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:text> </xsl:text>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
<xsl:if test="position()>1">
|
||||
<xsl:value-of select="@ref"/>
|
||||
<xsl:text>.</xsl:text>
|
||||
<xsl:value-of select="@pin"/>
|
||||
<xsl:text>&nl;</xsl:text>
|
||||
</xsl:if>
|
||||
</xsl:template>
|
||||
|
||||
</xsl:stylesheet>
|
Loading…
Reference in New Issue