added schematic to xschem
diff --git a/xschem/reram.sym b/xschem/reram.sym new file mode 100644 index 0000000..e677477 --- /dev/null +++ b/xschem/reram.sym
@@ -0,0 +1,42 @@ +v {xschem version=3.0.0 file_version=1.2 } +G {} +K {type=reram + +function0="1" +function1="0" + +format="Ysky130_fd_pr_reram__reram_cell @name @pinlist @device" + +verilog_format="tran @name (@@P\\\\, @@M\\\\);" + +tedax_format="footprint @name @footprint +value @name @value +device @name @device +spicedev @name @spicedev +spiceval @name @spiceval +comptag @name @comptag" + +template="name=RERAM1 +device=RERAM +m=1"} +V {} +S {} +E {} +L 4 -20 20 20 -20 {} +L 4 10 -20 20 -20 {} +L 4 20 -20 20 -10 {} +L 4 0 20 0 30 {} +L 4 0 20 7.5 17.5 {} +L 4 -7.5 12.5 7.5 17.5 {} +L 4 -7.5 12.5 7.5 7.5 {} +L 4 -7.5 2.5 7.5 7.5 {} +L 4 -7.5 2.5 7.5 -2.5 {} +L 4 -7.5 -7.5 7.5 -2.5 {} +L 4 -7.5 -7.5 7.5 -12.5 {} +L 4 -7.5 -17.5 7.5 -12.5 {} +L 4 -7.5 -17.5 0 -20 {} +L 4 0 -30 0 -20 {} +B 5 -2.5 -32.5 2.5 -27.5 {name=TE dir=inout propag=1 pinnumber=1 goto=1} +B 5 -2.5 27.5 2.5 32.5 {name=BE dir=inout propag=0 pinnumber=2 goto=0} +T {@#0:net_name} 20 -38.75 0 0 0.15 0.15 {layer=15} +T {@#1:net_name} 20 21.25 0 0 0.15 0.15 {layer=15}
diff --git a/xschem/sky130/nfet_01v8.sym b/xschem/sky130/nfet_01v8.sym new file mode 100644 index 0000000..bba9022 --- /dev/null +++ b/xschem/sky130/nfet_01v8.sym
@@ -0,0 +1,56 @@ +v {xschem version=3.0.0 file_version=1.2 + +* Copyright 2021 Stefan Frederik Schippers +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* https://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. + +} +G {} +K {type=nmos +format="@spiceprefix@name @pinlist sky130_fd_pr__@model L=@L W=@W ++ nf='int(( @nf +1)/2) * @W / @nf * 0.29' ad='int(( @nf +1)/2) * @W / @nf * 0.29' as='int(( @nf +2)/2) * @W / @nf * 0.29' ++ pd='2*int(( @nf +1)/2) * ( @W / @nf + 0.29)' ps='2*int(( @nf +2)/2) * ( @W / @nf + 0.29)' ++ nrd='0.29 / @W ' nrs='0.29 / @W ' sa=@sa sb=@sb sd=@sd ++ mult=@mult m=@mult" +template="name=M1 +L=0.15 +W=1 +nf=1 +mult=1 +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 11.25 0 0 0.2 0.2 { layer=13}
diff --git a/xschem/sky130/nfet_03v3_nvt.sym b/xschem/sky130/nfet_03v3_nvt.sym new file mode 100644 index 0000000..7bf385e --- /dev/null +++ b/xschem/sky130/nfet_03v3_nvt.sym
@@ -0,0 +1,58 @@ +v {xschem version=2.9.8 file_version=1.2 + +* Copyright 2021 Stefan Frederik Schippers +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* https://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. + +} +G {} +K {type=nmos +format="@spiceprefix@name @pinlist sky130_fd_pr__@model L=@L W=@W ++ nf=@nf ad='int(( @nf + 1)/2) * @W / @nf * 0.29' as='int(( @nf +2)/2) * @W / @nf * 0.29' pd='2*int(( @nf +1)/2) * ( @W / @nf + 0.29)' ps='2*int(( @nf +2)/2) * ( @W / @nf + 0.29)' ++ nrd='0.29 / @W ' nrs='0.29 / @W ' sa=@sa sb=@sb sd=@sd ++ mult=@mult m=@mult" +template="name=M1 +L=0.5 +W=1 +nf=1 +mult=1 +sa=0 sb=0 sd=0 +model=nfet_03v3_nvt +spiceprefix=X +"} +V {} +S {} +E {} +L 4 20 -30 20 -17.5 {} +L 4 20 17.5 20 30 {} +L 4 7.5 -17.5 20 -17.5 {} +L 4 7.5 17.5 15 17.5 {} +L 4 -20 -0 -2.5 0 {} +L 4 7.5 -22.5 7.5 -12.5 {} +L 4 7.5 12.5 7.5 22.5 {} +L 4 7.5 -5 7.5 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 4 5 -2.5 15 -2.5 -15 2.5 -15 2.5 15 -2.5 15 {} +P 5 4 20 -2.5 15 0 20 2.5 20 -2.5 {fill=true} +T {3V} 5 17.5 0 1 0.2 0.2 { layer=4} +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 11.25 0 0 0.2 0.2 { layer=13}
diff --git a/xschem/sky130/pfet_01v8.sym b/xschem/sky130/pfet_01v8.sym new file mode 100644 index 0000000..26b8d75 --- /dev/null +++ b/xschem/sky130/pfet_01v8.sym
@@ -0,0 +1,57 @@ +v {xschem version=3.0.0 file_version=1.2 + +* Copyright 2021 Stefan Frederik Schippers +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* https://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. + +} +G {} +K {type=pmos +format="@spiceprefix@name @pinlist sky130_fd_pr__@model L=@L W=@W ++ nf=@nf ad='int(( @nf +1)/2) * @W / @nf * 0.29' as='int(( @nf +2)/2) * @W / @nf * 0.29' ++ pd='2*int(( @nf +1)/2) * ( @W / @nf + 0.29)' ps='2*int(( @nf +2)/2) * ( @W / @nf + 0.29)' ++ nrd='0.29 / @W ' nrs='0.29 / @W ' sa=@sa sb=@sb sd=@sd ++ mult=@mult m=@mult" +template="name=M1 +L=0.15 +W=1 +nf=1 +mult=1 +sa=0 sb=0 sd=0 +model=pfet_01v8 +spiceprefix=X +"} +V {} +S {} +E {} +L 4 7.5 -22.5 7.5 22.5 {} +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 12.5 -17.5 20 -17.5 {} +L 4 -20 0 -7.5 0 {} +B 5 17.5 27.5 22.5 32.5 {name=D dir=inout} +B 5 -22.5 -2.5 -17.5 2.5 {name=G dir=in} +B 5 17.5 -32.5 22.5 -27.5 {name=S dir=inout} +B 5 19.921875 -0.078125 20.078125 0.078125 {name=B dir=in} +A 4 -2.5 0 5 180 360 {} +P 4 4 12.5 -20 7.5 -17.5 12.5 -15 12.5 -20 {fill=true} +P 5 4 15 -2.5 20 0 15 2.5 15 -2.5 {fill=true} +T {@name} 5 -30 0 1 0.2 0.2 {} +T {D} 22.5 17.5 0 0 0.15 0.15 {layer=7} +T {S} 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 11.25 0 0 0.2 0.2 { layer=13}
diff --git a/xschem/sky130_fd_pr_reram__reram_cell.va b/xschem/sky130_fd_pr_reram__reram_cell.va new file mode 100644 index 0000000..6e2c0b8 --- /dev/null +++ b/xschem/sky130_fd_pr_reram__reram_cell.va
@@ -0,0 +1,108 @@ +// Copyright 2020 The SkyWater PDK Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// SPDX-License-Identifier: Apache-2.0 + +`include "constants.vams" +`include "disciplines.vams" + +module sky130_fd_pr_reram__reram_cell(TE, BE); + inout TE; // top electrode + inout BE; // bottom electrode + electrical TE, BE; + + // ================================================== + // input parameters + // -------------------------------------------------- + // physical area and thickness + parameter real area_ox = 0.1024e-12 from (0:inf); // area of TE/BE overlap [meters^2] + parameter real Tox = 5.0e-9 from (0:inf); // thickness of oxide between TE and BE [meters] + parameter real Tfilament_max = 4.9e-9 from (0:inf); // maximum thickness of conductive filament (for minimum resistance) [meters] + parameter real Tfilament_min = 3.3e-9 from (0:inf); // minimum thickness of conductive filament (for maximum resistance) [meters] + parameter real Tfilament_0 = 3.3e-9 from [Tfilament_min:Tfilament_max]; // initial thickness of conductive filament (at t=0 for transient simulation) [meters] + // activation energy + parameter real Eact_generation = 1.501 from (0:inf); // activation energy for vacancy generation [eV] + parameter real Eact_recombination = 1.500 from (0:inf); // activation energy for vacancy recombination [eV] + // calibration parameters: I-V + parameter real I_k1 = 6.140e-5 from (0:inf); // current calibration parameter [Amps] + parameter real Tfilament_ref = 4.7249e-9 from (0:inf); // filament thickness calibration parameter [meters] + parameter real V_ref = 0.430 from (0:inf); // voltage calibration parameter [Volts] + // calibration parameters: filament growth + parameter real velocity_k1 = 150 from (0:inf); // velocity calibration parameter [meters/second] + parameter real gamma_k0 = 16.5 from (0:inf); // enhancement factor calibration parameter [unitless] + parameter real gamma_k1 = -1.25 from (-inf:inf); // enhancement factor calibration parameter [unitless] + // calibration parameters: temperature + parameter real Temperature_0 = 300 from (0:inf); // intial temperature [degrees Kelvin] + parameter real C_thermal = 3.1825e-16 from (0:inf); // effective thermal capacitance [Joules/Kelvin] + parameter real tau_thermal = 0.23e-9 from (0:inf); // effective thermal time constant [seconds] + // simulation control + parameter real t_step = 1.0e-9 from (0:inf); // maximum time step [seconds] + // ================================================== + + // internal parameters + parameter real a0 = 0.25e-9; // atomic distance [m] + real Tfilament_current; // current filament thickness [m] + real Tfilament_dTdt; // current filament thickness, derivative w.r.t. time [m/s] + real gamma; // local enhancement factor + real Temperature_current; // current temperature + real kT_over_q; // e.g., 0.0259 at 300 degrees K [eV] + + // transient simulation parameters + real t_current; // current time step [s] + real t_previous; // previous time step [s] + real t_delta; // difference between current vs. previous time step + + real iout; + + // local functions + analog function real soft_minmax; + input x, xmin, xmax; + real x, xmin, xmax; + begin + if (x > xmax) begin + soft_minmax = xmax; + end else if (x < xmin) begin + soft_minmax = xmin; + end else begin + soft_minmax = x; + end + end + endfunction // soft_minmax + + // core equations + analog begin + @(initial_instance) begin + // initial condition + $strobe("ReRAM inital instance"); + Temperature_current = Temperature_0; + Tfilament_current = Tfilament_0; + end + $bound_step(t_step); // bound maximum time step + t_current = $abstime; // current time + t_delta = t_current - t_previous; + gamma = gamma_k0 + gamma_k1 * pow((Tox - Tfilament_current)/1.0e-9, 3); + kT_over_q = (`P_K * Temperature_current) / `P_Q; + Tfilament_dTdt = velocity_k1 * (exp(-Eact_generation / kT_over_q) * exp( gamma * a0/Tox * V(TE,BE) / kT_over_q) - + exp(-Eact_recombination / kT_over_q) * exp(-gamma * a0/Tox * V(TE,BE) / kT_over_q)); + Tfilament_current = Tfilament_current + Tfilament_dTdt * t_delta; // 1st-order update to filament thickness + Tfilament_current = soft_minmax(Tfilament_current, Tfilament_min, Tfilament_max); // bound filament thickness + I(TE,BE) <+ I_k1 * exp(-(Tox - Tfilament_current)/(Tox - Tfilament_ref)) * sinh( V(TE,BE)/V_ref ); + Temperature_current = (Temperature_current + t_delta * (abs(V(TE,BE)*I(TE,BE)) / C_thermal + Temperature_0/tau_thermal)) + / (1 + t_delta/tau_thermal); // 1st-order update to temperature + + //Temperature_current = 300; + + t_previous = $abstime; // current time step is previous time step for next iteration + end +endmodule
diff --git a/xschem/user_analog_project_wrapper-example.sch b/xschem/user_analog_project_wrapper-example.sch new file mode 100644 index 0000000..e3cbcec --- /dev/null +++ b/xschem/user_analog_project_wrapper-example.sch
@@ -0,0 +1,180 @@ +v {xschem version=2.9.9 file_version=1.2 } +G {} +K {} +V {} +S {} +E {} +N 3830 -460 3830 -390 { lab=vdda1} +N 3730 -460 3830 -460 { lab=vdda1} +N 3860 -230 3860 -180 { lab=vssa1} +N 3770 -180 3860 -180 { lab=vssa1} +N 3890 -460 3890 -390 { lab=vccd1} +N 3890 -460 3960 -460 { lab=vccd1} +N 3890 -130 3890 -60 { lab=vccd1} +N 3890 -130 3950 -130 { lab=vccd1} +N 3830 -130 3830 -60 { lab=io_analog[4]} +N 3790 -130 3830 -130 { lab=io_analog[4]} +N 3860 100 3860 150 { lab=vssa1} +N 3800 150 3860 150 { lab=vssa1} +N 4010 -10 4110 -10 { lab=gpio_analog[7]} +N 4010 20 4110 20 { lab=io_out[15]} +N 4010 50 4110 50 { lab=io_out[16]} +N 4010 -340 4130 -340 { lab=gpio_analog[3]} +N 4010 -310 4130 -310 { lab=io_out[11]} +N 4010 -280 4130 -280 { lab=io_out[12]} +N 3670 300 3670 340 { lab=io_clamp_low[2]} +N 3670 400 3670 420 { lab=vssa1} +N 3670 440 3670 460 { lab=io_clamp_high[2]} +N 3670 520 3670 530 { lab=vssa1} +N 3670 570 3670 590 { lab=io_clamp_low[1]} +N 3670 650 3670 670 { lab=vssa1} +N 4160 300 4160 330 { lab=io_clamp_high[1]} +N 4160 390 4160 410 { lab=vssa1} +N 4160 440 4160 460 { lab=io_clamp_low[0]} +N 4160 520 4160 530 { lab=vssa1} +N 4160 550 4160 560 { lab=io_clamp_high[0]} +N 4160 620 4160 640 { lab=io_analog[4]} +N 3630 300 3670 300 { lab=io_clamp_low[2]} +N 3630 420 3670 420 { lab=vssa1} +N 3630 440 3670 440 { lab=io_clamp_high[2]} +N 3630 530 3670 530 { lab=vssa1} +N 3630 570 3670 570 { lab=io_clamp_low[1]} +N 3630 670 3670 670 { lab=vssa1} +N 4130 300 4160 300 { lab=io_clamp_high[1]} +N 4130 410 4160 410 { lab=vssa1} +N 4130 440 4160 440 { lab=io_clamp_low[0]} +N 4130 530 4160 530 { lab=vssa1} +N 4130 550 4160 550 { lab=io_clamp_high[0]} +N 4130 640 4160 640 { lab=io_analog[4]} +N 3670 710 3670 750 { lab=io_oeb[12]} +N 3670 810 3670 830 { lab=vssd1} +N 3670 850 3670 870 { lab=io_oeb[16]} +N 3670 930 3670 940 { lab=vssd1} +N 4160 710 4160 740 { lab=io_oeb[11]} +N 4160 800 4160 820 { lab=vssd1} +N 4160 850 4160 870 { lab=#net1} +N 4160 930 4160 940 { lab=vssd1} +N 3630 710 3670 710 { lab=io_oeb[12]} +N 3630 830 3670 830 { lab=vssd1} +N 3630 850 3670 850 { lab=io_oeb[16]} +N 3630 940 3670 940 { lab=vssd1} +N 4130 710 4160 710 { lab=io_oeb[11]} +N 4130 820 4160 820 { lab=vssd1} +N 4130 850 4160 850 { lab=#net1} +N 4130 940 4160 940 { lab=vssd1} +C {example_por.sym} 3860 -310 0 0 {name=x1} +C {example_por.sym} 3860 20 0 0 {name=x2} +C {devices/iopin.sym} 3240 -470 0 0 {name=p1 lab=vdda1} +C {devices/iopin.sym} 3240 -440 0 0 {name=p2 lab=vdda2} +C {devices/iopin.sym} 3240 -410 0 0 {name=p3 lab=vssa1} +C {devices/iopin.sym} 3240 -380 0 0 {name=p4 lab=vssa2} +C {devices/iopin.sym} 3240 -350 0 0 {name=p5 lab=vccd1} +C {devices/iopin.sym} 3240 -320 0 0 {name=p6 lab=vccd2} +C {devices/iopin.sym} 3240 -290 0 0 {name=p7 lab=vssd1} +C {devices/iopin.sym} 3240 -260 0 0 {name=p8 lab=vssd2} +C {devices/ipin.sym} 3290 -190 0 0 {name=p9 lab=wb_clk_i} +C {devices/ipin.sym} 3290 -160 0 0 {name=p10 lab=wb_rst_i} +C {devices/ipin.sym} 3290 -130 0 0 {name=p11 lab=wbs_stb_i} +C {devices/ipin.sym} 3290 -100 0 0 {name=p12 lab=wbs_cyc_i} +C {devices/ipin.sym} 3290 -70 0 0 {name=p13 lab=wbs_we_i} +C {devices/ipin.sym} 3290 -40 0 0 {name=p14 lab=wbs_sel_i[3:0]} +C {devices/ipin.sym} 3290 -10 0 0 {name=p15 lab=wbs_dat_i[31:0]} +C {devices/ipin.sym} 3290 20 0 0 {name=p16 lab=wbs_adr_i[31:0]} +C {devices/opin.sym} 3280 80 0 0 {name=p17 lab=wbs_ack_o} +C {devices/opin.sym} 3280 110 0 0 {name=p18 lab=wbs_dat_o[31:0]} +C {devices/ipin.sym} 3290 150 0 0 {name=p19 lab=la_data_in[127:0]} +C {devices/opin.sym} 3280 180 0 0 {name=p20 lab=la_data_out[127:0]} +C {devices/ipin.sym} 3290 260 0 0 {name=p21 lab=io_in[26:0]} +C {devices/ipin.sym} 3290 290 0 0 {name=p22 lab=io_in_3v3[26:0]} +C {devices/ipin.sym} 3280 570 0 0 {name=p23 lab=user_clock2} +C {devices/opin.sym} 3280 320 0 0 {name=p24 lab=io_out[26:0]} +C {devices/opin.sym} 3280 350 0 0 {name=p25 lab=io_oeb[26:0]} +C {devices/iopin.sym} 3250 410 0 0 {name=p26 lab=gpio_analog[17:0]} +C {devices/iopin.sym} 3250 440 0 0 {name=p27 lab=gpio_noesd[17:0]} +C {devices/iopin.sym} 3250 470 0 0 {name=p29 lab=io_analog[10:0]} +C {devices/iopin.sym} 3250 500 0 0 {name=p30 lab=io_clamp_high[2:0]} +C {devices/iopin.sym} 3250 530 0 0 {name=p31 lab=io_clamp_low[2:0]} +C {devices/opin.sym} 3270 600 0 0 {name=p32 lab=user_irq[2:0]} +C {devices/ipin.sym} 3290 210 0 0 {name=p28 lab=la_oenb[127:0]} +C {devices/lab_pin.sym} 3730 -460 0 0 {name=l1 sig_type=std_logic lab=vdda1} +C {devices/lab_pin.sym} 3770 -180 0 0 {name=l2 sig_type=std_logic lab=vssa1} +C {devices/lab_pin.sym} 3960 -460 0 1 {name=l3 sig_type=std_logic lab=vccd1} +C {devices/lab_pin.sym} 3950 -130 0 1 {name=l4 sig_type=std_logic lab=vccd1} +C {devices/lab_pin.sym} 3790 -130 0 0 {name=l5 sig_type=std_logic lab=io_analog[4]} +C {devices/lab_pin.sym} 3800 150 0 0 {name=l6 sig_type=std_logic lab=vssa1} +C {devices/lab_pin.sym} 4130 -340 0 1 {name=l7 sig_type=std_logic lab=gpio_analog[3]} +C {devices/lab_pin.sym} 4130 -310 0 1 {name=l8 sig_type=std_logic lab=io_out[11]} +C {devices/lab_pin.sym} 4130 -280 0 1 {name=l9 sig_type=std_logic lab=io_out[12]} +C {devices/lab_pin.sym} 4110 -10 0 1 {name=l10 sig_type=std_logic lab=gpio_analog[7]} +C {devices/lab_pin.sym} 4110 20 0 1 {name=l11 sig_type=std_logic lab=io_out[15]} +C {devices/lab_pin.sym} 4110 50 0 1 {name=l12 sig_type=std_logic lab=io_out[16]} +C {sky130_fd_pr/res_generic_m1.sym} 3670 370 0 0 {name=R1 +W=11 +L=0.25 +model=res_generic_m3 +mult=1} +C {sky130_fd_pr/res_generic_m1.sym} 3670 490 0 0 {name=R2 +W=11 +L=0.25 +model=res_generic_m3 +mult=1} +C {sky130_fd_pr/res_generic_m1.sym} 3670 620 0 0 {name=R4 +W=11 +L=0.25 +model=res_generic_m3 +mult=1} +C {sky130_fd_pr/res_generic_m1.sym} 4160 360 0 0 {name=R5 +W=11 +L=0.25 +model=res_generic_m3 +mult=1} +C {sky130_fd_pr/res_generic_m1.sym} 4160 490 0 0 {name=R6 +W=11 +L=0.25 +model=res_generic_m3 +mult=1} +C {sky130_fd_pr/res_generic_m1.sym} 4160 590 0 0 {name=R7 +W=11 +L=0.25 +model=res_generic_m3 +mult=1} +C {devices/lab_pin.sym} 3630 300 0 0 {name=l13 sig_type=std_logic lab=io_clamp_low[2]} +C {devices/lab_pin.sym} 3630 440 0 0 {name=l14 sig_type=std_logic lab=io_clamp_high[2]} +C {devices/lab_pin.sym} 3630 570 0 0 {name=l15 sig_type=std_logic lab=io_clamp_low[1]} +C {devices/lab_pin.sym} 4130 300 0 0 {name=l16 sig_type=std_logic lab=io_clamp_high[1]} +C {devices/lab_pin.sym} 4130 440 0 0 {name=l17 sig_type=std_logic lab=io_clamp_low[0]} +C {devices/lab_pin.sym} 3630 420 0 0 {name=l18 sig_type=std_logic lab=vssa1} +C {devices/lab_pin.sym} 3630 530 0 0 {name=l19 sig_type=std_logic lab=vssa1} +C {devices/lab_pin.sym} 4130 410 0 0 {name=l20 sig_type=std_logic lab=vssa1} +C {devices/lab_pin.sym} 4130 530 0 0 {name=l21 sig_type=std_logic lab=vssa1} +C {devices/lab_pin.sym} 3630 670 0 0 {name=l22 sig_type=std_logic lab=vssa1} +C {devices/lab_pin.sym} 4130 550 0 0 {name=l23 sig_type=std_logic lab=io_clamp_high[0]} +C {devices/lab_pin.sym} 4130 640 0 0 {name=l24 sig_type=std_logic lab=io_analog[4]} +C {sky130_fd_pr/res_generic_m1.sym} 3670 780 0 0 {name=R8 +W=0.56 +L=0.49 +model=res_generic_m3 +mult=1} +C {sky130_fd_pr/res_generic_m1.sym} 3670 900 0 0 {name=R9 +W=0.56 +L=0.31 +model=res_generic_m3 +mult=1} +C {sky130_fd_pr/res_generic_m1.sym} 4160 770 0 0 {name=R11 +W=0.56 +L=0.58 +model=res_generic_m3 +mult=1} +C {sky130_fd_pr/res_generic_m1.sym} 4160 900 0 0 {name=R12 +W=0.56 +L=0.6 +model=res_generic_m3 +mult=1} +C {devices/lab_pin.sym} 4130 850 0 0 {name=l25 sig_type=std_logic lab=io_oeb[15]} +C {devices/lab_pin.sym} 3630 850 0 0 {name=l26 sig_type=std_logic lab=io_oeb[16]} +C {devices/lab_pin.sym} 4130 710 0 0 {name=l27 sig_type=std_logic lab=io_oeb[11]} +C {devices/lab_pin.sym} 3630 710 0 0 {name=l28 sig_type=std_logic lab=io_oeb[12]} +C {devices/lab_pin.sym} 3630 830 0 0 {name=l29 sig_type=std_logic lab=vssd1} +C {devices/lab_pin.sym} 3630 940 0 0 {name=l30 sig_type=std_logic lab=vssd1} +C {devices/lab_pin.sym} 4130 820 0 0 {name=l31 sig_type=std_logic lab=vssd1} +C {devices/lab_pin.sym} 4130 940 0 0 {name=l32 sig_type=std_logic lab=vssd1}
diff --git a/xschem/user_analog_project_wrapper.sch b/xschem/user_analog_project_wrapper.sch index e3cbcec..ca5ec40 100644 --- a/xschem/user_analog_project_wrapper.sch +++ b/xschem/user_analog_project_wrapper.sch
@@ -1,180 +1,83 @@ -v {xschem version=2.9.9 file_version=1.2 } +v {xschem version=3.0.0 file_version=1.2 } G {} K {} V {} S {} E {} -N 3830 -460 3830 -390 { lab=vdda1} -N 3730 -460 3830 -460 { lab=vdda1} -N 3860 -230 3860 -180 { lab=vssa1} -N 3770 -180 3860 -180 { lab=vssa1} -N 3890 -460 3890 -390 { lab=vccd1} -N 3890 -460 3960 -460 { lab=vccd1} -N 3890 -130 3890 -60 { lab=vccd1} -N 3890 -130 3950 -130 { lab=vccd1} -N 3830 -130 3830 -60 { lab=io_analog[4]} -N 3790 -130 3830 -130 { lab=io_analog[4]} -N 3860 100 3860 150 { lab=vssa1} -N 3800 150 3860 150 { lab=vssa1} -N 4010 -10 4110 -10 { lab=gpio_analog[7]} -N 4010 20 4110 20 { lab=io_out[15]} -N 4010 50 4110 50 { lab=io_out[16]} -N 4010 -340 4130 -340 { lab=gpio_analog[3]} -N 4010 -310 4130 -310 { lab=io_out[11]} -N 4010 -280 4130 -280 { lab=io_out[12]} -N 3670 300 3670 340 { lab=io_clamp_low[2]} -N 3670 400 3670 420 { lab=vssa1} -N 3670 440 3670 460 { lab=io_clamp_high[2]} -N 3670 520 3670 530 { lab=vssa1} -N 3670 570 3670 590 { lab=io_clamp_low[1]} -N 3670 650 3670 670 { lab=vssa1} -N 4160 300 4160 330 { lab=io_clamp_high[1]} -N 4160 390 4160 410 { lab=vssa1} -N 4160 440 4160 460 { lab=io_clamp_low[0]} -N 4160 520 4160 530 { lab=vssa1} -N 4160 550 4160 560 { lab=io_clamp_high[0]} -N 4160 620 4160 640 { lab=io_analog[4]} -N 3630 300 3670 300 { lab=io_clamp_low[2]} -N 3630 420 3670 420 { lab=vssa1} -N 3630 440 3670 440 { lab=io_clamp_high[2]} -N 3630 530 3670 530 { lab=vssa1} -N 3630 570 3670 570 { lab=io_clamp_low[1]} -N 3630 670 3670 670 { lab=vssa1} -N 4130 300 4160 300 { lab=io_clamp_high[1]} -N 4130 410 4160 410 { lab=vssa1} -N 4130 440 4160 440 { lab=io_clamp_low[0]} -N 4130 530 4160 530 { lab=vssa1} -N 4130 550 4160 550 { lab=io_clamp_high[0]} -N 4130 640 4160 640 { lab=io_analog[4]} -N 3670 710 3670 750 { lab=io_oeb[12]} -N 3670 810 3670 830 { lab=vssd1} -N 3670 850 3670 870 { lab=io_oeb[16]} -N 3670 930 3670 940 { lab=vssd1} -N 4160 710 4160 740 { lab=io_oeb[11]} -N 4160 800 4160 820 { lab=vssd1} -N 4160 850 4160 870 { lab=#net1} -N 4160 930 4160 940 { lab=vssd1} -N 3630 710 3670 710 { lab=io_oeb[12]} -N 3630 830 3670 830 { lab=vssd1} -N 3630 850 3670 850 { lab=io_oeb[16]} -N 3630 940 3670 940 { lab=vssd1} -N 4130 710 4160 710 { lab=io_oeb[11]} -N 4130 820 4160 820 { lab=vssd1} -N 4130 850 4160 850 { lab=#net1} -N 4130 940 4160 940 { lab=vssd1} -C {example_por.sym} 3860 -310 0 0 {name=x1} -C {example_por.sym} 3860 20 0 0 {name=x2} -C {devices/iopin.sym} 3240 -470 0 0 {name=p1 lab=vdda1} -C {devices/iopin.sym} 3240 -440 0 0 {name=p2 lab=vdda2} -C {devices/iopin.sym} 3240 -410 0 0 {name=p3 lab=vssa1} -C {devices/iopin.sym} 3240 -380 0 0 {name=p4 lab=vssa2} -C {devices/iopin.sym} 3240 -350 0 0 {name=p5 lab=vccd1} -C {devices/iopin.sym} 3240 -320 0 0 {name=p6 lab=vccd2} -C {devices/iopin.sym} 3240 -290 0 0 {name=p7 lab=vssd1} -C {devices/iopin.sym} 3240 -260 0 0 {name=p8 lab=vssd2} -C {devices/ipin.sym} 3290 -190 0 0 {name=p9 lab=wb_clk_i} -C {devices/ipin.sym} 3290 -160 0 0 {name=p10 lab=wb_rst_i} -C {devices/ipin.sym} 3290 -130 0 0 {name=p11 lab=wbs_stb_i} -C {devices/ipin.sym} 3290 -100 0 0 {name=p12 lab=wbs_cyc_i} -C {devices/ipin.sym} 3290 -70 0 0 {name=p13 lab=wbs_we_i} -C {devices/ipin.sym} 3290 -40 0 0 {name=p14 lab=wbs_sel_i[3:0]} -C {devices/ipin.sym} 3290 -10 0 0 {name=p15 lab=wbs_dat_i[31:0]} -C {devices/ipin.sym} 3290 20 0 0 {name=p16 lab=wbs_adr_i[31:0]} -C {devices/opin.sym} 3280 80 0 0 {name=p17 lab=wbs_ack_o} -C {devices/opin.sym} 3280 110 0 0 {name=p18 lab=wbs_dat_o[31:0]} -C {devices/ipin.sym} 3290 150 0 0 {name=p19 lab=la_data_in[127:0]} -C {devices/opin.sym} 3280 180 0 0 {name=p20 lab=la_data_out[127:0]} -C {devices/ipin.sym} 3290 260 0 0 {name=p21 lab=io_in[26:0]} -C {devices/ipin.sym} 3290 290 0 0 {name=p22 lab=io_in_3v3[26:0]} -C {devices/ipin.sym} 3280 570 0 0 {name=p23 lab=user_clock2} -C {devices/opin.sym} 3280 320 0 0 {name=p24 lab=io_out[26:0]} -C {devices/opin.sym} 3280 350 0 0 {name=p25 lab=io_oeb[26:0]} -C {devices/iopin.sym} 3250 410 0 0 {name=p26 lab=gpio_analog[17:0]} -C {devices/iopin.sym} 3250 440 0 0 {name=p27 lab=gpio_noesd[17:0]} -C {devices/iopin.sym} 3250 470 0 0 {name=p29 lab=io_analog[10:0]} -C {devices/iopin.sym} 3250 500 0 0 {name=p30 lab=io_clamp_high[2:0]} -C {devices/iopin.sym} 3250 530 0 0 {name=p31 lab=io_clamp_low[2:0]} -C {devices/opin.sym} 3270 600 0 0 {name=p32 lab=user_irq[2:0]} -C {devices/ipin.sym} 3290 210 0 0 {name=p28 lab=la_oenb[127:0]} -C {devices/lab_pin.sym} 3730 -460 0 0 {name=l1 sig_type=std_logic lab=vdda1} -C {devices/lab_pin.sym} 3770 -180 0 0 {name=l2 sig_type=std_logic lab=vssa1} -C {devices/lab_pin.sym} 3960 -460 0 1 {name=l3 sig_type=std_logic lab=vccd1} -C {devices/lab_pin.sym} 3950 -130 0 1 {name=l4 sig_type=std_logic lab=vccd1} -C {devices/lab_pin.sym} 3790 -130 0 0 {name=l5 sig_type=std_logic lab=io_analog[4]} -C {devices/lab_pin.sym} 3800 150 0 0 {name=l6 sig_type=std_logic lab=vssa1} -C {devices/lab_pin.sym} 4130 -340 0 1 {name=l7 sig_type=std_logic lab=gpio_analog[3]} -C {devices/lab_pin.sym} 4130 -310 0 1 {name=l8 sig_type=std_logic lab=io_out[11]} -C {devices/lab_pin.sym} 4130 -280 0 1 {name=l9 sig_type=std_logic lab=io_out[12]} -C {devices/lab_pin.sym} 4110 -10 0 1 {name=l10 sig_type=std_logic lab=gpio_analog[7]} -C {devices/lab_pin.sym} 4110 20 0 1 {name=l11 sig_type=std_logic lab=io_out[15]} -C {devices/lab_pin.sym} 4110 50 0 1 {name=l12 sig_type=std_logic lab=io_out[16]} -C {sky130_fd_pr/res_generic_m1.sym} 3670 370 0 0 {name=R1 -W=11 -L=0.25 -model=res_generic_m3 -mult=1} -C {sky130_fd_pr/res_generic_m1.sym} 3670 490 0 0 {name=R2 -W=11 -L=0.25 -model=res_generic_m3 -mult=1} -C {sky130_fd_pr/res_generic_m1.sym} 3670 620 0 0 {name=R4 -W=11 -L=0.25 -model=res_generic_m3 -mult=1} -C {sky130_fd_pr/res_generic_m1.sym} 4160 360 0 0 {name=R5 -W=11 -L=0.25 -model=res_generic_m3 -mult=1} -C {sky130_fd_pr/res_generic_m1.sym} 4160 490 0 0 {name=R6 -W=11 -L=0.25 -model=res_generic_m3 -mult=1} -C {sky130_fd_pr/res_generic_m1.sym} 4160 590 0 0 {name=R7 -W=11 -L=0.25 -model=res_generic_m3 -mult=1} -C {devices/lab_pin.sym} 3630 300 0 0 {name=l13 sig_type=std_logic lab=io_clamp_low[2]} -C {devices/lab_pin.sym} 3630 440 0 0 {name=l14 sig_type=std_logic lab=io_clamp_high[2]} -C {devices/lab_pin.sym} 3630 570 0 0 {name=l15 sig_type=std_logic lab=io_clamp_low[1]} -C {devices/lab_pin.sym} 4130 300 0 0 {name=l16 sig_type=std_logic lab=io_clamp_high[1]} -C {devices/lab_pin.sym} 4130 440 0 0 {name=l17 sig_type=std_logic lab=io_clamp_low[0]} -C {devices/lab_pin.sym} 3630 420 0 0 {name=l18 sig_type=std_logic lab=vssa1} -C {devices/lab_pin.sym} 3630 530 0 0 {name=l19 sig_type=std_logic lab=vssa1} -C {devices/lab_pin.sym} 4130 410 0 0 {name=l20 sig_type=std_logic lab=vssa1} -C {devices/lab_pin.sym} 4130 530 0 0 {name=l21 sig_type=std_logic lab=vssa1} -C {devices/lab_pin.sym} 3630 670 0 0 {name=l22 sig_type=std_logic lab=vssa1} -C {devices/lab_pin.sym} 4130 550 0 0 {name=l23 sig_type=std_logic lab=io_clamp_high[0]} -C {devices/lab_pin.sym} 4130 640 0 0 {name=l24 sig_type=std_logic lab=io_analog[4]} -C {sky130_fd_pr/res_generic_m1.sym} 3670 780 0 0 {name=R8 -W=0.56 -L=0.49 -model=res_generic_m3 -mult=1} -C {sky130_fd_pr/res_generic_m1.sym} 3670 900 0 0 {name=R9 -W=0.56 -L=0.31 -model=res_generic_m3 -mult=1} -C {sky130_fd_pr/res_generic_m1.sym} 4160 770 0 0 {name=R11 -W=0.56 -L=0.58 -model=res_generic_m3 -mult=1} -C {sky130_fd_pr/res_generic_m1.sym} 4160 900 0 0 {name=R12 -W=0.56 -L=0.6 -model=res_generic_m3 -mult=1} -C {devices/lab_pin.sym} 4130 850 0 0 {name=l25 sig_type=std_logic lab=io_oeb[15]} -C {devices/lab_pin.sym} 3630 850 0 0 {name=l26 sig_type=std_logic lab=io_oeb[16]} -C {devices/lab_pin.sym} 4130 710 0 0 {name=l27 sig_type=std_logic lab=io_oeb[11]} -C {devices/lab_pin.sym} 3630 710 0 0 {name=l28 sig_type=std_logic lab=io_oeb[12]} -C {devices/lab_pin.sym} 3630 830 0 0 {name=l29 sig_type=std_logic lab=vssd1} -C {devices/lab_pin.sym} 3630 940 0 0 {name=l30 sig_type=std_logic lab=vssd1} -C {devices/lab_pin.sym} 4130 820 0 0 {name=l31 sig_type=std_logic lab=vssd1} -C {devices/lab_pin.sym} 4130 940 0 0 {name=l32 sig_type=std_logic lab=vssd1} +N 82.5 -230 132.5 -230 { lab=VSS} +N -520 -540 -520 -180 { lab=io_analog[0]} +N -280 -540 -280 -180 { lab=io_analog[1]} +N -590 -140 -190 -140 { lab=io_analog[5]} +N -590 -380 -190 -380 { lab=io_analog[4]} +N -430 -440 -430 -420 { lab=VSS} +N -190 -440 -190 -420 { lab=VSS} +N -430 -200 -430 -180 { lab=VSS} +N -190 -200 -190 -180 { lab=VSS} +N 132.5 -230 142.5 -230 { lab=vssa1} +N -400 -100 -60 -100 { lab=io_analog[3]} +N -400 -340 -60 -340 { lab=io_analog[2]} +N -400 -420 -400 -340 { lab=io_analog[2]} +N -160 -420 -160 -340 { lab=io_analog[2]} +N -400 -180 -400 -100 { lab=io_analog[3]} +N -160 -180 -160 -100 { lab=io_analog[3]} +C {reram.sym} -250 -420 3 0 {name=RERAM1 +device=RERAM +m=1} +C {reram.sym} -490 -420 3 0 {name=RERAM2 +device=RERAM +m=1} +C {reram.sym} -250 -180 3 0 {name=RERAM3 +device=RERAM +m=1} +C {reram.sym} -490 -180 3 0 {name=RERAM4 +device=RERAM +m=1} +C {sky130/nfet_03v3_nvt.sym} -430 -400 3 0 {name=M1 +L=0.5 +W=1 +nf=1 +mult=1 +sa=0 sb=0 sd=0 +model=nfet_01v8 +spiceprefix=X +} +C {sky130/nfet_03v3_nvt.sym} -190 -400 3 0 {name=M2 +L=0.5 +W=1 +nf=1 +mult=1 +sa=0 sb=0 sd=0 +model=nfet_01v8 +spiceprefix=X +} +C {sky130/nfet_03v3_nvt.sym} -430 -160 3 0 {name=M3 +L=0.5 +W=1 +nf=1 +mult=1 +sa=0 sb=0 sd=0 +model=nfet_01v8 +spiceprefix=X +} +C {sky130/nfet_03v3_nvt.sym} -190 -160 3 0 {name=M4 +L=0.5 +W=1 +nf=1 +mult=1 +sa=0 sb=0 sd=0 +model=nfet_01v8 +spiceprefix=X +} +C {devices/iopin.sym} -280 -540 0 0 {name=p1 lab=io_analog[1]} +C {devices/iopin.sym} -520 -540 0 0 {name=p2 lab=io_analog[0]} +C {devices/iopin.sym} -580 -380 2 0 {name=p3 lab=io_analog[4]} +C {devices/iopin.sym} -580 -140 2 0 {name=p4 lab=io_analog[5]} +C {devices/iopin.sym} -60 -340 0 0 {name=p5 lab=io_analog[2]} +C {devices/iopin.sym} -60 -100 0 0 {name=p6 lab=io_analog[3]} +C {devices/iopin.sym} 125 -230 0 0 {name=p9 lab=vssa1} +C {devices/lab_wire.sym} 82.5 -230 0 0 {name=l1 lab=VSS} +C {devices/lab_wire.sym} -430 -200 1 0 {name=l2 lab=VSS} +C {devices/lab_wire.sym} -430 -440 1 0 {name=l3 lab=VSS} +C {devices/lab_wire.sym} -190 -440 1 0 {name=l4 lab=VSS} +C {devices/lab_wire.sym} -190 -200 1 0 {name=l5 lab=VSS} +C {devices/code_shown.sym} 55 -377.5 0 0 {name=seRAM only_toplevel=false value=".model RERAM sky130_fd_pr_reram__reram_cell"}