fixed is_symgen() regex, added stup for tutorial_symbol_generators.html

This commit is contained in:
stefan schippers 2023-04-22 11:29:44 +02:00
parent d5aca937ce
commit f1ed2bf26f
14 changed files with 91 additions and 23 deletions

View File

@ -0,0 +1,29 @@
<!DOCTYPE html>
<html>
<head>
<title>XSCHEM TUTORIAL: SYMBOL GENERATORS</title>
<link rel="stylesheet" type="text/css" href="xschem_man.css" />
<style type="text/css">
/* Local styling goes here */
p{padding: 15px 30px 10px;}
</style>
</head>
<body>
<!-- start of slide -->
<div class="content">
<!-- navigation buttons -->
<a href="xschem_man.html" class="home">UP</a>
<!-- slide title -->
<h1> TUTORIAL: SYMBOL GENERATORS</h1>
<!-- end of slide -->
<div class="filler"></div>
</div>
<!-- frame footer -->
<iframe seamless src="xschem_footer.html" class="footer_iframe" >
</body>
</html>

View File

@ -57,6 +57,7 @@
<li><a href="tutorial_install_xschem.html">Step by step instructions: Install XSCHEM</a></li>
<li><a href="tutorial_run_simulation.html">Run a simulation with XSCHEM</a></li>
<li><a href="tutorial_instance_based_implementation.html">Instance based selection of symbol implementation</a></li>
<li><a href="tutorial_symbol_generators.html">Symbol generators</a></li>
<li><a href="tutorial_use_existing_subckt.html">Create a symbol and use an existing subcircuit netlist</a></li>
<li><a href="tutorial_create_symbol.html">Create a symbol with XSCHEM</a></li>
<li><a href="tutorial_xschem_libraries.html">Manage XSCHEM design libraries / symbol librares</a></li>

View File

@ -1765,6 +1765,17 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg
Tcl_SetResult(interp, pins ? pins : "", TCL_VOLATILE);
my_free(_ALLOC_ID_, &pins);
}
/* is_symgen symbol
* tell if 'symbol' is agenerator (symbol(param1,param2,...) */
else if(!strcmp(argv[1], "is_symgen"))
{
char s[30];
if(argc > 2) {
my_snprintf(s, S(s), "%d", is_symgen(argv[2]));
Tcl_SetResult(interp, s, TCL_VOLATILE);
}
}
else { cmd_found = 0;}
break;
case 'l': /*----------------------------------------------*/

View File

@ -176,9 +176,10 @@ int is_symgen(const char *name)
}
if(!re) {
re = my_malloc(_ALLOC_ID_, sizeof(regex_t));
regcomp(re, "^[^ \\t()]+\\([^()]*\\)[ \\t]*$", REG_NOSUB | REG_EXTENDED);
regcomp(re, "^[^ \t()]+\\([^()]*\\)[ \t]*$", REG_NOSUB | REG_EXTENDED);
}
if(!regexec(re, name, 0 , NULL, 0) ) res = 1;
dbg(1, "is_symgen(%s)=%d\n", name, res);
/* regfree(&re); */
return res;
#else
@ -202,9 +203,10 @@ int match_symbol(const char *name) /* never returns -1, if symbol not found loa
}
if(!found)
{
dbg(1, "match_symbol(): matching symbol not found:%s, loading\n",name);
dbg(1, "match_symbol(): matching symbol not found: loading\n");
if(!is_symgen(name)) {
dbg(1, "match_symbol(): symbol=%s\n",name);
load_sym_def(name, NULL, 0); /* append another symbol to the xctx->sym[] array */
} else { /* get symbol from generator script */
FILE *fp;
@ -214,6 +216,7 @@ int match_symbol(const char *name) /* never returns -1, if symbol not found loa
char *spc_idx;
struct stat buf;
dbg(1, "match_symbol(): symgen=%s\n",name);
cmd = str_chars_replace(name, " (),", ' ');
spc_idx = strchr(cmd, ' ');
if(!spc_idx) goto end;

View File

@ -1,4 +1,5 @@
v {xschem version=3.0.0 file_version=1.2 }
v {xschem version=3.1.0 file_version=1.2
}
G {}
K {}
V {}
@ -102,16 +103,19 @@ C {ipin.sym} 640 -190 0 0 {name=p10 lab=CK}
C {ipin.sym} 640 -150 0 0 {name=p11 lab=RST}
C {lab_pin.sym} 790 -170 0 0 {name=p14 lab=VCC}
C {lab_pin.sym} 950 -190 0 1 {name=p24 lab=C[5:0]}
C {and3_ngspice.sym} 1120 -230 0 0 {name=x5 ROUT=1000}
C {and3_ngspice.sym} 1120 -230 0 0 {name=x5 ROUT=1000 net_name=true}
C {lab_pin.sym} 1080 -250 0 0 {name=p25 lab=C[5]}
C {lab_pin.sym} 1080 -230 0 0 {name=p26 lab=C[4]}
C {lab_pin.sym} 1080 -210 0 0 {name=p27 lab=C[3]}
C {lab_pin.sym} 1080 -150 0 0 {name=p28 lab=C[1]}
C {lab_pin.sym} 1080 -130 0 0 {name=p29 lab=C[0]}
C {and3_ngspice.sym} 1120 -150 0 0 {name=x6 ROUT=1000}
C {and3_ngspice.sym} 1120 -150 0 0 {name=x6 ROUT=1000
net_name=true}
C {lab_pin.sym} 1080 -170 0 0 {name=p30 lab=C[2]}
C {and_ngspice.sym} 1220 -190 0 0 {name=x7 ROUT=1000}
C {or_ngspice.sym} 1320 -210 0 0 {name=x8 ROUT=1000}
C {and_ngspice.sym} 1220 -190 0 0 {name=x7 ROUT=1000
net_name=true}
C {or_ngspice.sym} 1320 -210 0 0 {name=x8 ROUT=1000
net_name=true}
C {lab_pin.sym} 1280 -230 0 0 {name=p31 lab=RST}
C {lab_pin.sym} 1540 -230 0 1 {name=p15 lab=RSTI}
C {flip_flop_ngspice.sym} 1480 -210 0 0 {name=x9}
@ -121,7 +125,7 @@ C {lab_pin.sym} 1520 -390 0 0 {name=p1 lab=RST}
C {spice_probe.sym} 840 -250 0 0 {name=p6 attrs=""}
C {spice_probe.sym} 710 -410 0 0 {name=p17 attrs=""}
C {spice_probe.sym} 1540 -270 0 0 {name=p18 attrs=""}
C {inv_ngspice.sym} 1040 -410 0 0 {name=x11 ROUT=1000}
C {inv_ngspice.sym} 1040 -410 0 0 {name=x11 ROUT=1000 net_name=true}
C {lab_wire.sym} 1130 -410 0 0 {name=l2 lab=QN}
C {spice_probe.sym} 1090 -410 0 0 {name=p19 attrs=""}
C {ipin.sym} 310 -370 0 0 {name=p242 lab=VREF}
@ -145,4 +149,4 @@ C {spice_probe.sym} 220 -430 0 0 {name=p265 attrs=""}
C {opamp_65nm.sym} 380 -400 2 1 {name=x41}
C {comp_65nm.sym} 610 -410 0 0 {name=x42}
C {spice_probe.sym} 1470 -430 0 0 {name=p2 attrs=""}
C {or_ngspice.sym} 1110 -320 0 0 {name=x3 ROUT=1000}
C {or_ngspice.sym} 1110 -320 0 0 {name=x3 ROUT=1000 net_name=true}

View File

@ -1,4 +1,5 @@
v {xschem version=2.9.9 file_version=1.2 }
v {xschem version=3.1.0 file_version=1.2
}
G {}
K {}
V {}
@ -18,7 +19,7 @@ C {bsource.sym} 480 -330 0 1 {name=B1 VAR=V FUNC="'VCC/2*(1+tanh((min(V(C1),min(
C {lab_pin.sym} 310 -400 0 0 {name=l2 sig_type=std_logic lab=A1}
C {lab_pin.sym} 480 -250 0 0 {name=l3 sig_type=std_logic lab=0}
C {res.sym} 580 -400 1 0 {name=R1
value='ROUT'
value=ROUT
footprint=1206
device=resistor
m=1}

View File

@ -1,4 +1,5 @@
v {xschem version=2.9.9 file_version=1.2 }
v {xschem version=3.1.0 file_version=1.2
}
G {}
K {type=subcircuit
format="@name @pinlist @symname ROUT=@ROUT"
@ -19,3 +20,7 @@ B 5 -42.5 -2.5 -37.5 2.5 {name=B dir=in}
B 5 -42.5 17.5 -37.5 22.5 {name=C dir=in}
A 4 5 0 30 270 180 {}
T {@name} -16.25 -5 0 0 0.2 0.2 {}
T {@#1:net_name} -22.5 -17.5 0 1 0.15 0.15 {layer=15}
T {@#0:net_name} 35 1.25 0 0 0.15 0.15 {layer=15}
T {@#2:net_name} -22.5 2.5 0 1 0.15 0.15 {layer=15}
T {@#3:net_name} -22.5 22.5 0 1 0.15 0.15 {layer=15}

View File

@ -1,4 +1,5 @@
v {xschem version=2.9.9 file_version=1.2 }
v {xschem version=3.1.0 file_version=1.2
}
G {}
K {}
V {}
@ -17,7 +18,7 @@ C {bsource.sym} 480 -330 0 1 {name=B1 VAR=V FUNC="'VCC/2*(1+tanh((min(V(A1),V(B1
C {lab_pin.sym} 330 -400 0 0 {name=l2 sig_type=std_logic lab=A1}
C {lab_pin.sym} 480 -250 0 0 {name=l3 sig_type=std_logic lab=0}
C {res.sym} 580 -400 1 0 {name=R1
value='ROUT'
value=ROUT
footprint=1206
device=resistor
m=1}

View File

@ -1,4 +1,5 @@
v {xschem version=2.9.9 file_version=1.2 }
v {xschem version=3.1.0 file_version=1.2
}
G {}
K {type=subcircuit
format="@name @pinlist @symname ROUT=@ROUT"
@ -17,3 +18,6 @@ B 5 -42.5 -22.5 -37.5 -17.5 {name=A dir=in}
B 5 -42.5 17.5 -37.5 22.5 {name=B dir=in}
A 4 5 0 30 270 180 {}
T {@name} -16.25 -5 0 0 0.2 0.2 {}
T {@#1:net_name} -22.5 -17.5 0 1 0.15 0.15 {layer=15}
T {@#0:net_name} 35 1.25 0 0 0.15 0.15 {layer=15}
T {@#3:net_name} -22.5 22.5 0 1 0.15 0.15 {layer=15}

View File

@ -1,4 +1,5 @@
v {xschem version=2.9.9 file_version=1.2 }
v {xschem version=3.1.0 file_version=1.2
}
G {}
K {}
V {}
@ -17,7 +18,7 @@ C {bsource.sym} 470 -400 0 1 {name=B1 VAR=V FUNC="'VCC/2*(1+tanh((V(A1)-VCC/2)*1
C {lab_pin.sym} 320 -470 0 0 {name=l2 sig_type=std_logic lab=A1}
C {lab_pin.sym} 470 -320 0 0 {name=l3 sig_type=std_logic lab=0}
C {res.sym} 570 -470 1 0 {name=R1
value='ROUT'
value=ROUT
footprint=1206
device=resistor
m=1}

View File

@ -1,4 +1,5 @@
v {xschem version=2.9.9 file_version=1.2 }
v {xschem version=3.1.0 file_version=1.2
}
G {}
K {type=subcircuit
format="@name @pinlist @symname ROUT=@ROUT"
@ -19,3 +20,5 @@ T {@name} 25 -22 0 0 0.2 0.2 {}
T {Y} 7.5 -6.5 0 1 0.2 0.2 {}
T {A} -17.5 -6.5 0 0 0.2 0.2 {}
T {ROUT=@ROUT} -25 -42 0 0 0.2 0.2 {}
T {@#1:net_name} -22.5 6.25 0 1 0.15 0.15 {layer=15}
T {@#0:net_name} 17.5 6.25 0 0 0.15 0.15 {layer=15}

View File

@ -1,4 +1,5 @@
v {xschem version=2.9.9 file_version=1.2 }
v {xschem version=3.1.0 file_version=1.2
}
G {}
K {}
V {}
@ -17,7 +18,7 @@ C {bsource.sym} 470 -400 0 1 {name=B1 VAR=V FUNC="'VCC/2*(1-tanh((V(A1)-VCC/2)*1
C {lab_pin.sym} 320 -470 0 0 {name=l2 sig_type=std_logic lab=A1}
C {lab_pin.sym} 470 -320 0 0 {name=l3 sig_type=std_logic lab=0}
C {res.sym} 570 -470 1 0 {name=R1
value='ROUT'
value=ROUT
footprint=1206
device=resistor
m=1}

View File

@ -25,5 +25,5 @@ T {@name} 25 -22 0 0 0.2 0.2 {}
T {Y} 7.5 -6.5 0 1 0.2 0.2 {}
T {A} -17.5 -6.5 0 0 0.2 0.2 {}
T {ROUT=@ROUT} -25 -42 0 0 0.2 0.2 {}
T {@#1:net_name} -40 6.25 0 0 0.15 0.15 {layer=15}
T {@#0:net_name} 40 6.25 0 1 0.15 0.15 {layer=15}
T {@#1:net_name} -22.5 6.25 0 1 0.15 0.15 {layer=15}
T {@#0:net_name} 17.5 6.25 0 0 0.15 0.15 {layer=15}

View File

@ -1,4 +1,5 @@
v {xschem version=2.9.9 file_version=1.2 }
v {xschem version=3.1.0 file_version=1.2
}
G {}
K {type=subcircuit
format="@name @pinlist @symname ROUT=@ROUT"
@ -18,3 +19,6 @@ A 4 -65 0 50 323.130102354156 73.7397952916881 {}
A 4 -9.642857142857142 17.85714285714286 48.0818286351295 21.80140948635181 62.65738573560834 {}
A 4 -4.6875 -11.25 41.25118369513777 269.5659493678606 74.60789655596687 {}
T {@name} -11.25 -5 0 0 0.2 0.2 {}
T {@#1:net_name} -20 -18.75 0 1 0.15 0.15 {layer=15}
T {@#0:net_name} 35 1.25 0 0 0.15 0.15 {layer=15}
T {@#2:net_name} -20 10 0 1 0.15 0.15 {layer=15}