Diffpair gap should only override clearance within a coupled diffpair.
Fixes https://gitlab.com/kicad/code/kicad/issues/7975
This commit is contained in:
parent
1ed54d2314
commit
7df9fa0631
|
@ -237,8 +237,7 @@ void DRC_ENGINE::loadImplicitRules()
|
||||||
netclassRule->m_Name = wxString::Format( _( "netclass '%s'" ), ncName );
|
netclassRule->m_Name = wxString::Format( _( "netclass '%s'" ), ncName );
|
||||||
netclassRule->m_Implicit = true;
|
netclassRule->m_Implicit = true;
|
||||||
|
|
||||||
expr = wxString::Format( "A.NetClass == '%s'",
|
expr = wxString::Format( "A.NetClass == '%s'", ncName );
|
||||||
ncName );
|
|
||||||
netclassRule->m_Condition = new DRC_RULE_CONDITION( expr );
|
netclassRule->m_Condition = new DRC_RULE_CONDITION( expr );
|
||||||
netclassClearanceRules.push_back( netclassRule );
|
netclassClearanceRules.push_back( netclassRule );
|
||||||
|
|
||||||
|
@ -266,8 +265,7 @@ void DRC_ENGINE::loadImplicitRules()
|
||||||
ncName );
|
ncName );
|
||||||
netclassRule->m_Implicit = true;
|
netclassRule->m_Implicit = true;
|
||||||
|
|
||||||
expr = wxString::Format( "A.NetClass == '%s' && A.inDiffPair('*')",
|
expr = wxString::Format( "A.NetClass == '%s' && A.inDiffPair('*')", ncName );
|
||||||
ncName );
|
|
||||||
netclassRule->m_Condition = new DRC_RULE_CONDITION( expr );
|
netclassRule->m_Condition = new DRC_RULE_CONDITION( expr );
|
||||||
netclassItemSpecificRules.push_back( netclassRule );
|
netclassItemSpecificRules.push_back( netclassRule );
|
||||||
|
|
||||||
|
@ -288,13 +286,23 @@ void DRC_ENGINE::loadImplicitRules()
|
||||||
netclassRule->m_Condition = new DRC_RULE_CONDITION( expr );
|
netclassRule->m_Condition = new DRC_RULE_CONDITION( expr );
|
||||||
netclassItemSpecificRules.push_back( netclassRule );
|
netclassItemSpecificRules.push_back( netclassRule );
|
||||||
|
|
||||||
DRC_CONSTRAINT gapConstraint( DIFF_PAIR_GAP_CONSTRAINT );
|
DRC_CONSTRAINT constraint( DIFF_PAIR_GAP_CONSTRAINT );
|
||||||
gapConstraint.Value().SetMin( bds.m_MinClearance );
|
constraint.Value().SetMin( bds.m_MinClearance );
|
||||||
gapConstraint.Value().SetOpt( nc->GetDiffPairGap() );
|
constraint.Value().SetOpt( nc->GetDiffPairGap() );
|
||||||
netclassRule->AddConstraint( gapConstraint );
|
netclassRule->AddConstraint( constraint );
|
||||||
|
|
||||||
// The diffpair gap overrides the netclass min clearance, but not the board
|
// The diffpair gap overrides the netclass min clearance, but not the board
|
||||||
// min clearance.
|
// min clearance.
|
||||||
|
netclassRule = new DRC_RULE;
|
||||||
|
netclassRule->m_Name = wxString::Format( _( "netclass '%s' (diff pair)" ),
|
||||||
|
ncName );
|
||||||
|
netclassRule->m_Implicit = true;
|
||||||
|
|
||||||
|
expr = wxString::Format( "A.NetClass == '%s' && AB.isCoupledDiffPair()",
|
||||||
|
ncName );
|
||||||
|
netclassRule->m_Condition = new DRC_RULE_CONDITION( expr );
|
||||||
|
netclassItemSpecificRules.push_back( netclassRule );
|
||||||
|
|
||||||
DRC_CONSTRAINT clearanceConstraint( CLEARANCE_CONSTRAINT );
|
DRC_CONSTRAINT clearanceConstraint( CLEARANCE_CONSTRAINT );
|
||||||
clearanceConstraint.Value().SetMin( std::max( bds.m_MinClearance,
|
clearanceConstraint.Value().SetMin( std::max( bds.m_MinClearance,
|
||||||
nc->GetDiffPairGap() ) );
|
nc->GetDiffPairGap() ) );
|
||||||
|
|
Loading…
Reference in New Issue