| **.subckt tb_top_pll_v3_pex_c |
| VSS vss GND {vss} |
| VDD vdd vss {vdd} |
| Vref A vss PULSE(0 {vin} 0 1p 1p {Tref/2} {Tref}) DC {vin} AC 0 |
| VD0 D0 vss {vd0} |
| I0 net1 vss {iref} |
| C1 out_to_pad vss 20p m=1 |
| VD1 D1 vss {vd1} |
| VMC S1 vss {vin} |
| VMC1 S0 vss {vin} |
| VMC2 MC vss {vin} |
| x1 vdd net1 vss iref_cp net2 net3 net4 net5 net6 net7 net8 net9 net10 bias_pex_c |
| x2 iref_cp vss vdd vco_out vctrl Up QA out_to_buffer A nUp out_to_pad Down nDown QB D0 lf_vc |
| + vco_buffer_out biasp pswitch nswitch pfd_reset S0 MC S1 out_by_2 out_to_div out_div n_out_by_2 n_out_div_2 |
| + out_div_2 out_buffer_div_2 n_out_buffer_div_2 n_clk_0 s1n s0n clk_2_f clk_d clk_out_div clk_5 clk_pre n_clk_1 |
| + clk_1 clk_0 D1 top_pll_v3_pex_c |
| **** begin user architecture code |
| |
| |
| |
| * Parameters |
| .param kp = 1.0 |
| .param vdd = kp*1.8 |
| .param vss = 0.0 |
| .param vin = vdd |
| .param fref = 100e6 |
| .param Tref = 1/fref |
| .param iref = 100u |
| .param vd0 = 0.0 |
| .param vd1 = 0.0 |
| |
| .options TEMP = 100.0 |
| .options RSHUNT = 1e20 |
| *.options GMIN = 1e-10 |
| |
| * Models |
| .lib ~/skywater/skywater-pdk/libraries/sky130_fd_pr_ngspice/latest/models/corners/sky130.lib SS |
| .include ~/caravel_analog_fulgor/xschem/simulations/bias_pex_c.spice |
| .include ~/caravel_analog_fulgor/xschem/simulations/top_pll_v3_pex_c.spice |
| |
| * Data to save |
| |
| .ic v(A) = 0.0 |
| .ic v(QA) = 0.0 |
| .ic v(QB) = 0.0 |
| .ic v(Up) = 0.0 |
| .ic v(nUp) = 0.0 |
| .ic v(Down) = 0.0 |
| .ic v(nDown) = 0.0 |
| .ic v(vctrl) = 0.0 |
| .ic v(D0) = 0.0 |
| .ic v(vco_out) = 0.0 |
| .ic v(vco_buffer_out) = 0.0 |
| .ic v(out_to_div) = 0.0 |
| .ic v(out_to_pad) = 0.0 |
| .ic v(out_div_2) = 0.0 |
| .ic v(n_out_div_2) = 0.0 |
| .ic v(out_buffer_div_2) = 0.0 |
| .ic v(n_out_buffer_div_2) = 0.0 |
| .ic v(out_by_2) = 0.0 |
| .ic v(n_out_by_2) = 0.0 |
| .ic v(clk_0) = 0.0 |
| .ic v(n_clk_0) = 0.0 |
| .ic v(clk_1) = 0.0 |
| .ic v(n_clk_1) = 0.0 |
| .ic v(clk_pre) = 0.0 |
| .ic v(clk_5) = 0.0 |
| .ic v(clk_d) = 0.0 |
| .ic v(clk_2_f) = 0.0 |
| .ic v(s1n) = 0.0 |
| .ic v(s0n) = 0.0 |
| .ic v(out_div) = 0.0 |
| |
| |
| * Simulation |
| .control |
| tran 0.01ns 1.5us |
| meas tran Tosc trig v(out_to_pad) val=0.9 fall=1005 targ v(out_to_pad) val=0.9 fall=1105 |
| let T = wTosc/100.0 |
| let f = 1/T |
| echo . |
| echo ------ PLL simulation ------ |
| print T f |
| *write tb_PLL_tran.raw |
| plot v(vctrl) v(pfd_reset)+2 v(nDown)+4 v(Down)+6 v(nUp)+8 v(Up)+10 v(QA)+12 v(QB)+12 v(A)+14 |
| + v(out_div)+16 |
| plot v(out_to_pad)+12 v(out_to_buffer)+9 v(out_to_div)+6 v(out_by_2)+3 v(out_div) |
| plot v(out_div) v(out_by_2) v(out_to_div) |
| plot v(vctrl) |
| plot v(pswitch) v(nswitch) xlimit 1.4us 1.444us |
| .endc |
| |
| |
| |
| **** end user architecture code |
| **.ends |
| .GLOBAL GND |
| ** flattened .save nodes |
| .end |