get_additional_symbols(): some sanity checks, descend_schematic() more options in set_title argument (avoid set title, avoid processing pins/nets, avoid descending into i-th xdec[3] instance, descend as a whole xdec[3:0], add `xschem get_additional_symbols what` command, allow `xschem get_sch_from_sym -1 inv.sym` to get schematic associated with symbol. hier_psprint(): avoid printing / listing duplicate schematics, improved traversal.tcl

This commit is contained in:
stefan schippers 2024-11-05 13:59:37 +01:00
parent 0bd6ccef86
commit 92c99c10f9
15 changed files with 9765 additions and 9581 deletions

View File

@ -9,10 +9,10 @@ These instructions are relevant if you're installing Xschem with the Windows Ins
- Windows Ghostscript (to print; Add directory of gswin64.exe to PATH, if it's not already done so)
2. Install Tree
C:/Program Files/XSchem/bin - Binaries (executable file).
C:/Program Files/XSchem/doc - Various documentation.
C:/Program Files/XSchem/share - default share directory containing systemlib, utile, xschem.tcl, xschemrc and *.awk (can be overriden with XSCHEM_SHARE_DIR)
C:/Program Files/XSchem/xschem_library - XSchem library consisting of .sch and .sym
C:/Users/<YourUserName>/xschem - User configuration directory
C:/Program Files/XSchem/bin - Binaries (executable file).
C:/Program Files/XSchem/share/doc - Various documentation and examples schematics
C:/Program Files/XSchem/share/xschem - default share directory containing systemlib, utile, xschem.tcl, xschemrc and *.awk (can be overriden with XSCHEM_SHARE_DIR)
C:/Program Files/XSchem/share/xschem/xschem_library - XSchem library devices consisting of .sch and .sym
C:/Users/<YourUserName>/xschem - User configuration directory
It's important to maintain this Install tree for XSchem to work correctly

View File

@ -84,17 +84,16 @@ INSTRUCTIONS TO COMPILE XSCHEM IN VISUAL STUDIO 2022
Outputs: expandlabel.c
3. Compiling
- config.h can be edited to change default's XSCHEM_LIBRARY_PATH.
It's defaulted to include the following directories:
C:/Program Files/XSchem/xschem_library/devices
C:/Program Files/XSchem/xschem_library/examples
C:/Program Files/XSchem/xschem_library/ngspice
C:/Program Files/XSchem/xschem_library/logic
C:/Program Files/XSchem/xschem_library/binto7seg
C:/Program Files/XSchem/xschem_library/generators
C:/Program Files/XSchem/xschem_library/pcb
C:/Program Files/XSchem/xschem_library/rom8k
C:/Program Files/XSchem/share/xschem/xschem_library/devices
C:/Program Files/XSchem/share/doc/examples
C:/Program Files/XSchem/share/doc/ngspice
C:/Program Files/XSchem/share/doc/logic
C:/Program Files/XSchem/share/doc/binto7seg
C:/Program Files/XSchem/share/doc/generators
C:/Program Files/XSchem/share/doc/pcb
C:/Program Files/XSchem/share/doc/rom8k
Ctrl-b
- After compiling the first time, add expandlabel.c, expandlabel.h, parselabel.c into the project.

View File

@ -72,7 +72,7 @@
<Shortcut Id="DocumentationStartMenuShortcut"
Name="Xschem Documentation"
Description="Helpful Xschem Documentation"
Target="[DOCFOLDER]/xschem_man/xschem_manual.pdf" />
Target="[SHAREFOLDER]/doc/xschem/xschem_man/xschem_manual.pdf" />
<RegistryValue Root="HKCU" Key="Software\CoralEDA\Xschem" Name="installed" Type="integer" Value="1" KeyPath="yes"/>
</Component>
</DirectoryRef>
@ -110,221 +110,223 @@
</Product>
<Fragment>
<DirectoryRef Id="SHAREFOLDER">
<Component Id="CMPBREAKAWK">
<File Id="BREAKAWK" KeyPath="yes" Source="../../src/break.awk" />
</Component>
<Component Id="CMPCHANGEINDEXTCL">
<File Id="CHANGEINDEXTCL" KeyPath="yes" Source="../../src/change_index.tcl" />
</Component>
<Component Id="CMPEXPAWK">
<File Id="EXPAWK" KeyPath="yes" Source="../../src/convert_to_verilog2001.awk" />
</Component>
<Component Id="CMPFLATTENAWK">
<File Id="FLATTENAWK" KeyPath="yes" Source="../../src/flatten.awk" />
</Component>
<Component Id="CMPFLATTENSAVENODEASAWK">
<File Id="FLATTENSAVENODEASAWK" KeyPath="yes" Source="../../src/flatten_savenodes.awk" />
</Component>
<Component Id="CMPGSCHEMTOXSCHEMAWK">
<File Id="GSCHEMTOXSCHEMAWK" KeyPath="yes" Source="../../src/gschemtoxschem.awk" />
</Component>
<Component Id="CMPHSPICEBACKANNOTATE">
<File Id="HSPICEBACKANNOTATE" KeyPath="yes" Source="../../src/hspice_backannotate.tcl" />
</Component>
<Component Id="CMPADDCUSTOMMENU">
<File Id="ADDCUSTOMMENU" KeyPath="yes" Source="../../src/add_custom_menu.tcl" />
</Component>
<Component Id="CMPMOUSEBINDINGS">
<File Id="MOUSEBINDINGS" KeyPath="yes" Source="../../src/mouse_bindings.tcl" />
</Component>
<Component Id="CMPKEYSHELP">
<File Id="KEYSHELP" KeyPath="yes" Source="../../src/keys.help" />
</Component>
<Component Id="CMPMAKESYMAWK">
<File Id="MAKESYMAWK" KeyPath="yes" Source="../../src/make_sym.awk" />
</Component>
<Component Id="CMPMAKESYMLCCAWK">
<File Id="MAKESYMLCCAWK" KeyPath="yes" Source="../../src/make_sym_lcc.awk" />
</Component>
<Component Id="CMPNGSPICEBACKANNOTATE">
<File Id="NGSPICEBACKANNOTATE" KeyPath="yes" Source="../../src/ngspice_backannotate.tcl" />
</Component>
<Component Id="CMPTRAVERSAL">
<File Id="TRAVERSAL" KeyPath="yes" Source="../../src/traversal.tcl" />
</Component>
<Component Id="CMPORDERLABELSAWK">
<File Id="ORDERLABELSAWK" KeyPath="yes" Source="../../src/order_labels.awk" />
</Component>
<Component Id="CMPSRCRESOURCESTCL">
<File Id="RESOURCESTCL" KeyPath="yes" Source="../../src/resources.tcl" />
</Component>
<Component Id="CMPSRCADDCUSTOMBUTTONTCL">
<File Id="ADDCUSTOMBUTTONTCL" KeyPath="yes" Source="../../src/add_custom_button.tcl" />
</Component>
<Component Id="CMPSORTLABELSAWK">
<File Id="SORTLABELSAWK" KeyPath="yes" Source="../../src/sort_labels.awk" />
</Component>
<Component Id="CMPSPICEAWK">
<File Id="SPICEAWK" KeyPath="yes" Source="../../src/spice.awk" />
</Component>
<Component Id="CMPSYMGENAWK">
<File Id="SYMGENAWK" KeyPath="yes" Source="../../src/symgen.awk" />
</Component>
<Component Id="CMPTEDAXAWK">
<File Id="TEDAXAWK" KeyPath="yes" Source="../../src/tedax.awk" />
</Component>
<Component Id="CMPFLATTENTEDAXAWK">
<File Id="FLATTENTEDAXAWK" KeyPath="yes" Source="../../src/flatten_tedax.awk" />
</Component>
<Component Id="CMPVERILOGAWK">
<File Id="VERILOGAWK" KeyPath="yes" Source="../../src/verilog.awk" />
</Component>
<Component Id="CMPVHDLAWK">
<File Id="VHDLAWK" KeyPath="yes" Source="../../src/vhdl.awk" />
</Component>
<Component Id="CMPXSCHEMHELP">
<File Id="XSCHEMHELP" KeyPath="yes" Source="../../src/xschem.help" />
</Component>
<Component Id="CMPSRCXSCHEMRC">
<File Id="XSCHEMRC" KeyPath="yes" Source="xschemrc" />
</Component>
<Component Id="CMPSRCXSCHEMTCL">
<File Id="XSCHEMTCL" KeyPath="yes" Source="../../src/xschem.tcl" />
</Component>
<Component Id="CMPSRCCREATEGRAPHMTCL">
<File Id="CREATEGRAPHMTCL" KeyPath="yes" Source="../../src/create_graph.tcl" />
</Component>
<Component Id="CMPMAKESCHFROMVHDLAWK">
<File Id="MAKESCHFROMVHDLAWK" KeyPath="yes" Source="../../src/make_sch_from_vhdl.awk" />
</Component>
<Component Id="CMPCHANGEREFAWK">
<File Id="CHANGEREFAWK" KeyPath="yes" Source="../../src/change_ref.awk" />
</Component>
<Component Id="CMPHERCULESTOSPICEAWK">
<File Id="HERCULESTOSPICEAWK" KeyPath="yes" Source="../../src/herculestospice.awk" />
</Component>
<Component Id="CMPIMPORTOPUSSYMBOLSAWK">
<File Id="IMPORTOPUSSYMBOLSAWK" KeyPath="yes" Source="../../src/import_opus_symbols.awk" />
</Component>
<Component Id="CMPLABELCOMPACTORAWK">
<File Id="LABELCOMPACTORAWK" KeyPath="yes" Source="../../src/label_compactor.awk" />
</Component>
<Component Id="CMPMAKEEDITAWK">
<File Id="MAKEEDITAWK" KeyPath="yes" Source="../../src/make_edif.awk" />
</Component>
<Component Id="CMPMAKESCHFROMCADENCEPINAWK">
<File Id="MAKESCHFROMCADENCEPINAWK" KeyPath="yes" Source="../../src/make_sch_from_cadence_pin.awk" />
</Component>
<Component Id="CMPMAKESCHFROMSPICEAWK">
<File Id="MAKESCHFROMSPICEAWK" KeyPath="yes" Source="../../src/make_sch_from_spice.awk" />
</Component>
<Component Id="CMPMAKESYMFROMSPICEAWK">
<File Id="MAKESYMFROMSPICE" KeyPath="yes" Source="../../src/make_sym_from_spice.awk" />
</Component>
<Component Id="CMPMAKEVHDLFROMSPICEAWK">
<File Id="MAKEVHDLFROMSPICEAWK" KeyPath="yes" Source="../../src/make_vhdl_from_spice.awk" />
</Component>
<Component Id="CMPNETLISTCOMPACTORAWK">
<File Id="NETLISTCOMPACTORAWK" KeyPath="yes" Source="../../src/netlist_compactor.awk" />
</Component>
<Component Id="CMPPARSESYNOPSYSVHDLAWK">
<File Id="PARSESYNOPSYSVHDLAWK" KeyPath="yes" Source="../../src/parse_synopsys_vhdl.awk" />
</Component>
<Component Id="CMPREDUCEEVENODDARRAYLABELSAWK">
<File Id="REDUCEEVENODDARRAYLABELSAWK" KeyPath="yes" Source="../../src/reduce_even_odd_array_labels.awk" />
</Component>
<Component Id="CMPRESCALEAWK">
<File Id="RESCALEAWK" KeyPath="yes" Source="../../src/rescale.awk" />
</Component>
<Component Id="CMPSUPERGREPAWK">
<File Id="SUPERGREPAWK" KeyPath="yes" Source="../../src/supergrep.awk" />
</Component>
<Component Id="CMPTRACKMEMORYAWK">
<File Id="TRACKMEMORYAWK" KeyPath="yes" Source="../../src/track_memory.awk" />
</Component>
<Component Id="CMPTRADUCIAWK">
<File Id="TRADUCIAWK" KeyPath="yes" Source="../../src/traduci.awk" />
</Component>
<Component Id="CMPPLACEPLINS">
<File Id="PLACEPLINS" KeyPath="yes" Source="../../src/place_pins.tcl" />
</Component>
<Component Id="CMPPLACESYMPINS">
<File Id="PLACESYMPINS" KeyPath="yes" Source="../../src/place_sym_pins.tcl" />
</Component>
<Component Id="CMPCREATESYMBOL">
<File Id="CREATESYMBOL" KeyPath="yes" Source="../../src/create_symbol.tcl" />
</Component>
<Directory Id="SYSTEMLIBFOLDER" Name="systemlib">
<Component Id="CMPSYSTEMLIBFONTSCH">
<File Id="FONTSCH" KeyPath="yes" Source="../../src/systemlib/font.sch" />
</Component>
<Component Id="CMPSYSTEMLIBMISSINGSYM">
<File Id="MISSINGSYM" KeyPath="yes" Source="../../src/systemlib/missing.sym" />
</Component>
<Component Id="CMPSYSTEMLIBIOPINLCCSYM">
<File Id="IOPINLCCSYM" KeyPath="yes" Source="../../src/systemlib/iopin_lcc.sym" />
</Component>
<DirectoryRef Id="SHAREFOLDER">
<Directory Id="sharexschemFA1F463296CEB32195C7A4F214DF" Name="xschem">
<Component Id="CMPBREAKAWK">
<File Id="BREAKAWK" KeyPath="yes" Source="../../src/break.awk" />
</Component>
<Component Id="CMPCHANGEINDEXTCL">
<File Id="CHANGEINDEXTCL" KeyPath="yes" Source="../../src/change_index.tcl" />
</Component>
<Component Id="CMPEXPAWK">
<File Id="EXPAWK" KeyPath="yes" Source="../../src/convert_to_verilog2001.awk" />
</Component>
<Component Id="CMPFLATTENAWK">
<File Id="FLATTENAWK" KeyPath="yes" Source="../../src/flatten.awk" />
</Component>
<Component Id="CMPFLATTENSAVENODEASAWK">
<File Id="FLATTENSAVENODEASAWK" KeyPath="yes" Source="../../src/flatten_savenodes.awk" />
</Component>
<Component Id="CMPGSCHEMTOXSCHEMAWK">
<File Id="GSCHEMTOXSCHEMAWK" KeyPath="yes" Source="../../src/gschemtoxschem.awk" />
</Component>
<Component Id="CMPHSPICEBACKANNOTATE">
<File Id="HSPICEBACKANNOTATE" KeyPath="yes" Source="../../src/hspice_backannotate.tcl" />
</Component>
<Component Id="CMPADDCUSTOMMENU">
<File Id="ADDCUSTOMMENU" KeyPath="yes" Source="../../src/add_custom_menu.tcl" />
</Component>
<Component Id="CMPMOUSEBINDINGS">
<File Id="MOUSEBINDINGS" KeyPath="yes" Source="../../src/mouse_bindings.tcl" />
</Component>
<Component Id="CMPKEYSHELP">
<File Id="KEYSHELP" KeyPath="yes" Source="../../src/keys.help" />
</Component>
<Component Id="CMPMAKESYMAWK">
<File Id="MAKESYMAWK" KeyPath="yes" Source="../../src/make_sym.awk" />
</Component>
<Component Id="CMPMAKESYMLCCAWK">
<File Id="MAKESYMLCCAWK" KeyPath="yes" Source="../../src/make_sym_lcc.awk" />
</Component>
<Component Id="CMPNGSPICEBACKANNOTATE">
<File Id="NGSPICEBACKANNOTATE" KeyPath="yes" Source="../../src/ngspice_backannotate.tcl" />
</Component>
<Component Id="CMPTRAVERSAL">
<File Id="TRAVERSAL" KeyPath="yes" Source="../../src/traversal.tcl" />
</Component>
<Component Id="CMPORDERLABELSAWK">
<File Id="ORDERLABELSAWK" KeyPath="yes" Source="../../src/order_labels.awk" />
</Component>
<Component Id="CMPSRCRESOURCESTCL">
<File Id="RESOURCESTCL" KeyPath="yes" Source="../../src/resources.tcl" />
</Component>
<Component Id="CMPSRCADDCUSTOMBUTTONTCL">
<File Id="ADDCUSTOMBUTTONTCL" KeyPath="yes" Source="../../src/add_custom_button.tcl" />
</Component>
<Component Id="CMPSORTLABELSAWK">
<File Id="SORTLABELSAWK" KeyPath="yes" Source="../../src/sort_labels.awk" />
</Component>
<Component Id="CMPSPICEAWK">
<File Id="SPICEAWK" KeyPath="yes" Source="../../src/spice.awk" />
</Component>
<Component Id="CMPSYMGENAWK">
<File Id="SYMGENAWK" KeyPath="yes" Source="../../src/symgen.awk" />
</Component>
<Component Id="CMPTEDAXAWK">
<File Id="TEDAXAWK" KeyPath="yes" Source="../../src/tedax.awk" />
</Component>
<Component Id="CMPFLATTENTEDAXAWK">
<File Id="FLATTENTEDAXAWK" KeyPath="yes" Source="../../src/flatten_tedax.awk" />
</Component>
<Component Id="CMPVERILOGAWK">
<File Id="VERILOGAWK" KeyPath="yes" Source="../../src/verilog.awk" />
</Component>
<Component Id="CMPVHDLAWK">
<File Id="VHDLAWK" KeyPath="yes" Source="../../src/vhdl.awk" />
</Component>
<Component Id="CMPXSCHEMHELP">
<File Id="XSCHEMHELP" KeyPath="yes" Source="../../src/xschem.help" />
</Component>
<Component Id="CMPSRCXSCHEMRC">
<File Id="XSCHEMRC" KeyPath="yes" Source="xschemrc" />
</Component>
<Component Id="CMPSRCXSCHEMTCL">
<File Id="XSCHEMTCL" KeyPath="yes" Source="../../src/xschem.tcl" />
</Component>
<Component Id="CMPSRCCREATEGRAPHMTCL">
<File Id="CREATEGRAPHMTCL" KeyPath="yes" Source="../../src/create_graph.tcl" />
</Component>
<Component Id="CMPMAKESCHFROMVHDLAWK">
<File Id="MAKESCHFROMVHDLAWK" KeyPath="yes" Source="../../src/make_sch_from_vhdl.awk" />
</Component>
<Component Id="CMPCHANGEREFAWK">
<File Id="CHANGEREFAWK" KeyPath="yes" Source="../../src/change_ref.awk" />
</Component>
<Component Id="CMPHERCULESTOSPICEAWK">
<File Id="HERCULESTOSPICEAWK" KeyPath="yes" Source="../../src/herculestospice.awk" />
</Component>
<Component Id="CMPIMPORTOPUSSYMBOLSAWK">
<File Id="IMPORTOPUSSYMBOLSAWK" KeyPath="yes" Source="../../src/import_opus_symbols.awk" />
</Component>
<Component Id="CMPLABELCOMPACTORAWK">
<File Id="LABELCOMPACTORAWK" KeyPath="yes" Source="../../src/label_compactor.awk" />
</Component>
<Component Id="CMPMAKEEDITAWK">
<File Id="MAKEEDITAWK" KeyPath="yes" Source="../../src/make_edif.awk" />
</Component>
<Component Id="CMPMAKESCHFROMCADENCEPINAWK">
<File Id="MAKESCHFROMCADENCEPINAWK" KeyPath="yes" Source="../../src/make_sch_from_cadence_pin.awk" />
</Component>
<Component Id="CMPMAKESCHFROMSPICEAWK">
<File Id="MAKESCHFROMSPICEAWK" KeyPath="yes" Source="../../src/make_sch_from_spice.awk" />
</Component>
<Component Id="CMPMAKESYMFROMSPICEAWK">
<File Id="MAKESYMFROMSPICE" KeyPath="yes" Source="../../src/make_sym_from_spice.awk" />
</Component>
<Component Id="CMPMAKEVHDLFROMSPICEAWK">
<File Id="MAKEVHDLFROMSPICEAWK" KeyPath="yes" Source="../../src/make_vhdl_from_spice.awk" />
</Component>
<Component Id="CMPNETLISTCOMPACTORAWK">
<File Id="NETLISTCOMPACTORAWK" KeyPath="yes" Source="../../src/netlist_compactor.awk" />
</Component>
<Component Id="CMPPARSESYNOPSYSVHDLAWK">
<File Id="PARSESYNOPSYSVHDLAWK" KeyPath="yes" Source="../../src/parse_synopsys_vhdl.awk" />
</Component>
<Component Id="CMPREDUCEEVENODDARRAYLABELSAWK">
<File Id="REDUCEEVENODDARRAYLABELSAWK" KeyPath="yes" Source="../../src/reduce_even_odd_array_labels.awk" />
</Component>
<Component Id="CMPRESCALEAWK">
<File Id="RESCALEAWK" KeyPath="yes" Source="../../src/rescale.awk" />
</Component>
<Component Id="CMPSUPERGREPAWK">
<File Id="SUPERGREPAWK" KeyPath="yes" Source="../../src/supergrep.awk" />
</Component>
<Component Id="CMPTRACKMEMORYAWK">
<File Id="TRACKMEMORYAWK" KeyPath="yes" Source="../../src/track_memory.awk" />
</Component>
<Component Id="CMPTRADUCIAWK">
<File Id="TRADUCIAWK" KeyPath="yes" Source="../../src/traduci.awk" />
</Component>
<Component Id="CMPPLACEPLINS">
<File Id="PLACEPLINS" KeyPath="yes" Source="../../src/place_pins.tcl" />
</Component>
<Component Id="CMPPLACESYMPINS">
<File Id="PLACESYMPINS" KeyPath="yes" Source="../../src/place_sym_pins.tcl" />
</Component>
<Component Id="CMPCREATESYMBOL">
<File Id="CREATESYMBOL" KeyPath="yes" Source="../../src/create_symbol.tcl" />
</Component>
<Component Id="CMPSYSTEMLIBIOPINLCCTOPSYM">
<File Id="IOPINLCCTOPSYM" KeyPath="yes" Source="../../src/systemlib/iopin_lcc_top.sym" />
</Component>
<Directory Id="SYSTEMLIBFOLDER" Name="systemlib">
<Component Id="CMPSYSTEMLIBFONTSCH">
<File Id="FONTSCH" KeyPath="yes" Source="../../src/systemlib/font.sch" />
</Component>
<Component Id="CMPSYSTEMLIBMISSINGSYM">
<File Id="MISSINGSYM" KeyPath="yes" Source="../../src/systemlib/missing.sym" />
</Component>
<Component Id="CMPSYSTEMLIBIOPINLCCSYM">
<File Id="IOPINLCCSYM" KeyPath="yes" Source="../../src/systemlib/iopin_lcc.sym" />
</Component>
<Component Id="CMPSYSTEMLIBIPINLCCSYM">
<File Id="IPINLCCSYM" KeyPath="yes" Source="../../src/systemlib/ipin_lcc.sym" />
</Component>
<Component Id="CMPSYSTEMLIBIOPINLCCTOPSYM">
<File Id="IOPINLCCTOPSYM" KeyPath="yes" Source="../../src/systemlib/iopin_lcc_top.sym" />
</Component>
<Component Id="CMPSYSTEMLIBIPINLCCTOPSYM">
<File Id="IPINLCCTOPSYM" KeyPath="yes" Source="../../src/systemlib/ipin_lcc_top.sym" />
</Component>
<Component Id="CMPSYSTEMLIBIPINLCCSYM">
<File Id="IPINLCCSYM" KeyPath="yes" Source="../../src/systemlib/ipin_lcc.sym" />
</Component>
<Component Id="CMPSYSTEMLIBOPINLCCSYM">
<File Id="OPINLCCSYM" KeyPath="yes" Source="../../src/systemlib/opin_lcc.sym" />
</Component>
<Component Id="CMPSYSTEMLIBOPINLCCTOPSYM">
<File Id="OPINLCCTOPSYM" KeyPath="yes" Source="../../src/systemlib/opin_lcc_top.sym" />
</Component>
</Directory>
<Directory Id="UTILEFOLDER" Name="utile">
<Component Id="CMPCLOCKAWK">
<File Id="CLOCKAWK" KeyPath="yes" Source="../../src/utile/clock.awk" />
</Component>
<Component Id="CMPEXPANDALIASAWK">
<File Id="EXPANDALIASAWK" KeyPath="yes" Source="../../src/utile/expand_alias.awk" />
</Component>
<Component Id="CMPPARAMAWK">
<File Id="PARAMAWK" KeyPath="yes" Source="../../src/utile/param.awk" />
</Component>
<Component Id="CMPPREPROCESSAWK">
<File Id="PREPROCESSAWK" KeyPath="yes" Source="../../src/utile/preprocess.awk" />
</Component>
<Component Id="CMPSTIMULIAWK">
<File Id="STIMULIAWK" KeyPath="yes" Source="../../src/utile/stimuli.awk" />
</Component>
<Component Id="CMPTEMPLATESTIMULI">
<File Id="TEMPLATESTIMULI" KeyPath="yes" Source="../../src/utile/template.stimuli" />
</Component>
<Component Id="CMPUTILE">
<File Id="UTILE" KeyPath="yes" Source="../../src/utile/utile" />
</Component>
<Component Id="CMPUTILE3">
<File Id="UTILE3" KeyPath="yes" Source="../../src/utile/utile3" />
</Component>
<Component Id="CMPUTILEBAT">
<File Id="UTILEBAT" KeyPath="yes" Source="../../src/utile/utile.bat" />
</Component>
<Component Id="CMPUTILE3BAT">
<File Id="UTILE3BAT" KeyPath="yes" Source="../../src/utile/utile3.bat" />
</Component>
<Component Id="CMPUTILETCL">
<File Id="UTILETCL" KeyPath="yes" Source="../../src/utile/utile.tcl" />
</Component>
<Component Id="CMPUTILETXT">
<File Id="UTILETXT" KeyPath="yes" Source="../../src/utile/utile.txt" />
</Component>
</Directory>
<Component Id="CMPSYSTEMLIBIPINLCCTOPSYM">
<File Id="IPINLCCTOPSYM" KeyPath="yes" Source="../../src/systemlib/ipin_lcc_top.sym" />
</Component>
<Component Id="CMPSYSTEMLIBOPINLCCSYM">
<File Id="OPINLCCSYM" KeyPath="yes" Source="../../src/systemlib/opin_lcc.sym" />
</Component>
<Component Id="CMPSYSTEMLIBOPINLCCTOPSYM">
<File Id="OPINLCCTOPSYM" KeyPath="yes" Source="../../src/systemlib/opin_lcc_top.sym" />
</Component>
</Directory>
<Directory Id="UTILEFOLDER" Name="utile">
<Component Id="CMPCLOCKAWK">
<File Id="CLOCKAWK" KeyPath="yes" Source="../../src/utile/clock.awk" />
</Component>
<Component Id="CMPEXPANDALIASAWK">
<File Id="EXPANDALIASAWK" KeyPath="yes" Source="../../src/utile/expand_alias.awk" />
</Component>
<Component Id="CMPPARAMAWK">
<File Id="PARAMAWK" KeyPath="yes" Source="../../src/utile/param.awk" />
</Component>
<Component Id="CMPPREPROCESSAWK">
<File Id="PREPROCESSAWK" KeyPath="yes" Source="../../src/utile/preprocess.awk" />
</Component>
<Component Id="CMPSTIMULIAWK">
<File Id="STIMULIAWK" KeyPath="yes" Source="../../src/utile/stimuli.awk" />
</Component>
<Component Id="CMPTEMPLATESTIMULI">
<File Id="TEMPLATESTIMULI" KeyPath="yes" Source="../../src/utile/template.stimuli" />
</Component>
<Component Id="CMPUTILE">
<File Id="UTILE" KeyPath="yes" Source="../../src/utile/utile" />
</Component>
<Component Id="CMPUTILE3">
<File Id="UTILE3" KeyPath="yes" Source="../../src/utile/utile3" />
</Component>
<Component Id="CMPUTILEBAT">
<File Id="UTILEBAT" KeyPath="yes" Source="../../src/utile/utile.bat" />
</Component>
<Component Id="CMPUTILE3BAT">
<File Id="UTILE3BAT" KeyPath="yes" Source="../../src/utile/utile3.bat" />
</Component>
<Component Id="CMPUTILETCL">
<File Id="UTILETCL" KeyPath="yes" Source="../../src/utile/utile.tcl" />
</Component>
<Component Id="CMPUTILETXT">
<File Id="UTILETXT" KeyPath="yes" Source="../../src/utile/utile.txt" />
</Component>
</Directory>
</Directory>
</DirectoryRef>
</Fragment>
<Fragment>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -63,17 +63,23 @@
# append XSCHEM_LIBRARY_PATH :${xschem_doc_dir}/gschem_import/sym
#### For Windows, use ; instead of :, and enclosed pathname with ""
# append XSCHEM_LIBRARY_PATH ";${XSCHEM_SHAREDIR}/../xschem_library"
# append XSCHEM_LIBRARY_PATH ";${XSCHEM_SHAREDIR}/../xschem_library/devices"
# append XSCHEM_LIBRARY_PATH ";${XSCHEM_SHAREDIR}/../xschem_library/examples"
# append XSCHEM_LIBRARY_PATH ";${XSCHEM_SHAREDIR}/../xschem_library/ngspice"
# append XSCHEM_LIBRARY_PATH ";${XSCHEM_SHAREDIR}/../xschem_library/logic"
# append XSCHEM_LIBRARY_PATH ";${XSCHEM_SHAREDIR}/../xschem_library/xschem_simulator"
# append XSCHEM_LIBRARY_PATH ";${XSCHEM_SHAREDIR}/../xschem_library/generators"
# append XSCHEM_LIBRARY_PATH ";${XSCHEM_SHAREDIR}/../xschem_library/inst_sch_select"
# append XSCHEM_LIBRARY_PATH ";${XSCHEM_SHAREDIR}/../xschem_library/binto7seg"
# append XSCHEM_LIBRARY_PATH ";${XSCHEM_SHAREDIR}/../xschem_library/pcb"
# append XSCHEM_LIBRARY_PATH ";${XSCHEM_SHAREDIR}/../xschem_library/rom8k"
# append XSCHEM_LIBRARY_PATH ";${XSCHEM_SHAREDIR}/xschem_library"
# append XSCHEM_LIBRARY_PATH ";${XSCHEM_SHAREDIR}/xschem_library/devices"
# append XSCHEM_LIBRARY_PATH ";${xschem_doc_dir}/examples"
# append XSCHEM_LIBRARY_PATH ";${xschem_doc_dir}/ngspice"
# append XSCHEM_LIBRARY_PATH ";${xschem_doc_dir}/logic"
# append XSCHEM_LIBRARY_PATH ";${xschem_doc_dir}/xschem_simulator"
# append XSCHEM_LIBRARY_PATH ";${xschem_doc_dir}/generators"
# append XSCHEM_LIBRARY_PATH ";${xschem_doc_dir}/inst_sch_select"
# append XSCHEM_LIBRARY_PATH ";${xschem_doc_dir}/binto7seg"
# append XSCHEM_LIBRARY_PATH ";${xschem_doc_dir}/pcb"
# append XSCHEM_LIBRARY_PATH ";${xschem_doc_dir}/rom8k"
#### Optional, often not needed...
# append XSCHEM_LIBRARY_PATH ";${xschem_doc_dir}/symgen"
# append XSCHEM_LIBRARY_PATH ";${xschem_doc_dir}/xTAG"
# append XSCHEM_LIBRARY_PATH ";${xschem_doc_dir}/rulz-r8c33"
# append XSCHEM_LIBRARY_PATH ";${xschem_doc_dir}/gschem_import"
# append XSCHEM_LIBRARY_PATH ";${xschem_doc_dir}/gschem_import/sym"
###########################################################################
#### SET CUSTOM COLORS FOR XSCHEM LIBRARIES MATCHING CERTAIN PATTERNS
@ -200,6 +206,10 @@
#### default: not enabled (0)
# set unselect_partial_sel_wires 0
#### if set select objects if touched by selection rectangle while dragging to the left
#### Default: enabled (1)
# set select_touch 0
#### if set show selected elements while dragging the selection rectangle.
#### once selected these can not be unselected by retracting the selection rectangle
#### if not set show selected items at end of drag. Default: enabled (1)
@ -234,6 +244,9 @@
#### enable drawing the grid. Default: enabled (1)
# set draw_grid 1
#### auto highlight nodes shown in graphs: default: not enabled (0)
# set auto_hilight_graph_nodes 0
#### enable stretch mode: when dragging a selection rectangle that cuts wires these are stretched
#### to follow the selected objects when moved. Default: not enabled (0).
#### This can be normally done by dragging with the Control key pressed.
@ -302,6 +315,15 @@ set to_pdf {gswin64c -sDEVICE=pdfwrite -o}
# set to_pdf ps2pdf
# set to_pdf {ps2pdf -dAutoRotatePages=/None}
###########################################################################
#### IMPORT SVG IMAGES
###########################################################################
#### this is a filter command that processes svg files and writes png data
#### listed in my personal order of preference.
#### filter must read stdin and write to stdout.
# set svg_to_png {rsvg-convert}
# set svg_to_png {inkscape --pipe --export-type=png --export-filename=-}
# set svg_to_png {convert - png:-}
###########################################################################
#### UNDO: SAVE ON DISK OR KEEP IN MEMORY
@ -341,6 +363,25 @@ set to_pdf {gswin64c -sDEVICE=pdfwrite -o}
# "#ff7777" "#bfff81" "#00ffcc" "#ce0097" "#d2d46b"
# "#ef6158" "#fdb200" }
###########################################################################
#### CUSTOM FILL PATTERNS MAY BE DEFINED HERE
###########################################################################
#### every 0x#### hex data represents one 16 bit row of the 16x16 bit fill bitmap
#### of the specified layer number.
#### following examples set a checkerboard fill pattern
#### for symbol shape drawing layer (layer 4)
#### and for pin layer (layer 5)
#
# set pixdata(4) {
# 0x8888 0x0000 0x0000 0x0000 0x2222 0x0000 0x0000 0x0000
# 0x8888 0x0000 0x0000 0x0000 0x2222 0x0000 0x0000 0x0000
# }
# set pixdata(5) {
# 0x5555 0xaaaa 0x5555 0xaaaa 0x5555 0xaaaa 0x5555 0xaaaa
# 0x5555 0xaaaa 0x5555 0xaaaa 0x5555 0xaaaa 0x5555 0xaaaa
# }
###########################################################################
#### CAIRO STUFF
###########################################################################
@ -444,7 +485,32 @@ set editor {notepad.exe}
###########################################################################
#### TCL COMMANDS TO BE EXECUTED AFTER COMPLETING STARTUP
###########################################################################
#### some examples:
# set postinit_commands {puts [xschem get version]}
# set postinit_commands {
# .menubar.netlist configure -command {xschem netlist -erc; edit_netlist [xschem get netlist_name fallback]}
# .menubar.simulate configure -command {xschem netlist -erc; simulate_from_button}
# }
#
#
#### example: if a raw file already exists re-run a tran simulation.
#### and schedule a waveform load at the end.
# set postinit_commands {
# set rawfile $netlist_dir/[file rootname [xschem get current_name]].raw
# if {[file exists $rawfile]} {
# xschem netlist
# set sim(spice,default) 1 ;# ngspice control mode (no xterminal)
# set sim(spice,1,st) 0 ;# no status report
# set sim(spice,1,fg) 0 ;# background
# simulate_from_button {
# viewdata $execute(data,last)
# xschem raw read $rawfile tran
# xschem redraw
# }
# }
# }
###########################################################################
#### WEB URL DOWNLOAD HELPER APPLICATION
@ -498,7 +564,7 @@ set editor {notepad.exe}
#### LIVE BACKANNOTATION OF DATA AT CURSOR 2 (B) POSITION
###########################################################################
#### if enabled will backannotate values in schematic at cursor 'b' position
#### in graph. Default: not enabled (0)
#### in graph. Default: enabled (1)
# set live_cursor2_backannotate 1
###########################################################################

View File

@ -1953,6 +1953,8 @@ void get_additional_symbols(int what)
char *sch = NULL;
char symbol_base_sch[PATH_MAX] = "";
const char *sch_ptr =
if(xctx->inst[i].ptr < 0) continue;
/* copy instance based *_sym_def attributes to symbol */
my_strdup(_ALLOC_ID_, &spice_sym_def, get_tok_value(xctx->inst[i].prop_ptr,"spice_sym_def",6));
my_strdup(_ALLOC_ID_, &verilog_sym_def, get_tok_value(xctx->inst[i].prop_ptr,"verilog_sym_def",4));
@ -1961,12 +1963,13 @@ void get_additional_symbols(int what)
str_replace( get_tok_value(xctx->inst[i].prop_ptr,"schematic",2), "@symname",
get_cell(xctx->inst[i].name, 0), '\\')));
dbg(1, "get_additional_symbols(): inst=%d sch=%s\n",i, sch);
if(sch[0] && stat(abs_sym_path(sch, ""), &buf)) {/* schematic does not exist */
/* schematic does not exist */
if(sch[0] && stat(abs_sym_path(sch, ""), &buf)) {
my_snprintf(symbol_base_sch, PATH_MAX, "%s.sch", get_cell(xctx->sym[xctx->inst[i].ptr].name, 9999));
dbg(1, "get_additional_symbols(): schematic not existing\n");
dbg(1, "using: %s\n", symbol_base_sch);
}
if(xctx->tok_size && xctx->inst[i].ptr>= 0) { /* token exists and instance points to valid symbol */
if(xctx->tok_size && sch[0]) { /* "schematic" token exists and a schematic is specified */
int j;
char *sym = NULL;
char *templ = NULL;
@ -1976,7 +1979,8 @@ void get_additional_symbols(int what)
my_strdup2(_ALLOC_ID_, &default_schematic, get_tok_value(symptr->prop_ptr,"default_schematic",0));
ignore_schematic = !strcmp(default_schematic, "ignore");
dbg(1, "get_additional_symbols(): inst=%d, sch=%s\n", i, sch);
dbg(1, "get_additional_symbols(): inst=%d, sch=%s instname=%s\n", i, sch, xctx->inst[i].instname);
dbg(1, "get_additional_symbols(): current_name=%s\n", xctx->current_name);
is_gen = is_generator(sch);
@ -2039,12 +2043,12 @@ void get_additional_symbols(int what)
}
my_free(_ALLOC_ID_, &sym);
my_free(_ALLOC_ID_, &default_schematic);
}
} /* if(xctx->tok_size && sch[0]) */
my_free(_ALLOC_ID_, &sch);
my_free(_ALLOC_ID_, &spice_sym_def);
my_free(_ALLOC_ID_, &vhdl_sym_def);
my_free(_ALLOC_ID_, &verilog_sym_def);
}
} /* for(i=0;i<xctx->instances; ++i) */
int_hash_free(&sym_table);
} else { /* end */
for(i = xctx->symbols - 1; i >= num_syms; --i) {
@ -2144,7 +2148,7 @@ void get_sch_from_sym(char *filename, xSymbol *sym, int inst, int fallback)
}
/* When descended into an i-th instance of a vector instance this function allows
* to change the path to the j-hj instance. the instnumber parameters follows the same rules
* to change the path to the j-th instance. the instnumber parameters follows the same rules
* as descend_schematic() */
int change_sch_path(int instnumber, int dr)
{
@ -2175,7 +2179,7 @@ int change_sch_path(int instnumber, int dr)
my_strcat(_ALLOC_ID_, &xctx->sch_path[xctx->currsch], ".");
xctx->sch_path_hash[xctx->currsch] = 0;
xctx->sch_inst_number[level] = instnumber;
dbg(0, "instname=%s, path=%s\n", instname, path);
dbg(1, "instname=%s, path=%s\n", instname, path);
path[pathlen - 1] = '.';
res = 1;
if(dr && has_x) {
@ -2188,7 +2192,14 @@ int change_sch_path(int instnumber, int dr)
return res;
}
/* fallback = 1: if schematic=.. attr is set but file not existing descend into symbol base schematic */
/* fallback = 1: if schematic=.. attr is set but file not existing descend into symbol base schematic
* instnumber: instance to descend into in case of vector instances (1 = leftmost, -1=rightmost)
* if set_title == 0 do not set window title (faster)
* == 1 do set_title
* == 2 do not process instance pins/nets
* == 4 do not descend into i-th instance of vecrtor instance. just
* concatenate instance name as is to path and descend.
* above flags can be ORed together */
int descend_schematic(int instnumber, int fallback, int alert, int set_title)
{
char *str = NULL;
@ -2247,7 +2258,13 @@ int descend_schematic(int instnumber, int fallback, int alert, int set_title)
dbg(1, "descend_schematic(): selected instname=%s\n", xctx->inst[n].instname);
if(xctx->inst[n].instname && xctx->inst[n].instname[0]) {
my_strdup2(_ALLOC_ID_, &str, expandlabel(xctx->inst[n].instname, &inst_mult));
if(set_title & 4) {
my_strdup2(_ALLOC_ID_, &str, xctx->inst[n].instname);
inst_mult = 1;
instnumber = 1;
} else {
my_strdup2(_ALLOC_ID_, &str, expandlabel(xctx->inst[n].instname, &inst_mult));
}
} else {
my_strdup2(_ALLOC_ID_, &str, "");
inst_mult = 1;
@ -2283,7 +2300,7 @@ int descend_schematic(int instnumber, int fallback, int alert, int set_title)
if(xctx->portmap[xctx->currsch + 1].table) str_hash_free(&xctx->portmap[xctx->currsch + 1]);
str_hash_init(&xctx->portmap[xctx->currsch + 1], HASHSIZE);
for(i = 0; i < xctx->sym[xctx->inst[n].ptr].rects[PINLAYER]; i++) {
if(set_title & 2) for(i = 0; i < xctx->sym[xctx->inst[n].ptr].rects[PINLAYER]; i++) {
const char *pin_name = get_tok_value(xctx->sym[xctx->inst[n].ptr].rect[PINLAYER][i].prop_ptr,"name",0);
char *pin_node = NULL, *net_node = NULL;
int k, mult, net_mult;
@ -2342,7 +2359,7 @@ int descend_schematic(int instnumber, int fallback, int alert, int set_title)
dbg(1, "descend_schematic(): filename=%s\n", filename);
/* we are descending from a parent schematic downloaded from the web */
if(!tclgetboolvar("keep_symbols")) remove_symbols();
load_schematic(1, filename, set_title, alert);
load_schematic(1, filename, (set_title & 1), alert);
if(xctx->hilight_nets) {
prepare_netlist_structs(0);
propagate_hilights(1, 0, XINSERT_NOREPLACE);
@ -2408,7 +2425,7 @@ void go_back(int confirm, int set_title) /* 20171006 add confirm */
/* by default) to parent schematic if going back from embedded symbol */
my_strncpy(filename, xctx->sch[xctx->currsch], S(filename));
load_schematic(1, filename, set_title, 1);
load_schematic(1, filename, (set_title & 1), 1);
/* if we are returning from a symbol created from a generator don't set modified flag on parent
* as these symbols can not be edited / saved as embedded
* xctx->sch_inst_number[xctx->currsch + 1] == -1 --> we came from an inst with no embed flag set */

View File

@ -783,7 +783,7 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg
* instance number to descend into for vector instances (default: 0).
* 0 or 1: leftmost instance, 2: second leftmost instance, ...
* -1: rightmost instance,-2: second rightmost instance, ...
* if string 'notitle' is given do not update window title (slow) */
* if integer 'notitle' is given pass it to descend_schematic() */
else if(!strcmp(argv[1], "descend"))
{
int ret=0;
@ -791,8 +791,8 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg
if(!xctx) {Tcl_SetResult(interp, not_avail, TCL_STATIC); return TCL_ERROR;}
if(xctx->semaphore == 0) {
if(argc > 3 && !strcmp(argv[3], "notitle")) {
set_title = 0;
if(argc > 3 ) {
set_title = atoi(argv[3]);
}
if(argc > 2) {
int n = atoi(argv[2]);
@ -878,7 +878,7 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg
int i = -1;
if(!xctx) {Tcl_SetResult(interp, not_avail, TCL_STATIC); return TCL_ERROR;}
if(argc > 2 && (i = get_instance(argv[2])) < 0 ) {
Tcl_SetResult(interp, "xschem getprop: instance not found", TCL_STATIC);
Tcl_SetResult(interp, "xschem drc_check: instance not found", TCL_STATIC);
return TCL_ERROR;
}
drc_check(i);
@ -1687,6 +1687,16 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg
}
}
/* get_additional_symbols what
* create new symbols for instance based implementation selection */
else if(!strcmp(argv[1], "get_additional_symbols") )
{
if(argc > 2) {
get_additional_symbols(atoi(argv[2]));
}
Tcl_ResetResult(interp);
}
/* get_cell cell n_dirs
* return result of get_cell function */
else if(!strcmp(argv[1], "get_cell") )
@ -1883,23 +1893,36 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg
}
}
/* get_sch_from_sym inst
* get schematic associated with instance 'inst' */
/* get_sch_from_sym inst [symbol]
* get schematic associated with instance 'inst'
* if inst==-1 and a 'symbol' name is given get sch associated with symbol */
else if(!strcmp(argv[1], "get_sch_from_sym") )
{
int inst = -1;
int sym = -1;
char filename[PATH_MAX];
my_strncpy(filename, "", S(filename));
if(!xctx) {Tcl_SetResult(interp, not_avail, TCL_STATIC); return TCL_ERROR;}
if(argc > 2) {
if((inst = get_instance(argv[2])) < 0 ) {
Tcl_SetResult(interp, "xschem get_sch_from_sym: instance not found", TCL_STATIC);
return TCL_ERROR;
} else {
if( xctx->inst[inst].ptr >= 0 ) {
get_sch_from_sym(filename, xctx->inst[inst].ptr+ xctx->sym, inst, 0);
if(argc > 3 && atoi(argv[2]) == -1) {
sym = get_symbol(argv[3]);
if(sym < 0) {
Tcl_SetResult(interp, "xschem get_sch_from_sym: symbol not found", TCL_STATIC);
return TCL_ERROR;
}
}
else {
inst = get_instance(argv[2]);
if(inst < 0) {
Tcl_SetResult(interp, "xschem get_sch_from_sym: instance not found", TCL_STATIC);
return TCL_ERROR;
}
}
if( xctx->inst[inst].ptr >= 0 && sym == -1) {
sym = xctx->inst[inst].ptr;
}
if(sym >= 0) get_sch_from_sym(filename, sym + xctx->sym, inst, 0);
}
Tcl_SetResult(interp, filename, TCL_VOLATILE);
}
@ -2611,7 +2634,7 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg
}
/* is_symgen symbol
* tell if 'symbol' is agenerator (symbol(param1,param2,...) */
* tell if 'symbol' is a generator (symbol(param1,param2,...) */
else if(!strcmp(argv[1], "is_symgen"))
{
char s[30];
@ -5092,6 +5115,8 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg
* setprop symbol name tok [val]
* Set attribute 'tok' of symbol name 'name' to 'val'
* If 'val' not given (no attribute value) delete attribute from symbol
* This command is not very useful since changes are not saved into symbol
* and netlisters reload symbols, so changes are lost anyway.
*
* setprop rect lay n tok [val] [fast|fastundo]
* Set attribute 'tok' of rectangle number'n' on layer 'lay'

View File

@ -91,7 +91,7 @@ void hier_psprint(char **res, int what) /* netlister driver */
/* xctx->sym can be SCH or SYM, use hash to avoid writing duplicate subckt */
my_strdup(_ALLOC_ID_, &subckt_name, get_cell(xctx->sym[i].name, 0));
get_sch_from_sym(filename, xctx->sym + i, -1, 0);
if (str_hash_lookup(&subckt_table, filename, "", XLOOKUP)==NULL)
if (str_hash_lookup(&subckt_table, subckt_name, "", XINSERT_NOREPLACE)==NULL)
{
const char *default_schematic;
/* do not insert symbols with default_schematic attribute set to ignore in hash since these symbols
@ -100,27 +100,27 @@ void hier_psprint(char **res, int what) /* netlister driver */
if(!strcmp(default_schematic, "ignore")) {
continue;
}
str_hash_lookup(&subckt_table, subckt_name, "", XINSERT);
if(is_generator(filename) || !stat(filename, &buf)) {
/* for printing we go down to bottom regardless of spice_stop attribute */
dbg(1, "hier_psprint(): loading file: |%s|\n", filename);
load_schematic(1,filename, 0, 1);
get_additional_symbols(1);
zoom_full(0, 0, 1 + 2 * tclgetboolvar("zoom_full_center"), 0.97);
if(what & 1) ps_draw(2, 1, 0); /* page */
if(what & 2) { /* print cellname */
my_strcat(_ALLOC_ID_, res, hier_psprint_mtime(xctx->sch[xctx->currsch]));
my_strcat(_ALLOC_ID_, res, " {");
my_strcat(_ALLOC_ID_, res, xctx->sch[xctx->currsch]);
my_strcat(_ALLOC_ID_, res, "}\n");
if(str_hash_lookup(&subckt_table, get_cell_w_ext(filename, 0), "", XINSERT_NOREPLACE)==NULL) {
/* for printing we go down to bottom regardless of spice_stop attribute */
dbg(1, "hier_psprint(): loading file: |%s|\n", filename);
load_schematic(1,filename, 0, 1);
get_additional_symbols(1);
zoom_full(0, 0, 1 + 2 * tclgetboolvar("zoom_full_center"), 0.97);
if(what & 1) ps_draw(2, 1, 0); /* page */
if(what & 2) { /* print cellname */
my_strcat(_ALLOC_ID_, res, hier_psprint_mtime(xctx->sch[xctx->currsch]));
my_strcat(_ALLOC_ID_, res, " {");
my_strcat(_ALLOC_ID_, res, xctx->sch[xctx->currsch]);
my_strcat(_ALLOC_ID_, res, "}\n");
}
dbg(1,"--> %s\n", get_cell(xctx->sch[xctx->currsch], 0) );
}
dbg(1,"--> %s\n", get_cell(xctx->sch[xctx->currsch], 0) );
}
}
}
}
/* can not free additional syms since *_block_netlist() may have loaded additional syms */
/* can not free additional syms since load_schematic() above may have loaded additional syms */
/* get_additional_symbols(0); */
my_free(_ALLOC_ID_, &abs_path);
str_hash_free(&subckt_table);
@ -702,7 +702,7 @@ int spice_block_netlist(FILE *fd, int i)
* --------------------------------------------------------------------------
* "whatever" "whatever" XINSERT insert in hash table if not in.
* if already present update value if not NULL,
* return entry address.
* return entry address if found and updated, else NULL.
* "whatever" "whatever" XINSERT_NOREPLACE same as XINSERT but do not replace existing value
* return NULL if not found.
* "whatever" "whatever" XLOOKUP lookup in hash table,return entry addr.

View File

@ -23,10 +23,12 @@
# This script traverses the hierarchy and prints all instances in design.
proc traversal {file {only_subckts {}}} {
global keep_symbols
if { $file eq {} || [file exists $file] } {
puts stderr "empty or existing file..."
return
}
set keep_symbols 1
xschem unselect_all
xschem set no_draw 1 ;# disable screen update
xschem set no_undo 1 ;# disable undo
@ -34,6 +36,7 @@ proc traversal {file {only_subckts {}}} {
hier_traversal $fd 0 $only_subckts
xschem set no_draw 0
xschem set no_undo 0
set keep_symbols 0
close $fd
}
@ -57,6 +60,12 @@ proc hier_traversal {fd {level 0} only_subckts} {
set symbol [xschem getprop instance $i cell::name]
set abs_symbol [abs_sym_path $symbol]
set type [xschem getprop symbol $symbol type]
set schematic [xschem get_sch_from_sym $i]
set sch_exists [expr {[file exists $schematic] ? {} : {**missing**}}]
set sch_tail [file tail $schematic]
set sch_rootname [file rootname [file tail $schematic]]
set inst_spice_sym_def [xschem getprop instance $i spice_sym_def]
set sym_spice_sym_def [xschem getprop instance $i cell::spice_sym_def]
if {$only_subckts && ($type ne {subcircuit})} { continue }
set skip 0
@ -67,23 +76,24 @@ proc hier_traversal {fd {level 0} only_subckts} {
}
}
if {$skip} { continue }
puts $fd "[spaces $level]$schpath$instname symbol: $symbol, type: $type"
puts $fd "[spaces $level]$schpath$instname $type"
puts -nonewline $fd "[spaces $level] $symbol"
if {$type eq {subcircuit}} {
puts -nonewline $fd { ---> }
if {$inst_spice_sym_def ne {}} {puts $fd "$sch_rootname defined in instance spice_sym_def"
} elseif {$sym_spice_sym_def ne {}} {puts $fd "$sch_rootname defined in symbol spice_sym_def"
} else { puts $fd "$sch_tail $sch_exists" }
} else { puts $fd {} }
set done_print 1
if {$type eq {subcircuit}} {
set ninst [lindex [split [xschem expandlabel $instname] { }] 1]
for {set n 1} {$n <= $ninst} { incr n} {
# set dp 0
xschem select instance $i fast
# descending ninst times is extremely inefficient
set descended [xschem descend $n notitle]
# ensure previous descend was successful
if {$descended} {
incr level
set dp [hier_traversal $fd $level $only_subckts]
xschem go_back notitle
incr level -1
}
if {!$dp} { break } ;# nothing printed so skip all other vector instances
xschem select instance $i fast
set descended [xschem descend 1 6]
if {$descended} {
incr level
set dp [hier_traversal $fd $level $only_subckts]
xschem go_back notitle
incr level -1
}
}
}

View File

@ -2382,15 +2382,15 @@ int Tcl_AppInit(Tcl_Interp *inter)
const char *WIN_XSCHEM_LIBRARY_PATH[WIN_XSCHEM_LIBRARY_PATH_NUM] = {
/*1*/ "xschem_library",
/*2*/ "xschem_library/devices",
/*3*/ "xschem_library/examples",
/*4*/ "xschem_library/ngspice",
/*5*/ "xschem_library/logic",
/*6*/ "xschem_library/xschem_simulator",
/*7*/ "xschem_library/generators",
/*8*/ "xschem_library/inst_sch_select",
/*9*/ "xschem_library/binto7seg",
/*10*/ "xschem_library/pcb",
/*11*/ "xschem_library/rom8k" };
/*3*/ "examples", /* See i==2 with WIN_XSCHEM_LIBRARY_PATH_NUM below */
/*4*/ "ngspice",
/*5*/ "logic",
/*6*/ "xschem_simulator",
/*7*/ "generators",
/*8*/ "inst_sch_select",
/*9*/ "binto7seg",
/*10*/ "pcb",
/*11*/ "rom8k" };
GetModuleFileNameA(NULL, install_dir, MAX_PATH);
change_to_unix_fn(install_dir);
size_t dir_len=strlen(install_dir);
@ -2405,9 +2405,14 @@ int Tcl_AppInit(Tcl_Interp *inter)
running_in_src_dir = 1; /* no bin, so it's running in Visual studio source directory*/
my_strdup(_ALLOC_ID_, &up_hier, "../../..");
}
else my_strdup(_ALLOC_ID_, &up_hier, "..");
else my_strdup(_ALLOC_ID_, &up_hier, "../share/xschem");
/* my_strcat(_ALLOC_ID_, &win_xschem_library_path, "."); */
for (i = 0; i < WIN_XSCHEM_LIBRARY_PATH_NUM; ++i) {
if (running_in_src_dir==0 && i==2)
{
my_free(_ALLOC_ID_, &up_hier);
my_strdup(_ALLOC_ID_, &up_hier, "../share/doc/xschem");
}
my_snprintf(tmp, S(tmp),"%s/%s/%s", install_dir, up_hier, WIN_XSCHEM_LIBRARY_PATH[i]);
if (i > 0) my_strcat(_ALLOC_ID_, &win_xschem_library_path, "\;");
my_strcat(_ALLOC_ID_, &win_xschem_library_path, tmp);
@ -2431,7 +2436,7 @@ int Tcl_AppInit(Tcl_Interp *inter)
my_snprintf(tmp, S(tmp), "%s/../../../src", install_dir);
}
else {
my_snprintf(tmp, S(tmp), "%s/../share", install_dir);
my_snprintf(tmp, S(tmp), "%s/../share/xschem", install_dir);
}
tclsetvar("XSCHEM_SHAREDIR", tmp);
}

View File

@ -63,17 +63,23 @@
# append XSCHEM_LIBRARY_PATH :${xschem_doc_dir}/gschem_import/sym
#### For Windows, use ; instead of :, and enclosed pathname with ""
# append XSCHEM_LIBRARY_PATH ";${XSCHEM_SHAREDIR}/../xschem_library"
# append XSCHEM_LIBRARY_PATH ";${XSCHEM_SHAREDIR}/../xschem_library/devices"
# append XSCHEM_LIBRARY_PATH ";${XSCHEM_SHAREDIR}/../xschem_library/examples"
# append XSCHEM_LIBRARY_PATH ";${XSCHEM_SHAREDIR}/../xschem_library/ngspice"
# append XSCHEM_LIBRARY_PATH ";${XSCHEM_SHAREDIR}/../xschem_library/logic"
# append XSCHEM_LIBRARY_PATH ";${XSCHEM_SHAREDIR}/../xschem_library/xschem_simulator"
# append XSCHEM_LIBRARY_PATH ";${XSCHEM_SHAREDIR}/../xschem_library/generators"
# append XSCHEM_LIBRARY_PATH ";${XSCHEM_SHAREDIR}/../xschem_library/inst_sch_select"
# append XSCHEM_LIBRARY_PATH ";${XSCHEM_SHAREDIR}/../xschem_library/binto7seg"
# append XSCHEM_LIBRARY_PATH ";${XSCHEM_SHAREDIR}/../xschem_library/pcb"
# append XSCHEM_LIBRARY_PATH ";${XSCHEM_SHAREDIR}/../xschem_library/rom8k"
# append XSCHEM_LIBRARY_PATH ";${XSCHEM_SHAREDIR}/xschem_library"
# append XSCHEM_LIBRARY_PATH ";${XSCHEM_SHAREDIR}/xschem_library/devices"
# append XSCHEM_LIBRARY_PATH ";${xschem_doc_dir}/examples"
# append XSCHEM_LIBRARY_PATH ";${xschem_doc_dir}/ngspice"
# append XSCHEM_LIBRARY_PATH ";${xschem_doc_dir}/logic"
# append XSCHEM_LIBRARY_PATH ";${xschem_doc_dir}/xschem_simulator"
# append XSCHEM_LIBRARY_PATH ";${xschem_doc_dir}/generators"
# append XSCHEM_LIBRARY_PATH ";${xschem_doc_dir}/inst_sch_select"
# append XSCHEM_LIBRARY_PATH ";${xschem_doc_dir}/binto7seg"
# append XSCHEM_LIBRARY_PATH ";${xschem_doc_dir}/pcb"
# append XSCHEM_LIBRARY_PATH ";${xschem_doc_dir}/rom8k"
#### Optional, often not needed...
# append XSCHEM_LIBRARY_PATH ";${xschem_doc_dir}/symgen"
# append XSCHEM_LIBRARY_PATH ";${xschem_doc_dir}/xTAG"
# append XSCHEM_LIBRARY_PATH ";${xschem_doc_dir}/rulz-r8c33"
# append XSCHEM_LIBRARY_PATH ";${xschem_doc_dir}/gschem_import"
# append XSCHEM_LIBRARY_PATH ";${xschem_doc_dir}/gschem_import/sym"
###########################################################################
#### SET CUSTOM COLORS FOR XSCHEM LIBRARIES MATCHING CERTAIN PATTERNS

View File

@ -53,6 +53,8 @@ function replace_pattern(old, new)
replace_pattern("draw_string()[:(:][:):]:.*$", "draw_string(): ***Removed***")
replace_pattern("find_best_color.*$", "find_best_color ***Removed***")
replace_pattern("trim_wires.*$", "trim_wires ***Removed***")
replace_pattern("symbol_bbox.*$", "symbol_bbox ***Removed***")
replace_pattern("symbol bbox.*$", "symbol bbox ***Removed***")
__a[__lines++] = $0
}

View File

@ -1,4 +1,4 @@
v {xschem version=3.4.5 file_version=1.2
v {xschem version=3.4.6RC file_version=1.2
*
* This file is part of XSCHEM,
* a schematic capture and Spice/Vhdl/Verilog netlisting tool for circuit
@ -24,10 +24,11 @@ K {}
V {}
S {vout out 0 2}
E {}
C {architecture.sym} 70 -610 0 0 { nothing here, use global schematic properties }
C {ipin.sym} 120 -550 0 0 {name=p161 lab=PLUS}
C {ipin.sym} 120 -500 0 0 {name=p1 lab=MINUS}
C {opin.sym} 200 -530 0 0 {name=p20 lab=OUT}
C {noconn.sym} 200 -530 0 0 {name=l1}
C {noconn.sym} 120 -550 0 1 {name=l2}
C {noconn.sym} 120 -500 0 1 {name=l3}
C {architecture.sym} 60 -600 0 0 {code=ARCHITECTURE
"Use global schematic properties for code"}