skidl.part module¶
Handles parts.
- class skidl.part.Part(lib=None, name=None, dest=NETLIST, tool=None, connections=None, part_defn=None, circuit=None, ref_prefix='', ref=None, tag=None, pin_splitters=None, **kwargs)[source]¶
Bases:
SkidlBaseObject
A class for storing a definition of a schematic part.
- Parameters:
lib – Either a SchLib object or a schematic part library file name.
name – A string with name of the part to find in the library, or to assign to the part defined by the part definition.
dest – String that indicates where the part is destined for (e.g., LIBRARY).
tool – The format for the library file or part definition (e.g., KICAD).
connections – A dictionary with part pin names/numbers as keys and the nets to which they will be connected as values. For example: { ‘IN-‘:a_in, ‘IN+’:gnd, ‘1’:AMPED_OUTPUT, ‘14’:vcc, ‘7’:gnd }
part_defn – A list of strings that define the part (usually read from a schematic library file).
circuit – The Circuit object this Part belongs to.
ref_prefix – Prefix for part references such as ‘U’ or ‘J’.
ref – A specific part reference to be assigned.
tag – A specific tag to tie the part to its footprint in the PCB.
pin_splitters – String of characters that split long pin names into shorter aliases.
- Keyword Arguments:
kwargs – Name/value pairs for setting attributes for the part. For example, manf_num=’LM4808MP-8’ would create an attribute named ‘manf_num’ for the part and assign it the value ‘LM4808MP-8’.
- Raises:
* Exception if the part library and definition are both missing. –
* Exception if an unknown file format is requested. –
- copy(num_copies=None, dest=NETLIST, circuit=None, io=None, **attribs)[source]¶
Make zero or more copies of this part while maintaining all pin/net connections.
- Parameters:
num_copies – Number of copies to make of this part.
dest – Indicates where the copy is destined for (e.g., NETLIST).
circuit – The circuit this part should be added to.
io – XSPICE I/O names.
- Keyword Arguments:
attribs – Name/value pairs for setting attributes for the copy.
- Returns:
A list of Part copies or a single Part if num_copies==1.
- Raises:
Exception if the requested number of copies is a non-integer or negative. –
Notes
An instance of a part can be copied just by calling it like so:
res = Part("Device",'R') # Get a resistor. res_copy = res(value='1K') # Copy the resistor and set resistance value.
You can also use the multiplication operator to make copies:
cap = Part("Device", 'C') # Get a capacitor caps = 10 * cap # Make an array with 10 copies of it.
- erc_list = [<function dflt_part_erc>]¶
- property foot¶
Get, set and delete the part footprint.
- generate_svg_component(symtx='', tool=None, net_stubs=None)[source]¶
Generate the SVG for displaying a part in an SVG schematic.
- classmethod get(text, circuit=None)[source]¶
Get the part with the given text from a circuit, or return None.
- Parameters:
text – A text string that will be searched for in the list of parts.
- Keyword Arguments:
circuit – The circuit whose parts will be searched. If set to None, then the parts in the default_circuit will be searched.
- Returns:
A list of parts or a single part that match the text string with either their reference, name, alias, or their description.
- get_pins(*pin_ids, **criteria)[source]¶
Return list of part pins selected by pin numbers or names.
- Parameters:
pin_ids – A list of strings containing pin names, numbers, regular expressions, slices, lists or tuples. If empty, then it will select all pins.
- Keyword Arguments:
criteria – Key/value pairs that specify attribute values the pins must have in order to be selected.
- Returns:
A list of pins matching the given IDs and satisfying all the criteria, or just a single Pin object if only a single match was found. Or None if no match was found.
Notes
Pins can be selected from a part by using brackets like so:
atmega = Part('atmel', 'ATMEGA16U2') net = Net() atmega[1] += net # Connects pin 1 of chip to the net. net += atmega['RESET'] # Connects reset pin to the net.
- property hierarchical_name¶
- is_connected()[source]¶
Return T/F depending upon whether a part is connected in a netlist.
If a part has pins but none of them are connected to nets, then this method will return False. Otherwise, it will return True even if the part has no pins (which can be the case for mechanical parts, silkscreen logos, or other non-electrical schematic elements).
- is_movable()[source]¶
Return T/F if the part can be moved from one circuit into another.
- This method returns true if:
the part is not in a circuit, or
the part has pins but none of them are connected to nets, or
the part has no pins (which can be the case for mechanical parts, silkscreen logos, or other non-electrical schematic elements).
- make_unit(label, *pin_ids, **criteria)[source]¶
Create a PartUnit from a set of pins in a Part object.
Parts can be organized into smaller pieces called PartUnits. A PartUnit acts like a Part but contains only a subset of the pins of the Part.
- Parameters:
label – The label used to identify the PartUnit.
pin_ids – A list of strings containing pin names, numbers, regular expressions, slices, lists or tuples.
- Keyword Arguments:
criteria – Key/value pairs that specify attribute values the pin must have in order to be selected.
- Returns:
The PartUnit.
- property match_pin_regex¶
Get, set and delete the enable/disable of pin regular-expression matching.
- property ordered_pins¶
- parse(partial_parse=False)[source]¶
Create a part from its stored part definition.
- Parameters:
partial_parse – When true, just get the name and aliases for the part. Leave the rest unparsed.
- property ref¶
Get, set and delete the part reference.
When setting the part reference, if another part with the same reference is found, the reference for this part is adjusted to make it unique.
- split_pin_names(delimiters)[source]¶
Use chars in delimiters to split pin names and add as aliases to each pin.
- property tag¶
Return the part’s tag.
- property value¶
Get, set and delete the part value.
- class skidl.part.PartUnit(parent, label, *pin_ids, **criteria)[source]¶
Bases:
Part
Create a PartUnit from a set of pins in a Part object.
Parts can be organized into smaller pieces called PartUnits. A PartUnit acts like a Part but contains only a subset of the pins of the Part. Except for the pins, the PartUnit is a shallow copy of the Part and cannot store any other unique data.
- Parameters:
part – This is the parent Part whose pins the PartUnit is built from.
pin_ids – A list of strings containing pin names, numbers, regular expressions, slices, lists or tuples. If empty, it will match every pin of the part.
- Keyword Arguments:
criteria – Key/value pairs that specify attribute values the pin must have in order to be selected.
Examples
This will return unit 1 from a part:
lm358 = Part('linear','lm358') lm358a = PartUnit(lm358, unit=1)
Or you can specify the pins directly:
lm358a = PartUnit(lm358, 1, 2, 3)
- add_pins_from_parent(*pin_ids, **criteria)[source]¶
Add selected pins from the parent to the part unit.
- property ref¶
Get, set and delete the part reference.
When setting the part reference, if another part with the same reference is found, the reference for this part is adjusted to make it unique.
- skidl.part.default_empty_footprint_handler(part)[source]¶
Handle the situation of a Part with no footprint when generating netlist/PCB.
- Parameters:
part (Part) – The part with no footprint.
Note
By default, this function logs an error message if the footprint is missing. Override this function if you want to try and set some default footprint for particular types of parts (such as using an 0805 footprint for a resistor).