Generalize net DP matching
The requirement of 1-2 numbers following P/N or +/- was arbitrary and not needed. We also add the _ to allowable suffixes to permit DP matching of auto-renamed nets
This commit is contained in:
parent
1b8259701e
commit
22a29a42cf
|
@ -90,7 +90,17 @@ public:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int holeRadius( const PNS::ITEM* aItem ) const;
|
int holeRadius( const PNS::ITEM* aItem ) const;
|
||||||
int matchDpSuffix( const wxString& aNetName, wxString& aComplementNet, wxString& aBaseDpName );
|
|
||||||
|
/**
|
||||||
|
* Checks for netnamed differential pairs.
|
||||||
|
* This accepts nets named suffixed by 'P', 'N', '+', '-', as well as additional
|
||||||
|
* numbers and underscores following the suffix. So NET_P_123 is a valid positive net
|
||||||
|
* name matched to NET_N_123.
|
||||||
|
* @param aNetName Input net name to check for DP naming
|
||||||
|
* @param aComplementNet Generated net name for the pair
|
||||||
|
* @return -1 if found the negative pair, +1 if found the positive pair, 0 otherwise
|
||||||
|
*/
|
||||||
|
int matchDpSuffix( const wxString& aNetName, wxString& aComplementNet );
|
||||||
|
|
||||||
private:
|
private:
|
||||||
PNS::ROUTER_IFACE* m_routerIface;
|
PNS::ROUTER_IFACE* m_routerIface;
|
||||||
|
@ -574,60 +584,49 @@ int PNS_KICAD_IFACE_BASE::StackupHeight( int aFirstLayer, int aSecondLayer ) con
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int PNS_PCBNEW_RULE_RESOLVER::matchDpSuffix( const wxString& aNetName, wxString& aComplementNet,
|
int PNS_PCBNEW_RULE_RESOLVER::matchDpSuffix( const wxString& aNetName, wxString& aComplementNet )
|
||||||
wxString& aBaseDpName )
|
|
||||||
{
|
{
|
||||||
int rv = 0;
|
int rv = 0;
|
||||||
|
int count = 0;
|
||||||
|
|
||||||
if( aNetName.EndsWith( "+" ) )
|
for( auto it = aNetName.rbegin(); it != aNetName.rend() && rv == 0; ++it, ++count )
|
||||||
|
{
|
||||||
|
int ch = *it;
|
||||||
|
|
||||||
|
if( ( ch >= '0' && ch <= '9' ) || ch == '_' )
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else if( ch == '+' )
|
||||||
{
|
{
|
||||||
aComplementNet = "-";
|
aComplementNet = "-";
|
||||||
rv = 1;
|
rv = 1;
|
||||||
}
|
}
|
||||||
else if( aNetName.EndsWith( "P" ) )
|
else if( ch == '-' )
|
||||||
{
|
|
||||||
aComplementNet = "N";
|
|
||||||
rv = 1;
|
|
||||||
}
|
|
||||||
else if( aNetName.EndsWith( "-" ) )
|
|
||||||
{
|
{
|
||||||
aComplementNet = "+";
|
aComplementNet = "+";
|
||||||
rv = -1;
|
rv = -1;
|
||||||
}
|
}
|
||||||
else if( aNetName.EndsWith( "N" ) )
|
else if( ch == 'N' )
|
||||||
{
|
{
|
||||||
aComplementNet = "P";
|
aComplementNet = "P";
|
||||||
rv = -1;
|
rv = -1;
|
||||||
}
|
}
|
||||||
else if( aNetName.Right( 2 ).IsNumber() && aNetName.Right( 3 ).Left( 1 ) == "P" )
|
else if ( ch == 'P' )
|
||||||
{
|
{
|
||||||
// Match P followed by 2 digits
|
aComplementNet = "N";
|
||||||
aComplementNet = "N" + aNetName.Right( 2 );
|
|
||||||
rv = 1;
|
rv = 1;
|
||||||
}
|
}
|
||||||
else if( aNetName.Right( 1 ).IsNumber() && aNetName.Right( 2 ).Left( 1 ) == "P" )
|
else
|
||||||
{
|
{
|
||||||
// Match P followed by 1 digit
|
break;
|
||||||
aComplementNet = "N" + aNetName.Right( 1 );
|
|
||||||
rv = 1;
|
|
||||||
}
|
}
|
||||||
else if( aNetName.Right( 2 ).IsNumber() && aNetName.Right( 3 ).Left( 1 ) == "N" )
|
|
||||||
{
|
|
||||||
// Match N followed by 2 digits
|
|
||||||
aComplementNet = "P" + aNetName.Right( 2 );
|
|
||||||
rv = -1;
|
|
||||||
}
|
|
||||||
else if( aNetName.Right( 1 ).IsNumber() && aNetName.Right( 2 ).Left( 1 ) == "N" )
|
|
||||||
{
|
|
||||||
// Match N followed by 1 digit
|
|
||||||
aComplementNet = "P" + aNetName.Right( 1 );
|
|
||||||
rv = -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if( rv != 0 )
|
if( rv != 0 && count > 1 )
|
||||||
{
|
{
|
||||||
aBaseDpName = aNetName.Left( aNetName.Length() - aComplementNet.Length() );
|
aComplementNet = aNetName.Left( aNetName.length() - count ) + aComplementNet
|
||||||
aComplementNet = aBaseDpName + aComplementNet;
|
+ aNetName.Right( count - 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
return rv;
|
return rv;
|
||||||
|
@ -637,9 +636,9 @@ int PNS_PCBNEW_RULE_RESOLVER::matchDpSuffix( const wxString& aNetName, wxString&
|
||||||
int PNS_PCBNEW_RULE_RESOLVER::DpCoupledNet( int aNet )
|
int PNS_PCBNEW_RULE_RESOLVER::DpCoupledNet( int aNet )
|
||||||
{
|
{
|
||||||
wxString refName = m_board->FindNet( aNet )->GetNetname();
|
wxString refName = m_board->FindNet( aNet )->GetNetname();
|
||||||
wxString dummy, coupledNetName;
|
wxString coupledNetName;
|
||||||
|
|
||||||
if( matchDpSuffix( refName, coupledNetName, dummy ) )
|
if( matchDpSuffix( refName, coupledNetName ) )
|
||||||
{
|
{
|
||||||
NETINFO_ITEM* net = m_board->FindNet( coupledNetName );
|
NETINFO_ITEM* net = m_board->FindNet( coupledNetName );
|
||||||
|
|
||||||
|
@ -662,9 +661,9 @@ wxString PNS_PCBNEW_RULE_RESOLVER::NetName( int aNet )
|
||||||
int PNS_PCBNEW_RULE_RESOLVER::DpNetPolarity( int aNet )
|
int PNS_PCBNEW_RULE_RESOLVER::DpNetPolarity( int aNet )
|
||||||
{
|
{
|
||||||
wxString refName = m_board->FindNet( aNet )->GetNetname();
|
wxString refName = m_board->FindNet( aNet )->GetNetname();
|
||||||
wxString dummy1, dummy2;
|
wxString dummy1;
|
||||||
|
|
||||||
return matchDpSuffix( refName, dummy1, dummy2 );
|
return matchDpSuffix( refName, dummy1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -680,9 +679,9 @@ bool PNS_PCBNEW_RULE_RESOLVER::DpNetPair( const PNS::ITEM* aItem, int& aNetP, in
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
wxString netNameP = netInfo->GetNetname();
|
wxString netNameP = netInfo->GetNetname();
|
||||||
wxString netNameN, netNameCoupled, netNameBase;
|
wxString netNameN, netNameCoupled;
|
||||||
|
|
||||||
int r = matchDpSuffix( netNameP, netNameCoupled, netNameBase );
|
int r = matchDpSuffix( netNameP, netNameCoupled );
|
||||||
|
|
||||||
if( r == 0 )
|
if( r == 0 )
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue