fix tcl procedures using find_file to find a component: use find_file_first (return 1st match) , since find_file may return multiple matches; add njfet.sym, pjfet.sym and test_jfet.sch

This commit is contained in:
stefan schippers 2023-05-24 08:43:05 +02:00
parent d993292f0f
commit 608a144dd1
7 changed files with 190 additions and 42 deletions

View File

@ -132,7 +132,7 @@ Hilight_hashentry *inst_hilight_hash_lookup(int i, int value, int what)
{
const char *token = xctx->inst[i].instname;
char *inst_tok = NULL;
size_t len = strlen(token) + 2; /* token plus one more character and \0 */
size_t len = strlen(token) + 3; /* token plus two more character and \0 */
int label = 0;
Hilight_hashentry *entry;
if(IS_LABEL_SH_OR_PIN( (xctx->inst[i].ptr+xctx->sym)->type )) label = 1;

View File

@ -1349,7 +1349,7 @@ proc select_inst {fullinst {redraw 1 } } {
}
proc pin_label {} {
return [rel_sym_path [find_file lab_pin.sym]]
return [rel_sym_path [find_file_first lab_pin.sym]]
}
## given a hierarchical net name x1.xamp.netname go down in the hierarchy and
@ -3065,7 +3065,7 @@ proc create_pins {} {
regsub -all {<} $retval {[} retval
regsub -all {>} $retval {]} retval
set lines [split $retval \n]
set dirprefix [file dirname [rel_sym_path [find_file ipin.sym]]]
set dirprefix [file dirname [rel_sym_path [find_file_first ipin.sym]]]
if {$dirprefix == {.}} { set dirprefix {}} else {append dirprefix {/}}
# viewdata $retval
@ -3169,7 +3169,7 @@ proc add_lab_no_prefix {} {
global env retval USER_CONF_DIR
global filetmp
set dirprefix [file dirname [rel_sym_path [find_file ipin.sym]]]
set dirprefix [file dirname [rel_sym_path [find_file_first ipin.sym]]]
if {$dirprefix == {.}} { set dirprefix {}} else {append dirprefix {/}}
set retval [ read_data_nonewline $filetmp ]
regsub -all {<} $retval {[} retval
@ -3191,7 +3191,7 @@ proc add_lab_prefix {} {
global env retval USER_CONF_DIR
global filetmp
set dirprefix [file dirname [rel_sym_path [find_file ipin.sym]]]
set dirprefix [file dirname [rel_sym_path [find_file_first ipin.sym]]]
if {$dirprefix == {.}} { set dirprefix {}} else {append dirprefix {/}}
set retval [ read_data_nonewline $filetmp ]
regsub -all {<} $retval {[} retval
@ -4558,7 +4558,7 @@ proc match_file { f {paths {}} } {
return $res
}
proc sub_find_file { f {paths {}} } {
proc sub_find_file { f {paths {}} {first 0} } {
global pathlist match_file_dir_arr
set res {}
if {$paths eq {}} {set paths $pathlist}
@ -4570,13 +4570,17 @@ proc sub_find_file { f {paths {}} } {
if {[array names match_file_dir_arr -exact $jj] == {}} {
set match_file_dir_arr($jj) 1
# puts "********** directory $jj"
set sub_res [sub_find_file $f $j] ;# recursive call
if {$sub_res != {} } {set res [concat $res $sub_res]}
set sub_res [sub_find_file $f $j $first] ;# recursive call
if {$sub_res != {} } {
set res [concat $res $sub_res]
if {$first} {return $res}
}
}
} else {
set fname [file tail $j]
if {$fname == $f} {
lappend res $j
if {$first} {return $res}
}
}
}
@ -4590,11 +4594,24 @@ proc sub_find_file { f {paths {}} } {
proc find_file { f {paths {}} } {
global match_file_dir_arr
catch {unset match_file_dir_arr}
set res [sub_find_file $f $paths]
set res [sub_find_file $f $paths 0]
catch {unset match_file_dir_arr}
return $res
}
# find given file $f into $paths directories
# use $pathlist global search path if $paths empty
# recursively descend directories
# only return FIRST FOUND
proc find_file_first { f {paths {}} } {
global match_file_dir_arr
catch {unset match_file_dir_arr}
set res [sub_find_file $f $paths 1]
catch {unset match_file_dir_arr}
return $res
}
# alternative implementation of "file dirname ... "
# that does not mess with http:// (file dirname removes double slashes)
proc get_directory {f} {
@ -6179,7 +6196,7 @@ proc build_widgets { {topwin {} } } {
}
$topwin.menubar.simulation.menu add command -label {Add waveform graph} -command {xschem add_graph}
$topwin.menubar.simulation.menu add command -label {Add waveform reload launcher} -command {
xschem place_symbol [rel_sym_path [find_file launcher.sym]] "name=h5\ndescr=\"load waves\"
xschem place_symbol [rel_sym_path [find_file_first launcher.sym]] "name=h5\ndescr=\"load waves\"
tclcommand=\"xschem raw_read \$netlist_dir/[file tail [file rootname [xschem get current_name]]].raw tran\"
"
}

View File

@ -0,0 +1,26 @@
v {xschem version=3.4.0 file_version=1.2
}
G {}
K {type=njfet
format="@spiceprefix@name @pinlist @model area=@area @extra m=@m"
template="name=J1 model=njfet area=1 m=1"
}
V {}
S {}
E {}
L 4 5 -30 5 30 {}
L 4 5 -20 20 -20 {}
L 4 20 -30 20 -20 {}
L 4 5 20 20 20 {}
L 4 20 20 20 30 {}
B 5 17.5 -32.5 22.5 -27.5 {name=d dir=inout}
B 5 -22.5 -2.5 -17.5 2.5 {name=g dir=in}
B 5 17.5 27.5 22.5 32.5 {name=s dir=inout}
P 4 7 -20 0 -5 0 -5 -5 5 -0 -5 5 -5 0 -20 0 {fill=true}
T {@spiceprefix@name} 7.5 7.5 0 0 0.2 0.2 {}
T {D} 25 -27.5 0 0 0.15 0.15 {}
T {@#0:net_name} 25 -42.5 0 0 0.15 0.15 {layer=15}
T {@#2:net_name} 25 32.5 0 0 0.15 0.15 {layer=15}
T {@#1:net_name} -25 -12.5 0 1 0.15 0.15 {layer=15}
T {@model} 7.5 -17.5 0 0 0.2 0.2 {}
T {area=@area} 7.5 -5 0 0 0.2 0.2 {}

View File

@ -0,0 +1,26 @@
v {xschem version=3.4.0 file_version=1.2
}
G {}
K {type=pjfet
format="@spiceprefix@name @pinlist @model area=@area @extra m=@m"
template="name=J1 model=pjfet area=1 m=1"
}
V {}
S {}
E {}
L 4 5 -30 5 30 {}
L 4 5 -20 20 -20 {}
L 4 20 -30 20 -20 {}
L 4 5 20 20 20 {}
L 4 20 20 20 30 {}
B 5 17.5 -32.5 22.5 -27.5 {name=d dir=inout}
B 5 -22.5 -2.5 -17.5 2.5 {name=g dir=in}
B 5 17.5 27.5 22.5 32.5 {name=s dir=inout}
P 4 7 5 0 -7.5 0 -7.5 5 -17.5 0 -7.5 -5 -7.5 0 5 0 {fill=true}
T {@spiceprefix@name} 7.5 7.5 0 0 0.2 0.2 {}
T {D} 25 -27.5 0 0 0.15 0.15 {}
T {@#0:net_name} 25 -42.5 0 0 0.15 0.15 {layer=15}
T {@#2:net_name} 25 32.5 0 0 0.15 0.15 {layer=15}
T {@#1:net_name} -25 -12.5 0 1 0.15 0.15 {layer=15}
T {@model} 7.5 -17.5 0 0 0.2 0.2 {}
T {area=@area} 7.5 -5 0 0 0.2 0.2 {}

View File

@ -48,12 +48,9 @@ P 15 11 870 -520 880 -560 900 -530 910 -550 920 -520 940 -530 920 -490 890 -500
T {Welcome to XSCHEM!} 110 -1060 0 0 1 1 {layer=5}
T {This is a test schematic window
On the left you see some sample circuits. You may descend into any
of these by selecting one with a left mouse button click and
pressing the 'e' key, or by menu 'Edit -> Push Schematic'.
You can return here after descending into a schematic by hitting
'<Ctrl>-e' or by menu 'Edit -> Pop'.
} 60 -990 0 0 0.4 0.4 {}
On the left you see some sample circuits. You may descend into any of these by selecting one with a left mouse button click and
pressing the 'e' key, or by menu 'Edit -> Push Schematic'. You can return here after descending into a schematic by hitting
'<Ctrl>-e' or by menu 'Edit -> Pop'.} 60 -990 0 0 0.4 0.4 {}
T {Lines} 960 -680 0 0 0.6 0.6 {layer=4}
T {Rectangles} 960 -620 0 0 0.6 0.6 {layer=4}
T {Polygons} 960 -530 0 0 0.6 0.6 {layer=4}
@ -90,16 +87,16 @@ N 380 -310 640 -310 {lab=BUS[4:0]}
N 510 -400 510 -320 {lab=BUS[1]}
N 410 -350 410 -320 {lab=BUS[2]}
N 460 -400 460 -320 {lab=BUS[2:1]}
C {poweramp.sym} 480 -690 0 0 {name=x1
C {poweramp.sym} 480 -750 0 0 {name=x1
tclcommand="xschem descend"}
C {tesla.sym} 160 -570 0 0 {name=x2}
C {test_ne555.sym} 160 -530 0 0 {name=x3}
C {test_lm324.sym} 160 -490 0 0 {name=x4}
C {osc.sym} 160 -610 0 0 {name=x5}
C {tesla.sym} 160 -630 0 0 {name=x2}
C {test_ne555.sym} 160 -590 0 0 {name=x3}
C {test_lm324.sym} 160 -550 0 0 {name=x4}
C {osc.sym} 160 -670 0 0 {name=x5}
C {title.sym} 160 -30 0 0 {name=l1 author="Stefan Schippers"}
C {cmos_example.sym} 160 -650 0 0 {name=x6}
C {greycnt.sym} 160 -690 0 0 {name=x8}
C {loading.sym} 160 -730 0 0 {name=x9}
C {cmos_example.sym} 160 -710 0 0 {name=x6}
C {greycnt.sym} 160 -750 0 0 {name=x8}
C {loading.sym} 160 -790 0 0 {name=x9}
C {inv_bsource.sym} 880 -320 0 0 {name=B1 TABLE="1.4 3.0 1.6 0.0"}
C {launcher.sym} 460 -140 0 0 {name=h1
descr="XSCHEM ON REPO.HU"
@ -116,17 +113,17 @@ url="$\{XSCHEM_SHAREDIR\}/../doc/xschem/index.html"
program=x-www-browser
}
C {rlc.sym} 160 -770 0 0 {name=x0}
C {rlc.sym} 160 -830 0 0 {name=x0}
C {lab_pin.sym} 640 -310 0 1 {name=l2 sig_type=std_logic lab=BUS[4:0]}
C {bus_connect.sym} 500 -310 0 0 {name=l3 lab=BUS[1]}
C {bus_connect_nolab.sym} 400 -310 0 0 {name=r1}
C {lab_pin.sym} 410 -350 3 1 {name=l4 sig_type=std_logic lab=BUS[2]}
C {LCC_instances.sym} 160 -450 0 0 {name=x7}
C {test_backannotated_subckt.sym} 160 -410 0 0 {name=x10}
C {plot_manipulation.sym} 160 -370 0 0 {name=x11}
C {logic_test.sym} 160 -330 0 0 {name=x12}
C {simulate_ff.sym} 160 -290 0 0 {name=x13}
C {test_mos_verilog.sym} 160 -250 0 0 {name=x14}
C {LCC_instances.sym} 160 -510 0 0 {name=x7}
C {test_backannotated_subckt.sym} 160 -470 0 0 {name=x10}
C {plot_manipulation.sym} 160 -430 0 0 {name=x11}
C {logic_test.sym} 160 -390 0 0 {name=x12}
C {simulate_ff.sym} 160 -350 0 0 {name=x13}
C {test_mos_verilog.sym} 160 -310 0 0 {name=x14}
C {launcher.sym} 1265 -225 0 0 {name=h5
descr=" Ctrl-Left-Click to load/
unload waveforms"
@ -1459,17 +1456,18 @@ xwtAgA9ve8fHC0Dod8blIpQLQJBdgRgxavQ/AAAAgEslwD6d7SiMdxwqP41maeirFRxABH/Rb+tVM0DO
cwtAyKwqggMC8z8AAABAXz/APixDHOviNio/cIyWTt0GHEAHmaX3NW0zQHJvU5F/bTNA3V5CW3kqoL85tJeeXUIJQIB/waNeQglAcFfF8JIdC0DY7tjwBPjxPwAAALCc
UsA+"
}
C {test_ac.sym} 160 -210 0 0 {name=x15}
C {rom8k.sym} 480 -730 0 0 {name=x17}
C {test_doublepin.sym} 160 -170 0 0 {name=x19}
C {classD_amp.sym} 480 -770 0 0 {name=x20}
C {delta_sigma.sym} 480 -610 0 0 {name=x21}
C {solar_panel.sym} 480 -570 0 0 {name=xsolar}
C {test_extracted_netlist.sym} 160 -130 0 0 {name=x23
C {test_ac.sym} 160 -270 0 0 {name=x15}
C {rom8k.sym} 480 -790 0 0 {name=x17}
C {test_doublepin.sym} 160 -230 0 0 {name=x19}
C {classD_amp.sym} 480 -830 0 0 {name=x20}
C {delta_sigma.sym} 480 -670 0 0 {name=x21}
C {solar_panel.sym} 480 -630 0 0 {name=xsolar}
C {test_extracted_netlist.sym} 160 -190 0 0 {name=x23
tclcommand="xschem descend"}
C {poweramp_lcc.sym} 480 -650 0 0 {name=x16
C {poweramp_lcc.sym} 480 -710 0 0 {name=x16
tclcommand="xschem descend"}
C {test_symbolgen.sym} 480 -530 0 0 {name=x18}
C {inst_sch_select.sym} 480 -490 0 0 {name=x24}
C {test_bus_tap.sym} 480 -450 0 0 {name=x22}
C {test_symbolgen.sym} 480 -590 0 0 {name=x18}
C {inst_sch_select.sym} 480 -550 0 0 {name=x24}
C {test_bus_tap.sym} 480 -510 0 0 {name=x22}
C {bus_tap.sym} 450 -310 1 1 {name=l5 lab=[2:1]}
C {test_jfet.sym} 480 -470 0 0 {name=x25}

View File

@ -0,0 +1,70 @@
v {xschem version=3.4.0 file_version=1.2
}
G {}
K {}
V {}
S {}
E {}
B 2 590 -730 1390 -330 {flags=graph,unlocked
y1=1.5e-42
y2=0.0028
ypos1=0
ypos2=2
divy=5
subdivy=1
unity=1
x1=-0.308107
x2=19.6819
divx=5
subdivx=1
xlabmag=1.0
ylabmag=1.0
node=i(@j1[id])
color=4
dataset=-1
unitx=1
logx=0
logy=0
rainbow=0}
N 340 -300 340 -250 {
lab=#net1}
N 340 -190 340 -110 {
lab=GND}
N 260 -220 300 -220 {
lab=#net2}
N 150 -220 200 -220 {
lab=G}
N 340 -420 340 -360 {
lab=D}
C {title.sym} 160 -30 0 0 {name=l9
author="tcleval(Stefan Schippers[
if \{$show_pin_net_names == 0\} \{
set show_pin_net_names 1
xschem update_all_sym_bboxes
\}]
)"}
C {njfet.sym} 320 -220 0 0 {name=J1 model=2N3459 area=1 m=1
}
C {lab_pin.sym} 150 -220 0 0 {name=p1 sig_type=std_logic lab=G}
C {lab_pin.sym} 340 -420 0 0 {name=p2 sig_type=std_logic lab=D}
C {lab_pin.sym} 340 -110 0 0 {name=p3 sig_type=std_logic lab=GND}
C {code_shown.sym} 580 -280 0 0 {name=s1 only_toplevel=false value="VG G 0 dc 0
VD D 0 dc 0
.options savecurrents
.control
save all
dc VD 0 20 0.01 VG 0 -1 -0.1
write test_jfet.raw
.endc"}
C {code.sym} 70 -400 0 0 {name=MODEL only_toplevel=false value=".MODEL 2N3459 NJF(VTO=-1.4 BETA=1.265m BETATCE=-0.5 LAMBDA=4m RD=1 RS=1 CGS=2.916p CGD=2.8p PB=0.5 IS=114.5f XTI=3 AF=1 FC=0.5 N=1 NR=2)"}
C {noconn.sym} 340 -140 0 0 {name=l1}
C {noconn.sym} 340 -390 0 0 {name=l2}
C {noconn.sym} 180 -220 1 0 {name=l3}
C {launcher.sym} 980 -290 0 0 {name=h5
descr="load waves"
tclcommand="xschem raw_read $netlist_dir/test_jfet.raw dc"
}
C {ammeter.sym} 230 -220 1 0 {name=Vgate}
C {ammeter.sym} 340 -330 0 0 {name=Vdrain}

View File

@ -0,0 +1,11 @@
v {xschem version=3.4.0 file_version=1.2}
K {type=subcircuit
format="@name @pinlist @symname"
template="name=x1"
}
T {@symname} -72 -6 0 0 0.3 0.3 {}
T {@name} 135 -22 0 0 0.2 0.2 {}
L 4 -130 -10 130 -10 {}
L 4 -130 10 130 10 {}
L 4 -130 -10 -130 10 {}
L 4 130 -10 130 10 {}