From 5feb4539c785f901aa313677c5515f8e00fcc1ab Mon Sep 17 00:00:00 2001 From: stefan schippers Date: Tue, 2 May 2023 18:39:14 +0200 Subject: [PATCH] updated test_mosgen.sch and mosgen examples --- xschem_library/generators/mosgen | 116 ++++++++++------------ xschem_library/generators/test_mosgen.sch | 8 +- 2 files changed, 56 insertions(+), 68 deletions(-) diff --git a/xschem_library/generators/mosgen b/xschem_library/generators/mosgen index 9d9cb9f7..708dcffb 100755 --- a/xschem_library/generators/mosgen +++ b/xschem_library/generators/mosgen @@ -58,58 +58,6 @@ hide=true} T {tcleval(id=[to_eng [ngspice::get_node [subst -nocommand \{i(\\@m.$\{path\}@spiceprefix@name\\.msky130_fd_pr__@model\\[id])\}]]] )} 32.5 -30 0 0 0.15 0.15 {layer=15 hide=true} } -} elseif {$model eq {nfet_01v8}} { -puts {v {xschem version=3.1.0 file_version=1.2 } -G {} -K {type=nmos -lvs_format="@spiceprefix@name @pinlist sky130_fd_pr__@model L=@L W=@W nf=@nf m=@mult" -format="@spiceprefix@name @pinlist sky130_fd_pr__@model L=@L W=@W -+ nf=@nf ad=@ad as=@as pd=@pd ps=@ps -+ nrd=@nrd nrs=@nrs sa=@sa sb=@sb sd=@sd -+ mult=@mult m=@mult" -template="name=M1 -L=0.15 -W=1 -nf=1 -mult=1 -ad=\\"'int((nf+1)/2) * W/nf * 0.29'\\" -pd=\\"'2*int((nf+1)/2) * (W/nf + 0.29)'\\" -as=\\"'int((nf+2)/2) * W/nf * 0.29'\\" -ps=\\"'2*int((nf+2)/2) * (W/nf + 0.29)'\\" -nrd=\\"'0.29 / W'\\" nrs=\\"'0.29 / W'\\" -sa=0 sb=0 sd=0 -model=nfet_01v8 -spiceprefix=X -"} -V {} -S {} -E {} -L 4 7.5 -22.5 7.5 22.5 {} -L 4 -20 0 2.5 0 {} -L 4 20 -30 20 -17.5 {} -L 4 20 17.5 20 30 {} -L 4 2.5 -15 2.5 15 {} -L 4 7.5 -17.5 20 -17.5 {} -L 4 7.5 17.5 15 17.5 {} -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} -B 5 19.921875 -0.078125 20.078125 0.078125 {name=B dir=in} -P 4 4 15 15 20 17.5 15 20 15 15 {fill=true} -P 5 4 20 -2.5 15 0 20 2.5 20 -2.5 {fill=true} -T {@name} 5 -30 0 1 0.2 0.2 {} -T {S} 22.5 17.5 0 0 0.15 0.15 {layer=7} -T {D} 22.5 -17.5 2 1 0.15 0.15 {layer=7} -T {B} 20 -10 0 0 0.15 0.15 {layer=7} -T {G} -10 -10 0 1 0.15 0.15 {layer=7} -T {@model} 30 -8.75 2 1 0.2 0.2 {} -T {@mult x @W / @L} 31.25 13.75 0 0 0.2 0.2 { layer=13} -T {nf=@nf} 31.25 1.25 0 0 0.2 0.2 { layer=13} -T {tcleval(gm=[to_eng [ngspice::get_node [subst -nocommand \{\\@m.$\{path\}@spiceprefix@name\\.msky130_fd_pr__@model\\[gm]\}]]] )} 32.5 -8.75 0 0 0.15 0.15 {layer=15 -hide=true} -T {tcleval(id=[to_eng [ngspice::get_node [subst -nocommand \{i(\\@m.$\{path\}@spiceprefix@name\\.msky130_fd_pr__@model\\[id])\}]]] )} 32.5 -30 0 0 0.15 0.15 {layer=15 -hide=true} -} } elseif {$model eq {pfet_g5v0d10v5}} { puts {v {xschem version=3.1.0 file_version=1.2} G {} @@ -216,18 +164,58 @@ hide=true} T {tcleval(id=[to_eng [ngspice::get_node [subst -nocommand \{i(\\@m.$\{path\}@spiceprefix@name\\.msky130_fd_pr__@model\\[id])\}]]] )} 32.5 -30 0 0 0.15 0.15 {layer=15 hide=true} } -} else { -puts { -G {type=missing -format="* @name - @symname IS MISSING !!!!" -template="name=x1"} -L 8 -110 -25 -110 25 {} -L 8 -110 -25 110 -25 {} -L 8 110 -25 110 25 {} -L 8 -110 25 110 25 {} -T {@symname} -44.5 1.5 0 0 0.3 0.3 {} -T {@name} 115 -37 0 0 0.2 0.2 {} -T {---MISSING SYMBOL---} -89.5 -21 0 0 0.3 0.3 {} + +} else { ;# default: nfet_01v8 +puts {v {xschem version=3.1.0 file_version=1.2 } +G {} +K {type=nmos +lvs_format="@spiceprefix@name @pinlist sky130_fd_pr__@model L=@L W=@W nf=@nf m=@mult" +format="@spiceprefix@name @pinlist sky130_fd_pr__@model L=@L W=@W ++ nf=@nf ad=@ad as=@as pd=@pd ps=@ps ++ nrd=@nrd nrs=@nrs sa=@sa sb=@sb sd=@sd ++ mult=@mult m=@mult" +template="name=M1 +L=0.15 +W=1 +nf=1 +mult=1 +ad=\\"'int((nf+1)/2) * W/nf * 0.29'\\" +pd=\\"'2*int((nf+1)/2) * (W/nf + 0.29)'\\" +as=\\"'int((nf+2)/2) * W/nf * 0.29'\\" +ps=\\"'2*int((nf+2)/2) * (W/nf + 0.29)'\\" +nrd=\\"'0.29 / W'\\" nrs=\\"'0.29 / W'\\" +sa=0 sb=0 sd=0 +model=nfet_01v8 +spiceprefix=X +"} +V {} +S {} +E {} +L 4 7.5 -22.5 7.5 22.5 {} +L 4 -20 0 2.5 0 {} +L 4 20 -30 20 -17.5 {} +L 4 20 17.5 20 30 {} +L 4 2.5 -15 2.5 15 {} +L 4 7.5 -17.5 20 -17.5 {} +L 4 7.5 17.5 15 17.5 {} +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} +B 5 19.921875 -0.078125 20.078125 0.078125 {name=B dir=in} +P 4 4 15 15 20 17.5 15 20 15 15 {fill=true} +P 5 4 20 -2.5 15 0 20 2.5 20 -2.5 {fill=true} +T {@name} 5 -30 0 1 0.2 0.2 {} +T {S} 22.5 17.5 0 0 0.15 0.15 {layer=7} +T {D} 22.5 -17.5 2 1 0.15 0.15 {layer=7} +T {B} 20 -10 0 0 0.15 0.15 {layer=7} +T {G} -10 -10 0 1 0.15 0.15 {layer=7} +T {@model} 30 -8.75 2 1 0.2 0.2 {} +T {@mult x @W / @L} 31.25 13.75 0 0 0.2 0.2 { layer=13} +T {nf=@nf} 31.25 1.25 0 0 0.2 0.2 { layer=13} +T {tcleval(gm=[to_eng [ngspice::get_node [subst -nocommand \{\\@m.$\{path\}@spiceprefix@name\\.msky130_fd_pr__@model\\[gm]\}]]] )} 32.5 -8.75 0 0 0.15 0.15 {layer=15 +hide=true} +T {tcleval(id=[to_eng [ngspice::get_node [subst -nocommand \{i(\\@m.$\{path\}@spiceprefix@name\\.msky130_fd_pr__@model\\[id])\}]]] )} 32.5 -30 0 0 0.15 0.15 {layer=15 +hide=true} } } diff --git a/xschem_library/generators/test_mosgen.sch b/xschem_library/generators/test_mosgen.sch index 4613c7d3..10070499 100644 --- a/xschem_library/generators/test_mosgen.sch +++ b/xschem_library/generators/test_mosgen.sch @@ -33,11 +33,11 @@ N 500 -350 500 -290 { lab=#net13} N 790 -350 790 -290 { lab=#net14} -C {mosgen( @model )} 480 -140 0 0 {name=x1 +C {mosgen(@model)} 480 -140 0 0 {name=x1 model=nfet_01v8} -C {mosgen( @model )} 770 -140 0 0 {name=x2 +C {mosgen(@model)} 770 -140 0 0 {name=x2 model=nfet_g5v0d10v5} -C {mosgen( @model )} 480 -260 0 0 {name=x3 +C {mosgen(@model)} 480 -260 0 0 {name=x3 model=pfet_01v8} -C {mosgen( @model )} 770 -260 0 0 {name=x4 +C {mosgen(@model)} 770 -260 0 0 {name=x4 model=pfet_g5v0d10v5}