com.sun.electric.tool.ncc.processing
Class ExportChecker

java.lang.Object
  extended by com.sun.electric.tool.ncc.processing.ExportChecker

public class ExportChecker
extends java.lang.Object

The ExportChecker checks the Exports of the two Cells that are supposed to be equivalent. NCC checks exports in two phases. The first phase runs before NCC checks circuit topology. In the first phase NCC checks to see if the two Cells have consistent Exports. For example, if the schematic has a network with Export A then NCC makes sure that the layout has a network with Export A.

The second phase runs after NCC has checked the circuit topology. In the second phase NCC makes sure that the Wire attached to the schematic Export A is topologically matched to the Wire attached to layout Export A.

Electric allows a network to have multiple exports. For example a schematic network can have three Exports {A, B, C}. NCC can do one of two things for networks with multiple Exports.

When I first wrote NCC I implemented a flexible comparison. If the schematic had Exports {A, B, C} then I just made sure that the layout had a network with any of those Export names. For example, if the layout had a network with Exports {B, C, D} then the flexible comparison would say they match.

Years after the initial implementation the design group noticed that commercial tools lacked this flexibility. Therefore I changed NCC to mimic the behavior of the commercial tools. If a network has more than one Export attached, then NCC sorts the Export names and chooses only the first name. In that case if the schematic network has Exports {A, B, C} then it does not match the layout network with Exports {B, C, D}.

ExportChecker implements both flexible and strict Export checking in order to maintain compatibility with most of the NCC regression database. When NCC is invoked interactively it uses strict Export checking. However the regression scripts set NccOption.oneNamePerPort to false which enables flexible Export checking.


Constructor Summary
ExportChecker(NccGlobals globals)
           
 
Method Summary
 boolean ensureExportsWithMatchingNamesAreOnEquivalentNets()
          Check that Exports with matching names are on equivalent nets.
 void markPortsForRenaming()
           
 boolean matchByName()
          match Exports by name.
 void saveInfoNeededToMakeMeASubcircuit(HierarchyInfo hierInfo)
          Gather information that will allow hierarchical netlist comparison at higher level to treat me as a subcircuit.
 void suggestPortMatchesBasedOnTopology()
          If the topological comparison is successful, then both circuits match.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ExportChecker

public ExportChecker(NccGlobals globals)
Method Detail

markPortsForRenaming

public void markPortsForRenaming()

matchByName

public boolean matchByName()
match Exports by name. NCC runs this first phase before topology matching in order to give user early warning about Export name inconsistencies.


saveInfoNeededToMakeMeASubcircuit

public void saveInfoNeededToMakeMeASubcircuit(HierarchyInfo hierInfo)
Gather information that will allow hierarchical netlist comparison at higher level to treat me as a subcircuit.


ensureExportsWithMatchingNamesAreOnEquivalentNets

public boolean ensureExportsWithMatchingNamesAreOnEquivalentNets()
Check that Exports with matching names are on equivalent nets. NCC runs this second phase after it has performed topology matching

Returns:
true if equivalent.

suggestPortMatchesBasedOnTopology

public void suggestPortMatchesBasedOnTopology()
If the topological comparison is successful, then both circuits match. NCC checks to see if the Export names are consistent with the match. If not, then NCC will try to suggest how the designer should rename Exports.