diff --git a/scripts/extract_doc.rb b/scripts/extract_doc.rb index 8d8789958..9e01f759c 100755 --- a/scripts/extract_doc.rb +++ b/scripts/extract_doc.rb @@ -2,15 +2,21 @@ $script_call = $0 + " " + ARGV.join(" ") -$key="%DRC%" -$infile="src/drc/drc/built-in-macros/drc.lym" -$loc = "about/drc_ref" +$indir="src/drc/drc/built-in-macros" +$loc = "about" $outfiles="src/lay/lay/doc" -$title="DRC Reference" -def create_ref(s) - if s =~ /(.*)#(.*)/ - "#{s}" +def create_ref(mod, s) + if s =~ /(.*)::(.*)#(.*)/ + "#{s}" + elsif s =~ /(.*)::(.*)/ + "#{s}" + elsif s =~ /(.*)#(.*)/ + if $2 != "" + "#{s}" + else + "#{$1}" + end else "#{s}" end @@ -20,11 +26,11 @@ def create_class_doc_ref(s) "#{s}" end -def escape(s) +def escape(mod, s) s.gsub("&", "&"). gsub("<", "<"). gsub(">", ">"). - gsub(/\\([\w#]+)/) { create_ref($1) }. + gsub(/\\([\w:#]+)/) { create_ref(mod, $1) }. gsub(/RBA::([\w#]+)/) { create_class_doc_ref($1) } end @@ -38,12 +44,14 @@ class DocItem attr_accessor :synopsis attr_accessor :name attr_accessor :doc + attr_accessor :mod - def initialize(block) + def initialize(mod, block) @paragraphs = [] para = nil self.synopsis = [] + self.mod = mod in_code = false block.each do |b| @@ -91,7 +99,7 @@ class DocItem i > 0 && doc += "

\n" p.each do |pp| - doc += escape(pp). + doc += escape(self.mod, pp). gsub(/\\@/, "&at;"). gsub(/\s*@code\s*/, "

").
               gsub(/\s*@\/code\s*/, "
"). @@ -113,13 +121,13 @@ end class Scope < DocItem - def initialize(block) - super(block) + def initialize(mod, block) + super(mod, block) @items = {} end - def add_doc_item(block) - item = DocItem::new(block) + def add_doc_item(mod, block) + item = DocItem::new(mod, block) @items[item.name] = item end @@ -137,8 +145,8 @@ class Scope < DocItem HEAD doc += "\n" - doc += "" + escape(self.brief) + "\n" - doc += "\n" + doc += "" + escape(self.mod, self.brief) + "\n" + doc += "\n" doc += super_produce_doc @@ -151,14 +159,14 @@ HEAD item.name || raise("Missing @name for item #{item_key}") item.brief || raise("Missing @brief for item #{item_key}") - doc += "

\"" + escape(item.name) + "\" - " + escape(item.brief) + "

\n" - doc += "\n" - doc += "" + doc += "

\"" + escape(self.mod, item.name) + "\" - " + escape(self.mod, item.brief) + "

\n" + doc += "\n" + doc += "
" if ! item.synopsis.empty? doc += "

Usage:

\n" doc += "
    \n" item.synopsis.each do |s| - doc += "
  • " + escape(s) + "
  • \n" + doc += "
  • " + escape(self.mod, s) + "
  • \n" end doc += "
\n" end @@ -177,17 +185,22 @@ end class Collector + def initialize(mod, title) + @mod = mod + @title = title + end + def add_block(block) if block.find { |l| l =~ /^@scope/ } # is a scope block @scopes ||= {} - @current_scope = Scope::new(block) + @current_scope = Scope::new(@mod, block) @scopes[@current_scope.name] = @current_scope else - @current_scope && @current_scope.add_doc_item(block) + @current_scope && @current_scope.add_doc_item(@mod, block) end end @@ -196,7 +209,7 @@ class Collector @scopes.keys.sort.each do |k| suffix = k.downcase - outfile = $outfiles + "/" + $loc + "_" + suffix + ".xml" + outfile = $outfiles + "/" + $loc + "/" + @mod + "_ref_" + suffix + ".xml" File.open(outfile, "w") do |file| file.write(@scopes[k].produce_doc) puts "---> #{outfile} written." @@ -207,7 +220,7 @@ class Collector def produce_index - outfile = $outfiles + "/" + $loc + ".xml" + outfile = $outfiles + "/" + $loc + "/" + @mod + "_ref.xml" File.open(outfile, "w") do |file| doc = <\n" + doc += "#{escape(@mod, @title)}\n" + doc += "\n" doc += "\n" @scopes.keys.sort.each do |k| suffix = k.downcase - doc += "\n" + doc += "\n" end doc += "\n" @@ -244,36 +257,68 @@ HEAD end -collector = Collector::new +collectors = { + "DRC" => Collector::new("drc", "DRC Reference"), + "LVS" => Collector::new("lvs", "LVS Reference") +} -File.open($infile, "r") do |file| +Dir.entries($indir).each do |p| - block = nil - line = 0 + if p !~ /\.rb$/ + next + end - file.each_line do |l| + infile = File.join($indir, p) + puts "Extracting doc from #{infile} .." - line += 1 + File.open(infile, "r") do |file| - begin - l = unescape(l) - if l =~ /^\s*#\s*#{$key}/ - block = [] - elsif l =~ /^\s*#\s*(.*)\s*$/ - block && block.push($1) - elsif l =~ /^\s*$/ - block && collector.add_block(block) - block = nil + block = [] + collector = nil + line = 0 + + file.each_line do |l| + + line += 1 + + begin + + l = unescape(l) + + if ! collector + collectors.each do |k,c| + if l =~ /^\s*#\s*%#{k}%/ + collector = c + l = nil + block = [] + break + end + end + end + + if l + if l =~ /^\s*#\s*(.*)\s*$/ + collector && block.push($1) + elsif l =~ /^\s*$/ + collector && collector.add_block(block) + collector = nil + end + end + + rescue => ex + puts "ERROR in line #{line}:\n" + ex.to_s + puts ex.backtrace # @@@ + exit 1 end - rescue => ex - puts "ERROR in line #{line}:\n" + ex.to_s - exit 1 + end end end -collector.produce_doc -collector.produce_index +collectors.each do |k,collector| + collector.produce_doc + collector.produce_index +end diff --git a/src/drc/drc/built-in-macros/_drc_engine.rb b/src/drc/drc/built-in-macros/_drc_engine.rb index d7b73cf08..363c7392e 100644 --- a/src/drc/drc/built-in-macros/_drc_engine.rb +++ b/src/drc/drc/built-in-macros/_drc_engine.rb @@ -1112,7 +1112,7 @@ CODE # @name netter # @brief Creates a new netter object # @synopsis netter - # See \Netter for more details + # See \Netter# for more details def netter DRC::DRCNetter::new diff --git a/src/drc/drc/built-in-macros/_drc_netter.rb b/src/drc/drc/built-in-macros/_drc_netter.rb index 2ab764519..3e9c0d5d9 100644 --- a/src/drc/drc/built-in-macros/_drc_netter.rb +++ b/src/drc/drc/built-in-macros/_drc_netter.rb @@ -23,8 +23,8 @@ module DRC # # Network formation: # - # A basic Service the Netter object provides is the formation of - # connected networks of conductive shapes. To do so, the Netter + # A basic service the Netter object provides is the formation of + # connected networks of conductive shapes (netting). To do so, the Netter # must be given a connection specification. This happens by calling # "connect" with two polygon layers. The Netter will then regard all # overlaps of shapes on these layers as connections between the diff --git a/src/drc/drc/built-in-macros/_drc_source.rb b/src/drc/drc/built-in-macros/_drc_source.rb index d278d534e..f047ff4a2 100644 --- a/src/drc/drc/built-in-macros/_drc_source.rb +++ b/src/drc/drc/built-in-macros/_drc_source.rb @@ -358,8 +358,10 @@ CODE end # %DRC% + # @name path # @brief Gets the path of the corresponding layout file or nil if there is no path # @synopsis path + def path @path end diff --git a/src/drc/drc/built-in-macros/_lvs_engine.rb b/src/drc/drc/built-in-macros/_lvs_engine.rb index d859b7e8d..9b900d245 100644 --- a/src/drc/drc/built-in-macros/_lvs_engine.rb +++ b/src/drc/drc/built-in-macros/_lvs_engine.rb @@ -17,6 +17,8 @@ module LVS # LVS is built upon DRC. So all functions available in DRC are also available # in LVS. In LVS, DRC functions are used to derive functional layers from original # layers or specification of the layout source. + # + # For more details about the DRC functions see \DRC::global. class LVSEngine < DRCEngine @@ -24,6 +26,16 @@ module LVS super end + # %LVS% + # @name netter + # @brief Creates a new netter object + # @synopsis netter + # See \Netter# for more details + + def netter + LVS::LVSNetter::new + end + def _netter @netter ||= LVS::LVSNetter::new(self) end @@ -41,7 +53,7 @@ module LVS end - # %DRC% + # %LVS% # @name report_lvs # @brief Specifies an LVS report for output # @synopsis report_lvs([ filename ]) @@ -66,7 +78,7 @@ module LVS @output_lvsdb_file = filename end - # %DRC% + # %LVS% # @name schematic # @brief Reads the reference netlist # @synopsis schematic(filename) @@ -74,36 +86,36 @@ module LVS # @synopsis schematic(netlist) # See \Netter#schematic for a description of that function. - # %DRC% + # %LVS% # @name compare # @brief Compares the extracted netlist vs. the schematic # @synopsis compare # See \Netter#compare for a description of that function. - # %DRC% + # %LVS% # @name same_nets # @brief Establishes an equivalence between the nets # @synopsis same_nets(circuit, net_a, net_b) # @synopsis same_nets(circuit_a, net_a, circuit_b, net_b) # See \Netter#same_nets for a description of that function. - # %DRC% + # %LVS% # @name same_circuits # @brief Establishes an equivalence between the circuits # @synopsis same_circuits(circuit_a, circuit_b) # See \Netter#same_circuits for a description of that function. - # %DRC% + # %LVS% # @name same_device_classes # @brief Establishes an equivalence between the device_classes # @synopsis same_device_classes(class_a, class_b) # See \Netter#same_device_classes for a description of that function. - # %DRC% + # %LVS% # @name equivalent_pins # @brief Marks pins as equivalent # @synopsis equivalent_pins(circuit, pins ...) - # See \Netter#equivalen_pins for a description of that function. + # See \Netter#equivalent_pins for a description of that function. # %LVS% # @name min_caps diff --git a/src/drc/drc/built-in-macros/_lvs_netter.rb b/src/drc/drc/built-in-macros/_lvs_netter.rb index 11d349c24..7892590e2 100644 --- a/src/drc/drc/built-in-macros/_lvs_netter.rb +++ b/src/drc/drc/built-in-macros/_lvs_netter.rb @@ -12,25 +12,16 @@ module LVS # @brief LVS Reference: Netter object # The Netter object provides services related to network extraction # from a layout plus comparison against a reference netlist. - # Similar to the DRC netter (which lacks the compare ability), the + # Similar to the DRC \DRC::Netter (which lacks the compare ability), the # relevant method of this object are available as global functions too # where they act on a default incarnation. Usually it's not required # to instantiate a Netter object explicitly. # - # An individual netter object can be created, if the netter results - # need to be kept for multiple extractions or when different configurations - # need to be used in the same script. If you really want - # a Netter object, use the global \netter function: - # The Netter object provides services related to network extraction - # from a layout plus comparison against a reference netlist. - # Similar to the DRC netter (which lacks the compare ability), the - # relevant method of this object are available as global functions too - # where they act on a default incarnation. Usually it's not required - # to instantiate a Netter object explicitly. - # + # The LVS Netter object inherits all methods of the \DRC::Netter. + # # An individual netter object can be created, if the netter results # need to be kept for multiple extractions. If you really need - # a Netter object, use the global \netter function: + # a Netter object, use the global \global#netter function: # # @code # # create a new Netter object: diff --git a/src/lay/lay/doc/about/drc_ref.xml b/src/lay/lay/doc/about/drc_ref.xml index 72a5658de..a4a9cf55f 100644 --- a/src/lay/lay/doc/about/drc_ref.xml +++ b/src/lay/lay/doc/about/drc_ref.xml @@ -1,7 +1,7 @@ - + diff --git a/src/lay/lay/doc/about/drc_ref_global.xml b/src/lay/lay/doc/about/drc_ref_global.xml index 7b9e38400..2521e3296 100644 --- a/src/lay/lay/doc/about/drc_ref_global.xml +++ b/src/lay/lay/doc/about/drc_ref_global.xml @@ -1,7 +1,7 @@ - + @@ -20,7 +20,27 @@ or provide function-like alternatives for the methods.
  • antenna_check(gate, metal, ratio, [ diode_specs ... ])
  • -See Netter#antenna_check for a description of that function +See Netter#antenna_check for a description of that function. +

    +

    "bjt3" - Supplies the BJT3 transistor extractor class

    + +

    Usage:

    +
      +
    • bjt3(name)
    • +
    +

    +Use this class with device_extract to specify extraction of a +bipolar junction transistor +

    +

    "bjt4" - Supplies the BJT4 transistor extractor class

    + +

    Usage:

    +
      +
    • bjt4(name)
    • +
    +

    +Use this class with device_extract to specify extraction of a +bipolar junction transistor with a substrate terminal

    "box" - Creates a box object

    @@ -32,6 +52,27 @@ See Netter#antenna_check f This function creates a box object. The arguments are the same than for the DBox constructors.

    +

    "capacitor" - Supplies the capacitor extractor class

    + +

    Usage:

    +
      +
    • capacitor(name, area_cap)
    • +
    +

    +Use this class with device_extract to specify extraction of a capacitor. +The area_cap argument is the capacitance in Farad per square micrometer. +

    +

    "capacitor_with_bulk" - Supplies the capacitor extractor class that includes a bulk terminal

    + +

    Usage:

    +
      +
    • capacitor_with_bulk(name)
    • +
    +

    +Use this class with device_extract to specify extraction of a capacitor +with a bulk terminal. +The area_cap argument is the capacitance in Farad per square micrometer. +

    "cell" - Selects a cell for input on the default source

    Usage:

    @@ -58,7 +99,7 @@ l1 = input(1, 0)
  • clear_connections
  • -See Netter#clear_connections for a description of that function +See Netter#clear_connections for a description of that function.

    "clip" - Specifies clipped input on the default source

    @@ -96,6 +137,15 @@ See Netter#connect for a descrip

    See Netter#connect_global for a description of that function.

    +

    "connect_implicit" - Specifies a label pattern for implicit net connections

    + +

    Usage:

    +
      +
    • connect_implicit(label_pattern)
    • +
    +

    +See Netter#connect_implicit for a description of that function. +

    "dbu" - Gets or sets the database unit to use

    Usage:

    @@ -135,6 +185,16 @@ implied always. Sometimes cell variants will be created.

    Deep mode can be cancelled with tiles or flat.

    +

    "diode" - Supplies the diode extractor class

    + +

    Usage:

    +
      +
    • diode(name)
    • +
    +

    +Use this class with device_extract to specify extraction of a +planar diode +

    "edge" - Creates an edge object

    Usage:

    @@ -178,9 +238,10 @@ See
    Source#extent for a descripti

    Usage:

    • extract_devices(extractor, layer_hash)
    • +
    • extract_devices(extractor_class, name, layer_hash)

    -See Netter#extract_devices for a description of that function +See Netter#extract_devices for a description of that function.

    "flat" - Disables tiling mode

    @@ -225,15 +286,6 @@ this method.
    • is_tiled?
    -

    "join_nets" - Specifies a label pattern for implicit net connections

    - -

    Usage:

    -
      -
    • join_nets(label_pattern)
    • -
    -

    -See Netter#join_nets for a description of that function -

    "l2n_data" - Gets the internal LayoutToNetlist object for the default Netter

    Usage:

    @@ -241,7 +293,7 @@ See
    Netter#join_nets for a des
  • l2n_data
  • -See Netter#l2n_data for a description of that function +See Netter#l2n_data for a description of that function.

    "labels" - Gets the labels (text) from an original layer

    @@ -337,6 +389,33 @@ delivered by polygon_layer is not. On the other hand, a layer created by the make_layer method is not intended to be filled with Layer#insert.

    +

    "mos3" - Supplies the MOS3 transistor extractor class

    + +

    Usage:

    +
      +
    • mos3(name)
    • +
    +

    +Use this class with device_extract to specify extraction of a +three-terminal MOS transistor +

    +

    "mos4" - Supplies the MOS4 transistor extractor class

    + +

    Usage:

    +
      +
    • mos4(name)
    • +
    +

    +Use this class with device_extract to specify extraction of a +four-terminal MOS transistor +

    +

    "netlist" - Obtains the extracted netlist from the default Netter

    + +

    +The netlist is a Netlist object. If no netlist is extracted +yet, this method will trigger the extraction process. +See Netter#netlist for a description of this function. +

    "netter" - Creates a new netter object

    Usage:

    @@ -344,7 +423,7 @@ filled with
    Layer#insert.
  • netter
  • -See Netter for more details +See Netter for more details

    "no_borders" - Reset the tile borders

    @@ -454,6 +533,42 @@ By default this is the cell name of the default source. If there is no source layout you'll need to give the cell name in the third parameter.

    +

    "report_netlist" - Specifies an extracted netlist report for output

    + +

    Usage:

    +
      +
    • report_netlist([ filename ])
    • +
    +

    +This method applies to runsets creating a netlist through +extraction. Extraction happens when connections and/or device +extractions are made. If this statement is used, the extracted +netlist plus the net and device shapes are turned into a +layout-to-netlist report (L2N database) and shown in the +netlist browser window. If a file name is given, the report +will also be written to the given file. +

    +

    "resistor" - Supplies the resistor extractor class

    + +

    Usage:

    +
      +
    • resistor(name, sheet_rho)
    • +
    +

    +Use this class with device_extract to specify extraction of a resistor. +The sheet_rho value is the sheet resistance in ohms/square. +

    +

    "resistor_with_bulk" - Supplies the resistor extractor class that includes a bulk terminal

    + +

    Usage:

    +
      +
    • resistor_with_bulk(name)
    • +
    +

    +Use this class with device_extract to specify extraction of a resistor +with a bulk terminal. +The sheet_rho value is the sheet resistance in ohms/square. +

    "select" - Specifies cell filters on the default source

    Usage:

    @@ -535,6 +650,22 @@ Except if the argument is a Cell object, a ce stating the cell name under which the results are saved. If no cellname is specified, either the current cell or "TOP" is used.

    +

    "target_netlist" - With this statement, an extracted netlist is finally written to a file

    + +

    Usage:

    +
      +
    • target_netlist(filename [, format [, comment ] ])
    • +
    +

    +This method applies to runsets creating a netlist through +extraction. Extraction happens when connections and/or device +extractions are made. If this statement is used, the extracted +netlist is written to the given file. +

    +The format parameter specifies the writer to use. You can use nil +to use the standard format or produce a SPICE writer with write_spice. +See write_spice for more details. +

    "threads" - Specifies the number of CPU cores to use in tiling mode

    Usage:

    @@ -611,4 +742,17 @@ In verbose mode, more output is generated in the log file

    In verbose mode, more output is generated in the log file

    +

    "write_spice" - Defines SPICE output format (with options)

    + +

    Usage:

    +
      +
    • write_spice([ use_net_names [, with_comments ] ])
    • +
    +

    +Use this option in target_netlist for the format parameter to +specify SPICE format. +"use_net_names" and "with_comments" are boolean parameters indicating +whether to use named nets (numbers if false) and whether to add +information comments such as instance coordinates or pin names. +

    diff --git a/src/lay/lay/doc/about/drc_ref_layer.xml b/src/lay/lay/doc/about/drc_ref_layer.xml index 85adfd5f0..f996764b9 100644 --- a/src/lay/lay/doc/about/drc_ref_layer.xml +++ b/src/lay/lay/doc/about/drc_ref_layer.xml @@ -1,7 +1,7 @@ - + @@ -2062,7 +2062,7 @@ For each corner, an edge pair containing the edges forming in the angle is retur

    A method delivering all objects not matching the angle criterion is without_angle.

    -The following images demonstrate some use cases of with_angle and without_angle: +The following images demonstrate some use cases of with_angle and without_angle:

    diff --git a/src/lay/lay/doc/about/drc_ref_netter.xml b/src/lay/lay/doc/about/drc_ref_netter.xml index 48fb07403..1fa008d21 100644 --- a/src/lay/lay/doc/about/drc_ref_netter.xml +++ b/src/lay/lay/doc/about/drc_ref_netter.xml @@ -1,7 +1,7 @@ - + @@ -14,10 +14,6 @@ as global functions too where they act on a default incarnation of the netter. Usually it's not required to instantiate a Netter object, but it serves as a container for this functionality.

    -An individual netter object can be created, if the netter results -need to be kept for multiple extractions. If you really need -a Netter object, use the global netter function: -

     # create a new Netter object:
     nx = netter
    @@ -27,8 +23,8 @@ nx.connect(poly, contact)
     

    Network formation:

    -A basic Service the Netter object provides is the formation of -connected networks of conductive shapes. To do so, the Netter +A basic service the Netter object provides is the formation of +connected networks of conductive shapes (netting). To do so, the Netter must be given a connection specification. This happens by calling "connect" with two polygon layers. The Netter will then regard all overlaps of shapes on these layers as connections between the @@ -183,17 +179,45 @@ Global nets are common to all cells. Global nets automatically connect to parent cells throughs implied pins. An example is the substrate (bulk) net which connects to shapes belonging to tie-down diodes.

    +

    "connect_implicit" - Specifies a search pattern for labels which create implicit net connections

    + +

    Usage:

    +
      +
    • connect_implicit(label_pattern)
    • +
    +

    +Use this method to supply a glob pattern for labels which create implicit net connections +on the top level circuit. This feature is useful to connect identically labelled nets +while a component isn't integrated yet. If the component is integrated, net may be connected +on a higher hierarchy level - e.g. by a power mesh. Inside the component this net consists +of individual islands. To properly perform netlist extraction and comparison, these islands +need to be connected even though there isn't a physical connection. "connect_implicit" can +achive this if these islands are labelled with the same text on the top level of the +component. +

    +Glob pattern are used which resemble shell file pattern: "*" is for all labels, "VDD" +for all "VDD" labels (pattern act case sensitive). "VDD*" is for all labels beginning +with "VDD" (still different labels will be connected to different nets!). "{VDD,VSS}" +is either "VDD" or "VSS". +

    +The search pattern is applied on the next net extraction. The search pattern is cleared +on "clear_connections". +

    "extract_devices" - Extracts devices based on the given extractor class, name and device layer selection

    Usage:

    • extract_devices(extractor, layer_hash)
    • +
    • extract_devices(extractor_class, name, layer_hash)

    -Runs the device extraction for given device extractor class. +Runs the device extraction for given device extractor class. In the first +form, the extractor object is given. In the second form, the extractor's +class object and the new extractor's name is given.

    The device extractor is either an instance of one of the predefined extractor -classes (e.g. DeviceExtractorMOS4Transistor) or a custom class. It provides the +classes (e.g. obtained from the utility methods such as mos4) or a custom class. +It provides the algorithms for deriving the device parameters from the device geometry. It needs several device recognition layers which are passed in the layer hash.

    @@ -212,38 +236,13 @@ active = input(2, 0) poly = input(3, 0) bulk = make_layer # renders an empty layer used for putting the terminals on -nactive = active - nwell # active area of NMOS -nsd = nactive - poly # source/drain area +nactive = active - nwell # active area of NMOS +nsd = nactive - poly # source/drain area gate = nactive & poly # gate area -mos4_ex = DeviceExtractorMOS4Transistor::new("NMOS4") -extract_devices(mos4_ex, { :SD => nsd, :G => gate, :P => poly, :W => bulk }) +extract_devices(mos4("NMOS4"), { :SD => nsd, :G => gate, :P => poly, :W => bulk })

    -

    "join_nets" - Specifies a search pattern for labels which create implicit net connections

    - -

    Usage:

    -
      -
    • join_nets(label_pattern)
    • -
    -

    -Use this method to supply a glob pattern for labels which create implicit net connections -on the top level circuit. This feature is useful to connect identically labelled nets -while a component isn't integrated yet. If the component is integrated, net may be connected -on a higher hierarchy level - e.g. by a power mesh. Inside the component this net consists -of individual islands. To properly perform netlist extraction and comparison, these islands -need to be connected even though there isn't a physical connection. "join_nets" can -achive this if these islands are labelled with the same text on the top level of the -component. -

    -Glob pattern are used which resemble shell file pattern: "*" is for all labels, "VDD" -for all "VDD" labels (pattern act case sensitive). "VDD*" is for all labels beginning -with "VDD" (still different labels will be connected to different nets!). "{VDD,VSS}" -is either "VDD" or "VSS". -

    -The search pattern is applied on the next net extraction. The search pattern is cleared -on "clear_connections". -

    "l2n_data" - Gets the internal LayoutToNetlist object

    Usage:

    @@ -254,4 +253,16 @@ on "clear_connections". The LayoutToNetlist object provides access to the internal details of the netter object.

    +

    "netlist" - Gets the extracted netlist or triggers extraction if not done yet

    + +

    Usage:

    +
      +
    • netlist
    • +
    +

    +If no extraction has been performed yet, this method will start the +layout analysis. Hence, all connect, connect_global and connect_implicit +calls must have been made before this method is used. Further connect +statements will clear the netlist and re-extract it again. +

    diff --git a/src/lay/lay/doc/about/drc_ref_source.xml b/src/lay/lay/doc/about/drc_ref_source.xml index 7c41744a6..04ee3c660 100644 --- a/src/lay/lay/doc/about/drc_ref_source.xml +++ b/src/lay/lay/doc/about/drc_ref_source.xml @@ -1,7 +1,7 @@ - + @@ -180,6 +180,12 @@ the specified rectangle. touching is a similar method which delivers shapes touching the search region with their bounding box (without the requirement to overlap)

    +

    "path" - Gets the path of the corresponding layout file or nil if there is no path

    + +

    Usage:

    +
      +
    • path
    • +

    "polygons" - Gets the polygon shapes (or shapes that can be converted polygons) from an input layer

    Usage:

    diff --git a/src/lay/lay/doc/about/index.xml b/src/lay/lay/doc/about/index.xml index f586a54a4..71465e8ab 100644 --- a/src/lay/lay/doc/about/index.xml +++ b/src/lay/lay/doc/about/index.xml @@ -29,6 +29,13 @@ + + + + + + + diff --git a/src/lay/lay/layHelpResources.qrc b/src/lay/lay/layHelpResources.qrc index 8e74b2904..c81e6f032 100644 --- a/src/lay/lay/layHelpResources.qrc +++ b/src/lay/lay/layHelpResources.qrc @@ -135,6 +135,9 @@ doc/about/drc_ref_source.xml doc/about/drc_ref_global.xml doc/about/drc_ref_netter.xml + doc/about/lvs_ref.xml + doc/about/lvs_ref_global.xml + doc/about/lvs_ref_netter.xml doc/about/packages.xml diff --git a/src/lay/lay/layResourceHelpProvider.cc b/src/lay/lay/layResourceHelpProvider.cc index 130b28168..b154f4dcd 100644 --- a/src/lay/lay/layResourceHelpProvider.cc +++ b/src/lay/lay/layResourceHelpProvider.cc @@ -51,7 +51,8 @@ ResourceHelpProvider::ResourceHelpProvider (const char *folder, const std::strin QDomDocument ResourceHelpProvider::get (const std::string &path) const { - QResource res (resource_url (tl::to_qstring (path))); + QString qpath = tl::to_qstring (path); + QResource res (resource_url (qpath)); if (res.size () == 0) { throw tl::Exception (tl::to_string (QObject::tr ("ERROR: no data found for resource ")) + tl::to_string (res.fileName ())); }